@resolveio/server-lib 22.3.176 → 22.3.178

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 (745) hide show
  1. package/ai/assistant-core-heuristics.d.ts +11 -0
  2. package/ai/assistant-core-heuristics.js +356 -0
  3. package/ai/assistant-core-heuristics.js.map +1 -0
  4. package/ai/resolveio-platform-intelligence-memory-corpus.d.ts +3 -0
  5. package/ai/resolveio-platform-intelligence-memory-corpus.js +214 -0
  6. package/ai/resolveio-platform-intelligence-memory-corpus.js.map +1 -0
  7. package/ai/resolveio-platform-intelligence-memory.d.ts +20 -0
  8. package/ai/resolveio-platform-intelligence-memory.js +341 -0
  9. package/ai/resolveio-platform-intelligence-memory.js.map +1 -0
  10. package/{src/ai/resolveio-platform-intelligence-types.ts → ai/resolveio-platform-intelligence-types.d.ts} +15 -20
  11. package/ai/resolveio-platform-intelligence-types.js +4 -0
  12. package/ai/resolveio-platform-intelligence-types.js.map +1 -0
  13. package/ai/resolveio-platform-intelligence.d.ts +6 -0
  14. package/ai/resolveio-platform-intelligence.js +463 -0
  15. package/ai/resolveio-platform-intelligence.js.map +1 -0
  16. package/client-server-app.d.ts +1 -0
  17. package/client-server-app.js +68 -0
  18. package/client-server-app.js.map +1 -0
  19. package/collections/ai-run.collection.d.ts +3 -0
  20. package/collections/ai-run.collection.js +170 -0
  21. package/collections/ai-run.collection.js.map +1 -0
  22. package/collections/ai-terminal-conversation.collection.d.ts +2 -0
  23. package/collections/ai-terminal-conversation.collection.js +140 -0
  24. package/collections/ai-terminal-conversation.collection.js.map +1 -0
  25. package/collections/ai-terminal-issue-report.collection.d.ts +2 -0
  26. package/collections/ai-terminal-issue-report.collection.js +148 -0
  27. package/collections/ai-terminal-issue-report.collection.js.map +1 -0
  28. package/collections/ai-terminal-message.collection.d.ts +2 -0
  29. package/collections/ai-terminal-message.collection.js +121 -0
  30. package/collections/ai-terminal-message.collection.js.map +1 -0
  31. package/collections/app-setting.collection.d.ts +3 -0
  32. package/collections/app-setting.collection.js +103 -0
  33. package/collections/app-setting.collection.js.map +1 -0
  34. package/collections/app-status.collection.d.ts +3 -0
  35. package/collections/app-status.collection.js +57 -0
  36. package/collections/app-status.collection.js.map +1 -0
  37. package/collections/communication-metric.collection.d.ts +2 -0
  38. package/collections/communication-metric.collection.js +133 -0
  39. package/collections/communication-metric.collection.js.map +1 -0
  40. package/collections/counter.collection.d.ts +3 -0
  41. package/collections/counter.collection.js +56 -0
  42. package/collections/counter.collection.js.map +1 -0
  43. package/collections/cron-job-history.collection.d.ts +3 -0
  44. package/collections/cron-job-history.collection.js +137 -0
  45. package/collections/cron-job-history.collection.js.map +1 -0
  46. package/collections/cron-job.collection.d.ts +3 -0
  47. package/collections/cron-job.collection.js +92 -0
  48. package/collections/cron-job.collection.js.map +1 -0
  49. package/collections/customer-notification.collection.d.ts +3 -0
  50. package/collections/customer-notification.collection.js +130 -0
  51. package/collections/customer-notification.collection.js.map +1 -0
  52. package/collections/customer-portal-password.collection.d.ts +3 -0
  53. package/collections/customer-portal-password.collection.js +75 -0
  54. package/collections/customer-portal-password.collection.js.map +1 -0
  55. package/collections/email-history.collection.d.ts +3 -0
  56. package/collections/email-history.collection.js +134 -0
  57. package/collections/email-history.collection.js.map +1 -0
  58. package/collections/email-verified.collection.d.ts +3 -0
  59. package/collections/email-verified.collection.js +62 -0
  60. package/collections/email-verified.collection.js.map +1 -0
  61. package/collections/file.collection.d.ts +3 -0
  62. package/collections/file.collection.js +74 -0
  63. package/collections/file.collection.js.map +1 -0
  64. package/collections/flag-update.collection.d.ts +3 -0
  65. package/collections/flag-update.collection.js +57 -0
  66. package/collections/flag-update.collection.js.map +1 -0
  67. package/collections/flag.collection.d.ts +3 -0
  68. package/collections/flag.collection.js +57 -0
  69. package/collections/flag.collection.js.map +1 -0
  70. package/collections/log-method-latency.collection.d.ts +3 -0
  71. package/collections/log-method-latency.collection.js +77 -0
  72. package/collections/log-method-latency.collection.js.map +1 -0
  73. package/collections/log-subscription.collection.d.ts +3 -0
  74. package/collections/log-subscription.collection.js +80 -0
  75. package/collections/log-subscription.collection.js.map +1 -0
  76. package/collections/log.collection.d.ts +3 -0
  77. package/collections/log.collection.js +93 -0
  78. package/collections/log.collection.js.map +1 -0
  79. package/collections/logged-in-users.collection.d.ts +3 -0
  80. package/collections/logged-in-users.collection.js +67 -0
  81. package/collections/logged-in-users.collection.js.map +1 -0
  82. package/collections/monitor-cpu.collection.d.ts +3 -0
  83. package/collections/monitor-cpu.collection.js +65 -0
  84. package/collections/monitor-cpu.collection.js.map +1 -0
  85. package/collections/monitor-function.collection.d.ts +3 -0
  86. package/collections/monitor-function.collection.js +74 -0
  87. package/collections/monitor-function.collection.js.map +1 -0
  88. package/collections/monitor-memory.collection.d.ts +3 -0
  89. package/collections/monitor-memory.collection.js +77 -0
  90. package/collections/monitor-memory.collection.js.map +1 -0
  91. package/collections/monitor-mongo.collection.d.ts +3 -0
  92. package/collections/monitor-mongo.collection.js +71 -0
  93. package/collections/monitor-mongo.collection.js.map +1 -0
  94. package/collections/notification.collection.d.ts +3 -0
  95. package/collections/notification.collection.js +57 -0
  96. package/collections/notification.collection.js.map +1 -0
  97. package/collections/openai-usage-ledger.collection.d.ts +2 -0
  98. package/collections/openai-usage-ledger.collection.js +188 -0
  99. package/collections/openai-usage-ledger.collection.js.map +1 -0
  100. package/collections/report-builder-dashboard-builder.collection.d.ts +3 -0
  101. package/collections/report-builder-dashboard-builder.collection.js +109 -0
  102. package/collections/report-builder-dashboard-builder.collection.js.map +1 -0
  103. package/collections/report-builder-library.collection.d.ts +3 -0
  104. package/collections/report-builder-library.collection.js +87 -0
  105. package/collections/report-builder-library.collection.js.map +1 -0
  106. package/collections/report-builder-report.collection.d.ts +4 -0
  107. package/collections/report-builder-report.collection.js +184 -0
  108. package/collections/report-builder-report.collection.js.map +1 -0
  109. package/collections/user-group.collection.d.ts +4 -0
  110. package/collections/user-group.collection.js +89 -0
  111. package/collections/user-group.collection.js.map +1 -0
  112. package/collections/user-guide.collection.d.ts +3 -0
  113. package/collections/user-guide.collection.js +57 -0
  114. package/collections/user-guide.collection.js.map +1 -0
  115. package/collections/user.collection.d.ts +4 -0
  116. package/collections/user.collection.js +180 -0
  117. package/collections/user.collection.js.map +1 -0
  118. package/cron/cron.d.ts +14 -0
  119. package/cron/cron.js +216 -0
  120. package/cron/cron.js.map +1 -0
  121. package/fixtures/cron-jobs.d.ts +1 -0
  122. package/fixtures/cron-jobs.js +150 -0
  123. package/fixtures/cron-jobs.js.map +1 -0
  124. package/fixtures/init.d.ts +1 -0
  125. package/fixtures/init.js +91 -0
  126. package/fixtures/init.js.map +1 -0
  127. package/http/auth.d.ts +2 -0
  128. package/http/auth.js +951 -0
  129. package/http/auth.js.map +1 -0
  130. package/http/health.d.ts +1 -0
  131. package/http/health.js +11 -0
  132. package/http/health.js.map +1 -0
  133. package/http/home.d.ts +1 -0
  134. package/http/home.js +134 -0
  135. package/http/home.js.map +1 -0
  136. package/http/slow-query-publication.d.ts +2 -0
  137. package/http/slow-query-publication.js +99 -0
  138. package/http/slow-query-publication.js.map +1 -0
  139. package/index.d.ts +1 -0
  140. package/index.js +19 -0
  141. package/index.js.map +1 -0
  142. package/managers/ai-assistant-codex-manager.manager.d.ts +67 -0
  143. package/managers/ai-assistant-codex-manager.manager.js +1113 -0
  144. package/managers/ai-assistant-codex-manager.manager.js.map +1 -0
  145. package/managers/ai-run-evidence.manager.d.ts +36 -0
  146. package/managers/ai-run-evidence.manager.js +377 -0
  147. package/managers/ai-run-evidence.manager.js.map +1 -0
  148. package/managers/communication-metric.manager.d.ts +16 -0
  149. package/managers/communication-metric.manager.js +134 -0
  150. package/managers/communication-metric.manager.js.map +1 -0
  151. package/managers/cron.manager.d.ts +20 -0
  152. package/managers/cron.manager.js +534 -0
  153. package/managers/cron.manager.js.map +1 -0
  154. package/managers/customer-notification-content.manager.d.ts +55 -0
  155. package/managers/customer-notification-content.manager.js +158 -0
  156. package/managers/customer-notification-content.manager.js.map +1 -0
  157. package/managers/diagnostic-manager-bootstrap.d.ts +9 -0
  158. package/managers/diagnostic-manager-bootstrap.js +260 -0
  159. package/managers/diagnostic-manager-bootstrap.js.map +1 -0
  160. package/managers/error-auto-fix.manager.d.ts +149 -0
  161. package/managers/error-auto-fix.manager.js +3064 -0
  162. package/managers/error-auto-fix.manager.js.map +1 -0
  163. package/managers/local-log.manager.d.ts +18 -0
  164. package/managers/local-log.manager.js +88 -0
  165. package/managers/local-log.manager.js.map +1 -0
  166. package/managers/method.manager.d.ts +84 -0
  167. package/managers/method.manager.js +1964 -0
  168. package/managers/method.manager.js.map +1 -0
  169. package/managers/mongo.manager.d.ts +224 -0
  170. package/managers/mongo.manager.js +5000 -0
  171. package/managers/mongo.manager.js.map +1 -0
  172. package/managers/monitor.manager.d.ts +70 -0
  173. package/managers/monitor.manager.js +550 -0
  174. package/managers/monitor.manager.js.map +1 -0
  175. package/managers/openai-usage-ledger.manager.d.ts +30 -0
  176. package/managers/openai-usage-ledger.manager.js +142 -0
  177. package/managers/openai-usage-ledger.manager.js.map +1 -0
  178. package/managers/slow-query-verifier.manager.d.ts +144 -0
  179. package/managers/slow-query-verifier.manager.js +3857 -0
  180. package/managers/slow-query-verifier.manager.js.map +1 -0
  181. package/managers/slow-query.manager.d.ts +28 -0
  182. package/managers/slow-query.manager.js +468 -0
  183. package/managers/slow-query.manager.js.map +1 -0
  184. package/managers/subscription.manager.d.ts +169 -0
  185. package/managers/subscription.manager.js +3434 -0
  186. package/managers/subscription.manager.js.map +1 -0
  187. package/managers/websocket.manager.d.ts +73 -0
  188. package/managers/websocket.manager.js +673 -0
  189. package/managers/websocket.manager.js.map +1 -0
  190. package/managers/worker-dispatcher.manager.d.ts +120 -0
  191. package/managers/worker-dispatcher.manager.js +1266 -0
  192. package/managers/worker-dispatcher.manager.js.map +1 -0
  193. package/managers/worker-server.manager.d.ts +35 -0
  194. package/managers/worker-server.manager.js +582 -0
  195. package/managers/worker-server.manager.js.map +1 -0
  196. package/methods/accounts.d.ts +2 -0
  197. package/methods/accounts.js +624 -0
  198. package/methods/accounts.js.map +1 -0
  199. package/methods/ai-terminal.d.ts +338 -0
  200. package/methods/ai-terminal.js +23454 -0
  201. package/methods/ai-terminal.js.map +1 -0
  202. package/methods/app-settings.d.ts +2 -0
  203. package/methods/app-settings.js +169 -0
  204. package/methods/app-settings.js.map +1 -0
  205. package/methods/aws.d.ts +2 -0
  206. package/methods/aws.js +877 -0
  207. package/methods/aws.js.map +1 -0
  208. package/methods/collections.d.ts +2 -0
  209. package/methods/collections.js +719 -0
  210. package/methods/collections.js.map +1 -0
  211. package/methods/counters.d.ts +2 -0
  212. package/methods/counters.js +113 -0
  213. package/methods/counters.js.map +1 -0
  214. package/methods/cron-jobs.d.ts +2 -0
  215. package/methods/cron-jobs.js +2475 -0
  216. package/methods/cron-jobs.js.map +1 -0
  217. package/methods/customer-notifications.d.ts +2 -0
  218. package/methods/customer-notifications.js +528 -0
  219. package/methods/customer-notifications.js.map +1 -0
  220. package/methods/diagnostics.d.ts +2 -0
  221. package/methods/diagnostics.js +703 -0
  222. package/methods/diagnostics.js.map +1 -0
  223. package/methods/flag-updates.d.ts +2 -0
  224. package/methods/flag-updates.js +8 -0
  225. package/methods/flag-updates.js.map +1 -0
  226. package/methods/flags.d.ts +2 -0
  227. package/methods/flags.js +8 -0
  228. package/methods/flags.js.map +1 -0
  229. package/methods/logs.d.ts +2 -0
  230. package/methods/logs.js +751 -0
  231. package/methods/logs.js.map +1 -0
  232. package/methods/mongo-explorer.d.ts +2 -0
  233. package/methods/mongo-explorer.js +1808 -0
  234. package/methods/mongo-explorer.js.map +1 -0
  235. package/methods/monitor.d.ts +2 -0
  236. package/methods/monitor.js +543 -0
  237. package/methods/monitor.js.map +1 -0
  238. package/methods/pdf.d.ts +2 -0
  239. package/methods/pdf.js +1216 -0
  240. package/methods/pdf.js.map +1 -0
  241. package/methods/publications.d.ts +1 -0
  242. package/methods/publications.js +183 -0
  243. package/methods/publications.js.map +1 -0
  244. package/methods/report-builder.d.ts +2 -0
  245. package/methods/report-builder.js +3094 -0
  246. package/methods/report-builder.js.map +1 -0
  247. package/methods/support.d.ts +2 -0
  248. package/methods/support.js +430 -0
  249. package/methods/support.js.map +1 -0
  250. package/models/ai-run.model.d.ts +19 -0
  251. package/models/ai-run.model.js +4 -0
  252. package/models/ai-run.model.js.map +1 -0
  253. package/models/ai-terminal-conversation.model.d.ts +17 -0
  254. package/models/ai-terminal-conversation.model.js +4 -0
  255. package/models/ai-terminal-conversation.model.js.map +1 -0
  256. package/models/ai-terminal-issue-report.model.d.ts +19 -0
  257. package/models/ai-terminal-issue-report.model.js +4 -0
  258. package/models/ai-terminal-issue-report.model.js.map +1 -0
  259. package/models/ai-terminal-message.model.d.ts +22 -0
  260. package/models/ai-terminal-message.model.js +4 -0
  261. package/models/ai-terminal-message.model.js.map +1 -0
  262. package/models/app-setting.model.d.ts +16 -0
  263. package/models/app-setting.model.js +4 -0
  264. package/models/app-setting.model.js.map +1 -0
  265. package/{src/models/app-status.model.ts → models/app-status.model.d.ts} +2 -3
  266. package/models/app-status.model.js +4 -0
  267. package/models/app-status.model.js.map +1 -0
  268. package/{src/models/billing-logged-in-users.model.ts → models/billing-logged-in-users.model.d.ts} +4 -5
  269. package/models/billing-logged-in-users.model.js +4 -0
  270. package/models/billing-logged-in-users.model.js.map +1 -0
  271. package/models/collection-document.model.d.ts +21 -0
  272. package/models/collection-document.model.js +4 -0
  273. package/models/collection-document.model.js.map +1 -0
  274. package/models/communication-metric.model.d.ts +20 -0
  275. package/models/communication-metric.model.js +4 -0
  276. package/models/communication-metric.model.js.map +1 -0
  277. package/{src/models/counter.model.ts → models/counter.model.d.ts} +3 -4
  278. package/models/counter.model.js +4 -0
  279. package/models/counter.model.js.map +1 -0
  280. package/models/cron-job-history.model.d.ts +15 -0
  281. package/models/cron-job-history.model.js +4 -0
  282. package/models/cron-job-history.model.js.map +1 -0
  283. package/models/cron-job.model.d.ts +14 -0
  284. package/models/cron-job.model.js +4 -0
  285. package/models/cron-job.model.js.map +1 -0
  286. package/models/customer-notification.model.d.ts +26 -0
  287. package/models/customer-notification.model.js +4 -0
  288. package/models/customer-notification.model.js.map +1 -0
  289. package/models/customer-portal-password.model.d.ts +11 -0
  290. package/models/customer-portal-password.model.js +4 -0
  291. package/models/customer-portal-password.model.js.map +1 -0
  292. package/models/dialog.model.d.ts +23 -0
  293. package/models/dialog.model.js +4 -0
  294. package/models/dialog.model.js.map +1 -0
  295. package/models/email-history.model.d.ts +32 -0
  296. package/{src/models/email-history.model.ts → models/email-history.model.js} +4 -36
  297. package/models/email-history.model.js.map +1 -0
  298. package/{src/models/email-verified.model.ts → models/email-verified.model.d.ts} +5 -6
  299. package/models/email-verified.model.js +4 -0
  300. package/models/email-verified.model.js.map +1 -0
  301. package/{src/models/file.model.ts → models/file.model.d.ts} +7 -8
  302. package/models/file.model.js +4 -0
  303. package/models/file.model.js.map +1 -0
  304. package/{src/models/flag-update.model.ts → models/flag-update.model.d.ts} +3 -4
  305. package/models/flag-update.model.js +4 -0
  306. package/models/flag-update.model.js.map +1 -0
  307. package/{src/models/flag.model.ts → models/flag.model.d.ts} +3 -4
  308. package/models/flag.model.js +4 -0
  309. package/models/flag.model.js.map +1 -0
  310. package/models/log-method-latency.model.d.ts +10 -0
  311. package/models/log-method-latency.model.js +4 -0
  312. package/models/log-method-latency.model.js.map +1 -0
  313. package/{src/models/log-subscription.model.ts → models/log-subscription.model.d.ts} +9 -11
  314. package/models/log-subscription.model.js +4 -0
  315. package/models/log-subscription.model.js.map +1 -0
  316. package/models/log.model.d.ts +17 -0
  317. package/models/log.model.js +4 -0
  318. package/models/log.model.js.map +1 -0
  319. package/{src/models/logged-in-users.model.ts → models/logged-in-users.model.d.ts} +5 -6
  320. package/models/logged-in-users.model.js +4 -0
  321. package/models/logged-in-users.model.js.map +1 -0
  322. package/{src/models/method-response.model.ts → models/method-response.model.d.ts} +6 -7
  323. package/models/method-response.model.js +4 -0
  324. package/models/method-response.model.js.map +1 -0
  325. package/models/method.model.d.ts +26 -0
  326. package/models/method.model.js +4 -0
  327. package/models/method.model.js.map +1 -0
  328. package/{src/models/monitor-cpu.model.ts → models/monitor-cpu.model.d.ts} +7 -9
  329. package/models/monitor-cpu.model.js +4 -0
  330. package/models/monitor-cpu.model.js.map +1 -0
  331. package/models/monitor-function.model.d.ts +14 -0
  332. package/models/monitor-function.model.js +4 -0
  333. package/models/monitor-function.model.js.map +1 -0
  334. package/models/monitor-memory.model.d.ts +15 -0
  335. package/models/monitor-memory.model.js +4 -0
  336. package/models/monitor-memory.model.js.map +1 -0
  337. package/models/monitor-mongo.model.d.ts +13 -0
  338. package/models/monitor-mongo.model.js +4 -0
  339. package/models/monitor-mongo.model.js.map +1 -0
  340. package/{src/models/notification.model.ts → models/notification.model.d.ts} +4 -6
  341. package/models/notification.model.js +4 -0
  342. package/models/notification.model.js.map +1 -0
  343. package/models/openai-usage-ledger.model.d.ts +30 -0
  344. package/models/openai-usage-ledger.model.js +4 -0
  345. package/models/openai-usage-ledger.model.js.map +1 -0
  346. package/models/pagination.model.d.ts +11 -0
  347. package/models/pagination.model.js +28 -0
  348. package/models/pagination.model.js.map +1 -0
  349. package/models/permission.model.d.ts +12 -0
  350. package/models/permission.model.js +4 -0
  351. package/models/permission.model.js.map +1 -0
  352. package/models/report-builder-dashboard-builder.model.d.ts +25 -0
  353. package/models/report-builder-dashboard-builder.model.js +4 -0
  354. package/models/report-builder-dashboard-builder.model.js.map +1 -0
  355. package/models/report-builder-library.model.d.ts +17 -0
  356. package/models/report-builder-library.model.js +4 -0
  357. package/models/report-builder-library.model.js.map +1 -0
  358. package/models/report-builder-report.model.d.ts +121 -0
  359. package/models/report-builder-report.model.js +4 -0
  360. package/models/report-builder-report.model.js.map +1 -0
  361. package/models/report-builder.model.d.ts +61 -0
  362. package/models/report-builder.model.js +4 -0
  363. package/models/report-builder.model.js.map +1 -0
  364. package/models/select-data-label.model.d.ts +9 -0
  365. package/models/select-data-label.model.js +4 -0
  366. package/models/select-data-label.model.js.map +1 -0
  367. package/models/server-message.model.d.ts +32 -0
  368. package/models/server-message.model.js +4 -0
  369. package/models/server-message.model.js.map +1 -0
  370. package/models/slow-query-report.model.d.ts +23 -0
  371. package/models/slow-query-report.model.js +4 -0
  372. package/models/slow-query-report.model.js.map +1 -0
  373. package/models/subscription.model.d.ts +31 -0
  374. package/models/subscription.model.js +4 -0
  375. package/models/subscription.model.js.map +1 -0
  376. package/models/support-ticket.model.d.ts +87 -0
  377. package/models/support-ticket.model.js +4 -0
  378. package/models/support-ticket.model.js.map +1 -0
  379. package/models/user-group.model.d.ts +20 -0
  380. package/models/user-group.model.js +4 -0
  381. package/models/user-group.model.js.map +1 -0
  382. package/{src/models/user-guide.model.ts → models/user-guide.model.d.ts} +4 -5
  383. package/models/user-guide.model.js +4 -0
  384. package/models/user-guide.model.js.map +1 -0
  385. package/models/user.model.d.ts +84 -0
  386. package/models/user.model.js +4 -0
  387. package/models/user.model.js.map +1 -0
  388. package/package.json +1 -1
  389. package/private/images/ResolveIO.png +0 -0
  390. package/public_api.js +127 -0
  391. package/public_api.js.map +1 -0
  392. package/publications/ai-terminal.d.ts +1 -0
  393. package/publications/ai-terminal.js +122 -0
  394. package/publications/ai-terminal.js.map +1 -0
  395. package/publications/app-settings.d.ts +2 -0
  396. package/publications/app-settings.js +28 -0
  397. package/publications/app-settings.js.map +1 -0
  398. package/publications/app-status.d.ts +2 -0
  399. package/publications/app-status.js +16 -0
  400. package/publications/app-status.js.map +1 -0
  401. package/publications/cron-jobs.d.ts +2 -0
  402. package/publications/cron-jobs.js +88 -0
  403. package/publications/cron-jobs.js.map +1 -0
  404. package/publications/customer-notifications.d.ts +2 -0
  405. package/publications/customer-notifications.js +161 -0
  406. package/publications/customer-notifications.js.map +1 -0
  407. package/publications/files.d.ts +2 -0
  408. package/publications/files.js +36 -0
  409. package/publications/files.js.map +1 -0
  410. package/publications/flags-update.d.ts +2 -0
  411. package/publications/flags-update.js +22 -0
  412. package/publications/flags-update.js.map +1 -0
  413. package/publications/flags.d.ts +2 -0
  414. package/publications/flags.js +22 -0
  415. package/publications/flags.js.map +1 -0
  416. package/publications/logs.d.ts +2 -0
  417. package/publications/logs.js +164 -0
  418. package/publications/logs.js.map +1 -0
  419. package/publications/notifications.d.ts +2 -0
  420. package/publications/notifications.js +16 -0
  421. package/publications/notifications.js.map +1 -0
  422. package/publications/report-builder-dashboard-builders.d.ts +2 -0
  423. package/publications/report-builder-dashboard-builders.js +42 -0
  424. package/publications/report-builder-dashboard-builders.js.map +1 -0
  425. package/publications/report-builder-libraries.d.ts +2 -0
  426. package/publications/report-builder-libraries.js +90 -0
  427. package/publications/report-builder-libraries.js.map +1 -0
  428. package/publications/report-builder-reports.d.ts +2 -0
  429. package/publications/report-builder-reports.js +50 -0
  430. package/publications/report-builder-reports.js.map +1 -0
  431. package/publications/super-admin.d.ts +2 -0
  432. package/publications/super-admin.js +16 -0
  433. package/publications/super-admin.js.map +1 -0
  434. package/publications/user-groups.d.ts +1 -0
  435. package/publications/user-groups.js +16 -0
  436. package/publications/user-groups.js.map +1 -0
  437. package/publications/user-guides.d.ts +1 -0
  438. package/publications/user-guides.js +16 -0
  439. package/publications/user-guides.js.map +1 -0
  440. package/resolveio-server-app.d.ts +70 -0
  441. package/resolveio-server-app.js +801 -0
  442. package/resolveio-server-app.js.map +1 -0
  443. package/server-app.d.ts +228 -0
  444. package/server-app.js +3566 -0
  445. package/server-app.js.map +1 -0
  446. package/services/codex-client.d.ts +128 -0
  447. package/services/codex-client.js +1629 -0
  448. package/services/codex-client.js.map +1 -0
  449. package/services/openai-client.d.ts +46 -0
  450. package/services/openai-client.js +318 -0
  451. package/services/openai-client.js.map +1 -0
  452. package/types/error-report.d.ts +25 -0
  453. package/types/error-report.js +4 -0
  454. package/types/error-report.js.map +1 -0
  455. package/types/slow-query-report.d.ts +27 -0
  456. package/types/slow-query-report.js +6 -0
  457. package/types/slow-query-report.js.map +1 -0
  458. package/util/ai-qa-policy.d.ts +124 -0
  459. package/util/ai-qa-policy.js +736 -0
  460. package/util/ai-qa-policy.js.map +1 -0
  461. package/util/ai-run-evidence-adapters.d.ts +73 -0
  462. package/util/ai-run-evidence-adapters.js +3087 -0
  463. package/util/ai-run-evidence-adapters.js.map +1 -0
  464. package/util/ai-run-evidence-dashboard.d.ts +84 -0
  465. package/util/ai-run-evidence-dashboard.js +336 -0
  466. package/util/ai-run-evidence-dashboard.js.map +1 -0
  467. package/util/ai-run-evidence-eval.d.ts +86 -0
  468. package/util/ai-run-evidence-eval.js +1015 -0
  469. package/util/ai-run-evidence-eval.js.map +1 -0
  470. package/util/ai-run-evidence.d.ts +244 -0
  471. package/util/ai-run-evidence.js +792 -0
  472. package/util/ai-run-evidence.js.map +1 -0
  473. package/util/ai-runner-artifacts.d.ts +82 -0
  474. package/util/ai-runner-artifacts.js +713 -0
  475. package/util/ai-runner-artifacts.js.map +1 -0
  476. package/util/ai-runner-manager-autopilot.d.ts +210 -0
  477. package/util/ai-runner-manager-autopilot.js +642 -0
  478. package/util/ai-runner-manager-autopilot.js.map +1 -0
  479. package/util/ai-runner-manager-policy.d.ts +653 -0
  480. package/util/ai-runner-manager-policy.js +2880 -0
  481. package/util/ai-runner-manager-policy.js.map +1 -0
  482. package/util/ai-runner-qa-auth.d.ts +5 -0
  483. package/util/ai-runner-qa-auth.js +822 -0
  484. package/util/ai-runner-qa-auth.js.map +1 -0
  485. package/util/ai-runner-qa-tools.d.ts +26 -0
  486. package/util/ai-runner-qa-tools.js +3029 -0
  487. package/util/ai-runner-qa-tools.js.map +1 -0
  488. package/util/aicoder-runner-v6.d.ts +367 -0
  489. package/util/aicoder-runner-v6.js +1925 -0
  490. package/util/aicoder-runner-v6.js.map +1 -0
  491. package/util/common.d.ts +31 -0
  492. package/util/common.js +683 -0
  493. package/util/common.js.map +1 -0
  494. package/util/customer-portal-password.d.ts +13 -0
  495. package/util/customer-portal-password.js +209 -0
  496. package/util/customer-portal-password.js.map +1 -0
  497. package/util/error-reporter.d.ts +52 -0
  498. package/util/error-reporter.js +326 -0
  499. package/util/error-reporter.js.map +1 -0
  500. package/util/error-tracking.d.ts +13 -0
  501. package/util/error-tracking.js +120 -0
  502. package/util/error-tracking.js.map +1 -0
  503. package/util/openai-usage-cost.d.ts +6 -0
  504. package/util/openai-usage-cost.js +103 -0
  505. package/util/openai-usage-cost.js.map +1 -0
  506. package/util/report-builder-unwinds.d.ts +15 -0
  507. package/util/report-builder-unwinds.js +156 -0
  508. package/util/report-builder-unwinds.js.map +1 -0
  509. package/util/runner-process-janitor.d.ts +27 -0
  510. package/util/runner-process-janitor.js +208 -0
  511. package/util/runner-process-janitor.js.map +1 -0
  512. package/util/schema-report-builder.d.ts +6 -0
  513. package/util/schema-report-builder.js +481 -0
  514. package/util/schema-report-builder.js.map +1 -0
  515. package/util/slow-query-reporter.d.ts +28 -0
  516. package/util/slow-query-reporter.js +226 -0
  517. package/util/slow-query-reporter.js.map +1 -0
  518. package/util/subscription-dependency-context.d.ts +34 -0
  519. package/util/subscription-dependency-context.js +1283 -0
  520. package/util/subscription-dependency-context.js.map +1 -0
  521. package/util/support-runner-v5.d.ts +841 -0
  522. package/util/support-runner-v5.js +3723 -0
  523. package/util/support-runner-v5.js.map +1 -0
  524. package/util/tokenizer.d.ts +5 -0
  525. package/util/tokenizer.js +41 -0
  526. package/util/tokenizer.js.map +1 -0
  527. package/workers/codex-runner.worker.d.ts +1 -0
  528. package/workers/codex-runner.worker.js +192 -0
  529. package/workers/codex-runner.worker.js.map +1 -0
  530. package/.nodemon.json +0 -5
  531. package/.vscode/settings.json +0 -21
  532. package/AGENTS.md +0 -195
  533. package/README.md +0 -22
  534. package/build_package.sh +0 -5
  535. package/compileDTS.pl +0 -64
  536. package/docs/ai-assistant-nightly-eval.md +0 -65
  537. package/docs/ai-assistant-preflight-checklist.md +0 -23
  538. package/docs/ai-assistant-report-builder-bridge-playbook.md +0 -115
  539. package/eslint-plugin-custom/index.js +0 -7
  540. package/eslint-plugin-custom/rules/no-filter-zero-index.js +0 -44
  541. package/eslint.config.js +0 -103
  542. package/gulpfile.js +0 -216
  543. package/methodAndPublicationListGenerator.py +0 -375
  544. package/mongodbensurers.js +0 -2
  545. package/mongostop.js +0 -3
  546. package/scripts/cleanup-bypassed-callmethod-logs.js +0 -616
  547. package/settings.development.json +0 -25
  548. package/settings.development.redacted.json +0 -25
  549. package/src/.env +0 -12
  550. package/src/ai/assistant-core-heuristics.ts +0 -379
  551. package/src/ai/resolveio-platform-intelligence-memory-corpus.ts +0 -185
  552. package/src/ai/resolveio-platform-intelligence-memory.ts +0 -325
  553. package/src/ai/resolveio-platform-intelligence.ts +0 -462
  554. package/src/client-server-app.ts +0 -12
  555. package/src/collections/ai-run.collection.ts +0 -117
  556. package/src/collections/ai-terminal-conversation.collection.ts +0 -91
  557. package/src/collections/ai-terminal-issue-report.collection.ts +0 -99
  558. package/src/collections/ai-terminal-message.collection.ts +0 -77
  559. package/src/collections/app-setting.collection.ts +0 -104
  560. package/src/collections/app-status.collection.ts +0 -58
  561. package/src/collections/communication-metric.collection.ts +0 -84
  562. package/src/collections/counter.collection.ts +0 -56
  563. package/src/collections/cron-job-history.collection.ts +0 -94
  564. package/src/collections/cron-job.collection.ts +0 -92
  565. package/src/collections/customer-notification.collection.ts +0 -131
  566. package/src/collections/customer-portal-password.collection.ts +0 -76
  567. package/src/collections/email-history.collection.ts +0 -134
  568. package/src/collections/email-verified.collection.ts +0 -62
  569. package/src/collections/file.collection.ts +0 -74
  570. package/src/collections/flag-update.collection.ts +0 -57
  571. package/src/collections/flag.collection.ts +0 -57
  572. package/src/collections/log-method-latency.collection.ts +0 -77
  573. package/src/collections/log-subscription.collection.ts +0 -80
  574. package/src/collections/log.collection.ts +0 -93
  575. package/src/collections/logged-in-users.collection.ts +0 -67
  576. package/src/collections/monitor-cpu.collection.ts +0 -65
  577. package/src/collections/monitor-function.collection.ts +0 -74
  578. package/src/collections/monitor-memory.collection.ts +0 -77
  579. package/src/collections/monitor-mongo.collection.ts +0 -71
  580. package/src/collections/notification.collection.ts +0 -57
  581. package/src/collections/openai-usage-ledger.collection.ts +0 -131
  582. package/src/collections/report-builder-dashboard-builder.collection.ts +0 -109
  583. package/src/collections/report-builder-library.collection.ts +0 -89
  584. package/src/collections/report-builder-report.collection.ts +0 -184
  585. package/src/collections/user-group.collection.ts +0 -89
  586. package/src/collections/user-guide.collection.ts +0 -57
  587. package/src/collections/user.collection.ts +0 -181
  588. package/src/cron/cron.ts +0 -117
  589. package/src/fixtures/cron-jobs.ts +0 -95
  590. package/src/fixtures/init.ts +0 -35
  591. package/src/http/auth.ts +0 -818
  592. package/src/http/health.ts +0 -7
  593. package/src/http/home.ts +0 -90
  594. package/src/http/slow-query-publication.ts +0 -49
  595. package/src/index.ts +0 -1
  596. package/src/managers/ai-assistant-codex-manager.manager.ts +0 -1131
  597. package/src/managers/ai-run-evidence.manager.ts +0 -264
  598. package/src/managers/communication-metric.manager.ts +0 -82
  599. package/src/managers/cron.manager.ts +0 -333
  600. package/src/managers/customer-notification-content.manager.ts +0 -236
  601. package/src/managers/diagnostic-manager-bootstrap.ts +0 -165
  602. package/src/managers/error-auto-fix.manager.ts +0 -2767
  603. package/src/managers/local-log.manager.ts +0 -113
  604. package/src/managers/method.manager.ts +0 -1857
  605. package/src/managers/mongo.manager.ts +0 -4575
  606. package/src/managers/monitor.manager.ts +0 -507
  607. package/src/managers/openai-usage-ledger.manager.ts +0 -112
  608. package/src/managers/slow-query-verifier.manager.ts +0 -3590
  609. package/src/managers/slow-query.manager.ts +0 -519
  610. package/src/managers/subscription.manager.ts +0 -3128
  611. package/src/managers/websocket.manager.ts +0 -746
  612. package/src/managers/worker-dispatcher.manager.ts +0 -1360
  613. package/src/managers/worker-server.manager.ts +0 -536
  614. package/src/methods/accounts.ts +0 -532
  615. package/src/methods/ai-terminal.ts +0 -23825
  616. package/src/methods/app-settings.ts +0 -114
  617. package/src/methods/aws.ts +0 -649
  618. package/src/methods/collections.ts +0 -641
  619. package/src/methods/counters.ts +0 -69
  620. package/src/methods/cron-jobs.ts +0 -2614
  621. package/src/methods/customer-notifications.ts +0 -458
  622. package/src/methods/diagnostics.ts +0 -616
  623. package/src/methods/flag-updates.ts +0 -7
  624. package/src/methods/flags.ts +0 -7
  625. package/src/methods/logs.ts +0 -657
  626. package/src/methods/mongo-explorer.ts +0 -1880
  627. package/src/methods/monitor.ts +0 -540
  628. package/src/methods/pdf.ts +0 -1236
  629. package/src/methods/publications.ts +0 -129
  630. package/src/methods/report-builder.ts +0 -3300
  631. package/src/methods/support.ts +0 -335
  632. package/src/models/ai-run.model.ts +0 -27
  633. package/src/models/ai-terminal-conversation.model.ts +0 -19
  634. package/src/models/ai-terminal-issue-report.model.ts +0 -21
  635. package/src/models/ai-terminal-message.model.ts +0 -24
  636. package/src/models/app-setting.model.ts +0 -17
  637. package/src/models/collection-document.model.ts +0 -24
  638. package/src/models/communication-metric.model.ts +0 -23
  639. package/src/models/cron-job-history.model.ts +0 -16
  640. package/src/models/cron-job.model.ts +0 -15
  641. package/src/models/customer-notification.model.ts +0 -28
  642. package/src/models/customer-portal-password.model.ts +0 -12
  643. package/src/models/dialog.model.ts +0 -25
  644. package/src/models/log-method-latency.model.ts +0 -11
  645. package/src/models/log.model.ts +0 -19
  646. package/src/models/method.model.ts +0 -25
  647. package/src/models/monitor-function.model.ts +0 -16
  648. package/src/models/monitor-memory.model.ts +0 -17
  649. package/src/models/monitor-mongo.model.ts +0 -15
  650. package/src/models/openai-usage-ledger.model.ts +0 -56
  651. package/src/models/pagination.model.ts +0 -35
  652. package/src/models/permission.model.ts +0 -14
  653. package/src/models/report-builder-dashboard-builder.model.ts +0 -29
  654. package/src/models/report-builder-library.model.ts +0 -20
  655. package/src/models/report-builder-report.model.ts +0 -136
  656. package/src/models/report-builder.model.ts +0 -68
  657. package/src/models/select-data-label.model.ts +0 -9
  658. package/src/models/server-message.model.ts +0 -31
  659. package/src/models/slow-query-report.model.ts +0 -23
  660. package/src/models/subscription.model.ts +0 -73
  661. package/src/models/support-ticket.model.ts +0 -104
  662. package/src/models/user-group.model.ts +0 -24
  663. package/src/models/user.model.ts +0 -96
  664. package/src/private/images/ResolveIO.png +0 -0
  665. package/src/publications/ai-terminal.ts +0 -73
  666. package/src/publications/app-settings.ts +0 -25
  667. package/src/publications/app-status.ts +0 -13
  668. package/src/publications/cron-jobs.ts +0 -40
  669. package/src/publications/customer-notifications.ts +0 -101
  670. package/src/publications/files.ts +0 -33
  671. package/src/publications/flags-update.ts +0 -19
  672. package/src/publications/flags.ts +0 -19
  673. package/src/publications/logs.ts +0 -163
  674. package/src/publications/notifications.ts +0 -13
  675. package/src/publications/report-builder-dashboard-builders.ts +0 -39
  676. package/src/publications/report-builder-libraries.ts +0 -41
  677. package/src/publications/report-builder-reports.ts +0 -47
  678. package/src/publications/super-admin.ts +0 -13
  679. package/src/publications/user-groups.ts +0 -12
  680. package/src/publications/user-guides.ts +0 -12
  681. package/src/resolveio-server-app.ts +0 -617
  682. package/src/server-app.ts +0 -3354
  683. package/src/services/codex-client.ts +0 -1231
  684. package/src/services/openai-client.ts +0 -265
  685. package/src/types/error-report.ts +0 -26
  686. package/src/types/js-tiktoken.d.ts +0 -11
  687. package/src/types/slow-query-report.ts +0 -28
  688. package/src/util/ai-qa-policy.ts +0 -925
  689. package/src/util/ai-run-evidence-adapters.ts +0 -3292
  690. package/src/util/ai-run-evidence-dashboard.ts +0 -313
  691. package/src/util/ai-run-evidence-eval.ts +0 -1054
  692. package/src/util/ai-run-evidence.ts +0 -1124
  693. package/src/util/ai-runner-artifacts.ts +0 -586
  694. package/src/util/ai-runner-manager-autopilot.ts +0 -961
  695. package/src/util/ai-runner-manager-policy.ts +0 -4193
  696. package/src/util/ai-runner-qa-auth.ts +0 -821
  697. package/src/util/ai-runner-qa-tools.ts +0 -3045
  698. package/src/util/aicoder-runner-v6.ts +0 -2510
  699. package/src/util/common.ts +0 -649
  700. package/src/util/customer-portal-password.ts +0 -183
  701. package/src/util/error-reporter.ts +0 -332
  702. package/src/util/error-tracking.ts +0 -79
  703. package/src/util/openai-usage-cost.ts +0 -114
  704. package/src/util/report-builder-unwinds.ts +0 -180
  705. package/src/util/runner-process-janitor.ts +0 -219
  706. package/src/util/schema-report-builder.ts +0 -448
  707. package/src/util/slow-query-reporter.ts +0 -216
  708. package/src/util/subscription-dependency-context.ts +0 -1096
  709. package/src/util/support-runner-v5.ts +0 -4785
  710. package/src/util/tokenizer.ts +0 -38
  711. package/src/workers/codex-runner.worker.ts +0 -142
  712. package/start_server.sh +0 -5
  713. package/tests/ai-assistant-corpus-build.ts +0 -484
  714. package/tests/ai-assistant-corpus-replay-e2e.ts +0 -774
  715. package/tests/ai-assistant-data-parity-e2e.ts +0 -1989
  716. package/tests/ai-assistant-eval-triage.ts +0 -831
  717. package/tests/ai-assistant-openai-e2e.ts +0 -1061
  718. package/tests/ai-assistant-openai-git-e2e.ts +0 -155
  719. package/tests/ai-assistant-preflight-matrix.ts +0 -215
  720. package/tests/ai-assistant-routing-eval.test.ts +0 -560
  721. package/tests/ai-assistant-snf-live-eval.ts +0 -975
  722. package/tests/ai-assistant-utils.test.ts +0 -3057
  723. package/tests/ai-manager-autopilot-snapshot.test.ts +0 -193
  724. package/tests/ai-manager-recovery-checkpoint.test.ts +0 -1136
  725. package/tests/ai-run-eval.test.ts +0 -112
  726. package/tests/ai-run-evidence.test.ts +0 -1403
  727. package/tests/ai-runner-contract.test.ts +0 -488
  728. package/tests/aicoder-runner-v6.test.ts +0 -676
  729. package/tests/error-reporter.test.ts +0 -145
  730. package/tests/method-publication-generator.test.ts +0 -46
  731. package/tests/report-builder-linking.test.ts +0 -79
  732. package/tests/resolveio-platform-intelligence.test.ts +0 -352
  733. package/tests/server-app-cron-owner.test.ts +0 -127
  734. package/tests/subscription-connect-race.test.ts +0 -158
  735. package/tests/subscription-dependency-context.test.ts +0 -324
  736. package/tests/subscription-manager-collection-tracking.test.ts +0 -86
  737. package/tests/subscription-manager-invalidation.test.ts +0 -86
  738. package/tests/support-runner-v5.test.ts +0 -1166
  739. package/tsconfig.json +0 -34
  740. /package/{src/private → private}/email-templates/enrollment.html +0 -0
  741. /package/{src/private → private}/email-templates/forgot-password.html +0 -0
  742. /package/{src/private → private}/email-templates/support-ticket-deleted.html +0 -0
  743. /package/{src/private → private}/email-templates/support-ticket-modified.html +0 -0
  744. /package/{src/private → private}/email-templates/support-ticket.html +0 -0
  745. /package/{src/public_api.ts → public_api.d.ts} +0 -0
@@ -1,1124 +0,0 @@
1
- export type AIRunSource =
2
- | 'support_ticket'
3
- | 'aicoder_app'
4
- | 'ai_assistant'
5
- | 'qa_runner'
6
- | 'unknown';
7
-
8
- export type AIRunOutcomeLabel =
9
- | 'accepted'
10
- | 'rejected'
11
- | 'qa_incomplete'
12
- | 'qa_infra_failed'
13
- | 'build_failed'
14
- | 'release_blocked'
15
- | 'manual_handoff'
16
- | 'false_pass'
17
- | 'stopped'
18
- | 'unknown';
19
-
20
- export type AIRunEventType =
21
- | 'model_call'
22
- | 'log'
23
- | 'qa_infra'
24
- | 'qa_compile'
25
- | 'qa_route_probe'
26
- | 'qa_business_assertion'
27
- | 'scorecard'
28
- | 'deploy'
29
- | 'publish'
30
- | 'hotfix'
31
- | 'assistant_message'
32
- | 'assistant_query'
33
- | 'git_commit'
34
- | 'usage'
35
- | 'human_intervention';
36
-
37
- export type AIRunGateStatus = 'pass' | 'fail' | 'warn' | 'blocked' | 'skipped';
38
-
39
- export type AIQaCheckStatus = 'pass' | 'fail' | 'blocked' | 'warn' | 'skipped' | 'unknown';
40
-
41
- export type AIQaCompileStatus = 'pass' | 'fail' | 'blocked' | 'stale' | 'skipped' | 'unknown';
42
-
43
- export type AIQaOutcome =
44
- | 'infra_failed'
45
- | 'compile_failed'
46
- | 'route_failed'
47
- | 'route_only_pass'
48
- | 'business_assertion_passed'
49
- | 'business_assertion_failed'
50
- | 'incomplete';
51
-
52
- export interface AIRunEvent {
53
- id?: string;
54
- type: AIRunEventType;
55
- source?: AIRunSource | string;
56
- message?: string;
57
- category?: string;
58
- artifactPaths?: string[];
59
- metadata?: Record<string, any>;
60
- recordedAt?: Date | string;
61
- }
62
-
63
- export interface AIRunGateResult {
64
- key: string;
65
- label: string;
66
- status: AIRunGateStatus;
67
- reason: string;
68
- evidenceRefs: string[];
69
- recordedAt: string;
70
- metadata?: Record<string, any>;
71
- }
72
-
73
- export interface AIRunCost {
74
- inputTokens: number;
75
- cachedInputTokens: number;
76
- outputTokens: number;
77
- totalTokens: number;
78
- estimatedUsd: number;
79
- models: string[];
80
- categories: Record<string, {
81
- inputTokens: number;
82
- cachedInputTokens: number;
83
- outputTokens: number;
84
- totalTokens: number;
85
- estimatedUsd: number;
86
- count: number;
87
- }>;
88
- sources?: Record<string, {
89
- inputTokens: number;
90
- cachedInputTokens: number;
91
- outputTokens: number;
92
- totalTokens: number;
93
- estimatedUsd: number;
94
- count: number;
95
- manualCount: number;
96
- untrackedCount: number;
97
- }>;
98
- surfaces?: Record<string, {
99
- totalTokens: number;
100
- estimatedUsd: number;
101
- count: number;
102
- }>;
103
- manualEstimatedUsd?: number;
104
- untrackedEstimatedUsd?: number;
105
- untrackedWarnings?: string[];
106
- wallTimeMs?: number;
107
- retries?: number;
108
- }
109
-
110
- export interface OpenAIUsageCostEntry {
111
- model?: string;
112
- category?: string;
113
- id_request?: string;
114
- idRequest?: string;
115
- id_conversation?: string;
116
- idConversation?: string;
117
- timestamp?: Date | string;
118
- input_tokens?: number;
119
- inputTokens?: number;
120
- cached_input_tokens?: number;
121
- cachedInputTokens?: number;
122
- output_tokens?: number;
123
- outputTokens?: number;
124
- total_tokens?: number;
125
- totalTokens?: number;
126
- cost_estimate?: number;
127
- estimatedUsd?: number;
128
- usage_source?: string;
129
- usageSource?: string;
130
- usage_surface?: string;
131
- usageSurface?: string;
132
- usage_phase?: string;
133
- usagePhase?: string;
134
- cost_basis?: string;
135
- costBasis?: string;
136
- is_manual?: boolean;
137
- isManual?: boolean;
138
- is_untracked?: boolean;
139
- isUntracked?: boolean;
140
- untracked_reason?: string;
141
- untrackedReason?: string;
142
- [key: string]: any;
143
- }
144
-
145
- export interface AIQaInfraCheck {
146
- name: string;
147
- status: AIQaCheckStatus;
148
- message?: string;
149
- path?: string;
150
- durationMs?: number;
151
- metadata?: Record<string, any>;
152
- checkedAt?: Date | string;
153
- }
154
-
155
- export interface AIQaCompileResult {
156
- status: AIQaCompileStatus;
157
- command?: string;
158
- artifactPath?: string;
159
- message?: string;
160
- durationMs?: number;
161
- staleEvidence?: boolean;
162
- recordedAt?: Date | string;
163
- metadata?: Record<string, any>;
164
- }
165
-
166
- export interface AIQaRouteProbe {
167
- route: string;
168
- status: AIQaCheckStatus;
169
- screenshot?: string;
170
- caption?: string;
171
- shellOnly?: boolean;
172
- authenticated?: boolean;
173
- consoleErrors?: string[];
174
- networkErrors?: string[];
175
- message?: string;
176
- recordedAt?: Date | string;
177
- metadata?: Record<string, any>;
178
- }
179
-
180
- export interface AIQaBusinessAssertion {
181
- assertion: string;
182
- status: AIQaCheckStatus;
183
- workflow?: string;
184
- route?: string;
185
- action?: string;
186
- expected?: string;
187
- observed?: string;
188
- dataProof?: string;
189
- mongoDelta?: Record<string, any>;
190
- artifactPaths?: string[];
191
- message?: string;
192
- recordedAt?: Date | string;
193
- metadata?: Record<string, any>;
194
- }
195
-
196
- export interface AIQaArtifact {
197
- type: 'screenshot' | 'trace' | 'console_log' | 'network_log' | 'coverage_matrix' | 'seed_data' | 'script' | 'other';
198
- path?: string;
199
- url?: string;
200
- title?: string;
201
- caption?: string;
202
- metadata?: Record<string, any>;
203
- }
204
-
205
- export interface AIQaRun {
206
- outcome: AIQaOutcome;
207
- infraChecks: AIQaInfraCheck[];
208
- compile?: AIQaCompileResult;
209
- routeProbes: AIQaRouteProbe[];
210
- businessAssertions: AIQaBusinessAssertion[];
211
- artifacts: AIQaArtifact[];
212
- gateResults: AIRunGateResult[];
213
- updatedAt: string;
214
- }
215
-
216
- export interface AIRun {
217
- id?: string;
218
- source: AIRunSource;
219
- sourceIds: Record<string, string>;
220
- title?: string;
221
- status?: string;
222
- phase?: string;
223
- startedAt?: Date | string;
224
- completedAt?: Date | string;
225
- outcome: AIRunOutcomeLabel;
226
- events: AIRunEvent[];
227
- gates: AIRunGateResult[];
228
- qa?: AIQaRun;
229
- cost?: AIRunCost;
230
- nextAction?: string;
231
- warnings?: string[];
232
- metadata?: Record<string, any>;
233
- }
234
-
235
- export interface AIRunTrainingExample {
236
- runId: string;
237
- source: AIRunSource;
238
- inputSummary: string;
239
- actionSummary: string;
240
- outcome: AIRunOutcomeLabel;
241
- evidence: string[];
242
- cost?: AIRunCost;
243
- metadata?: Record<string, any>;
244
- }
245
-
246
- export interface AIQaEvaluationInput {
247
- infraChecks?: AIQaInfraCheck[];
248
- compile?: AIQaCompileResult;
249
- routeProbes?: AIQaRouteProbe[];
250
- businessAssertions?: AIQaBusinessAssertion[];
251
- artifacts?: AIQaArtifact[];
252
- now?: Date | string;
253
- }
254
-
255
- export interface AIRunOutcomeInput {
256
- source?: AIRunSource;
257
- status?: string;
258
- phase?: string;
259
- qa?: AIQaRun | AIQaEvaluationInput;
260
- gates?: AIRunGateResult[];
261
- scorecardPassed?: boolean;
262
- scorecardStatus?: string;
263
- deployStatus?: string;
264
- publishStatus?: string;
265
- sampleDataStatus?: string;
266
- manualHandoff?: boolean;
267
- stopped?: boolean;
268
- rejected?: boolean;
269
- explicitAccepted?: boolean;
270
- terminal?: boolean;
271
- now?: Date | string;
272
- }
273
-
274
- export interface AIRunOutcomeDecision {
275
- outcome: AIRunOutcomeLabel;
276
- reason: string;
277
- nextAction: string;
278
- gates: AIRunGateResult[];
279
- warnings: string[];
280
- recordedAt: string;
281
- }
282
-
283
- function isoNow(value?: Date | string): string {
284
- if (value instanceof Date) {
285
- return value.toISOString();
286
- }
287
- const parsed = value ? new Date(value) : new Date();
288
- if (Number.isFinite(parsed.getTime())) {
289
- return parsed.toISOString();
290
- }
291
- return new Date().toISOString();
292
- }
293
-
294
- function cleanText(value: any, max = 1000): string {
295
- return String(value || '').replace(/\s+/g, ' ').trim().slice(0, max);
296
- }
297
-
298
- function cleanUsageNumber(value: any): number {
299
- const parsed = Number(value);
300
- return Number.isFinite(parsed) ? parsed : 0;
301
- }
302
-
303
- function cleanUsageDate(value: any): Date | undefined {
304
- if (!value) {
305
- return undefined;
306
- }
307
- const date = value instanceof Date ? value : new Date(value);
308
- return Number.isFinite(date.getTime()) ? date : undefined;
309
- }
310
-
311
- export function isCumulativeCodexUsageEntry(entry: OpenAIUsageCostEntry): boolean {
312
- return cleanText(entry?.category, 180).toLowerCase().startsWith('ai-dashboard-codex:');
313
- }
314
-
315
- export function resolveOpenAIUsageThreadKey(entry: OpenAIUsageCostEntry): string {
316
- const conversationId = cleanText(entry?.id_conversation ?? entry?.idConversation, 240);
317
- if (conversationId) {
318
- return conversationId;
319
- }
320
- return cleanText(entry?.id_request ?? entry?.idRequest, 240);
321
- }
322
-
323
- export function normalizeOpenAIUsageRowsForCosting<T extends OpenAIUsageCostEntry>(rows: T[] = []): T[] {
324
- if (!Array.isArray(rows) || !rows.length) {
325
- return [];
326
- }
327
- const sortedRows = rows
328
- .map((row, index) => ({
329
- ...row,
330
- _sortIndex: index
331
- }))
332
- .sort((a, b) => {
333
- const timeA = cleanUsageDate(a.timestamp)?.getTime() || 0;
334
- const timeB = cleanUsageDate(b.timestamp)?.getTime() || 0;
335
- if (timeA !== timeB) {
336
- return timeA - timeB;
337
- }
338
- const requestCompare = cleanText(a.id_request ?? a.idRequest, 240)
339
- .localeCompare(cleanText(b.id_request ?? b.idRequest, 240));
340
- if (requestCompare) {
341
- return requestCompare;
342
- }
343
- const conversationCompare = cleanText(a.id_conversation ?? a.idConversation, 240)
344
- .localeCompare(cleanText(b.id_conversation ?? b.idConversation, 240));
345
- if (conversationCompare) {
346
- return conversationCompare;
347
- }
348
- return cleanUsageNumber(a._sortIndex) - cleanUsageNumber(b._sortIndex);
349
- });
350
- const previousByThread = new Map<string, {
351
- inputTokens: number;
352
- cachedInputTokens: number;
353
- outputTokens: number;
354
- totalTokens: number;
355
- estimatedUsd: number;
356
- }>();
357
- return sortedRows.map((row) => {
358
- const inputTokens = cleanUsageNumber(row.input_tokens ?? row.inputTokens);
359
- const cachedInputTokens = cleanUsageNumber(row.cached_input_tokens ?? row.cachedInputTokens);
360
- const outputTokens = cleanUsageNumber(row.output_tokens ?? row.outputTokens);
361
- const totalTokens = cleanUsageNumber(row.total_tokens ?? row.totalTokens ?? (inputTokens + outputTokens));
362
- const estimatedUsd = cleanUsageNumber(row.cost_estimate ?? row.estimatedUsd);
363
- const threadKey = isCumulativeCodexUsageEntry(row) ? resolveOpenAIUsageThreadKey(row) : '';
364
- let normalizedInputTokens = inputTokens;
365
- let normalizedCachedInputTokens = cachedInputTokens;
366
- let normalizedOutputTokens = outputTokens;
367
- let normalizedTotalTokens = totalTokens;
368
- let normalizedEstimatedUsd = estimatedUsd;
369
- if (threadKey) {
370
- const previous = previousByThread.get(threadKey);
371
- if (previous
372
- && inputTokens >= previous.inputTokens
373
- && cachedInputTokens >= previous.cachedInputTokens
374
- && outputTokens >= previous.outputTokens
375
- && totalTokens >= previous.totalTokens
376
- && estimatedUsd >= previous.estimatedUsd
377
- ) {
378
- normalizedInputTokens = Math.max(0, inputTokens - previous.inputTokens);
379
- normalizedCachedInputTokens = Math.max(0, cachedInputTokens - previous.cachedInputTokens);
380
- normalizedOutputTokens = Math.max(0, outputTokens - previous.outputTokens);
381
- normalizedTotalTokens = Math.max(0, totalTokens - previous.totalTokens);
382
- normalizedEstimatedUsd = Math.max(0, estimatedUsd - previous.estimatedUsd);
383
- }
384
- previousByThread.set(threadKey, {
385
- inputTokens,
386
- cachedInputTokens,
387
- outputTokens,
388
- totalTokens,
389
- estimatedUsd
390
- });
391
- }
392
- const resolvedTotalTokens = normalizedTotalTokens || (normalizedInputTokens + normalizedOutputTokens);
393
- const resolvedEstimatedUsd = Number(normalizedEstimatedUsd.toFixed(6));
394
- return {
395
- ...row,
396
- input_tokens: normalizedInputTokens,
397
- inputTokens: normalizedInputTokens,
398
- cached_input_tokens: normalizedCachedInputTokens,
399
- cachedInputTokens: normalizedCachedInputTokens,
400
- output_tokens: normalizedOutputTokens,
401
- outputTokens: normalizedOutputTokens,
402
- total_tokens: resolvedTotalTokens,
403
- totalTokens: resolvedTotalTokens,
404
- cost_estimate: resolvedEstimatedUsd,
405
- estimatedUsd: resolvedEstimatedUsd
406
- } as T;
407
- });
408
- }
409
-
410
- function cleanList(values: any, limit = 20, max = 500): string[] {
411
- if (!Array.isArray(values)) {
412
- return [];
413
- }
414
- const result: string[] = [];
415
- for (const value of values) {
416
- const normalized = cleanText(value, max);
417
- if (normalized && !result.includes(normalized)) {
418
- result.push(normalized);
419
- }
420
- if (result.length >= limit) {
421
- break;
422
- }
423
- }
424
- return result;
425
- }
426
-
427
- function normalizeCheckStatus(value: any): AIQaCheckStatus {
428
- const normalized = cleanText(value, 40).toLowerCase().replace(/[_\s-]+/g, '_');
429
- if (normalized === 'passed' || normalized === 'ok' || normalized === 'ready') {
430
- return 'pass';
431
- }
432
- if (normalized === 'failed' || normalized === 'error' || normalized === 'fail') {
433
- return 'fail';
434
- }
435
- if (normalized === 'blocked' || normalized === 'dependency_blocked') {
436
- return 'blocked';
437
- }
438
- if (normalized === 'warning') {
439
- return 'warn';
440
- }
441
- if (normalized === 'skipped' || normalized === 'not_applicable') {
442
- return 'skipped';
443
- }
444
- return normalized === 'pass' || normalized === 'warn' ? normalized : 'unknown';
445
- }
446
-
447
- function normalizeCompileStatus(value: any): AIQaCompileStatus {
448
- const normalized = cleanText(value, 40).toLowerCase().replace(/[_\s-]+/g, '_');
449
- if (normalized === 'passed' || normalized === 'ok') {
450
- return 'pass';
451
- }
452
- if (normalized === 'failed' || normalized === 'error') {
453
- return 'fail';
454
- }
455
- if (normalized === 'blocked') {
456
- return 'blocked';
457
- }
458
- if (normalized === 'stale' || normalized === 'stale_evidence') {
459
- return 'stale';
460
- }
461
- if (normalized === 'skipped' || normalized === 'not_applicable') {
462
- return 'skipped';
463
- }
464
- return normalized === 'pass' || normalized === 'fail' ? normalized : 'unknown';
465
- }
466
-
467
- function makeGate(
468
- key: string,
469
- label: string,
470
- status: AIRunGateStatus,
471
- reason: string,
472
- evidenceRefs: string[] = [],
473
- now?: Date | string,
474
- metadata?: Record<string, any>
475
- ): AIRunGateResult {
476
- return {
477
- key,
478
- label,
479
- status,
480
- reason: cleanText(reason, 1400),
481
- evidenceRefs: cleanList(evidenceRefs, 20, 500),
482
- recordedAt: isoNow(now),
483
- ...(metadata ? { metadata } : {})
484
- };
485
- }
486
-
487
- function failedOrBlocked(status: AIQaCheckStatus | AIQaCompileStatus): boolean {
488
- return status === 'fail' || status === 'blocked';
489
- }
490
-
491
- function passed(status: AIQaCheckStatus | AIQaCompileStatus): boolean {
492
- return status === 'pass';
493
- }
494
-
495
- function normalizeInfraChecks(values: AIQaInfraCheck[] | undefined): AIQaInfraCheck[] {
496
- return (Array.isArray(values) ? values : []).map((entry) => ({
497
- ...entry,
498
- name: cleanText(entry?.name, 120) || 'infra_check',
499
- status: normalizeCheckStatus(entry?.status),
500
- message: cleanText(entry?.message, 1000),
501
- path: cleanText(entry?.path, 500)
502
- }));
503
- }
504
-
505
- function normalizeRouteProbes(values: AIQaRouteProbe[] | undefined): AIQaRouteProbe[] {
506
- return (Array.isArray(values) ? values : []).map((entry) => ({
507
- ...entry,
508
- route: cleanText(entry?.route, 500) || '/',
509
- status: normalizeCheckStatus(entry?.status),
510
- screenshot: cleanText(entry?.screenshot, 500),
511
- caption: cleanText(entry?.caption, 1000),
512
- message: cleanText(entry?.message, 1000),
513
- consoleErrors: cleanList(entry?.consoleErrors, 30, 500),
514
- networkErrors: cleanList(entry?.networkErrors, 30, 500)
515
- }));
516
- }
517
-
518
- function normalizeBusinessAssertions(values: AIQaBusinessAssertion[] | undefined): AIQaBusinessAssertion[] {
519
- return (Array.isArray(values) ? values : []).map((entry) => ({
520
- ...entry,
521
- assertion: cleanText(entry?.assertion, 1000) || 'business assertion',
522
- status: normalizeCheckStatus(entry?.status),
523
- workflow: cleanText(entry?.workflow, 400),
524
- route: cleanText(entry?.route, 500),
525
- action: cleanText(entry?.action, 500),
526
- expected: cleanText(entry?.expected, 1000),
527
- observed: cleanText(entry?.observed, 1000),
528
- dataProof: cleanText(entry?.dataProof, 1400),
529
- artifactPaths: cleanList(entry?.artifactPaths, 30, 500),
530
- message: cleanText(entry?.message, 1000)
531
- }));
532
- }
533
-
534
- function collectBusinessAssertionArtifactPaths(assertions: AIQaBusinessAssertion[]): string[] {
535
- const paths: string[] = [];
536
- for (const assertion of assertions) {
537
- for (const artifactPath of assertion.artifactPaths || []) {
538
- if (artifactPath && !paths.includes(artifactPath)) {
539
- paths.push(artifactPath);
540
- }
541
- }
542
- }
543
- return paths;
544
- }
545
-
546
- export function buildAIQaRun(input: AIQaEvaluationInput = {}): AIQaRun {
547
- const now = isoNow(input.now);
548
- const infraChecks = normalizeInfraChecks(input.infraChecks);
549
- const compile = input.compile
550
- ? {
551
- ...input.compile,
552
- status: normalizeCompileStatus(input.compile.status),
553
- command: cleanText(input.compile.command, 500),
554
- artifactPath: cleanText(input.compile.artifactPath, 500),
555
- message: cleanText(input.compile.message, 1000)
556
- }
557
- : undefined;
558
- const routeProbes = normalizeRouteProbes(input.routeProbes);
559
- const businessAssertions = normalizeBusinessAssertions(input.businessAssertions);
560
- const artifacts = Array.isArray(input.artifacts) ? input.artifacts : [];
561
- const gateResults: AIRunGateResult[] = [];
562
-
563
- const failedInfra = infraChecks.filter((check) => failedOrBlocked(check.status));
564
- if (failedInfra.length) {
565
- gateResults.push(makeGate(
566
- 'qa_infra',
567
- 'QA infrastructure',
568
- 'blocked',
569
- `QA infrastructure failed before model/business validation: ${failedInfra.map((check) => `${check.name}: ${check.message || check.status}`).join('; ')}`,
570
- failedInfra.map((check) => check.path || '').filter(Boolean),
571
- now,
572
- { failed_checks: failedInfra.map((check) => check.name) }
573
- ));
574
- return { outcome: 'infra_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };
575
- }
576
- if (infraChecks.length) {
577
- gateResults.push(makeGate('qa_infra', 'QA infrastructure', 'pass', 'QA infrastructure preflight checks passed.', [], now));
578
- }
579
-
580
- if (compile && (failedOrBlocked(compile.status) || compile.status === 'stale' || compile.staleEvidence === true)) {
581
- gateResults.push(makeGate(
582
- 'qa_compile',
583
- 'Compile/build',
584
- 'fail',
585
- compile.status === 'stale' || compile.staleEvidence === true
586
- ? 'Compile/build evidence is stale and cannot be used for acceptance.'
587
- : (compile.message || 'Compile/build failed before browser QA.'),
588
- compile.artifactPath ? [compile.artifactPath] : [],
589
- now,
590
- { command: compile.command || '' }
591
- ));
592
- return { outcome: 'compile_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };
593
- }
594
- if (compile && passed(compile.status)) {
595
- gateResults.push(makeGate('qa_compile', 'Compile/build', 'pass', 'Compile/build evidence passed.', compile.artifactPath ? [compile.artifactPath] : [], now));
596
- }
597
-
598
- const failedRouteProbes = routeProbes.filter((probe) => failedOrBlocked(probe.status) || probe.shellOnly === true);
599
- if (failedRouteProbes.length) {
600
- gateResults.push(makeGate(
601
- 'qa_route_probe',
602
- 'Browser route probe',
603
- 'fail',
604
- `Browser route probe failed or showed shell-only UI: ${failedRouteProbes.map((probe) => `${probe.route}: ${probe.message || probe.caption || probe.status}`).join('; ')}`,
605
- failedRouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),
606
- now
607
- ));
608
- return { outcome: 'route_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };
609
- }
610
- if (routeProbes.some((probe) => passed(probe.status))) {
611
- gateResults.push(makeGate(
612
- 'qa_route_probe',
613
- 'Browser route probe',
614
- 'pass',
615
- 'Browser route reached authenticated application content. This is not business acceptance by itself.',
616
- routeProbes.map((probe) => probe.screenshot || '').filter(Boolean),
617
- now
618
- ));
619
- }
620
-
621
- const failedBusinessAssertions = businessAssertions.filter((assertion) => failedOrBlocked(assertion.status));
622
- if (failedBusinessAssertions.length) {
623
- gateResults.push(makeGate(
624
- 'qa_business_assertion',
625
- 'Business assertion',
626
- 'fail',
627
- `Issue-specific workflow assertion failed: ${failedBusinessAssertions.map((assertion) => assertion.message || assertion.observed || assertion.assertion).join('; ')}`,
628
- collectBusinessAssertionArtifactPaths(failedBusinessAssertions),
629
- now
630
- ));
631
- return { outcome: 'business_assertion_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };
632
- }
633
-
634
- const passedBusinessAssertions = businessAssertions.filter((assertion) => passed(assertion.status));
635
- if (passedBusinessAssertions.length) {
636
- gateResults.push(makeGate(
637
- 'qa_business_assertion',
638
- 'Business assertion',
639
- 'pass',
640
- 'At least one issue-specific workflow/data assertion passed.',
641
- collectBusinessAssertionArtifactPaths(passedBusinessAssertions),
642
- now,
643
- { passed_assertions: passedBusinessAssertions.map((assertion) => assertion.assertion) }
644
- ));
645
- return { outcome: 'business_assertion_passed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };
646
- }
647
-
648
- if (routeProbes.some((probe) => passed(probe.status))) {
649
- gateResults.push(makeGate(
650
- 'qa_business_assertion',
651
- 'Business assertion',
652
- 'blocked',
653
- 'Browser route loaded, but no issue-specific business assertion passed. Route-only proof cannot accept the run.',
654
- [],
655
- now
656
- ));
657
- return { outcome: 'route_only_pass', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };
658
- }
659
-
660
- gateResults.push(makeGate(
661
- 'qa_business_assertion',
662
- 'Business assertion',
663
- 'blocked',
664
- 'No issue-specific QA assertion was recorded.',
665
- [],
666
- now
667
- ));
668
- return { outcome: 'incomplete', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };
669
- }
670
-
671
- function normalizeQaRun(input?: AIQaRun | AIQaEvaluationInput): AIQaRun | undefined {
672
- if (!input) {
673
- return undefined;
674
- }
675
- if ((input as AIQaRun).outcome && Array.isArray((input as AIQaRun).gateResults)) {
676
- return input as AIQaRun;
677
- }
678
- return buildAIQaRun(input as AIQaEvaluationInput);
679
- }
680
-
681
- function statusLooksFailed(value: any): boolean {
682
- const normalized = cleanText(value, 120).toLowerCase();
683
- return !!normalized && /(fail|failed|error|blocked|missing|empty|stale|skipped|not ready|not_ready|could not|cannot)/i.test(normalized);
684
- }
685
-
686
- function statusLooksPassed(value: any): boolean {
687
- const normalized = cleanText(value, 120).toLowerCase();
688
- return !!normalized && /(pass|passed|success|complete|completed|ready|published|deployed|live|merged)/i.test(normalized);
689
- }
690
-
691
- function addGateOnce(gates: AIRunGateResult[], gate: AIRunGateResult): void {
692
- if (gates.some((entry) => entry.key === gate.key && entry.status === gate.status && entry.reason === gate.reason)) {
693
- return;
694
- }
695
- gates.push(gate);
696
- }
697
-
698
- export function classifyAIRunOutcome(input: AIRunOutcomeInput = {}): AIRunOutcomeDecision {
699
- const now = isoNow(input.now);
700
- const gates = Array.isArray(input.gates) ? [...input.gates] : [];
701
- const warnings: string[] = [];
702
- const qa = normalizeQaRun(input.qa);
703
- if (qa) {
704
- for (const gate of qa.gateResults) {
705
- addGateOnce(gates, gate);
706
- }
707
- }
708
-
709
- if (input.manualHandoff === true) {
710
- return {
711
- outcome: 'manual_handoff',
712
- reason: 'Run requires manual handoff.',
713
- nextAction: 'Ask a human operator to resolve the blocked run.',
714
- gates,
715
- warnings,
716
- recordedAt: now
717
- };
718
- }
719
- if (input.stopped === true || /stop|stopped|cancel|cancelled|paused/i.test(`${input.status || ''} ${input.phase || ''}`)) {
720
- return {
721
- outcome: 'stopped',
722
- reason: 'Run was stopped before accepted evidence was recorded.',
723
- nextAction: 'Resume or restart only if the request is still active.',
724
- gates,
725
- warnings,
726
- recordedAt: now
727
- };
728
- }
729
- if (input.rejected === true) {
730
- return {
731
- outcome: 'rejected',
732
- reason: 'Run was explicitly rejected.',
733
- nextAction: 'Start a repair run from the failing evidence.',
734
- gates,
735
- warnings,
736
- recordedAt: now
737
- };
738
- }
739
-
740
- const blockedHotfixCommitGate = gates.find((gate) => gate.key === 'hotfix_commit_proof' && (gate.status === 'blocked' || gate.status === 'fail'));
741
- if (blockedHotfixCommitGate) {
742
- return {
743
- outcome: 'release_blocked',
744
- reason: `Hotfix cannot be treated as durable until GitHub commit proof passes: ${blockedHotfixCommitGate.reason}`,
745
- nextAction: 'Commit and push the hotfix to GitHub, record sourceCommitSha/githubCommitUrl/gitPushStatus, then rerun the smallest release gate.',
746
- gates,
747
- warnings,
748
- recordedAt: now
749
- };
750
- }
751
- const blockedNoBlindLoopGate = gates.find((gate) => gate.key === 'manager_no_blind_loop_policy' && gate.status === 'blocked');
752
- if (blockedNoBlindLoopGate) {
753
- return {
754
- outcome: 'manual_handoff',
755
- reason: `Manager parked the run to avoid a blind loop: ${blockedNoBlindLoopGate.reason}`,
756
- nextAction: 'Collect new material evidence or approve the specific recovery decision before any more model/code repair.',
757
- gates,
758
- warnings,
759
- recordedAt: now
760
- };
761
- }
762
- const blockedSupportDiagnosisBeforeRepairGate = gates.find((gate) => gate.key === 'support_diagnosis_before_repair' && gate.status === 'blocked');
763
- if (blockedSupportDiagnosisBeforeRepairGate) {
764
- return {
765
- outcome: 'manual_handoff',
766
- reason: `Support repair is parked until root-cause diagnosis validates: ${blockedSupportDiagnosisBeforeRepairGate.reason}`,
767
- nextAction: 'Run read-only support diagnosis, record support_diagnosis_gate with owner_files and before/action/after proof, then retry only the owner-scoped repair.',
768
- gates,
769
- warnings,
770
- recordedAt: now
771
- };
772
- }
773
-
774
- if (qa?.outcome === 'infra_failed') {
775
- return {
776
- outcome: 'qa_infra_failed',
777
- reason: 'QA infrastructure failed before product validation.',
778
- nextAction: 'Repair QA harness dependencies, ports, browser, Mongo, or startup before another model repair loop.',
779
- gates,
780
- warnings,
781
- recordedAt: now
782
- };
783
- }
784
- if (qa?.outcome === 'compile_failed') {
785
- return {
786
- outcome: 'build_failed',
787
- reason: 'Compile/build evidence failed or was stale.',
788
- nextAction: 'Repair compile/build first, then rerun QA from the same failed step.',
789
- gates,
790
- warnings,
791
- recordedAt: now
792
- };
793
- }
794
- if (qa?.outcome === 'route_failed') {
795
- return {
796
- outcome: 'qa_incomplete',
797
- reason: 'Browser route probe failed before business proof.',
798
- nextAction: 'Repair route/auth/startup issue and rerun the same browser route probe.',
799
- gates,
800
- warnings,
801
- recordedAt: now
802
- };
803
- }
804
- const blockedAICoderJourneyContractGate = gates.find((gate) => gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'));
805
- if (blockedAICoderJourneyContractGate) {
806
- const claimedSuccess = input.explicitAccepted === true || input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus) || statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);
807
- return {
808
- outcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',
809
- reason: claimedSuccess
810
- ? `AICoder run claimed success without a valid Journey Contract: ${blockedAICoderJourneyContractGate.reason}`
811
- : `AICoder workflow is blocked until the Journey Contract validates: ${blockedAICoderJourneyContractGate.reason}`,
812
- nextAction: 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate first/next/last workflow/data story/QA assertions, then rerun workflow build and workflow QA.',
813
- gates,
814
- warnings,
815
- recordedAt: now
816
- };
817
- }
818
- const blockedSupportNextActionContractGate = gates.find((gate) => gate.key === 'support_next_action_contract' && gate.status === 'blocked');
819
- if (
820
- blockedSupportNextActionContractGate
821
- && qa?.outcome !== 'business_assertion_passed'
822
- && input.scorecardPassed !== true
823
- && !statusLooksPassed(input.scorecardStatus)
824
- ) {
825
- return {
826
- outcome: 'manual_handoff',
827
- reason: `Support manager cannot safely continue without a valid next-action contract: ${blockedSupportNextActionContractGate.reason}`,
828
- nextAction: 'Record one validated next-action contract with safeToAutoRun, canRunWithoutCodexMonitor, codexFallbackRequired, preconditions, stop conditions, and success evidence before another autonomous recovery.',
829
- gates,
830
- warnings,
831
- recordedAt: now
832
- };
833
- }
834
- if (qa?.outcome === 'route_only_pass' || qa?.outcome === 'incomplete') {
835
- return {
836
- outcome: input.scorecardPassed === true ? 'false_pass' : 'qa_incomplete',
837
- reason: input.scorecardPassed === true
838
- ? 'Scorecard or workflow status passed without issue-specific business assertion proof.'
839
- : 'QA has not recorded issue-specific business assertion proof.',
840
- nextAction: 'Add before/action/after workflow proof with screenshot/data assertions before acceptance.',
841
- gates,
842
- warnings,
843
- recordedAt: now
844
- };
845
- }
846
- if (qa?.outcome === 'business_assertion_failed') {
847
- return {
848
- outcome: input.terminal === true ? 'rejected' : 'qa_incomplete',
849
- reason: 'Issue-specific business assertion failed.',
850
- nextAction: 'Repair the product/data defect and rerun the failing assertion.',
851
- gates,
852
- warnings,
853
- recordedAt: now
854
- };
855
- }
856
-
857
- const hasBusinessPass = qa?.outcome === 'business_assertion_passed';
858
- const scorecardPassed = input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus);
859
- const releaseBlockers: string[] = [];
860
- if (statusLooksFailed(input.deployStatus)) {
861
- releaseBlockers.push(`deploy=${cleanText(input.deployStatus, 120)}`);
862
- }
863
- if (statusLooksFailed(input.publishStatus)) {
864
- releaseBlockers.push(`publish=${cleanText(input.publishStatus, 120)}`);
865
- }
866
- if (statusLooksFailed(input.sampleDataStatus)) {
867
- releaseBlockers.push(`sample_data=${cleanText(input.sampleDataStatus, 120)}`);
868
- }
869
- if (releaseBlockers.length && (scorecardPassed || hasBusinessPass)) {
870
- addGateOnce(gates, makeGate(
871
- 'release',
872
- 'Release/deploy',
873
- 'fail',
874
- `Final acceptance is blocked after QA/scorecard because release gates failed: ${releaseBlockers.join(', ')}.`,
875
- [],
876
- now
877
- ));
878
- return {
879
- outcome: 'release_blocked',
880
- reason: `Release gates failed after QA/scorecard: ${releaseBlockers.join(', ')}.`,
881
- nextAction: 'Repair deploy/publish/sample-data coverage before marking the run accepted.',
882
- gates,
883
- warnings,
884
- recordedAt: now
885
- };
886
- }
887
-
888
- if (scorecardPassed && !hasBusinessPass) {
889
- warnings.push('scorecard_pass_without_business_assertion');
890
- addGateOnce(gates, makeGate(
891
- 'business_assertion_required',
892
- 'Business assertion',
893
- 'blocked',
894
- 'Scorecard passed, but no issue-specific business assertion proof was recorded.',
895
- [],
896
- now
897
- ));
898
- return {
899
- outcome: 'false_pass',
900
- reason: 'Scorecard-only proof is not acceptance.',
901
- nextAction: 'Record issue-specific workflow/data proof, then reclassify the run.',
902
- gates,
903
- warnings,
904
- recordedAt: now
905
- };
906
- }
907
-
908
- const statusPhase = `${input.status || ''} ${input.phase || ''}`;
909
- if ((input.explicitAccepted === true || statusLooksPassed(statusPhase) || scorecardPassed) && hasBusinessPass) {
910
- return {
911
- outcome: 'accepted',
912
- reason: 'Run has terminal success signal and issue-specific business assertion proof.',
913
- nextAction: 'No repair action required.',
914
- gates,
915
- warnings,
916
- recordedAt: now
917
- };
918
- }
919
-
920
- if (statusLooksFailed(statusPhase)) {
921
- return {
922
- outcome: 'rejected',
923
- reason: 'Run ended with a failure status and no accepted proof.',
924
- nextAction: 'Classify the failing gate and rerun the smallest repair step.',
925
- gates,
926
- warnings,
927
- recordedAt: now
928
- };
929
- }
930
-
931
- return {
932
- outcome: 'unknown',
933
- reason: 'Run does not have enough normalized evidence for a terminal label.',
934
- nextAction: 'Ingest QA, deploy, assistant, usage, and commit evidence before using this run for training.',
935
- gates,
936
- warnings,
937
- recordedAt: now
938
- };
939
- }
940
-
941
- export function buildAIRun(input: Omit<AIRun, 'outcome' | 'gates'> & {
942
- outcome?: AIRunOutcomeLabel;
943
- gates?: AIRunGateResult[];
944
- scorecardPassed?: boolean;
945
- deployStatus?: string;
946
- publishStatus?: string;
947
- sampleDataStatus?: string;
948
- manualHandoff?: boolean;
949
- stopped?: boolean;
950
- rejected?: boolean;
951
- explicitAccepted?: boolean;
952
- terminal?: boolean;
953
- now?: Date | string;
954
- }): AIRun {
955
- const decision = input.outcome
956
- ? {
957
- outcome: input.outcome,
958
- gates: input.gates || [],
959
- warnings: input.warnings || [],
960
- nextAction: input.nextAction || '',
961
- reason: '',
962
- recordedAt: isoNow(input.now)
963
- }
964
- : classifyAIRunOutcome({
965
- source: input.source,
966
- status: input.status,
967
- phase: input.phase,
968
- qa: input.qa,
969
- gates: input.gates,
970
- scorecardPassed: input.scorecardPassed,
971
- deployStatus: input.deployStatus,
972
- publishStatus: input.publishStatus,
973
- sampleDataStatus: input.sampleDataStatus,
974
- manualHandoff: input.manualHandoff,
975
- stopped: input.stopped,
976
- rejected: input.rejected,
977
- explicitAccepted: input.explicitAccepted,
978
- terminal: input.terminal,
979
- now: input.now
980
- });
981
- return {
982
- id: input.id,
983
- source: input.source || 'unknown',
984
- sourceIds: input.sourceIds || {},
985
- title: input.title,
986
- status: input.status,
987
- phase: input.phase,
988
- startedAt: input.startedAt,
989
- completedAt: input.completedAt,
990
- outcome: decision.outcome,
991
- events: Array.isArray(input.events) ? input.events : [],
992
- gates: decision.gates,
993
- qa: normalizeQaRun(input.qa),
994
- cost: input.cost,
995
- nextAction: decision.nextAction,
996
- warnings: decision.warnings,
997
- metadata: input.metadata
998
- };
999
- }
1000
-
1001
- export function buildAIRunCost(entries: OpenAIUsageCostEntry[] = []): AIRunCost {
1002
- const cost: AIRunCost = {
1003
- inputTokens: 0,
1004
- cachedInputTokens: 0,
1005
- outputTokens: 0,
1006
- totalTokens: 0,
1007
- estimatedUsd: 0,
1008
- models: [],
1009
- categories: {},
1010
- sources: {},
1011
- surfaces: {},
1012
- manualEstimatedUsd: 0,
1013
- untrackedEstimatedUsd: 0,
1014
- untrackedWarnings: []
1015
- };
1016
- for (const entry of normalizeOpenAIUsageRowsForCosting(entries)) {
1017
- const category = cleanText(entry.category, 120) || 'unknown';
1018
- const source = cleanText(entry.usage_source ?? entry.usageSource, 80) || 'unknown';
1019
- const surface = cleanText(entry.usage_surface ?? entry.usageSurface, 80) || 'unknown';
1020
- const isManual = entry.is_manual === true || entry.isManual === true || source === 'manual_codex';
1021
- const isUntracked = entry.is_untracked === true || entry.isUntracked === true;
1022
- const untrackedReason = cleanText(entry.untracked_reason ?? entry.untrackedReason, 500);
1023
- const model = cleanText(entry.model, 120);
1024
- const inputTokens = Number(entry.input_tokens ?? entry.inputTokens ?? 0) || 0;
1025
- const cachedInputTokens = Number(entry.cached_input_tokens ?? entry.cachedInputTokens ?? 0) || 0;
1026
- const outputTokens = Number(entry.output_tokens ?? entry.outputTokens ?? 0) || 0;
1027
- const totalTokens = Number(entry.total_tokens ?? entry.totalTokens ?? (inputTokens + outputTokens)) || 0;
1028
- const estimatedUsd = Number(entry.cost_estimate ?? entry.estimatedUsd ?? 0) || 0;
1029
- cost.inputTokens += inputTokens;
1030
- cost.cachedInputTokens += cachedInputTokens;
1031
- cost.outputTokens += outputTokens;
1032
- cost.totalTokens += totalTokens;
1033
- cost.estimatedUsd += estimatedUsd;
1034
- if (isManual) {
1035
- cost.manualEstimatedUsd = Number(cost.manualEstimatedUsd || 0) + estimatedUsd;
1036
- }
1037
- if (isUntracked) {
1038
- cost.untrackedEstimatedUsd = Number(cost.untrackedEstimatedUsd || 0) + estimatedUsd;
1039
- const warning = untrackedReason || `${source} usage is an estimate outside managed runner telemetry.`;
1040
- if (warning && !cost.untrackedWarnings?.includes(warning)) {
1041
- cost.untrackedWarnings?.push(warning);
1042
- }
1043
- }
1044
- if (model && !cost.models.includes(model)) {
1045
- cost.models.push(model);
1046
- }
1047
- if (!cost.categories[category]) {
1048
- cost.categories[category] = {
1049
- inputTokens: 0,
1050
- cachedInputTokens: 0,
1051
- outputTokens: 0,
1052
- totalTokens: 0,
1053
- estimatedUsd: 0,
1054
- count: 0
1055
- };
1056
- }
1057
- cost.categories[category].inputTokens += inputTokens;
1058
- cost.categories[category].cachedInputTokens += cachedInputTokens;
1059
- cost.categories[category].outputTokens += outputTokens;
1060
- cost.categories[category].totalTokens += totalTokens;
1061
- cost.categories[category].estimatedUsd += estimatedUsd;
1062
- cost.categories[category].count += 1;
1063
- if (!cost.sources?.[source]) {
1064
- cost.sources![source] = {
1065
- inputTokens: 0,
1066
- cachedInputTokens: 0,
1067
- outputTokens: 0,
1068
- totalTokens: 0,
1069
- estimatedUsd: 0,
1070
- count: 0,
1071
- manualCount: 0,
1072
- untrackedCount: 0
1073
- };
1074
- }
1075
- cost.sources[source].inputTokens += inputTokens;
1076
- cost.sources[source].cachedInputTokens += cachedInputTokens;
1077
- cost.sources[source].outputTokens += outputTokens;
1078
- cost.sources[source].totalTokens += totalTokens;
1079
- cost.sources[source].estimatedUsd += estimatedUsd;
1080
- cost.sources[source].count += 1;
1081
- if (isManual) {
1082
- cost.sources[source].manualCount += 1;
1083
- }
1084
- if (isUntracked) {
1085
- cost.sources[source].untrackedCount += 1;
1086
- }
1087
- if (!cost.surfaces?.[surface]) {
1088
- cost.surfaces![surface] = {
1089
- totalTokens: 0,
1090
- estimatedUsd: 0,
1091
- count: 0
1092
- };
1093
- }
1094
- cost.surfaces[surface].totalTokens += totalTokens;
1095
- cost.surfaces[surface].estimatedUsd += estimatedUsd;
1096
- cost.surfaces[surface].count += 1;
1097
- }
1098
- cost.estimatedUsd = Number(cost.estimatedUsd.toFixed(6));
1099
- cost.manualEstimatedUsd = Number(Number(cost.manualEstimatedUsd || 0).toFixed(6));
1100
- cost.untrackedEstimatedUsd = Number(Number(cost.untrackedEstimatedUsd || 0).toFixed(6));
1101
- for (const category of Object.keys(cost.categories)) {
1102
- cost.categories[category].estimatedUsd = Number(cost.categories[category].estimatedUsd.toFixed(6));
1103
- }
1104
- for (const source of Object.keys(cost.sources || {})) {
1105
- cost.sources![source].estimatedUsd = Number(cost.sources![source].estimatedUsd.toFixed(6));
1106
- }
1107
- for (const surface of Object.keys(cost.surfaces || {})) {
1108
- cost.surfaces![surface].estimatedUsd = Number(cost.surfaces![surface].estimatedUsd.toFixed(6));
1109
- }
1110
- return cost;
1111
- }
1112
-
1113
- export function redactAIRunTrainingExample(example: AIRunTrainingExample): AIRunTrainingExample {
1114
- const redact = (value: string): string => cleanText(value, 5000)
1115
- .replace(/mongodb(?:\+srv)?:\/\/[^\s"'<>]+/ig, '[redacted-mongo-url]')
1116
- .replace(/\b(?:sk|ghp|xoxb|AKIA)[A-Za-z0-9_\-]{12,}\b/g, '[redacted-secret]')
1117
- .replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z]{2,}\b/ig, '[redacted-email]');
1118
- return {
1119
- ...example,
1120
- inputSummary: redact(example.inputSummary),
1121
- actionSummary: redact(example.actionSummary),
1122
- evidence: cleanList(example.evidence, 80, 5000).map(redact)
1123
- };
1124
- }