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/ui/conversation.ts", "../../src/ui/conversation-render.ts", "../../src/ui/conversation-queue-store.ts", "../../src/ui/conversation-queue.ts"],
4
+ "sourcesContent": ["import type { KeybindingsManager, Theme } from \"@oh-my-pi/pi-coding-agent\";\nimport type { Component, Focusable, KeyId, TUI, SgrMouseEvent } from \"@oh-my-pi/pi-tui\";\nimport {\n CURSOR_MARKER,\n Editor,\n fuzzyFilter,\n getKeybindings,\n Input,\n Key,\n matchesKey,\n truncateToWidth,\n visibleWidth,\n type EditorTheme,\n} from \"@oh-my-pi/pi-tui\";\nimport { FabricConversationTranscriptRenderer, type FabricConversationTranscriptRendererOptions } from \"./conversation-render.js\";\nimport { conversationFooter, type FabricConversationAppearance } from \"./conversation-chrome.js\";\nimport type { AgentUsage } from \"../agents/types.js\";\nimport { safeText } from \"./format.js\";\nimport type { CodePreviewSettings } from \"./code-preview.js\";\nimport { ompSymbolTheme } from \"./symbol-theme.js\";\nimport type { NativeConversationTranscript } from \"./conversation-native-reader.js\";\nimport { defaultConversationTarget } from \"./conversation-targets.js\";\nimport { ConversationQueueStore } from \"./conversation-queue-store.js\";\nimport type { ConversationQueue } from \"./conversation-queue.js\";\nimport { isActiveStatus } from \"./types.js\";\n\nexport type FabricConversationDelivery = \"steer\" | \"followUp\";\n\nexport interface FabricConversationTarget {\n id: string;\n name: string;\n kind: \"main\" | \"peer\" | \"agent\" | \"actor\";\n parentId?: string;\n status: string;\n runner?: string;\n model?: string;\n thinking?: string;\n cwd?: string;\n branch?: string;\n usage?: AgentUsage;\n contextWindow?: number;\n canSteer: boolean;\n canFollowUp: boolean;\n canStop: boolean;\n readOnlyReason?: string;\n stale?: boolean;\n /** Latest activity timestamp; enables an unread marker in the target picker. */\n updatedAt?: number;\n}\n\nexport interface FabricConversationStateEntry {\n draft: string;\n following: boolean;\n scroll: number;\n pageAnchor: \"start\" | \"end\" | \"prepend\" | undefined;\n anchorLength?: number | undefined;\n toolsExpanded: boolean;\n hideThinking?: boolean;\n lastSeenUpdatedAt: number;\n}\n\nconst STATE_ENTRY_LIMIT = 128;\n\n/** Session-owned in-flight send; survives view close/reopen, cleared on clear(). */\nexport interface FabricConversationPendingSend {\n id: string;\n message: string;\n delivery: FabricConversationDelivery;\n}\n\n/**\n * Per-target view state owned by the parent controller. Created once and\n * reused across overlay opens so drafts, scroll/following, and the selected\n * target survive close/reopen; clear() on session shutdown (and bumps epoch\n * so in-flight sends from a previous session never mutate new state).\n */\nexport class FabricConversationState {\n readonly queues = new ConversationQueueStore();\n selectedId: string | undefined;\n private epochCounter = 0;\n private readonly entries = new Map<string, FabricConversationStateEntry>();\n private readonly pendingSends = new Set<FabricConversationPendingSend>();\n\n get epoch(): number {\n return this.epochCounter;\n }\n\n hasPendingSend(id: string, message: string): boolean {\n for (const pending of this.pendingSends) {\n if (pending.id === id && pending.message === message) return true;\n }\n return false;\n }\n\n addPendingSend(pending: FabricConversationPendingSend): void {\n this.pendingSends.add(pending);\n }\n\n /** Acknowledged: drop the pending marker and clear only the exact accepted draft. */\n resolvePendingSend(id: string, message: string): void {\n for (const pending of this.pendingSends) {\n if (pending.id !== id || pending.message !== message) continue;\n this.pendingSends.delete(pending);\n const entry = this.entries.get(id);\n if (entry && entry.draft === message) entry.draft = \"\";\n return;\n }\n }\n\n /** Rejected: drop the pending marker; the raw draft stays untouched. */\n failPendingSend(id: string, message: string): void {\n for (const pending of this.pendingSends) {\n if (pending.id !== id || pending.message !== message) continue;\n this.pendingSends.delete(pending);\n return;\n }\n }\n\n /** Live view state for a target; creates (and may evict empty) entries. */\n view(id: string): FabricConversationStateEntry {\n const existing = this.entries.get(id);\n if (existing) {\n this.entries.delete(id);\n this.entries.set(id, existing);\n return existing;\n }\n const created: FabricConversationStateEntry = {\n draft: \"\",\n following: true,\n scroll: 0,\n pageAnchor: undefined,\n toolsExpanded: false,\n lastSeenUpdatedAt: 0,\n };\n this.entries.set(id, created);\n this.enforceLimit();\n return created;\n }\n\n /** Non-mutating lookup; unread checks must never create or evict drafts. */\n peek(id: string): FabricConversationStateEntry | undefined {\n return this.entries.get(id);\n }\n\n clear(): void {\n this.queues.clear();\n this.entries.clear();\n this.pendingSends.clear();\n this.selectedId = undefined;\n this.epochCounter++;\n }\n\n private enforceLimit(): void {\n while (this.entries.size > STATE_ENTRY_LIMIT) {\n let evicted = false;\n for (const key of this.entries.keys()) {\n if (key === this.selectedId) continue;\n const entry = this.entries.get(key);\n // Never evict non-empty drafts just because many targets were viewed.\n if (entry && entry.draft === \"\") {\n this.entries.delete(key);\n evicted = true;\n break;\n }\n }\n if (!evicted) break;\n }\n }\n}\n\nexport interface FabricConversationOptions {\n targets: () => FabricConversationTarget[];\n initialTargetId?: string;\n state: FabricConversationState;\n transcript: (id: string, followLatest: boolean) => NativeConversationTranscript;\n loadOlder: (id: string) => boolean;\n loadNewer: (id: string) => boolean;\n loadLatest: (id: string) => boolean;\n send: (id: string, message: string, delivery: FabricConversationDelivery) => Promise<unknown>;\n stop: (id: string) => Promise<unknown>;\n close: () => void;\n keybindings?: Pick<KeybindingsManager, \"matches\" | \"getKeys\">;\n codePreviewSettings?: CodePreviewSettings;\n appearance?: FabricConversationAppearance;\n rendererOptions?: FabricConversationTranscriptRendererOptions | undefined;\n queueEvents?: { emit(channel: string, data: unknown): void } | undefined;\n}\n\ninterface Feedback {\n text: string;\n kind: \"info\" | \"error\";\n at: number;\n}\n\nconst FEEDBACK_TTL_MS = 8_000;\nconst FOLLOW_UP_FALLBACK: KeyId[] = [\"alt+enter\", \"ctrl+q\"];\nconst TOOLS_EXPAND_FALLBACK: KeyId[] = [\"ctrl+o\"];\n\nconst conversationEditorTheme = (theme: Theme, thinking: () => string | undefined): EditorTheme => ({\n symbols: ompSymbolTheme,\n borderColor: (value: string) => {\n const level = thinking();\n const color = level === \"minimal\" ? \"thinkingMinimal\" : level === \"low\" ? \"thinkingLow\"\n : level === \"medium\" ? \"thinkingMedium\" : level === \"high\" ? \"thinkingHigh\"\n : level === \"xhigh\" ? \"thinkingXhigh\" : level === \"max\" ? \"thinkingMax\" : \"borderMuted\";\n return theme.fg(color, value);\n },\n selectList: {\n selectedPrefix: (text: string) => theme.fg(\"accent\", text),\n selectedText: (text: string) => theme.fg(\"accent\", text),\n description: (text: string) => theme.fg(\"muted\", text),\n scrollInfo: (text: string) => theme.fg(\"muted\", text),\n noMatch: (text: string) => theme.fg(\"muted\", text),\n symbols: ompSymbolTheme,\n },\n});\n\nconst errorText = (error: unknown): string => {\n if (error instanceof Error) return error.message;\n return String(error ?? \"\");\n};\n\nconst isMainTarget = (target: FabricConversationTarget | undefined): boolean =>\n target?.kind === \"main\";\n\ninterface PickerRow {\n target: FabricConversationTarget;\n depth: number;\n}\n\nexport class FabricConversationView implements Component, Focusable {\n private focusState = true;\n private readonly tui: TUI;\n private readonly theme: Theme;\n private readonly options: FabricConversationOptions;\n private readonly state: FabricConversationState;\n private readonly renderer: FabricConversationTranscriptRenderer;\n private editor: Editor | undefined;\n private pickerInput: Input | undefined;\n private pickerRows: PickerRow[] = [];\n private pickerSelectedId: string | undefined;\n private mode: \"conversation\" | \"picker\" = \"conversation\";\n private currentId: string | undefined;\n private feedback: Feedback | undefined;\n private stopConfirmId: string | undefined;\n private disposed = false;\n private lastBodyLength = 0;\n private lastBody: string[] = [];\n private lastBodyBudget = 1;\n private editorTop = 0;\n private editorHeight = 0;\n private ownsMouseMode = false;\n\n constructor(\n tui: TUI,\n theme: Theme,\n options: FabricConversationOptions,\n ) {\n this.tui = tui;\n this.theme = theme;\n this.options = options;\n this.state = options.state;\n this.renderer = new FabricConversationTranscriptRenderer(tui, theme, {\n ...options.rendererOptions,\n imageWidthCells: options.appearance?.imageWidthCells,\n });\n this.editor = new Editor(conversationEditorTheme(theme, () => this.currentTarget()?.thinking));\n this.editor.focused = true;\n this.editor.onChange = (text) => {\n if (this.currentId && !this.state.queues.get(this.currentId)?.editingActive) this.state.view(this.currentId).draft = text;\n };\n // An explicit initialTargetId must win over state.selectedId so reissuing\n // \"/fabric chat B\" focuses B instead of reopening the previously selected A.\n const nonMain = this.nonMainTargets();\n const requested = options.initialTargetId ?? defaultConversationTarget(nonMain, options.state.selectedId)?.id;\n const requestedTarget = requested\n ? this.currentTargets().find((candidate) => candidate.id === requested)\n : undefined;\n const resolved =\n requested && requestedTarget && !isMainTarget(requestedTarget)\n ? requested\n : nonMain[0]?.id;\n if (resolved) this.applySelection(resolved, false);\n if (!this.currentId) this.currentId = nonMain[0]?.id;\n // Regular OMP leaves mouse input to terminal scrollback. This preview owns\n // a separate viewport; capture its wheel input and restore on close.\n if (true) {\n tui.terminal.write(\"\\x1b[?1000h\\x1b[?1006h\");\n this.ownsMouseMode = true;\n }\n }\n\n get focused(): boolean {\n return this.focusState;\n }\n\n set focused(value: boolean) {\n this.focusState = value;\n if (this.mode === \"picker\") {\n if (this.pickerInput) this.pickerInput.focused = value;\n if (this.editor) this.editor.focused = false;\n return;\n }\n if (this.editor) this.editor.focused = value;\n }\n\n /** Re-focus a target while the view is open; selecting Main closes to the native session. */\n selectTarget(id: string): void {\n this.applySelection(id, true);\n }\n\n handleInput(data: string): void {\n if (this.disposed) return;\n // Fullscreen OMP dispatches normalized events; regular mode forwards SGR.\n const mouse = /^\\x1b\\[<(\\d+);(\\d+);(\\d+)([Mm])$/.exec(data);\n if (mouse) {\n const button = Number(mouse[1]);\n if ((button & 64) !== 0 && mouse[4] === \"M\") {\n this.handleMouse({ button, col: Number(mouse[2]) - 1, row: Number(mouse[3]) - 1, release: false, wheel: (button & 1) === 0 ? -1 : 1, motion: false, leftClick: false });\n }\n return;\n }\n if (this.mode === \"picker\") {\n this.handlePickerInput(data);\n this.tui.requestRender();\n return;\n }\n this.handleConversationInput(data);\n this.tui.requestRender();\n }\n\n handleMouse(event: SgrMouseEvent): void {\n if (this.disposed) return;\n if (event.wheel !== null) {\n if (this.mode === \"picker\") this.movePickerSelection(event.wheel);\n else this.scrollBy(event.wheel * 3);\n this.tui.requestRender();\n }\n }\n render(width: number): string[] {\n if (this.disposed || width <= 0) return [];\n const rows = Math.max(1, this.terminalRows());\n this.markCurrentTargetSeen();\n this.reconcileEditor();\n const target = this.currentTarget();\n const queue = this.mode === \"conversation\" ? this.currentQueue() : undefined;\n const transcriptLines = this.mode === \"conversation\" ? this.transcriptLines(width) : [];\n let queueLines = queue?.render(width) ?? [];\n // Native components own their interior padding. Giving them the full width\n // keeps user backgrounds and editor rules flush with both terminal edges.\n let editorLines = this.mode === \"conversation\" && !(queue?.editingActive && queue.mode === \"extension\") ? this.renderEditorLines(width) : [];\n const editorBudget = Math.min(editorLines.length, Math.max(1, rows - (rows >= 6 ? 3 : 0)));\n if (editorLines.length > editorBudget) {\n const cursor = Math.max(0, editorLines.findIndex((line) => line.includes(CURSOR_MARKER)));\n const start = Math.max(0, Math.min(cursor - Math.floor(editorBudget / 2), editorLines.length - editorBudget));\n editorLines = editorLines.slice(start, start + editorBudget);\n }\n let remaining = rows - editorLines.length;\n const footer = this.mode === \"conversation\"\n ? conversationFooter(target, this.theme, width).slice(0, Math.max(0, remaining - 1))\n : [];\n remaining -= footer.length;\n const head: string[] = [];\n if (remaining > 0) {\n head.push(this.breadcrumbLine(width));\n remaining--;\n }\n if (target?.readOnlyReason && remaining > 1) {\n head.push(this.statusLine(width));\n remaining--;\n }\n const feedback = this.currentFeedbackLine(width);\n if (feedback !== undefined && remaining > 1) {\n head.push(feedback);\n remaining--;\n }\n const hints = this.mode === \"conversation\" && remaining > 2 ? [this.hintsLine(width)] : [];\n remaining -= hints.length;\n const queueBudget = Math.max(0, remaining - 1);\n if (queueLines.length > queueBudget) {\n const cursor = queueLines.findIndex((line) => line.includes(CURSOR_MARKER));\n const start = Math.max(0, Math.min(cursor < 0 ? 0 : cursor - Math.floor(queueBudget / 2), queueLines.length - queueBudget));\n queueLines = queueLines.slice(start, start + queueBudget);\n }\n remaining -= queueLines.length;\n this.editorTop = rows - editorLines.length - footer.length - hints.length;\n this.editorHeight = editorLines.length;\n const body = remaining <= 0 ? [] : this.mode === \"picker\"\n ? this.pickerLines(width, remaining)\n : this.windowBody(transcriptLines, remaining);\n while (body.length < remaining) body.push(\"\");\n return [...head, ...body.slice(0, remaining), ...queueLines, ...editorLines, ...footer, ...hints]\n .slice(0, rows)\n .map((line) => visibleWidth(line) <= width ? line : truncateToWidth(line, width, \"\"));\n }\n\n invalidate(): void {\n this.renderer.invalidate();\n this.editor?.invalidate();\n this.pickerInput?.invalidate();\n }\n\n dispose(): void {\n if (this.currentId) this.state.queues.detach(this.currentId);\n this.disposed = true;\n this.editor = undefined;\n this.pickerInput = undefined;\n this.renderer.dispose();\n if (this.ownsMouseMode) {\n this.ownsMouseMode = false;\n this.tui.terminal.write(\"\\x1b[?1000l\\x1b[?1006l\");\n }\n }\n\n /** Keep the editor in sync with the shared session draft (e.g. after an ack\n * that landed while a previous view instance was disposed). */\n private reconcileEditor(): void {\n if (this.mode !== \"conversation\" || !this.editor || !this.currentId) return;\n if (this.state.queues.get(this.currentId)?.editingActive) return;\n if (this.state.hasPendingSend(this.currentId, this.editor.getText())) return;\n const draft = this.state.view(this.currentId).draft;\n if (this.editor.getText() !== draft) this.editor.setText(draft);\n }\n\n private applySelection(id: string, requestRender: boolean): void {\n if (this.currentId && this.currentId !== id) this.state.queues.detach(this.currentId);\n const target = this.currentTargets().find((candidate) => candidate.id === id);\n if (!target) {\n this.feedback = {\n text: `Unknown target ${safeText(id)}`,\n kind: \"error\",\n at: Date.now(),\n };\n if (requestRender) this.tui.requestRender();\n return;\n }\n if (isMainTarget(target)) {\n this.options.close();\n return;\n }\n this.currentId = id;\n this.state.selectedId = id;\n const entry = this.state.view(id);\n entry.lastSeenUpdatedAt = target.updatedAt ?? Date.now();\n this.stopConfirmId = undefined;\n this.closePicker();\n this.feedback = undefined;\n this.editor?.setText(entry.draft);\n if (requestRender) this.tui.requestRender();\n }\n\n private markCurrentTargetSeen(): void {\n if (!this.currentId) return;\n const target = this.targetById(this.currentId);\n if (!target?.updatedAt) return;\n const entry = this.state.view(this.currentId);\n if (entry.lastSeenUpdatedAt < target.updatedAt) entry.lastSeenUpdatedAt = target.updatedAt;\n }\n\n private currentTargets(): FabricConversationTarget[] {\n return this.options.targets();\n }\n\n private nonMainTargets(): FabricConversationTarget[] {\n return this.currentTargets().filter((target) => !isMainTarget(target));\n }\n\n private currentTarget(): FabricConversationTarget | undefined {\n return this.currentTargets().find((target) => target.id === this.currentId);\n }\n\n private mainTarget(): FabricConversationTarget | undefined {\n return this.currentTargets().find((target) => isMainTarget(target));\n }\n\n private targetById(id: string): FabricConversationTarget | undefined {\n return this.currentTargets().find((target) => target.id === id);\n }\n\n private terminalRows(): number {\n return this.tui.terminal?.rows ?? process.stdout.rows ?? 28;\n }\n\n /**\n * Respects a configured binding; when an injected manager reports no keys\n * the binding is unbound (never falls back), and only the default global\n * manager (no injection) falls back to hard-coded keys.\n */\n private bindingMatches(\n data: string,\n binding: \"app.message.followUp\" | \"app.tools.expand\" | \"app.thinking.toggle\",\n fallbackKeys: KeyId[],\n ): boolean {\n if (this.options.keybindings) {\n const keys = this.options.keybindings.getKeys(binding);\n return keys.length > 0 && this.options.keybindings.matches(data, binding);\n }\n const global = getKeybindings();\n const keys = global.getKeys(binding);\n if (keys.length > 0) return global.matches(data, binding);\n return fallbackKeys.some((key) => matchesKey(data, key));\n }\n\n private bindingHint(\n binding: \"app.message.followUp\" | \"app.tools.expand\" | \"app.thinking.toggle\",\n fallbackLabel: string,\n ): string {\n const manager = this.options.keybindings ?? getKeybindings();\n const keys = manager.getKeys(binding);\n if (keys.length > 0) return keys.join(\"/\");\n return this.options.keybindings ? \"unbound\" : fallbackLabel;\n }\n\n private handleConversationInput(data: string): void {\n const editor = this.editor;\n if (!editor) return;\n this.feedback = undefined;\n if (this.stopConfirmId === undefined && this.currentQueue()?.handleInput(data)) return;\n\n if (this.stopConfirmId !== undefined) {\n if (matchesKey(data, Key.enter)) {\n const target = this.targetById(this.stopConfirmId);\n this.stopConfirmId = undefined;\n if (target) this.dispatchStop(target);\n return;\n }\n if (matchesKey(data, Key.escape)) {\n this.stopConfirmId = undefined;\n this.feedback = { text: \"Stop cancelled\", kind: \"info\", at: Date.now() };\n return;\n }\n this.stopConfirmId = undefined;\n }\n\n if (this.bindingMatches(data, \"app.message.followUp\", FOLLOW_UP_FALLBACK)) {\n this.submit(\"followUp\");\n return;\n }\n if (matchesKey(data, Key.enter)) {\n this.submit(\"steer\");\n return;\n }\n if (matchesKey(data, Key.ctrl(\"c\"))) {\n if (editor.getText().length > 0) editor.setText(\"\");\n return;\n }\n if (matchesKey(data, Key.escape)) {\n this.options.close();\n return;\n }\n if (matchesKey(data, Key.ctrl(\"n\"))) {\n this.openPicker();\n return;\n }\n if (matchesKey(data, \"ctrl+tab\")) {\n this.cycleTarget(1);\n return;\n }\n if (matchesKey(data, \"shift+ctrl+tab\")) {\n this.cycleTarget(-1);\n return;\n }\n if (matchesKey(data, \"ctrl+shift+left\")) {\n this.navigateParent();\n return;\n }\n if (matchesKey(data, \"ctrl+shift+right\")) {\n this.navigateFirstChild();\n return;\n }\n if (matchesKey(data, \"alt+left\") && editor.getText().length === 0) {\n this.navigateParent();\n return;\n }\n if (matchesKey(data, \"alt+right\") && editor.getText().length === 0) {\n this.navigateFirstChild();\n return;\n }\n const injectedKeys = this.options.keybindings;\n const globalKeys = getKeybindings();\n const matchesViewport = (data: string, action: import(\"@oh-my-pi/pi-tui\").Keybinding): boolean =>\n (injectedKeys ? injectedKeys.matches(data, action as never) : false) || globalKeys.matches(data, action);\n if (matchesViewport(data, \"tui.editor.jumpBackward\")) { this.scrollPrompt(-1); return; }\n if (matchesViewport(data, \"tui.editor.jumpForward\")) { this.scrollPrompt(1); return; }\n if (matchesViewport(data, \"tui.editor.cursorUp\")) { this.scrollBy(-1); return; }\n if (matchesViewport(data, \"tui.editor.cursorDown\")) { this.scrollBy(1); return; }\n if (matchesViewport(data, \"tui.editor.pageUp\")) { this.scrollBy(-Math.max(1, this.lastBodyBudget - 2)); return; }\n if (matchesViewport(data, \"tui.editor.pageDown\")) { this.scrollBy(Math.max(1, this.lastBodyBudget - 2)); return; }\n if (matchesViewport(data, \"tui.editor.cursorWordLeft\")) { this.scrollBy(-Math.max(1, Math.floor(this.lastBodyBudget / 2))); return; }\n if (matchesViewport(data, \"tui.editor.cursorWordRight\")) { this.scrollBy(Math.max(1, Math.floor(this.lastBodyBudget / 2))); return; }\n if (matchesViewport(data, \"tui.editor.cursorLineStart\")) { this.scrollToTop(); return; }\n if (matchesViewport(data, \"tui.editor.cursorLineEnd\")) { this.followLatest(); return; }\n if (this.bindingMatches(data, \"app.thinking.toggle\", [\"ctrl+t\"])) {\n if (this.currentId) {\n const entry = this.state.view(this.currentId);\n entry.hideThinking = !(entry.hideThinking ?? this.options.appearance?.hideThinkingBlock ?? false);\n }\n return;\n }\n if (this.bindingMatches(data, \"app.tools.expand\", TOOLS_EXPAND_FALLBACK)) {\n if (this.currentId) {\n const entry = this.state.view(this.currentId);\n entry.toolsExpanded = !entry.toolsExpanded;\n }\n return;\n }\n editor.handleInput(data);\n }\n\n private submit(delivery: FabricConversationDelivery): void {\n const editor = this.editor;\n const target = this.currentTarget();\n if (!editor || !target || isMainTarget(target)) return;\n const raw = editor.getText();\n if (!raw.trim()) return;\n\n if (raw.trim() === \"/back\") {\n this.options.close();\n return;\n }\n if (raw.trim() === \"/agents\") {\n this.openPicker();\n return;\n }\n if (raw.trim() === \"/stop\") {\n if (!target.canStop) {\n this.feedback = {\n text: safeText(\n `Stop unavailable for ${target.name}: the selected target cannot be stopped from here.`,\n ),\n kind: \"error\",\n at: Date.now(),\n };\n return;\n }\n this.stopConfirmId = target.id;\n this.feedback = {\n text: safeText(`Press enter again to stop ${target.name} \u00B7 esc cancels`),\n kind: \"info\",\n at: Date.now(),\n };\n return;\n }\n if (raw.trim().startsWith(\"/\") || raw.trim().startsWith(\"!\")) {\n this.feedback = {\n text: safeText(\n `Unsupported command \"${raw.trim()}\" is not forwarded from this view. Supported: /stop /back /agents.`,\n ),\n kind: \"error\",\n at: Date.now(),\n };\n return;\n }\n if (target.readOnlyReason) {\n this.feedback = {\n text: safeText(`${target.name} is read-only: ${target.readOnlyReason}`),\n kind: \"error\",\n at: Date.now(),\n };\n return;\n }\n if (delivery === \"steer\" && !target.canSteer) {\n this.feedback = {\n text: safeText(`${target.name} does not accept steering messages right now.`),\n kind: \"error\",\n at: Date.now(),\n };\n return;\n }\n if (delivery === \"followUp\" && !target.canFollowUp) {\n this.feedback = {\n text: safeText(`${target.name} does not accept follow-up messages right now.`),\n kind: \"error\",\n at: Date.now(),\n };\n return;\n }\n const queue = this.currentQueue();\n if (!queue) return;\n this.state.queues.sync(target.id, this.options.transcript(target.id, true));\n if (queue.mode === \"extension\" && delivery === \"followUp\" && !isActiveStatus(target.status)) {\n const parked = queue.park(raw, delivery);\n if (parked.ok) { this.state.view(target.id).draft = \"\"; editor.setText(\"\"); }\n return;\n }\n // Session-owned pending marker: blocks duplicate submission of the same\n // raw draft for the same target across view close/reopen.\n if (this.state.hasPendingSend(target.id, raw)) return;\n const pending: FabricConversationPendingSend = { id: target.id, message: raw, delivery };\n this.state.addPendingSend(pending);\n const epoch = this.state.epoch;\n this.feedback = {\n text: safeText(`Sending ${delivery} \u2192 ${target.name}\u2026`),\n kind: \"info\",\n at: Date.now(),\n };\n void Promise.resolve()\n .then(() => queue.dispatch(raw, delivery))\n .then(() => {\n // Same-session acks mutate shared state even if this view was closed;\n // only a session clear (epoch change) invalidates the result.\n if (this.state.epoch !== epoch) return;\n this.state.resolvePendingSend(target.id, raw);\n if (this.disposed) return;\n if (this.currentId === target.id && this.editor?.getText() === raw) {\n this.editor.setText(\"\");\n }\n this.feedback = {\n text: safeText(`Queued ${delivery} \u2192 ${target.name}`),\n kind: \"info\",\n at: Date.now(),\n };\n this.tui.requestRender();\n })\n .catch((error: unknown) => {\n if (this.state.epoch !== epoch) return;\n this.state.failPendingSend(target.id, raw);\n if (this.disposed) return;\n // Keep the raw draft including whitespace and any newer editing; never merge.\n this.feedback = {\n text: safeText(\n `Send failed for ${target.name} (${delivery}): ${errorText(error)}`,\n ),\n kind: \"error\",\n at: Date.now(),\n };\n this.tui.requestRender();\n });\n }\n\n private dispatchStop(target: FabricConversationTarget): void {\n const epoch = this.state.epoch;\n this.feedback = {\n text: safeText(`Stopping ${target.name}\u2026`),\n kind: \"info\",\n at: Date.now(),\n };\n void Promise.resolve()\n .then(() => this.options.stop(target.id))\n .then(() => {\n if (this.disposed || epoch !== this.state.epoch) return;\n this.feedback = {\n text: safeText(`Stop requested for ${target.name}`),\n kind: \"info\",\n at: Date.now(),\n };\n this.tui.requestRender();\n })\n .catch((error: unknown) => {\n if (this.disposed || epoch !== this.state.epoch) return;\n this.feedback = {\n text: safeText(`Stop failed for ${target.name}: ${errorText(error)}`),\n kind: \"error\",\n at: Date.now(),\n };\n this.tui.requestRender();\n });\n }\n\n private navigateParent(): void {\n const target = this.currentTarget();\n if (!target) return;\n const parent = target.parentId ? this.targetById(target.parentId) : undefined;\n if (parent && !isMainTarget(parent)) {\n this.applySelection(parent.id, true);\n return;\n }\n this.options.close();\n }\n\n private navigateFirstChild(): void {\n const target = this.currentTarget();\n if (!target) return;\n const child = this.currentTargets().find((candidate) => candidate.parentId === target.id);\n if (child && !isMainTarget(child)) this.applySelection(child.id, true);\n }\n\n private cycleTarget(direction: 1 | -1): void {\n const targets = this.nonMainTargets();\n if (targets.length === 0) return;\n const index = targets.findIndex((target) => target.id === this.currentId);\n const nextIndex = index < 0\n ? 0\n : (index + direction + targets.length) % targets.length;\n const next = targets[nextIndex];\n if (next) this.applySelection(next.id, true);\n }\n\n private scrollBy(delta: number): void {\n if (!this.currentId || !Number.isFinite(delta) || delta === 0) return;\n const entry = this.state.view(this.currentId);\n const maxScroll = Math.max(0, this.lastBodyLength - this.lastBodyBudget);\n const position = entry.following ? maxScroll : entry.scroll;\n const next = position + Math.trunc(delta);\n entry.following = false;\n if (next < 0 && this.options.loadOlder(this.currentId)) {\n // Native history pages prepend records instead of replacing the tail.\n // Preserve the old viewport anchor, then apply the requested movement.\n entry.pageAnchor = \"prepend\";\n entry.anchorLength = this.lastBodyLength;\n entry.scroll = next;\n return;\n }\n if (next > maxScroll && this.options.loadNewer(this.currentId)) {\n entry.scroll = next;\n return;\n }\n entry.scroll = Math.max(0, Math.min(next, maxScroll));\n if (delta > 0 && entry.scroll === maxScroll) entry.following = true;\n }\n\n private scrollPrompt(direction: -1 | 1): void {\n if (!this.currentId) return;\n const entry = this.state.view(this.currentId);\n const position = entry.following ? Math.max(0, this.lastBodyLength - this.lastBodyBudget) : entry.scroll;\n const prompts = this.lastBody.flatMap((line, index) => line.includes(\"\\x1b]133;A\") ? [index] : []);\n const target = direction < 0 ? prompts.filter((row) => row < position).at(-1) : prompts.find((row) => row > position);\n this.scrollBy(target === undefined ? direction * Math.max(1, this.lastBodyBudget) : target - position);\n }\n\n private scrollToTop(): void {\n if (!this.currentId) return;\n const entry = this.state.view(this.currentId);\n entry.following = false;\n entry.scroll = 0;\n if (this.options.loadOlder(this.currentId)) entry.pageAnchor = \"start\";\n }\n\n private followLatest(): void {\n if (!this.currentId) return;\n this.options.loadLatest(this.currentId);\n const entry = this.state.view(this.currentId);\n entry.following = true;\n entry.pageAnchor = undefined;\n entry.anchorLength = undefined;\n }\n\n private openPicker(): void {\n this.mode = \"picker\";\n this.pickerInput = new Input();\n this.pickerInput.focused = this.focusState;\n this.pickerInput.onSubmit = () => this.pickSelected();\n if (this.editor) this.editor.focused = false;\n this.pickerSelectedId = this.currentId ?? this.nonMainTargets()[0]?.id;\n this.refreshPicker();\n }\n\n private closePicker(): void {\n this.mode = \"conversation\";\n this.pickerInput = undefined;\n this.pickerRows = [];\n this.pickerSelectedId = undefined;\n if (this.editor) this.editor.focused = this.focusState;\n }\n\n private refreshPicker(): void {\n const search = this.pickerInput?.getValue() ?? \"\";\n const rows: PickerRow[] = [];\n const targets = this.currentTargets();\n const byId = new Map(targets.map((target) => [target.id, target]));\n const roots = targets.filter(\n (target) => !target.parentId || !byId.has(target.parentId),\n );\n roots.sort((left, right) =>\n Number(isMainTarget(right)) - Number(isMainTarget(left)),\n );\n const visited = new Set<string>();\n const pushTree = (target: FabricConversationTarget, depth: number): void => {\n if (visited.has(target.id)) return;\n visited.add(target.id);\n rows.push({ target, depth });\n for (const child of targets) {\n if (child.parentId === target.id) pushTree(child, depth + 1);\n }\n };\n for (const root of roots) pushTree(root, 0);\n for (const orphan of targets) {\n if (!visited.has(orphan.id)) rows.push({ target: orphan, depth: 0 });\n }\n const filtered = search.trim()\n ? fuzzyFilter(rows, search, (row) => `${row.target.kind} ${row.target.name} ${row.target.id}`)\n : rows;\n this.pickerRows = filtered;\n // Selection identity is the target id, stable across roster updates.\n if (!filtered.some((row) => row.target.id === this.pickerSelectedId)) {\n this.pickerSelectedId = filtered[0]?.target.id;\n }\n }\n\n private pickerSelectedIndex(): number {\n const index = this.pickerRows.findIndex((row) => row.target.id === this.pickerSelectedId);\n return index >= 0 ? index : 0;\n }\n\n private movePickerSelection(direction: 1 | -1): void {\n if (this.pickerRows.length === 0) return;\n const index = this.pickerSelectedIndex();\n const next = (index + direction + this.pickerRows.length) % this.pickerRows.length;\n this.pickerSelectedId = this.pickerRows[next]?.target.id;\n }\n\n private pickSelected(): void {\n const row = this.pickerRows.find((candidate) => candidate.target.id === this.pickerSelectedId) ??\n this.pickerRows[0];\n if (!row) {\n this.closePicker();\n return;\n }\n if (isMainTarget(row.target)) {\n this.options.close();\n return;\n }\n this.applySelection(row.target.id, true);\n }\n\n private handlePickerInput(data: string): void {\n const input = this.pickerInput;\n if (!input) {\n this.closePicker();\n return;\n }\n if (matchesKey(data, Key.escape)) {\n this.closePicker();\n return;\n }\n if (matchesKey(data, Key.up)) {\n this.movePickerSelection(-1);\n return;\n }\n if (matchesKey(data, Key.down)) {\n this.movePickerSelection(1);\n return;\n }\n if (matchesKey(data, Key.enter)) {\n this.pickSelected();\n return;\n }\n input.handleInput(data);\n this.refreshPicker();\n }\n\n private isUnread(target: FabricConversationTarget): boolean {\n if (target.updatedAt === undefined || target.id === this.currentId) return false;\n // peek() only: listing targets must never create or evict drafts.\n const seen = this.state.peek(target.id)?.lastSeenUpdatedAt ?? 0;\n return target.updatedAt > seen;\n }\n\n private breadcrumbLine(width: number): string {\n const chain: FabricConversationTarget[] = [];\n let cursor = this.currentTarget();\n const guard = new Set<string>();\n while (cursor && !guard.has(cursor.id)) {\n guard.add(cursor.id);\n chain.unshift(cursor);\n cursor = cursor.parentId ? this.targetById(cursor.parentId) : undefined;\n }\n if (chain.length === 0) {\n const main = this.mainTarget();\n if (main) chain.push(main);\n }\n if (chain.length === 0) return truncateToWidth(this.theme.fg(\"dim\", \"Fabric\"), width, \"\");\n const last = chain[chain.length - 1];\n const parts = chain.map((target, index) => {\n const isCurrent = target.id === this.currentId;\n const name = isMainTarget(target) ? \"Main\" : safeText(target.name) || target.id;\n const styled = isCurrent\n ? this.theme.fg(\"accent\", name)\n : this.theme.fg(\"muted\", name);\n return last && index === chain.length - 1 && this.isUnread(last)\n ? `${styled} \u25CF`\n : styled;\n });\n return truncateToWidth(parts.join(this.theme.fg(\"dim\", \" > \")), width, \"\");\n }\n\n private statusLine(width: number): string {\n const target = this.currentTarget();\n if (!target) return \"\";\n const parts = [\n this.theme.fg(\"muted\", target.kind),\n colorizeStatus(this.theme, target.status),\n ];\n if (target.runner) parts.push(this.theme.fg(\"muted\", safeText(target.runner)));\n if (target.model) parts.push(this.theme.fg(\"muted\", safeText(target.model)));\n if (target.thinking) parts.push(this.theme.fg(\"muted\", `thinking:${safeText(target.thinking)}`));\n if (target.readOnlyReason) {\n parts.push(this.theme.fg(\"warning\", safeText(`read-only: ${target.readOnlyReason}`)));\n }\n return truncateToWidth(parts.join(this.theme.fg(\"dim\", \" \u00B7 \")), width, \"\");\n }\n\n private currentFeedbackLine(width: number): string | undefined {\n if (this.mode === \"picker\") return undefined;\n if (!this.feedback) return undefined;\n if (Date.now() - this.feedback.at > FEEDBACK_TTL_MS) return undefined;\n const color = this.feedback.kind === \"error\" ? \"error\" : \"accent\";\n return truncateToWidth(this.theme.fg(color, this.feedback.text), width, \"\");\n }\n\n private hintsLine(width: number): string {\n const followUpKeys = this.bindingHint(\"app.message.followUp\", \"alt+enter\");\n const toolsKeys = this.bindingHint(\"app.tools.expand\", \"ctrl+o\");\n const hints = this.stopConfirmId !== undefined\n ? [this.theme.fg(\"warning\", safeText(\"enter confirms stop \u00B7 esc cancels\"))]\n : [\n this.theme.fg(\"dim\", \"enter\"),\n \"steer\",\n this.theme.fg(\"dim\", followUpKeys),\n \"follow-up\",\n this.theme.fg(\"dim\", \"ctrl+n\"),\n \"targets\",\n this.theme.fg(\"dim\", \"pgup/pgdn\"),\n \"scroll\",\n this.theme.fg(\"dim\", \"esc\"),\n \"close\",\n ];\n const full = [...hints, this.theme.fg(\"dim\", toolsKeys), \"tools\"].join(\" \");\n return truncateToWidth(full, width, \"\");\n }\n\n private renderEditorLines(innerWidth: number): string[] {\n const editor = this.editor;\n if (!editor) return [];\n return [...editor.render(innerWidth)];\n }\n\n private currentQueue(): ConversationQueue | undefined {\n const target = this.currentTarget();\n if (!target || target.kind === \"main\" || !this.editor || this.disposed) return undefined;\n return this.state.queues.attach({\n targetId: target.id, targetName: target.name,\n ompEvents: this.options.queueEvents ?? { emit() {} }, theme: this.theme,\n send: (message, delivery) => this.options.send(target.id, message, delivery),\n editor: {\n getText: () => this.editor?.getText() ?? \"\",\n setText: (text) => this.editor?.setText(text),\n handleInput: (data) => this.editor?.handleInput(data),\n render: (width) => [...(this.editor?.render(width) ?? [])],\n paddingX: this.options.appearance?.editorPaddingX ?? 0,\n },\n ...(this.options.keybindings ? { keybindings: this.options.keybindings } : {}),\n isIdle: () => !isActiveStatus(this.targetById(target.id)?.status ?? \"stopped\"),\n onNotify: (text, kind) => {\n if (kind === \"error\" && !this.disposed && this.currentId === target.id) this.feedback = { text: safeText(text), kind, at: Date.now() };\n },\n requestRender: () => { if (!this.disposed && this.currentId === target.id) this.tui.requestRender(); },\n });\n }\n\n private transcriptLines(innerWidth: number): string[] {\n const target = this.currentTarget();\n if (!target || !this.currentId) return [this.theme.fg(\"dim\", \"No target selected.\")];\n const entry = this.state.view(this.currentId);\n const transcript = this.options.transcript(this.currentId, entry.following);\n this.state.queues.sync(this.currentId, transcript);\n return this.renderer.render(transcript, innerWidth, {\n target,\n toolsExpanded: entry.toolsExpanded,\n hideThinking: entry.hideThinking ?? this.options.appearance?.hideThinkingBlock ?? false,\n showImages: this.options.appearance?.showImages ?? true,\n outputPad: this.options.appearance?.outputPad ?? 1,\n ...(this.options.appearance?.codeBlockIndent !== undefined ? { codeBlockIndent: this.options.appearance.codeBlockIndent } : {}),\n codePreviewSettings: this.options.codePreviewSettings,\n });\n }\n\n private windowBody(body: string[], budget: number): string[] {\n this.lastBodyLength = body.length;\n this.lastBody = body;\n this.lastBodyBudget = budget;\n const entry = this.currentId ? this.state.view(this.currentId) : undefined;\n if (!entry) return body.slice(0, Math.max(0, budget));\n const maxScroll = Math.max(0, body.length - budget);\n if (entry.following) {\n entry.scroll = maxScroll;\n } else if (entry.pageAnchor) {\n entry.scroll = entry.pageAnchor === \"prepend\"\n ? entry.scroll + Math.max(0, body.length - (entry.anchorLength ?? body.length))\n : entry.pageAnchor === \"end\" ? maxScroll : 0;\n entry.pageAnchor = undefined;\n entry.anchorLength = undefined;\n }\n entry.scroll = Math.max(0, Math.min(entry.scroll, maxScroll));\n return body.slice(entry.scroll, entry.scroll + budget);\n }\n\n private pickerLines(innerWidth: number, budget: number): string[] {\n // Independent viewport: the picker never reads or writes the selected\n // target's transcript scroll/follow state.\n this.refreshPicker();\n const lines = [this.theme.fg(\"accent\", \"Targets \u00B7 enter select \u00B7 esc cancel\")];\n const input = this.pickerInput;\n if (input) {\n for (const line of input.render(innerWidth)) lines.push(line);\n }\n const rows = this.pickerRows;\n const selectedIndex = this.pickerSelectedIndex();\n const listBudget = Math.max(1, budget - lines.length - 1);\n const startIndex = Math.max(\n 0,\n Math.min(selectedIndex - Math.floor(listBudget / 2), rows.length - listBudget),\n );\n const endIndex = Math.min(startIndex + listBudget, rows.length);\n if (rows.length === 0) lines.push(this.theme.fg(\"muted\", \" no matching targets\"));\n for (let i = startIndex; i < endIndex; i++) {\n const row = rows[i];\n if (!row) continue;\n const selected = row.target.id === this.pickerSelectedId;\n const indent = \" \".repeat(row.depth + 1);\n const marker = selected ? this.theme.fg(\"accent\", \"\u2192 \") : \" \";\n const unread = this.isUnread(row.target) ? this.theme.fg(\"accent\", \" \u25CF\") : \"\";\n const label = isMainTarget(row.target)\n ? \"Main (native session)\"\n : `${safeText(row.target.name)} ${this.theme.fg(\"muted\", `(${row.target.kind} \u00B7 ${row.target.status})`)}`;\n lines.push(\n truncateToWidth(\n `${indent}${marker}${selected ? this.theme.fg(\"accent\", label) : label}${unread}`,\n innerWidth,\n \"\",\n ),\n );\n }\n if (rows.length > listBudget) {\n lines.push(this.theme.fg(\"muted\", ` (${selectedIndex + 1}/${rows.length})`));\n }\n return lines.slice(0, budget);\n }\n}\n\nconst colorizeStatus = (theme: Theme, status: string): string => {\n if (status === \"completed\" || status === \"done\") return theme.fg(\"success\", status);\n if (status === \"failed\" || status === \"error\" || status === \"timed_out\") {\n return theme.fg(\"error\", status);\n }\n if (status === \"running\" || status === \"in_progress\" || status === \"active\") {\n return theme.fg(\"accent\", status);\n }\n return theme.fg(\"muted\", status);\n};\n", "import {\n AssistantMessageComponent,\n BashExecutionComponent,\n BranchSummaryMessageComponent,\n CompactionSummaryMessageComponent,\n type MessageRenderer,\n type Theme,\n ToolExecutionComponent,\n type ToolDefinition,\n UserMessageComponent,\n} from \"@oh-my-pi/pi-coding-agent\";\nimport type { Component, TUI } from \"@oh-my-pi/pi-tui\";\nimport { wrapTextWithAnsi } from \"@oh-my-pi/pi-tui\";\nimport { terminalSafe } from \"./transcript-sanitization.js\";\nimport type { FabricConversationTarget } from \"./conversation.js\";\nimport { unwrapActorEnvelopeText } from \"./conversation-transcript.js\";\nimport type { CodePreviewSettings } from \"./code-preview.js\";\nimport type {\n NativeAgentMessage,\n NativeConversationTranscript,\n} from \"./conversation-native-reader.js\";\n\nexport type {\n NativeAgentMessage,\n NativeConversationTranscript,\n} from \"./conversation-native-reader.js\";\n\ntype FabricToolDefinitionLike = ToolDefinition<any, any> | undefined;\nexport type FabricGetToolDefinition = (toolName: string) => FabricToolDefinitionLike;\n\nexport interface FabricConversationTranscriptRendererOptions {\n getToolDefinition?: FabricGetToolDefinition;\n getMessageRenderer?: ((customType: string) => MessageRenderer | undefined) | undefined;\n hiddenThinkingLabel?: string | undefined;\n imageWidthCells?: number | undefined;\n}\n\nexport interface FabricConversationTranscriptRenderOptions {\n target: FabricConversationTarget;\n toolsExpanded: boolean;\n outputPad?: 0 | 1;\n codeBlockIndent?: string;\n codePreviewSettings?: CodePreviewSettings | undefined;\n hideThinking?: boolean;\n showImages?: boolean;\n}\n\ntype UserAgentMessage = Extract<NativeAgentMessage, { role: \"user\" }>;\ntype ToolResultAgentMessage = Extract<NativeAgentMessage, { role: \"toolResult\" }>;\ntype BashExecutionAgentMessage = Extract<NativeAgentMessage, { role: \"bashExecution\" }>;\ntype CustomAgentMessage = Extract<NativeAgentMessage, { role: \"custom\" }>;\ntype CompactionSummaryAgentMessage = Extract<NativeAgentMessage, { role: \"compactionSummary\" }>;\ntype BranchSummaryAgentMessage = Extract<NativeAgentMessage, { role: \"branchSummary\" }>;\n\ntype Renderable = { render(width: number): readonly string[] };\n\nconst stableKey = (value: unknown): string => {\n try {\n return JSON.stringify(value) ?? \"undefined\";\n } catch {\n return String(value);\n }\n};\n\nconst textOf = (content: unknown): string => {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .filter((part): part is { type: \"text\"; text: string } =>\n typeof part === \"object\" && part !== null && (part as { type?: unknown }).type === \"text\"\n && typeof (part as { text?: unknown }).text === \"string\",\n )\n .map((part) => part.text)\n .join(\"\\n\");\n};\n\nconst safeRender = (component: Renderable, width: number, fallback: () => string[]): string[] => {\n try {\n return [...component.render(width)];\n } catch {\n return fallback();\n }\n};\n\nexport class FabricConversationTranscriptRenderer {\n private disposed = false;\n private readonly toolComponents = new Map<string, ToolExecutionComponent>();\n private readonly assistantComponents = new Map<string, AssistantMessageComponent>();\n private readonly messageComponents = new Map<string, Renderable>();\n\n constructor(\n private readonly tui: TUI,\n private readonly theme: Theme,\n private readonly rendererOptions: FabricConversationTranscriptRendererOptions = {},\n ) {}\n\n invalidate(): void {\n if (this.disposed) return;\n this.toolComponents.clear();\n this.assistantComponents.clear();\n this.messageComponents.clear();\n this.tui.requestRender();\n }\n\n dispose(): void {\n this.disposed = true;\n this.invalidate();\n }\n\n render(transcript: NativeConversationTranscript, width: number, options: FabricConversationTranscriptRenderOptions): string[] {\n if (this.disposed || width <= 0) return [];\n const lines: string[] = [];\n if (transcript.messages.length === 0 && !transcript.streaming.partialAssistant && transcript.streaming.tools.length === 0) {\n return [this.theme.fg(\"dim\", \"No retained transcript yet; new agent activity will appear here.\")];\n }\n if (transcript.hasMore) lines.push(this.theme.fg(\"dim\", \"\u2191 older activity available\"));\n const renderedTools = new Set<string>();\n for (const message of transcript.messages) this.renderMessage(message, width, options, lines, renderedTools);\n if (transcript.streaming.partialAssistant) {\n this.renderAssistant(transcript.streaming.partialAssistant, width, options, lines, renderedTools, true);\n }\n for (const tool of transcript.streaming.tools) {\n if (renderedTools.has(tool.toolCallId)) continue;\n renderedTools.add(tool.toolCallId);\n this.renderTool(tool.toolCallId, tool.toolName, tool.args, tool.result, tool.partial, tool.isError, width, options, lines, true);\n }\n if (transcript.hasNewer) lines.push(this.theme.fg(\"dim\", \"\u2193 newer activity available\"));\n return lines;\n }\n\n private renderMessage(message: NativeAgentMessage, width: number, options: FabricConversationTranscriptRenderOptions, lines: string[], renderedTools: Set<string>): void {\n switch (message.role) {\n case \"user\": {\n const text = unwrapActorEnvelopeText(textOf(message.content)) ?? textOf(message.content);\n if (text) this.push(lines, safeRender(new UserMessageComponent(terminalSafe(text, false)), width, () => this.fallback(text, width)));\n return;\n }\n case \"assistant\":\n this.renderAssistant(message, width, options, lines, renderedTools, false);\n return;\n case \"toolResult\":\n if (typeof message.toolCallId === \"string\") {\n this.renderTool(message.toolCallId, message.toolName ?? \"tool\", undefined, message, undefined, message.isError, width, options, lines, false);\n }\n return;\n case \"bashExecution\":\n this.renderBash(message, width, options, lines);\n return;\n case \"custom\":\n this.renderCustom(message, width, options, lines);\n return;\n case \"compactionSummary\":\n this.renderSummary(message, width, options, lines, CompactionSummaryMessageComponent);\n return;\n case \"branchSummary\":\n this.renderSummary(message, width, options, lines, BranchSummaryMessageComponent);\n return;\n default:\n return;\n }\n }\n\n private renderAssistant(message: Extract<NativeAgentMessage, { role: \"assistant\" }>, width: number, options: FabricConversationTranscriptRenderOptions, lines: string[], renderedTools: Set<string>, transient: boolean): void {\n const key = `${message.timestamp}:${options.target.id}:${options.hideThinking === true}`;\n let component = this.assistantComponents.get(key);\n if (!component) {\n component = new AssistantMessageComponent(message, options.hideThinking ?? false);\n this.assistantComponents.set(key, component);\n } else {\n component.updateContent(message, { transient });\n }\n this.push(lines, safeRender(component, width, () => this.fallback(textOf(message.content), width)));\n for (const block of message.content) {\n if (block.type !== \"toolCall\" || renderedTools.has(block.id)) continue;\n renderedTools.add(block.id);\n this.renderTool(block.id, block.name, block.arguments, undefined, undefined, message.stopReason === \"error\", width, options, lines, transient);\n }\n }\n\n private renderTool(id: string, name: string, args: unknown, result: unknown, partial: unknown, isError: boolean | undefined, width: number, options: FabricConversationTranscriptRenderOptions, lines: string[], transient: boolean): void {\n let component = this.toolComponents.get(`${options.target.id}:${id}`);\n if (!component) {\n const tool = this.rendererOptions.getToolDefinition?.(name);\n // ToolDefinition and AgentTool are the same registration shape (OMP casts\n // between them internally); the native component consumes AgentTool.\n component = new ToolExecutionComponent(name, args, { showImages: options.showImages ?? true }, tool as import(\"@oh-my-pi/pi-agent-core\").AgentTool | undefined, {\n requestRender: () => this.tui.requestRender(),\n requestComponentRender: () => this.tui.requestRender(),\n resetDisplay: () => undefined,\n imageBudget: this.tui.imageBudget,\n }, options.target.cwd ?? process.cwd(), id);\n this.toolComponents.set(`${options.target.id}:${id}`, component);\n }\n component.setExpanded(options.toolsExpanded);\n const normalizeResult = (raw: unknown): { content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>; details?: unknown; isError?: boolean } => {\n const record = (raw ?? {}) as { content?: unknown; details?: unknown; isError?: boolean };\n return {\n content: Array.isArray(record.content) ? record.content : [],\n ...(record.details !== undefined ? { details: record.details } : {}),\n ...(record.isError !== undefined ? { isError: record.isError } : {}),\n };\n };\n if (args !== undefined) component.updateArgs(args, id);\n if (result !== undefined) component.updateResult(normalizeResult(result), false, id);\n else if (partial !== undefined) component.updateResult(normalizeResult(partial), true, id);\n if (isError) component.seal();\n lines.push(...safeRender(component, width, () => this.fallback(name, width)));\n }\n\n private renderBash(message: BashExecutionAgentMessage, width: number, options: FabricConversationTranscriptRenderOptions, lines: string[]): void {\n const component = new BashExecutionComponent(message.command, this.tui, message.excludeFromContext);\n component.appendOutput(terminalSafe(message.output ?? \"\", false));\n component.setComplete(message.exitCode, message.cancelled, { output: message.output ?? \"\" });\n component.setExpanded(options.toolsExpanded);\n this.push(lines, safeRender(component, width, () => this.fallback(message.command, width)));\n }\n\n private renderCustom(message: CustomAgentMessage, width: number, options: FabricConversationTranscriptRenderOptions, lines: string[]): void {\n const text = textOf(message.content);\n if (!message.display || !text) return;\n this.push(lines, safeRender(new UserMessageComponent(terminalSafe(text, false), true), width, () => this.fallback(text, width)));\n }\n\n private renderSummary<M extends CompactionSummaryAgentMessage | BranchSummaryAgentMessage>(message: M, width: number, options: FabricConversationTranscriptRenderOptions, lines: string[], ComponentClass: new (message: M) => Component): void {\n const component = new ComponentClass(message);\n if (\"setExpanded\" in component && typeof component.setExpanded === \"function\") component.setExpanded(options.toolsExpanded);\n this.push(lines, safeRender(component, width, () => this.fallback(message.summary, width)));\n }\n\n private push(lines: string[], block: string[]): void {\n // Native transcript components stack directly (each carries its own\n // internal top/bottom padding); extra separators break exact parity.\n lines.push(...block);\n }\n\n private fallback(text: string, width: number): string[] {\n return terminalSafe(text, false).split(\"\\n\").flatMap((line) => wrapTextWithAnsi(line, Math.max(1, width)).map((item) => this.theme.fg(\"text\", item)));\n }\n}\n", "import { createHash } from \"node:crypto\";\nimport { createConversationQueue, type ConversationQueue, type ConversationQueueOptions, type ConversationSnapshotEntry } from \"./conversation-queue.js\";\nimport type { NativeConversationTranscript } from \"./conversation-native-reader.js\";\nimport { unwrapActorEnvelopeText } from \"./conversation-transcript.js\";\n\ninterface QueueSlot {\n queue: ConversationQueue;\n attached: ConversationQueueOptions | undefined;\n initialized: boolean;\n frontier: number;\n}\n\n/** Session-owned queues; replacing a view never strands an acknowledgement or editor. */\nexport class ConversationQueueStore {\n private readonly slots = new Map<string, QueueSlot>();\n\n attach(options: ConversationQueueOptions): ConversationQueue {\n const existing = this.slots.get(options.targetId);\n if (existing) { existing.attached = options; return existing.queue; }\n const slot: QueueSlot = { queue: undefined as unknown as ConversationQueue, attached: options, initialized: false, frontier: 0 };\n const attached = () => slot.attached;\n slot.queue = createConversationQueue({\n ...options,\n send: (text, lane) => {\n const current = attached();\n if (!current) return Promise.reject(new Error(\"Open this conversation to send its queued messages\"));\n return current.send(text, lane);\n },\n editor: {\n getText: () => attached()?.editor?.getText() ?? \"\",\n setText: (text) => attached()?.editor?.setText(text),\n handleInput: (data) => attached()?.editor?.handleInput?.(data),\n render: (width) => attached()?.editor?.render?.(width) ?? [],\n get paddingX() { return attached()?.editor?.paddingX ?? 0; },\n },\n isIdle: () => attached()?.isIdle?.() ?? true,\n onNotify: (text, kind) => attached()?.onNotify?.(text, kind),\n requestRender: () => attached()?.requestRender?.(),\n });\n this.slots.set(options.targetId, slot);\n return slot.queue;\n }\n\n get(id: string): ConversationQueue | undefined { return this.slots.get(id)?.queue; }\n\n detach(id: string): void {\n const slot = this.slots.get(id);\n if (!slot) return;\n slot.queue.cancelEditing();\n slot.attached = undefined;\n }\n\n sync(id: string, transcript: NativeConversationTranscript): void {\n const slot = this.slots.get(id);\n if (!slot) return;\n let frontier = slot.frontier;\n const occurrences = new Map<string, number>();\n const entries: ConversationSnapshotEntry[] = [];\n for (const message of transcript.messages) {\n if (Number.isFinite(message.timestamp)) frontier = Math.max(frontier, message.timestamp);\n if (message.role !== \"user\") continue;\n const raw = typeof message.content === \"string\" ? message.content : message.content.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\");\n const text = unwrapActorEnvelopeText(raw) ?? raw;\n let identity: string | undefined;\n if (text !== raw) {\n try {\n const envelope = JSON.parse(raw.trim().slice(\"Fabric actor message from direct:\".length));\n if (typeof envelope.id === \"string\") identity = envelope.id;\n } catch { /* Only a validated actor envelope can provide a delivery id. */ }\n }\n if (!identity) identity = createHash(\"sha256\").update(JSON.stringify([message.timestamp, message.content])).digest(\"hex\");\n const occurrence = occurrences.get(identity) ?? 0;\n occurrences.set(identity, occurrence + 1);\n entries.push({ id: occurrence === 0 ? identity : `${identity}:${occurrence}`, text,\n historical: !slot.initialized || message.timestamp < slot.frontier });\n }\n slot.queue.syncSnapshot(entries);\n slot.queue.syncPending(transcript.pendingMessages);\n slot.frontier = frontier;\n slot.initialized = true;\n }\n\n clear(): void {\n for (const slot of this.slots.values()) { slot.queue.cancelEditing(); slot.attached = undefined; slot.queue.dispose(); }\n this.slots.clear();\n }\n}\n", "import type { KeybindingsManager, Theme, ThemeColor } from \"@oh-my-pi/pi-coding-agent\";\nimport { Ellipsis,\n Key,\n getKeybindings,\n matchesKey,\n truncateToWidth,\n type KeyId,\n} from \"@oh-my-pi/pi-tui\";\n\n/**\n * Target-scoped conversation queue for the focused conversation view.\n *\n * When pi-queue-steer is installed and loaded, a versioned omp.events\n * request/capability handshake hands this adapter a bridge over the\n * extension's actual queue-state machinery (DeliveryQueue / QueueEditSession)\n * AND its actual shared execution-outline renderer (QueueTimelineWidget plus\n * the real inline-editor line extractor) \u2014 no imitation, no hard dependency:\n * the extension is discovered only through the shared bus. With no compatible\n * listener, the adapter falls back to OMP's native queue display labels and\n * colors (\"Steering:\" / \"Follow-up:\", dim) and never claims extension parity.\n *\n * Delivery ownership rules:\n * - every queue is bound to one targetId; rows and edits never leak to Main\n * or to another target (dispatch goes only through the injected per-target\n * `send` route);\n * - `submit` acknowledges route acceptance only: a resolved send marks the\n * row `dispatched` \u2014 immutable, no longer editable (there is no remote\n * retract API) \u2014 and still visible until native delivery is confirmed;\n * - rows retire through `syncSnapshot`, reconciled against the native\n * reader agent's complete-message snapshot (read-only messages/streaming/\n * tools source). Retirement keys on stable native message identities plus\n * a pre-dispatch baseline and live-append frontier, with duplicate\n * counting \u2014 trimmed text alone is NOT identity: identical text already in\n * history, or historical pages loaded later, can never fake consumption;\n * - a failed send restores the exact remaining rows to the timeline head in\n * order;\n * - Main-only control actions (/ commands, ! bash) are rejected at stage\n * time \u2014 they are not queueable from a focused conversation;\n * - a run ending (settled, aborted, errored) is NOT a retirement event:\n * follow-ups exist precisely to start the next run, and a route ack cannot\n * prove consumption, so only `retireAll` (target removed/unreachable) or\n * an identity match retires rows;\n * - `dispose({ retain })` gives Main explicit cleanup/retention semantics on\n * target switches: retention parks the rows (the extension bridge retains\n * them per targetId for re-adoption), the default clears them and releases\n * the extension's retained state.\n */\n\nexport const QUEUE_STEER_CONVERSATION_QUEUE_REQUEST_EVENT = \"queue-steer:conversation-queue:request:v1\";\n\ntype ConversationQueueLane = \"steer\" | \"followUp\";\ntype ConversationQueueRowState = \"queued\" | \"dispatched\";\n\ninterface ConversationQueueRow {\n id: string;\n lane: ConversationQueueLane;\n text: string;\n state: ConversationQueueRowState;\n paused: boolean;\n /** Current row-editing selection (rendered live through the shared editor). */\n selected: boolean;\n /** Marked for removal inside the active editing session; save deletes it. */\n removed: boolean;\n}\n\n/** Structural shape of the extension's real `DeliveryQueue` rows. */\ninterface ConversationQueueBridgeRow {\n id: string;\n lane: ConversationQueueLane;\n text: string;\n images: unknown[];\n sequence: number;\n paused?: boolean;\n}\n\n/** Structural subset of the extension's real `DeliveryQueue`. */\ninterface ConversationQueueBridgeQueue {\n enqueue(lane: ConversationQueueLane, text: string, images?: readonly unknown[]): ConversationQueueBridgeRow;\n snapshot(): ConversationQueueBridgeRow[];\n peek(): ConversationQueueBridgeRow | undefined;\n get(id: string): ConversationQueueBridgeRow | undefined;\n remove(id: string): ConversationQueueBridgeRow | undefined;\n prepend(item: ConversationQueueBridgeRow): void;\n prependMany(items: readonly ConversationQueueBridgeRow[]): void;\n update(id: string, text: string): boolean;\n setLane(id: string, lane: ConversationQueueLane): boolean;\n setPaused(id: string, paused: boolean): boolean;\n clear(): void;\n readonly length: number;\n}\n\n/** Structural subset of the extension's real `QueueEditSession`. */\ninterface ConversationQueueBridgeEditSession {\n readonly selectedId: string;\n readonly composerDraft: string;\n capture(text: string): void;\n select(item: ConversationQueueBridgeRow, currentText: string): string;\n toggleRemoved(id: string): boolean | undefined;\n togglePaused(id: string): boolean | undefined;\n setLane(id: string, lane: ConversationQueueLane): ConversationQueueLane | undefined;\n commit(queue: ConversationQueueBridgeQueue, currentText: string): {\n updated: number;\n removed: number;\n moved: number;\n held: number;\n released: number;\n };\n rollbackPositions(queue: ConversationQueueBridgeQueue): void;\n /** Draft decoration readers; present on the extension's real session. */\n laneFor?(id: string): ConversationQueueLane | undefined;\n textFor?(id: string): string | undefined;\n pausedFor?(id: string): boolean | undefined;\n isRemoved?(id: string): boolean;\n}\n\n/**\n * Version 1 interop bridge served by a loaded pi-queue-steer over the\n * `QUEUE_STEER_CONVERSATION_QUEUE_REQUEST_EVENT` handshake. The renderer\n * members are optional so an older installed extension degrades gracefully\n * to the native fallback rendering instead of an imitation outline.\n */\nexport interface ConversationQueueBridgeV1 {\n version: 1;\n targetId: string;\n createQueue(): ConversationQueueBridgeQueue;\n createEditSession(item: ConversationQueueBridgeRow, composerDraft: string): ConversationQueueBridgeEditSession;\n isQueueableSubmission(text: string): boolean;\n laneLabel(lane: ConversationQueueLane): string;\n laneColor(lane: ConversationQueueLane): string;\n buildTimelineItems?(\n queue: ConversationQueueBridgeQueue,\n editSession: ConversationQueueBridgeEditSession | undefined,\n modes?: { steer: \"all\" | \"one-at-a-time\"; followUp: \"all\" | \"one-at-a-time\" },\n ): readonly unknown[];\n createTimelineWidget?(\n options: {\n items: readonly unknown[];\n editingId?: string;\n paused?: boolean;\n idle?: boolean;\n renderInlineEditor?: (width: number) => string[];\n },\n theme: Theme,\n ): { render(width: number): readonly string[]; invalidate(): void };\n extractInlineEditorLines?(lines: readonly string[], paddingX?: number): string[];\n}\n\n/**\n * One entry of the native reader agent's complete-message snapshot. `id` is\n * a stable native identity (session entry id, reader event identity, or the\n * actor envelope/message id); `historical` marks baseline/history entries \u2014\n * including older transcript pages loaded later \u2014 which establish identity\n * but can never retire a queued row.\n */\nexport interface ConversationSnapshotEntry {\n id: string;\n text: string;\n historical?: boolean;\n}\n\nexport interface ConversationQueueOptions {\n /** Shared omp.events bus (emit only; the handshake is synchronous claim/respond). */\n ompEvents: { emit(channel: string, data: unknown): void };\n targetId: string;\n targetName?: string;\n /**\n * Per-target dispatch route owned by Main; rejection restores the rows. A\n * resolved value may carry `messageId`/`id` (e.g. an actor envelope id) \u2014\n * it becomes the row's expected native delivery identity.\n */\n send: (message: string, delivery: ConversationQueueLane) => Promise<unknown>;\n theme: Theme;\n /** Shared focused-view editor; row editing renders live through it. */\n editor?: {\n getText(): string;\n setText(text: string): void;\n handleInput?(data: string): void;\n /** Full renderer, used for real inline row editing via the bridge. */\n render?(width: number): string[];\n /** Editor interior padding, forwarded to the inline line extractor. */\n paddingX?: number;\n };\n keybindings?: Pick<KeybindingsManager, \"matches\" | \"getKeys\">;\n /** Target run state for the shared widget's stage label; default idle=false. */\n isIdle?: () => boolean;\n onNotify?: (text: string, kind: \"info\" | \"error\") => void;\n requestRender?: () => void;\n}\n\ninterface StageResult {\n ok: boolean;\n id?: string;\n error?: string;\n}\n\nexport interface ConversationQueue {\n readonly targetId: string;\n /** \"extension\" when a real pi-queue-steer bridge was claimed, \"native\" otherwise. */\n readonly mode: \"extension\" | \"native\";\n readonly active: boolean;\n /** True while a row-editing session holds the shared editor. */\n readonly editingActive: boolean;\n /** Stage text as a queue row for this target. Control input is rejected. */\n stage(text: string, lane: ConversationQueueLane): StageResult;\n /**\n * Dispatch the contiguous same-lane unpauseed head batch through `send`.\n * Resolves true only when every row was accepted by the route; a failure\n * restores the unsent rows to the timeline head in order. Acceptance is\n * not consumption: accepted rows become immutable and stay visible until\n * `syncSnapshot` confirms native delivery identity.\n */\n submit(lane: ConversationQueueLane): Promise<boolean>;\n dispatch(text: string, lane: ConversationQueueLane): Promise<void>;\n park(text: string, lane: ConversationQueueLane): StageResult;\n cancelEditing(): void;\n syncPending(pending: { steering: string[]; followUp: string[] } | undefined): void;\n /** Decorated rows in timeline order (dispatched rows first, then queued). */\n rows(): ConversationQueueRow[];\n /** Queue list lines rendered above the editor; empty when nothing is held. */\n render(width: number): readonly string[];\n /**\n * Row-editing input handling. Consumes keys only while an editing session\n * is active or when the dequeue binding starts one; everything else passes\n * back to Main (`false`).\n */\n handleInput(data: string): boolean;\n /**\n * Reconcile against the native reader snapshot (read-only). Main feeds the\n * initial pre-dispatch snapshot as `historical` entries before the first\n * submit, then subsequent live snapshots. Retirement matches, first, a\n * dispatched row's expected native message identity (actor envelope id) or,\n * failing that, one live-append entry beyond the historical baseline with\n * the row's text \u2014 duplicate rows each consume their own frontier entry.\n * Historical entries and older pages never retire anything.\n */\n syncSnapshot(entries: readonly ConversationSnapshotEntry[]): number;\n /**\n * The target is being removed/unreachable: retire every held row. This is\n * the only blanket retirement, and it must NOT be called merely because a\n * run ended or the target stopped \u2014 follow-ups are for the next run, and a\n * route ack cannot prove consumption.\n */\n retireAll(reason?: string): number;\n /** Number of rows still held (queued + dispatched-but-unconfirmed). */\n pendingCount(): number;\n dispose(options?: { retain?: boolean }): void;\n}\n\ninterface RequestResult {\n ok: boolean;\n bridge?: ConversationQueueBridgeV1;\n error?: string;\n}\n\ninterface HandshakeRequest {\n version: 1;\n action: \"acquire\" | \"release\";\n targetId: string;\n claim(): boolean;\n respond(result: RequestResult): void;\n}\n\ninterface DispatchedRow {\n id: string;\n lane: ConversationQueueLane;\n text: string;\n /** Expected stable native identity, when the route reported one. */\n expectedId?: string;\n}\n\nconst DEQUEUE_FALLBACK: KeyId = \"alt+up\";\nconst REMOVE_ROW_KEY = \"alt+x\";\nconst PAUSE_ROW_KEY = \"alt+p\";\nconst INDENT_ROW_KEY: KeyId = \"alt+right\";\nconst OUTDENT_ROW_KEY: KeyId = \"alt+left\";\nconst TOGGLE_LANE_KEY = \"alt+t\";\n\n/** Native OMP pending-messages labels (interactive-mode ground truth). */\nconst NATIVE_LANE_LABEL: Record<ConversationQueueLane, string> = {\n steer: \"Steering\",\n followUp: \"Follow-up\",\n};\n\n/**\n * Native fallback timeline implementing the same structural contract as the\n * extension bridge, so the adapter logic is single-path for both modes.\n */\nclass NativeQueueState implements ConversationQueueBridgeQueue {\n private items: ConversationQueueBridgeRow[] = [];\n private nextIdNumber = 1;\n private nextSequence = 1;\n\n enqueue(lane: ConversationQueueLane, text: string, images: readonly unknown[] = []): ConversationQueueBridgeRow {\n const prefix = lane === \"steer\" ? \"steer\" : \"follow-up\";\n const item: ConversationQueueBridgeRow = {\n id: `${prefix}-${this.nextIdNumber++}`,\n lane,\n text,\n images: [...images],\n sequence: this.nextSequence++,\n paused: false,\n };\n this.items.push(item);\n return { ...item, images: [...item.images] };\n }\n\n snapshot(): ConversationQueueBridgeRow[] {\n return this.items.map((item) => ({ ...item, images: [...item.images] }));\n }\n\n peek(): ConversationQueueBridgeRow | undefined {\n const item = this.items[0];\n return item ? { ...item, images: [...item.images] } : undefined;\n }\n\n get(id: string): ConversationQueueBridgeRow | undefined {\n const item = this.items.find((candidate) => candidate.id === id);\n return item ? { ...item, images: [...item.images] } : undefined;\n }\n\n remove(id: string): ConversationQueueBridgeRow | undefined {\n const index = this.items.findIndex((candidate) => candidate.id === id);\n if (index === -1) return undefined;\n const [item] = this.items.splice(index, 1);\n return item ? { ...item, images: [...item.images] } : undefined;\n }\n\n prepend(item: ConversationQueueBridgeRow): void {\n this.items.unshift({ ...item, images: [...item.images] });\n }\n\n prependMany(items: readonly ConversationQueueBridgeRow[]): void {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index];\n if (item) this.items.unshift({ ...item, images: [...item.images] });\n }\n }\n\n update(id: string, text: string): boolean {\n const item = this.items.find((candidate) => candidate.id === id);\n if (!item) return false;\n item.text = text;\n return true;\n }\n\n setLane(id: string, lane: ConversationQueueLane): boolean {\n const item = this.items.find((candidate) => candidate.id === id);\n if (!item || item.lane === lane) return false;\n item.lane = lane;\n return true;\n }\n\n setPaused(id: string, paused: boolean): boolean {\n const item = this.items.find((candidate) => candidate.id === id);\n if (!item || (item.paused ?? false) === paused) return false;\n item.paused = paused;\n return true;\n }\n\n clear(): void {\n this.items = [];\n }\n\n get length(): number {\n return this.items.length;\n }\n}\n\n/** Rollback-safe snapshot editing for the native fallback queue. */\nclass NativeEditSession implements ConversationQueueBridgeEditSession {\n readonly composerDraft: string;\n private currentId: string;\n private readonly drafts = new Map<string, { text: string; lane: ConversationQueueLane; removed: boolean; paused: boolean }>();\n\n constructor(item: ConversationQueueBridgeRow, composerDraft: string) {\n this.currentId = item.id;\n this.composerDraft = composerDraft;\n this.drafts.set(item.id, {\n text: item.text,\n lane: item.lane,\n removed: false,\n paused: item.paused ?? false,\n });\n }\n\n get selectedId(): string {\n return this.currentId;\n }\n\n capture(text: string): void {\n const draft = this.drafts.get(this.currentId);\n if (draft) draft.text = text;\n }\n\n select(item: ConversationQueueBridgeRow, currentText: string): string {\n this.capture(currentText);\n if (!this.drafts.has(item.id)) {\n this.drafts.set(item.id, {\n text: item.text,\n lane: item.lane,\n removed: false,\n paused: item.paused ?? false,\n });\n }\n this.currentId = item.id;\n return this.drafts.get(item.id)?.text ?? item.text;\n }\n\n toggleRemoved(id: string): boolean | undefined {\n const draft = this.drafts.get(id);\n if (!draft) return undefined;\n draft.removed = !draft.removed;\n return draft.removed;\n }\n\n togglePaused(id: string): boolean | undefined {\n const draft = this.drafts.get(id);\n if (!draft) return undefined;\n draft.paused = !draft.paused;\n return draft.paused;\n }\n\n setLane(id: string, lane: ConversationQueueLane): ConversationQueueLane | undefined {\n const draft = this.drafts.get(id);\n if (!draft) return undefined;\n draft.lane = lane;\n return draft.lane;\n }\n\n commit(queue: ConversationQueueBridgeQueue, currentText: string): {\n updated: number;\n removed: number;\n moved: number;\n held: number;\n released: number;\n } {\n this.capture(currentText);\n let updated = 0;\n let removed = 0;\n let moved = 0;\n let held = 0;\n let released = 0;\n for (const [id, draft] of this.drafts.entries()) {\n if (draft.removed || !draft.text.trim()) {\n if (queue.remove(id)) removed += 1;\n continue;\n }\n if (queue.update(id, draft.text)) updated += 1;\n if (queue.setLane(id, draft.lane)) moved += 1;\n if (queue.setPaused(id, draft.paused)) {\n if (draft.paused) held += 1;\n else released += 1;\n }\n }\n return { updated, removed, moved, held, released };\n }\n\n rollbackPositions(): void {}\n\n laneFor(id: string): ConversationQueueLane | undefined {\n return this.drafts.get(id)?.lane;\n }\n\n textFor(id: string): string | undefined {\n return this.drafts.get(id)?.text;\n }\n\n pausedFor(id: string): boolean | undefined {\n return this.drafts.get(id)?.paused;\n }\n\n isRemoved(id: string): boolean {\n return this.drafts.get(id)?.removed ?? false;\n }\n}\n\nconst errorText = (error: unknown): string =>\n error instanceof Error ? error.message : String(error ?? \"\");\n\nconst controlInputRe = /^[/!]/;\n\n/**\n * Create one target-scoped conversation queue. Attempts the pi-queue-steer\n * interop handshake first (mode \"extension\"); with no claiming listener the\n * adapter serves OMP's native queue labels and colors (mode \"native\").\n */\nexport function createConversationQueue(options: ConversationQueueOptions): ConversationQueue {\n const { ompEvents, targetId, theme } = options;\n const notify = (text: string, kind: \"info\" | \"error\" = \"info\") => {\n options.onNotify?.(text, kind);\n };\n const requestRender = () => options.requestRender?.();\n const targetLabel = options.targetName ?? targetId;\n\n let bridge: ConversationQueueBridgeV1 | undefined;\n let queue: ConversationQueueBridgeQueue;\n let mode: \"extension\" | \"native\" = \"native\";\n let disposed = false;\n /** Route-accepted rows awaiting native delivery identity confirmation. */\n const dispatched: DispatchedRow[] = [];\n let externalPending: DispatchedRow[] = [];\n let lastSendError: unknown;\n let editSession: ConversationQueueBridgeEditSession | undefined;\n\n // Snapshot reconciliation state: every fed identity is seen exactly once;\n // historical entries (initial baseline, older pages) can never retire;\n // live-append frontier counts per trimmed text drive text-based retirement\n // with duplicate counting; consumed ids make each entry retire at most one row.\n const seenIds = new Set<string>();\n const consumedIds = new Set<string>();\n const liveTextCounts = new Map<string, number>();\n\n const emitHandshake = (action: \"acquire\" | \"release\"): { claimed: boolean; result?: RequestResult | undefined } => {\n let claimed = false;\n let settled = false;\n let result: RequestResult | undefined;\n const request: HandshakeRequest = {\n version: 1,\n action,\n targetId,\n claim: () => {\n if (claimed) return false;\n claimed = true;\n return true;\n },\n respond: (response) => {\n // The bridge contract is a synchronous respond during emit; late\n // responses are ignored so the adapter mode never flips mid-render.\n if (settled) return;\n settled = true;\n result = response;\n },\n };\n ompEvents.emit(QUEUE_STEER_CONVERSATION_QUEUE_REQUEST_EVENT, request);\n return { claimed, result };\n };\n\n const acquisition = emitHandshake(\"acquire\");\n if (\n acquisition.claimed\n && acquisition.result?.ok\n && acquisition.result.bridge?.version === 1\n && acquisition.result.bridge.targetId === targetId\n ) {\n bridge = acquisition.result.bridge;\n mode = \"extension\";\n } else if (acquisition.claimed && acquisition.result && !acquisition.result.ok) {\n notify(`pi-queue-steer refused the conversation queue for ${targetLabel}: ${acquisition.result.error ?? \"unknown error\"}`, \"error\");\n }\n queue = bridge ? bridge.createQueue() : new NativeQueueState();\n\n const laneLabel = (lane: ConversationQueueLane): string =>\n bridge ? bridge.laneLabel(lane) : lane === \"steer\" ? \"steer\" : \"follow-up\";\n\n const isQueueable = (text: string): boolean =>\n bridge ? bridge.isQueueableSubmission(text) : !controlInputRe.test(text.trim()) && text.trim() !== \"\";\n\n const decoratedRow = (item: ConversationQueueBridgeRow): ConversationQueueRow => ({\n id: item.id,\n lane: editSession?.laneFor?.(item.id) ?? item.lane,\n text: editSession?.textFor?.(item.id) ?? item.text,\n state: \"queued\",\n paused: editSession?.pausedFor?.(item.id) ?? (item.paused ?? false),\n selected: editSession?.selectedId === item.id,\n removed: editSession?.isRemoved?.(item.id) ?? false,\n });\n\n const orderedRows = (): ConversationQueueRow[] => {\n const held = queue.snapshot().map(decoratedRow);\n // Accepted rows are immutable: outside the editing queue, never selectable.\n const inFlight: ConversationQueueRow[] = [...dispatched, ...externalPending].map((row) => ({\n id: row.id,\n lane: row.lane,\n text: row.text,\n state: \"dispatched\" as const,\n paused: false,\n selected: false,\n removed: false,\n }));\n return [...inFlight, ...held];\n };\n\n /**\n * Contiguous same-lane head batch; a paused head row is a dispatch barrier\n * and rows behind it never jump ahead.\n */\n const headBatch = (lane: ConversationQueueLane): ConversationQueueBridgeRow[] => {\n const items = queue.snapshot();\n const head = items[0];\n if (!head || head.lane !== lane) return [];\n const batch: ConversationQueueBridgeRow[] = [];\n for (const item of items) {\n if (item.lane !== lane) break;\n if (item.paused) break;\n batch.push(item);\n }\n return batch;\n };\n\n const dequeueKeys = (): readonly string[] => {\n const manager = options.keybindings ?? getKeybindings();\n const keys = manager.getKeys(\"app.message.dequeue\");\n return keys.filter((key: string) => /up$/i.test(key)).map((key: string) =>\n key.endsWith(\"Up\") ? `${key.slice(0, -2)}Down` : `${key.slice(0, -2)}down`\n );\n };\n\n const actionMatches = (\n data: string,\n action: \"app.message.dequeue\" | \"app.interrupt\" | \"tui.input.submit\" | \"app.message.followUp\",\n fallback: (data: string) => boolean,\n ): boolean => {\n const manager = options.keybindings;\n if (manager) {\n const keys = manager.getKeys(action);\n if (keys.length === 0) return false;\n return manager.matches(data, action);\n }\n const global = getKeybindings();\n if (global.getKeys(action).length > 0) return global.matches(data, action);\n return fallback(data);\n };\n\n const startEditing = (): boolean => {\n if (!options.editor) {\n notify(\"Editing queued rows requires the shared editor\", \"error\");\n return false;\n }\n const items = queue.snapshot();\n if (items.length === 0) {\n notify(\"No queued messages to edit\", \"info\");\n return false;\n }\n // Enter at the most recently queued row, like the extension's dequeue.\n const mostRecent = items.reduce((newest, item) => (item.sequence > newest.sequence ? item : newest), items[0]!);\n editSession = bridge\n ? bridge.createEditSession(mostRecent, options.editor.getText())\n : new NativeEditSession(mostRecent, options.editor.getText());\n options.editor.setText(mostRecent.text);\n notify(`Editing queued ${laneLabel(mostRecent.lane)} row \u00B7 enter saves, escape rolls back`, \"info\");\n requestRender();\n return true;\n };\n\n const finishEditing = (save: boolean): boolean => {\n const session = editSession;\n const editor = options.editor;\n if (!session || !editor) return false;\n const currentText = editor.getText();\n editSession = undefined;\n if (save) {\n const result = session.commit(queue, currentText);\n if (result.removed > 0) notify(`Removed ${result.removed} queued row${result.removed === 1 ? \"\" : \"s\"}`, \"info\");\n if (result.moved > 0) notify(`Changed delivery depth for ${result.moved} row${result.moved === 1 ? \"\" : \"s\"}`, \"info\");\n if (result.held > 0) notify(`Paused ${result.held} row${result.held === 1 ? \"\" : \"s\"} \u2014 dispatch stops there until resumed`, \"info\");\n if (result.released > 0) notify(`Resumed ${result.released} row${result.released === 1 ? \"\" : \"s\"}`, \"info\");\n } else {\n // Escape rolls the whole editing session back, including lane and\n // pause drafts; row edits live only in the discarded drafts.\n notify(\"Row edits rolled back\", \"info\");\n }\n editor.setText(session.composerDraft);\n requestRender();\n return true;\n };\n\n const matchesOptionArrow = (data: string, direction: \"left\" | \"right\"): boolean => {\n const arrow = direction === \"left\" ? OUTDENT_ROW_KEY : INDENT_ROW_KEY;\n const wordAlias: KeyId = direction === \"left\" ? \"alt+b\" : \"alt+f\";\n // Preserve the word-navigation aliases some terminals send for Option+Arrow.\n return matchesKey(data, arrow) && !matchesKey(data, wordAlias);\n };\n\n const inlineEditorRenderer = (): ((width: number) => string[]) | undefined => {\n const editor = options.editor;\n if (!editor?.render) return undefined;\n return (width: number) => {\n const lines = editor.render!(width);\n if (bridge?.extractInlineEditorLines) {\n return bridge.extractInlineEditorLines(lines, editor.paddingX ?? 0);\n }\n return [...lines];\n };\n };\n\n return {\n targetId,\n get mode() {\n return mode;\n },\n get active() {\n return !disposed && (queue.length > 0 || dispatched.length > 0);\n },\n get editingActive() {\n return editSession !== undefined;\n },\n\n stage(text, lane) {\n if (disposed) return { ok: false, error: \"Queue is disposed\" };\n const trimmed = text.trim();\n if (!trimmed) return { ok: false, error: \"Nothing to queue\" };\n if (!isQueueable(trimmed) || controlInputRe.test(trimmed)) {\n return {\n ok: false,\n error: \"Control input (/ commands, ! bash) is Main-only and is not queued from a focused conversation\",\n };\n }\n const row = queue.enqueue(lane, text);\n notify(`Queued ${laneLabel(lane)} \u2192 ${targetLabel}`, \"info\");\n requestRender();\n return { ok: true, id: row.id };\n },\n\n async submit(lane) {\n if (disposed) return false;\n if (editSession) {\n notify(\"Finish or cancel row editing before dispatching the queue\", \"info\");\n return false;\n }\n const batch = headBatch(lane);\n if (batch.length === 0) {\n const head = queue.peek();\n if (head?.paused) notify(`The next ${laneLabel(lane)} row is paused \u2014 dispatch holds there`, \"info\");\n else notify(`No dispatchable queued ${laneLabel(lane)} rows at the timeline head`, \"info\");\n return false;\n }\n let sent = 0;\n lastSendError = undefined;\n for (const item of batch) {\n if (disposed) return false;\n queue.remove(item.id);\n const pending: DispatchedRow = { id: item.id, lane, text: item.text };\n dispatched.push(pending);\n requestRender();\n let expectedId: string | undefined;\n try {\n const result = await options.send(item.text, lane);\n // Actor routes can report the original envelope/message id; a\n // one-shot native route may resolve void \u2014 identity then falls\n // back to the live-append text frontier.\n const candidate = result as { messageId?: unknown; id?: unknown } | undefined;\n const reported = candidate?.messageId ?? candidate?.id;\n if (typeof reported === \"string\" && reported !== \"\") expectedId = reported;\n } catch (error) {\n lastSendError = error;\n const pendingIndex = dispatched.indexOf(pending);\n if (pendingIndex < 0 || disposed) return !disposed;\n dispatched.splice(pendingIndex, 1);\n // Exact failed-send restoration: only the failed row is prepended\n // \u2014 rows behind it were never removed from the queue, so they are\n // still in their original positions after it.\n queue.prepend({ ...item });\n notify(`Send failed for ${targetLabel} (${laneLabel(lane)}); row restored to the queue head: ${errorText(error)}`, \"error\");\n requestRender();\n return false;\n }\n if (expectedId) pending.expectedId = expectedId;\n sent += 1;\n }\n notify(`Accepted ${sent} queued ${laneLabel(lane)} row${sent === 1 ? \"\" : \"s\"} \u2192 ${targetLabel} \u00B7 awaiting delivery`, \"info\");\n requestRender();\n return true;\n },\n\n async dispatch(text, lane) {\n const row = this.stage(text, lane);\n if (!row.ok || !row.id) throw new Error(row.error ?? \"Unable to queue input\");\n if (!await this.submit(lane)) {\n queue.remove(row.id);\n throw lastSendError ?? new Error(\"The queue head is paused or held; edit or resume it before sending\");\n }\n },\n\n park(text, lane) {\n const result = this.stage(text, lane);\n if (result.id) queue.setPaused(result.id, true);\n return result;\n },\n\n cancelEditing() { if (editSession) finishEditing(false); },\n\n syncPending(pending) {\n externalPending = [];\n if (!pending) return;\n const own = [...queue.snapshot(), ...dispatched];\n for (const [lane, messages] of [[\"steer\", pending.steering], [\"followUp\", pending.followUp]] as const) {\n const remaining = own.filter((row) => row.lane === lane).map((row) => row.text);\n messages.forEach((text, index) => {\n const match = remaining.indexOf(text);\n if (match >= 0) remaining.splice(match, 1);\n else externalPending.push({ id: `native:${lane}:${index}`, lane, text });\n });\n }\n },\n\n rows: orderedRows,\n\n render(width) {\n if (disposed || width <= 0) return [];\n const rows = orderedRows();\n if (rows.length === 0) return [];\n // Extension mode with a bridge that serves the real renderer: render\n // the actual shared execution-outline widget. The caption keeps the\n // execution model honest \u2014 Fabric dispatches on submit; retirement is\n // delivery-confirmed, not implied by the outline.\n if (bridge?.createTimelineWidget && bridge.buildTimelineItems) {\n const visibleRows: ConversationQueueBridgeRow[] = [\n ...[...dispatched, ...externalPending].map((row, index) => ({ id: row.id, lane: row.lane, text: row.text, images: [], sequence: index - dispatched.length })),\n ...queue.snapshot(),\n ];\n const displayQueue = new Proxy(queue, { get(target, key) {\n if (key === \"snapshot\") return () => visibleRows;\n const value: unknown = Reflect.get(target, key, target);\n return typeof value === \"function\" ? value.bind(target) : value;\n } });\n const items = bridge.buildTimelineItems(displayQueue, editSession);\n const inline = editSession ? inlineEditorRenderer() : undefined;\n const editingId = editSession?.selectedId;\n const widget = bridge.createTimelineWidget(\n {\n items,\n ...(editingId !== undefined ? { editingId } : {}),\n paused: false,\n idle: options.isIdle?.() ?? false,\n ...(inline ? { renderInlineEditor: inline } : {}),\n },\n theme,\n );\n const lines = [...widget.render(width)];\n if (dispatched.length > 0) lines.push(theme.fg(\"dim\", truncateToWidth(\"Sent rows await child delivery; they cannot be edited locally.\", width, \"\")));\n return lines;\n }\n // Native OMP pending-messages display (ground-truth labels/colors) or\n // an older bridge without the renderer members.\n const lines: string[] = [\"\"];\n const innerWidth = Math.max(0, width - 2);\n const dequeueHint = (options.keybindings ?? getKeybindings()).getKeys(\"app.message.dequeue\").join(\"/\") || DEQUEUE_FALLBACK;\n for (const row of rows) {\n const label = bridge ? bridge.laneLabel(row.lane) : NATIVE_LANE_LABEL[row.lane];\n const marker = row.selected ? \"\u203A \" : row.paused ? \"\u23F8 \" : \"\";\n const note = row.removed\n ? \" \u00B7 removed on save\"\n : row.paused\n ? \" \u00B7 paused\"\n : \"\";\n const color: ThemeColor = row.state === \"dispatched\"\n ? \"dim\"\n : bridge ? bridge.laneColor(row.lane) as ThemeColor : \"dim\";\n lines.push(\n ` ${theme.fg(color, truncateToWidth(`${marker}${label}: ${row.text.replace(/\\n/g, \" \")}${note}`, innerWidth, Ellipsis.Unicode))} `,\n );\n }\n const hint = queue.length > 0 ? `\u21B3 ${dequeueHint} to edit queued messages` : \"\u21B3 Waiting for child delivery\";\n lines.push(` ${theme.fg(\"dim\", truncateToWidth(hint, innerWidth, Ellipsis.Unicode))} `);\n return lines;\n },\n\n handleInput(data) {\n if (disposed) return false;\n if (!editSession) {\n if (queue.length === 0) return false;\n if (!options.editor?.getText().trim() && matchesKey(data, Key.enter)) {\n const head = queue.peek();\n if (head) { queue.setPaused(head.id, false); void this.submit(head.lane); }\n return true;\n }\n if (actionMatches(data, \"app.message.dequeue\", (input) => matchesKey(input, DEQUEUE_FALLBACK))) {\n return startEditing();\n }\n return false;\n }\n const session = editSession;\n const editor = options.editor;\n // Navigation mirrors the extension: configured dequeue action moves to\n // the previous row, its mirrored twin moves to the next.\n if (actionMatches(data, \"app.message.dequeue\", (input) => matchesKey(input, DEQUEUE_FALLBACK)) && editor) {\n const ordered = queue.snapshot();\n const index = ordered.findIndex((item) => item.id === session.selectedId);\n const target = index <= 0 ? ordered.at(-1) : ordered[index - 1];\n if (target) editor.setText(session.select(target, editor.getText()));\n requestRender();\n return true;\n }\n const nextKeys = dequeueKeys();\n if (nextKeys.length > 0 && nextKeys.some((key) => matchesKey(data, key as KeyId)) && editor) {\n const ordered = queue.snapshot();\n const index = ordered.findIndex((item) => item.id === session.selectedId);\n const target = index === -1 || index === ordered.length - 1 ? ordered[0] : ordered[index + 1];\n if (target) editor.setText(session.select(target, editor.getText()));\n requestRender();\n return true;\n }\n if (matchesKey(data, REMOVE_ROW_KEY)) {\n session.toggleRemoved(session.selectedId);\n requestRender();\n return true;\n }\n if (matchesKey(data, PAUSE_ROW_KEY)) {\n session.togglePaused(session.selectedId);\n requestRender();\n return true;\n }\n if (matchesOptionArrow(data, \"left\")) {\n session.setLane(session.selectedId, \"followUp\");\n requestRender();\n return true;\n }\n if (matchesOptionArrow(data, \"right\")) {\n session.setLane(session.selectedId, \"steer\");\n requestRender();\n return true;\n }\n if (matchesKey(data, TOGGLE_LANE_KEY)) {\n const current = queue.get(session.selectedId)?.lane;\n if (current) session.setLane(session.selectedId, current === \"steer\" ? \"followUp\" : \"steer\");\n requestRender();\n return true;\n }\n if (\n actionMatches(data, \"tui.input.submit\", (input) => matchesKey(input, Key.enter))\n || actionMatches(data, \"app.message.followUp\", () => false)\n ) {\n return finishEditing(true);\n }\n if (actionMatches(data, \"app.interrupt\", (input) => matchesKey(input, Key.escape))) {\n return finishEditing(false);\n }\n editor?.handleInput?.(data);\n return true;\n },\n\n syncSnapshot(entries) {\n if (disposed || dispatched.length === 0) {\n // Still record identities so a pre-dispatch baseline exists even\n // before anything is queued.\n for (const entry of entries) {\n if (!seenIds.has(entry.id)) seenIds.add(entry.id);\n }\n return 0;\n }\n // Fold the snapshot in first: historical entries (initial baseline,\n // older transcript pages) register identity without creating frontier;\n // live unseen entries extend the per-text live-append frontier.\n for (const entry of entries) {\n if (seenIds.has(entry.id)) continue;\n seenIds.add(entry.id);\n if (entry.historical) continue;\n const key = entry.text.trim();\n liveTextCounts.set(key, (liveTextCounts.get(key) ?? 0) + 1);\n }\n let retired = 0;\n const consume = (entry: ConversationSnapshotEntry) => {\n consumedIds.add(entry.id);\n if (!entry.historical) {\n const key = entry.text.trim();\n const remaining = (liveTextCounts.get(key) ?? 0) - 1;\n if (remaining > 0) liveTextCounts.set(key, remaining);\n else liveTextCounts.delete(key);\n }\n };\n const frontierEntry = (row: DispatchedRow): ConversationSnapshotEntry | undefined => {\n // 1. Expected stable native identity (actor envelope/message id):\n // any entry carrying it confirms delivery outright.\n if (row.expectedId) {\n const match = entries.find((entry) => entry.id === row.expectedId && !consumedIds.has(entry.id));\n if (match) return match;\n }\n // 2. Live-append frontier beyond the historical baseline: only\n // entries that arrived live after dispatch, counted per text so\n // duplicate rows retire one-for-one. History and older pages\n // never qualify.\n for (const entry of entries) {\n if (entry.historical || consumedIds.has(entry.id)) continue;\n if (entry.text.trim() === row.text.trim() && (liveTextCounts.get(entry.text.trim()) ?? 0) > 0) {\n return { id: entry.id, text: entry.text.trim() };\n }\n }\n return undefined;\n };\n for (let index = dispatched.length - 1; index >= 0; index -= 1) {\n const row = dispatched[index];\n if (!row) continue;\n const confirmed = frontierEntry(row);\n if (!confirmed) continue;\n consume(confirmed);\n dispatched.splice(index, 1);\n retired += 1;\n }\n if (retired > 0) {\n notify(`${retired} queued row${retired === 1 ? \"\" : \"s\"} confirmed delivered \u2192 ${targetLabel}`, \"info\");\n requestRender();\n }\n return retired;\n },\n\n retireAll(reason) {\n if (disposed) return 0;\n const count = queue.length + dispatched.length;\n queue.clear();\n dispatched.length = 0;\n editSession = undefined;\n if (count > 0) {\n const suffix = reason ? ` (${reason})` : \"\";\n notify(`Retired ${count} queued row${count === 1 ? \"\" : \"s\"} for ${targetLabel}${suffix}`, \"info\");\n requestRender();\n }\n return count;\n },\n\n pendingCount() {\n if (disposed) return 0;\n return queue.length + dispatched.length;\n },\n\n dispose({ retain = false } = {}) {\n if (disposed) return;\n disposed = true;\n editSession = undefined;\n if (retain) {\n // Rows stay parked: in extension mode the bridge retains them per\n // targetId for re-adoption when the target is focused again.\n return;\n }\n queue.clear();\n dispatched.length = 0;\n if (bridge) emitHandshake(\"release\");\n },\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["getKeybindings", "Key", "matchesKey", "truncateToWidth", "lines", "errorText", "truncateToWidth", "keys", "getKeybindings", "matchesKey", "Key", "data"]
7
+ }
@@ -0,0 +1,20 @@
1
+ import type { Theme } from "@oh-my-pi/pi-coding-agent";
2
+ import type { CodePreviewSettings } from "./code-preview.js";
3
+ import type { FabricRenderAudit } from "./fabric-render.js";
4
+ export interface CoreToolRenderOptions {
5
+ cwd: string;
6
+ settings: CodePreviewSettings;
7
+ expanded: boolean;
8
+ maxLines: number;
9
+ invalidate?: () => void;
10
+ }
11
+ export interface RenderedCoreToolBody {
12
+ lines: string[];
13
+ hidden: number;
14
+ }
15
+ export declare const isCoreToolAudit: (audit: FabricRenderAudit) => boolean;
16
+ export declare const coreToolRendererEnabled: (audit: FabricRenderAudit, settings: CodePreviewSettings) => boolean;
17
+ export declare const coreToolPreviewEnabled: (audit: FabricRenderAudit, settings: CodePreviewSettings) => boolean;
18
+ export declare const renderCoreToolBody: (audit: FabricRenderAudit, theme: Theme, options: CoreToolRenderOptions) => RenderedCoreToolBody | null;
19
+ export declare const coreToolTitle: (audit: FabricRenderAudit, theme: Theme, options: Pick<CoreToolRenderOptions, "cwd" | "settings" | "invalidate">) => string | null;
20
+ //# sourceMappingURL=core-tool-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-tool-render.d.ts","sourceRoot":"","sources":["../../src/ui/core-tool-render.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAI7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAwB5D,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD,eAAO,MAAM,eAAe,GAAI,OAAO,iBAAiB,KAAG,OAGM,CAAC;AAm4ClE,eAAO,MAAM,uBAAuB,GAClC,OAAO,iBAAiB,EACxB,UAAU,mBAAmB,KAC5B,OAG0E,CAAC;AAE9E,eAAO,MAAM,sBAAsB,GACjC,OAAO,iBAAiB,EACxB,UAAU,mBAAmB,KAC5B,OA4BF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,EACxB,OAAO,KAAK,EACZ,SAAS,qBAAqB,KAC7B,oBAAoB,GAAG,IAoBzB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,OAAO,iBAAiB,EACxB,OAAO,KAAK,EACZ,SAAS,IAAI,CAAC,qBAAqB,EAAE,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC,KACtE,MAAM,GAAG,IAmEX,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { Theme } from "@oh-my-pi/pi-coding-agent";
2
+ import type { TUI } from "@oh-my-pi/pi-tui";
3
+ import type { CodePreviewSettings } from "./code-preview.js";
4
+ import type { Entity } from "./dashboard-model.js";
5
+ import type { FabricAgentTranscript } from "./transcript.js";
6
+ import type { FabricDashboardSnapshot, FabricUiActor, FabricUiAgent } from "./types.js";
7
+ export type FabricTranscriptTarget = FabricUiAgent | FabricUiActor;
8
+ export interface DashboardDetailRenderState {
9
+ view: "summary" | "transcript";
10
+ scroll: number;
11
+ pageAnchor: "start" | "end" | undefined;
12
+ transcriptFollowing: boolean;
13
+ transcriptToolsExpanded: boolean;
14
+ }
15
+ export interface DashboardDetailRenderResult {
16
+ lines: string[];
17
+ scroll: number;
18
+ maxScroll: number;
19
+ pageAnchor: "start" | "end" | undefined;
20
+ }
21
+ interface DashboardDetailRendererOptions {
22
+ agentTranscript: ((agent: FabricUiAgent, followLatest: boolean) => FabricAgentTranscript) | undefined;
23
+ actorTranscript: ((actor: FabricUiActor, followLatest: boolean) => FabricAgentTranscript) | undefined;
24
+ codePreviewSettings: CodePreviewSettings | undefined;
25
+ actorDefaultTools: string[];
26
+ }
27
+ export declare class DashboardDetailRenderer {
28
+ readonly tui: TUI;
29
+ readonly theme: Theme;
30
+ readonly snapshot: () => FabricDashboardSnapshot;
31
+ private detailView;
32
+ private detailScroll;
33
+ private detailMaxScroll;
34
+ private transcriptPageAnchor;
35
+ private transcriptFollowing;
36
+ private transcriptToolsExpanded;
37
+ private actionHint;
38
+ private toolToggleHint;
39
+ private readonly transcriptMarkdown;
40
+ private readonly highlightInvalidate;
41
+ private readonly agentTranscript;
42
+ private readonly actorTranscript;
43
+ private readonly codePreviewSettings;
44
+ private readonly actorDefaultTools;
45
+ constructor(tui: TUI, theme: Theme, snapshot: () => FabricDashboardSnapshot, options: DashboardDetailRendererOptions);
46
+ render(width: number, snapshot: FabricDashboardSnapshot, entity: Entity, state: DashboardDetailRenderState, actionHint: string, toolToggleHint: string): DashboardDetailRenderResult;
47
+ invalidate(): void;
48
+ private detailActionHint;
49
+ private transcriptToolToggleHint;
50
+ private transcriptTarget;
51
+ private hasTranscript;
52
+ private transcriptFor;
53
+ private renderDetail;
54
+ private transcriptLines;
55
+ private transcriptToolLines;
56
+ private transcriptToolAudit;
57
+ private transcriptStructuredLines;
58
+ private markdownTranscriptLines;
59
+ private markdownLines;
60
+ private detailLines;
61
+ private renderNarrowDetail;
62
+ private topBorder;
63
+ private middleBorder;
64
+ private bottomBorder;
65
+ private row;
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=dashboard-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-detail.d.ts","sourceRoot":"","sources":["../../src/ui/dashboard-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { Theme } from "@oh-my-pi/pi-coding-agent";
2
+ import type { FabricActivityRun } from "../activity/types.js";
3
+ import type { Entity, StatusFilter } from "./dashboard-model.js";
4
+ import type { FabricProjectMeshModel } from "./topology.js";
5
+ import type { FabricDashboardSnapshot } from "./types.js";
6
+ export interface FabricGraphPoint {
7
+ x: number;
8
+ y: number;
9
+ }
10
+ export interface FabricGraphAnimation {
11
+ now: number;
12
+ reducedMotion: boolean;
13
+ showHistory: boolean;
14
+ replayRouteId?: string;
15
+ replayLabel?: string;
16
+ }
17
+ export interface FabricTopologyGroupSegment {
18
+ id: string;
19
+ label: string;
20
+ }
21
+ export declare const topologyParticipantGroup: (kind: "root" | "peer" | "agent" | "actor") => FabricTopologyGroupSegment & {
22
+ order: number;
23
+ };
24
+ export declare const topologyTopicGroupPath: (name: string) => FabricTopologyGroupSegment[];
25
+ export declare const topologyStateGroupPath: (key: string) => FabricTopologyGroupSegment[];
26
+ export declare const topologyTreeRouteNodeIds: (nodes: ReadonlyMap<string, {
27
+ parentId?: string;
28
+ }>, fromId: string, toId: string) => string[];
29
+ export interface FabricTopologyRenderResult {
30
+ lines: string[];
31
+ positions: Map<string, FabricGraphPoint>;
32
+ selectedPosition?: FabricGraphPoint;
33
+ }
34
+ export declare const renderFabricTopologyPanel: ({ theme, filter, selectedEntityId, snapshot, run, mesh, allEntities, entities, width, height, camera, animation, invalidate, }: {
35
+ theme: Theme;
36
+ filter: StatusFilter;
37
+ selectedEntityId: string | undefined;
38
+ snapshot: FabricDashboardSnapshot;
39
+ run: FabricActivityRun | undefined;
40
+ mesh: FabricProjectMeshModel;
41
+ allEntities: Entity[];
42
+ entities: Entity[];
43
+ width: number;
44
+ height: number;
45
+ camera: FabricGraphPoint;
46
+ animation: FabricGraphAnimation;
47
+ invalidate?: () => void;
48
+ }) => FabricTopologyRenderResult;
49
+ export declare const directionalGraphTarget: (positions: ReadonlyMap<string, FabricGraphPoint>, currentId: string | undefined, direction: "left" | "right" | "up" | "down") => string | undefined;
50
+ //# sourceMappingURL=dashboard-fabric-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-fabric-graph.d.ts","sourceRoot":"","sources":["../../src/ui/dashboard-fabric-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,eAAe,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAI1D,MAAM,WAAW,gBAAgB;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AA+CD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAwGD,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,KACxC,0BAA0B,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAI9C,CAAC;AAQF,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,0BAA0B,EAgB/E,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,0BAA0B,EAyC9E,CAAC;AAiPF,eAAO,MAAM,wBAAwB,GACnC,OAAO,WAAW,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACjD,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,MAAM,EAsBR,CAAC;AAsXF,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,eAAO,MAAM,yBAAyB,GAAI,gIAcvC;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,GAAG,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACnC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,oBAAoB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,KAAG,0BAmEH,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,WAAW,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAChD,WAAW,MAAM,GAAG,SAAS,EAC7B,WAAW,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,KAC1C,MAAM,GAAG,SAeX,CAAC"}