@resolveio/server-lib 22.3.55 → 22.3.56

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 (691) 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-terminal-conversation.collection.d.ts +2 -0
  20. package/collections/ai-terminal-conversation.collection.js +140 -0
  21. package/collections/ai-terminal-conversation.collection.js.map +1 -0
  22. package/collections/ai-terminal-issue-report.collection.d.ts +2 -0
  23. package/collections/ai-terminal-issue-report.collection.js +148 -0
  24. package/collections/ai-terminal-issue-report.collection.js.map +1 -0
  25. package/collections/ai-terminal-message.collection.d.ts +2 -0
  26. package/collections/ai-terminal-message.collection.js +121 -0
  27. package/collections/ai-terminal-message.collection.js.map +1 -0
  28. package/collections/app-setting.collection.d.ts +3 -0
  29. package/collections/app-setting.collection.js +103 -0
  30. package/collections/app-setting.collection.js.map +1 -0
  31. package/collections/app-status.collection.d.ts +3 -0
  32. package/collections/app-status.collection.js +57 -0
  33. package/collections/app-status.collection.js.map +1 -0
  34. package/collections/communication-metric.collection.d.ts +2 -0
  35. package/collections/communication-metric.collection.js +133 -0
  36. package/collections/communication-metric.collection.js.map +1 -0
  37. package/collections/counter.collection.d.ts +3 -0
  38. package/collections/counter.collection.js +56 -0
  39. package/collections/counter.collection.js.map +1 -0
  40. package/collections/cron-job-history.collection.d.ts +3 -0
  41. package/collections/cron-job-history.collection.js +137 -0
  42. package/collections/cron-job-history.collection.js.map +1 -0
  43. package/collections/cron-job.collection.d.ts +3 -0
  44. package/collections/cron-job.collection.js +92 -0
  45. package/collections/cron-job.collection.js.map +1 -0
  46. package/collections/customer-notification.collection.d.ts +3 -0
  47. package/collections/customer-notification.collection.js +130 -0
  48. package/collections/customer-notification.collection.js.map +1 -0
  49. package/collections/customer-portal-password.collection.d.ts +3 -0
  50. package/collections/customer-portal-password.collection.js +75 -0
  51. package/collections/customer-portal-password.collection.js.map +1 -0
  52. package/collections/email-history.collection.d.ts +3 -0
  53. package/collections/email-history.collection.js +127 -0
  54. package/collections/email-history.collection.js.map +1 -0
  55. package/collections/email-verified.collection.d.ts +3 -0
  56. package/collections/email-verified.collection.js +62 -0
  57. package/collections/email-verified.collection.js.map +1 -0
  58. package/collections/file.collection.d.ts +3 -0
  59. package/collections/file.collection.js +74 -0
  60. package/collections/file.collection.js.map +1 -0
  61. package/collections/flag-update.collection.d.ts +3 -0
  62. package/collections/flag-update.collection.js +57 -0
  63. package/collections/flag-update.collection.js.map +1 -0
  64. package/collections/flag.collection.d.ts +3 -0
  65. package/collections/flag.collection.js +57 -0
  66. package/collections/flag.collection.js.map +1 -0
  67. package/collections/log-method-latency.collection.d.ts +3 -0
  68. package/collections/log-method-latency.collection.js +77 -0
  69. package/collections/log-method-latency.collection.js.map +1 -0
  70. package/collections/log-subscription.collection.d.ts +3 -0
  71. package/collections/log-subscription.collection.js +80 -0
  72. package/collections/log-subscription.collection.js.map +1 -0
  73. package/collections/log.collection.d.ts +3 -0
  74. package/collections/log.collection.js +93 -0
  75. package/collections/log.collection.js.map +1 -0
  76. package/collections/logged-in-users.collection.d.ts +3 -0
  77. package/collections/logged-in-users.collection.js +67 -0
  78. package/collections/logged-in-users.collection.js.map +1 -0
  79. package/collections/monitor-cpu.collection.d.ts +3 -0
  80. package/collections/monitor-cpu.collection.js +65 -0
  81. package/collections/monitor-cpu.collection.js.map +1 -0
  82. package/collections/monitor-function.collection.d.ts +3 -0
  83. package/collections/monitor-function.collection.js +74 -0
  84. package/collections/monitor-function.collection.js.map +1 -0
  85. package/collections/monitor-memory.collection.d.ts +3 -0
  86. package/collections/monitor-memory.collection.js +77 -0
  87. package/collections/monitor-memory.collection.js.map +1 -0
  88. package/collections/monitor-mongo.collection.d.ts +3 -0
  89. package/collections/monitor-mongo.collection.js +71 -0
  90. package/collections/monitor-mongo.collection.js.map +1 -0
  91. package/collections/notification.collection.d.ts +3 -0
  92. package/collections/notification.collection.js +57 -0
  93. package/collections/notification.collection.js.map +1 -0
  94. package/collections/openai-usage-ledger.collection.d.ts +2 -0
  95. package/collections/openai-usage-ledger.collection.js +124 -0
  96. package/collections/openai-usage-ledger.collection.js.map +1 -0
  97. package/collections/report-builder-dashboard-builder.collection.d.ts +3 -0
  98. package/collections/report-builder-dashboard-builder.collection.js +109 -0
  99. package/collections/report-builder-dashboard-builder.collection.js.map +1 -0
  100. package/collections/report-builder-library.collection.d.ts +3 -0
  101. package/collections/report-builder-library.collection.js +87 -0
  102. package/collections/report-builder-library.collection.js.map +1 -0
  103. package/collections/report-builder-report.collection.d.ts +4 -0
  104. package/collections/report-builder-report.collection.js +184 -0
  105. package/collections/report-builder-report.collection.js.map +1 -0
  106. package/collections/user-group.collection.d.ts +4 -0
  107. package/collections/user-group.collection.js +89 -0
  108. package/collections/user-group.collection.js.map +1 -0
  109. package/collections/user-guide.collection.d.ts +3 -0
  110. package/collections/user-guide.collection.js +57 -0
  111. package/collections/user-guide.collection.js.map +1 -0
  112. package/collections/user.collection.d.ts +4 -0
  113. package/collections/user.collection.js +180 -0
  114. package/collections/user.collection.js.map +1 -0
  115. package/cron/cron.d.ts +14 -0
  116. package/cron/cron.js +216 -0
  117. package/cron/cron.js.map +1 -0
  118. package/fixtures/cron-jobs.d.ts +1 -0
  119. package/fixtures/cron-jobs.js +150 -0
  120. package/fixtures/cron-jobs.js.map +1 -0
  121. package/fixtures/init.d.ts +1 -0
  122. package/fixtures/init.js +91 -0
  123. package/fixtures/init.js.map +1 -0
  124. package/http/auth.d.ts +2 -0
  125. package/http/auth.js +906 -0
  126. package/http/auth.js.map +1 -0
  127. package/http/health.d.ts +1 -0
  128. package/http/health.js +11 -0
  129. package/http/health.js.map +1 -0
  130. package/http/home.d.ts +1 -0
  131. package/http/home.js +134 -0
  132. package/http/home.js.map +1 -0
  133. package/http/slow-query-publication.d.ts +2 -0
  134. package/http/slow-query-publication.js +99 -0
  135. package/http/slow-query-publication.js.map +1 -0
  136. package/index.d.ts +1 -0
  137. package/index.js +19 -0
  138. package/index.js.map +1 -0
  139. package/managers/ai-assistant-codex-manager.manager.d.ts +67 -0
  140. package/managers/ai-assistant-codex-manager.manager.js +1113 -0
  141. package/managers/ai-assistant-codex-manager.manager.js.map +1 -0
  142. package/managers/communication-metric.manager.d.ts +16 -0
  143. package/managers/communication-metric.manager.js +134 -0
  144. package/managers/communication-metric.manager.js.map +1 -0
  145. package/managers/cron.manager.d.ts +20 -0
  146. package/managers/cron.manager.js +534 -0
  147. package/managers/cron.manager.js.map +1 -0
  148. package/managers/customer-notification-content.manager.d.ts +55 -0
  149. package/managers/customer-notification-content.manager.js +158 -0
  150. package/managers/customer-notification-content.manager.js.map +1 -0
  151. package/managers/diagnostic-manager-bootstrap.d.ts +9 -0
  152. package/managers/diagnostic-manager-bootstrap.js +260 -0
  153. package/managers/diagnostic-manager-bootstrap.js.map +1 -0
  154. package/managers/error-auto-fix.manager.d.ts +149 -0
  155. package/managers/error-auto-fix.manager.js +3064 -0
  156. package/managers/error-auto-fix.manager.js.map +1 -0
  157. package/managers/local-log.manager.d.ts +18 -0
  158. package/managers/local-log.manager.js +88 -0
  159. package/managers/local-log.manager.js.map +1 -0
  160. package/managers/method.manager.d.ts +83 -0
  161. package/managers/method.manager.js +1941 -0
  162. package/managers/method.manager.js.map +1 -0
  163. package/managers/mongo.manager.d.ts +224 -0
  164. package/managers/mongo.manager.js +5000 -0
  165. package/managers/mongo.manager.js.map +1 -0
  166. package/managers/monitor.manager.d.ts +70 -0
  167. package/managers/monitor.manager.js +550 -0
  168. package/managers/monitor.manager.js.map +1 -0
  169. package/managers/openai-usage-ledger.manager.d.ts +15 -0
  170. package/managers/openai-usage-ledger.manager.js +144 -0
  171. package/managers/openai-usage-ledger.manager.js.map +1 -0
  172. package/managers/slow-query-verifier.manager.d.ts +144 -0
  173. package/managers/slow-query-verifier.manager.js +3857 -0
  174. package/managers/slow-query-verifier.manager.js.map +1 -0
  175. package/managers/slow-query.manager.d.ts +28 -0
  176. package/managers/slow-query.manager.js +468 -0
  177. package/managers/slow-query.manager.js.map +1 -0
  178. package/managers/subscription.manager.d.ts +169 -0
  179. package/managers/subscription.manager.js +3434 -0
  180. package/managers/subscription.manager.js.map +1 -0
  181. package/managers/websocket.manager.d.ts +73 -0
  182. package/managers/websocket.manager.js +673 -0
  183. package/managers/websocket.manager.js.map +1 -0
  184. package/managers/worker-dispatcher.manager.d.ts +120 -0
  185. package/managers/worker-dispatcher.manager.js +1266 -0
  186. package/managers/worker-dispatcher.manager.js.map +1 -0
  187. package/managers/worker-server.manager.d.ts +35 -0
  188. package/managers/worker-server.manager.js +582 -0
  189. package/managers/worker-server.manager.js.map +1 -0
  190. package/methods/accounts.d.ts +2 -0
  191. package/methods/accounts.js +624 -0
  192. package/methods/accounts.js.map +1 -0
  193. package/methods/ai-terminal.d.ts +336 -0
  194. package/methods/ai-terminal.js +22782 -0
  195. package/methods/ai-terminal.js.map +1 -0
  196. package/methods/app-settings.d.ts +2 -0
  197. package/methods/app-settings.js +169 -0
  198. package/methods/app-settings.js.map +1 -0
  199. package/methods/aws.d.ts +2 -0
  200. package/methods/aws.js +877 -0
  201. package/methods/aws.js.map +1 -0
  202. package/methods/collections.d.ts +2 -0
  203. package/methods/collections.js +719 -0
  204. package/methods/collections.js.map +1 -0
  205. package/methods/counters.d.ts +2 -0
  206. package/methods/counters.js +113 -0
  207. package/methods/counters.js.map +1 -0
  208. package/methods/cron-jobs.d.ts +2 -0
  209. package/methods/cron-jobs.js +2475 -0
  210. package/methods/cron-jobs.js.map +1 -0
  211. package/methods/customer-notifications.d.ts +2 -0
  212. package/methods/customer-notifications.js +528 -0
  213. package/methods/customer-notifications.js.map +1 -0
  214. package/methods/diagnostics.d.ts +2 -0
  215. package/methods/diagnostics.js +703 -0
  216. package/methods/diagnostics.js.map +1 -0
  217. package/methods/flag-updates.d.ts +2 -0
  218. package/methods/flag-updates.js +8 -0
  219. package/methods/flag-updates.js.map +1 -0
  220. package/methods/flags.d.ts +2 -0
  221. package/methods/flags.js +8 -0
  222. package/methods/flags.js.map +1 -0
  223. package/methods/logs.d.ts +2 -0
  224. package/methods/logs.js +751 -0
  225. package/methods/logs.js.map +1 -0
  226. package/methods/mongo-explorer.d.ts +2 -0
  227. package/methods/mongo-explorer.js +1808 -0
  228. package/methods/mongo-explorer.js.map +1 -0
  229. package/methods/monitor.d.ts +2 -0
  230. package/methods/monitor.js +543 -0
  231. package/methods/monitor.js.map +1 -0
  232. package/methods/pdf.d.ts +2 -0
  233. package/methods/pdf.js +1216 -0
  234. package/methods/pdf.js.map +1 -0
  235. package/methods/publications.d.ts +1 -0
  236. package/methods/publications.js +183 -0
  237. package/methods/publications.js.map +1 -0
  238. package/methods/report-builder.d.ts +2 -0
  239. package/methods/report-builder.js +3094 -0
  240. package/methods/report-builder.js.map +1 -0
  241. package/methods/support.d.ts +2 -0
  242. package/methods/support.js +430 -0
  243. package/methods/support.js.map +1 -0
  244. package/models/ai-terminal-conversation.model.d.ts +17 -0
  245. package/models/ai-terminal-conversation.model.js +4 -0
  246. package/models/ai-terminal-conversation.model.js.map +1 -0
  247. package/models/ai-terminal-issue-report.model.d.ts +19 -0
  248. package/models/ai-terminal-issue-report.model.js +4 -0
  249. package/models/ai-terminal-issue-report.model.js.map +1 -0
  250. package/models/ai-terminal-message.model.d.ts +22 -0
  251. package/models/ai-terminal-message.model.js +4 -0
  252. package/models/ai-terminal-message.model.js.map +1 -0
  253. package/models/app-setting.model.d.ts +16 -0
  254. package/models/app-setting.model.js +4 -0
  255. package/models/app-setting.model.js.map +1 -0
  256. package/{src/models/app-status.model.ts → models/app-status.model.d.ts} +2 -3
  257. package/models/app-status.model.js +4 -0
  258. package/models/app-status.model.js.map +1 -0
  259. package/{src/models/billing-logged-in-users.model.ts → models/billing-logged-in-users.model.d.ts} +4 -5
  260. package/models/billing-logged-in-users.model.js +4 -0
  261. package/models/billing-logged-in-users.model.js.map +1 -0
  262. package/models/collection-document.model.d.ts +21 -0
  263. package/models/collection-document.model.js +4 -0
  264. package/models/collection-document.model.js.map +1 -0
  265. package/models/communication-metric.model.d.ts +20 -0
  266. package/models/communication-metric.model.js +4 -0
  267. package/models/communication-metric.model.js.map +1 -0
  268. package/{src/models/counter.model.ts → models/counter.model.d.ts} +3 -4
  269. package/models/counter.model.js +4 -0
  270. package/models/counter.model.js.map +1 -0
  271. package/models/cron-job-history.model.d.ts +15 -0
  272. package/models/cron-job-history.model.js +4 -0
  273. package/models/cron-job-history.model.js.map +1 -0
  274. package/models/cron-job.model.d.ts +14 -0
  275. package/models/cron-job.model.js +4 -0
  276. package/models/cron-job.model.js.map +1 -0
  277. package/models/customer-notification.model.d.ts +26 -0
  278. package/models/customer-notification.model.js +4 -0
  279. package/models/customer-notification.model.js.map +1 -0
  280. package/models/customer-portal-password.model.d.ts +11 -0
  281. package/models/customer-portal-password.model.js +4 -0
  282. package/models/customer-portal-password.model.js.map +1 -0
  283. package/models/dialog.model.d.ts +23 -0
  284. package/models/dialog.model.js +4 -0
  285. package/models/dialog.model.js.map +1 -0
  286. package/models/email-history.model.d.ts +31 -0
  287. package/{src/models/email-history.model.ts → models/email-history.model.js} +4 -35
  288. package/models/email-history.model.js.map +1 -0
  289. package/{src/models/email-verified.model.ts → models/email-verified.model.d.ts} +5 -6
  290. package/models/email-verified.model.js +4 -0
  291. package/models/email-verified.model.js.map +1 -0
  292. package/{src/models/file.model.ts → models/file.model.d.ts} +7 -8
  293. package/models/file.model.js +4 -0
  294. package/models/file.model.js.map +1 -0
  295. package/{src/models/flag-update.model.ts → models/flag-update.model.d.ts} +3 -4
  296. package/models/flag-update.model.js +4 -0
  297. package/models/flag-update.model.js.map +1 -0
  298. package/{src/models/flag.model.ts → models/flag.model.d.ts} +3 -4
  299. package/models/flag.model.js +4 -0
  300. package/models/flag.model.js.map +1 -0
  301. package/models/log-method-latency.model.d.ts +10 -0
  302. package/models/log-method-latency.model.js +4 -0
  303. package/models/log-method-latency.model.js.map +1 -0
  304. package/{src/models/log-subscription.model.ts → models/log-subscription.model.d.ts} +9 -11
  305. package/models/log-subscription.model.js +4 -0
  306. package/models/log-subscription.model.js.map +1 -0
  307. package/models/log.model.d.ts +17 -0
  308. package/models/log.model.js +4 -0
  309. package/models/log.model.js.map +1 -0
  310. package/{src/models/logged-in-users.model.ts → models/logged-in-users.model.d.ts} +5 -6
  311. package/models/logged-in-users.model.js +4 -0
  312. package/models/logged-in-users.model.js.map +1 -0
  313. package/{src/models/method-response.model.ts → models/method-response.model.d.ts} +6 -7
  314. package/models/method-response.model.js +4 -0
  315. package/models/method-response.model.js.map +1 -0
  316. package/models/method.model.d.ts +26 -0
  317. package/models/method.model.js +4 -0
  318. package/models/method.model.js.map +1 -0
  319. package/{src/models/monitor-cpu.model.ts → models/monitor-cpu.model.d.ts} +7 -9
  320. package/models/monitor-cpu.model.js +4 -0
  321. package/models/monitor-cpu.model.js.map +1 -0
  322. package/models/monitor-function.model.d.ts +14 -0
  323. package/models/monitor-function.model.js +4 -0
  324. package/models/monitor-function.model.js.map +1 -0
  325. package/models/monitor-memory.model.d.ts +15 -0
  326. package/models/monitor-memory.model.js +4 -0
  327. package/models/monitor-memory.model.js.map +1 -0
  328. package/models/monitor-mongo.model.d.ts +13 -0
  329. package/models/monitor-mongo.model.js +4 -0
  330. package/models/monitor-mongo.model.js.map +1 -0
  331. package/{src/models/notification.model.ts → models/notification.model.d.ts} +4 -6
  332. package/models/notification.model.js +4 -0
  333. package/models/notification.model.js.map +1 -0
  334. package/models/openai-usage-ledger.model.d.ts +15 -0
  335. package/models/openai-usage-ledger.model.js +4 -0
  336. package/models/openai-usage-ledger.model.js.map +1 -0
  337. package/models/pagination.model.d.ts +11 -0
  338. package/models/pagination.model.js +28 -0
  339. package/models/pagination.model.js.map +1 -0
  340. package/models/permission.model.d.ts +12 -0
  341. package/models/permission.model.js +4 -0
  342. package/models/permission.model.js.map +1 -0
  343. package/models/report-builder-dashboard-builder.model.d.ts +25 -0
  344. package/models/report-builder-dashboard-builder.model.js +4 -0
  345. package/models/report-builder-dashboard-builder.model.js.map +1 -0
  346. package/models/report-builder-library.model.d.ts +17 -0
  347. package/models/report-builder-library.model.js +4 -0
  348. package/models/report-builder-library.model.js.map +1 -0
  349. package/models/report-builder-report.model.d.ts +121 -0
  350. package/models/report-builder-report.model.js +4 -0
  351. package/models/report-builder-report.model.js.map +1 -0
  352. package/models/report-builder.model.d.ts +61 -0
  353. package/models/report-builder.model.js +4 -0
  354. package/models/report-builder.model.js.map +1 -0
  355. package/models/select-data-label.model.d.ts +9 -0
  356. package/models/select-data-label.model.js +4 -0
  357. package/models/select-data-label.model.js.map +1 -0
  358. package/models/server-message.model.d.ts +32 -0
  359. package/models/server-message.model.js +4 -0
  360. package/models/server-message.model.js.map +1 -0
  361. package/models/slow-query-report.model.d.ts +23 -0
  362. package/models/slow-query-report.model.js +4 -0
  363. package/models/slow-query-report.model.js.map +1 -0
  364. package/models/subscription.model.d.ts +31 -0
  365. package/models/subscription.model.js +4 -0
  366. package/models/subscription.model.js.map +1 -0
  367. package/models/support-ticket.model.d.ts +87 -0
  368. package/models/support-ticket.model.js +4 -0
  369. package/models/support-ticket.model.js.map +1 -0
  370. package/models/user-group.model.d.ts +20 -0
  371. package/models/user-group.model.js +4 -0
  372. package/models/user-group.model.js.map +1 -0
  373. package/{src/models/user-guide.model.ts → models/user-guide.model.d.ts} +4 -5
  374. package/models/user-guide.model.js +4 -0
  375. package/models/user-guide.model.js.map +1 -0
  376. package/models/user.model.d.ts +84 -0
  377. package/models/user.model.js +4 -0
  378. package/models/user.model.js.map +1 -0
  379. package/package.json +1 -1
  380. package/private/images/ResolveIO.png +0 -0
  381. package/public_api.js +116 -0
  382. package/public_api.js.map +1 -0
  383. package/publications/ai-terminal.d.ts +1 -0
  384. package/publications/ai-terminal.js +122 -0
  385. package/publications/ai-terminal.js.map +1 -0
  386. package/publications/app-settings.d.ts +2 -0
  387. package/publications/app-settings.js +28 -0
  388. package/publications/app-settings.js.map +1 -0
  389. package/publications/app-status.d.ts +2 -0
  390. package/publications/app-status.js +16 -0
  391. package/publications/app-status.js.map +1 -0
  392. package/publications/cron-jobs.d.ts +2 -0
  393. package/publications/cron-jobs.js +88 -0
  394. package/publications/cron-jobs.js.map +1 -0
  395. package/publications/customer-notifications.d.ts +2 -0
  396. package/publications/customer-notifications.js +161 -0
  397. package/publications/customer-notifications.js.map +1 -0
  398. package/publications/files.d.ts +2 -0
  399. package/publications/files.js +36 -0
  400. package/publications/files.js.map +1 -0
  401. package/publications/flags-update.d.ts +2 -0
  402. package/publications/flags-update.js +22 -0
  403. package/publications/flags-update.js.map +1 -0
  404. package/publications/flags.d.ts +2 -0
  405. package/publications/flags.js +22 -0
  406. package/publications/flags.js.map +1 -0
  407. package/publications/logs.d.ts +2 -0
  408. package/publications/logs.js +164 -0
  409. package/publications/logs.js.map +1 -0
  410. package/publications/notifications.d.ts +2 -0
  411. package/publications/notifications.js +16 -0
  412. package/publications/notifications.js.map +1 -0
  413. package/publications/report-builder-dashboard-builders.d.ts +2 -0
  414. package/publications/report-builder-dashboard-builders.js +42 -0
  415. package/publications/report-builder-dashboard-builders.js.map +1 -0
  416. package/publications/report-builder-libraries.d.ts +2 -0
  417. package/publications/report-builder-libraries.js +90 -0
  418. package/publications/report-builder-libraries.js.map +1 -0
  419. package/publications/report-builder-reports.d.ts +2 -0
  420. package/publications/report-builder-reports.js +50 -0
  421. package/publications/report-builder-reports.js.map +1 -0
  422. package/publications/super-admin.d.ts +2 -0
  423. package/publications/super-admin.js +16 -0
  424. package/publications/super-admin.js.map +1 -0
  425. package/publications/user-groups.d.ts +1 -0
  426. package/publications/user-groups.js +16 -0
  427. package/publications/user-groups.js.map +1 -0
  428. package/publications/user-guides.d.ts +1 -0
  429. package/publications/user-guides.js +16 -0
  430. package/publications/user-guides.js.map +1 -0
  431. package/resolveio-server-app.d.ts +70 -0
  432. package/resolveio-server-app.js +801 -0
  433. package/resolveio-server-app.js.map +1 -0
  434. package/server-app.d.ts +228 -0
  435. package/server-app.js +3566 -0
  436. package/server-app.js.map +1 -0
  437. package/services/codex-client.d.ts +126 -0
  438. package/services/codex-client.js +1622 -0
  439. package/services/codex-client.js.map +1 -0
  440. package/services/openai-client.d.ts +46 -0
  441. package/services/openai-client.js +318 -0
  442. package/services/openai-client.js.map +1 -0
  443. package/types/error-report.d.ts +25 -0
  444. package/types/error-report.js +4 -0
  445. package/types/error-report.js.map +1 -0
  446. package/types/slow-query-report.d.ts +27 -0
  447. package/types/slow-query-report.js +6 -0
  448. package/types/slow-query-report.js.map +1 -0
  449. package/util/ai-qa-policy.d.ts +124 -0
  450. package/util/ai-qa-policy.js +707 -0
  451. package/util/ai-qa-policy.js.map +1 -0
  452. package/util/ai-runner-artifacts.d.ts +74 -0
  453. package/util/ai-runner-artifacts.js +531 -0
  454. package/util/ai-runner-artifacts.js.map +1 -0
  455. package/util/ai-runner-qa-auth.d.ts +5 -0
  456. package/util/ai-runner-qa-auth.js +357 -0
  457. package/util/ai-runner-qa-auth.js.map +1 -0
  458. package/util/ai-runner-qa-tools.d.ts +19 -0
  459. package/util/ai-runner-qa-tools.js +696 -0
  460. package/util/ai-runner-qa-tools.js.map +1 -0
  461. package/util/common.d.ts +31 -0
  462. package/util/common.js +683 -0
  463. package/util/common.js.map +1 -0
  464. package/util/customer-portal-password.d.ts +13 -0
  465. package/util/customer-portal-password.js +209 -0
  466. package/util/customer-portal-password.js.map +1 -0
  467. package/util/error-reporter.d.ts +52 -0
  468. package/util/error-reporter.js +326 -0
  469. package/util/error-reporter.js.map +1 -0
  470. package/util/error-tracking.d.ts +13 -0
  471. package/util/error-tracking.js +120 -0
  472. package/util/error-tracking.js.map +1 -0
  473. package/util/report-builder-unwinds.d.ts +15 -0
  474. package/util/report-builder-unwinds.js +156 -0
  475. package/util/report-builder-unwinds.js.map +1 -0
  476. package/util/runner-process-janitor.d.ts +25 -0
  477. package/util/runner-process-janitor.js +186 -0
  478. package/util/runner-process-janitor.js.map +1 -0
  479. package/util/schema-report-builder.d.ts +6 -0
  480. package/util/schema-report-builder.js +481 -0
  481. package/util/schema-report-builder.js.map +1 -0
  482. package/util/slow-query-reporter.d.ts +28 -0
  483. package/util/slow-query-reporter.js +226 -0
  484. package/util/slow-query-reporter.js.map +1 -0
  485. package/util/subscription-dependency-context.d.ts +34 -0
  486. package/util/subscription-dependency-context.js +1283 -0
  487. package/util/subscription-dependency-context.js.map +1 -0
  488. package/util/tokenizer.d.ts +5 -0
  489. package/util/tokenizer.js +41 -0
  490. package/util/tokenizer.js.map +1 -0
  491. package/workers/codex-runner.worker.d.ts +1 -0
  492. package/workers/codex-runner.worker.js +192 -0
  493. package/workers/codex-runner.worker.js.map +1 -0
  494. package/.nodemon.json +0 -5
  495. package/.vscode/settings.json +0 -21
  496. package/AGENTS.md +0 -189
  497. package/README.md +0 -22
  498. package/build_package.sh +0 -5
  499. package/compileDTS.pl +0 -64
  500. package/docs/ai-assistant-nightly-eval.md +0 -65
  501. package/docs/ai-assistant-preflight-checklist.md +0 -23
  502. package/docs/ai-assistant-report-builder-bridge-playbook.md +0 -115
  503. package/eslint-plugin-custom/index.js +0 -7
  504. package/eslint-plugin-custom/rules/no-filter-zero-index.js +0 -44
  505. package/eslint.config.js +0 -103
  506. package/gulpfile.js +0 -216
  507. package/methodAndPublicationListGenerator.py +0 -375
  508. package/mongodbensurers.js +0 -2
  509. package/mongostop.js +0 -3
  510. package/scripts/cleanup-bypassed-callmethod-logs.js +0 -616
  511. package/settings.development.json +0 -25
  512. package/settings.development.redacted.json +0 -25
  513. package/src/.env +0 -12
  514. package/src/ai/assistant-core-heuristics.ts +0 -379
  515. package/src/ai/resolveio-platform-intelligence-memory-corpus.ts +0 -185
  516. package/src/ai/resolveio-platform-intelligence-memory.ts +0 -325
  517. package/src/ai/resolveio-platform-intelligence.ts +0 -462
  518. package/src/client-server-app.ts +0 -12
  519. package/src/collections/ai-terminal-conversation.collection.ts +0 -91
  520. package/src/collections/ai-terminal-issue-report.collection.ts +0 -99
  521. package/src/collections/ai-terminal-message.collection.ts +0 -77
  522. package/src/collections/app-setting.collection.ts +0 -104
  523. package/src/collections/app-status.collection.ts +0 -58
  524. package/src/collections/communication-metric.collection.ts +0 -84
  525. package/src/collections/counter.collection.ts +0 -56
  526. package/src/collections/cron-job-history.collection.ts +0 -94
  527. package/src/collections/cron-job.collection.ts +0 -92
  528. package/src/collections/customer-notification.collection.ts +0 -131
  529. package/src/collections/customer-portal-password.collection.ts +0 -76
  530. package/src/collections/email-history.collection.ts +0 -127
  531. package/src/collections/email-verified.collection.ts +0 -62
  532. package/src/collections/file.collection.ts +0 -74
  533. package/src/collections/flag-update.collection.ts +0 -57
  534. package/src/collections/flag.collection.ts +0 -57
  535. package/src/collections/log-method-latency.collection.ts +0 -77
  536. package/src/collections/log-subscription.collection.ts +0 -80
  537. package/src/collections/log.collection.ts +0 -93
  538. package/src/collections/logged-in-users.collection.ts +0 -67
  539. package/src/collections/monitor-cpu.collection.ts +0 -65
  540. package/src/collections/monitor-function.collection.ts +0 -74
  541. package/src/collections/monitor-memory.collection.ts +0 -77
  542. package/src/collections/monitor-mongo.collection.ts +0 -71
  543. package/src/collections/notification.collection.ts +0 -57
  544. package/src/collections/openai-usage-ledger.collection.ts +0 -77
  545. package/src/collections/report-builder-dashboard-builder.collection.ts +0 -109
  546. package/src/collections/report-builder-library.collection.ts +0 -89
  547. package/src/collections/report-builder-report.collection.ts +0 -184
  548. package/src/collections/user-group.collection.ts +0 -89
  549. package/src/collections/user-guide.collection.ts +0 -57
  550. package/src/collections/user.collection.ts +0 -181
  551. package/src/cron/cron.ts +0 -117
  552. package/src/fixtures/cron-jobs.ts +0 -95
  553. package/src/fixtures/init.ts +0 -35
  554. package/src/http/auth.ts +0 -764
  555. package/src/http/health.ts +0 -7
  556. package/src/http/home.ts +0 -90
  557. package/src/http/slow-query-publication.ts +0 -49
  558. package/src/index.ts +0 -1
  559. package/src/managers/ai-assistant-codex-manager.manager.ts +0 -1131
  560. package/src/managers/communication-metric.manager.ts +0 -82
  561. package/src/managers/cron.manager.ts +0 -333
  562. package/src/managers/customer-notification-content.manager.ts +0 -236
  563. package/src/managers/diagnostic-manager-bootstrap.ts +0 -165
  564. package/src/managers/error-auto-fix.manager.ts +0 -2767
  565. package/src/managers/local-log.manager.ts +0 -113
  566. package/src/managers/method.manager.ts +0 -1827
  567. package/src/managers/mongo.manager.ts +0 -4575
  568. package/src/managers/monitor.manager.ts +0 -507
  569. package/src/managers/openai-usage-ledger.manager.ts +0 -116
  570. package/src/managers/slow-query-verifier.manager.ts +0 -3590
  571. package/src/managers/slow-query.manager.ts +0 -519
  572. package/src/managers/subscription.manager.ts +0 -3128
  573. package/src/managers/websocket.manager.ts +0 -746
  574. package/src/managers/worker-dispatcher.manager.ts +0 -1360
  575. package/src/managers/worker-server.manager.ts +0 -536
  576. package/src/methods/accounts.ts +0 -532
  577. package/src/methods/ai-terminal.ts +0 -23134
  578. package/src/methods/app-settings.ts +0 -114
  579. package/src/methods/aws.ts +0 -649
  580. package/src/methods/collections.ts +0 -641
  581. package/src/methods/counters.ts +0 -69
  582. package/src/methods/cron-jobs.ts +0 -2614
  583. package/src/methods/customer-notifications.ts +0 -458
  584. package/src/methods/diagnostics.ts +0 -616
  585. package/src/methods/flag-updates.ts +0 -7
  586. package/src/methods/flags.ts +0 -7
  587. package/src/methods/logs.ts +0 -657
  588. package/src/methods/mongo-explorer.ts +0 -1880
  589. package/src/methods/monitor.ts +0 -540
  590. package/src/methods/pdf.ts +0 -1236
  591. package/src/methods/publications.ts +0 -129
  592. package/src/methods/report-builder.ts +0 -3300
  593. package/src/methods/support.ts +0 -335
  594. package/src/models/ai-terminal-conversation.model.ts +0 -19
  595. package/src/models/ai-terminal-issue-report.model.ts +0 -21
  596. package/src/models/ai-terminal-message.model.ts +0 -24
  597. package/src/models/app-setting.model.ts +0 -17
  598. package/src/models/collection-document.model.ts +0 -24
  599. package/src/models/communication-metric.model.ts +0 -23
  600. package/src/models/cron-job-history.model.ts +0 -16
  601. package/src/models/cron-job.model.ts +0 -15
  602. package/src/models/customer-notification.model.ts +0 -28
  603. package/src/models/customer-portal-password.model.ts +0 -12
  604. package/src/models/dialog.model.ts +0 -25
  605. package/src/models/log-method-latency.model.ts +0 -11
  606. package/src/models/log.model.ts +0 -19
  607. package/src/models/method.model.ts +0 -25
  608. package/src/models/monitor-function.model.ts +0 -16
  609. package/src/models/monitor-memory.model.ts +0 -17
  610. package/src/models/monitor-mongo.model.ts +0 -15
  611. package/src/models/openai-usage-ledger.model.ts +0 -16
  612. package/src/models/pagination.model.ts +0 -35
  613. package/src/models/permission.model.ts +0 -14
  614. package/src/models/report-builder-dashboard-builder.model.ts +0 -29
  615. package/src/models/report-builder-library.model.ts +0 -20
  616. package/src/models/report-builder-report.model.ts +0 -136
  617. package/src/models/report-builder.model.ts +0 -68
  618. package/src/models/select-data-label.model.ts +0 -9
  619. package/src/models/server-message.model.ts +0 -31
  620. package/src/models/slow-query-report.model.ts +0 -23
  621. package/src/models/subscription.model.ts +0 -73
  622. package/src/models/support-ticket.model.ts +0 -104
  623. package/src/models/user-group.model.ts +0 -24
  624. package/src/models/user.model.ts +0 -96
  625. package/src/private/images/ResolveIO.png +0 -0
  626. package/src/publications/ai-terminal.ts +0 -73
  627. package/src/publications/app-settings.ts +0 -25
  628. package/src/publications/app-status.ts +0 -13
  629. package/src/publications/cron-jobs.ts +0 -40
  630. package/src/publications/customer-notifications.ts +0 -101
  631. package/src/publications/files.ts +0 -33
  632. package/src/publications/flags-update.ts +0 -19
  633. package/src/publications/flags.ts +0 -19
  634. package/src/publications/logs.ts +0 -163
  635. package/src/publications/notifications.ts +0 -13
  636. package/src/publications/report-builder-dashboard-builders.ts +0 -39
  637. package/src/publications/report-builder-libraries.ts +0 -41
  638. package/src/publications/report-builder-reports.ts +0 -47
  639. package/src/publications/super-admin.ts +0 -13
  640. package/src/publications/user-groups.ts +0 -12
  641. package/src/publications/user-guides.ts +0 -12
  642. package/src/resolveio-server-app.ts +0 -617
  643. package/src/server-app.ts +0 -3354
  644. package/src/services/codex-client.ts +0 -1223
  645. package/src/services/openai-client.ts +0 -265
  646. package/src/types/error-report.ts +0 -26
  647. package/src/types/js-tiktoken.d.ts +0 -11
  648. package/src/types/slow-query-report.ts +0 -28
  649. package/src/util/ai-qa-policy.ts +0 -879
  650. package/src/util/ai-runner-artifacts.ts +0 -430
  651. package/src/util/ai-runner-qa-auth.ts +0 -356
  652. package/src/util/ai-runner-qa-tools.ts +0 -708
  653. package/src/util/common.ts +0 -649
  654. package/src/util/customer-portal-password.ts +0 -183
  655. package/src/util/error-reporter.ts +0 -332
  656. package/src/util/error-tracking.ts +0 -79
  657. package/src/util/report-builder-unwinds.ts +0 -180
  658. package/src/util/runner-process-janitor.ts +0 -195
  659. package/src/util/schema-report-builder.ts +0 -448
  660. package/src/util/slow-query-reporter.ts +0 -216
  661. package/src/util/subscription-dependency-context.ts +0 -1096
  662. package/src/util/tokenizer.ts +0 -38
  663. package/src/workers/codex-runner.worker.ts +0 -142
  664. package/start_server.sh +0 -5
  665. package/tests/ai-assistant-corpus-build.ts +0 -484
  666. package/tests/ai-assistant-corpus-replay-e2e.ts +0 -774
  667. package/tests/ai-assistant-data-parity-e2e.ts +0 -1989
  668. package/tests/ai-assistant-eval-triage.ts +0 -831
  669. package/tests/ai-assistant-openai-e2e.ts +0 -1061
  670. package/tests/ai-assistant-openai-git-e2e.ts +0 -155
  671. package/tests/ai-assistant-preflight-matrix.ts +0 -215
  672. package/tests/ai-assistant-routing-eval.test.ts +0 -560
  673. package/tests/ai-assistant-snf-live-eval.ts +0 -975
  674. package/tests/ai-assistant-utils.test.ts +0 -2968
  675. package/tests/ai-runner-contract.test.ts +0 -287
  676. package/tests/error-reporter.test.ts +0 -145
  677. package/tests/method-publication-generator.test.ts +0 -46
  678. package/tests/report-builder-linking.test.ts +0 -79
  679. package/tests/resolveio-platform-intelligence.test.ts +0 -352
  680. package/tests/server-app-cron-owner.test.ts +0 -127
  681. package/tests/subscription-connect-race.test.ts +0 -158
  682. package/tests/subscription-dependency-context.test.ts +0 -324
  683. package/tests/subscription-manager-collection-tracking.test.ts +0 -86
  684. package/tests/subscription-manager-invalidation.test.ts +0 -86
  685. package/tsconfig.json +0 -34
  686. /package/{src/private → private}/email-templates/enrollment.html +0 -0
  687. /package/{src/private → private}/email-templates/forgot-password.html +0 -0
  688. /package/{src/private → private}/email-templates/support-ticket-deleted.html +0 -0
  689. /package/{src/private → private}/email-templates/support-ticket-modified.html +0 -0
  690. /package/{src/private → private}/email-templates/support-ticket.html +0 -0
  691. /package/{src/public_api.ts → public_api.d.ts} +0 -0
@@ -0,0 +1,696 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildResolveIORunnerQaEnvScript = buildResolveIORunnerQaEnvScript;
4
+ exports.buildResolveIORunnerLocalQaScript = buildResolveIORunnerLocalQaScript;
5
+ exports.buildResolveIORunnerLocalQaStopperScript = buildResolveIORunnerLocalQaStopperScript;
6
+ exports.buildResolveIORunnerBugfixComparisonQaScript = buildResolveIORunnerBugfixComparisonQaScript;
7
+ exports.buildResolveIORunnerQaToolsReadme = buildResolveIORunnerQaToolsReadme;
8
+ var runner_process_janitor_1 = require("./runner-process-janitor");
9
+ function shellDoubleQuote(value) {
10
+ return String(value || '').replace(/["\\$`]/g, '\\$&');
11
+ }
12
+ function normalizePort(value, fallback) {
13
+ var parsed = Number.parseInt(String(value || ''), 10);
14
+ return Number.isFinite(parsed) && parsed > 0 ? String(parsed) : fallback;
15
+ }
16
+ function envVar(mode, suffix) {
17
+ return mode === 'support' ? "RESOLVEIO_SUPPORT_QA_".concat(suffix) : "RESOLVEIO_RUNNER_QA_".concat(suffix);
18
+ }
19
+ function buildResolveIORunnerQaEnvScript(options) {
20
+ if (options === void 0) { options = {}; }
21
+ var mode = options.mode || 'runner';
22
+ var altMode = mode === 'support' ? 'runner' : 'support';
23
+ var tmpRoot = options.tmpRoot || (mode === 'support' ? '/tmp/resolveio-support-qa' : '/tmp/resolveio-ai-runner-qa');
24
+ var homeRoot = options.homeRoot || "".concat(tmpRoot, "/home");
25
+ var defaultPort = normalizePort(options.qaClientPort, '4200');
26
+ var username = shellDoubleQuote(options.defaultUsername || 'admin');
27
+ var password = shellDoubleQuote(options.defaultPassword || '');
28
+ var jobId = shellDoubleQuote(options.jobId || '');
29
+ var ownerId = shellDoubleQuote(options.ownerId || '');
30
+ var runnerToken = shellDoubleQuote(options.runnerToken || '');
31
+ var toolsBinPath = options.toolsBinPath || '';
32
+ var browserslistPath = options.browserslistPath || '';
33
+ var mongodbBinaryCachePath = options.mongodbBinaryCachePath || '';
34
+ var clientPortVar = envVar(mode, 'CLIENT_PORT');
35
+ var altClientPortVar = envVar(altMode, 'CLIENT_PORT');
36
+ var clientUrlVar = envVar(mode, 'CLIENT_URL');
37
+ var altClientUrlVar = envVar(altMode, 'CLIENT_URL');
38
+ var serverUrlVar = envVar(mode, 'SERVER_URL');
39
+ var altServerUrlVar = envVar(altMode, 'SERVER_URL');
40
+ var usernameVar = envVar(mode, 'USERNAME');
41
+ var altUsernameVar = envVar(altMode, 'USERNAME');
42
+ var passwordVar = envVar(mode, 'PASSWORD');
43
+ var altPasswordVar = envVar(altMode, 'PASSWORD');
44
+ var viewportWidthVar = envVar(mode, 'VIEWPORT_WIDTH');
45
+ var altViewportWidthVar = envVar(altMode, 'VIEWPORT_WIDTH');
46
+ var viewportHeightVar = envVar(mode, 'VIEWPORT_HEIGHT');
47
+ var altViewportHeightVar = envVar(altMode, 'VIEWPORT_HEIGHT');
48
+ var timeoutVar = envVar(mode, 'ANGULAR_STARTUP_TIMEOUT_SECONDS');
49
+ var altTimeoutVar = envVar(altMode, 'ANGULAR_STARTUP_TIMEOUT_SECONDS');
50
+ var prebundleVar = envVar(mode, 'ANGULAR_PREBUNDLE');
51
+ var altPrebundleVar = envVar(altMode, 'ANGULAR_PREBUNDLE');
52
+ var reuseVar = envVar(mode, 'REUSE_RUNNING');
53
+ var altReuseVar = envVar(altMode, 'REUSE_RUNNING');
54
+ var keepaliveVar = envVar(mode, 'KEEPALIVE');
55
+ var altKeepaliveVar = envVar(altMode, 'KEEPALIVE');
56
+ var browserLoopVar = mode === 'support' ? 'RESOLVEIO_SUPPORT_QA_BROWSER' : 'RESOLVEIO_RUNNER_QA_BROWSER';
57
+ return [
58
+ "export ".concat(mode === 'support' ? 'RESOLVEIO_SUPPORT_QA_TMP' : 'RESOLVEIO_RUNNER_QA_TMP', "=\"").concat('${' + (mode === 'support' ? 'RESOLVEIO_SUPPORT_QA_TMP' : 'RESOLVEIO_RUNNER_QA_TMP') + ':-' + tmpRoot + '}', "\""),
59
+ "export ".concat(mode === 'support' ? 'RESOLVEIO_SUPPORT_QA_HOME' : 'RESOLVEIO_RUNNER_QA_HOME', "=\"").concat('${' + (mode === 'support' ? 'RESOLVEIO_SUPPORT_QA_HOME' : 'RESOLVEIO_RUNNER_QA_HOME') + ':-' + homeRoot + '}', "\""),
60
+ "RESOLVEIO_QA_TMP=\"".concat('${' + (mode === 'support' ? 'RESOLVEIO_SUPPORT_QA_TMP' : 'RESOLVEIO_RUNNER_QA_TMP') + '}', "\""),
61
+ "RESOLVEIO_QA_HOME=\"".concat('${' + (mode === 'support' ? 'RESOLVEIO_SUPPORT_QA_HOME' : 'RESOLVEIO_RUNNER_QA_HOME') + '}', "\""),
62
+ 'mkdir -p "$RESOLVEIO_QA_HOME/.nvm" "$RESOLVEIO_QA_TMP/npm-cache" "$RESOLVEIO_QA_TMP/mongodb-binaries" "$RESOLVEIO_QA_TMP/mongodb-memory-server-core"',
63
+ 'if [ ! -f "$RESOLVEIO_QA_HOME/.nvm/nvm.sh" ]; then',
64
+ ' cat > "$RESOLVEIO_QA_HOME/.nvm/nvm.sh" <<\'RESOLVEIO_NVM_SHIM\'',
65
+ 'nvm() {',
66
+ ' case "$1" in',
67
+ ' use|install|alias) return 0 ;;',
68
+ ' current) node -v 2>/dev/null || true; return 0 ;;',
69
+ ' *) return 0 ;;',
70
+ ' esac',
71
+ '}',
72
+ 'RESOLVEIO_NVM_SHIM',
73
+ 'fi',
74
+ 'export HOME="$RESOLVEIO_QA_HOME"',
75
+ 'export NVM_DIR="$RESOLVEIO_QA_HOME/.nvm"',
76
+ toolsBinPath ? "export PATH=\"".concat(toolsBinPath, ":$PATH\"") : '',
77
+ 'export NODE_ENV=development',
78
+ '# Local QA must start the application HTTP server even when launched from a dedicated support-manager worker.',
79
+ 'export IS_WORKERS_ENABLED=false',
80
+ 'export IS_WORKER_INSTANCE=false',
81
+ 'export DISABLE_WORKER_SERVER_CONNECTION=false',
82
+ 'export SUPPORT_CODEX_MANAGER_PROCESS_ONLY=false',
83
+ 'export SUPPORT_AUTO_MANAGER_PROCESS_ONLY=false',
84
+ 'export AI_ASSISTANT_CODEX_MANAGER_PROCESS_ONLY=false',
85
+ browserslistPath ? "export BROWSERSLIST_CONFIG=\"".concat(browserslistPath, "\"") : '',
86
+ "export ".concat(clientPortVar, "=\"").concat('${' + clientPortVar + ':-${' + altClientPortVar + ':-' + defaultPort + '}}', "\""),
87
+ "export ".concat(altClientPortVar, "=\"").concat('${' + altClientPortVar + ':-${' + clientPortVar + '}}', "\""),
88
+ "export ".concat(clientUrlVar, "=\"").concat('${' + clientUrlVar + ':-${' + altClientUrlVar + ':-http://localhost:${' + clientPortVar + '}}}', "\""),
89
+ "export ".concat(altClientUrlVar, "=\"").concat('${' + altClientUrlVar + ':-${' + clientUrlVar + '}}', "\""),
90
+ "export ".concat(serverUrlVar, "=\"").concat('${' + serverUrlVar + ':-${' + altServerUrlVar + ':-http://localhost:8080}}', "\""),
91
+ "export ".concat(altServerUrlVar, "=\"").concat('${' + altServerUrlVar + ':-${' + serverUrlVar + '}}', "\""),
92
+ 'export ADDITIONAL_ALLOWED_ORIGINS="${ADDITIONAL_ALLOWED_ORIGINS:-$' + clientUrlVar + '}"',
93
+ "export ".concat(viewportWidthVar, "=\"").concat('${' + viewportWidthVar + ':-${' + altViewportWidthVar + ':-1920}}', "\""),
94
+ "export ".concat(altViewportWidthVar, "=\"").concat('${' + altViewportWidthVar + ':-${' + viewportWidthVar + '}}', "\""),
95
+ "export ".concat(viewportHeightVar, "=\"").concat('${' + viewportHeightVar + ':-${' + altViewportHeightVar + ':-1080}}', "\""),
96
+ "export ".concat(altViewportHeightVar, "=\"").concat('${' + altViewportHeightVar + ':-${' + viewportHeightVar + '}}', "\""),
97
+ "export ".concat(timeoutVar, "=\"").concat('${' + timeoutVar + ':-${' + altTimeoutVar + ':-900}}', "\""),
98
+ "export ".concat(altTimeoutVar, "=\"").concat('${' + altTimeoutVar + ':-${' + timeoutVar + '}}', "\""),
99
+ "export ".concat(prebundleVar, "=\"").concat('${' + prebundleVar + ':-${' + altPrebundleVar + ':-false}}', "\""),
100
+ "export ".concat(altPrebundleVar, "=\"").concat('${' + altPrebundleVar + ':-${' + prebundleVar + '}}', "\""),
101
+ "export ".concat(reuseVar, "=\"").concat('${' + reuseVar + ':-${' + altReuseVar + ':-true}}', "\""),
102
+ "export ".concat(altReuseVar, "=\"").concat('${' + altReuseVar + ':-${' + reuseVar + '}}', "\""),
103
+ "export ".concat(keepaliveVar, "=\"").concat('${' + keepaliveVar + ':-${' + altKeepaliveVar + ':-false}}', "\""),
104
+ "export ".concat(altKeepaliveVar, "=\"").concat('${' + altKeepaliveVar + ':-${' + keepaliveVar + '}}', "\""),
105
+ "export ".concat(usernameVar, "=\"").concat('${' + usernameVar + ':-${' + altUsernameVar + ':-' + username + '}}', "\""),
106
+ "export ".concat(altUsernameVar, "=\"").concat('${' + altUsernameVar + ':-${' + usernameVar + '}}', "\""),
107
+ "export ".concat(passwordVar, "=\"").concat('${' + passwordVar + ':-${' + altPasswordVar + ':-' + password + '}}', "\""),
108
+ "export ".concat(altPasswordVar, "=\"").concat('${' + altPasswordVar + ':-${' + passwordVar + '}}', "\""),
109
+ "export ".concat(envVar(mode, 'JOB_ID'), "=\"").concat('${' + envVar(mode, 'JOB_ID') + ':-${' + envVar(altMode, 'JOB_ID') + ':-' + jobId + '}}', "\""),
110
+ "export ".concat(envVar(altMode, 'JOB_ID'), "=\"").concat('${' + envVar(altMode, 'JOB_ID') + ':-${' + envVar(mode, 'JOB_ID') + '}}', "\""),
111
+ "export ".concat(envVar(mode, 'OWNER_ID'), "=\"").concat('${' + envVar(mode, 'OWNER_ID') + ':-${' + envVar(altMode, 'OWNER_ID') + ':-' + ownerId + '}}', "\""),
112
+ "export ".concat(envVar(altMode, 'OWNER_ID'), "=\"").concat('${' + envVar(altMode, 'OWNER_ID') + ':-${' + envVar(mode, 'OWNER_ID') + '}}', "\""),
113
+ "export ".concat(envVar(mode, 'RUNNER_TOKEN'), "=\"").concat('${' + envVar(mode, 'RUNNER_TOKEN') + ':-${' + envVar(altMode, 'RUNNER_TOKEN') + ':-' + runnerToken + '}}', "\""),
114
+ "export ".concat(envVar(altMode, 'RUNNER_TOKEN'), "=\"").concat('${' + envVar(altMode, 'RUNNER_TOKEN') + ':-${' + envVar(mode, 'RUNNER_TOKEN') + '}}', "\""),
115
+ 'export PUPPETEER_CACHE_DIR="${PUPPETEER_CACHE_DIR:-/var/lib/resolveio/puppeteer}"',
116
+ 'if [ ! -d "$PUPPETEER_CACHE_DIR" ] || [ ! -w "$PUPPETEER_CACHE_DIR" ]; then',
117
+ ' export PUPPETEER_CACHE_DIR="$RESOLVEIO_QA_TMP/puppeteer"',
118
+ ' mkdir -p "$PUPPETEER_CACHE_DIR"',
119
+ 'fi',
120
+ "for ".concat(browserLoopVar, " in \"$PUPPETEER_CACHE_DIR\"/chrome-headless-shell/linux-*/chrome-headless-shell-linux64/chrome-headless-shell \"$PUPPETEER_CACHE_DIR\"/chrome/linux-*/chrome-linux64/chrome; do"),
121
+ " if [ -x \"$".concat(browserLoopVar, "\" ]; then"),
122
+ " export PUPPETEER_EXECUTABLE_PATH=\"$".concat(browserLoopVar, "\""),
123
+ " export CHROME_BIN=\"$".concat(browserLoopVar, "\""),
124
+ ' break',
125
+ ' fi',
126
+ 'done',
127
+ "unset ".concat(browserLoopVar),
128
+ 'export NPM_CONFIG_CACHE="$RESOLVEIO_QA_TMP/npm-cache"',
129
+ 'export NPM_CONFIG_PREFER_OFFLINE=true',
130
+ 'export NPM_CONFIG_PRODUCTION=false',
131
+ 'export npm_config_production=false',
132
+ 'export RESOLVEIO_SUPPORT_MONGOMS_PACKAGE_ROOT="$RESOLVEIO_QA_TMP/mongodb-memory-server-core"',
133
+ 'export MONGOMS_DOWNLOAD_DIR="$RESOLVEIO_QA_TMP/mongodb-binaries"',
134
+ mongodbBinaryCachePath ? "export RESOLVEIO_SUPPORT_SHARED_MONGOMS_DOWNLOAD_DIR=\"".concat(mongodbBinaryCachePath, "\"") : '',
135
+ 'export MONGOMS_VERSION="${MONGOMS_VERSION:-7.0.14}"',
136
+ ''
137
+ ].filter(function (line) { return line !== ''; }).join('\n');
138
+ }
139
+ function buildResolveIORunnerLocalQaScript() {
140
+ return [
141
+ '#!/usr/bin/env bash',
142
+ 'set -u',
143
+ 'TOOLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"',
144
+ 'source "$TOOLS_DIR/env.sh"',
145
+ 'PROJECT_ROOT="${1:-$(pwd)}"',
146
+ 'PROJECT_ROOT="$(cd "$PROJECT_ROOT" && pwd)"',
147
+ 'ARTIFACT_DIR="$PROJECT_ROOT/qa-artifacts"',
148
+ 'mkdir -p "$ARTIFACT_DIR"',
149
+ 'CLIENT_URL="${RESOLVEIO_RUNNER_QA_CLIENT_URL:-${RESOLVEIO_SUPPORT_QA_CLIENT_URL:-http://localhost:${RESOLVEIO_RUNNER_QA_CLIENT_PORT:-${RESOLVEIO_SUPPORT_QA_CLIENT_PORT:-4200}}}}"',
150
+ 'SERVER_URL="${RESOLVEIO_RUNNER_QA_SERVER_URL:-${RESOLVEIO_SUPPORT_QA_SERVER_URL:-http://localhost:8080}}"',
151
+ 'CLIENT_PORT="${RESOLVEIO_RUNNER_QA_CLIENT_PORT:-${RESOLVEIO_SUPPORT_QA_CLIENT_PORT:-4200}}"',
152
+ 'SERVER_PORT="${RESOLVEIO_RUNNER_QA_SERVER_PORT:-${RESOLVEIO_SUPPORT_QA_SERVER_PORT:-8080}}"',
153
+ 'MONGO_PORT="${RESOLVEIO_RUNNER_QA_MONGO_PORT:-${RESOLVEIO_SUPPORT_QA_MONGO_PORT:-3001}}"',
154
+ 'INSPECT_PORT="${RESOLVEIO_RUNNER_QA_INSPECT_PORT:-${RESOLVEIO_SUPPORT_QA_INSPECT_PORT:-9229}}"',
155
+ 'STARTUP_TIMEOUT="${RESOLVEIO_RUNNER_QA_ANGULAR_STARTUP_TIMEOUT_SECONDS:-${RESOLVEIO_SUPPORT_QA_ANGULAR_STARTUP_TIMEOUT_SECONDS:-900}}"',
156
+ 'ANGULAR_PREBUNDLE="${RESOLVEIO_RUNNER_QA_ANGULAR_PREBUNDLE:-${RESOLVEIO_SUPPORT_QA_ANGULAR_PREBUNDLE:-false}}"',
157
+ 'REUSE_RUNNING="${RESOLVEIO_RUNNER_QA_REUSE_RUNNING:-${RESOLVEIO_SUPPORT_QA_REUSE_RUNNING:-true}}"',
158
+ 'if [[ "$(basename "$TOOLS_DIR")" == *support* ]]; then',
159
+ ' KEEPALIVE="${RESOLVEIO_SUPPORT_QA_KEEPALIVE:-${RESOLVEIO_RUNNER_QA_KEEPALIVE:-false}}"',
160
+ 'else',
161
+ ' KEEPALIVE="${RESOLVEIO_RUNNER_QA_KEEPALIVE:-${RESOLVEIO_SUPPORT_QA_KEEPALIVE:-false}}"',
162
+ 'fi',
163
+ 'SERVER_STABLE_SECONDS="${RESOLVEIO_RUNNER_QA_SERVER_STABLE_SECONDS:-${RESOLVEIO_SUPPORT_QA_SERVER_STABLE_SECONDS:-20}}"',
164
+ 'LOCK_DIR="$ARTIFACT_DIR/.qa.lock"',
165
+ 'SERVER_PID=""',
166
+ 'CLIENT_PID=""',
167
+ 'SERVER_REQUIRED=0',
168
+ 'RUNNER_REUSED_READY=0',
169
+ 'ANGULAR_PREBUNDLE_ARGS=()',
170
+ 'REPO_ROOT="$(git -C "$PROJECT_ROOT" rev-parse --show-toplevel 2>/dev/null || echo "$PROJECT_ROOT")"',
171
+ (0, runner_process_janitor_1.buildRunnerProcessJanitorShellLibrary)({ mode: 'support' }),
172
+ 'case "${ANGULAR_PREBUNDLE,,}" in',
173
+ ' false|0|no|off) ANGULAR_PREBUNDLE_ARGS=(--prebundle=false) ;;',
174
+ 'esac',
175
+ 'kill_tree() {',
176
+ ' local pid="$1"',
177
+ ' [ -n "$pid" ] || return 0',
178
+ ' for child in $(pgrep -P "$pid" 2>/dev/null || true); do kill_tree "$child"; done',
179
+ ' kill "$pid" >/dev/null 2>&1 || true',
180
+ ' sleep 1',
181
+ ' kill -0 "$pid" >/dev/null 2>&1 && kill -9 "$pid" >/dev/null 2>&1 || true',
182
+ '}',
183
+ 'kill_port_listeners() {',
184
+ ' local port="$1"',
185
+ ' [ -n "$port" ] || return 0',
186
+ ' local pids=""',
187
+ ' if command -v lsof >/dev/null 2>&1; then pids="$pids $(janitor_bounded 3 lsof -ti tcp:"$port")"; fi',
188
+ ' if command -v fuser >/dev/null 2>&1; then pids="$pids $(janitor_bounded 3 fuser -n tcp "$port")"; fi',
189
+ ' if command -v ss >/dev/null 2>&1; then pids="$pids $(janitor_bounded 3 ss -ltnp "sport = :$port" | sed -n \'s/.*pid=\\([0-9][0-9]*\\).*/\\1/p\' || true)"; fi',
190
+ ' for pid in $pids; do',
191
+ ' [ "$pid" = "$$" ] && continue',
192
+ ' kill_tree "$pid"',
193
+ ' done',
194
+ ' sleep 1',
195
+ '}',
196
+ 'RUNNER_ANCESTOR_PIDS=" $$ ${PPID:-} "',
197
+ 'ancestor_pid="${PPID:-}"',
198
+ 'while [ -n "$ancestor_pid" ] && [ "$ancestor_pid" != "0" ] && [ "$ancestor_pid" != "1" ]; do',
199
+ ' ancestor_pid="$(ps -o ppid= -p "$ancestor_pid" 2>/dev/null | tr -d " " || true)"',
200
+ ' [ -n "$ancestor_pid" ] && RUNNER_ANCESTOR_PIDS="$RUNNER_ANCESTOR_PIDS $ancestor_pid "',
201
+ 'done',
202
+ 'skip_cleanup_pid() {',
203
+ ' case "$RUNNER_ANCESTOR_PIDS" in *" $1 "*) return 0 ;; esac',
204
+ ' return 1',
205
+ '}',
206
+ 'cleanup_project_processes() {',
207
+ ' for pid_file in "$ARTIFACT_DIR/server.pid" "$ARTIFACT_DIR/client.pid"; do',
208
+ ' [ -f "$pid_file" ] || continue',
209
+ ' pid="$(cat "$pid_file" 2>/dev/null || true)"',
210
+ ' kill_tree "$pid"',
211
+ ' rm -f "$pid_file"',
212
+ ' done',
213
+ ' for pass in 1 2 3; do',
214
+ ' for port in "$CLIENT_PORT" "$SERVER_PORT" "$MONGO_PORT" "$INSPECT_PORT"; do kill_port_listeners "$port"; done',
215
+ ' for pid in $(ps -eo pid=,args= | awk -v root="$PROJECT_ROOT" \'index($0, root) && $0 !~ /awk -v root=/ && $0 !~ /ps -eo pid=,args=/ && $0 !~ /run-local-qa\\.sh|stop-local-qa\\.sh|bugfix-comparison-qa\\.sh/ && $0 ~ /(ng serve|node .*node_modules\\/\\.bin\\/ng|esbuild|npm run client|start_client\\.sh|npm run server|start_server\\.sh|nodemon|node .*tmp\\/index\\.js|mongod|mongodb-binaries\\/mongod)/ {print $1}\' 2>/dev/null || true); do',
216
+ ' skip_cleanup_pid "$pid" && continue',
217
+ ' kill_tree "$pid"',
218
+ ' done',
219
+ ' if [ -d /proc ]; then',
220
+ ' for proc_cwd in /proc/[0-9]*/cwd; do',
221
+ ' pid="${proc_cwd#/proc/}"',
222
+ ' pid="${pid%/cwd}"',
223
+ ' skip_cleanup_pid "$pid" && continue',
224
+ ' cwd="$(readlink -f "$proc_cwd" 2>/dev/null || true)"',
225
+ ' case "$cwd" in',
226
+ ' "$PROJECT_ROOT"|"$PROJECT_ROOT"/*) kill_tree "$pid" ;;',
227
+ ' esac',
228
+ ' done',
229
+ ' fi',
230
+ ' sleep 1',
231
+ ' done',
232
+ ' local wait_until=$((SECONDS + 60))',
233
+ ' while [ "$SECONDS" -lt "$wait_until" ]; do',
234
+ ' local found=0',
235
+ ' for port in "$CLIENT_PORT" "$SERVER_PORT" "$MONGO_PORT" "$INSPECT_PORT"; do',
236
+ ' if command -v lsof >/dev/null 2>&1 && [ -n "$(janitor_bounded 3 lsof -ti tcp:"$port")" ]; then found=1; fi',
237
+ ' done',
238
+ ' for pid in $(ps -eo pid=,args= | awk -v root="$PROJECT_ROOT" \'index($0, root) && $0 !~ /awk -v root=/ && $0 !~ /ps -eo pid=,args=/ && $0 !~ /run-local-qa\\.sh|stop-local-qa\\.sh|bugfix-comparison-qa\\.sh/ && $0 ~ /(ng serve|node .*node_modules\\/\\.bin\\/ng|esbuild|npm run client|start_client\\.sh|npm run server|start_server\\.sh|nodemon|node .*tmp\\/index\\.js|mongod|mongodb-binaries\\/mongod)/ {print $1}\' 2>/dev/null || true); do',
239
+ ' skip_cleanup_pid "$pid" && continue',
240
+ ' found=1',
241
+ ' done',
242
+ ' [ "$found" = "0" ] && break',
243
+ ' sleep 2',
244
+ ' done',
245
+ '}',
246
+ 'cleanup() {',
247
+ ' [ "${RUNNER_REUSED_READY:-0}" = "1" ] && return 0',
248
+ ' janitor_stop_heartbeat',
249
+ ' janitor_update_manifest_status cleanup_started',
250
+ ' kill_tree "$SERVER_PID"',
251
+ ' kill_tree "$CLIENT_PID"',
252
+ ' cleanup_project_processes',
253
+ ' janitor_update_manifest_status cleanup_complete',
254
+ ' janitor_write_cleanup_status complete 0',
255
+ ' rmdir "$LOCK_DIR" >/dev/null 2>&1 || true',
256
+ '}',
257
+ 'trap cleanup EXIT',
258
+ 'probe_url() { node - "$1" <<\'RESOLVEIO_PROBE\'',
259
+ 'const http = require("http");',
260
+ 'const https = require("https");',
261
+ 'const url = process.argv[2];',
262
+ 'const mod = /^https:/i.test(url) ? https : http;',
263
+ 'const req = mod.get(url, { timeout: 2500 }, (res) => { res.resume(); process.exit(res.statusCode && res.statusCode < 500 ? 0 : 1); });',
264
+ 'req.on("timeout", () => req.destroy(new Error("timeout")));',
265
+ 'req.on("error", () => process.exit(1));',
266
+ 'RESOLVEIO_PROBE',
267
+ '}',
268
+ 'truthy() { case "${1,,}" in true|1|yes|on) return 0 ;; *) return 1 ;; esac; }',
269
+ 'reuse_running_app_if_ready() {',
270
+ ' truthy "$REUSE_RUNNING" || return 1',
271
+ ' [ -d "$PROJECT_ROOT/server" ] && SERVER_REQUIRED=1 || SERVER_REQUIRED=0',
272
+ ' probe_url "$CLIENT_URL" || return 1',
273
+ ' if [ "$SERVER_REQUIRED" = "1" ] && ! probe_url "$SERVER_URL"; then return 1; fi',
274
+ ' echo "ResolveIO AI runner QA reusing already-ready local app at $CLIENT_URL"',
275
+ ' return 0',
276
+ '}',
277
+ 'log_has_fatal() {',
278
+ ' local file="$1"',
279
+ ' [ -f "$file" ] || return 1',
280
+ ' grep -Eiq "Unhandled Rejection|Cannot read properties of undefined|TypeError|ReferenceError|EADDRINUSE|app crashed|Failed to compile|Error: Cannot find module|NG[0-9]{4}|TS[0-9]{4}" "$file"',
281
+ '}',
282
+ 'prepare_angular_cache_dirs() {',
283
+ ' [ -d "$PROJECT_ROOT" ] || return 0',
284
+ ' mkdir -p "$PROJECT_ROOT/.angular/cache" 2>/dev/null || true',
285
+ ' local version=""',
286
+ ' for pkg in "$PROJECT_ROOT/node_modules/@angular/build/package.json" "$PROJECT_ROOT/node_modules/@angular/cli/package.json" "$PROJECT_ROOT/node_modules/@angular-devkit/build-angular/package.json"; do',
287
+ ' if [ -f "$pkg" ]; then',
288
+ ' version="$(node -e "try{console.log(require(process.argv[1]).version||\\\"\\\")}catch(e){}" "$pkg" 2>/dev/null | head -1)"',
289
+ ' [ -n "$version" ] && break',
290
+ ' fi',
291
+ ' done',
292
+ ' [ -n "$version" ] || return 0',
293
+ ' node - "$PROJECT_ROOT/angular.json" "$(basename "$PROJECT_ROOT")" <<\'RESOLVEIO_ANGULAR_CACHE_PROJECTS\' | while IFS= read -r project; do',
294
+ 'const fs = require("fs");',
295
+ 'const path = process.argv[2];',
296
+ 'const fallback = process.argv[3];',
297
+ 'const names = new Set([fallback].filter(Boolean));',
298
+ 'try {',
299
+ ' const parsed = JSON.parse(fs.readFileSync(path, "utf8"));',
300
+ ' if (parsed.defaultProject) names.add(String(parsed.defaultProject));',
301
+ ' if (parsed.projects && typeof parsed.projects === "object") Object.keys(parsed.projects).forEach((name) => names.add(String(name)));',
302
+ '} catch (error) {}',
303
+ 'for (const name of names) console.log(name.replace(/[^A-Za-z0-9._-]/g, "_"));',
304
+ 'RESOLVEIO_ANGULAR_CACHE_PROJECTS',
305
+ ' [ -n "$project" ] || continue',
306
+ ' mkdir -p "$PROJECT_ROOT/.angular/cache/$version/$project/vite" 2>/dev/null || true',
307
+ ' done',
308
+ '}',
309
+ 'server_has_started() {',
310
+ ' local file="$ARTIFACT_DIR/server.log"',
311
+ ' [ -f "$file" ] || return 1',
312
+ ' grep -Eiq "nodemon.*starting|node .*tmp/index\\.js|Running as Worker|Standalone Node Reaper|listening on|server listening|Server listening|app listening|App listening|Finished .default." "$file"',
313
+ '}',
314
+ 'wait_for_server_ready() {',
315
+ ' [ "$SERVER_REQUIRED" = "1" ] || return 0',
316
+ ' local end=$((SECONDS + STARTUP_TIMEOUT))',
317
+ ' while [ "$SECONDS" -lt "$end" ]; do',
318
+ ' if log_has_fatal "$ARTIFACT_DIR/server.log"; then return 4; fi',
319
+ ' if server_has_started; then',
320
+ ' local stable_until=$((SECONDS + SERVER_STABLE_SECONDS))',
321
+ ' while [ "$SECONDS" -lt "$stable_until" ]; do if log_has_fatal "$ARTIFACT_DIR/server.log"; then return 4; fi; sleep 2; done',
322
+ ' return 0',
323
+ ' fi',
324
+ ' if probe_url "$SERVER_URL"; then',
325
+ ' local stable_until=$((SECONDS + SERVER_STABLE_SECONDS))',
326
+ ' while [ "$SECONDS" -lt "$stable_until" ]; do if log_has_fatal "$ARTIFACT_DIR/server.log"; then return 4; fi; sleep 2; done',
327
+ ' return 0',
328
+ ' fi',
329
+ ' sleep 5',
330
+ ' done',
331
+ ' return 4',
332
+ '}',
333
+ 'wait_for_client() {',
334
+ ' local end=$((SECONDS + STARTUP_TIMEOUT))',
335
+ ' while [ "$SECONDS" -lt "$end" ]; do',
336
+ ' if [ -n "$CLIENT_PID" ] && ! kill -0 "$CLIENT_PID" >/dev/null 2>&1; then return 2; fi',
337
+ ' if log_has_fatal "$ARTIFACT_DIR/client.log"; then return 3; fi',
338
+ ' if log_has_fatal "$ARTIFACT_DIR/server.log"; then return 4; fi',
339
+ ' if probe_url "$CLIENT_URL"; then wait_for_server_ready || return $?; return 0; fi',
340
+ ' sleep 5',
341
+ ' done',
342
+ ' return 1',
343
+ '}',
344
+ 'if reuse_running_app_if_ready; then RUNNER_REUSED_READY=1; exit 0; fi',
345
+ 'if ! mkdir "$LOCK_DIR" 2>/dev/null; then',
346
+ ' if janitor_lock_is_live; then',
347
+ ' echo "ResolveIO AI runner QA lock is already held by a live runner for $PROJECT_ROOT; refusing duplicate startup." | tee "$ARTIFACT_DIR/runner.log"',
348
+ ' exit 6',
349
+ ' fi',
350
+ ' echo "ResolveIO AI runner QA lock is stale for $PROJECT_ROOT; cleaning scoped local QA processes before retrying." | tee "$ARTIFACT_DIR/runner.log"',
351
+ ' cleanup_project_processes',
352
+ ' rmdir "$LOCK_DIR" >/dev/null 2>&1 || true',
353
+ ' if ! mkdir "$LOCK_DIR" 2>/dev/null; then',
354
+ ' echo "ResolveIO AI runner QA lock is still held for $PROJECT_ROOT after cleanup. Stop the existing QA runner before starting another." | tee -a "$ARTIFACT_DIR/runner.log"',
355
+ ' exit 6',
356
+ ' fi',
357
+ 'fi',
358
+ 'janitor_write_lock',
359
+ 'cleanup_project_processes',
360
+ ': > "$ARTIFACT_DIR/server.log"',
361
+ ': > "$ARTIFACT_DIR/client.log"',
362
+ ': > "$ARTIFACT_DIR/runner.log"',
363
+ 'janitor_write_manifest',
364
+ 'janitor_start_heartbeat',
365
+ 'janitor_check_resources || exit $?',
366
+ 'if [ -d "$PROJECT_ROOT/server" ]; then',
367
+ ' SERVER_REQUIRED=1',
368
+ ' if node -e "const p=require(process.argv[1]); process.exit(p.scripts&&p.scripts.server?0:1)" "$PROJECT_ROOT/server/package.json" >/dev/null 2>&1; then',
369
+ ' (cd "$PROJECT_ROOT/server" && source "$TOOLS_DIR/env.sh" && npm run server 2>&1 | tee "$ARTIFACT_DIR/server.log") &',
370
+ ' elif [ -x "$PROJECT_ROOT/server/start_server.sh" ]; then',
371
+ ' (cd "$PROJECT_ROOT/server" && source "$TOOLS_DIR/env.sh" && ./start_server.sh 2>&1 | tee "$ARTIFACT_DIR/server.log") &',
372
+ ' else',
373
+ ' echo "ResolveIO AI runner QA cannot find npm server script or start_server.sh for $PROJECT_ROOT/server" | tee "$ARTIFACT_DIR/server.log"',
374
+ ' exit 5',
375
+ ' fi',
376
+ ' SERVER_PID=$!',
377
+ ' wait_for_server_ready',
378
+ ' SERVER_RESULT=$?',
379
+ ' if [ "$SERVER_RESULT" != "0" ]; then echo "ResolveIO AI runner QA server startup fatal error. See $ARTIFACT_DIR/server.log"; exit "$SERVER_RESULT"; fi',
380
+ 'fi',
381
+ 'CLIENT_HOST="${RESOLVEIO_RUNNER_QA_CLIENT_HOST:-${RESOLVEIO_SUPPORT_QA_CLIENT_HOST:-0.0.0.0}}"',
382
+ 'if [ -x "$PROJECT_ROOT/node_modules/.bin/ng" ]; then',
383
+ ' prepare_angular_cache_dirs',
384
+ ' (cd "$PROJECT_ROOT" && source "$TOOLS_DIR/env.sh" && node --max_old_space_size=8048 ./node_modules/.bin/ng serve --watch --configuration local --host "$CLIENT_HOST" --port "$CLIENT_PORT" "${ANGULAR_PREBUNDLE_ARGS[@]}" 2>&1 | tee "$ARTIFACT_DIR/client.log") &',
385
+ 'elif [ -x "$PROJECT_ROOT/start_client.sh" ]; then',
386
+ ' (cd "$PROJECT_ROOT" && source "$TOOLS_DIR/env.sh" && ./start_client.sh 2>&1 | tee "$ARTIFACT_DIR/client.log") &',
387
+ 'elif node -e "const p=require(process.argv[1]); process.exit(p.scripts&&p.scripts.client?0:1)" "$PROJECT_ROOT/package.json" >/dev/null 2>&1; then',
388
+ ' (cd "$PROJECT_ROOT" && source "$TOOLS_DIR/env.sh" && npm run client 2>&1 | tee "$ARTIFACT_DIR/client.log") &',
389
+ 'else',
390
+ ' echo "ResolveIO AI runner QA cannot find Angular CLI, start_client.sh, or npm client script for $PROJECT_ROOT" | tee "$ARTIFACT_DIR/client.log"',
391
+ ' exit 5',
392
+ 'fi',
393
+ 'CLIENT_PID=$!',
394
+ 'wait_for_client',
395
+ 'RESULT=$?',
396
+ 'case "$RESULT" in',
397
+ ' 0)',
398
+ ' echo "ResolveIO AI runner QA local app ready at $CLIENT_URL";',
399
+ ' echo "$SERVER_PID" > "$ARTIFACT_DIR/server.pid";',
400
+ ' echo "$CLIENT_PID" > "$ARTIFACT_DIR/client.pid";',
401
+ ' if truthy "$KEEPALIVE"; then echo "ResolveIO AI runner QA keepalive enabled; server/client remain running until this process is stopped."; wait; fi;',
402
+ ' exit 0',
403
+ ' ;;',
404
+ ' 2) echo "ResolveIO AI runner QA client process exited before $CLIENT_URL became ready. See $ARTIFACT_DIR/client.log"; exit 2 ;;',
405
+ ' 3) echo "ResolveIO AI runner QA client startup fatal error. See $ARTIFACT_DIR/client.log"; exit 3 ;;',
406
+ ' 4) echo "ResolveIO AI runner QA server startup fatal error. See $ARTIFACT_DIR/server.log"; exit 4 ;;',
407
+ ' *) echo "ResolveIO AI runner QA local app did not become ready at $CLIENT_URL within ${STARTUP_TIMEOUT}s. See $ARTIFACT_DIR/client.log and $ARTIFACT_DIR/server.log"; exit 1 ;;',
408
+ 'esac',
409
+ ''
410
+ ].join('\n');
411
+ }
412
+ function buildResolveIORunnerLocalQaStopperScript() {
413
+ return [
414
+ '#!/usr/bin/env bash',
415
+ 'set -u',
416
+ 'TOOLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"',
417
+ 'source "$TOOLS_DIR/env.sh"',
418
+ 'PROJECT_ROOT="${1:-$(pwd)}"',
419
+ 'PROJECT_ROOT="$(cd "$PROJECT_ROOT" && pwd)"',
420
+ 'ARTIFACT_DIR="$PROJECT_ROOT/qa-artifacts"',
421
+ 'CLIENT_PORT="${RESOLVEIO_RUNNER_QA_CLIENT_PORT:-${RESOLVEIO_SUPPORT_QA_CLIENT_PORT:-4200}}"',
422
+ 'SERVER_PORT="${RESOLVEIO_RUNNER_QA_SERVER_PORT:-${RESOLVEIO_SUPPORT_QA_SERVER_PORT:-8080}}"',
423
+ 'MONGO_PORT="${RESOLVEIO_RUNNER_QA_MONGO_PORT:-${RESOLVEIO_SUPPORT_QA_MONGO_PORT:-3001}}"',
424
+ 'INSPECT_PORT="${RESOLVEIO_RUNNER_QA_INSPECT_PORT:-${RESOLVEIO_SUPPORT_QA_INSPECT_PORT:-9229}}"',
425
+ 'REPO_ROOT="$(git -C "$PROJECT_ROOT" rev-parse --show-toplevel 2>/dev/null || echo "$PROJECT_ROOT")"',
426
+ (0, runner_process_janitor_1.buildRunnerProcessJanitorShellLibrary)({ mode: 'support' }),
427
+ 'STOP_LOCK_DIR="$ARTIFACT_DIR/.qa.stop.lock"',
428
+ 'if ! mkdir "$STOP_LOCK_DIR" 2>/dev/null; then',
429
+ ' lock_pid="$(cat "$STOP_LOCK_DIR/pid" 2>/dev/null || true)"',
430
+ ' if [ -n "$lock_pid" ] && kill -0 "$lock_pid" >/dev/null 2>&1; then',
431
+ ' echo "ResolveIO AI runner QA cleanup already active for $PROJECT_ROOT; refusing duplicate stopper."',
432
+ ' exit 0',
433
+ ' fi',
434
+ ' rm -rf "$STOP_LOCK_DIR" >/dev/null 2>&1 || true',
435
+ ' mkdir "$STOP_LOCK_DIR" 2>/dev/null || { echo "ResolveIO AI runner QA cleanup lock still active for $PROJECT_ROOT."; exit 0; }',
436
+ 'fi',
437
+ 'echo "$$" > "$STOP_LOCK_DIR/pid" 2>/dev/null || true',
438
+ 'trap \'rm -rf "$STOP_LOCK_DIR" >/dev/null 2>&1 || true\' EXIT',
439
+ 'kill_tree() {',
440
+ ' local pid="$1"',
441
+ ' [ -n "$pid" ] || return 0',
442
+ ' kill -0 "$pid" >/dev/null 2>&1 || return 0',
443
+ ' for child in $(pgrep -P "$pid" 2>/dev/null || true); do kill_tree "$child"; done',
444
+ ' kill "$pid" >/dev/null 2>&1 || true',
445
+ ' sleep 1',
446
+ ' kill -0 "$pid" >/dev/null 2>&1 && kill -9 "$pid" >/dev/null 2>&1 || true',
447
+ '}',
448
+ 'kill_port_listeners() {',
449
+ ' local port="$1"',
450
+ ' [ -n "$port" ] || return 0',
451
+ ' local pids=""',
452
+ ' if command -v lsof >/dev/null 2>&1; then pids="$pids $(janitor_bounded 3 lsof -ti tcp:"$port")"; fi',
453
+ ' if command -v fuser >/dev/null 2>&1; then pids="$pids $(janitor_bounded 3 fuser -n tcp "$port")"; fi',
454
+ ' if command -v ss >/dev/null 2>&1; then pids="$pids $(janitor_bounded 3 ss -ltnp "sport = :$port" | sed -n \'s/.*pid=\\([0-9][0-9]*\\).*/\\1/p\' || true)"; fi',
455
+ ' for pid in $pids; do',
456
+ ' [ "$pid" = "$$" ] && continue',
457
+ ' kill_tree "$pid"',
458
+ ' done',
459
+ ' sleep 1',
460
+ '}',
461
+ 'RUNNER_ANCESTOR_PIDS=" $$ ${PPID:-} "',
462
+ 'ancestor_pid="${PPID:-}"',
463
+ 'while [ -n "$ancestor_pid" ] && [ "$ancestor_pid" != "0" ] && [ "$ancestor_pid" != "1" ]; do',
464
+ ' ancestor_pid="$(ps -o ppid= -p "$ancestor_pid" 2>/dev/null | tr -d " " || true)"',
465
+ ' [ -n "$ancestor_pid" ] && RUNNER_ANCESTOR_PIDS="$RUNNER_ANCESTOR_PIDS $ancestor_pid "',
466
+ 'done',
467
+ 'skip_cleanup_pid() {',
468
+ ' case "$RUNNER_ANCESTOR_PIDS" in *" $1 "*) return 0 ;; esac',
469
+ ' return 1',
470
+ '}',
471
+ 'janitor_update_manifest_status cleanup_started',
472
+ 'killed_count=0',
473
+ 'for pid_file in "$ARTIFACT_DIR/server.pid" "$ARTIFACT_DIR/client.pid"; do',
474
+ ' [ -f "$pid_file" ] || continue',
475
+ ' pid="$(cat "$pid_file" 2>/dev/null || true)"',
476
+ ' kill_tree "$pid"',
477
+ ' killed_count=$((killed_count + 1))',
478
+ ' rm -f "$pid_file"',
479
+ 'done',
480
+ 'for pass in 1 2 3; do',
481
+ ' for port in "$CLIENT_PORT" "$SERVER_PORT" "$MONGO_PORT" "$INSPECT_PORT"; do kill_port_listeners "$port"; done',
482
+ ' for pid in $(ps -eo pid=,args= | awk -v root="$PROJECT_ROOT" \'index($0, root) && $0 !~ /awk -v root=/ && $0 !~ /ps -eo pid=,args=/ && $0 !~ /run-local-qa\\.sh|stop-local-qa\\.sh|bugfix-comparison-qa\\.sh/ && $0 ~ /(ng serve|node .*node_modules\\/\\.bin\\/ng|esbuild|npm run client|start_client\\.sh|npm run server|start_server\\.sh|nodemon|node .*tmp\\/index\\.js|mongod|mongodb-binaries\\/mongod)/ {print $1}\' 2>/dev/null || true); do',
483
+ ' skip_cleanup_pid "$pid" && continue',
484
+ ' kill_tree "$pid"',
485
+ ' killed_count=$((killed_count + 1))',
486
+ ' done',
487
+ ' if [ -d /proc ]; then',
488
+ ' for proc_cwd in /proc/[0-9]*/cwd; do',
489
+ ' pid="${proc_cwd#/proc/}"',
490
+ ' pid="${pid%/cwd}"',
491
+ ' skip_cleanup_pid "$pid" && continue',
492
+ ' cwd="$(readlink -f "$proc_cwd" 2>/dev/null || true)"',
493
+ ' case "$cwd" in',
494
+ ' "$PROJECT_ROOT"|"$PROJECT_ROOT"/*) kill_tree "$pid" ;;',
495
+ ' esac',
496
+ ' done',
497
+ ' fi',
498
+ ' sleep 1',
499
+ 'done',
500
+ 'wait_until=$((SECONDS + 60))',
501
+ 'while [ "$SECONDS" -lt "$wait_until" ]; do',
502
+ ' found=0',
503
+ ' for port in "$CLIENT_PORT" "$SERVER_PORT" "$MONGO_PORT" "$INSPECT_PORT"; do',
504
+ ' if command -v lsof >/dev/null 2>&1 && [ -n "$(janitor_bounded 3 lsof -ti tcp:"$port")" ]; then found=1; fi',
505
+ ' done',
506
+ ' for pid in $(ps -eo pid=,args= | awk -v root="$PROJECT_ROOT" \'index($0, root) && $0 !~ /awk -v root=/ && $0 !~ /ps -eo pid=,args=/ && $0 !~ /run-local-qa\\.sh|stop-local-qa\\.sh|bugfix-comparison-qa\\.sh/ && $0 ~ /(ng serve|node .*node_modules\\/\\.bin\\/ng|esbuild|npm run client|start_client\\.sh|npm run server|start_server\\.sh|nodemon|node .*tmp\\/index\\.js|mongod|mongodb-binaries\\/mongod)/ {print $1}\' 2>/dev/null || true); do',
507
+ ' skip_cleanup_pid "$pid" && continue',
508
+ ' found=1',
509
+ ' done',
510
+ ' [ "$found" = "0" ] && break',
511
+ ' sleep 2',
512
+ 'done',
513
+ 'rmdir "$ARTIFACT_DIR/.qa.lock" >/dev/null 2>&1 || true',
514
+ 'janitor_update_manifest_status stopped',
515
+ 'janitor_write_cleanup_status stopped "$killed_count"',
516
+ 'echo "ResolveIO AI runner QA local app stopped for $PROJECT_ROOT"',
517
+ ''
518
+ ].join('\n');
519
+ }
520
+ function buildResolveIORunnerBugfixComparisonQaScript() {
521
+ return [
522
+ '#!/usr/bin/env bash',
523
+ 'set -u',
524
+ 'TOOLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"',
525
+ 'source "$TOOLS_DIR/env.sh"',
526
+ 'PROJECT_ROOT="${1:-}"',
527
+ 'if [ -z "$PROJECT_ROOT" ]; then',
528
+ ' echo "Usage: $0 <project-root> [baseline-ref] -- <qa-command...>" >&2',
529
+ ' exit 2',
530
+ 'fi',
531
+ 'shift || true',
532
+ 'DEFAULT_BASELINE_REF="${RESOLVEIO_RUNNER_QA_BASELINE_REF:-${RESOLVEIO_SUPPORT_QA_BASELINE_REF:-origin/master}}"',
533
+ 'if [ "${1:-}" = "--" ]; then',
534
+ ' BASELINE_REF="$DEFAULT_BASELINE_REF"',
535
+ 'else',
536
+ ' BASELINE_REF="${1:-$DEFAULT_BASELINE_REF}"',
537
+ ' if [ "$#" -gt 0 ]; then shift || true; fi',
538
+ 'fi',
539
+ 'if [ "${1:-}" = "--" ]; then shift; fi',
540
+ 'if [ "$#" -eq 0 ]; then',
541
+ ' echo "Usage: $0 <project-root> [baseline-ref] -- <qa-command...>" >&2',
542
+ ' exit 2',
543
+ 'fi',
544
+ 'PROJECT_ROOT="$(cd "$PROJECT_ROOT" && pwd)"',
545
+ 'REPO_ROOT="$(git -C "$PROJECT_ROOT" rev-parse --show-toplevel)"',
546
+ 'PROJECT_REL="$(git -C "$REPO_ROOT" ls-files --full-name "$PROJECT_ROOT" 2>/dev/null | head -1 | xargs dirname 2>/dev/null || true)"',
547
+ 'if [ -z "$PROJECT_REL" ] || [ "$PROJECT_REL" = "." ]; then',
548
+ ' PROJECT_REL="$(node - "$REPO_ROOT" "$PROJECT_ROOT" <<\'RESOLVEIO_REL\'',
549
+ 'const path = require("path");',
550
+ 'console.log(path.relative(process.argv[2], process.argv[3]) || ".");',
551
+ 'RESOLVEIO_REL',
552
+ ' )"',
553
+ 'fi',
554
+ 'ARTIFACT_DIR="$PROJECT_ROOT/qa-artifacts"',
555
+ 'mkdir -p "$ARTIFACT_DIR/baseline" "$ARTIFACT_DIR/candidate"',
556
+ 'RESULT_JSON="$ARTIFACT_DIR/bugfix-comparison-result.json"',
557
+ 'CANDIDATE_PATCH="$ARTIFACT_DIR/bugfix-candidate.patch"',
558
+ 'ORIGINAL_HEAD="$(git -C "$REPO_ROOT" rev-parse HEAD)"',
559
+ 'ORIGINAL_BRANCH="$(git -C "$REPO_ROOT" symbolic-ref --short HEAD 2>/dev/null || true)"',
560
+ 'QA_COMMAND=("$@")',
561
+ 'STOPPER="$TOOLS_DIR/stop-local-qa.sh"',
562
+ 'CURRENT_PHASE=""',
563
+ 'stop_local_qa() {',
564
+ ' "$STOPPER" "$PROJECT_ROOT" >/dev/null 2>&1 || true',
565
+ '}',
566
+ 'write_json() {',
567
+ ' node - "$RESULT_JSON" "$@" <<\'RESOLVEIO_WRITE_JSON\'',
568
+ 'const fs = require("fs");',
569
+ 'const [path, status, baselineExit, candidateExit, baselineRef, originalHead, projectRel, note] = process.argv.slice(2);',
570
+ 'const payload = {',
571
+ ' status,',
572
+ ' baseline_ref: baselineRef,',
573
+ ' original_head: originalHead,',
574
+ ' project: projectRel,',
575
+ ' baseline_exit_code: Number(baselineExit),',
576
+ ' candidate_exit_code: Number(candidateExit),',
577
+ ' code_switch_proven: Number(baselineExit) !== 0 && Number(candidateExit) === 0,',
578
+ ' candidate_passed: Number(candidateExit) === 0,',
579
+ ' baseline_failed: Number(baselineExit) !== 0,',
580
+ ' note,',
581
+ ' artifact_dirs: { baseline: "qa-artifacts/baseline", candidate: "qa-artifacts/candidate" },',
582
+ ' created_at: new Date().toISOString()',
583
+ '};',
584
+ 'fs.writeFileSync(path, JSON.stringify(payload, null, 2));',
585
+ 'console.log(JSON.stringify(payload, null, 2));',
586
+ 'RESOLVEIO_WRITE_JSON',
587
+ '}',
588
+ 'snapshot_phase_artifacts() {',
589
+ ' local phase="$1"',
590
+ ' mkdir -p "$ARTIFACT_DIR/$phase"',
591
+ ' find "$ARTIFACT_DIR" -maxdepth 1 -type f \\( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.webp" -o -name "*.json" -o -name "*.txt" -o -name "*.log" -o -name "*.zip" \\) -print0 2>/dev/null | while IFS= read -r -d "" file; do',
592
+ ' cp "$file" "$ARTIFACT_DIR/$phase/$(basename "$file")" 2>/dev/null || true',
593
+ ' done',
594
+ '}',
595
+ 'capture_candidate_patch() {',
596
+ ' : > "$CANDIDATE_PATCH"',
597
+ ' git -C "$REPO_ROOT" diff --binary -- "$PROJECT_REL" >> "$CANDIDATE_PATCH" || true',
598
+ ' git -C "$REPO_ROOT" diff --binary --cached -- "$PROJECT_REL" >> "$CANDIDATE_PATCH" || true',
599
+ '}',
600
+ 'checkout_project_from_ref() {',
601
+ ' local ref="$1"',
602
+ ' git -C "$REPO_ROOT" checkout "$ref" -- "$PROJECT_REL"',
603
+ '}',
604
+ 'restore_candidate() {',
605
+ ' stop_local_qa',
606
+ ' checkout_project_from_ref "$ORIGINAL_HEAD" || true',
607
+ ' if [ -s "$CANDIDATE_PATCH" ]; then',
608
+ ' git -C "$REPO_ROOT" apply --whitespace=nowarn "$CANDIDATE_PATCH" || true',
609
+ ' fi',
610
+ '}',
611
+ 'trap restore_candidate EXIT',
612
+ 'run_phase() {',
613
+ ' local phase="$1"',
614
+ ' CURRENT_PHASE="$phase"',
615
+ ' stop_local_qa',
616
+ ' export RESOLVEIO_RUNNER_QA_PHASE="$phase"',
617
+ ' export RESOLVEIO_SUPPORT_QA_PHASE="$phase"',
618
+ ' export RESOLVEIO_RUNNER_QA_ARTIFACT_DIR="$ARTIFACT_DIR/$phase"',
619
+ ' export RESOLVEIO_SUPPORT_QA_ARTIFACT_DIR="$ARTIFACT_DIR/$phase"',
620
+ ' mkdir -p "$ARTIFACT_DIR/$phase"',
621
+ ' find "$ARTIFACT_DIR/$phase" -maxdepth 1 -type f \\( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.webp" -o -name "*.json" -o -name "*.txt" -o -name "*.log" -o -name "*.zip" \\) -delete 2>/dev/null || true',
622
+ ' find "$ARTIFACT_DIR" -maxdepth 1 -type f \\( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.webp" -o -name "*proof.json" -o -name "auth-bootstrap-result.json" \\) -delete 2>/dev/null || true',
623
+ ' set +e',
624
+ ' (cd "$REPO_ROOT" && "${QA_COMMAND[@]}") 2>&1 | tee "$ARTIFACT_DIR/$phase/qa-command.log"',
625
+ ' local rc="${PIPESTATUS[0]}"',
626
+ ' set +e',
627
+ ' snapshot_phase_artifacts "$phase"',
628
+ ' stop_local_qa',
629
+ ' return "$rc"',
630
+ '}',
631
+ 'echo "ResolveIO bugfix comparison QA preserving candidate diff for $PROJECT_REL"',
632
+ 'capture_candidate_patch',
633
+ 'stop_local_qa',
634
+ 'echo "ResolveIO bugfix comparison QA baseline phase: $BASELINE_REF"',
635
+ 'checkout_project_from_ref "$BASELINE_REF"',
636
+ 'run_phase baseline',
637
+ 'BASELINE_EXIT="$?"',
638
+ 'echo "ResolveIO bugfix comparison QA candidate phase: restored workspace candidate"',
639
+ 'restore_candidate',
640
+ 'run_phase candidate',
641
+ 'CANDIDATE_EXIT="$?"',
642
+ 'if [ "$CANDIDATE_EXIT" = "0" ] && [ "$BASELINE_EXIT" != "0" ]; then',
643
+ ' STATUS="pass"',
644
+ ' NOTE="Baseline failed and candidate passed for the same QA command."',
645
+ 'elif [ "$CANDIDATE_EXIT" = "0" ]; then',
646
+ ' STATUS="inconclusive_baseline_also_passed"',
647
+ ' NOTE="Candidate passed, but baseline also passed; the code switch did not prove the bug fix."',
648
+ 'else',
649
+ ' STATUS="fail_candidate_failed"',
650
+ ' NOTE="Candidate failed the QA command."',
651
+ 'fi',
652
+ 'write_json "$STATUS" "$BASELINE_EXIT" "$CANDIDATE_EXIT" "$BASELINE_REF" "$ORIGINAL_HEAD" "$PROJECT_REL" "$NOTE"',
653
+ '[ "$CANDIDATE_EXIT" = "0" ] || exit "$CANDIDATE_EXIT"',
654
+ '[ "$STATUS" = "pass" ] || exit 8',
655
+ ''
656
+ ].join('\n');
657
+ }
658
+ function buildResolveIORunnerQaToolsReadme(options) {
659
+ if (options === void 0) { options = {}; }
660
+ var mode = options.mode || 'runner';
661
+ var toolsDir = mode === 'support' ? '.resolveio-support-tools' : '.resolveio-ai-runner-tools';
662
+ var port = normalizePort(options.qaClientPort, '4200');
663
+ var clientUrlVar = envVar(mode, 'CLIENT_URL');
664
+ var keepaliveVar = envVar(mode, 'KEEPALIVE');
665
+ var usernameVar = envVar(mode, 'USERNAME');
666
+ var passwordVar = envVar(mode, 'PASSWORD');
667
+ return [
668
+ "# ResolveIO ".concat(mode === 'support' ? 'Support' : 'AI Runner', " Local QA Tools"),
669
+ '',
670
+ 'These scripts are generated by `@resolveio/server-lib` and are shared by support tickets, AICoder app-builder runs, and AI-terminal runs.',
671
+ '',
672
+ '```bash',
673
+ "source ".concat(toolsDir, "/env.sh"),
674
+ "".concat(toolsDir, "/run-local-qa.sh <project-root>"),
675
+ "node ".concat(toolsDir, "/qa-auth-bootstrap.js <project-root> /target-route"),
676
+ "".concat(toolsDir, "/bugfix-comparison-qa.sh <project-root> origin/master -- bash -lc '<same QA command>'"),
677
+ '```',
678
+ '',
679
+ "This workspace reserves Angular QA client port ".concat(port, "; use `$").concat(clientUrlVar, "` instead of assuming 4200 is free."),
680
+ 'The local QA runner starts server/client, polls the reserved client URL, writes `qa-artifacts/server.log` and `qa-artifacts/client.log`, and fails fast on fatal startup/runtime errors.',
681
+ 'The shared auth bootstrap first opens the exact localhost client origin, logs out any visible stale session, clears service workers/cache/IndexedDB/local/session storage, then calls `/login` and `/accessToken`, seeds `refreshToken`, `accessToken`, `user`, and `lastURL`, and writes `qa-artifacts/auth-bootstrap-result.json` plus a ready/failure screenshot.',
682
+ "For browser clickthrough work, start the runner once with `".concat(keepaliveVar, "=true ").concat(toolsDir, "/run-local-qa.sh <project-root> &` and reuse `$").concat(clientUrlVar, "` for all login/upload/screenshot retries. Do not restart Angular for auth failures."),
683
+ 'Do not run `npm run build-dev`, `ng build`, or another Angular compile while keepalive `ng serve` is running. If a full Angular build is required after browser QA, first run the staged `stop-local-qa.sh`, then build, then restart `run-local-qa.sh` for final browser proof.',
684
+ 'Use desktop screenshots at 1920x1080 by default unless the task is explicitly mobile/responsive. Every screenshot must have a customer-facing caption.',
685
+ 'For import/export/form-submit/data workflows, prove before/action/after with representative data and a concrete row/count/value assertion.',
686
+ 'For bug fixes, use `bugfix-comparison-qa.sh` so baseline/master runs the exact same repro before the candidate/PR run. A passing candidate is not enough unless the comparison result shows baseline failed or the report explicitly explains why the baseline failure could not be reproduced.',
687
+ "Use `$".concat(usernameVar, "` and `$").concat(passwordVar, "` for the local fixture admin account unless ticket/app-specific credentials are provided."),
688
+ 'The env file reuses `/var/lib/resolveio/puppeteer`, npm cache, worker-safe Browserslist settings, and Angular cache prep so QA should not download a browser or rebuild cold caches unnecessarily.',
689
+ mode === 'support'
690
+ ? 'Support workspaces also stage local `mongod` and `mongosh` wrappers so app server scripts can start MongoDB when the worker image does not have MongoDB installed.'
691
+ : '',
692
+ ''
693
+ ].filter(function (line) { return line !== ''; }).join('\n');
694
+ }
695
+
696
+ //# sourceMappingURL=ai-runner-qa-tools.js.map