omp-fabric 0.85.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 (772) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -0
  3. package/THIRD_PARTY_NOTICES.md +33 -0
  4. package/dist/activity/store.d.ts +32 -0
  5. package/dist/activity/store.d.ts.map +1 -0
  6. package/dist/activity/types.d.ts +104 -0
  7. package/dist/activity/types.d.ts.map +1 -0
  8. package/dist/actors/binding-store.d.ts +17 -0
  9. package/dist/actors/binding-store.d.ts.map +1 -0
  10. package/dist/actors/context.d.ts +13 -0
  11. package/dist/actors/context.d.ts.map +1 -0
  12. package/dist/actors/delivery-policy.d.ts +8 -0
  13. package/dist/actors/delivery-policy.d.ts.map +1 -0
  14. package/dist/actors/directory.d.ts +47 -0
  15. package/dist/actors/directory.d.ts.map +1 -0
  16. package/dist/actors/global-registry.d.ts +47 -0
  17. package/dist/actors/global-registry.d.ts.map +1 -0
  18. package/dist/actors/host-event-observer.d.ts +5 -0
  19. package/dist/actors/host-event-observer.d.ts.map +1 -0
  20. package/dist/actors/host-event-payload.d.ts +14 -0
  21. package/dist/actors/host-event-payload.d.ts.map +1 -0
  22. package/dist/actors/manager.d.ts +175 -0
  23. package/dist/actors/manager.d.ts.map +1 -0
  24. package/dist/actors/predicate.d.ts +7 -0
  25. package/dist/actors/predicate.d.ts.map +1 -0
  26. package/dist/actors/types.d.ts +211 -0
  27. package/dist/actors/types.d.ts.map +1 -0
  28. package/dist/agents/bash-worktree-add.d.ts +24 -0
  29. package/dist/agents/bash-worktree-add.d.ts.map +1 -0
  30. package/dist/agents/budget-ledger.d.ts +88 -0
  31. package/dist/agents/budget-ledger.d.ts.map +1 -0
  32. package/dist/agents/claude-cli.d.ts +32 -0
  33. package/dist/agents/claude-cli.d.ts.map +1 -0
  34. package/dist/agents/claude-cli.js +17 -0
  35. package/dist/agents/claude-cli.js.map +7 -0
  36. package/dist/agents/clone-first-worktree.d.ts +17 -0
  37. package/dist/agents/clone-first-worktree.d.ts.map +1 -0
  38. package/dist/agents/compact-control.d.ts +32 -0
  39. package/dist/agents/compact-control.d.ts.map +1 -0
  40. package/dist/agents/compact-control.js +127 -0
  41. package/dist/agents/compact-control.js.map +7 -0
  42. package/dist/agents/constants.d.ts +5 -0
  43. package/dist/agents/constants.d.ts.map +1 -0
  44. package/dist/agents/cow-clone.d.ts +8 -0
  45. package/dist/agents/cow-clone.d.ts.map +1 -0
  46. package/dist/agents/handoff.d.ts +19 -0
  47. package/dist/agents/handoff.d.ts.map +1 -0
  48. package/dist/agents/manager.d.ts +68 -0
  49. package/dist/agents/manager.d.ts.map +1 -0
  50. package/dist/agents/omp-binary.d.ts +7 -0
  51. package/dist/agents/omp-binary.d.ts.map +1 -0
  52. package/dist/agents/rm.d.ts +15 -0
  53. package/dist/agents/rm.d.ts.map +1 -0
  54. package/dist/agents/semaphore.d.ts +7 -0
  55. package/dist/agents/semaphore.d.ts.map +1 -0
  56. package/dist/agents/session-export.d.ts +9 -0
  57. package/dist/agents/session-export.d.ts.map +1 -0
  58. package/dist/agents/thinking-transfer.d.ts +39 -0
  59. package/dist/agents/thinking-transfer.d.ts.map +1 -0
  60. package/dist/agents/transports/herdr-transport.d.ts +10 -0
  61. package/dist/agents/transports/herdr-transport.d.ts.map +1 -0
  62. package/dist/agents/transports/localterm-transport.d.ts +7 -0
  63. package/dist/agents/transports/localterm-transport.d.ts.map +1 -0
  64. package/dist/agents/transports/process-transport.d.ts +7 -0
  65. package/dist/agents/transports/process-transport.d.ts.map +1 -0
  66. package/dist/agents/transports/process-utils.d.ts +29 -0
  67. package/dist/agents/transports/process-utils.d.ts.map +1 -0
  68. package/dist/agents/transports/screen-transport.d.ts +7 -0
  69. package/dist/agents/transports/screen-transport.d.ts.map +1 -0
  70. package/dist/agents/transports/tmux-transport.d.ts +7 -0
  71. package/dist/agents/transports/tmux-transport.d.ts.map +1 -0
  72. package/dist/agents/types.d.ts +251 -0
  73. package/dist/agents/types.d.ts.map +1 -0
  74. package/dist/agents/veda-cli.d.ts +22 -0
  75. package/dist/agents/veda-cli.d.ts.map +1 -0
  76. package/dist/agents/veda-cli.js +13 -0
  77. package/dist/agents/veda-cli.js.map +7 -0
  78. package/dist/agents/worktree-manager.d.ts +14 -0
  79. package/dist/agents/worktree-manager.d.ts.map +1 -0
  80. package/dist/agents/worktree-paths.d.ts +5 -0
  81. package/dist/agents/worktree-paths.d.ts.map +1 -0
  82. package/dist/async-settlement.d.ts +4 -0
  83. package/dist/async-settlement.d.ts.map +1 -0
  84. package/dist/audit/details.d.ts +82 -0
  85. package/dist/audit/details.d.ts.map +1 -0
  86. package/dist/audit/index.d.ts +4 -0
  87. package/dist/audit/index.d.ts.map +1 -0
  88. package/dist/audit/projection.d.ts +20 -0
  89. package/dist/audit/projection.d.ts.map +1 -0
  90. package/dist/audit/trace.d.ts +95 -0
  91. package/dist/audit/trace.d.ts.map +1 -0
  92. package/dist/capture/catalog.d.ts +29 -0
  93. package/dist/capture/catalog.d.ts.map +1 -0
  94. package/dist/capture/interceptor.d.ts +21 -0
  95. package/dist/capture/interceptor.d.ts.map +1 -0
  96. package/dist/capture/wrapper.d.ts +15 -0
  97. package/dist/capture/wrapper.d.ts.map +1 -0
  98. package/dist/chunks/chunk-2GQC324T.js +5001 -0
  99. package/dist/chunks/chunk-2GQC324T.js.map +7 -0
  100. package/dist/chunks/chunk-2KEWFW56.js +1229 -0
  101. package/dist/chunks/chunk-2KEWFW56.js.map +7 -0
  102. package/dist/chunks/chunk-3J7BKUNG.js +354 -0
  103. package/dist/chunks/chunk-3J7BKUNG.js.map +7 -0
  104. package/dist/chunks/chunk-4A4MVZQW.js +253 -0
  105. package/dist/chunks/chunk-4A4MVZQW.js.map +7 -0
  106. package/dist/chunks/chunk-4HQDSTHN.js +221 -0
  107. package/dist/chunks/chunk-4HQDSTHN.js.map +7 -0
  108. package/dist/chunks/chunk-4LEDA76O.js +688 -0
  109. package/dist/chunks/chunk-4LEDA76O.js.map +7 -0
  110. package/dist/chunks/chunk-5GTPD4BA.js +1318 -0
  111. package/dist/chunks/chunk-5GTPD4BA.js.map +7 -0
  112. package/dist/chunks/chunk-5IWFSDU5.js +87 -0
  113. package/dist/chunks/chunk-5IWFSDU5.js.map +7 -0
  114. package/dist/chunks/chunk-6N4XGAZY.js +21 -0
  115. package/dist/chunks/chunk-6N4XGAZY.js.map +7 -0
  116. package/dist/chunks/chunk-6QBPSZJ5.js +647 -0
  117. package/dist/chunks/chunk-6QBPSZJ5.js.map +7 -0
  118. package/dist/chunks/chunk-6X6WUU2K.js +73 -0
  119. package/dist/chunks/chunk-6X6WUU2K.js.map +7 -0
  120. package/dist/chunks/chunk-7363CD5A.js +38 -0
  121. package/dist/chunks/chunk-7363CD5A.js.map +7 -0
  122. package/dist/chunks/chunk-77FQHHZD.js +231 -0
  123. package/dist/chunks/chunk-77FQHHZD.js.map +7 -0
  124. package/dist/chunks/chunk-7BIA5BJN.js +112 -0
  125. package/dist/chunks/chunk-7BIA5BJN.js.map +7 -0
  126. package/dist/chunks/chunk-7BOAOKWH.js +64 -0
  127. package/dist/chunks/chunk-7BOAOKWH.js.map +7 -0
  128. package/dist/chunks/chunk-7TB7NXSL.js +58 -0
  129. package/dist/chunks/chunk-7TB7NXSL.js.map +7 -0
  130. package/dist/chunks/chunk-7VIQNUPS.js +17 -0
  131. package/dist/chunks/chunk-7VIQNUPS.js.map +7 -0
  132. package/dist/chunks/chunk-CT2AJ2UI.js +225 -0
  133. package/dist/chunks/chunk-CT2AJ2UI.js.map +7 -0
  134. package/dist/chunks/chunk-DLXPTBPL.js +151 -0
  135. package/dist/chunks/chunk-DLXPTBPL.js.map +7 -0
  136. package/dist/chunks/chunk-ED3BRM6P.js +17 -0
  137. package/dist/chunks/chunk-ED3BRM6P.js.map +7 -0
  138. package/dist/chunks/chunk-G2IBGGBM.js +42 -0
  139. package/dist/chunks/chunk-G2IBGGBM.js.map +7 -0
  140. package/dist/chunks/chunk-GKOFZ76R.js +1596 -0
  141. package/dist/chunks/chunk-GKOFZ76R.js.map +7 -0
  142. package/dist/chunks/chunk-HDJBUXDX.js +1102 -0
  143. package/dist/chunks/chunk-HDJBUXDX.js.map +7 -0
  144. package/dist/chunks/chunk-IGVDD2HT.js +10 -0
  145. package/dist/chunks/chunk-IGVDD2HT.js.map +7 -0
  146. package/dist/chunks/chunk-JHKOG5GS.js +187 -0
  147. package/dist/chunks/chunk-JHKOG5GS.js.map +7 -0
  148. package/dist/chunks/chunk-JP4LIZFT.js +1334 -0
  149. package/dist/chunks/chunk-JP4LIZFT.js.map +7 -0
  150. package/dist/chunks/chunk-JSBTB3P6.js +127 -0
  151. package/dist/chunks/chunk-JSBTB3P6.js.map +7 -0
  152. package/dist/chunks/chunk-KAD7UWT2.js +99 -0
  153. package/dist/chunks/chunk-KAD7UWT2.js.map +7 -0
  154. package/dist/chunks/chunk-KIH3KLZU.js +95 -0
  155. package/dist/chunks/chunk-KIH3KLZU.js.map +7 -0
  156. package/dist/chunks/chunk-KIREBD2V.js +2208 -0
  157. package/dist/chunks/chunk-KIREBD2V.js.map +7 -0
  158. package/dist/chunks/chunk-LMAVZN7J.js +8 -0
  159. package/dist/chunks/chunk-LMAVZN7J.js.map +7 -0
  160. package/dist/chunks/chunk-NCPJZXLM.js +57 -0
  161. package/dist/chunks/chunk-NCPJZXLM.js.map +7 -0
  162. package/dist/chunks/chunk-OJZNMROB.js +195 -0
  163. package/dist/chunks/chunk-OJZNMROB.js.map +7 -0
  164. package/dist/chunks/chunk-OPTP4PSE.js +469 -0
  165. package/dist/chunks/chunk-OPTP4PSE.js.map +7 -0
  166. package/dist/chunks/chunk-QPXSCMTG.js +24 -0
  167. package/dist/chunks/chunk-QPXSCMTG.js.map +7 -0
  168. package/dist/chunks/chunk-ROKMBLGN.js +1265 -0
  169. package/dist/chunks/chunk-ROKMBLGN.js.map +7 -0
  170. package/dist/chunks/chunk-SXMWV447.js +2445 -0
  171. package/dist/chunks/chunk-SXMWV447.js.map +7 -0
  172. package/dist/chunks/chunk-T5ZA5YRU.js +786 -0
  173. package/dist/chunks/chunk-T5ZA5YRU.js.map +7 -0
  174. package/dist/chunks/chunk-T6OAX4FO.js +1835 -0
  175. package/dist/chunks/chunk-T6OAX4FO.js.map +7 -0
  176. package/dist/chunks/chunk-U5FYOMG5.js +119 -0
  177. package/dist/chunks/chunk-U5FYOMG5.js.map +7 -0
  178. package/dist/chunks/chunk-UOSJZXJV.js +142 -0
  179. package/dist/chunks/chunk-UOSJZXJV.js.map +7 -0
  180. package/dist/chunks/chunk-UPCARIJP.js +6627 -0
  181. package/dist/chunks/chunk-UPCARIJP.js.map +7 -0
  182. package/dist/chunks/chunk-VPPIJRNZ.js +50 -0
  183. package/dist/chunks/chunk-VPPIJRNZ.js.map +7 -0
  184. package/dist/chunks/chunk-XU5Z4JCQ.js +297 -0
  185. package/dist/chunks/chunk-XU5Z4JCQ.js.map +7 -0
  186. package/dist/chunks/chunk-YWEXP724.js +427 -0
  187. package/dist/chunks/chunk-YWEXP724.js.map +7 -0
  188. package/dist/chunks/chunk-YZZIKJX6.js +60 -0
  189. package/dist/chunks/chunk-YZZIKJX6.js.map +7 -0
  190. package/dist/chunks/chunk-ZNAJDPT7.js +2203 -0
  191. package/dist/chunks/chunk-ZNAJDPT7.js.map +7 -0
  192. package/dist/chunks/chunk-ZTM45GH5.js +163 -0
  193. package/dist/chunks/chunk-ZTM45GH5.js.map +7 -0
  194. package/dist/commands/fabric.d.ts +17 -0
  195. package/dist/commands/fabric.d.ts.map +1 -0
  196. package/dist/compaction/bounds.d.ts +23 -0
  197. package/dist/compaction/bounds.d.ts.map +1 -0
  198. package/dist/compaction/branch-details.d.ts +83 -0
  199. package/dist/compaction/branch-details.d.ts.map +1 -0
  200. package/dist/compaction/branch-summary.d.ts +9 -0
  201. package/dist/compaction/branch-summary.d.ts.map +1 -0
  202. package/dist/compaction/enrichers.d.ts +10 -0
  203. package/dist/compaction/enrichers.d.ts.map +1 -0
  204. package/dist/compaction/hook.d.ts +98 -0
  205. package/dist/compaction/hook.d.ts.map +1 -0
  206. package/dist/compaction/hook.js +19 -0
  207. package/dist/compaction/hook.js.map +7 -0
  208. package/dist/compaction/instructions.d.ts +38 -0
  209. package/dist/compaction/instructions.d.ts.map +1 -0
  210. package/dist/compaction/normalize.d.ts +83 -0
  211. package/dist/compaction/normalize.d.ts.map +1 -0
  212. package/dist/compaction/projections.d.ts +31 -0
  213. package/dist/compaction/projections.d.ts.map +1 -0
  214. package/dist/compaction/qa.d.ts +27 -0
  215. package/dist/compaction/qa.d.ts.map +1 -0
  216. package/dist/compaction/render.d.ts +10 -0
  217. package/dist/compaction/render.d.ts.map +1 -0
  218. package/dist/compaction/threshold.d.ts +5 -0
  219. package/dist/compaction/threshold.d.ts.map +1 -0
  220. package/dist/compaction/trace-events.d.ts +23 -0
  221. package/dist/compaction/trace-events.d.ts.map +1 -0
  222. package/dist/components/catalog.d.ts +25 -0
  223. package/dist/components/catalog.d.ts.map +1 -0
  224. package/dist/components/effect-scope.d.ts +31 -0
  225. package/dist/components/effect-scope.d.ts.map +1 -0
  226. package/dist/components/loader.d.ts +27 -0
  227. package/dist/components/loader.d.ts.map +1 -0
  228. package/dist/components/model-guidance.d.ts +48 -0
  229. package/dist/components/model-guidance.d.ts.map +1 -0
  230. package/dist/components/provider-component.d.ts +31 -0
  231. package/dist/components/provider-component.d.ts.map +1 -0
  232. package/dist/components/supervisor.d.ts +29 -0
  233. package/dist/components/supervisor.d.ts.map +1 -0
  234. package/dist/components/types.d.ts +140 -0
  235. package/dist/components/types.d.ts.map +1 -0
  236. package/dist/config-migrations.d.ts +11 -0
  237. package/dist/config-migrations.d.ts.map +1 -0
  238. package/dist/config.d.ts +269 -0
  239. package/dist/config.d.ts.map +1 -0
  240. package/dist/core/action-registry.d.ts +159 -0
  241. package/dist/core/action-registry.d.ts.map +1 -0
  242. package/dist/core/action-registry.js +17 -0
  243. package/dist/core/action-registry.js.map +7 -0
  244. package/dist/core/action-repair.d.ts +20 -0
  245. package/dist/core/action-repair.d.ts.map +1 -0
  246. package/dist/core/agent-dir.d.ts +2 -0
  247. package/dist/core/agent-dir.d.ts.map +1 -0
  248. package/dist/core/approval-controller.d.ts +30 -0
  249. package/dist/core/approval-controller.d.ts.map +1 -0
  250. package/dist/core/atomic-write.d.ts +15 -0
  251. package/dist/core/atomic-write.d.ts.map +1 -0
  252. package/dist/core/auto-approval-classifier.d.ts +13 -0
  253. package/dist/core/auto-approval-classifier.d.ts.map +1 -0
  254. package/dist/core/call-preview.d.ts +8 -0
  255. package/dist/core/call-preview.d.ts.map +1 -0
  256. package/dist/core/child-tool-allowlist.d.ts +3 -0
  257. package/dist/core/child-tool-allowlist.d.ts.map +1 -0
  258. package/dist/core/compact-controller.d.ts +42 -0
  259. package/dist/core/compact-controller.d.ts.map +1 -0
  260. package/dist/core/core-override-guidance.d.ts +7 -0
  261. package/dist/core/core-override-guidance.d.ts.map +1 -0
  262. package/dist/core/direct-tool-approval.d.ts +19 -0
  263. package/dist/core/direct-tool-approval.d.ts.map +1 -0
  264. package/dist/core/effect-conflict.d.ts +3 -0
  265. package/dist/core/effect-conflict.d.ts.map +1 -0
  266. package/dist/core/file-lock.d.ts +12 -0
  267. package/dist/core/file-lock.d.ts.map +1 -0
  268. package/dist/core/model-resolution.d.ts +62 -0
  269. package/dist/core/model-resolution.d.ts.map +1 -0
  270. package/dist/core/model-usage.d.ts +8 -0
  271. package/dist/core/model-usage.d.ts.map +1 -0
  272. package/dist/core/omp-bash-error.d.ts +11 -0
  273. package/dist/core/omp-bash-error.d.ts.map +1 -0
  274. package/dist/core/omp-tools.d.ts +9 -0
  275. package/dist/core/omp-tools.d.ts.map +1 -0
  276. package/dist/core/provider-bindings.d.ts +47 -0
  277. package/dist/core/provider-bindings.d.ts.map +1 -0
  278. package/dist/core/proxy-contract.d.ts +18 -0
  279. package/dist/core/proxy-contract.d.ts.map +1 -0
  280. package/dist/core/session-context.d.ts +6 -0
  281. package/dist/core/session-context.d.ts.map +1 -0
  282. package/dist/core/skill-block.d.ts +10 -0
  283. package/dist/core/skill-block.d.ts.map +1 -0
  284. package/dist/core/skill-dir.d.ts +4 -0
  285. package/dist/core/skill-dir.d.ts.map +1 -0
  286. package/dist/core/skill-prompt.d.ts +3 -0
  287. package/dist/core/skill-prompt.d.ts.map +1 -0
  288. package/dist/core/skill-references.d.ts +7 -0
  289. package/dist/core/skill-references.d.ts.map +1 -0
  290. package/dist/core/stable-hash.d.ts +3 -0
  291. package/dist/core/stable-hash.d.ts.map +1 -0
  292. package/dist/core/system-guidance.d.ts +12 -0
  293. package/dist/core/system-guidance.d.ts.map +1 -0
  294. package/dist/core/token-math.d.ts +16 -0
  295. package/dist/core/token-math.d.ts.map +1 -0
  296. package/dist/core/tool-ownership.d.ts +52 -0
  297. package/dist/core/tool-ownership.d.ts.map +1 -0
  298. package/dist/core/tool-result-proxy.d.ts +18 -0
  299. package/dist/core/tool-result-proxy.d.ts.map +1 -0
  300. package/dist/entropy/active.d.ts +7 -0
  301. package/dist/entropy/active.d.ts.map +1 -0
  302. package/dist/entropy/compiled-store.d.ts +16 -0
  303. package/dist/entropy/compiled-store.d.ts.map +1 -0
  304. package/dist/entropy/compiled-surface.d.ts +51 -0
  305. package/dist/entropy/compiled-surface.d.ts.map +1 -0
  306. package/dist/entropy/compiler.d.ts +28 -0
  307. package/dist/entropy/compiler.d.ts.map +1 -0
  308. package/dist/entropy/corpus.d.ts +22 -0
  309. package/dist/entropy/corpus.d.ts.map +1 -0
  310. package/dist/entropy/fingerprint.d.ts +9 -0
  311. package/dist/entropy/fingerprint.d.ts.map +1 -0
  312. package/dist/entropy/index.d.ts +15 -0
  313. package/dist/entropy/index.d.ts.map +1 -0
  314. package/dist/entropy/index.js +172 -0
  315. package/dist/entropy/index.js.map +7 -0
  316. package/dist/entropy/meter.d.ts +10 -0
  317. package/dist/entropy/meter.d.ts.map +1 -0
  318. package/dist/entropy/passes.d.ts +13 -0
  319. package/dist/entropy/passes.d.ts.map +1 -0
  320. package/dist/entropy/pool-store.d.ts +15 -0
  321. package/dist/entropy/pool-store.d.ts.map +1 -0
  322. package/dist/entropy/pool.d.ts +41 -0
  323. package/dist/entropy/pool.d.ts.map +1 -0
  324. package/dist/entropy/presentation.d.ts +13 -0
  325. package/dist/entropy/presentation.d.ts.map +1 -0
  326. package/dist/entropy/sessions.d.ts +47 -0
  327. package/dist/entropy/sessions.d.ts.map +1 -0
  328. package/dist/entropy/surface.d.ts +30 -0
  329. package/dist/entropy/surface.d.ts.map +1 -0
  330. package/dist/entropy/trial.d.ts +35 -0
  331. package/dist/entropy/trial.d.ts.map +1 -0
  332. package/dist/entropy/types.d.ts +158 -0
  333. package/dist/entropy/types.d.ts.map +1 -0
  334. package/dist/execution-service.d.ts +63 -0
  335. package/dist/execution-service.d.ts.map +1 -0
  336. package/dist/fabric-exec-arguments.d.ts +5 -0
  337. package/dist/fabric-exec-arguments.d.ts.map +1 -0
  338. package/dist/fabric-exec-tool.d.ts +8 -0
  339. package/dist/fabric-exec-tool.d.ts.map +1 -0
  340. package/dist/fabric-runtime-state.d.ts +90 -0
  341. package/dist/fabric-runtime-state.d.ts.map +1 -0
  342. package/dist/fabric-runtime-state.js +13060 -0
  343. package/dist/fabric-runtime-state.js.map +7 -0
  344. package/dist/fabric-state.d.ts +89 -0
  345. package/dist/fabric-state.d.ts.map +1 -0
  346. package/dist/failure-progress.d.ts +3 -0
  347. package/dist/failure-progress.d.ts.map +1 -0
  348. package/dist/host-compatibility.d.ts +5 -0
  349. package/dist/host-compatibility.d.ts.map +1 -0
  350. package/dist/index.d.ts +6 -0
  351. package/dist/index.d.ts.map +1 -0
  352. package/dist/index.js +5719 -0
  353. package/dist/index.js.map +7 -0
  354. package/dist/lifecycle/broker.d.ts +30 -0
  355. package/dist/lifecycle/broker.d.ts.map +1 -0
  356. package/dist/lifecycle/delivery-scheduler.d.ts +30 -0
  357. package/dist/lifecycle/delivery-scheduler.d.ts.map +1 -0
  358. package/dist/lifecycle/types.d.ts +91 -0
  359. package/dist/lifecycle/types.d.ts.map +1 -0
  360. package/dist/log-tail.d.ts +11 -0
  361. package/dist/log-tail.d.ts.map +1 -0
  362. package/dist/main-agent.d.ts +70 -0
  363. package/dist/main-agent.d.ts.map +1 -0
  364. package/dist/memory/context.d.ts +112 -0
  365. package/dist/memory/context.d.ts.map +1 -0
  366. package/dist/memory/digest.d.ts +48 -0
  367. package/dist/memory/digest.d.ts.map +1 -0
  368. package/dist/memory/digest.js +7 -0
  369. package/dist/memory/digest.js.map +7 -0
  370. package/dist/memory/discovery.d.ts +43 -0
  371. package/dist/memory/discovery.d.ts.map +1 -0
  372. package/dist/memory/discovery.js +23 -0
  373. package/dist/memory/discovery.js.map +7 -0
  374. package/dist/memory/index.d.ts +107 -0
  375. package/dist/memory/index.d.ts.map +1 -0
  376. package/dist/memory/lineage.d.ts +20 -0
  377. package/dist/memory/lineage.d.ts.map +1 -0
  378. package/dist/memory/normalize.d.ts +170 -0
  379. package/dist/memory/normalize.d.ts.map +1 -0
  380. package/dist/memory/normalize.js +22 -0
  381. package/dist/memory/normalize.js.map +7 -0
  382. package/dist/memory/regex.d.ts +19 -0
  383. package/dist/memory/regex.d.ts.map +1 -0
  384. package/dist/memory/search.d.ts +98 -0
  385. package/dist/memory/search.d.ts.map +1 -0
  386. package/dist/memory/search.js +22 -0
  387. package/dist/memory/search.js.map +7 -0
  388. package/dist/memory/tokenize.d.ts +24 -0
  389. package/dist/memory/tokenize.d.ts.map +1 -0
  390. package/dist/mesh/store.d.ts +78 -0
  391. package/dist/mesh/store.d.ts.map +1 -0
  392. package/dist/output-budget.d.ts +12 -0
  393. package/dist/output-budget.d.ts.map +1 -0
  394. package/dist/prewalk/arm.d.ts +8 -0
  395. package/dist/prewalk/arm.d.ts.map +1 -0
  396. package/dist/prewalk/controller.d.ts +60 -0
  397. package/dist/prewalk/controller.d.ts.map +1 -0
  398. package/dist/prewalk/fs-drift.d.ts +19 -0
  399. package/dist/prewalk/fs-drift.d.ts.map +1 -0
  400. package/dist/prewalk/handoff.d.ts +45 -0
  401. package/dist/prewalk/handoff.d.ts.map +1 -0
  402. package/dist/protocol.d.ts +273 -0
  403. package/dist/protocol.d.ts.map +1 -0
  404. package/dist/protocol.js +46 -0
  405. package/dist/protocol.js.map +7 -0
  406. package/dist/providers/agents-actions.d.ts +3 -0
  407. package/dist/providers/agents-actions.d.ts.map +1 -0
  408. package/dist/providers/agents-provider.d.ts +59 -0
  409. package/dist/providers/agents-provider.d.ts.map +1 -0
  410. package/dist/providers/arg-normalization.d.ts +15 -0
  411. package/dist/providers/arg-normalization.d.ts.map +1 -0
  412. package/dist/providers/captured-tools-provider.d.ts +23 -0
  413. package/dist/providers/captured-tools-provider.d.ts.map +1 -0
  414. package/dist/providers/compact-provider.d.ts +14 -0
  415. package/dist/providers/compact-provider.d.ts.map +1 -0
  416. package/dist/providers/components-provider.d.ts +12 -0
  417. package/dist/providers/components-provider.d.ts.map +1 -0
  418. package/dist/providers/mcp-descriptor-cache.d.ts +47 -0
  419. package/dist/providers/mcp-descriptor-cache.d.ts.map +1 -0
  420. package/dist/providers/mcp-provider.d.ts +27 -0
  421. package/dist/providers/mcp-provider.d.ts.map +1 -0
  422. package/dist/providers/memory-provider.d.ts +35 -0
  423. package/dist/providers/memory-provider.d.ts.map +1 -0
  424. package/dist/providers/memory-provider.js +16 -0
  425. package/dist/providers/memory-provider.js.map +7 -0
  426. package/dist/providers/mesh-provider.d.ts +17 -0
  427. package/dist/providers/mesh-provider.d.ts.map +1 -0
  428. package/dist/providers/omp-bash-cwd.d.ts +31 -0
  429. package/dist/providers/omp-bash-cwd.d.ts.map +1 -0
  430. package/dist/providers/omp-tools-provider.d.ts +15 -0
  431. package/dist/providers/omp-tools-provider.d.ts.map +1 -0
  432. package/dist/providers/schema-provider.d.ts +15 -0
  433. package/dist/providers/schema-provider.d.ts.map +1 -0
  434. package/dist/providers/state-provider.d.ts +16 -0
  435. package/dist/providers/state-provider.d.ts.map +1 -0
  436. package/dist/providers/write-diff-limits.d.ts +5 -0
  437. package/dist/providers/write-diff-limits.d.ts.map +1 -0
  438. package/dist/providers/write-preview.d.ts +3 -0
  439. package/dist/providers/write-preview.d.ts.map +1 -0
  440. package/dist/ref-names.d.ts +2 -0
  441. package/dist/ref-names.d.ts.map +1 -0
  442. package/dist/repairs/active.d.ts +7 -0
  443. package/dist/repairs/active.d.ts.map +1 -0
  444. package/dist/repairs/apply.d.ts +7 -0
  445. package/dist/repairs/apply.d.ts.map +1 -0
  446. package/dist/repairs/catalog-digest.d.ts +5 -0
  447. package/dist/repairs/catalog-digest.d.ts.map +1 -0
  448. package/dist/repairs/classify.d.ts +10 -0
  449. package/dist/repairs/classify.d.ts.map +1 -0
  450. package/dist/repairs/compiler.d.ts +33 -0
  451. package/dist/repairs/compiler.d.ts.map +1 -0
  452. package/dist/repairs/promote.d.ts +4 -0
  453. package/dist/repairs/promote.d.ts.map +1 -0
  454. package/dist/repairs/store.d.ts +10 -0
  455. package/dist/repairs/store.d.ts.map +1 -0
  456. package/dist/repairs/types.d.ts +49 -0
  457. package/dist/repairs/types.d.ts.map +1 -0
  458. package/dist/residency/actor-client.d.ts +16 -0
  459. package/dist/residency/actor-client.d.ts.map +1 -0
  460. package/dist/residency/actor-client.js +9 -0
  461. package/dist/residency/actor-client.js.map +7 -0
  462. package/dist/residency/client.d.ts +44 -0
  463. package/dist/residency/client.d.ts.map +1 -0
  464. package/dist/residency/host.d.ts +3 -0
  465. package/dist/residency/host.d.ts.map +1 -0
  466. package/dist/residency/host.js +25 -0
  467. package/dist/residency/host.js.map +7 -0
  468. package/dist/residency/launcher-owner.d.ts +7 -0
  469. package/dist/residency/launcher-owner.d.ts.map +1 -0
  470. package/dist/residency/launcher.d.ts +3 -0
  471. package/dist/residency/launcher.d.ts.map +1 -0
  472. package/dist/residency/launcher.js +152 -0
  473. package/dist/residency/launcher.js.map +7 -0
  474. package/dist/residency/omp-entry.d.ts +3 -0
  475. package/dist/residency/omp-entry.d.ts.map +1 -0
  476. package/dist/residency/omp-entry.js +41 -0
  477. package/dist/residency/omp-entry.js.map +7 -0
  478. package/dist/residency/protocol.d.ts +119 -0
  479. package/dist/residency/protocol.d.ts.map +1 -0
  480. package/dist/run-display.d.ts +3 -0
  481. package/dist/run-display.d.ts.map +1 -0
  482. package/dist/runtime/core-override-guest-types.d.ts +15 -0
  483. package/dist/runtime/core-override-guest-types.d.ts.map +1 -0
  484. package/dist/runtime/core-override-guest-types.js +291 -0
  485. package/dist/runtime/core-override-guest-types.js.map +7 -0
  486. package/dist/runtime/core-tool-properties.d.ts +6 -0
  487. package/dist/runtime/core-tool-properties.d.ts.map +1 -0
  488. package/dist/runtime/dynamic-guest-types.d.ts +3 -0
  489. package/dist/runtime/dynamic-guest-types.d.ts.map +1 -0
  490. package/dist/runtime/dynamic-guest-types.js +226 -0
  491. package/dist/runtime/dynamic-guest-types.js.map +7 -0
  492. package/dist/runtime/guest-code-repair.d.ts +2 -0
  493. package/dist/runtime/guest-code-repair.d.ts.map +1 -0
  494. package/dist/runtime/guest-stack-map.d.ts +11 -0
  495. package/dist/runtime/guest-stack-map.d.ts.map +1 -0
  496. package/dist/runtime/guest-types.d.ts +35 -0
  497. package/dist/runtime/guest-types.d.ts.map +1 -0
  498. package/dist/runtime/guest-types.js +13 -0
  499. package/dist/runtime/guest-types.js.map +7 -0
  500. package/dist/runtime/node-process-child-source.d.ts +2 -0
  501. package/dist/runtime/node-process-child-source.d.ts.map +1 -0
  502. package/dist/runtime/node-process-runtime.d.ts +10 -0
  503. package/dist/runtime/node-process-runtime.d.ts.map +1 -0
  504. package/dist/runtime/node-process-runtime.js +319 -0
  505. package/dist/runtime/node-process-runtime.js.map +7 -0
  506. package/dist/runtime/orchestration.d.ts +3 -0
  507. package/dist/runtime/orchestration.d.ts.map +1 -0
  508. package/dist/runtime/quickjs-runtime.d.ts +24 -0
  509. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  510. package/dist/runtime/quickjs-runtime.js +12 -0
  511. package/dist/runtime/quickjs-runtime.js.map +7 -0
  512. package/dist/runtime/type-checker.d.ts +21 -0
  513. package/dist/runtime/type-checker.d.ts.map +1 -0
  514. package/dist/runtime/type-checker.js +15 -0
  515. package/dist/runtime/type-checker.js.map +7 -0
  516. package/dist/runtime-paths.d.ts +7 -0
  517. package/dist/runtime-paths.d.ts.map +1 -0
  518. package/dist/schema/controller.d.ts +35 -0
  519. package/dist/schema/controller.d.ts.map +1 -0
  520. package/dist/schema/types.d.ts +86 -0
  521. package/dist/schema/types.d.ts.map +1 -0
  522. package/dist/schema/workspace.d.ts +19 -0
  523. package/dist/schema/workspace.d.ts.map +1 -0
  524. package/dist/speculation/eligibility.d.ts +22 -0
  525. package/dist/speculation/eligibility.d.ts.map +1 -0
  526. package/dist/speculation/freshness.d.ts +10 -0
  527. package/dist/speculation/freshness.d.ts.map +1 -0
  528. package/dist/speculation/partial-json.d.ts +9 -0
  529. package/dist/speculation/partial-json.d.ts.map +1 -0
  530. package/dist/speculation/scanner.d.ts +13 -0
  531. package/dist/speculation/scanner.d.ts.map +1 -0
  532. package/dist/speculation/scanner.js +182 -0
  533. package/dist/speculation/scanner.js.map +7 -0
  534. package/dist/speculation/store.d.ts +39 -0
  535. package/dist/speculation/store.d.ts.map +1 -0
  536. package/dist/speculation/stream-tap.d.ts +27 -0
  537. package/dist/speculation/stream-tap.d.ts.map +1 -0
  538. package/dist/speculation/types.d.ts +44 -0
  539. package/dist/speculation/types.d.ts.map +1 -0
  540. package/dist/state/complexity.d.ts +13 -0
  541. package/dist/state/complexity.d.ts.map +1 -0
  542. package/dist/state/evidence-runner.d.ts +17 -0
  543. package/dist/state/evidence-runner.d.ts.map +1 -0
  544. package/dist/state/store.d.ts +76 -0
  545. package/dist/state/store.d.ts.map +1 -0
  546. package/dist/state/types.d.ts +165 -0
  547. package/dist/state/types.d.ts.map +1 -0
  548. package/dist/storage/retention.d.ts +22 -0
  549. package/dist/storage/retention.d.ts.map +1 -0
  550. package/dist/thinking.d.ts +19 -0
  551. package/dist/thinking.d.ts.map +1 -0
  552. package/dist/topology/control-plane.d.ts +58 -0
  553. package/dist/topology/control-plane.d.ts.map +1 -0
  554. package/dist/topology/participant-directory.d.ts +33 -0
  555. package/dist/topology/participant-directory.d.ts.map +1 -0
  556. package/dist/topology/peer-settle.d.ts +51 -0
  557. package/dist/topology/peer-settle.d.ts.map +1 -0
  558. package/dist/topology/records.d.ts +6 -0
  559. package/dist/topology/records.d.ts.map +1 -0
  560. package/dist/topology/types.d.ts +89 -0
  561. package/dist/topology/types.d.ts.map +1 -0
  562. package/dist/type-error-guidance.d.ts +3 -0
  563. package/dist/type-error-guidance.d.ts.map +1 -0
  564. package/dist/ui/arc-group.d.ts +17 -0
  565. package/dist/ui/arc-group.d.ts.map +1 -0
  566. package/dist/ui/code-preview-shell.d.ts +26 -0
  567. package/dist/ui/code-preview-shell.d.ts.map +1 -0
  568. package/dist/ui/code-preview.d.ts +53 -0
  569. package/dist/ui/code-preview.d.ts.map +1 -0
  570. package/dist/ui/controller.d.ts +20 -0
  571. package/dist/ui/controller.d.ts.map +1 -0
  572. package/dist/ui/conversation-chrome.d.ts +15 -0
  573. package/dist/ui/conversation-chrome.d.ts.map +1 -0
  574. package/dist/ui/conversation-chrome.js +10 -0
  575. package/dist/ui/conversation-chrome.js.map +7 -0
  576. package/dist/ui/conversation-native-reader.d.ts +106 -0
  577. package/dist/ui/conversation-native-reader.d.ts.map +1 -0
  578. package/dist/ui/conversation-native-reader.js +784 -0
  579. package/dist/ui/conversation-native-reader.js.map +7 -0
  580. package/dist/ui/conversation-queue-store.d.ts +12 -0
  581. package/dist/ui/conversation-queue-store.d.ts.map +1 -0
  582. package/dist/ui/conversation-queue.d.ts +242 -0
  583. package/dist/ui/conversation-queue.d.ts.map +1 -0
  584. package/dist/ui/conversation-render.d.ts +45 -0
  585. package/dist/ui/conversation-render.d.ts.map +1 -0
  586. package/dist/ui/conversation-shortcut.d.ts +3 -0
  587. package/dist/ui/conversation-shortcut.d.ts.map +1 -0
  588. package/dist/ui/conversation-targets.d.ts +7 -0
  589. package/dist/ui/conversation-targets.d.ts.map +1 -0
  590. package/dist/ui/conversation-targets.js +12 -0
  591. package/dist/ui/conversation-targets.js.map +7 -0
  592. package/dist/ui/conversation-transcript.d.ts +25 -0
  593. package/dist/ui/conversation-transcript.d.ts.map +1 -0
  594. package/dist/ui/conversation.d.ts +170 -0
  595. package/dist/ui/conversation.d.ts.map +1 -0
  596. package/dist/ui/conversation.js +1868 -0
  597. package/dist/ui/conversation.js.map +7 -0
  598. package/dist/ui/core-tool-render.d.ts +20 -0
  599. package/dist/ui/core-tool-render.d.ts.map +1 -0
  600. package/dist/ui/dashboard-detail.d.ts +68 -0
  601. package/dist/ui/dashboard-detail.d.ts.map +1 -0
  602. package/dist/ui/dashboard-fabric-graph.d.ts +50 -0
  603. package/dist/ui/dashboard-fabric-graph.d.ts.map +1 -0
  604. package/dist/ui/dashboard-model.d.ts +111 -0
  605. package/dist/ui/dashboard-model.d.ts.map +1 -0
  606. package/dist/ui/dashboard-presentation.d.ts +6 -0
  607. package/dist/ui/dashboard-presentation.d.ts.map +1 -0
  608. package/dist/ui/dashboard.d.ts +188 -0
  609. package/dist/ui/dashboard.d.ts.map +1 -0
  610. package/dist/ui/dashboard.js +4604 -0
  611. package/dist/ui/dashboard.js.map +7 -0
  612. package/dist/ui/diff-background.d.ts +12 -0
  613. package/dist/ui/diff-background.d.ts.map +1 -0
  614. package/dist/ui/dynamic-border.d.ts +8 -0
  615. package/dist/ui/dynamic-border.d.ts.map +1 -0
  616. package/dist/ui/escape-halt.d.ts +11 -0
  617. package/dist/ui/escape-halt.d.ts.map +1 -0
  618. package/dist/ui/fabric-actor-delivery-selector.d.ts +17 -0
  619. package/dist/ui/fabric-actor-delivery-selector.d.ts.map +1 -0
  620. package/dist/ui/fabric-actor-tool-selector.d.ts +22 -0
  621. package/dist/ui/fabric-actor-tool-selector.d.ts.map +1 -0
  622. package/dist/ui/fabric-code-parser.d.ts +8 -0
  623. package/dist/ui/fabric-code-parser.d.ts.map +1 -0
  624. package/dist/ui/fabric-host-event-selector.d.ts +29 -0
  625. package/dist/ui/fabric-host-event-selector.d.ts.map +1 -0
  626. package/dist/ui/fabric-model-selector.d.ts +64 -0
  627. package/dist/ui/fabric-model-selector.d.ts.map +1 -0
  628. package/dist/ui/fabric-render.d.ts +113 -0
  629. package/dist/ui/fabric-render.d.ts.map +1 -0
  630. package/dist/ui/fabric-thinking-selector.d.ts +26 -0
  631. package/dist/ui/fabric-thinking-selector.d.ts.map +1 -0
  632. package/dist/ui/fabric-title-hint.d.ts +2 -0
  633. package/dist/ui/fabric-title-hint.d.ts.map +1 -0
  634. package/dist/ui/format.d.ts +9 -0
  635. package/dist/ui/format.d.ts.map +1 -0
  636. package/dist/ui/highlight.d.ts +69 -0
  637. package/dist/ui/highlight.d.ts.map +1 -0
  638. package/dist/ui/model-picker.d.ts +46 -0
  639. package/dist/ui/model-picker.d.ts.map +1 -0
  640. package/dist/ui/model-picker.js +17 -0
  641. package/dist/ui/model-picker.js.map +7 -0
  642. package/dist/ui/preview-lines.d.ts +16 -0
  643. package/dist/ui/preview-lines.d.ts.map +1 -0
  644. package/dist/ui/row-balance.d.ts +29 -0
  645. package/dist/ui/row-balance.d.ts.map +1 -0
  646. package/dist/ui/settings.d.ts +57 -0
  647. package/dist/ui/settings.d.ts.map +1 -0
  648. package/dist/ui/settings.js +1908 -0
  649. package/dist/ui/settings.js.map +7 -0
  650. package/dist/ui/shiki-language.d.ts +7 -0
  651. package/dist/ui/shiki-language.d.ts.map +1 -0
  652. package/dist/ui/shiki-theme.d.ts +7 -0
  653. package/dist/ui/shiki-theme.d.ts.map +1 -0
  654. package/dist/ui/snapshot.d.ts +7 -0
  655. package/dist/ui/snapshot.d.ts.map +1 -0
  656. package/dist/ui/spinner.d.ts +6 -0
  657. package/dist/ui/spinner.d.ts.map +1 -0
  658. package/dist/ui/state-file-preview.d.ts +13 -0
  659. package/dist/ui/state-file-preview.d.ts.map +1 -0
  660. package/dist/ui/structured.d.ts +9 -0
  661. package/dist/ui/structured.d.ts.map +1 -0
  662. package/dist/ui/symbol-theme.d.ts +3 -0
  663. package/dist/ui/symbol-theme.d.ts.map +1 -0
  664. package/dist/ui/tool-call-timing.d.ts +2 -0
  665. package/dist/ui/tool-call-timing.d.ts.map +1 -0
  666. package/dist/ui/tool-display.d.ts +8 -0
  667. package/dist/ui/tool-display.d.ts.map +1 -0
  668. package/dist/ui/topology.d.ts +162 -0
  669. package/dist/ui/topology.d.ts.map +1 -0
  670. package/dist/ui/transcript-parser.d.ts +18 -0
  671. package/dist/ui/transcript-parser.d.ts.map +1 -0
  672. package/dist/ui/transcript-reader.d.ts +10 -0
  673. package/dist/ui/transcript-reader.d.ts.map +1 -0
  674. package/dist/ui/transcript-sanitization.d.ts +14 -0
  675. package/dist/ui/transcript-sanitization.d.ts.map +1 -0
  676. package/dist/ui/transcript.d.ts +52 -0
  677. package/dist/ui/transcript.d.ts.map +1 -0
  678. package/dist/ui/types.d.ts +84 -0
  679. package/dist/ui/types.d.ts.map +1 -0
  680. package/dist/ui/widget.d.ts +16 -0
  681. package/dist/ui/widget.d.ts.map +1 -0
  682. package/dist/ui/word-diff/alignment.d.ts +6 -0
  683. package/dist/ui/word-diff/alignment.d.ts.map +1 -0
  684. package/dist/ui/word-diff/change-block.d.ts +18 -0
  685. package/dist/ui/word-diff/change-block.d.ts.map +1 -0
  686. package/dist/ui/word-diff/changed-line.d.ts +14 -0
  687. package/dist/ui/word-diff/changed-line.d.ts.map +1 -0
  688. package/dist/ui/word-diff/emphasis.d.ts +9 -0
  689. package/dist/ui/word-diff/emphasis.d.ts.map +1 -0
  690. package/dist/ui/word-diff/line-emphasis.d.ts +7 -0
  691. package/dist/ui/word-diff/line-emphasis.d.ts.map +1 -0
  692. package/dist/ui/word-diff/line-matching.d.ts +10 -0
  693. package/dist/ui/word-diff/line-matching.d.ts.map +1 -0
  694. package/dist/ui/word-diff/line-similarity.d.ts +16 -0
  695. package/dist/ui/word-diff/line-similarity.d.ts.map +1 -0
  696. package/dist/ui/word-diff/normalize.d.ts +3 -0
  697. package/dist/ui/word-diff/normalize.d.ts.map +1 -0
  698. package/dist/ui/word-diff/parse.d.ts +17 -0
  699. package/dist/ui/word-diff/parse.d.ts.map +1 -0
  700. package/dist/ui/word-diff/range-refinement.d.ts +5 -0
  701. package/dist/ui/word-diff/range-refinement.d.ts.map +1 -0
  702. package/dist/ui/word-diff/ranges.d.ts +11 -0
  703. package/dist/ui/word-diff/ranges.d.ts.map +1 -0
  704. package/dist/ui/word-diff/smart-filter.d.ts +3 -0
  705. package/dist/ui/word-diff/smart-filter.d.ts.map +1 -0
  706. package/dist/ui/word-diff/sparse-line-matching.d.ts +25 -0
  707. package/dist/ui/word-diff/sparse-line-matching.d.ts.map +1 -0
  708. package/dist/ui/word-diff/text-boundaries.d.ts +11 -0
  709. package/dist/ui/word-diff/text-boundaries.d.ts.map +1 -0
  710. package/dist/ui/word-diff/token-alignment.d.ts +9 -0
  711. package/dist/ui/word-diff/token-alignment.d.ts.map +1 -0
  712. package/dist/ui/word-diff/token-text-refinement.d.ts +4 -0
  713. package/dist/ui/word-diff/token-text-refinement.d.ts.map +1 -0
  714. package/dist/ui/word-diff/tokens.d.ts +16 -0
  715. package/dist/ui/word-diff/tokens.d.ts.map +1 -0
  716. package/dist/ui/word-diff/types.d.ts +10 -0
  717. package/dist/ui/word-diff/types.d.ts.map +1 -0
  718. package/dist/util.d.ts +3 -0
  719. package/dist/util.d.ts.map +1 -0
  720. package/dist/worker/options.d.ts +3 -0
  721. package/dist/worker/options.d.ts.map +1 -0
  722. package/dist/worker/options.js +104 -0
  723. package/dist/worker/options.js.map +7 -0
  724. package/dist/worker/run-record.d.ts +22 -0
  725. package/dist/worker/run-record.d.ts.map +1 -0
  726. package/dist/worker/run-record.js +123 -0
  727. package/dist/worker/run-record.js.map +7 -0
  728. package/dist/worker/session-export.d.ts +45 -0
  729. package/dist/worker/session-export.d.ts.map +1 -0
  730. package/dist/worker/session-export.js +91 -0
  731. package/dist/worker/session-export.js.map +7 -0
  732. package/dist/worker.d.ts +3 -0
  733. package/dist/worker.d.ts.map +1 -0
  734. package/dist/worker.js +1061 -0
  735. package/dist/worker.js.map +7 -0
  736. package/docs/agents.md +564 -0
  737. package/docs/architecture.md +139 -0
  738. package/docs/audit-trace.md +116 -0
  739. package/docs/certification.md +134 -0
  740. package/docs/compaction.md +332 -0
  741. package/docs/component-calculus.md +191 -0
  742. package/docs/components.md +329 -0
  743. package/docs/configuration.md +478 -0
  744. package/docs/entropy.md +396 -0
  745. package/docs/interface.md +149 -0
  746. package/docs/memory-recall.md +614 -0
  747. package/docs/programmatic-compaction.md +207 -0
  748. package/docs/provider-component-calculus.md +378 -0
  749. package/docs/providers.md +109 -0
  750. package/docs/repairs.md +69 -0
  751. package/docs/residency-runtime.md +82 -0
  752. package/docs/schema-enforcement.md +166 -0
  753. package/docs/skills.md +48 -0
  754. package/docs/speculation.md +132 -0
  755. package/docs/state-layer.md +197 -0
  756. package/package.json +116 -0
  757. package/skills/fabric-advisor/SKILL.md +29 -0
  758. package/skills/fabric-ambient/SKILL.md +44 -0
  759. package/skills/fabric-ambient/references/setup.md +90 -0
  760. package/skills/fabric-council/SKILL.md +94 -0
  761. package/skills/fabric-exec/SKILL.md +123 -0
  762. package/skills/fabric-exec/references/agents.md +211 -0
  763. package/skills/fabric-exec/references/mcp.md +49 -0
  764. package/skills/fabric-exec/references/mesh.md +51 -0
  765. package/skills/fabric-fusion/SKILL.md +332 -0
  766. package/skills/fabric-guide/SKILL.md +28 -0
  767. package/skills/fabric-rlm/SKILL.md +284 -0
  768. package/skills/fabric-schema/SKILL.md +121 -0
  769. package/skills/fabric-spec/SKILL.md +42 -0
  770. package/skills/fabric-supervisor/SKILL.md +37 -0
  771. package/skills/fabric-swarm/SKILL.md +80 -0
  772. package/skills/fabric-workflow/SKILL.md +133 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/entropy/types.ts", "../../src/entropy/fingerprint.ts", "../../src/entropy/meter.ts", "../../src/entropy/passes.ts", "../../src/entropy/pool.ts", "../../src/entropy/pool-store.ts", "../../src/entropy/surface.ts", "../../src/entropy/compiler.ts", "../../src/entropy/presentation.ts", "../../src/entropy/corpus.ts", "../../src/entropy/sessions.ts", "../../src/entropy/trial.ts"],
4
+ "sourcesContent": ["// Deterministic tool-entropy measurement for the Fabric tool surface.\n//\n// Entropy here is operational, not psychological: it counts the bits of\n// corrective freedom a surface leaves open, measured only from artifacts\n// Fabric already records in typed form (trace V1 operations, the repair\n// table, live JSON schemas). No model judges anything; the same inputs and\n// the same metric version always produce the same report.\n\nexport const ENTROPY_METRIC_VERSION = 2 as const;\n\n// Fixed weights per metric version. Changing any weight bumps\n// ENTROPY_METRIC_VERSION so trend lines never mix formulas.\nexport const ENTROPY_WEIGHTS = {\n shape: 1,\n failureStage: 1,\n churn: 4,\n navigation: 4,\n flow: 1,\n lexicon: 2,\n staticFreedom: 0.25,\n} as const;\n\n// Failure stages that mean \"the surface rejected the call before it could\n// take effect\" \u2014 the offline residue class behind repair fingerprints.\nexport const ENTROPY_INVOCATION_STAGES: readonly string[] = [\"resolve\", \"prepare\", \"validate\"];\n\nexport type EntropyOutcome = \"succeeded\" | \"failed\" | \"aborted\" | \"timed_out\";\n\nexport interface EntropySurfaceAction {\n ref: string;\n inputSchema: unknown;\n}\n\nexport interface EntropySurfaceSnapshot {\n version: 1;\n actions: EntropySurfaceAction[];\n}\n\nexport interface EntropyOperationInput {\n ref: string;\n args: Record<string, unknown>;\n outcome: EntropyOutcome;\n failureStage?: string;\n}\n\nexport interface EntropyTraceInput {\n operations: EntropyOperationInput[];\n taskKey?: string;\n /** Producing model, stamped from the session scan as `provider/modelId`. */\n model?: string;\n}\n\n// Normalized compatibility alias: `ref` is the canonical target the row\n// repairs toward.\nexport interface EntropyRepairRowInput {\n kind: \"keyAlias\" | \"actionAlias\";\n ref: string;\n from: string;\n to: string;\n}\n\n// One verbatim argument value observed in persisted audits: the value-level\n// corpus for enum-tighten. Trace V1 projects values away per ref; audits\n// carry every argument the call actually used. Pooled observations carry\n// `count` multiplicity instead of one entry per call.\nexport interface EntropyValueObservation {\n ref: string;\n key: string;\n value: string | number | boolean;\n /** Observation multiplicity; window scans emit one entry per call, pools emit one per distinct value. */\n count?: number;\n}\n\n// One verbatim call per persisted audit: the authoritative record of the\n// arguments a call actually used. Trace V1 projects values away per ref, so\n// replay validation consults these, never the projected trace args.\nexport interface EntropyAuditCall {\n ref: string;\n args: Record<string, unknown>;\n}\n\nexport interface EntropyShapeSignature {\n signature: string;\n count: number;\n}\n\nexport interface EntropyRefReport {\n ref: string;\n calls: number;\n succeeded: number;\n failed: number;\n shapeSignatures: EntropyShapeSignature[];\n shapeEntropyBits: number;\n failureStageEntropyBits: number;\n churnRate: number;\n lexiconRows: number;\n staticFreedom: number;\n score: number;\n}\n\nexport interface EntropyTotals {\n traces: number;\n operations: number;\n actionOperations: number;\n discoveryOperations: number;\n workflowOperations: number;\n succeeded: number;\n failed: number;\n aborted: number;\n timedOut: number;\n invocationRejections: number;\n invocationRejectionsPer1k: number;\n}\n\n// Per-model behavioral attribution: each stamped trace measures against the\n// same surface, so the breakdown names which model exercised the freedom.\nexport interface EntropyModelReport {\n model: string;\n operations: number;\n actionOperations: number;\n succeeded: number;\n invocationRejections: number;\n invocationRejectionsPer1k: number;\n behavioralScore: number;\n}\n\nexport interface EntropyReport {\n metricVersion: typeof ENTROPY_METRIC_VERSION;\n catalogDigest: string;\n totals: EntropyTotals;\n shapeEntropyBits: number;\n failureStageEntropyBits: number;\n churnRate: number;\n navigationRatio: number;\n flowEntropyBits: number;\n lexiconRows: number;\n staticFreedom: number;\n /** Surface share of the score: static freedom of the refs the corpus used. */\n staticScore: number;\n /** Everything models exercised: wobble, churn, rejections, navigation, flow, lexicon. */\n behavioralScore: number;\n score: number;\n refs: EntropyRefReport[];\n /** Behavioral attribution per producing model; empty when no trace carries one. */\n byModel: EntropyModelReport[];\n}\n\nexport type EntropyProposal =\n | {\n kind: \"enum-tighten\";\n ref: string;\n key: string;\n values: (string | number | boolean)[];\n calls: number;\n distinct: number;\n topShare: number;\n }\n | {\n kind: \"declare-enum\";\n ref: string;\n key: string;\n values: (string | number | boolean)[];\n calls: number;\n distinct: number;\n topShare: number;\n }\n | {\n kind: \"overload-split\";\n ref: string;\n shapeEntropyBits: number;\n clusters: { keys: string[]; calls: number }[];\n }\n | {\n kind: \"sequence-fuse\";\n sequence: string[];\n occurrences: number;\n }\n | {\n kind: \"noise-quarantine\";\n ref: string;\n calls: number;\n succeeded: number;\n failed: number;\n failureStageEntropyBits: number;\n };\n\nexport interface EntropyGateResult {\n passed: boolean;\n beforeScore: number;\n afterScore: number;\n delta: number;\n reasons: string[];\n}\n\n// Trend of a score sequence, oldest to newest: the ratchet's line. A\n// negative slopePerStep means the surface is compiling down.\nexport interface EntropyTrend {\n count: number;\n first?: number;\n last?: number;\n slopePerStep: number;\n}\n", "// Deterministic fingerprints for the entropy meter: canonical call-shape\n// signatures, signature distance (retry churn), Shannon entropy in bits, and\n// the static freedom score of a JSON Schema. Everything here is a pure\n// function of its inputs; the same value always yields the same fingerprint.\n\nimport type { EntropyTrend } from \"./types.js\";\n\nconst SIGNATURE_MAX_KEYS = 32;\nconst SIGNATURE_MAX_DEPTH = 3;\n// Enum cardinality whose freedom saturates at 1.0 (log2 of 64 values).\nconst ENUM_SATURATION_BITS = 6;\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n// Fixed rounding for every reported metric value. Same inputs, same floats,\n// same six decimal places \u2014 report JSON is byte-stable. Negative zero\n// collapses to zero so single-class entropies compare equal to zero.\nexport const roundMetric = (value: number): number => {\n const rounded = Math.round(value * 1e6) / 1e6;\n return rounded === 0 ? 0 : rounded;\n};\n\n// Code-unit string comparison: locale-independent, so ordering never varies\n// with the host's ICU data.\nexport const compareCodeUnits = (left: string, right: string): number =>\n left < right ? -1 : left > right ? 1 : 0;\n\nconst typeTag = (value: unknown, depth: number): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"arr\";\n switch (typeof value) {\n case \"string\":\n return \"str\";\n case \"number\":\n return \"num\";\n case \"boolean\":\n return \"bool\";\n case \"object\": {\n if (depth >= SIGNATURE_MAX_DEPTH) return \"obj\";\n try {\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record).sort();\n const head = keys\n .slice(0, SIGNATURE_MAX_KEYS)\n .map((key) => `${key}:${typeTag(record[key], depth + 1)}`);\n if (keys.length > SIGNATURE_MAX_KEYS) {\n head.push(`\u2026+${keys.length - SIGNATURE_MAX_KEYS}`);\n }\n return `{${head.join(\",\")}}`;\n } catch {\n return \"obj\";\n }\n }\n default:\n return \"other\";\n }\n};\n\n// Canonical argument-shape signature: sorted parameter names with a bounded\n// value-type tag each. Key order and value contents never matter \u2014 only the\n// shape the model chose.\nexport const shapeSignature = (args: Record<string, unknown>): string => {\n const keys = Object.keys(args).sort();\n const head = keys\n .slice(0, SIGNATURE_MAX_KEYS)\n .map((key) => `${key}:${typeTag(args[key], 1)}`);\n if (keys.length > SIGNATURE_MAX_KEYS) {\n head.push(`\u2026+${keys.length - SIGNATURE_MAX_KEYS}`);\n }\n return `(${head.join(\",\")})`;\n};\n\n// Normalized Levenshtein distance between two signatures, in [0, 1]. Retry\n// churn is the distance between a failed call's shape and the next attempt's.\nexport const signatureDistance = (left: string, right: string): number => {\n if (left === right) return 0;\n const bound = Math.max(left.length, right.length);\n if (bound === 0) return 0;\n let previous: number[] = [];\n for (let index = 0; index <= right.length; index++) {\n previous.push(index);\n }\n for (let index = 1; index <= left.length; index++) {\n const current: number[] = [index];\n for (let inner = 1; inner <= right.length; inner++) {\n const substitution = previous[inner - 1]! + (left[index - 1] === right[inner - 1] ? 0 : 1);\n const insertion = current[inner - 1]! + 1;\n const deletion = previous[inner]! + 1;\n current.push(Math.min(substitution, insertion, deletion));\n }\n previous = current;\n }\n return roundMetric(previous[right.length]! / bound);\n};\n\n// Shannon entropy in bits over a count distribution, rounded to 1e-6.\n// A single class is zero bits; a uniform split over k classes is log2(k).\nexport const shannonEntropyBits = (counts: readonly number[]): number => {\n const total = counts.reduce((sum, value) => sum + value, 0);\n if (total <= 0) return 0;\n let bits = 0;\n for (const count of counts) {\n if (count <= 0) continue;\n const probability = count / total;\n bits += probability * Math.log2(probability);\n }\n return roundMetric(-bits);\n};\n\nconst schemaFreedom = (schema: unknown, depth: number): number => {\n if (depth > SIGNATURE_MAX_DEPTH) return 0.5;\n if (!isPlainRecord(schema)) return 0.5;\n const union = Array.isArray(schema.anyOf)\n ? schema.anyOf\n : Array.isArray(schema.oneOf)\n ? schema.oneOf\n : undefined;\n if (union) {\n const scores = union.map((branch) => schemaFreedom(branch, depth + 1));\n const widest = scores.length > 0 ? Math.max(...scores) : 0;\n return roundMetric(widest + 0.1 * Math.max(0, union.length - 1));\n }\n if (Array.isArray(schema.enum)) {\n return roundMetric(\n Math.min(1, Math.log2(Math.max(1, schema.enum.length)) / ENUM_SATURATION_BITS),\n );\n }\n if (\"const\" in schema) return 0;\n const type = schema.type;\n if (typeof type !== \"string\") return 0.75;\n if (type === \"boolean\") return 0.1;\n if (type === \"number\" || type === \"integer\") return 0.5;\n if (type === \"string\") return 1;\n if (type === \"array\") return roundMetric(0.5 + 0.5 * schemaFreedom(schema.items, depth + 1));\n if (type === \"object\") {\n const properties = schema.properties;\n if (!isPlainRecord(properties)) return 1;\n const keys = Object.keys(properties).sort();\n if (keys.length === 0) return 1;\n const required = Array.isArray(schema.required)\n ? schema.required.filter((entry): entry is string => typeof entry === \"string\")\n : [];\n let score = 0;\n for (const key of keys) {\n score += schemaFreedom(properties[key], depth + 1);\n if (!required.includes(key)) score += 0.25;\n }\n if (schema.additionalProperties !== false) score += 0.5;\n return roundMetric(score);\n }\n return 0.75;\n};\n\n// Static freedom of one action's input schema: free strings dominate, enums\n// shrink with log2 cardinality, literals cost nothing, and optional or\n// open-ended parameters add tax. Computable with an empty corpus, which is\n// what lets the compiler score candidate surfaces before deployment.\nexport const staticFreedomFromSchema = (schema: unknown): number => schemaFreedom(schema, 0);\n\n// Least-squares slope of a score sequence, oldest to newest. The on-demand\n// session trend feeds this per-session scores; a flat or negative slope is\n// the ratchet holding.\nexport const trendFromScores = (scores: readonly number[]): EntropyTrend => {\n const count = scores.length;\n const first = count > 0 ? scores[0] : undefined;\n const last = count > 0 ? scores[count - 1] : undefined;\n let slope = 0;\n if (count >= 2) {\n const meanX = (count - 1) / 2;\n const meanY = scores.reduce((sum, value) => sum + value, 0) / count;\n let numerator = 0;\n let denominator = 0;\n for (let index = 0; index < count; index++) {\n numerator += (index - meanX) * (scores[index]! - meanY);\n denominator += (index - meanX) ** 2;\n }\n slope = denominator > 0 ? numerator / denominator : 0;\n }\n return {\n count,\n ...(first !== undefined ? { first: roundMetric(first) } : {}),\n ...(last !== undefined ? { last: roundMetric(last) } : {}),\n slopePerStep: roundMetric(slope),\n };\n};\n", "import {\n ENTROPY_INVOCATION_STAGES,\n ENTROPY_METRIC_VERSION,\n ENTROPY_WEIGHTS,\n type EntropyModelReport,\n type EntropyRefReport,\n type EntropyRepairRowInput,\n type EntropyReport,\n type EntropyShapeSignature,\n type EntropySurfaceSnapshot,\n type EntropyTotals,\n type EntropyTraceInput,\n} from \"./types.js\";\nimport {\n compareCodeUnits,\n roundMetric,\n shannonEntropyBits,\n shapeSignature,\n signatureDistance,\n staticFreedomFromSchema,\n} from \"./fingerprint.js\";\n\n// The meter is a pure function of its inputs: typed trace operations, an\n// optional surface snapshot, and the normalized repair table. It reads no\n// clocks, no randomness, and no prose \u2014 only the residues of non-canonical\n// behavior Fabric already records. Same inputs and metric version, same\n// report, on every run.\n\nexport interface EntropyMeterInput {\n traces: readonly EntropyTraceInput[];\n surface?: EntropySurfaceSnapshot;\n repairs?: readonly EntropyRepairRowInput[];\n catalogDigest?: string;\n}\n\nconst DISCOVERY_PREFIX = \"fabric.discovery.\";\nconst WORKFLOW_PREFIX = \"fabric.workflow.\";\nconst DEFAULT_TASK_KEY = \"(none)\";\nconst TOP_SIGNATURES = 8;\n\ninterface RefAccumulator {\n calls: number;\n succeeded: number;\n failed: number;\n signatures: Map<string, number>;\n stages: Map<string, number>;\n churnPairs: number;\n churnSum: number;\n}\n\n// The core pass without per-model attribution; measureEntropy wraps it so\n// each model's behavioral terms come from the same formula over its own\n// traces, measured against the same surface.\ntype EntropyReportCore = Omit<EntropyReport, \"byModel\">;\n\ninterface MeasureState {\n surfaceByRef: Map<string, unknown>;\n lexiconByRef: Map<string, number>;\n lexiconRows: number;\n totals: EntropyTotals;\n refs: Map<string, RefAccumulator>;\n taskSequences: Map<string, Map<string, number>>;\n churnPairs: number;\n churnSum: number;\n}\n\nconst createMeasureState = (input: EntropyMeterInput): MeasureState => {\n const surfaceByRef = new Map<string, unknown>();\n if (input.surface) {\n for (const action of input.surface.actions) surfaceByRef.set(action.ref, action.inputSchema);\n }\n const lexiconByRef = new Map<string, number>();\n let lexiconRows = 0;\n for (const row of input.repairs ?? []) {\n lexiconByRef.set(row.ref, (lexiconByRef.get(row.ref) ?? 0) + 1);\n lexiconRows += 1;\n }\n return {\n surfaceByRef,\n lexiconByRef,\n lexiconRows,\n totals: {\n traces: input.traces.length,\n operations: 0,\n actionOperations: 0,\n discoveryOperations: 0,\n workflowOperations: 0,\n succeeded: 0,\n failed: 0,\n aborted: 0,\n timedOut: 0,\n invocationRejections: 0,\n invocationRejectionsPer1k: 0,\n },\n refs: new Map(),\n taskSequences: new Map(),\n churnPairs: 0,\n churnSum: 0,\n };\n};\n\nconst accumulatorFor = (state: MeasureState, ref: string): RefAccumulator => {\n const existing = state.refs.get(ref);\n if (existing) return existing;\n const created: RefAccumulator = {\n calls: 0,\n succeeded: 0,\n failed: 0,\n signatures: new Map<string, number>(),\n stages: new Map<string, number>(),\n churnPairs: 0,\n churnSum: 0,\n };\n state.refs.set(ref, created);\n return created;\n};\n\nconst accumulateTrace = (state: MeasureState, sourceTrace: EntropyTraceInput): void => {\n const taskKey = sourceTrace.taskKey ?? DEFAULT_TASK_KEY;\n const sequence: string[] = [];\n const pendingFailed = new Map<string, string>();\n for (const operation of sourceTrace.operations) {\n state.totals.operations += 1;\n if (operation.ref.startsWith(DISCOVERY_PREFIX)) {\n state.totals.discoveryOperations += 1;\n continue;\n }\n if (operation.ref.startsWith(WORKFLOW_PREFIX)) {\n state.totals.workflowOperations += 1;\n continue;\n }\n state.totals.actionOperations += 1;\n sequence.push(operation.ref);\n const acc = accumulatorFor(state, operation.ref);\n acc.calls += 1;\n if (operation.outcome === \"succeeded\") {\n state.totals.succeeded += 1;\n acc.succeeded += 1;\n } else if (operation.outcome === \"failed\") {\n state.totals.failed += 1;\n acc.failed += 1;\n } else if (operation.outcome === \"aborted\") {\n state.totals.aborted += 1;\n } else {\n state.totals.timedOut += 1;\n }\n const signature = shapeSignature(operation.args);\n acc.signatures.set(signature, (acc.signatures.get(signature) ?? 0) + 1);\n if (operation.outcome === \"failed\") {\n const stage = operation.failureStage ?? \"unknown\";\n acc.stages.set(stage, (acc.stages.get(stage) ?? 0) + 1);\n if (ENTROPY_INVOCATION_STAGES.includes(stage)) state.totals.invocationRejections += 1;\n }\n const pending = pendingFailed.get(operation.ref);\n if (pending !== undefined) {\n const distance = signatureDistance(pending, signature);\n acc.churnPairs += 1;\n acc.churnSum += distance;\n state.churnPairs += 1;\n state.churnSum += distance;\n pendingFailed.delete(operation.ref);\n }\n if (operation.outcome === \"failed\") pendingFailed.set(operation.ref, signature);\n }\n if (sequence.length > 0) {\n const key = sequence.join(\"\u2192\");\n const perTask = state.taskSequences.get(taskKey) ?? new Map<string, number>();\n perTask.set(key, (perTask.get(key) ?? 0) + 1);\n state.taskSequences.set(taskKey, perTask);\n }\n};\n\nconst finalizeMeasure = (\n input: EntropyMeterInput,\n state: MeasureState,\n): EntropyReportCore => {\n const refEntries = [...state.refs.entries()].sort(([left], [right]) =>\n compareCodeUnits(left, right),\n );\n const refReports: EntropyRefReport[] = [];\n let staticFreedomTotal = 0;\n let staticWeighted = 0;\n let shapeWeighted = 0;\n let failureStageWeighted = 0;\n let scoreSum = 0;\n for (const [ref, acc] of refEntries) {\n const shapeEntropyBits = shannonEntropyBits([...acc.signatures.values()]);\n const failureStageEntropyBits = shannonEntropyBits([...acc.stages.values()]);\n const refChurnRate = acc.churnPairs > 0 ? roundMetric(acc.churnSum / acc.churnPairs) : 0;\n const lexicon = state.lexiconByRef.get(ref) ?? 0;\n const staticFreedom = state.surfaceByRef.has(ref)\n ? staticFreedomFromSchema(state.surfaceByRef.get(ref))\n : 0;\n staticFreedomTotal += staticFreedom;\n staticWeighted += ENTROPY_WEIGHTS.staticFreedom * staticFreedom;\n shapeWeighted += shapeEntropyBits * acc.calls;\n failureStageWeighted += failureStageEntropyBits * acc.failed;\n const score = roundMetric(\n ENTROPY_WEIGHTS.shape * shapeEntropyBits +\n ENTROPY_WEIGHTS.failureStage * failureStageEntropyBits +\n ENTROPY_WEIGHTS.churn * refChurnRate +\n ENTROPY_WEIGHTS.lexicon * lexicon +\n ENTROPY_WEIGHTS.staticFreedom * staticFreedom,\n );\n scoreSum += score;\n const shapeSignatures: EntropyShapeSignature[] = [...acc.signatures.entries()]\n .map(([signature, count]) => ({ signature, count }))\n .sort(\n (left, right) => right.count - left.count || compareCodeUnits(left.signature, right.signature),\n )\n .slice(0, TOP_SIGNATURES);\n refReports.push({\n ref,\n calls: acc.calls,\n succeeded: acc.succeeded,\n failed: acc.failed,\n shapeSignatures,\n shapeEntropyBits,\n failureStageEntropyBits,\n churnRate: refChurnRate,\n lexiconRows: lexicon,\n staticFreedom,\n score,\n });\n }\n\n const navigationRatio = state.totals.actionOperations > 0\n ? roundMetric(state.totals.discoveryOperations / state.totals.actionOperations)\n : 0;\n let flowWeighted = 0;\n let flowOccurrences = 0;\n for (const perTask of state.taskSequences.values()) {\n const counts = [...perTask.values()];\n const occurrences = counts.reduce((sum, value) => sum + value, 0);\n flowWeighted += shannonEntropyBits(counts) * occurrences;\n flowOccurrences += occurrences;\n }\n const flowEntropyBits = flowOccurrences > 0\n ? roundMetric(flowWeighted / flowOccurrences)\n : 0;\n state.totals.invocationRejectionsPer1k = state.totals.actionOperations > 0\n ? roundMetric((state.totals.invocationRejections / state.totals.actionOperations) * 1000)\n : 0;\n const score = roundMetric(\n (scoreSum +\n ENTROPY_WEIGHTS.navigation * navigationRatio +\n ENTROPY_WEIGHTS.flow * flowEntropyBits) /\n Math.max(1, state.totals.succeeded),\n );\n const staticScore = roundMetric(staticWeighted / Math.max(1, state.totals.succeeded));\n const behavioralScore = roundMetric(score - staticScore);\n const sortedRefs = [...refReports].sort(\n (left, right) => right.score - left.score || compareCodeUnits(left.ref, right.ref),\n );\n\n return {\n metricVersion: ENTROPY_METRIC_VERSION,\n catalogDigest: input.catalogDigest ?? \"\",\n totals: state.totals,\n shapeEntropyBits: state.totals.actionOperations > 0\n ? roundMetric(shapeWeighted / state.totals.actionOperations)\n : 0,\n failureStageEntropyBits: state.totals.failed > 0\n ? roundMetric(failureStageWeighted / state.totals.failed)\n : 0,\n churnRate: state.churnPairs > 0 ? roundMetric(state.churnSum / state.churnPairs) : 0,\n navigationRatio,\n flowEntropyBits,\n lexiconRows: state.lexiconRows,\n staticFreedom: roundMetric(staticFreedomTotal),\n staticScore,\n behavioralScore,\n score,\n refs: sortedRefs,\n };\n};\n\nconst measureOnce = (input: EntropyMeterInput): EntropyReportCore => {\n const state = createMeasureState(input);\n for (const trace of input.traces) accumulateTrace(state, trace);\n return finalizeMeasure(input, state);\n};\n\nexport const measureEntropy = (input: EntropyMeterInput): EntropyReport => {\n const report = measureOnce(input);\n const groups = new Map<string, EntropyTraceInput[]>();\n for (const sourceTrace of input.traces) {\n if (!sourceTrace.model) continue;\n const group = groups.get(sourceTrace.model) ?? [];\n group.push(sourceTrace);\n groups.set(sourceTrace.model, group);\n }\n // Only stamped traces attribute; everything else stays in the global\n // report. Sorted iteration keeps the breakdown order stable.\n const byModel: EntropyModelReport[] = [...groups.entries()]\n .sort(([left], [right]) => compareCodeUnits(left, right))\n .map(([model, traces]) => {\n const scoped = measureOnce({ ...input, traces });\n return {\n model,\n operations: scoped.totals.operations,\n actionOperations: scoped.totals.actionOperations,\n succeeded: scoped.totals.succeeded,\n invocationRejections: scoped.totals.invocationRejections,\n invocationRejectionsPer1k: scoped.totals.invocationRejectionsPer1k,\n behavioralScore: scoped.behavioralScore,\n };\n });\n return { ...report, byModel };\n};\n\nconst yieldToLoop = (): Promise<void> =>\n new Promise((resolve) => setImmediate(resolve));\n\nconst COOPERATIVE_TRACE_CHUNK = 64;\n\nconst measureOnceAsync = async (\n input: EntropyMeterInput,\n): Promise<EntropyReportCore> => {\n const state = createMeasureState(input);\n await yieldToLoop();\n for (let index = 0; index < input.traces.length; index += 1) {\n accumulateTrace(state, input.traces[index]!);\n if ((index + 1) % COOPERATIVE_TRACE_CHUNK === 0) await yieldToLoop();\n }\n return finalizeMeasure(input, state);\n};\n\n// Cooperative meter for extension hooks. Trace accumulation yields in fixed\n// chunks in both the global and per-model passes, preserving exact synchronous\n// results while letting OMP repaint and process input during a large corpus.\nexport const measureEntropyAsync = async (\n input: EntropyMeterInput,\n): Promise<EntropyReport> => {\n const report = await measureOnceAsync(input);\n const groups = new Map<string, EntropyTraceInput[]>();\n for (const sourceTrace of input.traces) {\n if (!sourceTrace.model) continue;\n const group = groups.get(sourceTrace.model) ?? [];\n group.push(sourceTrace);\n groups.set(sourceTrace.model, group);\n }\n const byModel: EntropyModelReport[] = [];\n for (const [model, traces] of [...groups.entries()].sort(([left], [right]) =>\n compareCodeUnits(left, right),\n )) {\n const scoped = await measureOnceAsync({ ...input, traces });\n byModel.push({\n model,\n operations: scoped.totals.operations,\n actionOperations: scoped.totals.actionOperations,\n succeeded: scoped.totals.succeeded,\n invocationRejections: scoped.totals.invocationRejections,\n invocationRejectionsPer1k: scoped.totals.invocationRejectionsPer1k,\n behavioralScore: scoped.behavioralScore,\n });\n }\n return { ...report, byModel };\n};\n", "import type {\n EntropyGateResult,\n EntropyProposal,\n EntropyRefReport,\n EntropyReport,\n EntropyRepairRowInput,\n EntropySurfaceAction,\n EntropySurfaceSnapshot,\n EntropyTraceInput,\n EntropyValueObservation,\n} from \"./types.js\";\nimport { compareCodeUnits, roundMetric } from \"./fingerprint.js\";\n\n// Deterministic reduction proposals. Each pass is a pure function over the\n// same typed artifacts the meter reads, with fixed thresholds, and every\n// proposal carries the evidence that triggered it. `applyProposalsToSurface`\n// rewrites only the mechanically applicable kinds. Overload-split and\n// sequence-fuse author new composite definitions, while declare-enum requires\n// an explicit schema annotation, so all three stay review-only. Repair rows\n// remain compatibility aliases and never rewrite canonical names. The gate is\n// the ratchet: a compiled surface must never increase the measured score and\n// must never drop successful calls.\n\nexport interface EntropyProposalInput {\n report: EntropyReport;\n traces: readonly EntropyTraceInput[];\n surface?: EntropySurfaceSnapshot;\n repairs?: readonly EntropyRepairRowInput[];\n valueObservations?: readonly EntropyValueObservation[];\n}\n\nconst ENUM_MIN_OBSERVATIONS = 8;\nconst ENUM_MAX_DISTINCT = 8;\nconst ENUM_MIN_TOP_SHARE = 0.5;\nconst SPLIT_MIN_SHAPE_ENTROPY_BITS = 1;\nconst SPLIT_MIN_CLUSTER_CALLS = 2;\nconst FUSE_MIN_SEQUENCE_LENGTH = 3;\nconst FUSE_MAX_SEQUENCE_LENGTH = 6;\nconst FUSE_MIN_OCCURRENCES = 3;\nconst FUSE_MIN_EXECUTIONS = 3;\nconst QUARANTINE_MIN_CALLS = 3;\nconst QUARANTINE_MIN_STAGE_ENTROPY_BITS = 1;\nconst MAX_PROPOSALS_PER_KIND = 8;\n\nexport const ENTROPY_ENUM_CANDIDATE_ANNOTATION = \"x-fabric-enum-candidate\";\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst valueKey = (value: string | number | boolean): string => `${typeof value}:${String(value)}`;\n\nconst schemaProperties = (schema: unknown): Record<string, unknown> | undefined => {\n if (!isPlainRecord(schema)) return undefined;\n const properties = schema.properties;\n return isPlainRecord(properties) ? properties : undefined;\n};\n\nconst enumKeys = (schema: unknown): Set<string> | undefined => {\n if (!isPlainRecord(schema) || !Array.isArray(schema.enum)) return undefined;\n const keys = new Set<string>();\n for (const entry of schema.enum) {\n if (typeof entry === \"string\" || typeof entry === \"number\" || typeof entry === \"boolean\") {\n keys.add(valueKey(entry));\n }\n }\n return keys;\n};\n\nconst contains = (outer: readonly string[], inner: readonly string[]): boolean => {\n if (outer.length < inner.length) return false;\n for (let start = 0; start + inner.length <= outer.length; start++) {\n let matches = true;\n for (let index = 0; index < inner.length; index++) {\n if (outer[start + index] !== inner[index]) {\n matches = false;\n break;\n }\n }\n if (matches) return true;\n }\n return false;\n};\n\ninterface EnumCandidate {\n entry: {\n ref: string;\n key: string;\n counts: Map<string, { value: string | number | boolean; count: number }>;\n total: number;\n };\n ranked: { value: string | number | boolean; count: number }[];\n topShare: number;\n}\n\n// An enum the effective schema already declares is a floor. Observed\n// values outside it are pre-birth evidence: calls recorded before the\n// overlay existed (the live session carries them for its whole life) or\n// after a digest proof fell. The fresh derivation drops them instead of\n// re-proposing a wider enum the ratchet must then reject every turn.\n// Tightening beneath the floor still proposes; a derivation identical to\n// the declared enum converges. Widening resets only when the base schema\n// drifts (the digest proof drops the overlay and the enum re-derives from\n// the live surface) or through review.\nconst tightenBeneathDeclaredEnum = (\n candidate: EnumCandidate,\n declaredDomain: ReadonlySet<string>,\n): EnumCandidate | undefined => {\n const ranked = candidate.ranked.filter((item) => declaredDomain.has(valueKey(item.value)));\n if (ranked.length === 0 || ranked.length === declaredDomain.size) return undefined;\n return { ...candidate, ranked };\n};\n\nexport const proposeEntropyReductions = (input: EntropyProposalInput): EntropyProposal[] => {\n const calledRefs = new Map<string, EntropyRefReport>();\n for (const ref of input.report.refs) calledRefs.set(ref.ref, ref);\n const surfaceByRef = new Map<string, unknown>();\n const surfaceRefs = new Set<string>();\n if (input.surface) {\n for (const action of input.surface.actions) {\n surfaceByRef.set(action.ref, action.inputSchema);\n surfaceRefs.add(action.ref);\n }\n }\n\n const proposals: EntropyProposal[] = [];\n\n // enum-tighten: a closed-domain parameter whose observed values are few\n // and concentrated tightens beneath its declared enum, so future\n // off-modal values fail (or repair) deterministically instead of\n // slipping through an unused declared value. An unbounded parameter is not\n // evidence of a finite domain; declare-enum is considered only when its\n // schema author explicitly marks it as an enum candidate.\n const observations = new Map<\n string,\n {\n ref: string;\n key: string;\n counts: Map<string, { value: string | number | boolean; count: number }>;\n total: number;\n }\n >();\n const observeValue = (\n ref: string,\n key: string,\n value: string | number | boolean,\n weight = 1,\n ): void => {\n const id = `${ref}\\u0000${key}`;\n const entry =\n observations.get(id) ??\n {\n ref,\n key,\n counts: new Map<string, { value: string | number | boolean; count: number }>(),\n total: 0,\n };\n const valueId = valueKey(value);\n const existing = entry.counts.get(valueId);\n entry.counts.set(valueId, { value, count: (existing?.count ?? 0) + weight });\n entry.total += weight;\n observations.set(id, entry);\n };\n // Verbatim audit observations are the authoritative value corpus when\n // supplied: audits carry every argument, including the parameters the\n // trace projection drops. Without them the scan uses the projected trace\n // args.\n if (input.valueObservations) {\n for (const observation of input.valueObservations) {\n observeValue(observation.ref, observation.key, observation.value, observation.count ?? 1);\n }\n } else {\n for (const sourceTrace of input.traces) {\n for (const operation of sourceTrace.operations) {\n if (operation.ref.startsWith(\"fabric.\")) continue;\n for (const [key, value] of Object.entries(operation.args)) {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\") {\n continue;\n }\n observeValue(operation.ref, key, value);\n }\n }\n }\n }\n const eligibleCandidates = [...observations.values()]\n .filter((entry) => entry.total >= ENUM_MIN_OBSERVATIONS)\n .filter((entry) => entry.counts.size >= 2 && entry.counts.size <= ENUM_MAX_DISTINCT)\n .map((entry): EnumCandidate => {\n const ranked = [...entry.counts.values()].sort(\n (left, right) =>\n right.count - left.count || compareCodeUnits(valueKey(left.value), valueKey(right.value)),\n );\n return { entry, ranked, topShare: roundMetric(ranked[0]!.count / entry.total) };\n })\n .filter((candidate) => candidate.topShare >= ENUM_MIN_TOP_SHARE);\n // Closed-domain rule: auto enum-tighten may only remove freedom the\n // effective schema already declares finite. Observations over free strings,\n // numeric ranges, undeclared keys, and unknown refs do not prove a finite\n // domain. Authors can opt a declared property into a review-only\n // declare-enum signal with x-fabric-enum-candidate: true. A declared boolean\n // is already closed and priced below any enum, so it never proposes.\n const closedCandidates: EnumCandidate[] = [];\n const openCandidates: EnumCandidate[] = [];\n for (const candidate of eligibleCandidates) {\n const properties = input.surface\n ? schemaProperties(surfaceByRef.get(candidate.entry.ref))\n : undefined;\n const target = properties ? properties[candidate.entry.key] : undefined;\n if (isPlainRecord(target) && target.type === \"boolean\") continue;\n const declaredDomain = target ? enumKeys(target) : undefined;\n if (declaredDomain) {\n const tightened = tightenBeneathDeclaredEnum(candidate, declaredDomain);\n if (tightened) closedCandidates.push(tightened);\n } else if (\n isPlainRecord(target) &&\n target[ENTROPY_ENUM_CANDIDATE_ANNOTATION] === true\n ) {\n openCandidates.push(candidate);\n }\n }\n const byRefKey = (left: EnumCandidate, right: EnumCandidate): number =>\n compareCodeUnits(\n `${left.entry.ref}\\u0000${left.entry.key}`,\n `${right.entry.ref}\\u0000${right.entry.key}`,\n );\n for (const candidate of closedCandidates.sort(byRefKey).slice(0, MAX_PROPOSALS_PER_KIND)) {\n proposals.push({\n kind: \"enum-tighten\",\n ref: candidate.entry.ref,\n key: candidate.entry.key,\n values: candidate.ranked.map((item) => item.value),\n calls: candidate.entry.total,\n distinct: candidate.ranked.length,\n topShare: candidate.topShare,\n });\n }\n for (const candidate of openCandidates.sort(byRefKey).slice(0, MAX_PROPOSALS_PER_KIND)) {\n proposals.push({\n kind: \"declare-enum\",\n ref: candidate.entry.ref,\n key: candidate.entry.key,\n values: candidate.ranked.map((item) => item.value),\n calls: candidate.entry.total,\n distinct: candidate.entry.counts.size,\n topShare: candidate.topShare,\n });\n }\n\n // Repair rows are already guarded aliases from a spilled spelling to the\n // canonical schema. Their existence proves compatibility is useful, not\n // that the alias should replace the canonical name. They contribute to the\n // lexicon metric but never become surface rewrite proposals.\n\n // overload-split: one ref carrying two disjoint parameter key-sets is an\n // overloaded action; splitting removes the per-call either/or freedom.\n const overloadRefs = new Set(\n input.report.refs\n .filter((ref) => ref.shapeEntropyBits >= SPLIT_MIN_SHAPE_ENTROPY_BITS)\n .map((ref) => ref.ref),\n );\n if (overloadRefs.size > 0) {\n const keySets = new Map<string, Map<string, { keys: string[]; calls: number }>>();\n for (const sourceTrace of input.traces) {\n for (const operation of sourceTrace.operations) {\n if (!overloadRefs.has(operation.ref)) continue;\n const keys = Object.keys(operation.args).sort();\n const id = keys.join(\"\\u0000\");\n const perRef = keySets.get(operation.ref) ?? new Map<string, { keys: string[]; calls: number }>();\n const cluster = perRef.get(id) ?? { keys, calls: 0 };\n cluster.calls += 1;\n perRef.set(id, cluster);\n keySets.set(operation.ref, perRef);\n }\n }\n let overloadCount = 0;\n for (const [ref, perRef] of [...keySets.entries()].sort(([left], [right]) =>\n compareCodeUnits(left, right),\n )) {\n if (overloadCount >= MAX_PROPOSALS_PER_KIND) break;\n const clusters = [...perRef.values()]\n .filter((cluster) => cluster.calls >= SPLIT_MIN_CLUSTER_CALLS)\n .sort(\n (left, right) =>\n right.calls - left.calls || compareCodeUnits(left.keys.join(\",\"), right.keys.join(\",\")),\n );\n const disjoint: { keys: string[]; calls: number }[] = [];\n for (const cluster of clusters) {\n const keys = new Set(cluster.keys);\n if (disjoint.every((candidate) => candidate.keys.every((key) => !keys.has(key)))) {\n disjoint.push(cluster);\n }\n }\n if (disjoint.length >= 2) {\n overloadCount += 1;\n const report = calledRefs.get(ref);\n proposals.push({\n kind: \"overload-split\",\n ref,\n shapeEntropyBits: report?.shapeEntropyBits ?? 0,\n clusters: disjoint.slice(0, MAX_PROPOSALS_PER_KIND).map((cluster) => ({\n keys: cluster.keys,\n calls: cluster.calls,\n })),\n });\n }\n }\n }\n\n // sequence-fuse: only successful high-level action sequences repeated in\n // independent fabric_exec executions can imply a reusable composite. OMP\n // primitives are implementation steps (and should be batched instead),\n // while failed or ignored operations break contiguity rather than being\n // silently bridged. Every ref must be distinct and three executions must\n // agree before action names alone are strong enough to warrant review.\n const sequenceCounts = new Map<\n string,\n { sequence: string[]; occurrences: number; executions: Set<number> }\n >();\n const recordSequenceSegment = (refs: readonly string[], execution: number): void => {\n for (\n let length = FUSE_MIN_SEQUENCE_LENGTH;\n length <= Math.min(FUSE_MAX_SEQUENCE_LENGTH, refs.length);\n length++\n ) {\n for (let start = 0; start + length <= refs.length; start++) {\n const sequence = refs.slice(start, start + length);\n if (new Set(sequence).size !== sequence.length) continue;\n const id = sequence.join(\"\u2192\");\n const entry = sequenceCounts.get(id) ?? {\n sequence,\n occurrences: 0,\n executions: new Set<number>(),\n };\n entry.occurrences += 1;\n entry.executions.add(execution);\n sequenceCounts.set(id, entry);\n }\n }\n };\n input.traces.forEach((sourceTrace, execution) => {\n let segment: string[] = [];\n const flush = (): void => {\n recordSequenceSegment(segment, execution);\n segment = [];\n };\n for (const operation of sourceTrace.operations) {\n if (\n operation.outcome !== \"succeeded\" ||\n operation.ref.startsWith(\"fabric.\") ||\n operation.ref.startsWith(\"omp.\")\n ) {\n flush();\n } else {\n segment.push(operation.ref);\n }\n }\n flush();\n });\n const fuseCandidates = [...sequenceCounts.values()]\n .filter(\n (entry) =>\n entry.occurrences >= FUSE_MIN_OCCURRENCES &&\n entry.executions.size >= FUSE_MIN_EXECUTIONS,\n )\n .sort(\n (left, right) =>\n right.sequence.length - left.sequence.length ||\n right.occurrences - left.occurrences ||\n compareCodeUnits(left.sequence.join(\"\u2192\"), right.sequence.join(\"\u2192\")),\n );\n const selected: { sequence: string[]; occurrences: number }[] = [];\n for (const candidate of fuseCandidates) {\n if (selected.length >= MAX_PROPOSALS_PER_KIND) break;\n const redundant = selected.some(\n (chosen) =>\n contains(candidate.sequence, chosen.sequence) || contains(chosen.sequence, candidate.sequence),\n );\n if (redundant) continue;\n selected.push(candidate);\n }\n for (const candidate of selected) {\n proposals.push({\n kind: \"sequence-fuse\",\n sequence: candidate.sequence,\n occurrences: candidate.occurrences,\n });\n }\n\n // noise-quarantine: a called ref that fails more than it succeeds, with\n // more than one failure stage, is a candidate to hide from the\n // model-facing catalog. The precondition (more failures than successes)\n // carries the replay-safety argument for retiring it.\n const quarantineCandidates = input.report.refs\n .filter(\n (ref) =>\n ref.calls >= QUARANTINE_MIN_CALLS &&\n ref.failed > ref.succeeded &&\n ref.failureStageEntropyBits >= QUARANTINE_MIN_STAGE_ENTROPY_BITS,\n )\n .filter((ref) => !input.surface || surfaceRefs.has(ref.ref))\n .slice(0, MAX_PROPOSALS_PER_KIND);\n for (const ref of quarantineCandidates) {\n proposals.push({\n kind: \"noise-quarantine\",\n ref: ref.ref,\n calls: ref.calls,\n succeeded: ref.succeeded,\n failed: ref.failed,\n failureStageEntropyBits: ref.failureStageEntropyBits,\n });\n }\n\n return proposals;\n};\n\nconst deepCloneJson = (value: unknown): unknown =>\n value === undefined ? {} : (JSON.parse(JSON.stringify(value)) as unknown);\n\n// Apply the mechanically applicable proposals as a pure surface rewrite.\n// The input surface is never mutated; enum-tighten injects the observed enum\n// beneath the declared one and noise-quarantine removes the action.\n// Overload-split, sequence-fuse, and declare-enum stay review-only.\nexport const applyProposalsToSurface = (\n surface: EntropySurfaceSnapshot,\n proposals: readonly EntropyProposal[],\n): EntropySurfaceSnapshot => {\n const actions: EntropySurfaceAction[] = surface.actions.map((action) => ({\n ref: action.ref,\n inputSchema: deepCloneJson(action.inputSchema),\n }));\n const quarantined = new Set<string>();\n for (const proposal of proposals) {\n if (proposal.kind === \"noise-quarantine\") {\n quarantined.add(proposal.ref);\n continue;\n }\n if (proposal.kind === \"enum-tighten\") {\n const action = actions.find((candidate) => candidate.ref === proposal.ref);\n if (!action || !isPlainRecord(action.inputSchema)) continue;\n const properties = schemaProperties(action.inputSchema);\n if (!properties || !isPlainRecord(properties[proposal.key])) continue;\n properties[proposal.key] = {\n ...(properties[proposal.key] as Record<string, unknown>),\n enum: [...proposal.values],\n };\n }\n }\n const survivors = actions\n .filter((action) => !quarantined.has(action.ref))\n .sort((left, right) => compareCodeUnits(left.ref, right.ref));\n return { version: 1, actions: survivors };\n};\n\n// The ratchet: a compiled surface must not increase the measured score and\n// must preserve every successful call. Monotonicity is measured, never\n// argued.\nexport const evaluateGate = (before: EntropyReport, after: EntropyReport): EntropyGateResult => {\n const reasons: string[] = [];\n if (after.score > before.score) {\n reasons.push(`score increased ${before.score} \u2192 ${after.score}`);\n }\n if (after.totals.succeeded < before.totals.succeeded) {\n reasons.push(\n `successful calls dropped ${before.totals.succeeded} \u2192 ${after.totals.succeeded}`,\n );\n }\n return {\n passed: reasons.length === 0,\n beforeScore: before.score,\n afterScore: after.score,\n delta: roundMetric(after.score - before.score),\n reasons,\n };\n};\n", "// Machine-wide value-observation pooling for the entropy compiler. The\n// session window stays small by design (gate-local, always fresh), but\n// sparse closed domains never reach the derivation thresholds inside one\n// window. The pool accumulates per-(ref, key, value) counts across every\n// window the compiler reads, with exact per-session deltas so a growing\n// session file is never counted twice and a rewritten one retracts its old\n// contribution before adding the new one. Bounded by construction: each\n// entry tracks at most POOL_TRACKED_VALUES distinct values (above the\n// derivation's ENUM_MAX_DISTINCT, so an overflowed domain stays provably\n// ineligible instead of silently re-qualifying after eviction),\n// POOL_TRACKED_SESSIONS files carry per-session counts for exact deltas,\n// and evicted sessions bake into the totals with their digest remembered\n// so the same evidence never merges twice.\n\nimport { createHash } from \"node:crypto\";\nimport { compareCodeUnits } from \"./fingerprint.js\";\nimport type { EntropyValueObservation } from \"./types.js\";\n\nexport const OBSERVATION_POOL_VERSION = 1 as const;\nexport const POOL_TRACKED_VALUES = 16;\nexport const POOL_TRACKED_SESSIONS = 16;\nexport const POOL_BAKED_DIGESTS = 512;\n\nexport interface EntropyPoolValueCount {\n value: string | number | boolean;\n count: number;\n}\n\nexport interface EntropyObservationPoolEntry {\n ref: string;\n key: string;\n values: EntropyPoolValueCount[];\n total: number;\n}\n\nexport interface EntropyPoolTrackedSession {\n file: string;\n digest: string;\n counts: Record<string, number>;\n}\n\nexport interface EntropyObservationPoolFile {\n version: typeof OBSERVATION_POOL_VERSION;\n entries: EntropyObservationPoolEntry[];\n tracked: EntropyPoolTrackedSession[];\n baked: string[];\n}\n\nexport interface EntropyObservationWindow {\n file: string;\n observations: readonly EntropyValueObservation[];\n}\n\nexport interface MergedObservationPool {\n file: EntropyObservationPoolFile;\n mergedSessions: number;\n skippedSessions: number;\n}\n\nconst SEPARATOR = \"\\u0000\";\n\n// Identity of one observation: ref, key, and the typed value, so `1`\n// (number) and \"1\" (string) stay distinct evidence.\nexport const observationIdentity = (\n observation: EntropyValueObservation,\n): string =>\n `${observation.ref}${SEPARATOR}${observation.key}${SEPARATOR}${typeof observation.value}:${String(observation.value)}`;\n\nconst entryValueKey = (value: string | number | boolean): string =>\n `${typeof value}:${String(value)}`;\n\nconst valueFromKey = (valueKey: string): string | number | boolean => {\n const separator = valueKey.indexOf(\":\");\n const type = valueKey.slice(0, separator);\n const raw = valueKey.slice(separator + 1);\n if (type === \"number\") return Number(raw);\n if (type === \"boolean\") return raw === \"true\";\n return raw;\n};\n\nconst parseIdentity = (identity: string): { ref: string; key: string; valueKey: string } => {\n const first = identity.indexOf(SEPARATOR);\n const second = identity.indexOf(SEPARATOR, first + 1);\n return {\n ref: identity.slice(0, first),\n key: identity.slice(first + 1, second),\n valueKey: identity.slice(second + 1),\n };\n};\n\ninterface ObservationSummary {\n digest: string;\n counts: Record<string, number>;\n}\n\nconst digestFromIdentityCounts = (counts: Readonly<Record<string, number>>): string => {\n const hash = createHash(\"sha256\");\n hash.update(\"[\");\n let first = true;\n for (const [identity, count] of Object.entries(counts).sort(([left], [right]) =>\n compareCodeUnits(left, right),\n )) {\n const encoded = JSON.stringify(identity);\n const repeated = Array.from({ length: count }, () => encoded).join(\",\");\n hash.update(first ? repeated : `,${repeated}`);\n first = false;\n }\n hash.update(\"]\");\n return hash.digest(\"hex\");\n};\n\nconst summarizeObservations = (\n observations: readonly EntropyValueObservation[],\n): ObservationSummary => {\n const counts: Record<string, number> = {};\n const digestCounts: Record<string, number> = {};\n for (const observation of observations) {\n const identity = observationIdentity(observation);\n counts[identity] = (counts[identity] ?? 0) + (observation.count ?? 1);\n digestCounts[identity] = (digestCounts[identity] ?? 0) + 1;\n }\n return { counts, digest: digestFromIdentityCounts(digestCounts) };\n};\n\n// Digest of one window's observation multiset. The hash input is byte-for-byte\n// compatible with the former sorted identity array, but sorting distinct keys\n// avoids an O(n log n) sweep over every repeated observation.\nexport const observationWindowDigest = (\n observations: readonly EntropyValueObservation[],\n): string => summarizeObservations(observations).digest;\n\nconst COOPERATIVE_OBSERVATION_CHUNK = 256;\nconst COOPERATIVE_DIGEST_CHUNK = 512;\n\nconst yieldToLoop = (): Promise<void> =>\n new Promise((resolve) => setImmediate(resolve));\n\nconst digestFromIdentityCountsAsync = async (\n counts: Readonly<Record<string, number>>,\n): Promise<string> => {\n const hash = createHash(\"sha256\");\n hash.update(\"[\");\n let first = true;\n let encodedBatch: string[] = [];\n const flush = async (): Promise<void> => {\n if (encodedBatch.length === 0) return;\n hash.update(`${first ? \"\" : \",\"}${encodedBatch.join(\",\")}`);\n first = false;\n encodedBatch = [];\n await yieldToLoop();\n };\n for (const [identity, count] of Object.entries(counts).sort(([left], [right]) =>\n compareCodeUnits(left, right),\n )) {\n const encoded = JSON.stringify(identity);\n for (let occurrence = 0; occurrence < count; occurrence += 1) {\n encodedBatch.push(encoded);\n if (encodedBatch.length >= COOPERATIVE_DIGEST_CHUNK) await flush();\n }\n }\n if (encodedBatch.length > 0) {\n hash.update(`${first ? \"\" : \",\"}${encodedBatch.join(\",\")}`);\n }\n hash.update(\"]\");\n return hash.digest(\"hex\");\n};\n\nconst summarizeObservationsAsync = async (\n observations: readonly EntropyValueObservation[],\n): Promise<ObservationSummary> => {\n const counts: Record<string, number> = {};\n const digestCounts: Record<string, number> = {};\n for (let index = 0; index < observations.length; index += 1) {\n const observation = observations[index]!;\n const identity = observationIdentity(observation);\n counts[identity] = (counts[identity] ?? 0) + (observation.count ?? 1);\n digestCounts[identity] = (digestCounts[identity] ?? 0) + 1;\n if ((index + 1) % COOPERATIVE_OBSERVATION_CHUNK === 0) await yieldToLoop();\n }\n return { counts, digest: await digestFromIdentityCountsAsync(digestCounts) };\n};\n\ninterface WorkingEntry {\n ref: string;\n key: string;\n values: Map<string, { value: string | number | boolean; count: number }>;\n total: number;\n}\n\nconst workingFromPool = (\n pool: EntropyObservationPoolFile | undefined,\n): Map<string, WorkingEntry> => {\n const working = new Map<string, WorkingEntry>();\n if (!pool) return working;\n for (const entry of pool.entries) {\n const values = new Map<string, { value: string | number | boolean; count: number }>();\n for (const item of entry.values) {\n values.set(entryValueKey(item.value), { value: item.value, count: item.count });\n }\n working.set(`${entry.ref}${SEPARATOR}${entry.key}`, {\n ref: entry.ref,\n key: entry.key,\n values,\n total: entry.total,\n });\n }\n return working;\n};\n\nconst applyEntryDelta = (\n working: Map<string, WorkingEntry>,\n identity: string,\n weight: number,\n): string => {\n const { ref, key, valueKey } = parseIdentity(identity);\n const entryId = `${ref}${SEPARATOR}${key}`;\n let entry = working.get(entryId);\n if (!entry) {\n entry = { ref, key, values: new Map(), total: 0 };\n working.set(entryId, entry);\n }\n const current = entry.values.get(valueKey);\n const nextCount = (current?.count ?? 0) + weight;\n entry.total += weight;\n if (nextCount > 0) {\n entry.values.set(valueKey, {\n value: current?.value ?? valueFromKey(valueKey),\n count: nextCount,\n });\n } else {\n entry.values.delete(valueKey);\n }\n if (entry.values.size === 0 && entry.total <= 0) working.delete(entryId);\n return entryId;\n};\n\n// The tracked-value cap bounds the pool file. Eviction only ever touches\n// entries already past the derivation's distinct guard (16 tracked values\n// exceed the 8-value eligibility), so it can never flip an eligible\n// parameter ineligible, and an overflowed domain stays provably open.\nconst enforceValueCap = (entry: WorkingEntry): void => {\n while (entry.values.size > POOL_TRACKED_VALUES) {\n let evictKey: string | undefined;\n let evictCount = Number.POSITIVE_INFINITY;\n for (const [valueKey, item] of entry.values) {\n if (\n evictKey === undefined ||\n item.count < evictCount ||\n (item.count === evictCount && compareCodeUnits(valueKey, evictKey) > 0)\n ) {\n evictKey = valueKey;\n evictCount = item.count;\n }\n }\n if (evictKey === undefined) return;\n entry.total -= entry.values.get(evictKey)!.count;\n entry.values.delete(evictKey);\n }\n};\n\nconst serializePool = (\n working: Map<string, WorkingEntry>,\n tracked: EntropyPoolTrackedSession[],\n baked: string[],\n): EntropyObservationPoolFile => ({\n version: OBSERVATION_POOL_VERSION,\n entries: [...working.values()]\n .map((entry) => ({\n ref: entry.ref,\n key: entry.key,\n total: entry.total,\n values: [...entry.values.values()]\n .map((item) => ({ value: item.value, count: item.count }))\n .sort(\n (left, right) =>\n right.count - left.count ||\n compareCodeUnits(entryValueKey(left.value), entryValueKey(right.value)),\n ),\n }))\n .sort((left, right) =>\n compareCodeUnits(\n `${left.ref}${SEPARATOR}${left.key}`,\n `${right.ref}${SEPARATOR}${right.key}`,\n ),\n ),\n tracked,\n baked,\n});\n\ninterface SummarizedObservationWindow {\n file: string;\n summary: ObservationSummary;\n}\n\nconst mergeObservationSummaries = (\n pool: EntropyObservationPoolFile | undefined,\n windows: readonly SummarizedObservationWindow[],\n): MergedObservationPool => {\n const working = workingFromPool(pool);\n const tracked = [...(pool?.tracked ?? [])];\n const baked = [...(pool?.baked ?? [])];\n const bakedSet = new Set(baked);\n const trackedDigests = new Set(tracked.map((session) => session.digest));\n let mergedSessions = 0;\n let skippedSessions = 0;\n for (const window of windows) {\n const { digest, counts: fresh } = window.summary;\n if (bakedSet.has(digest) || trackedDigests.has(digest)) {\n skippedSessions += 1;\n continue;\n }\n const existingIndex = tracked.findIndex((session) => session.file === window.file);\n const existing = existingIndex >= 0 ? tracked[existingIndex] : undefined;\n const delta: Record<string, number> = { ...fresh };\n if (existing) {\n for (const [identity, count] of Object.entries(existing.counts)) {\n delta[identity] = (delta[identity] ?? 0) - count;\n }\n }\n const touched = new Set<string>();\n for (const [identity, weight] of Object.entries(delta)) {\n if (weight === 0) continue;\n touched.add(applyEntryDelta(working, identity, weight));\n }\n for (const entryId of touched) {\n const entry = working.get(entryId);\n if (entry) enforceValueCap(entry);\n }\n const trackedSession = { file: window.file, digest, counts: fresh };\n if (existing) {\n tracked[existingIndex] = trackedSession;\n } else {\n tracked.push(trackedSession);\n if (tracked.length > POOL_TRACKED_SESSIONS) {\n const oldest = tracked.shift()!;\n if (!bakedSet.has(oldest.digest)) {\n baked.push(oldest.digest);\n bakedSet.add(oldest.digest);\n while (baked.length > POOL_BAKED_DIGESTS) {\n bakedSet.delete(baked.shift()!);\n }\n }\n }\n }\n trackedDigests.add(digest);\n mergedSessions += 1;\n }\n return {\n file: serializePool(working, tracked, baked),\n mergedSessions,\n skippedSessions,\n };\n};\n\n// Merge one session-window scan into the pool. A session contributes exactly\n// once per content. The async form performs the expensive observation summary\n// in deterministic chunks for extension hooks; the pure form remains the\n// certification API.\nexport const mergeObservationWindow = (\n pool: EntropyObservationPoolFile | undefined,\n windows: readonly EntropyObservationWindow[],\n): MergedObservationPool => mergeObservationSummaries(\n pool,\n windows.map((window) => ({\n file: window.file,\n summary: summarizeObservations(window.observations),\n })),\n);\n\nexport const mergeObservationWindowAsync = async (\n pool: EntropyObservationPoolFile | undefined,\n windows: readonly EntropyObservationWindow[],\n): Promise<MergedObservationPool> => {\n const summarized: SummarizedObservationWindow[] = [];\n for (const window of windows) {\n summarized.push({\n file: window.file,\n summary: await summarizeObservationsAsync(window.observations),\n });\n }\n await yieldToLoop();\n return mergeObservationSummaries(pool, summarized);\n};\n\n// Expand the pool into the flat value-observation corpus the derivation\n// consumes. Counts travel as multiplicity, so pooled evidence costs one\n// observation per distinct value instead of one per recorded call.\nexport const poolToValueObservations = (\n pool: EntropyObservationPoolFile | undefined,\n): EntropyValueObservation[] => {\n if (!pool) return [];\n const observations: EntropyValueObservation[] = [];\n for (const entry of pool.entries) {\n for (const item of entry.values) {\n observations.push({ ref: entry.ref, key: entry.key, value: item.value, count: item.count });\n }\n }\n return observations;\n};\n", "// Persistence for the machine-wide observation pool: <agent\n// dir>/fabric/entropy/observation-pool.json, locked across OMP processes\n// sharing the agent directory. A damaged pool surfaces as an error and\n// blocks merges from overwriting it, the same discipline as the compiled\n// surface. The pool is pure derived evidence (session audits are the\n// source of truth), so it never gates enforcement, only thresholds.\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { writeJsonAtomic, writeJsonAtomicAsync } from \"../core/atomic-write.js\";\nimport { withExclusiveFileLock, withExclusiveFileLockAsync } from \"../core/file-lock.js\";\nimport {\n OBSERVATION_POOL_VERSION,\n type EntropyObservationPoolEntry,\n type EntropyObservationPoolFile,\n type EntropyPoolTrackedSession,\n type EntropyPoolValueCount,\n} from \"./pool.js\";\n\nconst POOL_LOCK_ATTEMPTS = 50;\nconst POOL_LOCK_DELAY_MS = 5;\nconst POOL_STALE_LOCK_MS = 30_000;\n\n// Parse bounds: generous over the merge's own caps so a future cap change\n// never bricks an existing pool, tight enough that a damaged file cannot\n// claim unbounded memory.\nconst POOL_MAX_ENTRIES = 8_192;\nconst POOL_MAX_VALUES_PER_ENTRY = 64;\nconst POOL_MAX_TRACKED = 64;\nconst POOL_MAX_BAKED = 2_048;\n\nexport const observationPoolDirectory = (agentDir: string): string =>\n path.join(agentDir, \"fabric\", \"entropy\");\n\nconst poolPath = (directory: string): string => path.join(directory, \"observation-pool.json\");\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst errorCode = (error: unknown): string | undefined =>\n isRecord(error) && typeof error.code === \"string\" ? error.code : undefined;\n\nconst errorText = (error: unknown): string =>\n (error instanceof Error ? error.message : String(error)).slice(0, 200);\n\nconst isPrimitive = (value: unknown): value is string | number | boolean =>\n typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n\nconst parseValueCount = (value: unknown): EntropyPoolValueCount | undefined => {\n if (!isRecord(value) || !isPrimitive(value.value)) return undefined;\n if (!Number.isSafeInteger(value.count) || (value.count as number) < 1) return undefined;\n return { value: value.value, count: value.count as number };\n};\n\nconst parseEntry = (value: unknown): EntropyObservationPoolEntry | undefined => {\n if (!isRecord(value) || typeof value.ref !== \"string\" || !value.ref.trim()) return undefined;\n if (typeof value.key !== \"string\" || !value.key.trim()) return undefined;\n if (!Number.isSafeInteger(value.total) || (value.total as number) < 0) return undefined;\n if (!Array.isArray(value.values) || value.values.length > POOL_MAX_VALUES_PER_ENTRY) {\n return undefined;\n }\n const values: EntropyPoolValueCount[] = [];\n for (const item of value.values) {\n const parsed = parseValueCount(item);\n if (!parsed) return undefined;\n values.push(parsed);\n }\n const seen = new Set<string>();\n for (const item of values) {\n const key = `${typeof item.value}:${String(item.value)}`;\n if (seen.has(key)) return undefined;\n seen.add(key);\n }\n return { ref: value.ref.trim(), key: value.key.trim(), total: value.total as number, values };\n};\n\nconst parseTrackedSession = (value: unknown): EntropyPoolTrackedSession | undefined => {\n if (!isRecord(value) || typeof value.file !== \"string\" || !value.file.trim()) return undefined;\n if (typeof value.digest !== \"string\" || !value.digest.trim()) return undefined;\n if (!isRecord(value.counts)) return undefined;\n const counts: Record<string, number> = {};\n for (const [identity, count] of Object.entries(value.counts)) {\n if (!Number.isSafeInteger(count) || (count as number) < 1) return undefined;\n counts[identity] = count as number;\n }\n return { file: value.file.trim(), digest: value.digest.trim(), counts };\n};\n\nconst parsePoolFile = (value: unknown): EntropyObservationPoolFile | undefined => {\n if (!isRecord(value) || value.version !== OBSERVATION_POOL_VERSION) return undefined;\n if (!Array.isArray(value.entries) || value.entries.length > POOL_MAX_ENTRIES) return undefined;\n if (!Array.isArray(value.tracked) || value.tracked.length > POOL_MAX_TRACKED) return undefined;\n if (!Array.isArray(value.baked) || value.baked.length > POOL_MAX_BAKED) return undefined;\n if (!value.baked.every((digest) => typeof digest === \"string\" && digest.trim())) {\n return undefined;\n }\n const entries: EntropyObservationPoolEntry[] = []\n for (const entry of value.entries) {\n const parsed = parseEntry(entry);\n if (!parsed) return undefined;\n entries.push(parsed);\n }\n const tracked: EntropyPoolTrackedSession[] = [];\n const trackedFiles = new Set<string>();\n for (const session of value.tracked) {\n const parsed = parseTrackedSession(session);\n if (!parsed) return undefined;\n if (trackedFiles.has(parsed.file)) return undefined;\n trackedFiles.add(parsed.file);\n tracked.push(parsed);\n }\n const entrySeen = new Set<string>();\n for (const entry of entries) {\n const id = `${entry.ref}\\u0000${entry.key}`;\n if (entrySeen.has(id)) return undefined;\n entrySeen.add(id);\n }\n return {\n version: OBSERVATION_POOL_VERSION,\n entries,\n tracked,\n baked: value.baked.map((digest) => (digest as string).trim()),\n };\n};\n\nexport interface LoadedObservationPool {\n file?: EntropyObservationPoolFile;\n error?: string;\n}\n\nexport const loadObservationPool = (agentDir: string): LoadedObservationPool => {\n const file = poolPath(observationPoolDirectory(agentDir));\n let raw: string;\n try {\n raw = fs.readFileSync(file, \"utf8\");\n } catch (error) {\n // A missing pool means evidence simply starts accumulating now.\n if (errorCode(error) === \"ENOENT\") return {};\n return { error: `observation pool is unreadable: ${errorText(error)}` };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return { error: \"observation pool is malformed JSON\" };\n }\n const parsedFile = parsePoolFile(parsed);\n if (!parsedFile) return { error: \"observation pool is invalid\" };\n return { file: parsedFile };\n};\n\nexport const loadObservationPoolAsync = async (\n agentDir: string,\n): Promise<LoadedObservationPool> => {\n const file = poolPath(observationPoolDirectory(agentDir));\n let raw: string;\n try {\n raw = await fs.promises.readFile(file, \"utf8\");\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") return {};\n return { error: `observation pool is unreadable: ${errorText(error)}` };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return { error: \"observation pool is malformed JSON\" };\n }\n const parsedFile = parsePoolFile(parsed);\n return parsedFile ? { file: parsedFile } : { error: \"observation pool is invalid\" };\n};\n\nexport interface SavedObservationPool {\n file: EntropyObservationPoolFile;\n written: boolean;\n}\n\nexport const saveObservationPool = (\n agentDir: string,\n file: EntropyObservationPoolFile,\n): SavedObservationPool =>\n withExclusiveFileLock(\n {\n directory: observationPoolDirectory(agentDir),\n lockName: \"observation-pool.lock\",\n timeoutMessage: \"Timed out waiting for the observation pool lock\",\n attempts: POOL_LOCK_ATTEMPTS,\n delayMs: POOL_LOCK_DELAY_MS,\n staleMs: POOL_STALE_LOCK_MS,\n },\n () => {\n // A damaged pool must never be silently rebuilt; fail so the tick\n // records the skip and leaves the file for recovery.\n const loaded = loadObservationPool(agentDir);\n if (loaded.error) throw new Error(loaded.error);\n const target = poolPath(observationPoolDirectory(agentDir));\n const serialized = `${JSON.stringify(file, null, 2)}\\n`;\n try {\n if (fs.readFileSync(target, \"utf8\") === serialized) return { file, written: false };\n } catch {\n // Missing file: proceed to write.\n }\n writeJsonAtomic(target, file, { space: 2, newline: true, mode: 0o600, dirMode: 0o700 });\n return { file, written: true };\n },\n );\n\nexport const saveObservationPoolAsync = async (\n agentDir: string,\n file: EntropyObservationPoolFile,\n): Promise<SavedObservationPool> =>\n withExclusiveFileLockAsync(\n {\n directory: observationPoolDirectory(agentDir),\n lockName: \"observation-pool.lock\",\n timeoutMessage: \"Timed out waiting for the observation pool lock\",\n attempts: POOL_LOCK_ATTEMPTS,\n delayMs: POOL_LOCK_DELAY_MS,\n staleMs: POOL_STALE_LOCK_MS,\n },\n async () => {\n const loaded = await loadObservationPoolAsync(agentDir);\n if (loaded.error) throw new Error(loaded.error);\n const target = poolPath(observationPoolDirectory(agentDir));\n const serialized = `${JSON.stringify(file, null, 2)}\\n`;\n try {\n if (await fs.promises.readFile(target, \"utf8\") === serialized) {\n return { file, written: false };\n }\n } catch {\n // Missing file: proceed to write.\n }\n await writeJsonAtomicAsync(target, file, {\n space: 2,\n newline: true,\n mode: 0o600,\n dirMode: 0o700,\n });\n return { file, written: true };\n },\n );\n", "// Live surface snapshots for the entropy meter. Discovery is Fabric's\n// authorization-free read path (read-only, no approval budget, no side\n// effects): providers answer `list` from static descriptors, in-memory\n// catalogs, or the MCP descriptor cache, so a minimal synthetic invocation\n// context is safe for command-time surface listing.\n\nimport type { ExtensionContext } from \"@oh-my-pi/pi-coding-agent\";\nimport type { FabricInvocationContext } from \"../protocol.js\";\nimport { stableJsonHash } from \"../core/stable-hash.js\";\nimport { compareCodeUnits, roundMetric, staticFreedomFromSchema } from \"./fingerprint.js\";\nimport type { EntropySurfaceSnapshot } from \"./types.js\";\n\nconst SURFACE_LIST_LIMIT = 1_000;\n\nexport interface EntropySurfaceListAction {\n ref: string;\n inputSchema: unknown;\n}\n\nexport interface EntropySurfaceRegistry {\n list(\n request: { limit?: number; declared?: boolean },\n context: FabricInvocationContext,\n ): Promise<readonly EntropySurfaceListAction[]>;\n}\n\nconst surfaceInvocationContext = (input: {\n extensionContext: ExtensionContext;\n cwd: string;\n}): FabricInvocationContext => ({\n cwd: input.cwd,\n signal: undefined,\n parentToolCallId: \"fabric-entropy-surface\",\n nestedToolCallId: \"fabric-entropy-surface\",\n extensionContext: input.extensionContext,\n update: () => {},\n});\n\n// Snapshot the live action surface (ref + input schema per action) through\n// the registry's discovery path. Sorted by ref so the snapshot hashes and\n// diffs deterministically.\nexport const liveSurfaceSnapshot = async (input: {\n registry: EntropySurfaceRegistry;\n extensionContext: ExtensionContext;\n cwd: string;\n}): Promise<EntropySurfaceSnapshot> => {\n // Declared truth, never the enforced view: the compile's base surface\n // keeps quarantined refs visible so base-digest proofs and artifact\n // carry-forward read the declared schema. The model-facing catalog keeps\n // hiding them.\n const actions = await input.registry.list(\n { limit: SURFACE_LIST_LIMIT, declared: true },\n surfaceInvocationContext(input),\n );\n return {\n version: 1,\n actions: actions\n .map((action) => ({ ref: action.ref, inputSchema: action.inputSchema }))\n .sort((left, right) => compareCodeUnits(left.ref, right.ref)),\n };\n};\n\nexport const entropySurfaceHash = (surface: EntropySurfaceSnapshot): string =>\n stableJsonHash(surface);\n\nexport interface EntropySurfaceFreedomEntry {\n ref: string;\n freedom: number;\n}\n\nexport interface EntropySurfaceFreedomReport {\n actions: EntropySurfaceFreedomEntry[];\n total: number;\n mean: number;\n}\n\n// Static freedom of a whole surface: per-action scores sorted worst-first,\n// with the total and mean the ratchet tracks. Computable with no corpus at\n// all, which is what lets a candidate surface be scored before any session\n// runs against it.\nexport const surfaceFreedomReport = (\n surface: EntropySurfaceSnapshot,\n): EntropySurfaceFreedomReport => {\n const actions = surface.actions\n .map((action) => ({ ref: action.ref, freedom: staticFreedomFromSchema(action.inputSchema) }))\n .sort((left, right) => right.freedom - left.freedom || compareCodeUnits(left.ref, right.ref));\n const total = roundMetric(actions.reduce((sum, entry) => sum + entry.freedom, 0));\n return {\n actions,\n total,\n mean: actions.length > 0 ? roundMetric(total / actions.length) : 0,\n };\n};\n", "// The autonomous compile step: measure \u2192 propose \u2192 apply the mechanical\n// subset \u2192 re-measure \u2192 gate. The gate proves two things on the retained\n// corpus: the score never increases, and every successful call to a ref\n// the compile touched still parses against the candidate surface.\n// Overload-split and sequence-fuse author new composite definitions, so they\n// stay surfaced for review and never auto-apply. enum-tighten only ever\n// tightens beneath a declared enum (the closed-domain rule), while an open\n// vocabulary produces a declare-enum review signal only when the schema\n// author explicitly opts into learning that domain.\n\nimport { stableJsonHash, stableJsonHashArrayAsync } from \"../core/stable-hash.js\";\nimport { measureEntropy, measureEntropyAsync } from \"./meter.js\";\nimport {\n applyProposalsToSurface,\n evaluateGate,\n proposeEntropyReductions,\n type EntropyProposalInput,\n} from \"./passes.js\";\nimport {\n COMPILED_SURFACE_VERSION,\n MAX_COMPILED_SURFACE_PROPOSALS,\n applyCompiledSurface,\n replaySuccessfulCalls,\n replaySuccessfulCallsAsync,\n schemaDigest,\n type CompiledSurfaceAppliedProposal,\n type CompiledSurfaceFile,\n} from \"./compiled-surface.js\";\nimport { entropySurfaceHash } from \"./surface.js\";\nimport { ENTROPY_METRIC_VERSION } from \"./types.js\";\nimport type {\n EntropyAuditCall,\n EntropyGateResult,\n EntropyProposal,\n EntropyRepairRowInput,\n EntropyReport,\n EntropySurfaceSnapshot,\n EntropyTraceInput,\n EntropyValueObservation,\n} from \"./types.js\";\n\n// The kinds the autonomous loop may apply. Every other proposal carries its\n// evidence to the surfaced review queue instead.\nexport const AUTO_APPLY_PROPOSAL_KINDS: readonly string[] = [\"enum-tighten\", \"noise-quarantine\"];\n\n// The review queue for display: every proposal the autonomous loop declined\n// to apply, derived from the same evidence a tick would use. Each signal\n// names freedom the compiler found and refused to invent.\nexport const entropyReviewSignals = (input: EntropyProposalInput): EntropyProposal[] =>\n proposeEntropyReductions(input).filter(\n (proposal) => !(AUTO_APPLY_PROPOSAL_KINDS as readonly string[]).includes(proposal.kind),\n );\n\n// One-line rendering of a review signal for the /fabric entropy display.\nexport const formatEntropyReviewSignal = (proposal: EntropyProposal): string => {\n if (proposal.kind === \"declare-enum\") {\n const values = proposal.values\n .slice(0, 4)\n .map((value) => String(value))\n .join(\", \");\n return `declare-enum ${proposal.ref}.${proposal.key} (${values}${\n proposal.values.length > 4 ? \", ...\" : \"\"\n })`;\n }\n if (proposal.kind === \"overload-split\") {\n return `overload-split ${proposal.ref} (${proposal.clusters.length} key-set clusters)`;\n }\n if (proposal.kind === \"sequence-fuse\") {\n return `sequence-fuse ${proposal.sequence.join(\" -> \")}`;\n }\n return `${proposal.kind} ${proposal.ref}`;\n};\n\nexport interface CompileEntropyInput {\n traces: readonly EntropyTraceInput[];\n surface: EntropySurfaceSnapshot;\n repairs?: readonly EntropyRepairRowInput[];\n valueObservations?: readonly EntropyValueObservation[];\n auditCalls?: readonly EntropyAuditCall[];\n artifact?: CompiledSurfaceFile;\n catalogDigest?: string;\n}\n\nexport type CompileEntropyStatus = \"compiled\" | \"converged\" | \"rejected\";\n\nexport interface CompileEntropyOutcome {\n status: CompileEntropyStatus;\n /** The maintained artifact: new when compiled, the input artifact otherwise. */\n artifact?: CompiledSurfaceFile;\n report: EntropyReport;\n after?: EntropyReport;\n proposals: EntropyProposal[];\n gate?: EntropyGateResult;\n}\n\nconst proposalDetail = (proposal: EntropyProposal): { ref: string; detail: string } => {\n if (proposal.kind === \"enum-tighten\") {\n return { ref: proposal.ref, detail: `${proposal.key}: ${proposal.values.length} observed values` };\n }\n if (proposal.kind === \"noise-quarantine\") {\n return { ref: proposal.ref, detail: `${proposal.failed} failed vs ${proposal.succeeded} succeeded` };\n }\n return { ref: \"n/a\", detail: \"review-only\" };\n};\n\n// Refs the compile touched: tightened schemas and quarantined actions. The\n// replay gate scopes to this set; untouched refs keep their schema by\n// identity, so projection artifacts elsewhere cannot poison a compile.\nconst touchedRefs = (before: EntropySurfaceSnapshot, after: EntropySurfaceSnapshot): Set<string> => {\n const beforeByRef = new Map(before.actions.map((action) => [action.ref, action.inputSchema]));\n const touched = new Set<string>();\n for (const action of after.actions) {\n if (stableJsonHash(beforeByRef.get(action.ref)) !== stableJsonHash(action.inputSchema)) {\n touched.add(action.ref);\n }\n }\n for (const ref of beforeByRef.keys()) {\n if (!after.actions.some((action) => action.ref === ref)) touched.add(ref);\n }\n return touched;\n};\n\n// Build the maintained artifact from the candidate surface against the live\n// surface: overlay entries carry the live base digest, quarantined actions\n// carry theirs, and the applied ledger accumulates across compiles.\nconst artifactFromCandidate = (\n live: EntropySurfaceSnapshot,\n candidate: EntropySurfaceSnapshot,\n proposals: readonly EntropyProposal[],\n gate: { passed: boolean; beforeScore: number; afterScore: number; reasons: string[] },\n evidenceDigest: string,\n previous?: CompiledSurfaceFile,\n): CompiledSurfaceFile => {\n const liveByRef = new Map(live.actions.map((action) => [action.ref, action.inputSchema]));\n const actions = candidate.actions\n .filter(\n (action) => stableJsonHash(action.inputSchema) !== stableJsonHash(liveByRef.get(action.ref)),\n )\n .map((action) => ({\n ref: action.ref,\n inputSchema: action.inputSchema as Record<string, unknown>,\n baseSchemaDigest: schemaDigest(liveByRef.get(action.ref)),\n }));\n const candidateRefs = new Set(candidate.actions.map((action) => action.ref));\n const quarantined = live.actions\n .filter((action) => !candidateRefs.has(action.ref))\n .map((action) => ({ ref: action.ref, baseSchemaDigest: schemaDigest(action.inputSchema) }));\n const applied: CompiledSurfaceAppliedProposal[] = [...(previous?.applied ?? [])];\n const seen = new Set(applied.map((entry) => `${entry.kind}:${entry.ref}:${entry.detail}`));\n for (const proposal of proposals) {\n const { ref, detail } = proposalDetail(proposal);\n const identity = `${proposal.kind}:${ref}:${detail}`;\n if (seen.has(identity)) continue;\n seen.add(identity);\n applied.push({ kind: proposal.kind, ref, detail });\n }\n return {\n version: COMPILED_SURFACE_VERSION,\n metricVersion: ENTROPY_METRIC_VERSION,\n actions,\n quarantined,\n applied: applied.slice(0, MAX_COMPILED_SURFACE_PROPOSALS),\n gate,\n evidenceDigest,\n };\n};\n\nexport const compileEntropySurface = (input: CompileEntropyInput): CompileEntropyOutcome => {\n const effective = applyCompiledSurface(input.surface, input.artifact);\n const report = measureEntropy({\n traces: input.traces,\n surface: effective,\n ...(input.repairs ? { repairs: input.repairs } : {}),\n catalogDigest: input.catalogDigest ?? entropySurfaceHash(effective),\n });\n const proposals = proposeEntropyReductions({\n report,\n traces: input.traces,\n surface: effective,\n ...(input.repairs ? { repairs: input.repairs } : {}),\n ...(input.valueObservations ? { valueObservations: input.valueObservations } : {}),\n });\n const auto = proposals.filter((proposal) =>\n (AUTO_APPLY_PROPOSAL_KINDS as readonly string[]).includes(proposal.kind),\n );\n if (auto.length === 0) {\n return {\n status: \"converged\",\n ...(input.artifact ? { artifact: input.artifact } : {}),\n report,\n proposals,\n };\n }\n const candidate = applyProposalsToSurface(effective, auto);\n const after = measureEntropy({\n traces: input.traces,\n surface: candidate,\n ...(input.repairs ? { repairs: input.repairs } : {}),\n catalogDigest: entropySurfaceHash(candidate),\n });\n const scoreGate = evaluateGate(report, after);\n const violations = replaySuccessfulCalls(\n candidate,\n effective,\n input.traces,\n touchedRefs(effective, candidate),\n input.auditCalls,\n );\n const reasons = [\n ...scoreGate.reasons,\n ...violations.map((violation) => `${violation.ref}: ${violation.reason}`),\n ];\n const gate: EntropyGateResult = {\n passed: scoreGate.passed && violations.length === 0,\n beforeScore: report.score,\n afterScore: after.score,\n delta: scoreGate.delta,\n reasons: scoreGate.passed && violations.length === 0 ? [] : reasons,\n };\n if (gate.passed) {\n const evidenceDigest = stableJsonHash({\n traces: input.traces.length,\n operations: report.totals.operations,\n succeeded: report.totals.succeeded,\n failed: report.totals.failed,\n surface: entropySurfaceHash(effective),\n repairs: input.repairs?.length ?? 0,\n valueObservations: stableJsonHash(input.valueObservations ?? []),\n auditCalls: stableJsonHash(input.auditCalls ?? []),\n });\n return {\n status: \"compiled\",\n artifact: artifactFromCandidate(\n input.surface,\n candidate,\n auto,\n { passed: true, beforeScore: report.score, afterScore: after.score, reasons: [] },\n evidenceDigest,\n input.artifact,\n ),\n report,\n after,\n proposals,\n gate,\n };\n }\n return {\n status: \"rejected\",\n ...(input.artifact ? { artifact: input.artifact } : {}),\n report,\n after,\n proposals,\n gate,\n };\n};\n\nconst yieldToLoop = (): Promise<void> =>\n new Promise((resolve) => setImmediate(resolve));\n\n// Hook-safe compile path: streamed session ingestion and async stores keep I/O\n// off the TUI thread, while these checkpoints split the remaining pure CPU\n// phases. The synchronous compiler remains the deterministic certification API.\nexport const compileEntropySurfaceAsync = async (\n input: CompileEntropyInput,\n): Promise<CompileEntropyOutcome> => {\n const effective = applyCompiledSurface(input.surface, input.artifact);\n const report = await measureEntropyAsync({\n traces: input.traces,\n surface: effective,\n ...(input.repairs ? { repairs: input.repairs } : {}),\n catalogDigest: input.catalogDigest ?? entropySurfaceHash(effective),\n });\n await yieldToLoop();\n const proposals = proposeEntropyReductions({\n report,\n traces: input.traces,\n surface: effective,\n ...(input.repairs ? { repairs: input.repairs } : {}),\n ...(input.valueObservations ? { valueObservations: input.valueObservations } : {}),\n });\n const auto = proposals.filter((proposal) =>\n (AUTO_APPLY_PROPOSAL_KINDS as readonly string[]).includes(proposal.kind),\n );\n if (auto.length === 0) {\n return {\n status: \"converged\",\n ...(input.artifact ? { artifact: input.artifact } : {}),\n report,\n proposals,\n };\n }\n await yieldToLoop();\n const candidate = applyProposalsToSurface(effective, auto);\n const after = await measureEntropyAsync({\n traces: input.traces,\n surface: candidate,\n ...(input.repairs ? { repairs: input.repairs } : {}),\n catalogDigest: entropySurfaceHash(candidate),\n });\n const scoreGate = evaluateGate(report, after);\n await yieldToLoop();\n const violations = await replaySuccessfulCallsAsync(\n candidate,\n effective,\n input.traces,\n touchedRefs(effective, candidate),\n input.auditCalls,\n );\n const reasons = [\n ...scoreGate.reasons,\n ...violations.map((violation) => `${violation.ref}: ${violation.reason}`),\n ];\n const gate: EntropyGateResult = {\n passed: scoreGate.passed && violations.length === 0,\n beforeScore: report.score,\n afterScore: after.score,\n delta: scoreGate.delta,\n reasons: scoreGate.passed && violations.length === 0 ? [] : reasons,\n };\n if (gate.passed) {\n const [valueObservationsDigest, auditCallsDigest] = await Promise.all([\n stableJsonHashArrayAsync(input.valueObservations ?? []),\n stableJsonHashArrayAsync(input.auditCalls ?? []),\n ]);\n const evidenceDigest = stableJsonHash({\n traces: input.traces.length,\n operations: report.totals.operations,\n succeeded: report.totals.succeeded,\n failed: report.totals.failed,\n surface: entropySurfaceHash(effective),\n repairs: input.repairs?.length ?? 0,\n valueObservations: valueObservationsDigest,\n auditCalls: auditCallsDigest,\n });\n return {\n status: \"compiled\",\n artifact: artifactFromCandidate(\n input.surface,\n candidate,\n auto,\n { passed: true, beforeScore: report.score, afterScore: after.score, reasons: [] },\n evidenceDigest,\n input.artifact,\n ),\n report,\n after,\n proposals,\n gate,\n };\n }\n return {\n status: \"rejected\",\n ...(input.artifact ? { artifact: input.artifact } : {}),\n report,\n after,\n proposals,\n gate,\n };\n};", "import type { EntropyProposal } from \"./types.js\";\n\nconst METRIC_PRECISION = 6;\nconst MAX_APPLIED_DETAILS = 3;\nconst MAX_VALUE_LENGTH = 32;\n\nconst ENTROPY_COMMAND_HINTS = [\n {\n label: \"export\",\n command: \"/fabric entropy export [path]\",\n comment: \"snapshot the live surface (default <agent dir>/fabric/entropy/surface.json)\",\n },\n {\n label: \"share\",\n command: \"/fabric entropy export-artifact [path]\",\n comment: \"write the compiled artifact (default <agent dir>/fabric/entropy/artifact.json)\",\n },\n {\n label: \"merge\",\n command: \"/fabric entropy import <path>\",\n comment: \"merge a peer artifact (digest-proven entries only)\",\n },\n] as const;\n\nexport const formatEntropyMetric = (value: number): string => value.toFixed(METRIC_PRECISION);\n\nexport const formatEntropyCommandHints = (): string[] => {\n const heads = ENTROPY_COMMAND_HINTS.map((hint) => `${hint.label}: ${hint.command}`);\n const commentColumn = Math.max(...heads.map((head) => head.length)) + 2;\n return ENTROPY_COMMAND_HINTS.map(\n (hint, index) => `${heads[index]!.padEnd(commentColumn)}# ${hint.comment}`,\n );\n};\n\nconst formatDuration = (elapsedMs: number): string =>\n elapsedMs >= 1_000 ? `${(elapsedMs / 1_000).toFixed(1)}s` : `${Math.max(1, Math.round(elapsedMs))}ms`;\n\nconst formatValue = (value: string | number | boolean): string => {\n const rendered = typeof value === \"string\"\n ? (value.replace(/\\s+/gu, \" \").trim() || '\"\"')\n : String(value);\n return rendered.length <= MAX_VALUE_LENGTH\n ? rendered\n : `${rendered.slice(0, MAX_VALUE_LENGTH - 1)}\u2026`;\n};\n\nconst formatValues = (values: readonly (string | number | boolean)[]): string =>\n `{${values.map(formatValue).join(\", \")}}`;\n\nconst autoProposal = (proposal: EntropyProposal): boolean =>\n proposal.kind === \"enum-tighten\" || proposal.kind === \"noise-quarantine\";\n\nconst formatApplied = (proposal: EntropyProposal): string => {\n if (proposal.kind === \"enum-tighten\") {\n return `tightened ${proposal.ref}.${proposal.key} to ${formatValues(proposal.values)}`;\n }\n if (proposal.kind === \"noise-quarantine\") {\n return `hid ${proposal.ref} (${proposal.failed} failed, ${proposal.succeeded} succeeded)`;\n }\n return proposal.kind;\n};\n\nconst scoreChange = (before: number, after: number): string => {\n if (before === after) {\n return `entropy score unchanged at ${formatEntropyMetric(before)} (lower is better)`;\n }\n let precision = METRIC_PRECISION;\n while (precision < 12 && before.toFixed(precision) === after.toFixed(precision)) precision += 1;\n const delta = after - before;\n const format = (value: number): string => value.toFixed(precision);\n const absoluteDelta = format(Math.abs(delta));\n const renderedDelta = Number(absoluteDelta) === 0\n ? Math.abs(delta).toExponential(2)\n : absoluteDelta;\n return `entropy score ${delta < 0 ? \"improved\" : \"changed\"} ${format(before)} \u2192 ${format(after)} (${delta > 0 ? \"+\" : \"\u2212\"}${renderedDelta}; lower is better)`;\n};\n\nexport const entropyReviewKey = (proposals: readonly EntropyProposal[]): string => {\n const identities = proposals.map((proposal): string => {\n if (proposal.kind === \"declare-enum\") {\n return JSON.stringify([\n proposal.kind,\n proposal.ref,\n proposal.key,\n proposal.values.map((value) => [typeof value, value]),\n ]);\n }\n if (proposal.kind === \"overload-split\") {\n return JSON.stringify([\n proposal.kind,\n proposal.ref,\n proposal.clusters.map((cluster) => cluster.keys),\n ]);\n }\n if (proposal.kind === \"sequence-fuse\") {\n return JSON.stringify([proposal.kind, proposal.sequence]);\n }\n return JSON.stringify([proposal.kind, proposal.ref]);\n });\n identities.sort();\n return JSON.stringify(identities);\n};\n\nconst reviewLabel = (kind: EntropyProposal[\"kind\"], count: number): string => {\n const noun = kind === \"declare-enum\"\n ? \"enum declaration\"\n : kind === \"overload-split\"\n ? \"action split\"\n : kind === \"sequence-fuse\"\n ? \"sequence fusion\"\n : kind;\n return `${count} ${noun}${count === 1 ? \"\" : \"s\"}`;\n};\n\nexport const formatEntropyReviewNotice = (\n proposals: readonly EntropyProposal[],\n): string => {\n const counts = new Map<EntropyProposal[\"kind\"], number>();\n for (const proposal of proposals) counts.set(proposal.kind, (counts.get(proposal.kind) ?? 0) + 1);\n const summary = [...counts.entries()].map(([kind, count]) => reviewLabel(kind, count)).join(\" \u00B7 \");\n return `entropy: ${proposals.length} suggestion${proposals.length === 1 ? \"\" : \"s\"} await review${summary ? ` \u00B7 ${summary}` : \"\"} \u00B7 inspect with /fabric entropy`;\n};\n\nexport const formatEntropyCompileNotice = (input: {\n proposals: readonly EntropyProposal[];\n beforeScore: number;\n afterScore: number;\n elapsedMs: number;\n reviewCount?: number;\n}): string => {\n const applied = input.proposals.filter(autoProposal);\n const details = applied.slice(0, MAX_APPLIED_DETAILS).map(formatApplied);\n if (applied.length > MAX_APPLIED_DETAILS) {\n details.push(`+${applied.length - MAX_APPLIED_DETAILS} more`);\n }\n if (details.length === 0) details.push(\"surface updated\");\n const review = input.reviewCount\n ? ` \u00B7 ${input.reviewCount} suggestion${input.reviewCount === 1 ? \"\" : \"s\"} await review (/fabric entropy)`\n : \"\";\n return `entropy: background optimization complete (${formatDuration(input.elapsedMs)}) \u00B7 ${details.join(\" \u00B7 \")} \u00B7 ${scoreChange(input.beforeScore, input.afterScore)} \u00B7 safety checks passed${review}`;\n};\n", "// Corpus shaping for the entropy meter: turn persisted Fabric execution\n// traces and session JSONL into meter traces, and normalize catalog repair\n// rows. Only guarded, typed records are consumed \u2014 never rendered prose.\n\nimport {\n FABRIC_EXECUTION_TRACE_KIND,\n readFabricExecutionTraceV1,\n type FabricExecutionTraceV1,\n} from \"../audit/trace.js\";\nimport { stableJsonHash } from \"../core/stable-hash.js\";\nimport type { CatalogRepair } from \"../repairs/types.js\";\nimport type {\n EntropyAuditCall,\n EntropyReport,\n EntropyRepairRowInput,\n EntropyTraceInput,\n EntropyValueObservation,\n} from \"./types.js\";\n\nconst DEFAULT_TASK_KEY = \"(none)\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n// One Fabric execution trace becomes one meter trace. The first persisted\n// workflow phase is the deterministic task key for flow entropy.\nexport const entropyTraceFromFabricTrace = (\n trace: FabricExecutionTraceV1,\n model?: string,\n): EntropyTraceInput => ({\n operations: trace.operations.map((operation) => ({\n ref: operation.ref,\n args: operation.args,\n outcome: operation.outcome,\n ...(operation.failureStage !== undefined ? { failureStage: operation.failureStage } : {}),\n })),\n taskKey: trace.phases[0] ?? DEFAULT_TASK_KEY,\n ...(model ? { model } : {}),\n});\n\nconst MODEL_CHANGE_FILTER = '\"type\":\"model_change\"';\nconst ASSISTANT_FILTER = '\"role\":\"assistant\"';\n\n// Model identity for one parsed session record: `model_change` entries name\n// the provider/model from that point on, and assistant messages carry the\n// provider/model that produced the turn. A toolResult's producing model is\n// the one active at its line, so the scan tracks it in order.\nconst modelFromRecord = (parsed: Record<string, unknown>): string | undefined => {\n if (parsed.type === \"model_change\") {\n const provider = typeof parsed.provider === \"string\" ? parsed.provider : \"\";\n const modelId = typeof parsed.modelId === \"string\" ? parsed.modelId : \"\";\n return provider && modelId ? `${provider}/${modelId}` : undefined;\n }\n const message = isRecord(parsed.message) ? parsed.message : undefined;\n if (!message || message.role !== \"assistant\") return undefined;\n const provider = typeof message.provider === \"string\" ? message.provider : \"\";\n const modelId = typeof message.model === \"string\" ? message.model : \"\";\n return provider && modelId ? `${provider}/${modelId}` : undefined;\n};\n\ninterface ScannedSessionRecord {\n details: Record<string, unknown>;\n model?: string;\n}\n\ninterface SessionScanState {\n currentModel?: string;\n}\n\n// Cheap pre-filters keep multi-session scans fast on large logs. Filtering\n// happens before trim so a large prose-only JSONL record is never copied.\nconst scanSessionLine = (\n line: string,\n state: SessionScanState,\n): ScannedSessionRecord | undefined => {\n if (line === \"\") return undefined;\n const traceLine = line.includes(FABRIC_EXECUTION_TRACE_KIND);\n const modelLine =\n !traceLine && (line.includes(MODEL_CHANGE_FILTER) || line.includes(ASSISTANT_FILTER));\n if (!traceLine && !modelLine) return undefined;\n let parsed: unknown;\n try {\n parsed = JSON.parse(line.trim());\n } catch {\n return undefined;\n }\n if (!isRecord(parsed)) return undefined;\n if (modelLine) {\n const model = modelFromRecord(parsed);\n if (model) state.currentModel = model;\n return undefined;\n }\n const details = isRecord(parsed.details)\n ? parsed.details\n : isRecord(parsed.message) && isRecord(parsed.message.details)\n ? parsed.message.details\n : undefined;\n return isRecord(details)\n ? { details, ...(state.currentModel ? { model: state.currentModel } : {}) }\n : undefined;\n};\n\n// One scan yields all three evidence corpora. The async form consumes a\n// readline stream record-by-record, so large session files never monopolize\n// OMP's TUI event loop or require a whole-file string allocation.\nexport interface EntropySessionEvidence {\n traces: EntropyTraceInput[];\n valueObservations: EntropyValueObservation[];\n auditCalls: EntropyAuditCall[];\n}\n\nconst emptySessionEvidence = (): EntropySessionEvidence => ({\n traces: [],\n valueObservations: [],\n auditCalls: [],\n});\n\nconst appendSessionRecord = (\n evidence: EntropySessionEvidence,\n record: ScannedSessionRecord,\n): void => {\n const trace = readFabricExecutionTraceV1(record.details.trace);\n if (trace) evidence.traces.push(entropyTraceFromFabricTrace(trace, record.model));\n const audits = record.details.audits;\n if (!Array.isArray(audits)) return;\n for (const audit of audits) {\n if (!isRecord(audit)) continue;\n const ref = typeof audit.ref === \"string\" ? audit.ref : undefined;\n const args = isRecord(audit.args) ? audit.args : undefined;\n if (!ref || !args) continue;\n evidence.auditCalls.push({ ref, args });\n for (const [key, value] of Object.entries(args)) {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n evidence.valueObservations.push({ ref, key, value });\n }\n }\n }\n};\n\nexport const entropySessionEvidenceFromJsonl = (\n lines: readonly string[],\n): EntropySessionEvidence => {\n const evidence = emptySessionEvidence();\n const state: SessionScanState = {};\n for (const line of lines) {\n const record = scanSessionLine(line, state);\n if (record) appendSessionRecord(evidence, record);\n }\n return evidence;\n};\n\nexport interface EntropySessionEvidenceScan {\n evidence: EntropySessionEvidence;\n currentModel?: string;\n}\n\nexport const scanEntropySessionJsonlAsync = async (\n lines: AsyncIterable<string>,\n initialModel?: string,\n): Promise<EntropySessionEvidenceScan> => {\n const evidence = emptySessionEvidence();\n const state: SessionScanState = {\n ...(initialModel ? { currentModel: initialModel } : {}),\n };\n for await (const line of lines) {\n const record = scanSessionLine(line, state);\n if (record) appendSessionRecord(evidence, record);\n }\n return {\n evidence,\n ...(state.currentModel ? { currentModel: state.currentModel } : {}),\n };\n};\n\nexport const entropySessionEvidenceFromJsonlAsync = async (\n lines: AsyncIterable<string>,\n): Promise<EntropySessionEvidence> => (await scanEntropySessionJsonlAsync(lines)).evidence;\n\n// Extract meter traces from OMP session JSONL lines. Malformed lines, non-trace\n// entries, and envelopes that fail the trace guard are skipped without\n// throwing; only typed, guarded trace V1 envelopes count.\nexport const entropyTracesFromSessionJsonl = (lines: readonly string[]): EntropyTraceInput[] =>\n entropySessionEvidenceFromJsonl(lines).traces;\n\n// Verbatim audit arguments are the authoritative value corpus for\n// enum-tighten. The observations stay local to the session record, exactly\n// like the audits.\nexport const entropyValueObservationsFromSessionJsonl = (\n lines: readonly string[],\n): EntropyValueObservation[] => entropySessionEvidenceFromJsonl(lines).valueObservations;\n\n// One verbatim call per persisted audit: the authoritative replay corpus.\n// Trace V1 projects values away per ref (external and MCP calls keep none),\n// so replay validation consults these whenever a touched ref has them.\nexport const entropyAuditCallsFromSessionJsonl = (\n lines: readonly string[],\n): EntropyAuditCall[] => entropySessionEvidenceFromJsonl(lines).auditCalls;\n\n// Normalize catalog repair rows for the meter. `ref` is the target the row\n// repairs toward: the declared key's action for key aliases, or\n// provider.declared-action for action aliases.\nexport const entropyRepairRows = (repairs: readonly CatalogRepair[]): EntropyRepairRowInput[] =>\n repairs.map((repair) =>\n repair.kind === \"keyAlias\"\n ? { kind: \"keyAlias\", ref: repair.ref, from: repair.from, to: repair.to }\n : {\n kind: \"actionAlias\",\n ref: `${repair.provider}.${repair.to}`,\n from: repair.from,\n to: repair.to,\n },\n );\n\n// Stable hash of a report \u2014 the determinism check compares these.\nexport const entropyReportHash = (report: EntropyReport): string => stableJsonHash(report);\n", "// On-demand session measurement. Session JSONL is the source of truth, so\n// entropy is never recorded: the newest machine sessions are read live\n// across every project under the agent dir, measured against the current\n// surface, and the trend is the per-session slope. Evidence breadth matches\n// enforcement breadth: the compiled surface governs the whole machine, so\n// it learns from the whole machine. The repair table, compiled surface, and\n// bounded observation pool are the only durable derived artifacts; only the\n// first two change runtime behavior.\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { sessionDirForCwd, sessionsDirRoot } from \"../memory/discovery.js\";\nimport {\n entropySessionEvidenceFromJsonl,\n entropyTracesFromSessionJsonl,\n scanEntropySessionJsonlAsync,\n type EntropySessionEvidence,\n} from \"./corpus.js\";\nimport { measureEntropy, measureEntropyAsync } from \"./meter.js\";\nimport { compareCodeUnits, trendFromScores } from \"./fingerprint.js\";\nimport type {\n EntropyAuditCall,\n EntropyModelReport,\n EntropyReport,\n EntropySurfaceSnapshot,\n EntropyTraceInput,\n EntropyTrend,\n EntropyValueObservation,\n} from \"./types.js\";\n\nconst DEFAULT_SESSION_WINDOW = 8;\n\nconst SESSION_STAT_CONCURRENCY = 32;\nconst SESSION_READ_CONCURRENCY = 4;\nconst SESSION_EVIDENCE_CACHE_LIMIT = 16;\n\ninterface StampedSessionFile {\n file: string;\n mtime: number;\n}\n\ninterface CachedSessionEvidence {\n size: number;\n mtimeMs: number;\n dev: number;\n ino: number;\n currentModel?: string;\n evidence: EntropySessionEvidence;\n}\n\nconst asyncEvidenceCache = new Map<string, CachedSessionEvidence>();\n\nconst mapConcurrent = async <T, R>(\n items: readonly T[],\n limit: number,\n fn: (item: T) => Promise<R>,\n): Promise<R[]> => {\n const results = new Array<R>(items.length);\n let cursor = 0;\n const worker = async (): Promise<void> => {\n for (;;) {\n const index = cursor++;\n if (index >= items.length) return;\n results[index] = await fn(items[index]!);\n }\n };\n await Promise.all(\n Array.from({ length: Math.min(limit, items.length) }, () => worker()),\n );\n return results;\n};\n\nconst byNewestSession = (left: StampedSessionFile, right: StampedSessionFile): number =>\n right.mtime - left.mtime ||\n (left.file < right.file ? -1 : left.file > right.file ? 1 : 0);\n\nconst stampSessionFiles = async (files: readonly string[]): Promise<StampedSessionFile[]> =>\n mapConcurrent(files, SESSION_STAT_CONCURRENCY, async (file) => {\n let mtime = 0;\n try {\n mtime = (await fs.promises.stat(file)).mtimeMs;\n } catch {\n // Preserve the synchronous selector's race behavior: an unreadable file\n // sorts last and the later stream open decides whether it contributes.\n }\n return { file, mtime };\n });\n\nexport interface SessionCorpusEntry {\n file: string;\n operations: number;\n report: EntropyReport;\n}\n\n// Per-model trend across the session window: the attribution that names\n// which model's behavior moved, with the surface share staying global.\nexport interface SessionModelTrend {\n model: string;\n sessions: number;\n latestBehavioralScore: number;\n slopePerSession: number;\n latestRejectionsPer1k: number;\n}\n\nexport interface SessionCorpusResult {\n files: readonly string[];\n sessions: SessionCorpusEntry[];\n latest?: EntropyReport;\n trend: EntropyTrend;\n models: SessionModelTrend[];\n}\n\n// Newest-first session JSONL files for one project cwd, bounded by `limit`.\n// Mtime ties break by path so the ordering is stable.\nexport const projectSessionFiles = (\n agentDir: string,\n cwd: string,\n limit = DEFAULT_SESSION_WINDOW,\n): string[] => {\n const dir = sessionDirForCwd(cwd, agentDir);\n let entries: fs.Dirent[] = [];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n const stamped = entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n .map((entry) => {\n const file = path.join(dir, entry.name);\n let mtime = 0;\n try {\n mtime = fs.statSync(file).mtimeMs;\n } catch {\n mtime = 0;\n }\n return { file, mtime };\n });\n stamped.sort(\n (left, right) =>\n right.mtime - left.mtime || (left.file < right.file ? -1 : left.file > right.file ? 1 : 0),\n );\n return stamped.slice(0, Math.max(1, limit)).map((entry) => entry.file);\n};\n\n// Machine-wide session window: newest sessions across every project under\n// the agent dir, bounded by `limit` in total. The current project's newest\n// session is always included even when quieter projects would crowd it\n// out, because the live session produced this turn's evidence. Ordering\n// matches projectSessionFiles: mtime descending, path tiebreak, stable.\nexport const machineSessionFiles = (\n agentDir: string,\n cwd: string | undefined,\n limit = DEFAULT_SESSION_WINDOW,\n): string[] => {\n const root = sessionsDirRoot(agentDir);\n let projectDirs: fs.Dirent[] = [];\n try {\n projectDirs = fs.readdirSync(root, { withFileTypes: true });\n } catch {\n return [];\n }\n const byNewest = (\n left: { file: string; mtime: number },\n right: { file: string; mtime: number },\n ) =>\n right.mtime - left.mtime ||\n (left.file < right.file ? -1 : left.file > right.file ? 1 : 0);\n const stamped: { file: string; mtime: number }[] = [];\n const directories = projectDirs\n .filter((entry) => entry.isDirectory())\n .sort((left, right) => (left.name < right.name ? -1 : left.name > right.name ? 1 : 0));\n for (const directory of directories) {\n let entries: fs.Dirent[] = [];\n try {\n entries = fs.readdirSync(path.join(root, directory.name), { withFileTypes: true });\n } catch {\n continue;\n }\n for (const entry of entries.filter(\n (candidate) => candidate.isFile() && candidate.name.endsWith(\".jsonl\"),\n )) {\n const file = path.join(root, directory.name, entry.name);\n let mtime = 0;\n try {\n mtime = fs.statSync(file).mtimeMs;\n } catch {\n mtime = 0;\n }\n stamped.push({ file, mtime });\n }\n }\n stamped.sort(byNewest);\n const window = Math.max(1, limit);\n let selected = stamped.slice(0, window);\n if (cwd) {\n const current = projectSessionFiles(agentDir, cwd, 1)[0];\n if (current !== undefined && !selected.some((entry) => entry.file === current)) {\n const kept = [...selected];\n if (kept.length >= window) kept.length = window - 1;\n let mtime = 0;\n try {\n mtime = fs.statSync(current).mtimeMs;\n } catch {\n mtime = 0;\n }\n kept.push({ file: current, mtime });\n kept.sort(byNewest);\n selected = kept;\n }\n }\n return selected.map((entry) => entry.file);\n};\n\nexport const projectSessionFilesAsync = async (\n agentDir: string,\n cwd: string,\n limit = DEFAULT_SESSION_WINDOW,\n): Promise<string[]> => {\n const dir = sessionDirForCwd(cwd, agentDir);\n let entries: fs.Dirent[];\n try {\n entries = await fs.promises.readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n const files = entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n .map((entry) => path.join(dir, entry.name));\n const stamped = await stampSessionFiles(files);\n stamped.sort(byNewestSession);\n return stamped.slice(0, Math.max(1, limit)).map((entry) => entry.file);\n};\n\nexport const machineSessionFilesAsync = async (\n agentDir: string,\n cwd: string | undefined,\n limit = DEFAULT_SESSION_WINDOW,\n): Promise<string[]> => {\n const root = sessionsDirRoot(agentDir);\n let projectDirs: fs.Dirent[];\n try {\n projectDirs = await fs.promises.readdir(root, { withFileTypes: true });\n } catch {\n return [];\n }\n const directories = projectDirs\n .filter((entry) => entry.isDirectory())\n .sort((left, right) => (left.name < right.name ? -1 : left.name > right.name ? 1 : 0));\n const filesByDirectory = await mapConcurrent(\n directories,\n SESSION_STAT_CONCURRENCY,\n async (directory): Promise<string[]> => {\n const dir = path.join(root, directory.name);\n try {\n return (await fs.promises.readdir(dir, { withFileTypes: true }))\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n .map((entry) => path.join(dir, entry.name));\n } catch {\n return [];\n }\n },\n );\n const stamped = await stampSessionFiles(filesByDirectory.flat());\n stamped.sort(byNewestSession);\n const window = Math.max(1, limit);\n let selected = stamped.slice(0, window);\n if (cwd) {\n const current = (await projectSessionFilesAsync(agentDir, cwd, 1))[0];\n if (current !== undefined && !selected.some((entry) => entry.file === current)) {\n const kept = [...selected];\n if (kept.length >= window) kept.length = window - 1;\n const [stampedCurrent] = await stampSessionFiles([current]);\n if (stampedCurrent) kept.push(stampedCurrent);\n kept.sort(byNewestSession);\n selected = kept;\n }\n }\n return selected.map((entry) => entry.file);\n};\n\nconst finalizeSessionCorpus = (\n files: readonly string[],\n sessions: SessionCorpusEntry[],\n): SessionCorpusResult => {\n const chronological = [...sessions].reverse();\n const modelScores = new Map<string, { behavioral: number[]; latest: EntropyModelReport }>();\n for (const session of chronological) {\n for (const model of session.report.byModel) {\n const entry = modelScores.get(model.model) ?? { behavioral: [], latest: model };\n entry.behavioral.push(model.behavioralScore);\n entry.latest = model;\n modelScores.set(model.model, entry);\n }\n }\n const models: SessionModelTrend[] = [...modelScores.entries()]\n .sort(([left], [right]) => compareCodeUnits(left, right))\n .map(([model, entry]) => ({\n model,\n sessions: entry.behavioral.length,\n latestBehavioralScore: entry.latest.behavioralScore,\n slopePerSession: trendFromScores(entry.behavioral).slopePerStep,\n latestRejectionsPer1k: entry.latest.invocationRejectionsPer1k,\n }));\n return {\n files,\n sessions,\n ...(sessions.length > 0 ? { latest: sessions[0]!.report } : {}),\n trend: trendFromScores(chronological.map((session) => session.report.score)),\n models,\n };\n};\n\n// Measure each session file independently against the same surface; sessions\n// without fabric_exec traces contribute nothing. `files` must be newest\n// first; the trend runs oldest to newest.\nexport const measureSessionCorpus = (input: {\n files: readonly string[];\n surface?: EntropySurfaceSnapshot;\n catalogDigest?: string;\n}): SessionCorpusResult => {\n const sessions: SessionCorpusEntry[] = [];\n for (const file of input.files) {\n let text: string;\n try {\n text = fs.readFileSync(file, \"utf8\");\n } catch {\n continue;\n }\n const traces = entropyTracesFromSessionJsonl(text.split(\"\\n\"));\n if (traces.length === 0) continue;\n const report = measureEntropy({\n traces,\n ...(input.surface ? { surface: input.surface } : {}),\n ...(input.catalogDigest !== undefined ? { catalogDigest: input.catalogDigest } : {}),\n });\n if (report.totals.operations === 0) continue;\n sessions.push({ file, operations: report.totals.operations, report });\n }\n return finalizeSessionCorpus(input.files, sessions);\n};\n\n// One read per file yields the meter traces, the verbatim audit value\n// corpus, the verbatim audit calls, and the per-file observation windows\n// the machine-wide pool consumes with exact deltas, so the autonomous\n// compile and the command share a single window scan.\nexport interface SessionObservationWindow {\n file: string;\n observations: EntropyValueObservation[];\n}\n\nexport interface SessionWindowEvidence {\n traces: EntropyTraceInput[];\n valueObservations: EntropyValueObservation[];\n auditCalls: EntropyAuditCall[];\n observationWindows: SessionObservationWindow[];\n}\n\ninterface SessionFileMetadata {\n size: number;\n mtimeMs: number;\n dev: number;\n ino: number;\n}\n\nconst sessionMetadata = async (file: string): Promise<SessionFileMetadata | undefined> => {\n try {\n const entry = await fs.promises.stat(file);\n return {\n size: entry.size,\n mtimeMs: entry.mtimeMs,\n dev: entry.dev,\n ino: entry.ino,\n };\n } catch {\n return undefined;\n }\n};\n\nconst endsAtLineBoundary = async (\n file: string,\n metadata: SessionFileMetadata,\n): Promise<boolean> => {\n if (metadata.size === 0) return true;\n let handle: fs.promises.FileHandle | undefined;\n try {\n handle = await fs.promises.open(file, \"r\");\n const byte = Buffer.allocUnsafe(1);\n const { bytesRead } = await handle.read(byte, 0, 1, metadata.size - 1);\n return bytesRead === 1 && byte[0] === 0x0a;\n } catch {\n return false;\n } finally {\n await handle?.close().catch(() => undefined);\n }\n};\n\nconst scanSessionRange = async (\n file: string,\n start: number,\n end: number,\n initialModel?: string,\n): ReturnType<typeof scanEntropySessionJsonlAsync> => {\n const input = fs.createReadStream(file, { encoding: \"utf8\", start, end });\n const lines = createInterface({ input, crlfDelay: Infinity });\n try {\n return await scanEntropySessionJsonlAsync(lines, initialModel);\n } finally {\n lines.close();\n input.destroy();\n }\n};\n\nconst evidenceWindow = (\n file: string,\n evidence: EntropySessionEvidence,\n): SessionWindowEvidence => ({\n traces: evidence.traces,\n valueObservations: evidence.valueObservations,\n auditCalls: evidence.auditCalls,\n observationWindows: [{ file, observations: evidence.valueObservations }],\n});\n\nconst cacheSessionEvidence = (file: string, cached: CachedSessionEvidence): void => {\n asyncEvidenceCache.delete(file);\n asyncEvidenceCache.set(file, cached);\n while (asyncEvidenceCache.size > SESSION_EVIDENCE_CACHE_LIMIT) {\n asyncEvidenceCache.delete(asyncEvidenceCache.keys().next().value!);\n }\n};\n\nconst sameSessionFile = (\n cached: CachedSessionEvidence,\n metadata: SessionFileMetadata,\n): boolean => cached.dev === metadata.dev && cached.ino === metadata.ino;\n\nconst readSessionEvidenceAsync = async (\n file: string,\n): Promise<SessionWindowEvidence | undefined> => {\n const metadata = await sessionMetadata(file);\n if (!metadata) return undefined;\n const cached = asyncEvidenceCache.get(file);\n if (\n cached &&\n sameSessionFile(cached, metadata) &&\n cached.size === metadata.size &&\n Math.abs(cached.mtimeMs - metadata.mtimeMs) <= 1e-6\n ) {\n cacheSessionEvidence(file, cached);\n return evidenceWindow(file, cached.evidence);\n }\n\n const append =\n cached && sameSessionFile(cached, metadata) && metadata.size > cached.size\n ? cached\n : undefined;\n const start = append ? append.size : 0;\n let scan: Awaited<ReturnType<typeof scanEntropySessionJsonlAsync>>;\n try {\n scan = metadata.size === start\n ? {\n evidence: { traces: [], valueObservations: [], auditCalls: [] },\n ...(append?.currentModel ? { currentModel: append.currentModel } : {}),\n }\n : await scanSessionRange(\n file,\n start,\n metadata.size - 1,\n append?.currentModel,\n );\n } catch {\n return undefined;\n }\n const evidence: EntropySessionEvidence = append\n ? {\n traces: [...append.evidence.traces, ...scan.evidence.traces],\n valueObservations: [\n ...append.evidence.valueObservations,\n ...scan.evidence.valueObservations,\n ],\n auditCalls: [...append.evidence.auditCalls, ...scan.evidence.auditCalls],\n }\n : scan.evidence;\n if (await endsAtLineBoundary(file, metadata)) {\n cacheSessionEvidence(file, {\n ...metadata,\n ...(scan.currentModel ? { currentModel: scan.currentModel } : {}),\n evidence,\n });\n } else {\n asyncEvidenceCache.delete(file);\n }\n return evidenceWindow(file, evidence);\n};\n\nexport const sessionWindowEvidenceAsync = async (\n files: readonly string[],\n): Promise<SessionWindowEvidence> => {\n const windows = await mapConcurrent(files, SESSION_READ_CONCURRENCY, readSessionEvidenceAsync);\n const traces: EntropyTraceInput[] = [];\n const valueObservations: EntropyValueObservation[] = [];\n const auditCalls: EntropyAuditCall[] = [];\n const observationWindows: SessionObservationWindow[] = [];\n for (const window of windows) {\n if (!window) continue;\n traces.push(...window.traces);\n valueObservations.push(...window.valueObservations);\n auditCalls.push(...window.auditCalls);\n observationWindows.push(...window.observationWindows);\n }\n return { traces, valueObservations, auditCalls, observationWindows };\n};\n\nexport const measureSessionCorpusAsync = async (input: {\n files: readonly string[];\n surface?: EntropySurfaceSnapshot;\n catalogDigest?: string;\n}): Promise<SessionCorpusResult> => {\n const windows = await mapConcurrent(\n input.files,\n SESSION_READ_CONCURRENCY,\n readSessionEvidenceAsync,\n );\n const sessions: SessionCorpusEntry[] = [];\n for (let index = 0; index < input.files.length; index++) {\n const window = windows[index];\n const file = input.files[index];\n if (!window || !file || window.traces.length === 0) continue;\n const report = await measureEntropyAsync({\n traces: window.traces,\n ...(input.surface ? { surface: input.surface } : {}),\n ...(input.catalogDigest !== undefined ? { catalogDigest: input.catalogDigest } : {}),\n });\n if (report.totals.operations === 0) continue;\n sessions.push({ file, operations: report.totals.operations, report });\n }\n return finalizeSessionCorpus(input.files, sessions);\n};\n\nexport const sessionWindowEvidence = (\n files: readonly string[],\n): SessionWindowEvidence => {\n const traces: EntropyTraceInput[] = [];\n const valueObservations: EntropyValueObservation[] = [];\n const auditCalls: EntropyAuditCall[] = [];\n const observationWindows: SessionObservationWindow[] = [];\n for (const file of files) {\n let text: string;\n try {\n text = fs.readFileSync(file, \"utf8\");\n } catch {\n continue;\n }\n const evidence = entropySessionEvidenceFromJsonl(text.split(\"\\n\"));\n traces.push(...evidence.traces);\n valueObservations.push(...evidence.valueObservations);\n auditCalls.push(...evidence.auditCalls);\n observationWindows.push({ file, observations: evidence.valueObservations });\n }\n return { traces, valueObservations, auditCalls, observationWindows };\n};\n", "// Counterfactual evidence for the compiled surface: replay every recorded\n// call against the declared surface and the compiled surface, then classify\n// each divergence. The classes count what the artifact would have changed\n// about calls models actually made; the falsifiable half of the entropy\n// compiler. No model judges anything; TypeBox decides, deterministically.\n// Refs with verbatim audit calls replay from the audits, never the\n// projected trace args; audits record executed calls without outcomes, so\n// a compiled rejection of an audited call counts as a cost, never a win.\n\nimport { isJsonSchemaValueValid } from \"@oh-my-pi/pi-ai/utils/schema\";\nimport { applyCompiledSurface, type CompiledSurfaceFile } from \"./compiled-surface.js\";\nimport { compareCodeUnits } from \"./fingerprint.js\";\nimport { measureEntropy } from \"./meter.js\";\nimport { entropySurfaceHash } from \"./surface.js\";\nimport type {\n EntropyAuditCall,\n EntropyOperationInput,\n EntropySurfaceSnapshot,\n EntropyTraceInput,\n} from \"./types.js\";\n\n// both-accept and both-reject are the unchanged middle: calls whose fate\n// the artifact did not change. The other four classes are the counterfactual\n// effect on a recorded call. Succeeded calls the compiled schema would\n// reject are costs (the compile overfit its window); calls that failed\n// anyway are wins (a cheap typed rejection replaces an expensive failure).\n// Calls the declared schema already rejected keep both-reject: no overlay\n// or quarantine earns credit for a call that never worked.\nexport type EntropyTrialClass =\n | \"both-accept\"\n | \"both-reject\"\n | \"tightening-cost\"\n | \"typed-failure-win\"\n | \"quarantine-win\"\n | \"quarantine-cost\";\n\nexport interface EntropyTrialTotals {\n operations: number;\n bothAccept: number;\n bothReject: number;\n tighteningCost: number;\n typedFailureWin: number;\n quarantineWin: number;\n quarantineCost: number;\n}\n\nexport interface EntropyTrialDivergence {\n ref: string;\n trialClass: EntropyTrialClass;\n count: number;\n}\n\nexport type EntropyTrialVerdict = \"no-evidence\" | \"clean\" | \"costly\";\n\nexport interface EntropyTrialReport {\n verdict: EntropyTrialVerdict;\n /** Window score against the declared surface. */\n declaredScore: number;\n /** Window score against the compiled surface. */\n effectiveScore: number;\n delta: number;\n totals: EntropyTrialTotals;\n divergences: EntropyTrialDivergence[];\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst accepts = (schema: unknown, args: Record<string, unknown>): boolean => {\n try {\n return isRecord(schema) && isJsonSchemaValueValid(schema, args);\n } catch {\n return false;\n }\n};\n\nconst trialClassFields: Record<EntropyTrialClass, keyof EntropyTrialTotals> = {\n \"both-accept\": \"bothAccept\",\n \"both-reject\": \"bothReject\",\n \"tightening-cost\": \"tighteningCost\",\n \"typed-failure-win\": \"typedFailureWin\",\n \"quarantine-win\": \"quarantineWin\",\n \"quarantine-cost\": \"quarantineCost\",\n};\n\nconst trialClassField = (trialClass: EntropyTrialClass): keyof EntropyTrialTotals =>\n trialClassFields[trialClass];\n\nconst classify = (operation: EntropyOperationInput, declaredAccepts: boolean, compiledAccepts: boolean, quarantined: boolean): EntropyTrialClass => {\n if (quarantined) {\n if (!declaredAccepts) return \"both-reject\";\n return operation.outcome === \"succeeded\" ? \"quarantine-cost\" : \"quarantine-win\";\n }\n if (!declaredAccepts) return \"both-reject\";\n if (compiledAccepts) return \"both-accept\";\n return operation.outcome === \"succeeded\" ? \"tightening-cost\" : \"typed-failure-win\";\n};\n\nexport const runEntropyTrial = (input: {\n traces: readonly EntropyTraceInput[];\n live: EntropySurfaceSnapshot;\n artifact?: CompiledSurfaceFile;\n auditCalls?: readonly EntropyAuditCall[];\n}): EntropyTrialReport => {\n const effective = applyCompiledSurface(input.live, input.artifact);\n const declaredByRef = new Map(\n input.live.actions.map((action) => [action.ref, action.inputSchema]),\n );\n const effectiveByRef = new Map(\n effective.actions.map((action) => [action.ref, action.inputSchema]),\n );\n const declaredReport = measureEntropy({\n traces: input.traces,\n surface: input.live,\n catalogDigest: entropySurfaceHash(input.live),\n });\n const effectiveReport = measureEntropy({\n traces: input.traces,\n surface: effective,\n catalogDigest: entropySurfaceHash(effective),\n });\n const totals: EntropyTrialTotals = {\n operations: 0,\n bothAccept: 0,\n bothReject: 0,\n tighteningCost: 0,\n typedFailureWin: 0,\n quarantineWin: 0,\n quarantineCost: 0,\n };\n const divergenceCounts = new Map<string, number>();\n const auditedArgsByRef = new Map<string, Record<string, unknown>[]>();\n if (input.auditCalls) {\n for (const call of input.auditCalls) {\n if (declaredByRef.get(call.ref) === undefined) continue;\n const bucket = auditedArgsByRef.get(call.ref) ?? [];\n bucket.push(call.args);\n auditedArgsByRef.set(call.ref, bucket);\n }\n }\n for (const trace of input.traces) {\n for (const operation of trace.operations) {\n if (operation.ref.startsWith(\"fabric.\")) continue;\n const declared = declaredByRef.get(operation.ref);\n if (declared === undefined) continue;\n // Audited refs classify below from the verbatim audit args; the\n // projected trace args would phantom-reject calls that parsed.\n if (auditedArgsByRef.has(operation.ref)) continue;\n const compiled = effectiveByRef.get(operation.ref);\n const quarantined = compiled === undefined;\n const trialClass = classify(\n operation,\n accepts(declared, operation.args),\n quarantined ? false : accepts(compiled, operation.args),\n quarantined,\n );\n totals.operations++;\n totals[trialClassField(trialClass)]++;\n if (trialClass !== \"both-accept\" && trialClass !== \"both-reject\") {\n const key = `${operation.ref}\\u0000${trialClass}`;\n divergenceCounts.set(key, (divergenceCounts.get(key) ?? 0) + 1);\n }\n }\n }\n for (const ref of [...auditedArgsByRef.keys()].sort(compareCodeUnits)) {\n const declared = declaredByRef.get(ref)!;\n const compiled = effectiveByRef.get(ref);\n const quarantined = compiled === undefined;\n for (const args of auditedArgsByRef.get(ref)!) {\n const declaredAccepts = accepts(declared, args);\n const trialClass: EntropyTrialClass = !declaredAccepts\n ? \"both-reject\"\n : quarantined\n ? \"quarantine-cost\"\n : accepts(compiled, args)\n ? \"both-accept\"\n : \"tightening-cost\";\n totals.operations++;\n totals[trialClassField(trialClass)]++;\n if (trialClass !== \"both-accept\" && trialClass !== \"both-reject\") {\n const key = `${ref}\\u0000${trialClass}`;\n divergenceCounts.set(key, (divergenceCounts.get(key) ?? 0) + 1);\n }\n }\n }\n const hasEntries =\n (input.artifact?.actions.length ?? 0) + (input.artifact?.quarantined.length ?? 0) > 0;\n const costs = totals.tighteningCost + totals.quarantineCost;\n const verdict: EntropyTrialVerdict =\n !hasEntries || totals.operations === 0 ? \"no-evidence\" : costs === 0 ? \"clean\" : \"costly\";\n const divergences: EntropyTrialDivergence[] = [...divergenceCounts.entries()]\n .map(([key, count]) => {\n const [ref, trialClass] = key.split(\"\\u0000\");\n return { ref: ref!, trialClass: trialClass as EntropyTrialClass, count };\n })\n .sort(\n (left, right) =>\n compareCodeUnits(left.ref, right.ref) ||\n compareCodeUnits(left.trialClass, right.trialClass),\n );\n return {\n verdict,\n declaredScore: declaredReport.score,\n effectiveScore: effectiveReport.score,\n delta: effectiveReport.score - declaredReport.score,\n totals,\n divergences,\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["score", "isPlainRecord", "valueKey", "yieldToLoop", "yieldToLoop", "DEFAULT_TASK_KEY", "isRecord", "provider", "modelId", "fs", "path", "fs", "path", "isRecord"]
7
+ }
@@ -0,0 +1,163 @@
1
+ // src/agents/transports/process-utils.ts
2
+ import { execFile, spawn } from "node:child_process";
3
+ import { accessSync, constants, statSync } from "node:fs";
4
+ import path from "node:path";
5
+ var executeFile = (command, args, options = {}) => new Promise((resolve, reject) => {
6
+ execFile(
7
+ command,
8
+ args,
9
+ {
10
+ encoding: "utf8",
11
+ maxBuffer: 10 * 1024 * 1024,
12
+ ...options.cwd ? { cwd: options.cwd } : {},
13
+ ...options.timeoutMs ? { timeout: options.timeoutMs } : {}
14
+ },
15
+ (error, stdout, stderr) => {
16
+ if (error) {
17
+ Object.assign(error, { stdout, stderr });
18
+ reject(error);
19
+ return;
20
+ }
21
+ resolve({ stdout, stderr });
22
+ }
23
+ );
24
+ });
25
+ var commandAvailable = async (command) => resolveCommandPath(command) !== void 0;
26
+ var resolveCommandPath = (command, env = process.env) => {
27
+ if (command.includes("/") || command.includes("\\")) {
28
+ return isExecutableFile(command) ? command : void 0;
29
+ }
30
+ const extensions = process.platform === "win32" ? (env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean) : [""];
31
+ for (const directory of (env.PATH ?? "").split(path.delimiter)) {
32
+ if (!directory) continue;
33
+ for (const extension of extensions) {
34
+ const candidate = path.join(directory, `${command}${extension}`);
35
+ if (isExecutableFile(candidate)) return candidate;
36
+ }
37
+ }
38
+ return void 0;
39
+ };
40
+ var isExecutableFile = (candidate) => {
41
+ try {
42
+ if (!statSync(candidate).isFile()) return false;
43
+ } catch {
44
+ return false;
45
+ }
46
+ if (process.platform === "win32") return true;
47
+ try {
48
+ accessSync(candidate, constants.X_OK);
49
+ return true;
50
+ } catch {
51
+ return false;
52
+ }
53
+ };
54
+ var shellQuote = (value) => `'${value.replaceAll("'", `'"'"'`)}'`;
55
+ var processIsAlive = (pid) => {
56
+ if (!Number.isSafeInteger(pid) || pid <= 0) return false;
57
+ try {
58
+ process.kill(pid, 0);
59
+ return true;
60
+ } catch (error) {
61
+ return error instanceof Error && "code" in error && error.code === "EPERM";
62
+ }
63
+ };
64
+ var GENERIC_RUNTIME = /^(node|bun)(\.exe)?$/;
65
+ var runtimeOverride = (env) => {
66
+ const value = env.OMP_FABRIC_NODE_BINARY;
67
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
68
+ };
69
+ var isGenericRuntime = (execPath, requireNode, requireBun = false) => {
70
+ const name = path.basename(execPath).toLowerCase();
71
+ return GENERIC_RUNTIME.test(name) && (!requireNode || name.startsWith("node")) && (!requireBun || name.startsWith("bun"));
72
+ };
73
+ var isWrongFlavorRuntime = (execPath, requireNode, requireBun) => {
74
+ const name = path.basename(execPath).toLowerCase();
75
+ return GENERIC_RUNTIME.test(name) && (requireNode && name.startsWith("bun") || requireBun && name.startsWith("node"));
76
+ };
77
+ var missingRuntimeError = (execPath, requireNode, requireBun = false) => {
78
+ const required = requireNode ? "a Node.js runtime" : requireBun ? "a Bun runtime" : "a Node.js or Bun runtime";
79
+ const shape = requireNode ? "(not node)" : requireBun ? "(not bun)" : "(not node/bun)";
80
+ return new Error(
81
+ `Fabric requires ${required} to launch a JavaScript worker, but process.execPath is ${execPath} ${shape} and OMP_FABRIC_NODE_BINARY is unset. Install Node.js or Bun, or set OMP_FABRIC_NODE_BINARY to the runtime binary.`
82
+ );
83
+ };
84
+ var resolveScriptRuntimeUncached = async (options = {}) => {
85
+ const execPath = options.execPath ?? process.execPath;
86
+ const env = options.env ?? process.env;
87
+ const requireNode = options.requireNode === true;
88
+ const requireBun = options.requireBun === true;
89
+ if (isGenericRuntime(execPath, requireNode, requireBun)) return execPath;
90
+ const override = runtimeOverride(env);
91
+ if (override) return override;
92
+ for (const candidate of requireNode ? ["node"] : requireBun ? ["bun"] : ["node", "bun"]) {
93
+ const resolved = resolveCommandPath(candidate, env);
94
+ if (resolved) return resolved;
95
+ }
96
+ throw missingRuntimeError(execPath, requireNode, requireBun);
97
+ };
98
+ var cachedDefaultRuntime;
99
+ var resolveScriptRuntime = async (options) => {
100
+ if (options && (options.execPath !== void 0 || options.env !== void 0 || options.requireNode !== void 0 || options.requireBun !== void 0)) {
101
+ return resolveScriptRuntimeUncached(options);
102
+ }
103
+ if (cachedDefaultRuntime) return cachedDefaultRuntime;
104
+ cachedDefaultRuntime = await resolveScriptRuntimeUncached();
105
+ return cachedDefaultRuntime;
106
+ };
107
+ var resolveScriptRuntimeSync = (options = {}) => {
108
+ const execPath = options.execPath ?? process.execPath;
109
+ const env = options.env ?? process.env;
110
+ const requireNode = options.requireNode === true;
111
+ const requireBun = options.requireBun === true;
112
+ if (isGenericRuntime(execPath, requireNode, requireBun)) return execPath;
113
+ if (options.execPath !== void 0 && isWrongFlavorRuntime(execPath, requireNode, requireBun)) {
114
+ throw missingRuntimeError(execPath, requireNode, requireBun);
115
+ }
116
+ const override = runtimeOverride(env);
117
+ if (override) return override;
118
+ for (const candidate of requireNode ? ["node"] : requireBun ? ["bun"] : ["node", "bun"]) {
119
+ const resolved = resolveCommandPath(candidate, env);
120
+ if (resolved) return resolved;
121
+ }
122
+ throw missingRuntimeError(execPath, requireNode, requireBun);
123
+ };
124
+ var scriptSpawnArgs = async (workerPath, workerArguments, options) => {
125
+ const runtime = await resolveScriptRuntime(options);
126
+ return [runtime, workerPath, ...workerArguments];
127
+ };
128
+ var workerCommand = async (workerPath, workerArguments) => (await scriptSpawnArgs(workerPath, workerArguments)).map(shellQuote).join(" ");
129
+ var spawnDetached = async (workerPath, workerArguments, cwd) => {
130
+ const runtime = await resolveScriptRuntime();
131
+ const child = spawn(runtime, [workerPath, ...workerArguments], {
132
+ cwd,
133
+ detached: process.platform !== "win32",
134
+ stdio: "ignore"
135
+ });
136
+ if (!child.pid) throw new Error("Failed to launch Fabric worker process");
137
+ const pid = child.pid;
138
+ child.unref();
139
+ return {
140
+ pid,
141
+ async stop() {
142
+ try {
143
+ process.kill(process.platform === "win32" ? pid : -pid, "SIGTERM");
144
+ } catch {
145
+ }
146
+ },
147
+ async isAlive() {
148
+ return processIsAlive(pid);
149
+ }
150
+ };
151
+ };
152
+
153
+ export {
154
+ executeFile,
155
+ commandAvailable,
156
+ processIsAlive,
157
+ resolveScriptRuntime,
158
+ resolveScriptRuntimeSync,
159
+ scriptSpawnArgs,
160
+ workerCommand,
161
+ spawnDetached
162
+ };
163
+ //# sourceMappingURL=chunk-ZTM45GH5.js.map