botmux 2.98.4-canary.2 → 2.99.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 (205) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/adapters/cli/genius.d.ts +4 -0
  4. package/dist/adapters/cli/genius.d.ts.map +1 -0
  5. package/dist/adapters/cli/genius.js +216 -0
  6. package/dist/adapters/cli/genius.js.map +1 -0
  7. package/dist/adapters/cli/registry.d.ts +2 -1
  8. package/dist/adapters/cli/registry.d.ts.map +1 -1
  9. package/dist/adapters/cli/registry.js +3 -1
  10. package/dist/adapters/cli/registry.js.map +1 -1
  11. package/dist/adapters/cli/types.d.ts +1 -1
  12. package/dist/adapters/cli/types.d.ts.map +1 -1
  13. package/dist/core/dashboard-rows.d.ts +1 -1
  14. package/dist/core/dashboard-rows.d.ts.map +1 -1
  15. package/dist/core/dashboard-rows.js +2 -1
  16. package/dist/core/dashboard-rows.js.map +1 -1
  17. package/dist/dashboard/session-card-model.d.ts +2 -2
  18. package/dist/dashboard/session-card-model.d.ts.map +1 -1
  19. package/dist/dashboard/session-card-model.js +5 -2
  20. package/dist/dashboard/session-card-model.js.map +1 -1
  21. package/dist/dashboard/web/app.d.ts.map +1 -1
  22. package/dist/dashboard/web/app.js +28 -63
  23. package/dist/dashboard/web/app.js.map +1 -1
  24. package/dist/dashboard/web/bot-defaults-page.d.ts +3 -0
  25. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -0
  26. package/dist/dashboard/web/bot-defaults-page.js +23 -0
  27. package/dist/dashboard/web/bot-defaults-page.js.map +1 -0
  28. package/dist/dashboard/web/bot-defaults.d.ts +2 -1
  29. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  30. package/dist/dashboard/web/bot-defaults.js +30 -30
  31. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  32. package/dist/dashboard/web/connectors-page.d.ts +14 -0
  33. package/dist/dashboard/web/connectors-page.d.ts.map +1 -0
  34. package/dist/dashboard/web/connectors-page.js +303 -0
  35. package/dist/dashboard/web/connectors-page.js.map +1 -0
  36. package/dist/dashboard/web/connectors.d.ts +1 -12
  37. package/dist/dashboard/web/connectors.d.ts.map +1 -1
  38. package/dist/dashboard/web/connectors.js +1 -325
  39. package/dist/dashboard/web/connectors.js.map +1 -1
  40. package/dist/dashboard/web/dashboard-routes.d.ts +14 -0
  41. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -0
  42. package/dist/dashboard/web/dashboard-routes.js +176 -0
  43. package/dist/dashboard/web/dashboard-routes.js.map +1 -0
  44. package/dist/dashboard/web/groups-page.d.ts +3 -0
  45. package/dist/dashboard/web/groups-page.d.ts.map +1 -0
  46. package/dist/dashboard/web/groups-page.js +26 -0
  47. package/dist/dashboard/web/groups-page.js.map +1 -0
  48. package/dist/dashboard/web/groups.d.ts +1 -1
  49. package/dist/dashboard/web/groups.d.ts.map +1 -1
  50. package/dist/dashboard/web/groups.js +113 -52
  51. package/dist/dashboard/web/groups.js.map +1 -1
  52. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  53. package/dist/dashboard/web/i18n.js +18 -0
  54. package/dist/dashboard/web/i18n.js.map +1 -1
  55. package/dist/dashboard/web/insights-page.d.ts +3 -0
  56. package/dist/dashboard/web/insights-page.d.ts.map +1 -0
  57. package/dist/dashboard/web/insights-page.js +26 -0
  58. package/dist/dashboard/web/insights-page.js.map +1 -0
  59. package/dist/dashboard/web/insights.d.ts +18 -1
  60. package/dist/dashboard/web/insights.d.ts.map +1 -1
  61. package/dist/dashboard/web/insights.js +25 -61
  62. package/dist/dashboard/web/insights.js.map +1 -1
  63. package/dist/dashboard/web/office-page.d.ts +3 -0
  64. package/dist/dashboard/web/office-page.d.ts.map +1 -0
  65. package/dist/dashboard/web/office-page.js +149 -0
  66. package/dist/dashboard/web/office-page.js.map +1 -0
  67. package/dist/dashboard/web/office.d.ts +1 -1
  68. package/dist/dashboard/web/office.d.ts.map +1 -1
  69. package/dist/dashboard/web/office.js +1 -139
  70. package/dist/dashboard/web/office.js.map +1 -1
  71. package/dist/dashboard/web/overview-page.d.ts +3 -0
  72. package/dist/dashboard/web/overview-page.d.ts.map +1 -0
  73. package/dist/dashboard/web/overview-page.js +149 -0
  74. package/dist/dashboard/web/overview-page.js.map +1 -0
  75. package/dist/dashboard/web/overview.d.ts +2 -2
  76. package/dist/dashboard/web/overview.d.ts.map +1 -1
  77. package/dist/dashboard/web/overview.js +14 -3
  78. package/dist/dashboard/web/overview.js.map +1 -1
  79. package/dist/dashboard/web/react-hooks.d.ts +8 -0
  80. package/dist/dashboard/web/react-hooks.d.ts.map +1 -0
  81. package/dist/dashboard/web/react-hooks.js +43 -0
  82. package/dist/dashboard/web/react-hooks.js.map +1 -0
  83. package/dist/dashboard/web/react-mount.d.ts +4 -0
  84. package/dist/dashboard/web/react-mount.d.ts.map +1 -0
  85. package/dist/dashboard/web/react-mount.js +7 -0
  86. package/dist/dashboard/web/react-mount.js.map +1 -0
  87. package/dist/dashboard/web/roles-page.d.ts +4 -0
  88. package/dist/dashboard/web/roles-page.d.ts.map +1 -0
  89. package/dist/dashboard/web/roles-page.js +26 -0
  90. package/dist/dashboard/web/roles-page.js.map +1 -0
  91. package/dist/dashboard/web/roles.d.ts +1 -2
  92. package/dist/dashboard/web/roles.d.ts.map +1 -1
  93. package/dist/dashboard/web/roles.js +189 -135
  94. package/dist/dashboard/web/roles.js.map +1 -1
  95. package/dist/dashboard/web/route-lifecycle.d.ts +14 -0
  96. package/dist/dashboard/web/route-lifecycle.d.ts.map +1 -0
  97. package/dist/dashboard/web/route-lifecycle.js +29 -0
  98. package/dist/dashboard/web/route-lifecycle.js.map +1 -0
  99. package/dist/dashboard/web/schedules-page.d.ts +14 -0
  100. package/dist/dashboard/web/schedules-page.d.ts.map +1 -0
  101. package/dist/dashboard/web/schedules-page.js +84 -0
  102. package/dist/dashboard/web/schedules-page.js.map +1 -0
  103. package/dist/dashboard/web/schedules.d.ts +1 -1
  104. package/dist/dashboard/web/schedules.d.ts.map +1 -1
  105. package/dist/dashboard/web/schedules.js +1 -115
  106. package/dist/dashboard/web/schedules.js.map +1 -1
  107. package/dist/dashboard/web/sessions-page.d.ts +3 -0
  108. package/dist/dashboard/web/sessions-page.d.ts.map +1 -0
  109. package/dist/dashboard/web/sessions-page.js +28 -0
  110. package/dist/dashboard/web/sessions-page.js.map +1 -0
  111. package/dist/dashboard/web/sessions.d.ts +4 -1
  112. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  113. package/dist/dashboard/web/sessions.js +43 -10
  114. package/dist/dashboard/web/sessions.js.map +1 -1
  115. package/dist/dashboard/web/settings-page.d.ts +3 -0
  116. package/dist/dashboard/web/settings-page.d.ts.map +1 -0
  117. package/dist/dashboard/web/settings-page.js +387 -0
  118. package/dist/dashboard/web/settings-page.js.map +1 -0
  119. package/dist/dashboard/web/settings.d.ts +1 -1
  120. package/dist/dashboard/web/settings.d.ts.map +1 -1
  121. package/dist/dashboard/web/settings.js +1 -534
  122. package/dist/dashboard/web/settings.js.map +1 -1
  123. package/dist/dashboard/web/skills-page.d.ts +33 -0
  124. package/dist/dashboard/web/skills-page.d.ts.map +1 -0
  125. package/dist/dashboard/web/skills-page.js +515 -0
  126. package/dist/dashboard/web/skills-page.js.map +1 -0
  127. package/dist/dashboard/web/skills.d.ts +1 -1
  128. package/dist/dashboard/web/skills.d.ts.map +1 -1
  129. package/dist/dashboard/web/skills.js +1 -711
  130. package/dist/dashboard/web/skills.js.map +1 -1
  131. package/dist/dashboard/web/store.d.ts +9 -0
  132. package/dist/dashboard/web/store.d.ts.map +1 -1
  133. package/dist/dashboard/web/store.js +19 -2
  134. package/dist/dashboard/web/store.js.map +1 -1
  135. package/dist/dashboard/web/team-federation-page.d.ts +4 -0
  136. package/dist/dashboard/web/team-federation-page.d.ts.map +1 -0
  137. package/dist/dashboard/web/team-federation-page.js +47 -0
  138. package/dist/dashboard/web/team-federation-page.js.map +1 -0
  139. package/dist/dashboard/web/team-federation.d.ts +2 -2
  140. package/dist/dashboard/web/team-federation.d.ts.map +1 -1
  141. package/dist/dashboard/web/team-federation.js +104 -97
  142. package/dist/dashboard/web/team-federation.js.map +1 -1
  143. package/dist/dashboard/web/v3-page.d.ts +3 -0
  144. package/dist/dashboard/web/v3-page.d.ts.map +1 -0
  145. package/dist/dashboard/web/v3-page.js +27 -0
  146. package/dist/dashboard/web/v3-page.js.map +1 -0
  147. package/dist/dashboard/web/v3.d.ts +2 -1
  148. package/dist/dashboard/web/v3.d.ts.map +1 -1
  149. package/dist/dashboard/web/v3.js +18 -43
  150. package/dist/dashboard/web/v3.js.map +1 -1
  151. package/dist/dashboard/web/whiteboards-page.d.ts +3 -0
  152. package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -0
  153. package/dist/dashboard/web/whiteboards-page.js +203 -0
  154. package/dist/dashboard/web/whiteboards-page.js.map +1 -0
  155. package/dist/dashboard/web/whiteboards.d.ts +1 -1
  156. package/dist/dashboard/web/whiteboards.d.ts.map +1 -1
  157. package/dist/dashboard/web/whiteboards.js +1 -275
  158. package/dist/dashboard/web/whiteboards.js.map +1 -1
  159. package/dist/dashboard-web/app.js +36 -2550
  160. package/dist/dashboard-web/chunks/bot-defaults-page-3EV7K6LJ.js +358 -0
  161. package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +1 -0
  162. package/dist/dashboard-web/chunks/chunk-76J7PNZI.js +1 -0
  163. package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +1 -0
  164. package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +54 -0
  165. package/dist/dashboard-web/chunks/chunk-JXLHRRJD.js +31 -0
  166. package/dist/dashboard-web/chunks/chunk-NASYW5FD.js +1 -0
  167. package/dist/dashboard-web/chunks/connectors-XPZKEHF6.js +1 -0
  168. package/dist/dashboard-web/chunks/groups-page-C54PVKYP.js +207 -0
  169. package/dist/dashboard-web/chunks/insights-page-BBQYR7WY.js +309 -0
  170. package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +1 -0
  171. package/dist/dashboard-web/chunks/overview-page-5PJCAMID.js +1 -0
  172. package/dist/dashboard-web/chunks/roles-page-APUDLPVM.js +98 -0
  173. package/dist/dashboard-web/chunks/schedules-WG2UKHSO.js +1 -0
  174. package/dist/dashboard-web/chunks/sessions-page-F3U5NFPD.js +238 -0
  175. package/dist/dashboard-web/chunks/settings-page-OSBZNCXL.js +2 -0
  176. package/dist/dashboard-web/chunks/skills-page-Y3VUAOYG.js +2 -0
  177. package/dist/dashboard-web/chunks/team-federation-page-CRH3WZPH.js +10 -0
  178. package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +149 -0
  179. package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +1 -0
  180. package/dist/dashboard-web/chunks/workflows-UB7OPYGI.js +184 -0
  181. package/dist/dashboard-web/index.html +1 -1
  182. package/dist/dashboard-web/style.css +82 -1
  183. package/dist/dashboard.js +5 -6
  184. package/dist/dashboard.js.map +1 -1
  185. package/dist/i18n/en.d.ts.map +1 -1
  186. package/dist/i18n/en.js +1 -0
  187. package/dist/i18n/en.js.map +1 -1
  188. package/dist/i18n/zh.d.ts.map +1 -1
  189. package/dist/i18n/zh.js +1 -0
  190. package/dist/i18n/zh.js.map +1 -1
  191. package/dist/im/lark/card-builder.d.ts.map +1 -1
  192. package/dist/im/lark/card-builder.js +1 -0
  193. package/dist/im/lark/card-builder.js.map +1 -1
  194. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  195. package/dist/im/lark/event-dispatcher.js +7 -0
  196. package/dist/im/lark/event-dispatcher.js.map +1 -1
  197. package/dist/im/lark/sessions-card.d.ts.map +1 -1
  198. package/dist/im/lark/sessions-card.js +4 -1
  199. package/dist/im/lark/sessions-card.js.map +1 -1
  200. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  201. package/dist/setup/bot-config-editor.js +16 -14
  202. package/dist/setup/bot-config-editor.js.map +1 -1
  203. package/dist/worker.js +1 -1
  204. package/dist/worker.js.map +1 -1
  205. package/package.json +8 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights-page.js","sourceRoot":"","sources":["../../../src/dashboard/web/insights-page.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,SAAS,IAAI,CAAC,KAAuB;IACnC,OAAO,eAAM,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,GAAI,CAAC;AACnG,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,+DAA+D;AAC/D,SAAS,YAAY;IACnB,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IAClB,MAAM,OAAO,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACvC,OAAO,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,mBAAS,SAAS,EAAC,oBAAoB,EAAC,GAAG,EAAE,OAAO,aAClD,eAAK,SAAS,EAAC,cAAc,aAC3B,0BACE,YAAG,SAAS,EAAC,SAAS,YAAE,EAAE,CAAC,cAAc,CAAC,GAAK,EAC/C,uBAAK,EAAE,CAAC,gBAAgB,CAAC,GAAM,EAC/B,sBAAI,EAAE,CAAC,mBAAmB,CAAC,GAAK,IAC5B,EACN,eAAK,SAAS,EAAC,mBAAmB,aAChC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,sBAAsB,EAAC,SAAS,EAAC,WAAW,YAAE,EAAE,CAAC,sBAAsB,CAAC,GAAU,EAC3G,iBAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAC,SAAS,YAAE,EAAE,CAAC,kBAAkB,CAAC,GAAU,IAC5F,IACF,EACN,gBAAM,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAC,0BAA0B,aAC7D,gBAAO,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,GAAG,EAAC,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAI,EACpE,iBAAQ,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAC,YAAY,gBAAa,EAAE,CAAC,qBAAqB,CAAC,GAAI,EAC7F,iBAAQ,EAAE,EAAC,cAAc,EAAC,SAAS,EAAC,YAAY,gBAAa,EAAE,CAAC,kBAAkB,CAAC,YAChF,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAoB,KAAK,EAAE,CAAC,CAAC,GAAG,YAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAjC,CAAC,CAAC,GAAG,CAAsC,CAAC,GACzE,EACT,eAAK,SAAS,EAAC,WAAW,EAAC,IAAI,EAAC,OAAO,gBAAa,EAAE,CAAC,iBAAiB,CAAC,aACvE,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,KAAK,YAAE,EAAE,CAAC,oBAAoB,CAAC,GAAU,EAC3E,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,QAAQ,YAAE,EAAE,CAAC,uBAAuB,CAAC,GAAU,EACjF,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,QAAQ,YAAE,EAAE,CAAC,uBAAuB,CAAC,GAAU,EACjF,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,MAAM,YAAE,EAAE,CAAC,qBAAqB,CAAC,GAAU,IACzE,EACN,cAAK,EAAE,EAAC,oBAAoB,EAAC,SAAS,EAAC,uBAAuB,EAAC,IAAI,EAAC,OAAO,gBAAa,EAAE,CAAC,iBAAiB,CAAC,GAAI,EACjH,iBAAO,SAAS,EAAC,YAAY,aAAC,gBAAO,IAAI,EAAC,UAAU,EAAC,EAAE,EAAC,eAAe,GAAG,OAAE,EAAE,CAAC,kBAAkB,CAAC,IAAS,EAC3G,iBAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,eAAe,EAAC,SAAS,EAAC,WAAW,YAAE,EAAE,CAAC,gBAAgB,CAAC,GAAU,IACzF,EACP,cAAK,EAAE,EAAC,gBAAgB,YAAC,KAAC,IAAI,IAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,GAAI,GAAM,EAChE,cAAK,EAAE,EAAC,gBAAgB,EAAC,SAAS,EAAC,qBAAqB,GAAG,EAC3D,cAAK,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,UAAU,mBAAe,UAAU,YAAC,cAAK,EAAE,EAAC,kBAAkB,GAAG,GAAM,EAC3G,eAAK,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,UAAU,mBAAe,UAAU,EAAC,MAAM,mBAC5E,eAAK,EAAE,EAAC,mBAAmB,aACzB,eAAK,SAAS,EAAC,mBAAmB,aAChC,eAAM,EAAE,EAAC,uBAAuB,GAAG,EACnC,cAAK,SAAS,EAAC,UAAU,EAAC,EAAE,EAAC,cAAc,GAAG,IAC1C,EACN,cAAK,EAAE,EAAC,cAAc,GAAG,IACrB,EACN,eAAK,EAAE,EAAC,qBAAqB,EAAC,MAAM,mBAClC,kBAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,cAAc,EAAC,SAAS,EAAC,UAAU,wBAAI,EAAE,CAAC,qBAAqB,CAAC,IAAU,EACnG,cAAK,EAAE,EAAC,gBAAgB,YAAC,KAAC,IAAI,IAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAI,GAAM,IACvE,IACF,EACN,cAAK,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,UAAU,mBAAe,MAAM,EAAC,MAAM,kBAAC,cAAK,EAAE,EAAC,cAAc,GAAG,GAAM,EAC1G,cAAK,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,UAAU,mBAAe,MAAM,EAAC,MAAM,kBAAC,cAAK,EAAE,EAAC,cAAc,GAAG,GAAM,EAC1G,cAAK,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,UAAU,mBAAe,KAAK,EAAC,MAAM,kBAAC,cAAK,EAAE,EAAC,aAAa,GAAG,GAAM,EACxG,cAAK,EAAE,EAAC,eAAe,EAAC,SAAS,EAAC,eAAe,EAAC,MAAM,SAAG,EAC3D,cAAK,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAC,iBAAiB,EAAC,MAAM,SAAG,EAC/D,cAAK,EAAE,EAAC,aAAa,EAAC,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAC,MAAM,SAAG,IAC1D,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,OAAO,cAAc,CAAC,IAAI,EAAE,KAAC,YAAY,KAAG,CAAC,CAAC;AAChD,CAAC"}
@@ -1,2 +1,19 @@
1
- export declare function renderInsightsPage(root: HTMLElement): () => void;
1
+ import type { SafeInsightReport } from '../../services/insight/types.js';
2
+ type InsightRecord = {
3
+ session: Record<string, any>;
4
+ report: SafeInsightReport | null;
5
+ error?: string;
6
+ };
7
+ type InsightTab = 'overview' | 'sessions' | 'flow' | 'dist' | 'hot';
8
+ export declare function renderTabBar(active: InsightTab): string;
9
+ export declare const TIME_WINDOWS: Array<{
10
+ key: string;
11
+ label: string;
12
+ days: number;
13
+ }>;
14
+ export declare function renderDetailShell(rec: InsightRecord | undefined): string;
15
+ export declare function parseInsightsHash(): Record<string, string>;
16
+ export declare function initialInsightTab(): InsightTab;
17
+ export declare function wireInsightsPage(root: HTMLElement): () => void;
18
+ export {};
2
19
  //# sourceMappingURL=insights.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/insights.ts"],"names":[],"mappings":"AAygDA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CA8nBhE"}
1
+ {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/insights.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAQV,iBAAiB,EASlB,MAAM,iCAAiC,CAAC;AAMzC,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA4UF,KAAK,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAQpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAIvD;AAYD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAK5E,CAAC;AA4kBF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAUxE;AAwhBD,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO1D;AAWD,wBAAgB,iBAAiB,IAAI,UAAU,CAG9C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CA+kB9D"}
@@ -333,7 +333,7 @@ const INSIGHT_TABS = [
333
333
  { key: 'dist', label: 'insights.tabDist' },
334
334
  { key: 'hot', label: 'insights.tabHot' },
335
335
  ];
336
- function renderTabBar(active) {
336
+ export function renderTabBar(active) {
337
337
  return `<div class="insight-tabs" role="tablist">${INSIGHT_TABS.map(tb => `<button type="button" class="itab${tb.key === active ? ' on' : ''}" data-itab="${tb.key}" role="tab" aria-selected="${tb.key === active}">${escapeHtml(t(tb.label))}</button>`).join('')}</div>`;
338
338
  }
339
339
  function projectOf(rec) {
@@ -351,7 +351,7 @@ function projectOptions(records) {
351
351
  }
352
352
  return [...m.entries()].map(([id, count]) => ({ id, count })).sort((a, b) => b.count - a.count || a.id.localeCompare(b.id));
353
353
  }
354
- const TIME_WINDOWS = [
354
+ export const TIME_WINDOWS = [
355
355
  { key: 'all', label: 'insights.timeAll', days: 0 },
356
356
  { key: '1d', label: 'insights.time1d', days: 1 },
357
357
  { key: '7d', label: 'insights.time7d', days: 7 },
@@ -963,7 +963,7 @@ function renderEvidence(report, focus, spanFilter, openSpans) {
963
963
  : `<p class="mut">${escapeHtml(t('insights.evNoFlags'))}</p>`;
964
964
  return `<div class="evidence">${work}${reason}<div class="spanfilter">${chips}</div><div class="spantable">${rows}</div></div>`;
965
965
  }
966
- function renderDetailShell(rec) {
966
+ export function renderDetailShell(rec) {
967
967
  if (!rec)
968
968
  return `<section class="insight-detail"><p class="mut">${escapeHtml(t('insights.selectSession'))}</p></section>`;
969
969
  const s = rec.session;
@@ -1507,7 +1507,7 @@ async function fetchDetail(sessionId) {
1507
1507
  // URL state (deep-link + refresh-stable): the insights view state lives in the hash
1508
1508
  // query after #/insights (e.g. #/insights?tab=dist&project=botmux&sess=<id>). Written
1509
1509
  // via history.replaceState (no router re-run), read back on (re)mount.
1510
- function parseInsightsHash() {
1510
+ export function parseInsightsHash() {
1511
1511
  const h = typeof location !== 'undefined' ? (location.hash || '') : '';
1512
1512
  const qi = h.indexOf('?');
1513
1513
  if (qi < 0)
@@ -1528,7 +1528,11 @@ function buildInsightsHash(p) {
1528
1528
  const INSIGHT_FILTERS = ['all', 'review', 'failed', 'slow'];
1529
1529
  const INSIGHT_TAB_KEYS = ['overview', 'sessions', 'flow', 'dist', 'hot'];
1530
1530
  const SESS_SORT_KEYS = ['recent', 'review', 'spans', 'fails', 'slow', 'agent'];
1531
- export function renderInsightsPage(root) {
1531
+ export function initialInsightTab() {
1532
+ const hp = parseInsightsHash();
1533
+ return INSIGHT_TAB_KEYS.includes(hp.tab) ? hp.tab : 'overview';
1534
+ }
1535
+ export function wireInsightsPage(root) {
1532
1536
  const hp = parseInsightsHash();
1533
1537
  let overviewData = null;
1534
1538
  let records = [];
@@ -1564,58 +1568,6 @@ export function renderInsightsPage(root) {
1564
1568
  let paletteOpen = false;
1565
1569
  let paletteQ = '';
1566
1570
  let paletteIdx = 0;
1567
- root.innerHTML = `
1568
- <section class="page insights-page">
1569
- <div class="page-heading">
1570
- <div>
1571
- <p class="eyebrow">${escapeHtml(t('nav.insights'))}</p>
1572
- <h1>${escapeHtml(t('insights.title'))}</h1>
1573
- <p>${escapeHtml(t('insights.subtitle'))}</p>
1574
- </div>
1575
- <div class="insight-head-acts">
1576
- <button type="button" id="insight-palette-open" class="ins-clear">${escapeHtml(t('insights.paletteOpen'))}</button>
1577
- <button type="button" id="insight-refresh" class="primary">${escapeHtml(t('insights.refresh'))}</button>
1578
- </div>
1579
- </div>
1580
- <form id="insight-filters" class="filters insights-filters">
1581
- <input type="search" name="q" placeholder="${escapeHtml(t('insights.search'))}">
1582
- <select id="insight-project" class="ins-select" aria-label="${escapeHtml(t('insights.projectAll'))}"></select>
1583
- <select id="insight-time" class="ins-select" aria-label="${escapeHtml(t('insights.timeAll'))}">
1584
- ${TIME_WINDOWS.map(w => `<option value="${w.key}">${escapeHtml(t(w.label))}</option>`).join('')}
1585
- </select>
1586
- <div class="segmented" role="group" aria-label="${escapeHtml(t('insights.filter'))}">
1587
- <button type="button" data-filter="all">${escapeHtml(t('insights.filterAll'))}</button>
1588
- <button type="button" data-filter="review">${escapeHtml(t('insights.filterReview'))}</button>
1589
- <button type="button" data-filter="failed">${escapeHtml(t('insights.filterFailed'))}</button>
1590
- <button type="button" data-filter="slow">${escapeHtml(t('insights.filterSlow'))}</button>
1591
- </div>
1592
- <div id="insight-cli-filter" class="spanfilter cli-filter" role="group" aria-label="${escapeHtml(t('insights.filter'))}"></div>
1593
- <label class="ins-toggle"><input type="checkbox" id="insight-noise"> ${escapeHtml(t('insights.showAll'))}</label>
1594
- <button type="button" id="insight-clear" class="ins-clear">${escapeHtml(t('insights.clear'))}</button>
1595
- </form>
1596
- <div id="insight-tabbar">${renderTabBar(tab)}</div>
1597
- <div id="insight-status" class="insight-page-status"></div>
1598
- <div class="insight-panel" role="tabpanel" data-tabpanel="overview"><div id="insight-overview"></div></div>
1599
- <div class="insight-panel" role="tabpanel" data-tabpanel="sessions" hidden>
1600
- <div id="insight-list-view">
1601
- <div class="insight-list-head">
1602
- <span id="insight-list-subtitle"></span>
1603
- <div class="sesssort" id="insight-sort"></div>
1604
- </div>
1605
- <div id="insight-list"></div>
1606
- </div>
1607
- <div id="insight-detail-view" hidden>
1608
- <button type="button" id="insight-back" class="ins-back">← ${escapeHtml(t('insights.backToList'))}</button>
1609
- <div id="insight-detail">${renderDetailShell(undefined)}</div>
1610
- </div>
1611
- </div>
1612
- <div class="insight-panel" role="tabpanel" data-tabpanel="flow" hidden><div id="insight-flow"></div></div>
1613
- <div class="insight-panel" role="tabpanel" data-tabpanel="dist" hidden><div id="insight-dist"></div></div>
1614
- <div class="insight-panel" role="tabpanel" data-tabpanel="hot" hidden><div id="insight-hot"></div></div>
1615
- <div id="insight-modal" class="insight-modal" hidden></div>
1616
- <div id="insight-palette" class="insight-palette" hidden></div>
1617
- <div id="insight-tip" class="ins-tip" role="tooltip" hidden></div>
1618
- </section>`;
1619
1571
  const status = root.querySelector('#insight-status');
1620
1572
  const overviewEl = root.querySelector('#insight-overview');
1621
1573
  const list = root.querySelector('#insight-list');
@@ -1865,6 +1817,8 @@ export function renderInsightsPage(root) {
1865
1817
  const sid = selectedId;
1866
1818
  try {
1867
1819
  const r = await fetch(`/api/sessions/${encodeURIComponent(sid)}/insight?${params.toString()}`, { cache: 'no-store' });
1820
+ if (disposed || sid !== selectedId)
1821
+ return;
1868
1822
  const d = await r.json().catch(() => ({}));
1869
1823
  if (disposed || sid !== selectedId)
1870
1824
  return;
@@ -1877,6 +1831,8 @@ export function renderInsightsPage(root) {
1877
1831
  }
1878
1832
  }
1879
1833
  catch { /* leave what we have */ }
1834
+ if (disposed || sid !== selectedId)
1835
+ return;
1880
1836
  convo.loading = false;
1881
1837
  if (detailTab === 'convo')
1882
1838
  paintDetailBody();
@@ -1914,13 +1870,15 @@ export function renderInsightsPage(root) {
1914
1870
  paintModal();
1915
1871
  try {
1916
1872
  const r = await fetch(`/api/sessions/${encodeURIComponent(sid)}/insight/turn/${turnIndex}?offset=0&limit=40000`, { cache: 'no-store' });
1873
+ if (req !== modalReq || disposed || sid !== selectedId)
1874
+ return;
1917
1875
  const d = await r.json().catch(() => ({}));
1918
- if (req !== modalReq || disposed)
1876
+ if (req !== modalReq || disposed || sid !== selectedId)
1919
1877
  return;
1920
1878
  modalPrompt = d?.turn?.prompt ?? { text: '', truncated: false };
1921
1879
  }
1922
1880
  catch {
1923
- if (req !== modalReq)
1881
+ if (req !== modalReq || disposed || sid !== selectedId)
1924
1882
  return;
1925
1883
  modalPrompt = { text: t('insights.unavailable'), truncated: false };
1926
1884
  }
@@ -2110,13 +2068,13 @@ export function renderInsightsPage(root) {
2110
2068
  return;
2111
2069
  try {
2112
2070
  const report = await fetchDetail(sessionId);
2113
- if (!disposed && report) {
2071
+ if (!disposed && selectedId === sessionId && report) {
2114
2072
  detailReport = report;
2115
2073
  paintDetailBody();
2116
2074
  }
2117
2075
  }
2118
2076
  catch (e) {
2119
- if (!disposed)
2077
+ if (!disposed && selectedId === sessionId)
2120
2078
  body.innerHTML = `<p class="mut">${escapeHtml(String(e))}</p>`;
2121
2079
  }
2122
2080
  }
@@ -2125,7 +2083,11 @@ export function renderInsightsPage(root) {
2125
2083
  status.textContent = t('insights.loading');
2126
2084
  try {
2127
2085
  const r = await fetch('/api/insights/summary?limit=200', { cache: 'no-store' });
2086
+ if (disposed)
2087
+ return;
2128
2088
  const d = await r.json().catch(() => ({}));
2089
+ if (disposed)
2090
+ return;
2129
2091
  if (!r.ok || d?.ok === false || !d.overview) {
2130
2092
  overviewData = null;
2131
2093
  records = [];
@@ -2138,6 +2100,8 @@ export function renderInsightsPage(root) {
2138
2100
  }
2139
2101
  }
2140
2102
  catch (e) {
2103
+ if (disposed)
2104
+ return;
2141
2105
  overviewData = null;
2142
2106
  records = [];
2143
2107
  status.textContent = `${t('insights.unavailable')}: ${String(e)}`;