@fidelios/server 0.0.1

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 (743) hide show
  1. package/dist/adapters/codex-models.d.ts +4 -0
  2. package/dist/adapters/codex-models.d.ts.map +1 -0
  3. package/dist/adapters/codex-models.js +98 -0
  4. package/dist/adapters/codex-models.js.map +1 -0
  5. package/dist/adapters/cursor-models.d.ts +13 -0
  6. package/dist/adapters/cursor-models.d.ts.map +1 -0
  7. package/dist/adapters/cursor-models.js +148 -0
  8. package/dist/adapters/cursor-models.js.map +1 -0
  9. package/dist/adapters/http/execute.d.ts +3 -0
  10. package/dist/adapters/http/execute.d.ts.map +1 -0
  11. package/dist/adapters/http/execute.js +39 -0
  12. package/dist/adapters/http/execute.js.map +1 -0
  13. package/dist/adapters/http/index.d.ts +3 -0
  14. package/dist/adapters/http/index.d.ts.map +1 -0
  15. package/dist/adapters/http/index.js +20 -0
  16. package/dist/adapters/http/index.js.map +1 -0
  17. package/dist/adapters/http/test.d.ts +3 -0
  18. package/dist/adapters/http/test.d.ts.map +1 -0
  19. package/dist/adapters/http/test.js +106 -0
  20. package/dist/adapters/http/test.js.map +1 -0
  21. package/dist/adapters/index.d.ts +4 -0
  22. package/dist/adapters/index.d.ts.map +1 -0
  23. package/dist/adapters/index.js +3 -0
  24. package/dist/adapters/index.js.map +1 -0
  25. package/dist/adapters/process/execute.d.ts +3 -0
  26. package/dist/adapters/process/execute.d.ts.map +1 -0
  27. package/dist/adapters/process/execute.js +63 -0
  28. package/dist/adapters/process/execute.js.map +1 -0
  29. package/dist/adapters/process/index.d.ts +3 -0
  30. package/dist/adapters/process/index.d.ts.map +1 -0
  31. package/dist/adapters/process/index.js +23 -0
  32. package/dist/adapters/process/index.js.map +1 -0
  33. package/dist/adapters/process/test.d.ts +3 -0
  34. package/dist/adapters/process/test.d.ts.map +1 -0
  35. package/dist/adapters/process/test.js +77 -0
  36. package/dist/adapters/process/test.js.map +1 -0
  37. package/dist/adapters/registry.d.ts +14 -0
  38. package/dist/adapters/registry.d.ts.map +1 -0
  39. package/dist/adapters/registry.js +164 -0
  40. package/dist/adapters/registry.js.map +1 -0
  41. package/dist/adapters/types.d.ts +2 -0
  42. package/dist/adapters/types.d.ts.map +1 -0
  43. package/dist/adapters/types.js +2 -0
  44. package/dist/adapters/types.js.map +1 -0
  45. package/dist/adapters/utils.d.ts +10 -0
  46. package/dist/adapters/utils.d.ts.map +1 -0
  47. package/dist/adapters/utils.js +14 -0
  48. package/dist/adapters/utils.js.map +1 -0
  49. package/dist/agent-auth-jwt.d.ts +14 -0
  50. package/dist/agent-auth-jwt.d.ts.map +1 -0
  51. package/dist/agent-auth-jwt.js +117 -0
  52. package/dist/agent-auth-jwt.js.map +1 -0
  53. package/dist/app.d.ts +25 -0
  54. package/dist/app.d.ts.map +1 -0
  55. package/dist/app.js +265 -0
  56. package/dist/app.js.map +1 -0
  57. package/dist/attachment-types.d.ts +33 -0
  58. package/dist/attachment-types.d.ts.map +1 -0
  59. package/dist/attachment-types.js +67 -0
  60. package/dist/attachment-types.js.map +1 -0
  61. package/dist/auth/better-auth.d.ts +24 -0
  62. package/dist/auth/better-auth.d.ts.map +1 -0
  63. package/dist/auth/better-auth.js +108 -0
  64. package/dist/auth/better-auth.js.map +1 -0
  65. package/dist/board-claim.d.ts +23 -0
  66. package/dist/board-claim.d.ts.map +1 -0
  67. package/dist/board-claim.js +115 -0
  68. package/dist/board-claim.js.map +1 -0
  69. package/dist/config-file.d.ts +3 -0
  70. package/dist/config-file.d.ts.map +1 -0
  71. package/dist/config-file.js +16 -0
  72. package/dist/config-file.js.map +1 -0
  73. package/dist/config.d.ts +45 -0
  74. package/dist/config.d.ts.map +1 -0
  75. package/dist/config.js +171 -0
  76. package/dist/config.js.map +1 -0
  77. package/dist/dev-server-status.d.ts +27 -0
  78. package/dist/dev-server-status.d.ts.map +1 -0
  79. package/dist/dev-server-status.js +70 -0
  80. package/dist/dev-server-status.js.map +1 -0
  81. package/dist/dev-watch-ignore.d.ts +2 -0
  82. package/dist/dev-watch-ignore.d.ts.map +1 -0
  83. package/dist/dev-watch-ignore.js +33 -0
  84. package/dist/dev-watch-ignore.js.map +1 -0
  85. package/dist/errors.d.ts +12 -0
  86. package/dist/errors.d.ts.map +1 -0
  87. package/dist/errors.js +28 -0
  88. package/dist/errors.js.map +1 -0
  89. package/dist/home-paths.d.ts +17 -0
  90. package/dist/home-paths.d.ts.map +1 -0
  91. package/dist/home-paths.js +75 -0
  92. package/dist/home-paths.js.map +1 -0
  93. package/dist/index.d.ts +10 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +642 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/log-redaction.d.ts +11 -0
  98. package/dist/log-redaction.d.ts.map +1 -0
  99. package/dist/log-redaction.js +118 -0
  100. package/dist/log-redaction.js.map +1 -0
  101. package/dist/middleware/auth.d.ts +12 -0
  102. package/dist/middleware/auth.d.ts.map +1 -0
  103. package/dist/middleware/auth.js +144 -0
  104. package/dist/middleware/auth.js.map +1 -0
  105. package/dist/middleware/board-mutation-guard.d.ts +3 -0
  106. package/dist/middleware/board-mutation-guard.d.ts.map +1 -0
  107. package/dist/middleware/board-mutation-guard.js +59 -0
  108. package/dist/middleware/board-mutation-guard.js.map +1 -0
  109. package/dist/middleware/error-handler.d.ts +17 -0
  110. package/dist/middleware/error-handler.d.ts.map +1 -0
  111. package/dist/middleware/error-handler.js +37 -0
  112. package/dist/middleware/error-handler.js.map +1 -0
  113. package/dist/middleware/index.d.ts +4 -0
  114. package/dist/middleware/index.d.ts.map +1 -0
  115. package/dist/middleware/index.js +4 -0
  116. package/dist/middleware/index.js.map +1 -0
  117. package/dist/middleware/logger.d.ts +4 -0
  118. package/dist/middleware/logger.d.ts.map +1 -0
  119. package/dist/middleware/logger.js +87 -0
  120. package/dist/middleware/logger.js.map +1 -0
  121. package/dist/middleware/private-hostname-guard.d.ts +11 -0
  122. package/dist/middleware/private-hostname-guard.d.ts.map +1 -0
  123. package/dist/middleware/private-hostname-guard.js +78 -0
  124. package/dist/middleware/private-hostname-guard.js.map +1 -0
  125. package/dist/middleware/validate.d.ts +4 -0
  126. package/dist/middleware/validate.d.ts.map +1 -0
  127. package/dist/middleware/validate.js +7 -0
  128. package/dist/middleware/validate.js.map +1 -0
  129. package/dist/onboarding-assets/ceo/AGENTS.md +54 -0
  130. package/dist/onboarding-assets/ceo/HEARTBEAT.md +72 -0
  131. package/dist/onboarding-assets/ceo/SOUL.md +33 -0
  132. package/dist/onboarding-assets/ceo/TOOLS.md +3 -0
  133. package/dist/onboarding-assets/default/AGENTS.md +3 -0
  134. package/dist/paths.d.ts +3 -0
  135. package/dist/paths.d.ts.map +1 -0
  136. package/dist/paths.js +31 -0
  137. package/dist/paths.js.map +1 -0
  138. package/dist/realtime/live-events-ws.d.ts +28 -0
  139. package/dist/realtime/live-events-ws.d.ts.map +1 -0
  140. package/dist/realtime/live-events-ws.js +187 -0
  141. package/dist/realtime/live-events-ws.js.map +1 -0
  142. package/dist/redaction.d.ts +4 -0
  143. package/dist/redaction.d.ts.map +1 -0
  144. package/dist/redaction.js +63 -0
  145. package/dist/redaction.js.map +1 -0
  146. package/dist/routes/access.d.ts +61 -0
  147. package/dist/routes/access.d.ts.map +1 -0
  148. package/dist/routes/access.js +2265 -0
  149. package/dist/routes/access.js.map +1 -0
  150. package/dist/routes/activity.d.ts +3 -0
  151. package/dist/routes/activity.d.ts.map +1 -0
  152. package/dist/routes/activity.js +78 -0
  153. package/dist/routes/activity.js.map +1 -0
  154. package/dist/routes/agents.d.ts +3 -0
  155. package/dist/routes/agents.d.ts.map +1 -0
  156. package/dist/routes/agents.js +1828 -0
  157. package/dist/routes/agents.js.map +1 -0
  158. package/dist/routes/approvals.d.ts +3 -0
  159. package/dist/routes/approvals.d.ts.map +1 -0
  160. package/dist/routes/approvals.js +275 -0
  161. package/dist/routes/approvals.js.map +1 -0
  162. package/dist/routes/assets.d.ts +4 -0
  163. package/dist/routes/assets.d.ts.map +1 -0
  164. package/dist/routes/assets.js +309 -0
  165. package/dist/routes/assets.js.map +1 -0
  166. package/dist/routes/authz.d.ts +16 -0
  167. package/dist/routes/authz.d.ts.map +1 -0
  168. package/dist/routes/authz.js +47 -0
  169. package/dist/routes/authz.js.map +1 -0
  170. package/dist/routes/companies.d.ts +4 -0
  171. package/dist/routes/companies.d.ts.map +1 -0
  172. package/dist/routes/companies.js +303 -0
  173. package/dist/routes/companies.js.map +1 -0
  174. package/dist/routes/company-skills.d.ts +3 -0
  175. package/dist/routes/company-skills.d.ts.map +1 -0
  176. package/dist/routes/company-skills.js +228 -0
  177. package/dist/routes/company-skills.js.map +1 -0
  178. package/dist/routes/costs.d.ts +3 -0
  179. package/dist/routes/costs.d.ts.map +1 -0
  180. package/dist/routes/costs.js +268 -0
  181. package/dist/routes/costs.js.map +1 -0
  182. package/dist/routes/dashboard.d.ts +3 -0
  183. package/dist/routes/dashboard.d.ts.map +1 -0
  184. package/dist/routes/dashboard.js +15 -0
  185. package/dist/routes/dashboard.js.map +1 -0
  186. package/dist/routes/execution-workspaces.d.ts +3 -0
  187. package/dist/routes/execution-workspaces.d.ts.map +1 -0
  188. package/dist/routes/execution-workspaces.js +165 -0
  189. package/dist/routes/execution-workspaces.js.map +1 -0
  190. package/dist/routes/goals.d.ts +3 -0
  191. package/dist/routes/goals.d.ts.map +1 -0
  192. package/dist/routes/goals.js +95 -0
  193. package/dist/routes/goals.js.map +1 -0
  194. package/dist/routes/health.d.ts +9 -0
  195. package/dist/routes/health.d.ts.map +1 -0
  196. package/dist/routes/health.js +69 -0
  197. package/dist/routes/health.js.map +1 -0
  198. package/dist/routes/index.d.ts +18 -0
  199. package/dist/routes/index.d.ts.map +1 -0
  200. package/dist/routes/index.js +18 -0
  201. package/dist/routes/index.js.map +1 -0
  202. package/dist/routes/instance-settings.d.ts +3 -0
  203. package/dist/routes/instance-settings.d.ts.map +1 -0
  204. package/dist/routes/instance-settings.js +71 -0
  205. package/dist/routes/instance-settings.js.map +1 -0
  206. package/dist/routes/issues-checkout-wakeup.d.ts +9 -0
  207. package/dist/routes/issues-checkout-wakeup.d.ts.map +1 -0
  208. package/dist/routes/issues-checkout-wakeup.js +12 -0
  209. package/dist/routes/issues-checkout-wakeup.js.map +1 -0
  210. package/dist/routes/issues.d.ts +4 -0
  211. package/dist/routes/issues.d.ts.map +1 -0
  212. package/dist/routes/issues.js +1520 -0
  213. package/dist/routes/issues.js.map +1 -0
  214. package/dist/routes/llms.d.ts +3 -0
  215. package/dist/routes/llms.d.ts.map +1 -0
  216. package/dist/routes/llms.js +78 -0
  217. package/dist/routes/llms.js.map +1 -0
  218. package/dist/routes/org-chart-svg.d.ts +25 -0
  219. package/dist/routes/org-chart-svg.d.ts.map +1 -0
  220. package/dist/routes/org-chart-svg.js +656 -0
  221. package/dist/routes/org-chart-svg.js.map +1 -0
  222. package/dist/routes/plugin-ui-static.d.ts +69 -0
  223. package/dist/routes/plugin-ui-static.d.ts.map +1 -0
  224. package/dist/routes/plugin-ui-static.js +411 -0
  225. package/dist/routes/plugin-ui-static.js.map +1 -0
  226. package/dist/routes/plugins.d.ts +120 -0
  227. package/dist/routes/plugins.d.ts.map +1 -0
  228. package/dist/routes/plugins.js +1784 -0
  229. package/dist/routes/plugins.js.map +1 -0
  230. package/dist/routes/projects.d.ts +3 -0
  231. package/dist/routes/projects.d.ts.map +1 -0
  232. package/dist/routes/projects.js +257 -0
  233. package/dist/routes/projects.js.map +1 -0
  234. package/dist/routes/routines.d.ts +3 -0
  235. package/dist/routes/routines.d.ts.map +1 -0
  236. package/dist/routes/routines.js +277 -0
  237. package/dist/routes/routines.js.map +1 -0
  238. package/dist/routes/secrets.d.ts +3 -0
  239. package/dist/routes/secrets.d.ts.map +1 -0
  240. package/dist/routes/secrets.js +128 -0
  241. package/dist/routes/secrets.js.map +1 -0
  242. package/dist/routes/sidebar-badges.d.ts +3 -0
  243. package/dist/routes/sidebar-badges.d.ts.map +1 -0
  244. package/dist/routes/sidebar-badges.js +45 -0
  245. package/dist/routes/sidebar-badges.js.map +1 -0
  246. package/dist/secrets/external-stub-providers.d.ts +5 -0
  247. package/dist/secrets/external-stub-providers.d.ts.map +1 -0
  248. package/dist/secrets/external-stub-providers.js +21 -0
  249. package/dist/secrets/external-stub-providers.js.map +1 -0
  250. package/dist/secrets/local-encrypted-provider.d.ts +3 -0
  251. package/dist/secrets/local-encrypted-provider.d.ts.map +1 -0
  252. package/dist/secrets/local-encrypted-provider.js +116 -0
  253. package/dist/secrets/local-encrypted-provider.js.map +1 -0
  254. package/dist/secrets/provider-registry.d.ts +5 -0
  255. package/dist/secrets/provider-registry.d.ts.map +1 -0
  256. package/dist/secrets/provider-registry.js +20 -0
  257. package/dist/secrets/provider-registry.js.map +1 -0
  258. package/dist/secrets/types.d.ts +21 -0
  259. package/dist/secrets/types.d.ts.map +1 -0
  260. package/dist/secrets/types.js +2 -0
  261. package/dist/secrets/types.js.map +1 -0
  262. package/dist/services/access.d.ts +113 -0
  263. package/dist/services/access.d.ts.map +1 -0
  264. package/dist/services/access.js +247 -0
  265. package/dist/services/access.js.map +1 -0
  266. package/dist/services/activity-log.d.ts +17 -0
  267. package/dist/services/activity-log.d.ts.map +1 -0
  268. package/dist/services/activity-log.js +74 -0
  269. package/dist/services/activity-log.js.map +1 -0
  270. package/dist/services/activity.d.ts +764 -0
  271. package/dist/services/activity.d.ts.map +1 -0
  272. package/dist/services/activity.js +105 -0
  273. package/dist/services/activity.js.map +1 -0
  274. package/dist/services/agent-instructions.d.ts +91 -0
  275. package/dist/services/agent-instructions.d.ts.map +1 -0
  276. package/dist/services/agent-instructions.js +580 -0
  277. package/dist/services/agent-instructions.js.map +1 -0
  278. package/dist/services/agent-permissions.d.ts +6 -0
  279. package/dist/services/agent-permissions.d.ts.map +1 -0
  280. package/dist/services/agent-permissions.js +18 -0
  281. package/dist/services/agent-permissions.js.map +1 -0
  282. package/dist/services/agents.d.ts +1670 -0
  283. package/dist/services/agents.d.ts.map +1 -0
  284. package/dist/services/agents.js +566 -0
  285. package/dist/services/agents.js.map +1 -0
  286. package/dist/services/approvals.d.ts +546 -0
  287. package/dist/services/approvals.d.ts.map +1 -0
  288. package/dist/services/approvals.js +212 -0
  289. package/dist/services/approvals.js.map +1 -0
  290. package/dist/services/assets.d.ts +33 -0
  291. package/dist/services/assets.d.ts.map +1 -0
  292. package/dist/services/assets.js +17 -0
  293. package/dist/services/assets.js.map +1 -0
  294. package/dist/services/board-auth.d.ts +234 -0
  295. package/dist/services/board-auth.d.ts.map +1 -0
  296. package/dist/services/board-auth.js +295 -0
  297. package/dist/services/board-auth.js.map +1 -0
  298. package/dist/services/budgets.d.ts +38 -0
  299. package/dist/services/budgets.d.ts.map +1 -0
  300. package/dist/services/budgets.js +784 -0
  301. package/dist/services/budgets.js.map +1 -0
  302. package/dist/services/companies.d.ts +124 -0
  303. package/dist/services/companies.d.ts.map +1 -0
  304. package/dist/services/companies.js +256 -0
  305. package/dist/services/companies.js.map +1 -0
  306. package/dist/services/company-export-readme.d.ts +17 -0
  307. package/dist/services/company-export-readme.d.ts.map +1 -0
  308. package/dist/services/company-export-readme.js +148 -0
  309. package/dist/services/company-export-readme.js.map +1 -0
  310. package/dist/services/company-portability.d.ts +23 -0
  311. package/dist/services/company-portability.d.ts.map +1 -0
  312. package/dist/services/company-portability.js +3739 -0
  313. package/dist/services/company-portability.js.map +1 -0
  314. package/dist/services/company-skills.d.ts +77 -0
  315. package/dist/services/company-skills.d.ts.map +1 -0
  316. package/dist/services/company-skills.js +2042 -0
  317. package/dist/services/company-skills.js.map +1 -0
  318. package/dist/services/costs.d.ts +114 -0
  319. package/dist/services/costs.d.ts.map +1 -0
  320. package/dist/services/costs.js +294 -0
  321. package/dist/services/costs.js.map +1 -0
  322. package/dist/services/cron.d.ts +80 -0
  323. package/dist/services/cron.d.ts.map +1 -0
  324. package/dist/services/cron.js +300 -0
  325. package/dist/services/cron.js.map +1 -0
  326. package/dist/services/dashboard.d.ts +26 -0
  327. package/dist/services/dashboard.d.ts.map +1 -0
  328. package/dist/services/dashboard.js +98 -0
  329. package/dist/services/dashboard.js.map +1 -0
  330. package/dist/services/default-agent-instructions.d.ts +9 -0
  331. package/dist/services/default-agent-instructions.d.ts.map +1 -0
  332. package/dist/services/default-agent-instructions.js +20 -0
  333. package/dist/services/default-agent-instructions.js.map +1 -0
  334. package/dist/services/documents.d.ts +164 -0
  335. package/dist/services/documents.d.ts.map +1 -0
  336. package/dist/services/documents.js +382 -0
  337. package/dist/services/documents.js.map +1 -0
  338. package/dist/services/execution-workspace-policy.d.ts +21 -0
  339. package/dist/services/execution-workspace-policy.d.ts.map +1 -0
  340. package/dist/services/execution-workspace-policy.js +177 -0
  341. package/dist/services/execution-workspace-policy.js.map +1 -0
  342. package/dist/services/execution-workspaces.d.ts +19 -0
  343. package/dist/services/execution-workspaces.d.ts.map +1 -0
  344. package/dist/services/execution-workspaces.js +87 -0
  345. package/dist/services/execution-workspaces.js.map +1 -0
  346. package/dist/services/finance.d.ts +93 -0
  347. package/dist/services/finance.d.ts.map +1 -0
  348. package/dist/services/finance.js +120 -0
  349. package/dist/services/finance.js.map +1 -0
  350. package/dist/services/goals.d.ts +433 -0
  351. package/dist/services/goals.d.ts.map +1 -0
  352. package/dist/services/goals.js +54 -0
  353. package/dist/services/goals.js.map +1 -0
  354. package/dist/services/heartbeat-run-summary.d.ts +2 -0
  355. package/dist/services/heartbeat-run-summary.d.ts.map +1 -0
  356. package/dist/services/heartbeat-run-summary.js +30 -0
  357. package/dist/services/heartbeat-run-summary.js.map +1 -0
  358. package/dist/services/heartbeat.d.ts +812 -0
  359. package/dist/services/heartbeat.d.ts.map +1 -0
  360. package/dist/services/heartbeat.js +3156 -0
  361. package/dist/services/heartbeat.js.map +1 -0
  362. package/dist/services/hire-hook.d.ts +14 -0
  363. package/dist/services/hire-hook.d.ts.map +1 -0
  364. package/dist/services/hire-hook.js +85 -0
  365. package/dist/services/hire-hook.js.map +1 -0
  366. package/dist/services/index.d.ts +33 -0
  367. package/dist/services/index.d.ts.map +1 -0
  368. package/dist/services/index.js +33 -0
  369. package/dist/services/index.js.map +1 -0
  370. package/dist/services/instance-settings.d.ts +11 -0
  371. package/dist/services/instance-settings.d.ts.map +1 -0
  372. package/dist/services/instance-settings.js +116 -0
  373. package/dist/services/instance-settings.js.map +1 -0
  374. package/dist/services/issue-approvals.d.ts +56 -0
  375. package/dist/services/issue-approvals.d.ts.map +1 -0
  376. package/dist/services/issue-approvals.js +153 -0
  377. package/dist/services/issue-approvals.js.map +1 -0
  378. package/dist/services/issue-assignment-wakeup.d.ts +29 -0
  379. package/dist/services/issue-assignment-wakeup.d.ts.map +1 -0
  380. package/dist/services/issue-assignment-wakeup.js +22 -0
  381. package/dist/services/issue-assignment-wakeup.js.map +1 -0
  382. package/dist/services/issue-goal-fallback.d.ts +18 -0
  383. package/dist/services/issue-goal-fallback.d.ts.map +1 -0
  384. package/dist/services/issue-goal-fallback.js +33 -0
  385. package/dist/services/issue-goal-fallback.js.map +1 -0
  386. package/dist/services/issues.d.ts +560 -0
  387. package/dist/services/issues.d.ts.map +1 -0
  388. package/dist/services/issues.js +1478 -0
  389. package/dist/services/issues.js.map +1 -0
  390. package/dist/services/live-events.d.ts +17 -0
  391. package/dist/services/live-events.d.ts.map +1 -0
  392. package/dist/services/live-events.js +33 -0
  393. package/dist/services/live-events.js.map +1 -0
  394. package/dist/services/plugin-capability-validator.d.ts +108 -0
  395. package/dist/services/plugin-capability-validator.d.ts.map +1 -0
  396. package/dist/services/plugin-capability-validator.js +268 -0
  397. package/dist/services/plugin-capability-validator.js.map +1 -0
  398. package/dist/services/plugin-config-validator.d.ts +26 -0
  399. package/dist/services/plugin-config-validator.d.ts.map +1 -0
  400. package/dist/services/plugin-config-validator.js +41 -0
  401. package/dist/services/plugin-config-validator.js.map +1 -0
  402. package/dist/services/plugin-dev-watcher.d.ts +30 -0
  403. package/dist/services/plugin-dev-watcher.d.ts.map +1 -0
  404. package/dist/services/plugin-dev-watcher.js +241 -0
  405. package/dist/services/plugin-dev-watcher.js.map +1 -0
  406. package/dist/services/plugin-event-bus.d.ts +149 -0
  407. package/dist/services/plugin-event-bus.d.ts.map +1 -0
  408. package/dist/services/plugin-event-bus.js +258 -0
  409. package/dist/services/plugin-event-bus.js.map +1 -0
  410. package/dist/services/plugin-host-service-cleanup.d.ts +14 -0
  411. package/dist/services/plugin-host-service-cleanup.d.ts.map +1 -0
  412. package/dist/services/plugin-host-service-cleanup.js +37 -0
  413. package/dist/services/plugin-host-service-cleanup.js.map +1 -0
  414. package/dist/services/plugin-host-services.d.ts +13 -0
  415. package/dist/services/plugin-host-services.d.ts.map +1 -0
  416. package/dist/services/plugin-host-services.js +969 -0
  417. package/dist/services/plugin-host-services.js.map +1 -0
  418. package/dist/services/plugin-job-coordinator.d.ts +81 -0
  419. package/dist/services/plugin-job-coordinator.d.ts.map +1 -0
  420. package/dist/services/plugin-job-coordinator.js +172 -0
  421. package/dist/services/plugin-job-coordinator.js.map +1 -0
  422. package/dist/services/plugin-job-scheduler.d.ts +163 -0
  423. package/dist/services/plugin-job-scheduler.d.ts.map +1 -0
  424. package/dist/services/plugin-job-scheduler.js +454 -0
  425. package/dist/services/plugin-job-scheduler.js.map +1 -0
  426. package/dist/services/plugin-job-store.d.ts +208 -0
  427. package/dist/services/plugin-job-store.d.ts.map +1 -0
  428. package/dist/services/plugin-job-store.js +350 -0
  429. package/dist/services/plugin-job-store.js.map +1 -0
  430. package/dist/services/plugin-lifecycle.d.ts +203 -0
  431. package/dist/services/plugin-lifecycle.d.ts.map +1 -0
  432. package/dist/services/plugin-lifecycle.js +476 -0
  433. package/dist/services/plugin-lifecycle.js.map +1 -0
  434. package/dist/services/plugin-loader.d.ts +441 -0
  435. package/dist/services/plugin-loader.d.ts.map +1 -0
  436. package/dist/services/plugin-loader.js +1192 -0
  437. package/dist/services/plugin-loader.js.map +1 -0
  438. package/dist/services/plugin-log-retention.d.ts +20 -0
  439. package/dist/services/plugin-log-retention.d.ts.map +1 -0
  440. package/dist/services/plugin-log-retention.js +63 -0
  441. package/dist/services/plugin-log-retention.js.map +1 -0
  442. package/dist/services/plugin-manifest-validator.d.ts +79 -0
  443. package/dist/services/plugin-manifest-validator.d.ts.map +1 -0
  444. package/dist/services/plugin-manifest-validator.js +84 -0
  445. package/dist/services/plugin-manifest-validator.js.map +1 -0
  446. package/dist/services/plugin-registry.d.ts +2542 -0
  447. package/dist/services/plugin-registry.d.ts.map +1 -0
  448. package/dist/services/plugin-registry.js +539 -0
  449. package/dist/services/plugin-registry.js.map +1 -0
  450. package/dist/services/plugin-runtime-sandbox.d.ts +40 -0
  451. package/dist/services/plugin-runtime-sandbox.d.ts.map +1 -0
  452. package/dist/services/plugin-runtime-sandbox.js +154 -0
  453. package/dist/services/plugin-runtime-sandbox.js.map +1 -0
  454. package/dist/services/plugin-secrets-handler.d.ts +81 -0
  455. package/dist/services/plugin-secrets-handler.d.ts.map +1 -0
  456. package/dist/services/plugin-secrets-handler.js +275 -0
  457. package/dist/services/plugin-secrets-handler.js.map +1 -0
  458. package/dist/services/plugin-state-store.d.ts +92 -0
  459. package/dist/services/plugin-state-store.d.ts.map +1 -0
  460. package/dist/services/plugin-state-store.js +190 -0
  461. package/dist/services/plugin-state-store.js.map +1 -0
  462. package/dist/services/plugin-stream-bus.d.ts +29 -0
  463. package/dist/services/plugin-stream-bus.d.ts.map +1 -0
  464. package/dist/services/plugin-stream-bus.js +48 -0
  465. package/dist/services/plugin-stream-bus.js.map +1 -0
  466. package/dist/services/plugin-tool-dispatcher.d.ts +180 -0
  467. package/dist/services/plugin-tool-dispatcher.d.ts.map +1 -0
  468. package/dist/services/plugin-tool-dispatcher.js +224 -0
  469. package/dist/services/plugin-tool-dispatcher.js.map +1 -0
  470. package/dist/services/plugin-tool-registry.d.ts +192 -0
  471. package/dist/services/plugin-tool-registry.d.ts.map +1 -0
  472. package/dist/services/plugin-tool-registry.js +224 -0
  473. package/dist/services/plugin-tool-registry.js.map +1 -0
  474. package/dist/services/plugin-worker-manager.d.ts +260 -0
  475. package/dist/services/plugin-worker-manager.d.ts.map +1 -0
  476. package/dist/services/plugin-worker-manager.js +835 -0
  477. package/dist/services/plugin-worker-manager.js.map +1 -0
  478. package/dist/services/projects.d.ts +87 -0
  479. package/dist/services/projects.d.ts.map +1 -0
  480. package/dist/services/projects.js +656 -0
  481. package/dist/services/projects.js.map +1 -0
  482. package/dist/services/quota-windows.d.ts +9 -0
  483. package/dist/services/quota-windows.d.ts.map +1 -0
  484. package/dist/services/quota-windows.js +56 -0
  485. package/dist/services/quota-windows.js.map +1 -0
  486. package/dist/services/routines.d.ts +135 -0
  487. package/dist/services/routines.d.ts.map +1 -0
  488. package/dist/services/routines.js +1105 -0
  489. package/dist/services/routines.js.map +1 -0
  490. package/dist/services/run-log-store.d.ts +34 -0
  491. package/dist/services/run-log-store.d.ts.map +1 -0
  492. package/dist/services/run-log-store.js +109 -0
  493. package/dist/services/run-log-store.js.map +1 -0
  494. package/dist/services/secrets.d.ts +511 -0
  495. package/dist/services/secrets.d.ts.map +1 -0
  496. package/dist/services/secrets.js +289 -0
  497. package/dist/services/secrets.js.map +1 -0
  498. package/dist/services/sidebar-badges.d.ts +9 -0
  499. package/dist/services/sidebar-badges.d.ts.map +1 -0
  500. package/dist/services/sidebar-badges.js +33 -0
  501. package/dist/services/sidebar-badges.js.map +1 -0
  502. package/dist/services/work-products.d.ts +14 -0
  503. package/dist/services/work-products.d.ts.map +1 -0
  504. package/dist/services/work-products.js +100 -0
  505. package/dist/services/work-products.js.map +1 -0
  506. package/dist/services/workspace-operation-log-store.d.ts +33 -0
  507. package/dist/services/workspace-operation-log-store.d.ts.map +1 -0
  508. package/dist/services/workspace-operation-log-store.js +110 -0
  509. package/dist/services/workspace-operation-log-store.js.map +1 -0
  510. package/dist/services/workspace-operations.d.ts +44 -0
  511. package/dist/services/workspace-operations.d.ts.map +1 -0
  512. package/dist/services/workspace-operations.js +211 -0
  513. package/dist/services/workspace-operations.js.map +1 -0
  514. package/dist/services/workspace-runtime.d.ts +164 -0
  515. package/dist/services/workspace-runtime.d.ts.map +1 -0
  516. package/dist/services/workspace-runtime.js +1235 -0
  517. package/dist/services/workspace-runtime.js.map +1 -0
  518. package/dist/startup-banner.d.ts +31 -0
  519. package/dist/startup-banner.d.ts.map +1 -0
  520. package/dist/startup-banner.js +117 -0
  521. package/dist/startup-banner.js.map +1 -0
  522. package/dist/storage/index.d.ts +6 -0
  523. package/dist/storage/index.d.ts.map +1 -0
  524. package/dist/storage/index.js +29 -0
  525. package/dist/storage/index.js.map +1 -0
  526. package/dist/storage/local-disk-provider.d.ts +3 -0
  527. package/dist/storage/local-disk-provider.d.ts.map +1 -0
  528. package/dist/storage/local-disk-provider.js +79 -0
  529. package/dist/storage/local-disk-provider.js.map +1 -0
  530. package/dist/storage/provider-registry.d.ts +4 -0
  531. package/dist/storage/provider-registry.d.ts.map +1 -0
  532. package/dist/storage/provider-registry.js +15 -0
  533. package/dist/storage/provider-registry.js.map +1 -0
  534. package/dist/storage/s3-provider.d.ts +11 -0
  535. package/dist/storage/s3-provider.d.ts.map +1 -0
  536. package/dist/storage/s3-provider.js +123 -0
  537. package/dist/storage/s3-provider.js.map +1 -0
  538. package/dist/storage/service.d.ts +3 -0
  539. package/dist/storage/service.d.ts.map +1 -0
  540. package/dist/storage/service.js +120 -0
  541. package/dist/storage/service.js.map +1 -0
  542. package/dist/storage/types.d.ts +55 -0
  543. package/dist/storage/types.d.ts.map +1 -0
  544. package/dist/storage/types.js +2 -0
  545. package/dist/storage/types.js.map +1 -0
  546. package/dist/ui-branding.d.ts +13 -0
  547. package/dist/ui-branding.d.ts.map +1 -0
  548. package/dist/ui-branding.js +187 -0
  549. package/dist/ui-branding.js.map +1 -0
  550. package/dist/version.d.ts +2 -0
  551. package/dist/version.d.ts.map +1 -0
  552. package/dist/version.js +5 -0
  553. package/dist/version.js.map +1 -0
  554. package/dist/worktree-config.d.ts +19 -0
  555. package/dist/worktree-config.d.ts.map +1 -0
  556. package/dist/worktree-config.js +365 -0
  557. package/dist/worktree-config.js.map +1 -0
  558. package/package.json +95 -0
  559. package/ui-dist/android-chrome-192x192.png +0 -0
  560. package/ui-dist/android-chrome-512x512.png +0 -0
  561. package/ui-dist/apple-touch-icon.png +0 -0
  562. package/ui-dist/assets/_basePickBy-BB1S19s0.js +1 -0
  563. package/ui-dist/assets/_baseUniq-BNk0p-bq.js +1 -0
  564. package/ui-dist/assets/apl-B4CMkyY2.js +1 -0
  565. package/ui-dist/assets/arc-Ds13x1NW.js +1 -0
  566. package/ui-dist/assets/architectureDiagram-VXUJARFQ-D8Br-_jt.js +36 -0
  567. package/ui-dist/assets/asciiarmor-Df11BRmG.js +1 -0
  568. package/ui-dist/assets/asn1-EdZsLKOL.js +1 -0
  569. package/ui-dist/assets/asterisk-B-8jnY81.js +1 -0
  570. package/ui-dist/assets/blockDiagram-VD42YOAC-CCYsAhQ5.js +122 -0
  571. package/ui-dist/assets/brainfuck-C4LP7Hcl.js +1 -0
  572. package/ui-dist/assets/c4Diagram-YG6GDRKO-CsrnTJYB.js +10 -0
  573. package/ui-dist/assets/channel-Df4ReTUQ.js +1 -0
  574. package/ui-dist/assets/chunk-4BX2VUAB-s-S3bm2a.js +1 -0
  575. package/ui-dist/assets/chunk-55IACEB6-AlPeSG3C.js +1 -0
  576. package/ui-dist/assets/chunk-B4BG7PRW-Dlv3zmp0.js +165 -0
  577. package/ui-dist/assets/chunk-DI55MBZ5-y3Hfc2F6.js +220 -0
  578. package/ui-dist/assets/chunk-FMBD7UC4-ZbmFZ8uD.js +15 -0
  579. package/ui-dist/assets/chunk-QN33PNHL-g7XrAaL5.js +1 -0
  580. package/ui-dist/assets/chunk-QZHKN3VN-DQz2X_ZR.js +1 -0
  581. package/ui-dist/assets/chunk-TZMSLE5B-NRbDhryd.js +1 -0
  582. package/ui-dist/assets/classDiagram-2ON5EDUG-CdLb01dH.js +1 -0
  583. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-CdLb01dH.js +1 -0
  584. package/ui-dist/assets/clike-B9uivgTg.js +1 -0
  585. package/ui-dist/assets/clojure-BMjYHr_A.js +1 -0
  586. package/ui-dist/assets/clone-ycTwxHSX.js +1 -0
  587. package/ui-dist/assets/cmake-BQqOBYOt.js +1 -0
  588. package/ui-dist/assets/cobol-CWcv1MsR.js +1 -0
  589. package/ui-dist/assets/coffeescript-S37ZYGWr.js +1 -0
  590. package/ui-dist/assets/commonlisp-DBKNyK5s.js +1 -0
  591. package/ui-dist/assets/cose-bilkent-S5V4N54A-CifA3UGC.js +1 -0
  592. package/ui-dist/assets/crystal-SjHAIU92.js +1 -0
  593. package/ui-dist/assets/css-BnMrqG3P.js +1 -0
  594. package/ui-dist/assets/cypher-C_CwsFkJ.js +1 -0
  595. package/ui-dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
  596. package/ui-dist/assets/d-pRatUO7H.js +1 -0
  597. package/ui-dist/assets/dagre-6UL2VRFP-Cy4_402x.js +4 -0
  598. package/ui-dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  599. package/ui-dist/assets/diagram-PSM6KHXK-CUA-Vqxe.js +24 -0
  600. package/ui-dist/assets/diagram-QEK2KX5R-D763Ackt.js +43 -0
  601. package/ui-dist/assets/diagram-S2PKOQOG-Cu1xEKHt.js +24 -0
  602. package/ui-dist/assets/diff-DbItnlRl.js +1 -0
  603. package/ui-dist/assets/dockerfile-BKs6k2Af.js +1 -0
  604. package/ui-dist/assets/dtd-DF_7sFjM.js +1 -0
  605. package/ui-dist/assets/dylan-DwRh75JA.js +1 -0
  606. package/ui-dist/assets/ebnf-CDyGwa7X.js +1 -0
  607. package/ui-dist/assets/ecl-Cabwm37j.js +1 -0
  608. package/ui-dist/assets/eiffel-CnydiIhH.js +1 -0
  609. package/ui-dist/assets/elm-vLlmbW-K.js +1 -0
  610. package/ui-dist/assets/erDiagram-Q2GNP2WA-9RlN9oCi.js +60 -0
  611. package/ui-dist/assets/erlang-BNw1qcRV.js +1 -0
  612. package/ui-dist/assets/factor-kuTfRLto.js +1 -0
  613. package/ui-dist/assets/fcl-Kvtd6kyn.js +1 -0
  614. package/ui-dist/assets/flowDiagram-NV44I4VS-Ddv1tq-H.js +162 -0
  615. package/ui-dist/assets/forth-Ffai-XNe.js +1 -0
  616. package/ui-dist/assets/fortran-DYz_wnZ1.js +1 -0
  617. package/ui-dist/assets/ganttDiagram-JELNMOA3-DAw7UfVT.js +267 -0
  618. package/ui-dist/assets/gas-Bneqetm1.js +1 -0
  619. package/ui-dist/assets/gherkin-heZmZLOM.js +1 -0
  620. package/ui-dist/assets/gitGraphDiagram-V2S2FVAM-CLPkzwpF.js +65 -0
  621. package/ui-dist/assets/graph-B1ThnnK5.js +1 -0
  622. package/ui-dist/assets/groovy-D9Dt4D0W.js +1 -0
  623. package/ui-dist/assets/haskell-Cw1EW3IL.js +1 -0
  624. package/ui-dist/assets/haxe-H-WmDvRZ.js +1 -0
  625. package/ui-dist/assets/http-DBlCnlav.js +1 -0
  626. package/ui-dist/assets/idl-BEugSyMb.js +1 -0
  627. package/ui-dist/assets/index-0DYmQxT3.js +2 -0
  628. package/ui-dist/assets/index-1BRIjwwa.js +1 -0
  629. package/ui-dist/assets/index-4pxn9bje.js +1 -0
  630. package/ui-dist/assets/index-B02pjBpR.js +7 -0
  631. package/ui-dist/assets/index-BGjMkZzC.js +1 -0
  632. package/ui-dist/assets/index-BHsjaYJ1.js +1 -0
  633. package/ui-dist/assets/index-BTwpjL-6.js +1 -0
  634. package/ui-dist/assets/index-BZ72uG4K.js +6 -0
  635. package/ui-dist/assets/index-BpC8VHcj.js +3 -0
  636. package/ui-dist/assets/index-BrvXvCkd.js +1 -0
  637. package/ui-dist/assets/index-CEBcI-2f.js +1 -0
  638. package/ui-dist/assets/index-CkmjCahV.js +1 -0
  639. package/ui-dist/assets/index-Cp84QmJD.css +1 -0
  640. package/ui-dist/assets/index-CpVjtxma.js +1 -0
  641. package/ui-dist/assets/index-D3AJPUjv.js +1 -0
  642. package/ui-dist/assets/index-DRkeP4vs.js +13 -0
  643. package/ui-dist/assets/index-DXeNhnre.js +1180 -0
  644. package/ui-dist/assets/index-DXvXmooU.js +1 -0
  645. package/ui-dist/assets/index-DZdwValG.js +1 -0
  646. package/ui-dist/assets/index-DbWj5-qO.js +1 -0
  647. package/ui-dist/assets/index-DbcKBTbp.js +1 -0
  648. package/ui-dist/assets/index-DdAQdjTR.js +1 -0
  649. package/ui-dist/assets/index-DlImcHKo.js +1 -0
  650. package/ui-dist/assets/index-X9LdJDbl.js +1 -0
  651. package/ui-dist/assets/infoDiagram-HS3SLOUP-CbJm6kuq.js +2 -0
  652. package/ui-dist/assets/init-Gi6I4Gst.js +1 -0
  653. package/ui-dist/assets/javascript-iXu5QeM3.js +1 -0
  654. package/ui-dist/assets/journeyDiagram-XKPGCS4Q-CeNVFpGu.js +139 -0
  655. package/ui-dist/assets/julia-DuME0IfC.js +1 -0
  656. package/ui-dist/assets/kanban-definition-3W4ZIXB7-DRqPoDRI.js +89 -0
  657. package/ui-dist/assets/katex-O9d3_IXG.js +261 -0
  658. package/ui-dist/assets/layout-CZTKj8OD.js +1 -0
  659. package/ui-dist/assets/linear-BDJjeIco.js +1 -0
  660. package/ui-dist/assets/livescript-BwQOo05w.js +1 -0
  661. package/ui-dist/assets/lua-BgMRiT3U.js +1 -0
  662. package/ui-dist/assets/mathematica-DTrFuWx2.js +1 -0
  663. package/ui-dist/assets/mbox-CNhZ1qSd.js +1 -0
  664. package/ui-dist/assets/mermaid.core-B5v7dPHY.js +256 -0
  665. package/ui-dist/assets/mindmap-definition-VGOIOE7T-zjw0AyzL.js +68 -0
  666. package/ui-dist/assets/mirc-CjQqDB4T.js +1 -0
  667. package/ui-dist/assets/mllike-CXdrOF99.js +1 -0
  668. package/ui-dist/assets/modelica-Dc1JOy9r.js +1 -0
  669. package/ui-dist/assets/mscgen-BA5vi2Kp.js +1 -0
  670. package/ui-dist/assets/mumps-BT43cFF4.js +1 -0
  671. package/ui-dist/assets/nginx-DdIZxoE0.js +1 -0
  672. package/ui-dist/assets/nsis-LdVXkNf5.js +1 -0
  673. package/ui-dist/assets/ntriples-BfvgReVJ.js +1 -0
  674. package/ui-dist/assets/octave-Ck1zUtKM.js +1 -0
  675. package/ui-dist/assets/ordinal-Cboi1Yqb.js +1 -0
  676. package/ui-dist/assets/oz-BzwKVEFT.js +1 -0
  677. package/ui-dist/assets/pascal--L3eBynH.js +1 -0
  678. package/ui-dist/assets/perl-CdXCOZ3F.js +1 -0
  679. package/ui-dist/assets/pieDiagram-ADFJNKIX-ojNQ8Ukr.js +30 -0
  680. package/ui-dist/assets/pig-CevX1Tat.js +1 -0
  681. package/ui-dist/assets/powershell-CFHJl5sT.js +1 -0
  682. package/ui-dist/assets/properties-C78fOPTZ.js +1 -0
  683. package/ui-dist/assets/protobuf-ChK-085T.js +1 -0
  684. package/ui-dist/assets/pug-DeIclll2.js +1 -0
  685. package/ui-dist/assets/puppet-DMA9R1ak.js +1 -0
  686. package/ui-dist/assets/python-BuPzkPfP.js +1 -0
  687. package/ui-dist/assets/q-pXgVlZs6.js +1 -0
  688. package/ui-dist/assets/quadrantDiagram-AYHSOK5B-B8K2F86x.js +7 -0
  689. package/ui-dist/assets/r-B6wPVr8A.js +1 -0
  690. package/ui-dist/assets/requirementDiagram-UZGBJVZJ-DA_Bjcpk.js +64 -0
  691. package/ui-dist/assets/rpm-CTu-6PCP.js +1 -0
  692. package/ui-dist/assets/ruby-B2Rjki9n.js +1 -0
  693. package/ui-dist/assets/sankeyDiagram-TZEHDZUN-yQfMgroQ.js +10 -0
  694. package/ui-dist/assets/sas-B4kiWyti.js +1 -0
  695. package/ui-dist/assets/scheme-C41bIUwD.js +1 -0
  696. package/ui-dist/assets/sequenceDiagram-WL72ISMW-CWQm0UQc.js +145 -0
  697. package/ui-dist/assets/shell-CjFT_Tl9.js +1 -0
  698. package/ui-dist/assets/sieve-C3Gn_uJK.js +1 -0
  699. package/ui-dist/assets/simple-mode-GW_nhZxv.js +1 -0
  700. package/ui-dist/assets/smalltalk-CnHTOXQT.js +1 -0
  701. package/ui-dist/assets/solr-DehyRSwq.js +1 -0
  702. package/ui-dist/assets/sparql-DkYu6x3z.js +1 -0
  703. package/ui-dist/assets/spreadsheet-BCZA_wO0.js +1 -0
  704. package/ui-dist/assets/sql-D0XecflT.js +1 -0
  705. package/ui-dist/assets/stateDiagram-FKZM4ZOC-C9L_ELvE.js +1 -0
  706. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-D3i22gRM.js +1 -0
  707. package/ui-dist/assets/stex-C3f8Ysf7.js +1 -0
  708. package/ui-dist/assets/stylus-B533Al4x.js +1 -0
  709. package/ui-dist/assets/swift-BzpIVaGY.js +1 -0
  710. package/ui-dist/assets/tcl-DVfN8rqt.js +1 -0
  711. package/ui-dist/assets/textile-CnDTJFAw.js +1 -0
  712. package/ui-dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  713. package/ui-dist/assets/tiki-DGYXhP31.js +1 -0
  714. package/ui-dist/assets/timeline-definition-IT6M3QCI-Bfva-2zq.js +61 -0
  715. package/ui-dist/assets/toml-Bm5Em-hy.js +1 -0
  716. package/ui-dist/assets/treemap-GDKQZRPO-6wTQWQt4.js +162 -0
  717. package/ui-dist/assets/troff-wAsdV37c.js +1 -0
  718. package/ui-dist/assets/ttcn-CfJYG6tj.js +1 -0
  719. package/ui-dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  720. package/ui-dist/assets/turtle-B1tBg_DP.js +1 -0
  721. package/ui-dist/assets/vb-CmGdzxic.js +1 -0
  722. package/ui-dist/assets/vbscript-BuJXcnF6.js +1 -0
  723. package/ui-dist/assets/velocity-D8B20fx6.js +1 -0
  724. package/ui-dist/assets/verilog-C6RDOZhf.js +1 -0
  725. package/ui-dist/assets/vhdl-lSbBsy5d.js +1 -0
  726. package/ui-dist/assets/webidl-ZXfAyPTL.js +1 -0
  727. package/ui-dist/assets/xquery-DzFWVndE.js +1 -0
  728. package/ui-dist/assets/xychartDiagram-PRI3JC2R-DNsmIw3v.js +7 -0
  729. package/ui-dist/assets/yacas-BJ4BC0dw.js +1 -0
  730. package/ui-dist/assets/z80-Hz9HOZM7.js +1 -0
  731. package/ui-dist/brands/opencode-logo-dark-square.svg +18 -0
  732. package/ui-dist/brands/opencode-logo-light-square.svg +18 -0
  733. package/ui-dist/favicon-16x16.png +0 -0
  734. package/ui-dist/favicon-32x32.png +0 -0
  735. package/ui-dist/favicon.ico +0 -0
  736. package/ui-dist/favicon.svg +9 -0
  737. package/ui-dist/index.html +48 -0
  738. package/ui-dist/site.webmanifest +30 -0
  739. package/ui-dist/sw.js +42 -0
  740. package/ui-dist/worktree-favicon-16x16.png +0 -0
  741. package/ui-dist/worktree-favicon-32x32.png +0 -0
  742. package/ui-dist/worktree-favicon.ico +0 -0
  743. package/ui-dist/worktree-favicon.svg +9 -0
@@ -0,0 +1,1235 @@
1
+ import { spawn } from "node:child_process";
2
+ import fs from "node:fs/promises";
3
+ import net from "node:net";
4
+ import { createHash, randomUUID } from "node:crypto";
5
+ import path from "node:path";
6
+ import { setTimeout as delay } from "node:timers/promises";
7
+ import { workspaceRuntimeServices } from "@fidelios/db";
8
+ import { and, desc, eq, inArray } from "drizzle-orm";
9
+ import { asNumber, asString, parseObject, renderTemplate } from "../adapters/utils.js";
10
+ import { resolveHomeAwarePath } from "../home-paths.js";
11
+ const runtimeServicesById = new Map();
12
+ const runtimeServicesByReuseKey = new Map();
13
+ const runtimeServiceLeasesByRun = new Map();
14
+ function stableStringify(value) {
15
+ if (Array.isArray(value)) {
16
+ return `[${value.map((entry) => stableStringify(entry)).join(",")}]`;
17
+ }
18
+ if (value && typeof value === "object") {
19
+ const rec = value;
20
+ return `{${Object.keys(rec).sort().map((key) => `${JSON.stringify(key)}:${stableStringify(rec[key])}`).join(",")}}`;
21
+ }
22
+ return JSON.stringify(value);
23
+ }
24
+ export function sanitizeRuntimeServiceBaseEnv(baseEnv) {
25
+ const env = { ...baseEnv };
26
+ for (const key of Object.keys(env)) {
27
+ if (key.startsWith("FIDELIOS_")) {
28
+ delete env[key];
29
+ }
30
+ }
31
+ delete env.DATABASE_URL;
32
+ return env;
33
+ }
34
+ function stableRuntimeServiceId(input) {
35
+ if (input.reportId)
36
+ return input.reportId;
37
+ const digest = createHash("sha256")
38
+ .update(stableStringify({
39
+ adapterType: input.adapterType,
40
+ runId: input.runId,
41
+ scopeType: input.scopeType,
42
+ scopeId: input.scopeId,
43
+ serviceName: input.serviceName,
44
+ providerRef: input.providerRef,
45
+ reuseKey: input.reuseKey,
46
+ }))
47
+ .digest("hex")
48
+ .slice(0, 32);
49
+ return `${input.adapterType}-${digest}`;
50
+ }
51
+ function toRuntimeServiceRef(record, overrides) {
52
+ return {
53
+ id: record.id,
54
+ companyId: record.companyId,
55
+ projectId: record.projectId,
56
+ projectWorkspaceId: record.projectWorkspaceId,
57
+ executionWorkspaceId: record.executionWorkspaceId,
58
+ issueId: record.issueId,
59
+ serviceName: record.serviceName,
60
+ status: record.status,
61
+ lifecycle: record.lifecycle,
62
+ scopeType: record.scopeType,
63
+ scopeId: record.scopeId,
64
+ reuseKey: record.reuseKey,
65
+ command: record.command,
66
+ cwd: record.cwd,
67
+ port: record.port,
68
+ url: record.url,
69
+ provider: record.provider,
70
+ providerRef: record.providerRef,
71
+ ownerAgentId: record.ownerAgentId,
72
+ startedByRunId: record.startedByRunId,
73
+ lastUsedAt: record.lastUsedAt,
74
+ startedAt: record.startedAt,
75
+ stoppedAt: record.stoppedAt,
76
+ stopPolicy: record.stopPolicy,
77
+ healthStatus: record.healthStatus,
78
+ reused: record.reused,
79
+ ...overrides,
80
+ };
81
+ }
82
+ function sanitizeSlugPart(value, fallback) {
83
+ const raw = (value ?? "").trim().toLowerCase();
84
+ const normalized = raw
85
+ .replace(/[^a-z0-9/_-]+/g, "-")
86
+ .replace(/-+/g, "-")
87
+ .replace(/^[-/]+|[-/]+$/g, "");
88
+ return normalized.length > 0 ? normalized : fallback;
89
+ }
90
+ function renderWorkspaceTemplate(template, input) {
91
+ const issueIdentifier = input.issue?.identifier ?? input.issue?.id ?? "issue";
92
+ const slug = sanitizeSlugPart(input.issue?.title, sanitizeSlugPart(issueIdentifier, "issue"));
93
+ return renderTemplate(template, {
94
+ issue: {
95
+ id: input.issue?.id ?? "",
96
+ identifier: input.issue?.identifier ?? "",
97
+ title: input.issue?.title ?? "",
98
+ },
99
+ agent: {
100
+ id: input.agent.id,
101
+ name: input.agent.name,
102
+ },
103
+ project: {
104
+ id: input.projectId ?? "",
105
+ },
106
+ workspace: {
107
+ repoRef: input.repoRef ?? "",
108
+ },
109
+ slug,
110
+ });
111
+ }
112
+ function sanitizeBranchName(value) {
113
+ return value
114
+ .trim()
115
+ .replace(/[^A-Za-z0-9._/-]+/g, "-")
116
+ .replace(/-+/g, "-")
117
+ .replace(/^[-/.]+|[-/.]+$/g, "")
118
+ .slice(0, 120) || "fidelios-work";
119
+ }
120
+ function isAbsolutePath(value) {
121
+ return path.isAbsolute(value) || value.startsWith("~");
122
+ }
123
+ function resolveConfiguredPath(value, baseDir) {
124
+ if (isAbsolutePath(value)) {
125
+ return resolveHomeAwarePath(value);
126
+ }
127
+ return path.resolve(baseDir, value);
128
+ }
129
+ function formatCommandForDisplay(command, args) {
130
+ return [command, ...args]
131
+ .map((part) => (/^[A-Za-z0-9_./:-]+$/.test(part) ? part : JSON.stringify(part)))
132
+ .join(" ");
133
+ }
134
+ async function executeProcess(input) {
135
+ const proc = await new Promise((resolve, reject) => {
136
+ const child = spawn(input.command, input.args, {
137
+ cwd: input.cwd,
138
+ stdio: ["ignore", "pipe", "pipe"],
139
+ env: input.env ?? process.env,
140
+ });
141
+ let stdout = "";
142
+ let stderr = "";
143
+ child.stdout?.on("data", (chunk) => {
144
+ stdout += String(chunk);
145
+ });
146
+ child.stderr?.on("data", (chunk) => {
147
+ stderr += String(chunk);
148
+ });
149
+ child.on("error", reject);
150
+ child.on("close", (code) => resolve({ stdout, stderr, code }));
151
+ });
152
+ return proc;
153
+ }
154
+ async function runGit(args, cwd) {
155
+ const proc = await executeProcess({
156
+ command: "git",
157
+ args,
158
+ cwd,
159
+ });
160
+ if (proc.code !== 0) {
161
+ throw new Error(proc.stderr.trim() || proc.stdout.trim() || `git ${args.join(" ")} failed`);
162
+ }
163
+ return proc.stdout.trim();
164
+ }
165
+ function gitErrorIncludes(error, needle) {
166
+ const message = error instanceof Error ? error.message : String(error);
167
+ return message.toLowerCase().includes(needle.toLowerCase());
168
+ }
169
+ async function directoryExists(value) {
170
+ return fs.stat(value).then((stats) => stats.isDirectory()).catch(() => false);
171
+ }
172
+ function terminateChildProcess(child) {
173
+ if (!child.pid)
174
+ return;
175
+ if (process.platform !== "win32") {
176
+ try {
177
+ process.kill(-child.pid, "SIGTERM");
178
+ return;
179
+ }
180
+ catch {
181
+ // Fall through to the direct child kill.
182
+ }
183
+ }
184
+ if (!child.killed) {
185
+ child.kill("SIGTERM");
186
+ }
187
+ }
188
+ function buildWorkspaceCommandEnv(input) {
189
+ const env = { ...process.env };
190
+ env.FIDELIOS_WORKSPACE_CWD = input.worktreePath;
191
+ env.FIDELIOS_WORKSPACE_PATH = input.worktreePath;
192
+ env.FIDELIOS_WORKSPACE_WORKTREE_PATH = input.worktreePath;
193
+ env.FIDELIOS_WORKSPACE_BRANCH = input.branchName;
194
+ env.FIDELIOS_WORKSPACE_BASE_CWD = input.base.baseCwd;
195
+ env.FIDELIOS_WORKSPACE_REPO_ROOT = input.repoRoot;
196
+ env.FIDELIOS_WORKSPACE_SOURCE = input.base.source;
197
+ env.FIDELIOS_WORKSPACE_REPO_REF = input.base.repoRef ?? "";
198
+ env.FIDELIOS_WORKSPACE_REPO_URL = input.base.repoUrl ?? "";
199
+ env.FIDELIOS_WORKSPACE_CREATED = input.created ? "true" : "false";
200
+ env.FIDELIOS_PROJECT_ID = input.base.projectId ?? "";
201
+ env.FIDELIOS_PROJECT_WORKSPACE_ID = input.base.workspaceId ?? "";
202
+ env.FIDELIOS_AGENT_ID = input.agent.id;
203
+ env.FIDELIOS_AGENT_NAME = input.agent.name;
204
+ env.FIDELIOS_COMPANY_ID = input.agent.companyId;
205
+ env.FIDELIOS_ISSUE_ID = input.issue?.id ?? "";
206
+ env.FIDELIOS_ISSUE_IDENTIFIER = input.issue?.identifier ?? "";
207
+ env.FIDELIOS_ISSUE_TITLE = input.issue?.title ?? "";
208
+ return env;
209
+ }
210
+ async function runWorkspaceCommand(input) {
211
+ const shell = process.env.SHELL?.trim() || "/bin/sh";
212
+ const proc = await executeProcess({
213
+ command: shell,
214
+ args: ["-c", input.command],
215
+ cwd: input.cwd,
216
+ env: input.env,
217
+ });
218
+ if (proc.code === 0)
219
+ return;
220
+ const details = [proc.stderr.trim(), proc.stdout.trim()].filter(Boolean).join("\n");
221
+ throw new Error(details.length > 0
222
+ ? `${input.label} failed: ${details}`
223
+ : `${input.label} failed with exit code ${proc.code ?? -1}`);
224
+ }
225
+ async function recordGitOperation(recorder, input) {
226
+ if (!recorder) {
227
+ return runGit(input.args, input.cwd);
228
+ }
229
+ let stdout = "";
230
+ let stderr = "";
231
+ let code = null;
232
+ await recorder.recordOperation({
233
+ phase: input.phase,
234
+ command: formatCommandForDisplay("git", input.args),
235
+ cwd: input.cwd,
236
+ metadata: input.metadata ?? null,
237
+ run: async () => {
238
+ const result = await executeProcess({
239
+ command: "git",
240
+ args: input.args,
241
+ cwd: input.cwd,
242
+ });
243
+ stdout = result.stdout;
244
+ stderr = result.stderr;
245
+ code = result.code;
246
+ return {
247
+ status: result.code === 0 ? "succeeded" : "failed",
248
+ exitCode: result.code,
249
+ stdout: result.stdout,
250
+ stderr: result.stderr,
251
+ system: result.code === 0 ? input.successMessage ?? null : null,
252
+ };
253
+ },
254
+ });
255
+ if (code !== 0) {
256
+ const details = [stderr.trim(), stdout.trim()].filter(Boolean).join("\n");
257
+ throw new Error(details.length > 0
258
+ ? `${input.failureLabel ?? `git ${input.args.join(" ")}`} failed: ${details}`
259
+ : `${input.failureLabel ?? `git ${input.args.join(" ")}`} failed with exit code ${code ?? -1}`);
260
+ }
261
+ return stdout.trim();
262
+ }
263
+ async function recordWorkspaceCommandOperation(recorder, input) {
264
+ if (!recorder) {
265
+ await runWorkspaceCommand(input);
266
+ return;
267
+ }
268
+ let stdout = "";
269
+ let stderr = "";
270
+ let code = null;
271
+ await recorder.recordOperation({
272
+ phase: input.phase,
273
+ command: input.command,
274
+ cwd: input.cwd,
275
+ metadata: input.metadata ?? null,
276
+ run: async () => {
277
+ const shell = process.env.SHELL?.trim() || "/bin/sh";
278
+ const result = await executeProcess({
279
+ command: shell,
280
+ args: ["-c", input.command],
281
+ cwd: input.cwd,
282
+ env: input.env,
283
+ });
284
+ stdout = result.stdout;
285
+ stderr = result.stderr;
286
+ code = result.code;
287
+ return {
288
+ status: result.code === 0 ? "succeeded" : "failed",
289
+ exitCode: result.code,
290
+ stdout: result.stdout,
291
+ stderr: result.stderr,
292
+ system: result.code === 0 ? input.successMessage ?? null : null,
293
+ };
294
+ },
295
+ });
296
+ if (code === 0)
297
+ return;
298
+ const details = [stderr.trim(), stdout.trim()].filter(Boolean).join("\n");
299
+ throw new Error(details.length > 0
300
+ ? `${input.label} failed: ${details}`
301
+ : `${input.label} failed with exit code ${code ?? -1}`);
302
+ }
303
+ async function provisionExecutionWorktree(input) {
304
+ const provisionCommand = asString(input.strategy.provisionCommand, "").trim();
305
+ if (!provisionCommand)
306
+ return;
307
+ await recordWorkspaceCommandOperation(input.recorder, {
308
+ phase: "workspace_provision",
309
+ command: provisionCommand,
310
+ cwd: input.worktreePath,
311
+ env: buildWorkspaceCommandEnv({
312
+ base: input.base,
313
+ repoRoot: input.repoRoot,
314
+ worktreePath: input.worktreePath,
315
+ branchName: input.branchName,
316
+ issue: input.issue,
317
+ agent: input.agent,
318
+ created: input.created,
319
+ }),
320
+ label: `Execution workspace provision command "${provisionCommand}"`,
321
+ metadata: {
322
+ repoRoot: input.repoRoot,
323
+ worktreePath: input.worktreePath,
324
+ branchName: input.branchName,
325
+ created: input.created,
326
+ },
327
+ successMessage: `Provisioned workspace at ${input.worktreePath}\n`,
328
+ });
329
+ }
330
+ function buildExecutionWorkspaceCleanupEnv(input) {
331
+ const env = sanitizeRuntimeServiceBaseEnv(process.env);
332
+ env.FIDELIOS_WORKSPACE_CWD = input.workspace.cwd ?? "";
333
+ env.FIDELIOS_WORKSPACE_PATH = input.workspace.cwd ?? "";
334
+ env.FIDELIOS_WORKSPACE_WORKTREE_PATH =
335
+ input.workspace.providerRef ?? input.workspace.cwd ?? "";
336
+ env.FIDELIOS_WORKSPACE_BRANCH = input.workspace.branchName ?? "";
337
+ env.FIDELIOS_WORKSPACE_BASE_CWD = input.projectWorkspaceCwd ?? "";
338
+ env.FIDELIOS_WORKSPACE_REPO_ROOT = input.projectWorkspaceCwd ?? "";
339
+ env.FIDELIOS_WORKSPACE_REPO_URL = input.workspace.repoUrl ?? "";
340
+ env.FIDELIOS_WORKSPACE_REPO_REF = input.workspace.baseRef ?? "";
341
+ env.FIDELIOS_PROJECT_ID = input.workspace.projectId ?? "";
342
+ env.FIDELIOS_PROJECT_WORKSPACE_ID = input.workspace.projectWorkspaceId ?? "";
343
+ env.FIDELIOS_ISSUE_ID = input.workspace.sourceIssueId ?? "";
344
+ return env;
345
+ }
346
+ async function resolveGitRepoRootForWorkspaceCleanup(worktreePath, projectWorkspaceCwd) {
347
+ if (projectWorkspaceCwd) {
348
+ const resolvedProjectWorkspaceCwd = path.resolve(projectWorkspaceCwd);
349
+ const gitDir = await runGit(["rev-parse", "--git-common-dir"], resolvedProjectWorkspaceCwd)
350
+ .catch(() => null);
351
+ if (gitDir) {
352
+ const resolvedGitDir = path.resolve(resolvedProjectWorkspaceCwd, gitDir);
353
+ return path.dirname(resolvedGitDir);
354
+ }
355
+ }
356
+ const gitDir = await runGit(["rev-parse", "--git-common-dir"], worktreePath).catch(() => null);
357
+ if (!gitDir)
358
+ return null;
359
+ const resolvedGitDir = path.resolve(worktreePath, gitDir);
360
+ return path.dirname(resolvedGitDir);
361
+ }
362
+ export async function realizeExecutionWorkspace(input) {
363
+ const rawStrategy = parseObject(input.config.workspaceStrategy);
364
+ const strategyType = asString(rawStrategy.type, "project_primary");
365
+ if (strategyType !== "git_worktree") {
366
+ return {
367
+ ...input.base,
368
+ strategy: "project_primary",
369
+ cwd: input.base.baseCwd,
370
+ branchName: null,
371
+ worktreePath: null,
372
+ warnings: [],
373
+ created: false,
374
+ };
375
+ }
376
+ const repoRoot = await runGit(["rev-parse", "--show-toplevel"], input.base.baseCwd);
377
+ const branchTemplate = asString(rawStrategy.branchTemplate, "{{issue.identifier}}-{{slug}}");
378
+ const renderedBranch = renderWorkspaceTemplate(branchTemplate, {
379
+ issue: input.issue,
380
+ agent: input.agent,
381
+ projectId: input.base.projectId,
382
+ repoRef: input.base.repoRef,
383
+ });
384
+ const branchName = sanitizeBranchName(renderedBranch);
385
+ const configuredParentDir = asString(rawStrategy.worktreeParentDir, "");
386
+ const worktreeParentDir = configuredParentDir
387
+ ? resolveConfiguredPath(configuredParentDir, repoRoot)
388
+ : path.join(repoRoot, ".fidelios", "worktrees");
389
+ const worktreePath = path.join(worktreeParentDir, branchName);
390
+ const baseRef = asString(rawStrategy.baseRef, input.base.repoRef ?? "HEAD");
391
+ await fs.mkdir(worktreeParentDir, { recursive: true });
392
+ const existingWorktree = await directoryExists(worktreePath);
393
+ if (existingWorktree) {
394
+ const existingGitDir = await runGit(["rev-parse", "--git-dir"], worktreePath).catch(() => null);
395
+ if (existingGitDir) {
396
+ if (input.recorder) {
397
+ await input.recorder.recordOperation({
398
+ phase: "worktree_prepare",
399
+ cwd: repoRoot,
400
+ metadata: {
401
+ repoRoot,
402
+ worktreePath,
403
+ branchName,
404
+ baseRef,
405
+ created: false,
406
+ reused: true,
407
+ },
408
+ run: async () => ({
409
+ status: "succeeded",
410
+ exitCode: 0,
411
+ system: `Reused existing git worktree at ${worktreePath}\n`,
412
+ }),
413
+ });
414
+ }
415
+ await provisionExecutionWorktree({
416
+ strategy: rawStrategy,
417
+ base: input.base,
418
+ repoRoot,
419
+ worktreePath,
420
+ branchName,
421
+ issue: input.issue,
422
+ agent: input.agent,
423
+ created: false,
424
+ recorder: input.recorder ?? null,
425
+ });
426
+ return {
427
+ ...input.base,
428
+ strategy: "git_worktree",
429
+ cwd: worktreePath,
430
+ branchName,
431
+ worktreePath,
432
+ warnings: [],
433
+ created: false,
434
+ };
435
+ }
436
+ throw new Error(`Configured worktree path "${worktreePath}" already exists and is not a git worktree.`);
437
+ }
438
+ try {
439
+ await recordGitOperation(input.recorder, {
440
+ phase: "worktree_prepare",
441
+ args: ["worktree", "add", "-b", branchName, worktreePath, baseRef],
442
+ cwd: repoRoot,
443
+ metadata: {
444
+ repoRoot,
445
+ worktreePath,
446
+ branchName,
447
+ baseRef,
448
+ created: true,
449
+ },
450
+ successMessage: `Created git worktree at ${worktreePath}\n`,
451
+ failureLabel: `git worktree add ${worktreePath}`,
452
+ });
453
+ }
454
+ catch (error) {
455
+ if (!gitErrorIncludes(error, "already exists")) {
456
+ throw error;
457
+ }
458
+ await recordGitOperation(input.recorder, {
459
+ phase: "worktree_prepare",
460
+ args: ["worktree", "add", worktreePath, branchName],
461
+ cwd: repoRoot,
462
+ metadata: {
463
+ repoRoot,
464
+ worktreePath,
465
+ branchName,
466
+ baseRef,
467
+ created: false,
468
+ reusedExistingBranch: true,
469
+ },
470
+ successMessage: `Attached existing branch ${branchName} at ${worktreePath}\n`,
471
+ failureLabel: `git worktree add ${worktreePath}`,
472
+ });
473
+ }
474
+ await provisionExecutionWorktree({
475
+ strategy: rawStrategy,
476
+ base: input.base,
477
+ repoRoot,
478
+ worktreePath,
479
+ branchName,
480
+ issue: input.issue,
481
+ agent: input.agent,
482
+ created: true,
483
+ recorder: input.recorder ?? null,
484
+ });
485
+ return {
486
+ ...input.base,
487
+ strategy: "git_worktree",
488
+ cwd: worktreePath,
489
+ branchName,
490
+ worktreePath,
491
+ warnings: [],
492
+ created: true,
493
+ };
494
+ }
495
+ export async function cleanupExecutionWorkspaceArtifacts(input) {
496
+ const warnings = [];
497
+ const workspacePath = input.workspace.providerRef ?? input.workspace.cwd;
498
+ const cleanupEnv = buildExecutionWorkspaceCleanupEnv({
499
+ workspace: input.workspace,
500
+ projectWorkspaceCwd: input.projectWorkspace?.cwd ?? null,
501
+ });
502
+ const createdByRuntime = input.workspace.metadata?.createdByRuntime === true;
503
+ const cleanupCommands = [
504
+ input.projectWorkspace?.cleanupCommand ?? null,
505
+ input.teardownCommand ?? null,
506
+ ]
507
+ .map((value) => asString(value, "").trim())
508
+ .filter(Boolean);
509
+ for (const command of cleanupCommands) {
510
+ try {
511
+ await recordWorkspaceCommandOperation(input.recorder, {
512
+ phase: "workspace_teardown",
513
+ command,
514
+ cwd: workspacePath ?? input.projectWorkspace?.cwd ?? process.cwd(),
515
+ env: cleanupEnv,
516
+ label: `Execution workspace cleanup command "${command}"`,
517
+ metadata: {
518
+ workspaceId: input.workspace.id,
519
+ workspacePath,
520
+ branchName: input.workspace.branchName,
521
+ providerType: input.workspace.providerType,
522
+ },
523
+ successMessage: `Completed cleanup command "${command}"\n`,
524
+ });
525
+ }
526
+ catch (err) {
527
+ warnings.push(err instanceof Error ? err.message : String(err));
528
+ }
529
+ }
530
+ if (input.workspace.providerType === "git_worktree" && workspacePath) {
531
+ const repoRoot = await resolveGitRepoRootForWorkspaceCleanup(workspacePath, input.projectWorkspace?.cwd ?? null);
532
+ const worktreeExists = await directoryExists(workspacePath);
533
+ if (worktreeExists) {
534
+ if (!repoRoot) {
535
+ warnings.push(`Could not resolve git repo root for "${workspacePath}".`);
536
+ }
537
+ else {
538
+ try {
539
+ await recordGitOperation(input.recorder, {
540
+ phase: "worktree_cleanup",
541
+ args: ["worktree", "remove", "--force", workspacePath],
542
+ cwd: repoRoot,
543
+ metadata: {
544
+ workspaceId: input.workspace.id,
545
+ workspacePath,
546
+ branchName: input.workspace.branchName,
547
+ cleanupAction: "worktree_remove",
548
+ },
549
+ successMessage: `Removed git worktree ${workspacePath}\n`,
550
+ failureLabel: `git worktree remove ${workspacePath}`,
551
+ });
552
+ }
553
+ catch (err) {
554
+ warnings.push(err instanceof Error ? err.message : String(err));
555
+ }
556
+ }
557
+ }
558
+ if (createdByRuntime && input.workspace.branchName) {
559
+ if (!repoRoot) {
560
+ warnings.push(`Could not resolve git repo root to delete branch "${input.workspace.branchName}".`);
561
+ }
562
+ else {
563
+ try {
564
+ await recordGitOperation(input.recorder, {
565
+ phase: "worktree_cleanup",
566
+ args: ["branch", "-d", input.workspace.branchName],
567
+ cwd: repoRoot,
568
+ metadata: {
569
+ workspaceId: input.workspace.id,
570
+ workspacePath,
571
+ branchName: input.workspace.branchName,
572
+ cleanupAction: "branch_delete",
573
+ },
574
+ successMessage: `Deleted branch ${input.workspace.branchName}\n`,
575
+ failureLabel: `git branch -d ${input.workspace.branchName}`,
576
+ });
577
+ }
578
+ catch (err) {
579
+ const message = err instanceof Error ? err.message : String(err);
580
+ warnings.push(`Skipped deleting branch "${input.workspace.branchName}": ${message}`);
581
+ }
582
+ }
583
+ }
584
+ }
585
+ else if (input.workspace.providerType === "local_fs" && createdByRuntime && workspacePath) {
586
+ const projectWorkspaceCwd = input.projectWorkspace?.cwd ? path.resolve(input.projectWorkspace.cwd) : null;
587
+ const resolvedWorkspacePath = path.resolve(workspacePath);
588
+ const containsProjectWorkspace = projectWorkspaceCwd
589
+ ? (resolvedWorkspacePath === projectWorkspaceCwd ||
590
+ projectWorkspaceCwd.startsWith(`${resolvedWorkspacePath}${path.sep}`))
591
+ : false;
592
+ if (containsProjectWorkspace) {
593
+ warnings.push(`Refusing to remove path "${workspacePath}" because it contains the project workspace.`);
594
+ }
595
+ else {
596
+ await fs.rm(resolvedWorkspacePath, { recursive: true, force: true });
597
+ if (input.recorder) {
598
+ await input.recorder.recordOperation({
599
+ phase: "workspace_teardown",
600
+ cwd: projectWorkspaceCwd ?? process.cwd(),
601
+ metadata: {
602
+ workspaceId: input.workspace.id,
603
+ workspacePath: resolvedWorkspacePath,
604
+ cleanupAction: "remove_local_fs",
605
+ },
606
+ run: async () => ({
607
+ status: "succeeded",
608
+ exitCode: 0,
609
+ system: `Removed local workspace directory ${resolvedWorkspacePath}\n`,
610
+ }),
611
+ });
612
+ }
613
+ }
614
+ }
615
+ const cleaned = !workspacePath ||
616
+ !(await directoryExists(workspacePath));
617
+ return {
618
+ cleanedPath: workspacePath,
619
+ cleaned,
620
+ warnings,
621
+ };
622
+ }
623
+ async function allocatePort() {
624
+ return await new Promise((resolve, reject) => {
625
+ const server = net.createServer();
626
+ server.listen(0, "127.0.0.1", () => {
627
+ const address = server.address();
628
+ server.close((err) => {
629
+ if (err) {
630
+ reject(err);
631
+ return;
632
+ }
633
+ if (!address || typeof address === "string") {
634
+ reject(new Error("Failed to allocate port"));
635
+ return;
636
+ }
637
+ resolve(address.port);
638
+ });
639
+ });
640
+ server.on("error", reject);
641
+ });
642
+ }
643
+ function buildTemplateData(input) {
644
+ return {
645
+ workspace: {
646
+ cwd: input.workspace.cwd,
647
+ branchName: input.workspace.branchName ?? "",
648
+ worktreePath: input.workspace.worktreePath ?? "",
649
+ repoUrl: input.workspace.repoUrl ?? "",
650
+ repoRef: input.workspace.repoRef ?? "",
651
+ env: input.adapterEnv,
652
+ },
653
+ issue: {
654
+ id: input.issue?.id ?? "",
655
+ identifier: input.issue?.identifier ?? "",
656
+ title: input.issue?.title ?? "",
657
+ },
658
+ agent: {
659
+ id: input.agent.id,
660
+ name: input.agent.name,
661
+ },
662
+ port: input.port ?? "",
663
+ };
664
+ }
665
+ function resolveServiceScopeId(input) {
666
+ const scopeTypeRaw = asString(input.service.reuseScope, input.service.lifecycle === "shared" ? "project_workspace" : "run");
667
+ const scopeType = scopeTypeRaw === "project_workspace" ||
668
+ scopeTypeRaw === "execution_workspace" ||
669
+ scopeTypeRaw === "agent"
670
+ ? scopeTypeRaw
671
+ : "run";
672
+ if (scopeType === "project_workspace")
673
+ return { scopeType, scopeId: input.workspace.workspaceId ?? input.workspace.projectId };
674
+ if (scopeType === "execution_workspace") {
675
+ return { scopeType, scopeId: input.executionWorkspaceId ?? input.workspace.cwd };
676
+ }
677
+ if (scopeType === "agent")
678
+ return { scopeType, scopeId: input.agent.id };
679
+ return { scopeType: "run", scopeId: input.runId };
680
+ }
681
+ async function waitForReadiness(input) {
682
+ const readiness = parseObject(input.service.readiness);
683
+ const readinessType = asString(readiness.type, "");
684
+ if (readinessType !== "http" || !input.url)
685
+ return;
686
+ const timeoutSec = Math.max(1, asNumber(readiness.timeoutSec, 30));
687
+ const intervalMs = Math.max(100, asNumber(readiness.intervalMs, 500));
688
+ const deadline = Date.now() + timeoutSec * 1000;
689
+ let lastError = "service did not become ready";
690
+ while (Date.now() < deadline) {
691
+ try {
692
+ const response = await fetch(input.url);
693
+ if (response.ok)
694
+ return;
695
+ lastError = `received HTTP ${response.status}`;
696
+ }
697
+ catch (err) {
698
+ lastError = err instanceof Error ? err.message : String(err);
699
+ }
700
+ await delay(intervalMs);
701
+ }
702
+ throw new Error(`Readiness check failed for ${input.url}: ${lastError}`);
703
+ }
704
+ function toPersistedWorkspaceRuntimeService(record) {
705
+ return {
706
+ id: record.id,
707
+ companyId: record.companyId,
708
+ projectId: record.projectId,
709
+ projectWorkspaceId: record.projectWorkspaceId,
710
+ executionWorkspaceId: record.executionWorkspaceId,
711
+ issueId: record.issueId,
712
+ scopeType: record.scopeType,
713
+ scopeId: record.scopeId,
714
+ serviceName: record.serviceName,
715
+ status: record.status,
716
+ lifecycle: record.lifecycle,
717
+ reuseKey: record.reuseKey,
718
+ command: record.command,
719
+ cwd: record.cwd,
720
+ port: record.port,
721
+ url: record.url,
722
+ provider: record.provider,
723
+ providerRef: record.providerRef,
724
+ ownerAgentId: record.ownerAgentId,
725
+ startedByRunId: record.startedByRunId,
726
+ lastUsedAt: new Date(record.lastUsedAt),
727
+ startedAt: new Date(record.startedAt),
728
+ stoppedAt: record.stoppedAt ? new Date(record.stoppedAt) : null,
729
+ stopPolicy: record.stopPolicy,
730
+ healthStatus: record.healthStatus,
731
+ updatedAt: new Date(),
732
+ };
733
+ }
734
+ async function persistRuntimeServiceRecord(db, record) {
735
+ if (!db)
736
+ return;
737
+ const values = toPersistedWorkspaceRuntimeService(record);
738
+ await db
739
+ .insert(workspaceRuntimeServices)
740
+ .values(values)
741
+ .onConflictDoUpdate({
742
+ target: workspaceRuntimeServices.id,
743
+ set: {
744
+ projectId: values.projectId,
745
+ projectWorkspaceId: values.projectWorkspaceId,
746
+ executionWorkspaceId: values.executionWorkspaceId,
747
+ issueId: values.issueId,
748
+ scopeType: values.scopeType,
749
+ scopeId: values.scopeId,
750
+ serviceName: values.serviceName,
751
+ status: values.status,
752
+ lifecycle: values.lifecycle,
753
+ reuseKey: values.reuseKey,
754
+ command: values.command,
755
+ cwd: values.cwd,
756
+ port: values.port,
757
+ url: values.url,
758
+ provider: values.provider,
759
+ providerRef: values.providerRef,
760
+ ownerAgentId: values.ownerAgentId,
761
+ startedByRunId: values.startedByRunId,
762
+ lastUsedAt: values.lastUsedAt,
763
+ startedAt: values.startedAt,
764
+ stoppedAt: values.stoppedAt,
765
+ stopPolicy: values.stopPolicy,
766
+ healthStatus: values.healthStatus,
767
+ updatedAt: values.updatedAt,
768
+ },
769
+ });
770
+ }
771
+ function clearIdleTimer(record) {
772
+ if (!record.idleTimer)
773
+ return;
774
+ clearTimeout(record.idleTimer);
775
+ record.idleTimer = null;
776
+ }
777
+ export function normalizeAdapterManagedRuntimeServices(input) {
778
+ const nowIso = (input.now ?? new Date()).toISOString();
779
+ return input.reports.map((report) => {
780
+ const scopeType = report.scopeType ?? "run";
781
+ const scopeId = report.scopeId ??
782
+ (scopeType === "project_workspace"
783
+ ? input.workspace.workspaceId
784
+ : scopeType === "execution_workspace"
785
+ ? input.executionWorkspaceId ?? input.workspace.cwd
786
+ : scopeType === "agent"
787
+ ? input.agent.id
788
+ : input.runId) ??
789
+ null;
790
+ const serviceName = asString(report.serviceName, "").trim() || "service";
791
+ const status = report.status ?? "running";
792
+ const lifecycle = report.lifecycle ?? "ephemeral";
793
+ const healthStatus = report.healthStatus ??
794
+ (status === "running" ? "healthy" : status === "failed" ? "unhealthy" : "unknown");
795
+ return {
796
+ id: stableRuntimeServiceId({
797
+ adapterType: input.adapterType,
798
+ runId: input.runId,
799
+ scopeType,
800
+ scopeId,
801
+ serviceName,
802
+ reportId: report.id ?? null,
803
+ providerRef: report.providerRef ?? null,
804
+ reuseKey: report.reuseKey ?? null,
805
+ }),
806
+ companyId: input.agent.companyId,
807
+ projectId: report.projectId ?? input.workspace.projectId,
808
+ projectWorkspaceId: report.projectWorkspaceId ?? input.workspace.workspaceId,
809
+ executionWorkspaceId: input.executionWorkspaceId ?? null,
810
+ issueId: report.issueId ?? input.issue?.id ?? null,
811
+ serviceName,
812
+ status,
813
+ lifecycle,
814
+ scopeType,
815
+ scopeId,
816
+ reuseKey: report.reuseKey ?? null,
817
+ command: report.command ?? null,
818
+ cwd: report.cwd ?? null,
819
+ port: report.port ?? null,
820
+ url: report.url ?? null,
821
+ provider: "adapter_managed",
822
+ providerRef: report.providerRef ?? null,
823
+ ownerAgentId: report.ownerAgentId ?? input.agent.id,
824
+ startedByRunId: input.runId,
825
+ lastUsedAt: nowIso,
826
+ startedAt: nowIso,
827
+ stoppedAt: status === "running" || status === "starting" ? null : nowIso,
828
+ stopPolicy: report.stopPolicy ?? null,
829
+ healthStatus,
830
+ reused: false,
831
+ };
832
+ });
833
+ }
834
+ async function startLocalRuntimeService(input) {
835
+ const serviceName = asString(input.service.name, "service");
836
+ const lifecycle = asString(input.service.lifecycle, "shared") === "ephemeral" ? "ephemeral" : "shared";
837
+ const command = asString(input.service.command, "");
838
+ if (!command)
839
+ throw new Error(`Runtime service "${serviceName}" is missing command`);
840
+ const serviceCwdTemplate = asString(input.service.cwd, ".");
841
+ const portConfig = parseObject(input.service.port);
842
+ const port = asString(portConfig.type, "") === "auto" ? await allocatePort() : null;
843
+ const envConfig = parseObject(input.service.env);
844
+ const templateData = buildTemplateData({
845
+ workspace: input.workspace,
846
+ agent: input.agent,
847
+ issue: input.issue,
848
+ adapterEnv: input.adapterEnv,
849
+ port,
850
+ });
851
+ const serviceCwd = resolveConfiguredPath(renderTemplate(serviceCwdTemplate, templateData), input.workspace.cwd);
852
+ const env = {
853
+ ...sanitizeRuntimeServiceBaseEnv(process.env),
854
+ ...input.adapterEnv,
855
+ };
856
+ for (const [key, value] of Object.entries(envConfig)) {
857
+ if (typeof value === "string") {
858
+ env[key] = renderTemplate(value, templateData);
859
+ }
860
+ }
861
+ if (port) {
862
+ const portEnvKey = asString(portConfig.envKey, "PORT");
863
+ env[portEnvKey] = String(port);
864
+ }
865
+ const shell = process.env.SHELL?.trim() || "/bin/sh";
866
+ const child = spawn(shell, ["-lc", command], {
867
+ cwd: serviceCwd,
868
+ env,
869
+ detached: process.platform !== "win32",
870
+ stdio: ["ignore", "pipe", "pipe"],
871
+ });
872
+ let stderrExcerpt = "";
873
+ let stdoutExcerpt = "";
874
+ child.stdout?.on("data", async (chunk) => {
875
+ const text = String(chunk);
876
+ stdoutExcerpt = (stdoutExcerpt + text).slice(-4096);
877
+ if (input.onLog)
878
+ await input.onLog("stdout", `[service:${serviceName}] ${text}`);
879
+ });
880
+ child.stderr?.on("data", async (chunk) => {
881
+ const text = String(chunk);
882
+ stderrExcerpt = (stderrExcerpt + text).slice(-4096);
883
+ if (input.onLog)
884
+ await input.onLog("stderr", `[service:${serviceName}] ${text}`);
885
+ });
886
+ const expose = parseObject(input.service.expose);
887
+ const readiness = parseObject(input.service.readiness);
888
+ const urlTemplate = asString(expose.urlTemplate, "") ||
889
+ asString(readiness.urlTemplate, "");
890
+ const url = urlTemplate ? renderTemplate(urlTemplate, templateData) : null;
891
+ try {
892
+ await waitForReadiness({ service: input.service, url });
893
+ }
894
+ catch (err) {
895
+ terminateChildProcess(child);
896
+ throw new Error(`Failed to start runtime service "${serviceName}": ${err instanceof Error ? err.message : String(err)}${stderrExcerpt ? ` | stderr: ${stderrExcerpt.trim()}` : ""}`);
897
+ }
898
+ const envFingerprint = createHash("sha256").update(stableStringify(envConfig)).digest("hex");
899
+ return {
900
+ id: randomUUID(),
901
+ companyId: input.agent.companyId,
902
+ projectId: input.workspace.projectId,
903
+ projectWorkspaceId: input.workspace.workspaceId,
904
+ executionWorkspaceId: input.executionWorkspaceId ?? null,
905
+ issueId: input.issue?.id ?? null,
906
+ serviceName,
907
+ status: "running",
908
+ lifecycle,
909
+ scopeType: input.scopeType,
910
+ scopeId: input.scopeId,
911
+ reuseKey: input.reuseKey,
912
+ command,
913
+ cwd: serviceCwd,
914
+ port,
915
+ url,
916
+ provider: "local_process",
917
+ providerRef: child.pid ? String(child.pid) : null,
918
+ ownerAgentId: input.agent.id,
919
+ startedByRunId: input.runId,
920
+ lastUsedAt: new Date().toISOString(),
921
+ startedAt: new Date().toISOString(),
922
+ stoppedAt: null,
923
+ stopPolicy: parseObject(input.service.stopPolicy),
924
+ healthStatus: "healthy",
925
+ reused: false,
926
+ db: input.db,
927
+ child,
928
+ leaseRunIds: new Set([input.runId]),
929
+ idleTimer: null,
930
+ envFingerprint,
931
+ };
932
+ }
933
+ function scheduleIdleStop(record) {
934
+ clearIdleTimer(record);
935
+ const stopType = asString(record.stopPolicy?.type, "manual");
936
+ if (stopType !== "idle_timeout")
937
+ return;
938
+ const idleSeconds = Math.max(1, asNumber(record.stopPolicy?.idleSeconds, 1800));
939
+ record.idleTimer = setTimeout(() => {
940
+ stopRuntimeService(record.id).catch(() => undefined);
941
+ }, idleSeconds * 1000);
942
+ }
943
+ async function stopRuntimeService(serviceId) {
944
+ const record = runtimeServicesById.get(serviceId);
945
+ if (!record)
946
+ return;
947
+ clearIdleTimer(record);
948
+ record.status = "stopped";
949
+ record.lastUsedAt = new Date().toISOString();
950
+ record.stoppedAt = new Date().toISOString();
951
+ if (record.child && record.child.pid) {
952
+ terminateChildProcess(record.child);
953
+ }
954
+ runtimeServicesById.delete(serviceId);
955
+ if (record.reuseKey) {
956
+ runtimeServicesByReuseKey.delete(record.reuseKey);
957
+ }
958
+ await persistRuntimeServiceRecord(record.db, record);
959
+ }
960
+ async function markPersistedRuntimeServicesStoppedForExecutionWorkspace(input) {
961
+ const now = new Date();
962
+ await input.db
963
+ .update(workspaceRuntimeServices)
964
+ .set({
965
+ status: "stopped",
966
+ healthStatus: "unknown",
967
+ stoppedAt: now,
968
+ lastUsedAt: now,
969
+ updatedAt: now,
970
+ })
971
+ .where(and(eq(workspaceRuntimeServices.executionWorkspaceId, input.executionWorkspaceId), inArray(workspaceRuntimeServices.status, ["starting", "running"])));
972
+ }
973
+ function registerRuntimeService(db, record) {
974
+ record.db = db;
975
+ runtimeServicesById.set(record.id, record);
976
+ if (record.reuseKey) {
977
+ runtimeServicesByReuseKey.set(record.reuseKey, record.id);
978
+ }
979
+ record.child?.on("exit", (code, signal) => {
980
+ const current = runtimeServicesById.get(record.id);
981
+ if (!current)
982
+ return;
983
+ clearIdleTimer(current);
984
+ current.status = code === 0 || signal === "SIGTERM" ? "stopped" : "failed";
985
+ current.healthStatus = current.status === "failed" ? "unhealthy" : "unknown";
986
+ current.lastUsedAt = new Date().toISOString();
987
+ current.stoppedAt = new Date().toISOString();
988
+ runtimeServicesById.delete(current.id);
989
+ if (current.reuseKey && runtimeServicesByReuseKey.get(current.reuseKey) === current.id) {
990
+ runtimeServicesByReuseKey.delete(current.reuseKey);
991
+ }
992
+ void persistRuntimeServiceRecord(db, current);
993
+ });
994
+ }
995
+ export async function ensureRuntimeServicesForRun(input) {
996
+ const runtime = parseObject(input.config.workspaceRuntime);
997
+ const rawServices = Array.isArray(runtime.services)
998
+ ? runtime.services.filter((entry) => typeof entry === "object" && entry !== null)
999
+ : [];
1000
+ const acquiredServiceIds = [];
1001
+ const refs = [];
1002
+ runtimeServiceLeasesByRun.set(input.runId, acquiredServiceIds);
1003
+ try {
1004
+ for (const service of rawServices) {
1005
+ const lifecycle = asString(service.lifecycle, "shared") === "ephemeral" ? "ephemeral" : "shared";
1006
+ const { scopeType, scopeId } = resolveServiceScopeId({
1007
+ service,
1008
+ workspace: input.workspace,
1009
+ executionWorkspaceId: input.executionWorkspaceId,
1010
+ issue: input.issue,
1011
+ runId: input.runId,
1012
+ agent: input.agent,
1013
+ });
1014
+ const envConfig = parseObject(service.env);
1015
+ const envFingerprint = createHash("sha256").update(stableStringify(envConfig)).digest("hex");
1016
+ const serviceName = asString(service.name, "service");
1017
+ const reuseKey = lifecycle === "shared"
1018
+ ? [scopeType, scopeId ?? "", serviceName, envFingerprint].join(":")
1019
+ : null;
1020
+ if (reuseKey) {
1021
+ const existingId = runtimeServicesByReuseKey.get(reuseKey);
1022
+ const existing = existingId ? runtimeServicesById.get(existingId) : null;
1023
+ if (existing && existing.status === "running") {
1024
+ existing.leaseRunIds.add(input.runId);
1025
+ existing.lastUsedAt = new Date().toISOString();
1026
+ existing.stoppedAt = null;
1027
+ clearIdleTimer(existing);
1028
+ await persistRuntimeServiceRecord(input.db, existing);
1029
+ acquiredServiceIds.push(existing.id);
1030
+ refs.push(toRuntimeServiceRef(existing, { reused: true }));
1031
+ continue;
1032
+ }
1033
+ }
1034
+ const record = await startLocalRuntimeService({
1035
+ db: input.db,
1036
+ runId: input.runId,
1037
+ agent: input.agent,
1038
+ issue: input.issue,
1039
+ workspace: input.workspace,
1040
+ executionWorkspaceId: input.executionWorkspaceId,
1041
+ adapterEnv: input.adapterEnv,
1042
+ service,
1043
+ onLog: input.onLog,
1044
+ reuseKey,
1045
+ scopeType,
1046
+ scopeId,
1047
+ });
1048
+ registerRuntimeService(input.db, record);
1049
+ await persistRuntimeServiceRecord(input.db, record);
1050
+ acquiredServiceIds.push(record.id);
1051
+ refs.push(toRuntimeServiceRef(record));
1052
+ }
1053
+ }
1054
+ catch (err) {
1055
+ await releaseRuntimeServicesForRun(input.runId);
1056
+ throw err;
1057
+ }
1058
+ return refs;
1059
+ }
1060
+ export async function releaseRuntimeServicesForRun(runId) {
1061
+ const acquired = runtimeServiceLeasesByRun.get(runId) ?? [];
1062
+ runtimeServiceLeasesByRun.delete(runId);
1063
+ for (const serviceId of acquired) {
1064
+ const record = runtimeServicesById.get(serviceId);
1065
+ if (!record)
1066
+ continue;
1067
+ record.leaseRunIds.delete(runId);
1068
+ record.lastUsedAt = new Date().toISOString();
1069
+ const stopType = asString(record.stopPolicy?.type, record.lifecycle === "ephemeral" ? "on_run_finish" : "manual");
1070
+ await persistRuntimeServiceRecord(record.db, record);
1071
+ if (record.leaseRunIds.size === 0) {
1072
+ if (record.lifecycle === "ephemeral" || stopType === "on_run_finish") {
1073
+ await stopRuntimeService(serviceId);
1074
+ continue;
1075
+ }
1076
+ scheduleIdleStop(record);
1077
+ }
1078
+ }
1079
+ }
1080
+ export async function stopRuntimeServicesForExecutionWorkspace(input) {
1081
+ const normalizedWorkspaceCwd = input.workspaceCwd ? path.resolve(input.workspaceCwd) : null;
1082
+ const matchingServiceIds = Array.from(runtimeServicesById.values())
1083
+ .filter((record) => {
1084
+ if (record.executionWorkspaceId === input.executionWorkspaceId)
1085
+ return true;
1086
+ if (!normalizedWorkspaceCwd || !record.cwd)
1087
+ return false;
1088
+ const resolvedCwd = path.resolve(record.cwd);
1089
+ return (resolvedCwd === normalizedWorkspaceCwd ||
1090
+ resolvedCwd.startsWith(`${normalizedWorkspaceCwd}${path.sep}`));
1091
+ })
1092
+ .map((record) => record.id);
1093
+ for (const serviceId of matchingServiceIds) {
1094
+ await stopRuntimeService(serviceId);
1095
+ }
1096
+ if (input.db) {
1097
+ await markPersistedRuntimeServicesStoppedForExecutionWorkspace({
1098
+ db: input.db,
1099
+ executionWorkspaceId: input.executionWorkspaceId,
1100
+ });
1101
+ }
1102
+ }
1103
+ export async function listWorkspaceRuntimeServicesForProjectWorkspaces(db, companyId, projectWorkspaceIds) {
1104
+ if (projectWorkspaceIds.length === 0)
1105
+ return new Map();
1106
+ const rows = await db
1107
+ .select()
1108
+ .from(workspaceRuntimeServices)
1109
+ .where(and(eq(workspaceRuntimeServices.companyId, companyId), inArray(workspaceRuntimeServices.projectWorkspaceId, projectWorkspaceIds)))
1110
+ .orderBy(desc(workspaceRuntimeServices.updatedAt), desc(workspaceRuntimeServices.createdAt));
1111
+ const grouped = new Map();
1112
+ for (const row of rows) {
1113
+ if (!row.projectWorkspaceId)
1114
+ continue;
1115
+ const existing = grouped.get(row.projectWorkspaceId);
1116
+ if (existing)
1117
+ existing.push(row);
1118
+ else
1119
+ grouped.set(row.projectWorkspaceId, [row]);
1120
+ }
1121
+ return grouped;
1122
+ }
1123
+ export async function reconcilePersistedRuntimeServicesOnStartup(db) {
1124
+ const staleRows = await db
1125
+ .select({ id: workspaceRuntimeServices.id })
1126
+ .from(workspaceRuntimeServices)
1127
+ .where(and(eq(workspaceRuntimeServices.provider, "local_process"), inArray(workspaceRuntimeServices.status, ["starting", "running"])));
1128
+ if (staleRows.length === 0)
1129
+ return { reconciled: 0 };
1130
+ const now = new Date();
1131
+ await db
1132
+ .update(workspaceRuntimeServices)
1133
+ .set({
1134
+ status: "stopped",
1135
+ healthStatus: "unknown",
1136
+ stoppedAt: now,
1137
+ lastUsedAt: now,
1138
+ updatedAt: now,
1139
+ })
1140
+ .where(and(eq(workspaceRuntimeServices.provider, "local_process"), inArray(workspaceRuntimeServices.status, ["starting", "running"])));
1141
+ return { reconciled: staleRows.length };
1142
+ }
1143
+ export async function persistAdapterManagedRuntimeServices(input) {
1144
+ const refs = normalizeAdapterManagedRuntimeServices(input);
1145
+ if (refs.length === 0)
1146
+ return refs;
1147
+ const existingRows = await input.db
1148
+ .select()
1149
+ .from(workspaceRuntimeServices)
1150
+ .where(inArray(workspaceRuntimeServices.id, refs.map((ref) => ref.id)));
1151
+ const existingById = new Map(existingRows.map((row) => [row.id, row]));
1152
+ for (const ref of refs) {
1153
+ const existing = existingById.get(ref.id);
1154
+ const startedAt = existing?.startedAt ?? new Date(ref.startedAt);
1155
+ const createdAt = existing?.createdAt ?? new Date();
1156
+ await input.db
1157
+ .insert(workspaceRuntimeServices)
1158
+ .values({
1159
+ id: ref.id,
1160
+ companyId: ref.companyId,
1161
+ projectId: ref.projectId,
1162
+ projectWorkspaceId: ref.projectWorkspaceId,
1163
+ executionWorkspaceId: ref.executionWorkspaceId,
1164
+ issueId: ref.issueId,
1165
+ scopeType: ref.scopeType,
1166
+ scopeId: ref.scopeId,
1167
+ serviceName: ref.serviceName,
1168
+ status: ref.status,
1169
+ lifecycle: ref.lifecycle,
1170
+ reuseKey: ref.reuseKey,
1171
+ command: ref.command,
1172
+ cwd: ref.cwd,
1173
+ port: ref.port,
1174
+ url: ref.url,
1175
+ provider: ref.provider,
1176
+ providerRef: ref.providerRef,
1177
+ ownerAgentId: ref.ownerAgentId,
1178
+ startedByRunId: ref.startedByRunId,
1179
+ lastUsedAt: new Date(ref.lastUsedAt),
1180
+ startedAt,
1181
+ stoppedAt: ref.stoppedAt ? new Date(ref.stoppedAt) : null,
1182
+ stopPolicy: ref.stopPolicy,
1183
+ healthStatus: ref.healthStatus,
1184
+ createdAt,
1185
+ updatedAt: new Date(),
1186
+ })
1187
+ .onConflictDoUpdate({
1188
+ target: workspaceRuntimeServices.id,
1189
+ set: {
1190
+ projectId: ref.projectId,
1191
+ projectWorkspaceId: ref.projectWorkspaceId,
1192
+ executionWorkspaceId: ref.executionWorkspaceId,
1193
+ issueId: ref.issueId,
1194
+ scopeType: ref.scopeType,
1195
+ scopeId: ref.scopeId,
1196
+ serviceName: ref.serviceName,
1197
+ status: ref.status,
1198
+ lifecycle: ref.lifecycle,
1199
+ reuseKey: ref.reuseKey,
1200
+ command: ref.command,
1201
+ cwd: ref.cwd,
1202
+ port: ref.port,
1203
+ url: ref.url,
1204
+ provider: ref.provider,
1205
+ providerRef: ref.providerRef,
1206
+ ownerAgentId: ref.ownerAgentId,
1207
+ startedByRunId: ref.startedByRunId,
1208
+ lastUsedAt: new Date(ref.lastUsedAt),
1209
+ startedAt,
1210
+ stoppedAt: ref.stoppedAt ? new Date(ref.stoppedAt) : null,
1211
+ stopPolicy: ref.stopPolicy,
1212
+ healthStatus: ref.healthStatus,
1213
+ updatedAt: new Date(),
1214
+ },
1215
+ });
1216
+ }
1217
+ return refs;
1218
+ }
1219
+ export function buildWorkspaceReadyComment(input) {
1220
+ const lines = ["## Workspace Ready", ""];
1221
+ lines.push(`- Strategy: \`${input.workspace.strategy}\``);
1222
+ if (input.workspace.branchName)
1223
+ lines.push(`- Branch: \`${input.workspace.branchName}\``);
1224
+ lines.push(`- CWD: \`${input.workspace.cwd}\``);
1225
+ if (input.workspace.worktreePath && input.workspace.worktreePath !== input.workspace.cwd) {
1226
+ lines.push(`- Worktree: \`${input.workspace.worktreePath}\``);
1227
+ }
1228
+ for (const service of input.runtimeServices) {
1229
+ const detail = service.url ? `${service.serviceName}: ${service.url}` : `${service.serviceName}: running`;
1230
+ const suffix = service.reused ? " (reused)" : "";
1231
+ lines.push(`- Service: ${detail}${suffix}`);
1232
+ }
1233
+ return lines.join("\n");
1234
+ }
1235
+ //# sourceMappingURL=workspace-runtime.js.map