@fideliosai/server 2026.331.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (753) hide show
  1. package/LICENSE +22 -0
  2. package/dist/adapters/codex-models.d.ts +4 -0
  3. package/dist/adapters/codex-models.d.ts.map +1 -0
  4. package/dist/adapters/codex-models.js +98 -0
  5. package/dist/adapters/codex-models.js.map +1 -0
  6. package/dist/adapters/cursor-models.d.ts +13 -0
  7. package/dist/adapters/cursor-models.d.ts.map +1 -0
  8. package/dist/adapters/cursor-models.js +148 -0
  9. package/dist/adapters/cursor-models.js.map +1 -0
  10. package/dist/adapters/http/execute.d.ts +3 -0
  11. package/dist/adapters/http/execute.d.ts.map +1 -0
  12. package/dist/adapters/http/execute.js +39 -0
  13. package/dist/adapters/http/execute.js.map +1 -0
  14. package/dist/adapters/http/index.d.ts +3 -0
  15. package/dist/adapters/http/index.d.ts.map +1 -0
  16. package/dist/adapters/http/index.js +20 -0
  17. package/dist/adapters/http/index.js.map +1 -0
  18. package/dist/adapters/http/test.d.ts +3 -0
  19. package/dist/adapters/http/test.d.ts.map +1 -0
  20. package/dist/adapters/http/test.js +106 -0
  21. package/dist/adapters/http/test.js.map +1 -0
  22. package/dist/adapters/index.d.ts +4 -0
  23. package/dist/adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/index.js +3 -0
  25. package/dist/adapters/index.js.map +1 -0
  26. package/dist/adapters/process/execute.d.ts +3 -0
  27. package/dist/adapters/process/execute.d.ts.map +1 -0
  28. package/dist/adapters/process/execute.js +63 -0
  29. package/dist/adapters/process/execute.js.map +1 -0
  30. package/dist/adapters/process/index.d.ts +3 -0
  31. package/dist/adapters/process/index.d.ts.map +1 -0
  32. package/dist/adapters/process/index.js +23 -0
  33. package/dist/adapters/process/index.js.map +1 -0
  34. package/dist/adapters/process/test.d.ts +3 -0
  35. package/dist/adapters/process/test.d.ts.map +1 -0
  36. package/dist/adapters/process/test.js +77 -0
  37. package/dist/adapters/process/test.js.map +1 -0
  38. package/dist/adapters/registry.d.ts +14 -0
  39. package/dist/adapters/registry.d.ts.map +1 -0
  40. package/dist/adapters/registry.js +164 -0
  41. package/dist/adapters/registry.js.map +1 -0
  42. package/dist/adapters/types.d.ts +2 -0
  43. package/dist/adapters/types.d.ts.map +1 -0
  44. package/dist/adapters/types.js +2 -0
  45. package/dist/adapters/types.js.map +1 -0
  46. package/dist/adapters/utils.d.ts +10 -0
  47. package/dist/adapters/utils.d.ts.map +1 -0
  48. package/dist/adapters/utils.js +14 -0
  49. package/dist/adapters/utils.js.map +1 -0
  50. package/dist/agent-auth-jwt.d.ts +14 -0
  51. package/dist/agent-auth-jwt.d.ts.map +1 -0
  52. package/dist/agent-auth-jwt.js +117 -0
  53. package/dist/agent-auth-jwt.js.map +1 -0
  54. package/dist/app.d.ts +25 -0
  55. package/dist/app.d.ts.map +1 -0
  56. package/dist/app.js +265 -0
  57. package/dist/app.js.map +1 -0
  58. package/dist/attachment-types.d.ts +33 -0
  59. package/dist/attachment-types.d.ts.map +1 -0
  60. package/dist/attachment-types.js +67 -0
  61. package/dist/attachment-types.js.map +1 -0
  62. package/dist/auth/better-auth.d.ts +24 -0
  63. package/dist/auth/better-auth.d.ts.map +1 -0
  64. package/dist/auth/better-auth.js +108 -0
  65. package/dist/auth/better-auth.js.map +1 -0
  66. package/dist/board-claim.d.ts +23 -0
  67. package/dist/board-claim.d.ts.map +1 -0
  68. package/dist/board-claim.js +115 -0
  69. package/dist/board-claim.js.map +1 -0
  70. package/dist/config-file.d.ts +3 -0
  71. package/dist/config-file.d.ts.map +1 -0
  72. package/dist/config-file.js +16 -0
  73. package/dist/config-file.js.map +1 -0
  74. package/dist/config.d.ts +45 -0
  75. package/dist/config.d.ts.map +1 -0
  76. package/dist/config.js +171 -0
  77. package/dist/config.js.map +1 -0
  78. package/dist/dev-server-status.d.ts +27 -0
  79. package/dist/dev-server-status.d.ts.map +1 -0
  80. package/dist/dev-server-status.js +70 -0
  81. package/dist/dev-server-status.js.map +1 -0
  82. package/dist/dev-watch-ignore.d.ts +2 -0
  83. package/dist/dev-watch-ignore.d.ts.map +1 -0
  84. package/dist/dev-watch-ignore.js +33 -0
  85. package/dist/dev-watch-ignore.js.map +1 -0
  86. package/dist/errors.d.ts +12 -0
  87. package/dist/errors.d.ts.map +1 -0
  88. package/dist/errors.js +28 -0
  89. package/dist/errors.js.map +1 -0
  90. package/dist/home-paths.d.ts +17 -0
  91. package/dist/home-paths.d.ts.map +1 -0
  92. package/dist/home-paths.js +75 -0
  93. package/dist/home-paths.js.map +1 -0
  94. package/dist/index.d.ts +10 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +642 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/log-redaction.d.ts +11 -0
  99. package/dist/log-redaction.d.ts.map +1 -0
  100. package/dist/log-redaction.js +118 -0
  101. package/dist/log-redaction.js.map +1 -0
  102. package/dist/middleware/auth.d.ts +12 -0
  103. package/dist/middleware/auth.d.ts.map +1 -0
  104. package/dist/middleware/auth.js +144 -0
  105. package/dist/middleware/auth.js.map +1 -0
  106. package/dist/middleware/board-mutation-guard.d.ts +3 -0
  107. package/dist/middleware/board-mutation-guard.d.ts.map +1 -0
  108. package/dist/middleware/board-mutation-guard.js +59 -0
  109. package/dist/middleware/board-mutation-guard.js.map +1 -0
  110. package/dist/middleware/error-handler.d.ts +17 -0
  111. package/dist/middleware/error-handler.d.ts.map +1 -0
  112. package/dist/middleware/error-handler.js +37 -0
  113. package/dist/middleware/error-handler.js.map +1 -0
  114. package/dist/middleware/index.d.ts +4 -0
  115. package/dist/middleware/index.d.ts.map +1 -0
  116. package/dist/middleware/index.js +4 -0
  117. package/dist/middleware/index.js.map +1 -0
  118. package/dist/middleware/logger.d.ts +4 -0
  119. package/dist/middleware/logger.d.ts.map +1 -0
  120. package/dist/middleware/logger.js +87 -0
  121. package/dist/middleware/logger.js.map +1 -0
  122. package/dist/middleware/private-hostname-guard.d.ts +11 -0
  123. package/dist/middleware/private-hostname-guard.d.ts.map +1 -0
  124. package/dist/middleware/private-hostname-guard.js +78 -0
  125. package/dist/middleware/private-hostname-guard.js.map +1 -0
  126. package/dist/middleware/validate.d.ts +4 -0
  127. package/dist/middleware/validate.d.ts.map +1 -0
  128. package/dist/middleware/validate.js +7 -0
  129. package/dist/middleware/validate.js.map +1 -0
  130. package/dist/onboarding-assets/ceo/AGENTS.md +54 -0
  131. package/dist/onboarding-assets/ceo/HEARTBEAT.md +72 -0
  132. package/dist/onboarding-assets/ceo/SOUL.md +33 -0
  133. package/dist/onboarding-assets/ceo/TOOLS.md +3 -0
  134. package/dist/onboarding-assets/default/AGENTS.md +3 -0
  135. package/dist/paths.d.ts +3 -0
  136. package/dist/paths.d.ts.map +1 -0
  137. package/dist/paths.js +31 -0
  138. package/dist/paths.js.map +1 -0
  139. package/dist/realtime/live-events-ws.d.ts +28 -0
  140. package/dist/realtime/live-events-ws.d.ts.map +1 -0
  141. package/dist/realtime/live-events-ws.js +187 -0
  142. package/dist/realtime/live-events-ws.js.map +1 -0
  143. package/dist/redaction.d.ts +4 -0
  144. package/dist/redaction.d.ts.map +1 -0
  145. package/dist/redaction.js +63 -0
  146. package/dist/redaction.js.map +1 -0
  147. package/dist/routes/access.d.ts +61 -0
  148. package/dist/routes/access.d.ts.map +1 -0
  149. package/dist/routes/access.js +2265 -0
  150. package/dist/routes/access.js.map +1 -0
  151. package/dist/routes/activity.d.ts +3 -0
  152. package/dist/routes/activity.d.ts.map +1 -0
  153. package/dist/routes/activity.js +78 -0
  154. package/dist/routes/activity.js.map +1 -0
  155. package/dist/routes/agents.d.ts +3 -0
  156. package/dist/routes/agents.d.ts.map +1 -0
  157. package/dist/routes/agents.js +1828 -0
  158. package/dist/routes/agents.js.map +1 -0
  159. package/dist/routes/approvals.d.ts +3 -0
  160. package/dist/routes/approvals.d.ts.map +1 -0
  161. package/dist/routes/approvals.js +275 -0
  162. package/dist/routes/approvals.js.map +1 -0
  163. package/dist/routes/assets.d.ts +4 -0
  164. package/dist/routes/assets.d.ts.map +1 -0
  165. package/dist/routes/assets.js +309 -0
  166. package/dist/routes/assets.js.map +1 -0
  167. package/dist/routes/authz.d.ts +16 -0
  168. package/dist/routes/authz.d.ts.map +1 -0
  169. package/dist/routes/authz.js +47 -0
  170. package/dist/routes/authz.js.map +1 -0
  171. package/dist/routes/companies.d.ts +4 -0
  172. package/dist/routes/companies.d.ts.map +1 -0
  173. package/dist/routes/companies.js +303 -0
  174. package/dist/routes/companies.js.map +1 -0
  175. package/dist/routes/company-skills.d.ts +3 -0
  176. package/dist/routes/company-skills.d.ts.map +1 -0
  177. package/dist/routes/company-skills.js +228 -0
  178. package/dist/routes/company-skills.js.map +1 -0
  179. package/dist/routes/costs.d.ts +3 -0
  180. package/dist/routes/costs.d.ts.map +1 -0
  181. package/dist/routes/costs.js +268 -0
  182. package/dist/routes/costs.js.map +1 -0
  183. package/dist/routes/dashboard.d.ts +3 -0
  184. package/dist/routes/dashboard.d.ts.map +1 -0
  185. package/dist/routes/dashboard.js +15 -0
  186. package/dist/routes/dashboard.js.map +1 -0
  187. package/dist/routes/execution-workspaces.d.ts +3 -0
  188. package/dist/routes/execution-workspaces.d.ts.map +1 -0
  189. package/dist/routes/execution-workspaces.js +165 -0
  190. package/dist/routes/execution-workspaces.js.map +1 -0
  191. package/dist/routes/goals.d.ts +3 -0
  192. package/dist/routes/goals.d.ts.map +1 -0
  193. package/dist/routes/goals.js +95 -0
  194. package/dist/routes/goals.js.map +1 -0
  195. package/dist/routes/health.d.ts +9 -0
  196. package/dist/routes/health.d.ts.map +1 -0
  197. package/dist/routes/health.js +69 -0
  198. package/dist/routes/health.js.map +1 -0
  199. package/dist/routes/index.d.ts +18 -0
  200. package/dist/routes/index.d.ts.map +1 -0
  201. package/dist/routes/index.js +18 -0
  202. package/dist/routes/index.js.map +1 -0
  203. package/dist/routes/instance-settings.d.ts +3 -0
  204. package/dist/routes/instance-settings.d.ts.map +1 -0
  205. package/dist/routes/instance-settings.js +71 -0
  206. package/dist/routes/instance-settings.js.map +1 -0
  207. package/dist/routes/issues-checkout-wakeup.d.ts +9 -0
  208. package/dist/routes/issues-checkout-wakeup.d.ts.map +1 -0
  209. package/dist/routes/issues-checkout-wakeup.js +12 -0
  210. package/dist/routes/issues-checkout-wakeup.js.map +1 -0
  211. package/dist/routes/issues.d.ts +4 -0
  212. package/dist/routes/issues.d.ts.map +1 -0
  213. package/dist/routes/issues.js +1520 -0
  214. package/dist/routes/issues.js.map +1 -0
  215. package/dist/routes/llms.d.ts +3 -0
  216. package/dist/routes/llms.d.ts.map +1 -0
  217. package/dist/routes/llms.js +78 -0
  218. package/dist/routes/llms.js.map +1 -0
  219. package/dist/routes/org-chart-svg.d.ts +25 -0
  220. package/dist/routes/org-chart-svg.d.ts.map +1 -0
  221. package/dist/routes/org-chart-svg.js +657 -0
  222. package/dist/routes/org-chart-svg.js.map +1 -0
  223. package/dist/routes/plugin-ui-static.d.ts +69 -0
  224. package/dist/routes/plugin-ui-static.d.ts.map +1 -0
  225. package/dist/routes/plugin-ui-static.js +411 -0
  226. package/dist/routes/plugin-ui-static.js.map +1 -0
  227. package/dist/routes/plugins.d.ts +120 -0
  228. package/dist/routes/plugins.d.ts.map +1 -0
  229. package/dist/routes/plugins.js +1784 -0
  230. package/dist/routes/plugins.js.map +1 -0
  231. package/dist/routes/projects.d.ts +3 -0
  232. package/dist/routes/projects.d.ts.map +1 -0
  233. package/dist/routes/projects.js +257 -0
  234. package/dist/routes/projects.js.map +1 -0
  235. package/dist/routes/routines.d.ts +3 -0
  236. package/dist/routes/routines.d.ts.map +1 -0
  237. package/dist/routes/routines.js +277 -0
  238. package/dist/routes/routines.js.map +1 -0
  239. package/dist/routes/secrets.d.ts +3 -0
  240. package/dist/routes/secrets.d.ts.map +1 -0
  241. package/dist/routes/secrets.js +128 -0
  242. package/dist/routes/secrets.js.map +1 -0
  243. package/dist/routes/sidebar-badges.d.ts +3 -0
  244. package/dist/routes/sidebar-badges.d.ts.map +1 -0
  245. package/dist/routes/sidebar-badges.js +45 -0
  246. package/dist/routes/sidebar-badges.js.map +1 -0
  247. package/dist/secrets/external-stub-providers.d.ts +5 -0
  248. package/dist/secrets/external-stub-providers.d.ts.map +1 -0
  249. package/dist/secrets/external-stub-providers.js +21 -0
  250. package/dist/secrets/external-stub-providers.js.map +1 -0
  251. package/dist/secrets/local-encrypted-provider.d.ts +3 -0
  252. package/dist/secrets/local-encrypted-provider.d.ts.map +1 -0
  253. package/dist/secrets/local-encrypted-provider.js +116 -0
  254. package/dist/secrets/local-encrypted-provider.js.map +1 -0
  255. package/dist/secrets/provider-registry.d.ts +5 -0
  256. package/dist/secrets/provider-registry.d.ts.map +1 -0
  257. package/dist/secrets/provider-registry.js +20 -0
  258. package/dist/secrets/provider-registry.js.map +1 -0
  259. package/dist/secrets/types.d.ts +21 -0
  260. package/dist/secrets/types.d.ts.map +1 -0
  261. package/dist/secrets/types.js +2 -0
  262. package/dist/secrets/types.js.map +1 -0
  263. package/dist/services/access.d.ts +113 -0
  264. package/dist/services/access.d.ts.map +1 -0
  265. package/dist/services/access.js +247 -0
  266. package/dist/services/access.js.map +1 -0
  267. package/dist/services/activity-log.d.ts +17 -0
  268. package/dist/services/activity-log.d.ts.map +1 -0
  269. package/dist/services/activity-log.js +74 -0
  270. package/dist/services/activity-log.js.map +1 -0
  271. package/dist/services/activity.d.ts +764 -0
  272. package/dist/services/activity.d.ts.map +1 -0
  273. package/dist/services/activity.js +105 -0
  274. package/dist/services/activity.js.map +1 -0
  275. package/dist/services/agent-instructions.d.ts +91 -0
  276. package/dist/services/agent-instructions.d.ts.map +1 -0
  277. package/dist/services/agent-instructions.js +580 -0
  278. package/dist/services/agent-instructions.js.map +1 -0
  279. package/dist/services/agent-permissions.d.ts +6 -0
  280. package/dist/services/agent-permissions.d.ts.map +1 -0
  281. package/dist/services/agent-permissions.js +18 -0
  282. package/dist/services/agent-permissions.js.map +1 -0
  283. package/dist/services/agents.d.ts +1670 -0
  284. package/dist/services/agents.d.ts.map +1 -0
  285. package/dist/services/agents.js +566 -0
  286. package/dist/services/agents.js.map +1 -0
  287. package/dist/services/approvals.d.ts +546 -0
  288. package/dist/services/approvals.d.ts.map +1 -0
  289. package/dist/services/approvals.js +212 -0
  290. package/dist/services/approvals.js.map +1 -0
  291. package/dist/services/assets.d.ts +33 -0
  292. package/dist/services/assets.d.ts.map +1 -0
  293. package/dist/services/assets.js +17 -0
  294. package/dist/services/assets.js.map +1 -0
  295. package/dist/services/board-auth.d.ts +234 -0
  296. package/dist/services/board-auth.d.ts.map +1 -0
  297. package/dist/services/board-auth.js +295 -0
  298. package/dist/services/board-auth.js.map +1 -0
  299. package/dist/services/budgets.d.ts +38 -0
  300. package/dist/services/budgets.d.ts.map +1 -0
  301. package/dist/services/budgets.js +784 -0
  302. package/dist/services/budgets.js.map +1 -0
  303. package/dist/services/companies.d.ts +124 -0
  304. package/dist/services/companies.d.ts.map +1 -0
  305. package/dist/services/companies.js +256 -0
  306. package/dist/services/companies.js.map +1 -0
  307. package/dist/services/company-export-readme.d.ts +17 -0
  308. package/dist/services/company-export-readme.d.ts.map +1 -0
  309. package/dist/services/company-export-readme.js +148 -0
  310. package/dist/services/company-export-readme.js.map +1 -0
  311. package/dist/services/company-portability.d.ts +23 -0
  312. package/dist/services/company-portability.d.ts.map +1 -0
  313. package/dist/services/company-portability.js +3739 -0
  314. package/dist/services/company-portability.js.map +1 -0
  315. package/dist/services/company-skills.d.ts +77 -0
  316. package/dist/services/company-skills.d.ts.map +1 -0
  317. package/dist/services/company-skills.js +2042 -0
  318. package/dist/services/company-skills.js.map +1 -0
  319. package/dist/services/costs.d.ts +114 -0
  320. package/dist/services/costs.d.ts.map +1 -0
  321. package/dist/services/costs.js +294 -0
  322. package/dist/services/costs.js.map +1 -0
  323. package/dist/services/cron.d.ts +80 -0
  324. package/dist/services/cron.d.ts.map +1 -0
  325. package/dist/services/cron.js +300 -0
  326. package/dist/services/cron.js.map +1 -0
  327. package/dist/services/dashboard.d.ts +26 -0
  328. package/dist/services/dashboard.d.ts.map +1 -0
  329. package/dist/services/dashboard.js +98 -0
  330. package/dist/services/dashboard.js.map +1 -0
  331. package/dist/services/default-agent-instructions.d.ts +9 -0
  332. package/dist/services/default-agent-instructions.d.ts.map +1 -0
  333. package/dist/services/default-agent-instructions.js +20 -0
  334. package/dist/services/default-agent-instructions.js.map +1 -0
  335. package/dist/services/documents.d.ts +164 -0
  336. package/dist/services/documents.d.ts.map +1 -0
  337. package/dist/services/documents.js +382 -0
  338. package/dist/services/documents.js.map +1 -0
  339. package/dist/services/execution-workspace-policy.d.ts +21 -0
  340. package/dist/services/execution-workspace-policy.d.ts.map +1 -0
  341. package/dist/services/execution-workspace-policy.js +177 -0
  342. package/dist/services/execution-workspace-policy.js.map +1 -0
  343. package/dist/services/execution-workspaces.d.ts +19 -0
  344. package/dist/services/execution-workspaces.d.ts.map +1 -0
  345. package/dist/services/execution-workspaces.js +87 -0
  346. package/dist/services/execution-workspaces.js.map +1 -0
  347. package/dist/services/finance.d.ts +93 -0
  348. package/dist/services/finance.d.ts.map +1 -0
  349. package/dist/services/finance.js +120 -0
  350. package/dist/services/finance.js.map +1 -0
  351. package/dist/services/goals.d.ts +433 -0
  352. package/dist/services/goals.d.ts.map +1 -0
  353. package/dist/services/goals.js +54 -0
  354. package/dist/services/goals.js.map +1 -0
  355. package/dist/services/heartbeat-run-summary.d.ts +2 -0
  356. package/dist/services/heartbeat-run-summary.d.ts.map +1 -0
  357. package/dist/services/heartbeat-run-summary.js +30 -0
  358. package/dist/services/heartbeat-run-summary.js.map +1 -0
  359. package/dist/services/heartbeat.d.ts +812 -0
  360. package/dist/services/heartbeat.d.ts.map +1 -0
  361. package/dist/services/heartbeat.js +3156 -0
  362. package/dist/services/heartbeat.js.map +1 -0
  363. package/dist/services/hire-hook.d.ts +14 -0
  364. package/dist/services/hire-hook.d.ts.map +1 -0
  365. package/dist/services/hire-hook.js +85 -0
  366. package/dist/services/hire-hook.js.map +1 -0
  367. package/dist/services/index.d.ts +33 -0
  368. package/dist/services/index.d.ts.map +1 -0
  369. package/dist/services/index.js +33 -0
  370. package/dist/services/index.js.map +1 -0
  371. package/dist/services/instance-settings.d.ts +11 -0
  372. package/dist/services/instance-settings.d.ts.map +1 -0
  373. package/dist/services/instance-settings.js +116 -0
  374. package/dist/services/instance-settings.js.map +1 -0
  375. package/dist/services/issue-approvals.d.ts +56 -0
  376. package/dist/services/issue-approvals.d.ts.map +1 -0
  377. package/dist/services/issue-approvals.js +153 -0
  378. package/dist/services/issue-approvals.js.map +1 -0
  379. package/dist/services/issue-assignment-wakeup.d.ts +29 -0
  380. package/dist/services/issue-assignment-wakeup.d.ts.map +1 -0
  381. package/dist/services/issue-assignment-wakeup.js +22 -0
  382. package/dist/services/issue-assignment-wakeup.js.map +1 -0
  383. package/dist/services/issue-goal-fallback.d.ts +18 -0
  384. package/dist/services/issue-goal-fallback.d.ts.map +1 -0
  385. package/dist/services/issue-goal-fallback.js +33 -0
  386. package/dist/services/issue-goal-fallback.js.map +1 -0
  387. package/dist/services/issues.d.ts +560 -0
  388. package/dist/services/issues.d.ts.map +1 -0
  389. package/dist/services/issues.js +1478 -0
  390. package/dist/services/issues.js.map +1 -0
  391. package/dist/services/live-events.d.ts +17 -0
  392. package/dist/services/live-events.d.ts.map +1 -0
  393. package/dist/services/live-events.js +33 -0
  394. package/dist/services/live-events.js.map +1 -0
  395. package/dist/services/plugin-capability-validator.d.ts +108 -0
  396. package/dist/services/plugin-capability-validator.d.ts.map +1 -0
  397. package/dist/services/plugin-capability-validator.js +268 -0
  398. package/dist/services/plugin-capability-validator.js.map +1 -0
  399. package/dist/services/plugin-config-validator.d.ts +26 -0
  400. package/dist/services/plugin-config-validator.d.ts.map +1 -0
  401. package/dist/services/plugin-config-validator.js +41 -0
  402. package/dist/services/plugin-config-validator.js.map +1 -0
  403. package/dist/services/plugin-dev-watcher.d.ts +30 -0
  404. package/dist/services/plugin-dev-watcher.d.ts.map +1 -0
  405. package/dist/services/plugin-dev-watcher.js +241 -0
  406. package/dist/services/plugin-dev-watcher.js.map +1 -0
  407. package/dist/services/plugin-event-bus.d.ts +149 -0
  408. package/dist/services/plugin-event-bus.d.ts.map +1 -0
  409. package/dist/services/plugin-event-bus.js +258 -0
  410. package/dist/services/plugin-event-bus.js.map +1 -0
  411. package/dist/services/plugin-host-service-cleanup.d.ts +14 -0
  412. package/dist/services/plugin-host-service-cleanup.d.ts.map +1 -0
  413. package/dist/services/plugin-host-service-cleanup.js +37 -0
  414. package/dist/services/plugin-host-service-cleanup.js.map +1 -0
  415. package/dist/services/plugin-host-services.d.ts +13 -0
  416. package/dist/services/plugin-host-services.d.ts.map +1 -0
  417. package/dist/services/plugin-host-services.js +969 -0
  418. package/dist/services/plugin-host-services.js.map +1 -0
  419. package/dist/services/plugin-job-coordinator.d.ts +81 -0
  420. package/dist/services/plugin-job-coordinator.d.ts.map +1 -0
  421. package/dist/services/plugin-job-coordinator.js +172 -0
  422. package/dist/services/plugin-job-coordinator.js.map +1 -0
  423. package/dist/services/plugin-job-scheduler.d.ts +163 -0
  424. package/dist/services/plugin-job-scheduler.d.ts.map +1 -0
  425. package/dist/services/plugin-job-scheduler.js +454 -0
  426. package/dist/services/plugin-job-scheduler.js.map +1 -0
  427. package/dist/services/plugin-job-store.d.ts +208 -0
  428. package/dist/services/plugin-job-store.d.ts.map +1 -0
  429. package/dist/services/plugin-job-store.js +350 -0
  430. package/dist/services/plugin-job-store.js.map +1 -0
  431. package/dist/services/plugin-lifecycle.d.ts +203 -0
  432. package/dist/services/plugin-lifecycle.d.ts.map +1 -0
  433. package/dist/services/plugin-lifecycle.js +476 -0
  434. package/dist/services/plugin-lifecycle.js.map +1 -0
  435. package/dist/services/plugin-loader.d.ts +441 -0
  436. package/dist/services/plugin-loader.d.ts.map +1 -0
  437. package/dist/services/plugin-loader.js +1192 -0
  438. package/dist/services/plugin-loader.js.map +1 -0
  439. package/dist/services/plugin-log-retention.d.ts +20 -0
  440. package/dist/services/plugin-log-retention.d.ts.map +1 -0
  441. package/dist/services/plugin-log-retention.js +63 -0
  442. package/dist/services/plugin-log-retention.js.map +1 -0
  443. package/dist/services/plugin-manifest-validator.d.ts +79 -0
  444. package/dist/services/plugin-manifest-validator.d.ts.map +1 -0
  445. package/dist/services/plugin-manifest-validator.js +84 -0
  446. package/dist/services/plugin-manifest-validator.js.map +1 -0
  447. package/dist/services/plugin-registry.d.ts +2542 -0
  448. package/dist/services/plugin-registry.d.ts.map +1 -0
  449. package/dist/services/plugin-registry.js +539 -0
  450. package/dist/services/plugin-registry.js.map +1 -0
  451. package/dist/services/plugin-runtime-sandbox.d.ts +40 -0
  452. package/dist/services/plugin-runtime-sandbox.d.ts.map +1 -0
  453. package/dist/services/plugin-runtime-sandbox.js +154 -0
  454. package/dist/services/plugin-runtime-sandbox.js.map +1 -0
  455. package/dist/services/plugin-secrets-handler.d.ts +81 -0
  456. package/dist/services/plugin-secrets-handler.d.ts.map +1 -0
  457. package/dist/services/plugin-secrets-handler.js +275 -0
  458. package/dist/services/plugin-secrets-handler.js.map +1 -0
  459. package/dist/services/plugin-state-store.d.ts +92 -0
  460. package/dist/services/plugin-state-store.d.ts.map +1 -0
  461. package/dist/services/plugin-state-store.js +190 -0
  462. package/dist/services/plugin-state-store.js.map +1 -0
  463. package/dist/services/plugin-stream-bus.d.ts +29 -0
  464. package/dist/services/plugin-stream-bus.d.ts.map +1 -0
  465. package/dist/services/plugin-stream-bus.js +48 -0
  466. package/dist/services/plugin-stream-bus.js.map +1 -0
  467. package/dist/services/plugin-tool-dispatcher.d.ts +180 -0
  468. package/dist/services/plugin-tool-dispatcher.d.ts.map +1 -0
  469. package/dist/services/plugin-tool-dispatcher.js +224 -0
  470. package/dist/services/plugin-tool-dispatcher.js.map +1 -0
  471. package/dist/services/plugin-tool-registry.d.ts +192 -0
  472. package/dist/services/plugin-tool-registry.d.ts.map +1 -0
  473. package/dist/services/plugin-tool-registry.js +224 -0
  474. package/dist/services/plugin-tool-registry.js.map +1 -0
  475. package/dist/services/plugin-worker-manager.d.ts +260 -0
  476. package/dist/services/plugin-worker-manager.d.ts.map +1 -0
  477. package/dist/services/plugin-worker-manager.js +835 -0
  478. package/dist/services/plugin-worker-manager.js.map +1 -0
  479. package/dist/services/projects.d.ts +87 -0
  480. package/dist/services/projects.d.ts.map +1 -0
  481. package/dist/services/projects.js +656 -0
  482. package/dist/services/projects.js.map +1 -0
  483. package/dist/services/quota-windows.d.ts +9 -0
  484. package/dist/services/quota-windows.d.ts.map +1 -0
  485. package/dist/services/quota-windows.js +56 -0
  486. package/dist/services/quota-windows.js.map +1 -0
  487. package/dist/services/routines.d.ts +135 -0
  488. package/dist/services/routines.d.ts.map +1 -0
  489. package/dist/services/routines.js +1105 -0
  490. package/dist/services/routines.js.map +1 -0
  491. package/dist/services/run-log-store.d.ts +34 -0
  492. package/dist/services/run-log-store.d.ts.map +1 -0
  493. package/dist/services/run-log-store.js +109 -0
  494. package/dist/services/run-log-store.js.map +1 -0
  495. package/dist/services/secrets.d.ts +511 -0
  496. package/dist/services/secrets.d.ts.map +1 -0
  497. package/dist/services/secrets.js +289 -0
  498. package/dist/services/secrets.js.map +1 -0
  499. package/dist/services/sidebar-badges.d.ts +9 -0
  500. package/dist/services/sidebar-badges.d.ts.map +1 -0
  501. package/dist/services/sidebar-badges.js +33 -0
  502. package/dist/services/sidebar-badges.js.map +1 -0
  503. package/dist/services/work-products.d.ts +14 -0
  504. package/dist/services/work-products.d.ts.map +1 -0
  505. package/dist/services/work-products.js +100 -0
  506. package/dist/services/work-products.js.map +1 -0
  507. package/dist/services/workspace-operation-log-store.d.ts +33 -0
  508. package/dist/services/workspace-operation-log-store.d.ts.map +1 -0
  509. package/dist/services/workspace-operation-log-store.js +110 -0
  510. package/dist/services/workspace-operation-log-store.js.map +1 -0
  511. package/dist/services/workspace-operations.d.ts +44 -0
  512. package/dist/services/workspace-operations.d.ts.map +1 -0
  513. package/dist/services/workspace-operations.js +211 -0
  514. package/dist/services/workspace-operations.js.map +1 -0
  515. package/dist/services/workspace-runtime.d.ts +164 -0
  516. package/dist/services/workspace-runtime.d.ts.map +1 -0
  517. package/dist/services/workspace-runtime.js +1235 -0
  518. package/dist/services/workspace-runtime.js.map +1 -0
  519. package/dist/startup-banner.d.ts +31 -0
  520. package/dist/startup-banner.d.ts.map +1 -0
  521. package/dist/startup-banner.js +117 -0
  522. package/dist/startup-banner.js.map +1 -0
  523. package/dist/storage/index.d.ts +6 -0
  524. package/dist/storage/index.d.ts.map +1 -0
  525. package/dist/storage/index.js +29 -0
  526. package/dist/storage/index.js.map +1 -0
  527. package/dist/storage/local-disk-provider.d.ts +3 -0
  528. package/dist/storage/local-disk-provider.d.ts.map +1 -0
  529. package/dist/storage/local-disk-provider.js +79 -0
  530. package/dist/storage/local-disk-provider.js.map +1 -0
  531. package/dist/storage/provider-registry.d.ts +4 -0
  532. package/dist/storage/provider-registry.d.ts.map +1 -0
  533. package/dist/storage/provider-registry.js +15 -0
  534. package/dist/storage/provider-registry.js.map +1 -0
  535. package/dist/storage/s3-provider.d.ts +11 -0
  536. package/dist/storage/s3-provider.d.ts.map +1 -0
  537. package/dist/storage/s3-provider.js +123 -0
  538. package/dist/storage/s3-provider.js.map +1 -0
  539. package/dist/storage/service.d.ts +3 -0
  540. package/dist/storage/service.d.ts.map +1 -0
  541. package/dist/storage/service.js +120 -0
  542. package/dist/storage/service.js.map +1 -0
  543. package/dist/storage/types.d.ts +55 -0
  544. package/dist/storage/types.d.ts.map +1 -0
  545. package/dist/storage/types.js +2 -0
  546. package/dist/storage/types.js.map +1 -0
  547. package/dist/ui-branding.d.ts +13 -0
  548. package/dist/ui-branding.d.ts.map +1 -0
  549. package/dist/ui-branding.js +188 -0
  550. package/dist/ui-branding.js.map +1 -0
  551. package/dist/version.d.ts +2 -0
  552. package/dist/version.d.ts.map +1 -0
  553. package/dist/version.js +5 -0
  554. package/dist/version.js.map +1 -0
  555. package/dist/worktree-config.d.ts +19 -0
  556. package/dist/worktree-config.d.ts.map +1 -0
  557. package/dist/worktree-config.js +365 -0
  558. package/dist/worktree-config.js.map +1 -0
  559. package/package.json +90 -0
  560. package/skills/fidelios/SKILL.md +365 -0
  561. package/skills/fidelios/references/api-reference.md +647 -0
  562. package/skills/fidelios/references/company-skills.md +193 -0
  563. package/skills/fidelios-create-agent/SKILL.md +142 -0
  564. package/skills/fidelios-create-agent/references/api-reference.md +105 -0
  565. package/skills/fidelios-create-plugin/SKILL.md +101 -0
  566. package/skills/para-memory-files/SKILL.md +104 -0
  567. package/skills/para-memory-files/references/schemas.md +35 -0
  568. package/ui-dist/android-chrome-192x192.png +0 -0
  569. package/ui-dist/android-chrome-512x512.png +0 -0
  570. package/ui-dist/apple-touch-icon.png +0 -0
  571. package/ui-dist/assets/_basePickBy-DDS8rFE9.js +1 -0
  572. package/ui-dist/assets/_baseUniq-BTIdqnfJ.js +1 -0
  573. package/ui-dist/assets/apl-B4CMkyY2.js +1 -0
  574. package/ui-dist/assets/arc-CER6ytAf.js +1 -0
  575. package/ui-dist/assets/architectureDiagram-VXUJARFQ-CrJvVSPh.js +36 -0
  576. package/ui-dist/assets/asciiarmor-Df11BRmG.js +1 -0
  577. package/ui-dist/assets/asn1-EdZsLKOL.js +1 -0
  578. package/ui-dist/assets/asterisk-B-8jnY81.js +1 -0
  579. package/ui-dist/assets/blockDiagram-VD42YOAC-p-DB7nkA.js +122 -0
  580. package/ui-dist/assets/brainfuck-C4LP7Hcl.js +1 -0
  581. package/ui-dist/assets/c4Diagram-YG6GDRKO-D1K75fYz.js +10 -0
  582. package/ui-dist/assets/channel-B1viE-VZ.js +1 -0
  583. package/ui-dist/assets/chunk-4BX2VUAB-C1J-fCaK.js +1 -0
  584. package/ui-dist/assets/chunk-55IACEB6-CjEOgVYA.js +1 -0
  585. package/ui-dist/assets/chunk-B4BG7PRW-CGZwFaze.js +165 -0
  586. package/ui-dist/assets/chunk-DI55MBZ5-Dp2ZahPN.js +220 -0
  587. package/ui-dist/assets/chunk-FMBD7UC4-nXC1OkzD.js +15 -0
  588. package/ui-dist/assets/chunk-QN33PNHL-D_uFCkMK.js +1 -0
  589. package/ui-dist/assets/chunk-QZHKN3VN-CG3WK_AN.js +1 -0
  590. package/ui-dist/assets/chunk-TZMSLE5B-COlBSWdP.js +1 -0
  591. package/ui-dist/assets/classDiagram-2ON5EDUG-Cs4NEMXI.js +1 -0
  592. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-Cs4NEMXI.js +1 -0
  593. package/ui-dist/assets/clike-B9uivgTg.js +1 -0
  594. package/ui-dist/assets/clojure-BMjYHr_A.js +1 -0
  595. package/ui-dist/assets/clone-CGwZV8ud.js +1 -0
  596. package/ui-dist/assets/cmake-BQqOBYOt.js +1 -0
  597. package/ui-dist/assets/cobol-CWcv1MsR.js +1 -0
  598. package/ui-dist/assets/coffeescript-S37ZYGWr.js +1 -0
  599. package/ui-dist/assets/commonlisp-DBKNyK5s.js +1 -0
  600. package/ui-dist/assets/cose-bilkent-S5V4N54A-B9XYqCMb.js +1 -0
  601. package/ui-dist/assets/crystal-SjHAIU92.js +1 -0
  602. package/ui-dist/assets/css-BnMrqG3P.js +1 -0
  603. package/ui-dist/assets/cypher-C_CwsFkJ.js +1 -0
  604. package/ui-dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
  605. package/ui-dist/assets/d-pRatUO7H.js +1 -0
  606. package/ui-dist/assets/dagre-6UL2VRFP-DcCdBLC7.js +4 -0
  607. package/ui-dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  608. package/ui-dist/assets/diagram-PSM6KHXK-np1kLquy.js +24 -0
  609. package/ui-dist/assets/diagram-QEK2KX5R-C-b4qIN1.js +43 -0
  610. package/ui-dist/assets/diagram-S2PKOQOG-Ba-173Ug.js +24 -0
  611. package/ui-dist/assets/diff-DbItnlRl.js +1 -0
  612. package/ui-dist/assets/dockerfile-BKs6k2Af.js +1 -0
  613. package/ui-dist/assets/dtd-DF_7sFjM.js +1 -0
  614. package/ui-dist/assets/dylan-DwRh75JA.js +1 -0
  615. package/ui-dist/assets/ebnf-CDyGwa7X.js +1 -0
  616. package/ui-dist/assets/ecl-Cabwm37j.js +1 -0
  617. package/ui-dist/assets/eiffel-CnydiIhH.js +1 -0
  618. package/ui-dist/assets/elm-vLlmbW-K.js +1 -0
  619. package/ui-dist/assets/erDiagram-Q2GNP2WA-BBmkHiJP.js +60 -0
  620. package/ui-dist/assets/erlang-BNw1qcRV.js +1 -0
  621. package/ui-dist/assets/factor-kuTfRLto.js +1 -0
  622. package/ui-dist/assets/fcl-Kvtd6kyn.js +1 -0
  623. package/ui-dist/assets/flowDiagram-NV44I4VS-Dj_iTDkp.js +162 -0
  624. package/ui-dist/assets/forth-Ffai-XNe.js +1 -0
  625. package/ui-dist/assets/fortran-DYz_wnZ1.js +1 -0
  626. package/ui-dist/assets/ganttDiagram-JELNMOA3-Bn1hanTg.js +267 -0
  627. package/ui-dist/assets/gas-Bneqetm1.js +1 -0
  628. package/ui-dist/assets/gherkin-heZmZLOM.js +1 -0
  629. package/ui-dist/assets/gitGraphDiagram-V2S2FVAM-BjmRpty0.js +65 -0
  630. package/ui-dist/assets/graph-CWBOAGTW.js +1 -0
  631. package/ui-dist/assets/groovy-D9Dt4D0W.js +1 -0
  632. package/ui-dist/assets/haskell-Cw1EW3IL.js +1 -0
  633. package/ui-dist/assets/haxe-H-WmDvRZ.js +1 -0
  634. package/ui-dist/assets/http-DBlCnlav.js +1 -0
  635. package/ui-dist/assets/idl-BEugSyMb.js +1 -0
  636. package/ui-dist/assets/index-B52MtqBm.js +1 -0
  637. package/ui-dist/assets/index-BEBYIFOJ.js +1 -0
  638. package/ui-dist/assets/index-BIvl9YFB.js +1 -0
  639. package/ui-dist/assets/index-BNyP1gwD.js +1 -0
  640. package/ui-dist/assets/index-BRW6bV_B.js +6 -0
  641. package/ui-dist/assets/index-BcQTWaKH.js +1 -0
  642. package/ui-dist/assets/index-BfKYbH5T.js +13 -0
  643. package/ui-dist/assets/index-BhX49pA0.js +1 -0
  644. package/ui-dist/assets/index-BoFaTgOC.js +2 -0
  645. package/ui-dist/assets/index-C-Es83iE.js +7 -0
  646. package/ui-dist/assets/index-C3LG8kvr.js +1 -0
  647. package/ui-dist/assets/index-C5Z9j0rD.js +1 -0
  648. package/ui-dist/assets/index-CFlEF-gp.js +1 -0
  649. package/ui-dist/assets/index-Cjm12V39.js +1 -0
  650. package/ui-dist/assets/index-Cp84QmJD.css +1 -0
  651. package/ui-dist/assets/index-D2t01AH0.js +1 -0
  652. package/ui-dist/assets/index-DEt1jkxJ.js +1 -0
  653. package/ui-dist/assets/index-DeAKBJuz.js +3 -0
  654. package/ui-dist/assets/index-Du65R_Zq.js +1 -0
  655. package/ui-dist/assets/index-WUHteAuP.js +1 -0
  656. package/ui-dist/assets/index-Y_jO6IK_.js +1180 -0
  657. package/ui-dist/assets/index-ZQU9QA5y.js +1 -0
  658. package/ui-dist/assets/index-f6wRGThx.js +1 -0
  659. package/ui-dist/assets/index-hMuLlvYa.js +1 -0
  660. package/ui-dist/assets/infoDiagram-HS3SLOUP-CVMKJlmV.js +2 -0
  661. package/ui-dist/assets/init-Gi6I4Gst.js +1 -0
  662. package/ui-dist/assets/javascript-iXu5QeM3.js +1 -0
  663. package/ui-dist/assets/journeyDiagram-XKPGCS4Q-FrNTHHMi.js +139 -0
  664. package/ui-dist/assets/julia-DuME0IfC.js +1 -0
  665. package/ui-dist/assets/kanban-definition-3W4ZIXB7-BQYKwdVh.js +89 -0
  666. package/ui-dist/assets/katex-O9d3_IXG.js +261 -0
  667. package/ui-dist/assets/layout-BxccZ6zb.js +1 -0
  668. package/ui-dist/assets/linear-Db-Yv5jO.js +1 -0
  669. package/ui-dist/assets/livescript-BwQOo05w.js +1 -0
  670. package/ui-dist/assets/lua-BgMRiT3U.js +1 -0
  671. package/ui-dist/assets/mathematica-DTrFuWx2.js +1 -0
  672. package/ui-dist/assets/mbox-CNhZ1qSd.js +1 -0
  673. package/ui-dist/assets/mermaid.core-BCE9tDOe.js +256 -0
  674. package/ui-dist/assets/mindmap-definition-VGOIOE7T-ZWLuqirD.js +68 -0
  675. package/ui-dist/assets/mirc-CjQqDB4T.js +1 -0
  676. package/ui-dist/assets/mllike-CXdrOF99.js +1 -0
  677. package/ui-dist/assets/modelica-Dc1JOy9r.js +1 -0
  678. package/ui-dist/assets/mscgen-BA5vi2Kp.js +1 -0
  679. package/ui-dist/assets/mumps-BT43cFF4.js +1 -0
  680. package/ui-dist/assets/nginx-DdIZxoE0.js +1 -0
  681. package/ui-dist/assets/nsis-LdVXkNf5.js +1 -0
  682. package/ui-dist/assets/ntriples-BfvgReVJ.js +1 -0
  683. package/ui-dist/assets/octave-Ck1zUtKM.js +1 -0
  684. package/ui-dist/assets/ordinal-Cboi1Yqb.js +1 -0
  685. package/ui-dist/assets/oz-BzwKVEFT.js +1 -0
  686. package/ui-dist/assets/pascal--L3eBynH.js +1 -0
  687. package/ui-dist/assets/perl-CdXCOZ3F.js +1 -0
  688. package/ui-dist/assets/pieDiagram-ADFJNKIX-D01HRHJF.js +30 -0
  689. package/ui-dist/assets/pig-CevX1Tat.js +1 -0
  690. package/ui-dist/assets/powershell-CFHJl5sT.js +1 -0
  691. package/ui-dist/assets/properties-C78fOPTZ.js +1 -0
  692. package/ui-dist/assets/protobuf-ChK-085T.js +1 -0
  693. package/ui-dist/assets/pug-DeIclll2.js +1 -0
  694. package/ui-dist/assets/puppet-DMA9R1ak.js +1 -0
  695. package/ui-dist/assets/python-BuPzkPfP.js +1 -0
  696. package/ui-dist/assets/q-pXgVlZs6.js +1 -0
  697. package/ui-dist/assets/quadrantDiagram-AYHSOK5B-lAmOPnB4.js +7 -0
  698. package/ui-dist/assets/r-B6wPVr8A.js +1 -0
  699. package/ui-dist/assets/requirementDiagram-UZGBJVZJ-ByNWbh-O.js +64 -0
  700. package/ui-dist/assets/rpm-CTu-6PCP.js +1 -0
  701. package/ui-dist/assets/ruby-B2Rjki9n.js +1 -0
  702. package/ui-dist/assets/sankeyDiagram-TZEHDZUN-Cf_Gq84u.js +10 -0
  703. package/ui-dist/assets/sas-B4kiWyti.js +1 -0
  704. package/ui-dist/assets/scheme-C41bIUwD.js +1 -0
  705. package/ui-dist/assets/sequenceDiagram-WL72ISMW-Bx2VZbdr.js +145 -0
  706. package/ui-dist/assets/shell-CjFT_Tl9.js +1 -0
  707. package/ui-dist/assets/sieve-C3Gn_uJK.js +1 -0
  708. package/ui-dist/assets/simple-mode-GW_nhZxv.js +1 -0
  709. package/ui-dist/assets/smalltalk-CnHTOXQT.js +1 -0
  710. package/ui-dist/assets/solr-DehyRSwq.js +1 -0
  711. package/ui-dist/assets/sparql-DkYu6x3z.js +1 -0
  712. package/ui-dist/assets/spreadsheet-BCZA_wO0.js +1 -0
  713. package/ui-dist/assets/sql-D0XecflT.js +1 -0
  714. package/ui-dist/assets/stateDiagram-FKZM4ZOC-vP7G7A65.js +1 -0
  715. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-C2xpsAAO.js +1 -0
  716. package/ui-dist/assets/stex-C3f8Ysf7.js +1 -0
  717. package/ui-dist/assets/stylus-B533Al4x.js +1 -0
  718. package/ui-dist/assets/swift-BzpIVaGY.js +1 -0
  719. package/ui-dist/assets/tcl-DVfN8rqt.js +1 -0
  720. package/ui-dist/assets/textile-CnDTJFAw.js +1 -0
  721. package/ui-dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  722. package/ui-dist/assets/tiki-DGYXhP31.js +1 -0
  723. package/ui-dist/assets/timeline-definition-IT6M3QCI-BJww-sEp.js +61 -0
  724. package/ui-dist/assets/toml-Bm5Em-hy.js +1 -0
  725. package/ui-dist/assets/treemap-GDKQZRPO-DUux14NY.js +162 -0
  726. package/ui-dist/assets/troff-wAsdV37c.js +1 -0
  727. package/ui-dist/assets/ttcn-CfJYG6tj.js +1 -0
  728. package/ui-dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  729. package/ui-dist/assets/turtle-B1tBg_DP.js +1 -0
  730. package/ui-dist/assets/vb-CmGdzxic.js +1 -0
  731. package/ui-dist/assets/vbscript-BuJXcnF6.js +1 -0
  732. package/ui-dist/assets/velocity-D8B20fx6.js +1 -0
  733. package/ui-dist/assets/verilog-C6RDOZhf.js +1 -0
  734. package/ui-dist/assets/vhdl-lSbBsy5d.js +1 -0
  735. package/ui-dist/assets/webidl-ZXfAyPTL.js +1 -0
  736. package/ui-dist/assets/xquery-DzFWVndE.js +1 -0
  737. package/ui-dist/assets/xychartDiagram-PRI3JC2R-AU5ZOwAw.js +7 -0
  738. package/ui-dist/assets/yacas-BJ4BC0dw.js +1 -0
  739. package/ui-dist/assets/z80-Hz9HOZM7.js +1 -0
  740. package/ui-dist/brands/opencode-logo-dark-square.svg +18 -0
  741. package/ui-dist/brands/opencode-logo-light-square.svg +18 -0
  742. package/ui-dist/favicon-16x16.png +0 -0
  743. package/ui-dist/favicon-32x32.png +0 -0
  744. package/ui-dist/favicon-96x96.png +0 -0
  745. package/ui-dist/favicon.ico +0 -0
  746. package/ui-dist/favicon.svg +3 -0
  747. package/ui-dist/index.html +48 -0
  748. package/ui-dist/site.webmanifest +21 -0
  749. package/ui-dist/sw.js +42 -0
  750. package/ui-dist/worktree-favicon-16x16.png +0 -0
  751. package/ui-dist/worktree-favicon-32x32.png +0 -0
  752. package/ui-dist/worktree-favicon.ico +0 -0
  753. package/ui-dist/worktree-favicon.svg +3 -0
@@ -0,0 +1,784 @@
1
+ import { and, desc, eq, gte, inArray, lt, ne, sql } from "drizzle-orm";
2
+ import { agents, approvals, budgetIncidents, budgetPolicies, companies, costEvents, projects, } from "@fideliosai/db";
3
+ import { notFound, unprocessable } from "../errors.js";
4
+ import { logActivity } from "./activity-log.js";
5
+ function currentUtcMonthWindow(now = new Date()) {
6
+ const year = now.getUTCFullYear();
7
+ const month = now.getUTCMonth();
8
+ const start = new Date(Date.UTC(year, month, 1, 0, 0, 0, 0));
9
+ const end = new Date(Date.UTC(year, month + 1, 1, 0, 0, 0, 0));
10
+ return { start, end };
11
+ }
12
+ function resolveWindow(windowKind, now = new Date()) {
13
+ if (windowKind === "lifetime") {
14
+ return {
15
+ start: new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)),
16
+ end: new Date(Date.UTC(9999, 0, 1, 0, 0, 0, 0)),
17
+ };
18
+ }
19
+ return currentUtcMonthWindow(now);
20
+ }
21
+ function budgetStatusFromObserved(observedAmount, amount, warnPercent) {
22
+ if (amount <= 0)
23
+ return "ok";
24
+ if (observedAmount >= amount)
25
+ return "hard_stop";
26
+ if (observedAmount >= Math.ceil((amount * warnPercent) / 100))
27
+ return "warning";
28
+ return "ok";
29
+ }
30
+ function normalizeScopeName(scopeType, name) {
31
+ if (scopeType === "company")
32
+ return name;
33
+ return name.trim().length > 0 ? name : scopeType;
34
+ }
35
+ async function resolveScopeRecord(db, scopeType, scopeId) {
36
+ if (scopeType === "company") {
37
+ const row = await db
38
+ .select({
39
+ companyId: companies.id,
40
+ name: companies.name,
41
+ status: companies.status,
42
+ pauseReason: companies.pauseReason,
43
+ pausedAt: companies.pausedAt,
44
+ })
45
+ .from(companies)
46
+ .where(eq(companies.id, scopeId))
47
+ .then((rows) => rows[0] ?? null);
48
+ if (!row)
49
+ throw notFound("Company not found");
50
+ return {
51
+ companyId: row.companyId,
52
+ name: row.name,
53
+ paused: row.status === "paused" || Boolean(row.pausedAt),
54
+ pauseReason: row.pauseReason ?? null,
55
+ };
56
+ }
57
+ if (scopeType === "agent") {
58
+ const row = await db
59
+ .select({
60
+ companyId: agents.companyId,
61
+ name: agents.name,
62
+ status: agents.status,
63
+ pauseReason: agents.pauseReason,
64
+ })
65
+ .from(agents)
66
+ .where(eq(agents.id, scopeId))
67
+ .then((rows) => rows[0] ?? null);
68
+ if (!row)
69
+ throw notFound("Agent not found");
70
+ return {
71
+ companyId: row.companyId,
72
+ name: row.name,
73
+ paused: row.status === "paused",
74
+ pauseReason: row.pauseReason ?? null,
75
+ };
76
+ }
77
+ const row = await db
78
+ .select({
79
+ companyId: projects.companyId,
80
+ name: projects.name,
81
+ pauseReason: projects.pauseReason,
82
+ pausedAt: projects.pausedAt,
83
+ })
84
+ .from(projects)
85
+ .where(eq(projects.id, scopeId))
86
+ .then((rows) => rows[0] ?? null);
87
+ if (!row)
88
+ throw notFound("Project not found");
89
+ return {
90
+ companyId: row.companyId,
91
+ name: row.name,
92
+ paused: Boolean(row.pausedAt),
93
+ pauseReason: row.pauseReason ?? null,
94
+ };
95
+ }
96
+ async function computeObservedAmount(db, policy) {
97
+ if (policy.metric !== "billed_cents")
98
+ return 0;
99
+ const conditions = [eq(costEvents.companyId, policy.companyId)];
100
+ if (policy.scopeType === "agent")
101
+ conditions.push(eq(costEvents.agentId, policy.scopeId));
102
+ if (policy.scopeType === "project")
103
+ conditions.push(eq(costEvents.projectId, policy.scopeId));
104
+ const { start, end } = resolveWindow(policy.windowKind);
105
+ if (policy.windowKind === "calendar_month_utc") {
106
+ conditions.push(gte(costEvents.occurredAt, start));
107
+ conditions.push(lt(costEvents.occurredAt, end));
108
+ }
109
+ const [row] = await db
110
+ .select({
111
+ total: sql `coalesce(sum(${costEvents.costCents}), 0)::int`,
112
+ })
113
+ .from(costEvents)
114
+ .where(and(...conditions));
115
+ return Number(row?.total ?? 0);
116
+ }
117
+ function buildApprovalPayload(input) {
118
+ return {
119
+ scopeType: input.policy.scopeType,
120
+ scopeId: input.policy.scopeId,
121
+ scopeName: input.scopeName,
122
+ metric: input.policy.metric,
123
+ windowKind: input.policy.windowKind,
124
+ thresholdType: input.thresholdType,
125
+ budgetAmount: input.policy.amount,
126
+ observedAmount: input.amountObserved,
127
+ warnPercent: input.policy.warnPercent,
128
+ windowStart: input.windowStart.toISOString(),
129
+ windowEnd: input.windowEnd.toISOString(),
130
+ policyId: input.policy.id,
131
+ guidance: "Raise the budget and resume the scope, or keep the scope paused.",
132
+ };
133
+ }
134
+ async function markApprovalStatus(db, approvalId, status, decisionNote, decidedByUserId) {
135
+ if (!approvalId)
136
+ return;
137
+ await db
138
+ .update(approvals)
139
+ .set({
140
+ status,
141
+ decisionNote: decisionNote ?? null,
142
+ decidedByUserId,
143
+ decidedAt: new Date(),
144
+ updatedAt: new Date(),
145
+ })
146
+ .where(eq(approvals.id, approvalId));
147
+ }
148
+ export function budgetService(db, hooks = {}) {
149
+ async function pauseScopeForBudget(policy) {
150
+ const now = new Date();
151
+ if (policy.scopeType === "agent") {
152
+ await db
153
+ .update(agents)
154
+ .set({
155
+ status: "paused",
156
+ pauseReason: "budget",
157
+ pausedAt: now,
158
+ updatedAt: now,
159
+ })
160
+ .where(and(eq(agents.id, policy.scopeId), inArray(agents.status, ["active", "idle", "running", "error"])));
161
+ return;
162
+ }
163
+ if (policy.scopeType === "project") {
164
+ await db
165
+ .update(projects)
166
+ .set({
167
+ pauseReason: "budget",
168
+ pausedAt: now,
169
+ updatedAt: now,
170
+ })
171
+ .where(eq(projects.id, policy.scopeId));
172
+ return;
173
+ }
174
+ await db
175
+ .update(companies)
176
+ .set({
177
+ status: "paused",
178
+ pauseReason: "budget",
179
+ pausedAt: now,
180
+ updatedAt: now,
181
+ })
182
+ .where(eq(companies.id, policy.scopeId));
183
+ }
184
+ async function pauseAndCancelScopeForBudget(policy) {
185
+ await pauseScopeForBudget(policy);
186
+ await hooks.cancelWorkForScope?.({
187
+ companyId: policy.companyId,
188
+ scopeType: policy.scopeType,
189
+ scopeId: policy.scopeId,
190
+ });
191
+ }
192
+ async function resumeScopeFromBudget(policy) {
193
+ const now = new Date();
194
+ if (policy.scopeType === "agent") {
195
+ await db
196
+ .update(agents)
197
+ .set({
198
+ status: "idle",
199
+ pauseReason: null,
200
+ pausedAt: null,
201
+ updatedAt: now,
202
+ })
203
+ .where(and(eq(agents.id, policy.scopeId), eq(agents.pauseReason, "budget")));
204
+ return;
205
+ }
206
+ if (policy.scopeType === "project") {
207
+ await db
208
+ .update(projects)
209
+ .set({
210
+ pauseReason: null,
211
+ pausedAt: null,
212
+ updatedAt: now,
213
+ })
214
+ .where(and(eq(projects.id, policy.scopeId), eq(projects.pauseReason, "budget")));
215
+ return;
216
+ }
217
+ await db
218
+ .update(companies)
219
+ .set({
220
+ status: "active",
221
+ pauseReason: null,
222
+ pausedAt: null,
223
+ updatedAt: now,
224
+ })
225
+ .where(and(eq(companies.id, policy.scopeId), eq(companies.pauseReason, "budget")));
226
+ }
227
+ async function getPolicyRow(policyId) {
228
+ const policy = await db
229
+ .select()
230
+ .from(budgetPolicies)
231
+ .where(eq(budgetPolicies.id, policyId))
232
+ .then((rows) => rows[0] ?? null);
233
+ if (!policy)
234
+ throw notFound("Budget policy not found");
235
+ return policy;
236
+ }
237
+ async function listPolicyRows(companyId) {
238
+ return db
239
+ .select()
240
+ .from(budgetPolicies)
241
+ .where(eq(budgetPolicies.companyId, companyId))
242
+ .orderBy(desc(budgetPolicies.updatedAt));
243
+ }
244
+ async function buildPolicySummary(policy) {
245
+ const scope = await resolveScopeRecord(db, policy.scopeType, policy.scopeId);
246
+ const observedAmount = await computeObservedAmount(db, policy);
247
+ const { start, end } = resolveWindow(policy.windowKind);
248
+ const amount = policy.isActive ? policy.amount : 0;
249
+ const utilizationPercent = amount > 0 ? Number(((observedAmount / amount) * 100).toFixed(2)) : 0;
250
+ return {
251
+ policyId: policy.id,
252
+ companyId: policy.companyId,
253
+ scopeType: policy.scopeType,
254
+ scopeId: policy.scopeId,
255
+ scopeName: normalizeScopeName(policy.scopeType, scope.name),
256
+ metric: policy.metric,
257
+ windowKind: policy.windowKind,
258
+ amount,
259
+ observedAmount,
260
+ remainingAmount: amount > 0 ? Math.max(0, amount - observedAmount) : 0,
261
+ utilizationPercent,
262
+ warnPercent: policy.warnPercent,
263
+ hardStopEnabled: policy.hardStopEnabled,
264
+ notifyEnabled: policy.notifyEnabled,
265
+ isActive: policy.isActive,
266
+ status: policy.isActive
267
+ ? budgetStatusFromObserved(observedAmount, amount, policy.warnPercent)
268
+ : "ok",
269
+ paused: scope.paused,
270
+ pauseReason: scope.pauseReason,
271
+ windowStart: start,
272
+ windowEnd: end,
273
+ };
274
+ }
275
+ async function createIncidentIfNeeded(policy, thresholdType, amountObserved) {
276
+ const { start, end } = resolveWindow(policy.windowKind);
277
+ const existing = await db
278
+ .select()
279
+ .from(budgetIncidents)
280
+ .where(and(eq(budgetIncidents.policyId, policy.id), eq(budgetIncidents.windowStart, start), eq(budgetIncidents.thresholdType, thresholdType), ne(budgetIncidents.status, "dismissed")))
281
+ .then((rows) => rows[0] ?? null);
282
+ if (existing)
283
+ return existing;
284
+ const scope = await resolveScopeRecord(db, policy.scopeType, policy.scopeId);
285
+ const payload = buildApprovalPayload({
286
+ policy,
287
+ scopeName: normalizeScopeName(policy.scopeType, scope.name),
288
+ thresholdType,
289
+ amountObserved,
290
+ windowStart: start,
291
+ windowEnd: end,
292
+ });
293
+ const approval = thresholdType === "hard"
294
+ ? await db
295
+ .insert(approvals)
296
+ .values({
297
+ companyId: policy.companyId,
298
+ type: "budget_override_required",
299
+ requestedByUserId: null,
300
+ requestedByAgentId: null,
301
+ status: "pending",
302
+ payload,
303
+ })
304
+ .returning()
305
+ .then((rows) => rows[0] ?? null)
306
+ : null;
307
+ return db
308
+ .insert(budgetIncidents)
309
+ .values({
310
+ companyId: policy.companyId,
311
+ policyId: policy.id,
312
+ scopeType: policy.scopeType,
313
+ scopeId: policy.scopeId,
314
+ metric: policy.metric,
315
+ windowKind: policy.windowKind,
316
+ windowStart: start,
317
+ windowEnd: end,
318
+ thresholdType,
319
+ amountLimit: policy.amount,
320
+ amountObserved,
321
+ status: "open",
322
+ approvalId: approval?.id ?? null,
323
+ })
324
+ .returning()
325
+ .then((rows) => rows[0] ?? null);
326
+ }
327
+ async function resolveOpenSoftIncidents(policyId) {
328
+ await db
329
+ .update(budgetIncidents)
330
+ .set({
331
+ status: "resolved",
332
+ resolvedAt: new Date(),
333
+ updatedAt: new Date(),
334
+ })
335
+ .where(and(eq(budgetIncidents.policyId, policyId), eq(budgetIncidents.thresholdType, "soft"), eq(budgetIncidents.status, "open")));
336
+ }
337
+ async function resolveOpenIncidentsForPolicy(policyId, approvalStatus, decidedByUserId) {
338
+ const openRows = await db
339
+ .select()
340
+ .from(budgetIncidents)
341
+ .where(and(eq(budgetIncidents.policyId, policyId), eq(budgetIncidents.status, "open")));
342
+ await db
343
+ .update(budgetIncidents)
344
+ .set({
345
+ status: "resolved",
346
+ resolvedAt: new Date(),
347
+ updatedAt: new Date(),
348
+ })
349
+ .where(and(eq(budgetIncidents.policyId, policyId), eq(budgetIncidents.status, "open")));
350
+ if (!approvalStatus || !decidedByUserId)
351
+ return;
352
+ for (const row of openRows) {
353
+ await markApprovalStatus(db, row.approvalId ?? null, approvalStatus, "Resolved via budget update", decidedByUserId);
354
+ }
355
+ }
356
+ async function hydrateIncidentRows(rows) {
357
+ const approvalIds = rows.map((row) => row.approvalId).filter((value) => Boolean(value));
358
+ const approvalRows = approvalIds.length > 0
359
+ ? await db
360
+ .select({ id: approvals.id, status: approvals.status })
361
+ .from(approvals)
362
+ .where(inArray(approvals.id, approvalIds))
363
+ : [];
364
+ const approvalStatusById = new Map(approvalRows.map((row) => [row.id, row.status]));
365
+ return Promise.all(rows.map(async (row) => {
366
+ const scope = await resolveScopeRecord(db, row.scopeType, row.scopeId);
367
+ return {
368
+ id: row.id,
369
+ companyId: row.companyId,
370
+ policyId: row.policyId,
371
+ scopeType: row.scopeType,
372
+ scopeId: row.scopeId,
373
+ scopeName: normalizeScopeName(row.scopeType, scope.name),
374
+ metric: row.metric,
375
+ windowKind: row.windowKind,
376
+ windowStart: row.windowStart,
377
+ windowEnd: row.windowEnd,
378
+ thresholdType: row.thresholdType,
379
+ amountLimit: row.amountLimit,
380
+ amountObserved: row.amountObserved,
381
+ status: row.status,
382
+ approvalId: row.approvalId ?? null,
383
+ approvalStatus: row.approvalId ? approvalStatusById.get(row.approvalId) ?? null : null,
384
+ resolvedAt: row.resolvedAt ?? null,
385
+ createdAt: row.createdAt,
386
+ updatedAt: row.updatedAt,
387
+ };
388
+ }));
389
+ }
390
+ return {
391
+ listPolicies: async (companyId) => {
392
+ const rows = await listPolicyRows(companyId);
393
+ return rows.map((row) => ({
394
+ ...row,
395
+ scopeType: row.scopeType,
396
+ metric: row.metric,
397
+ windowKind: row.windowKind,
398
+ }));
399
+ },
400
+ upsertPolicy: async (companyId, input, actorUserId) => {
401
+ const scope = await resolveScopeRecord(db, input.scopeType, input.scopeId);
402
+ if (scope.companyId !== companyId) {
403
+ throw unprocessable("Budget scope does not belong to company");
404
+ }
405
+ const metric = input.metric ?? "billed_cents";
406
+ const windowKind = input.windowKind ?? (input.scopeType === "project" ? "lifetime" : "calendar_month_utc");
407
+ const amount = Math.max(0, Math.floor(input.amount));
408
+ const nextIsActive = amount > 0 && (input.isActive ?? true);
409
+ const existing = await db
410
+ .select()
411
+ .from(budgetPolicies)
412
+ .where(and(eq(budgetPolicies.companyId, companyId), eq(budgetPolicies.scopeType, input.scopeType), eq(budgetPolicies.scopeId, input.scopeId), eq(budgetPolicies.metric, metric), eq(budgetPolicies.windowKind, windowKind)))
413
+ .then((rows) => rows[0] ?? null);
414
+ const now = new Date();
415
+ const row = existing
416
+ ? await db
417
+ .update(budgetPolicies)
418
+ .set({
419
+ amount,
420
+ warnPercent: input.warnPercent ?? existing.warnPercent,
421
+ hardStopEnabled: input.hardStopEnabled ?? existing.hardStopEnabled,
422
+ notifyEnabled: input.notifyEnabled ?? existing.notifyEnabled,
423
+ isActive: nextIsActive,
424
+ updatedByUserId: actorUserId,
425
+ updatedAt: now,
426
+ })
427
+ .where(eq(budgetPolicies.id, existing.id))
428
+ .returning()
429
+ .then((rows) => rows[0])
430
+ : await db
431
+ .insert(budgetPolicies)
432
+ .values({
433
+ companyId,
434
+ scopeType: input.scopeType,
435
+ scopeId: input.scopeId,
436
+ metric,
437
+ windowKind,
438
+ amount,
439
+ warnPercent: input.warnPercent ?? 80,
440
+ hardStopEnabled: input.hardStopEnabled ?? true,
441
+ notifyEnabled: input.notifyEnabled ?? true,
442
+ isActive: nextIsActive,
443
+ createdByUserId: actorUserId,
444
+ updatedByUserId: actorUserId,
445
+ })
446
+ .returning()
447
+ .then((rows) => rows[0]);
448
+ if (input.scopeType === "company" && windowKind === "calendar_month_utc") {
449
+ await db
450
+ .update(companies)
451
+ .set({
452
+ budgetMonthlyCents: amount,
453
+ updatedAt: now,
454
+ })
455
+ .where(eq(companies.id, input.scopeId));
456
+ }
457
+ if (input.scopeType === "agent" && windowKind === "calendar_month_utc") {
458
+ await db
459
+ .update(agents)
460
+ .set({
461
+ budgetMonthlyCents: amount,
462
+ updatedAt: now,
463
+ })
464
+ .where(eq(agents.id, input.scopeId));
465
+ }
466
+ if (amount > 0) {
467
+ const observedAmount = await computeObservedAmount(db, row);
468
+ if (observedAmount < amount) {
469
+ await resumeScopeFromBudget(row);
470
+ await resolveOpenIncidentsForPolicy(row.id, actorUserId ? "approved" : null, actorUserId);
471
+ }
472
+ else {
473
+ const softThreshold = Math.ceil((row.amount * row.warnPercent) / 100);
474
+ if (row.notifyEnabled && observedAmount >= softThreshold) {
475
+ await createIncidentIfNeeded(row, "soft", observedAmount);
476
+ }
477
+ if (row.hardStopEnabled && observedAmount >= row.amount) {
478
+ await resolveOpenSoftIncidents(row.id);
479
+ await createIncidentIfNeeded(row, "hard", observedAmount);
480
+ await pauseAndCancelScopeForBudget(row);
481
+ }
482
+ }
483
+ }
484
+ else {
485
+ await resumeScopeFromBudget(row);
486
+ await resolveOpenIncidentsForPolicy(row.id, actorUserId ? "approved" : null, actorUserId);
487
+ }
488
+ await logActivity(db, {
489
+ companyId,
490
+ actorType: "user",
491
+ actorId: actorUserId ?? "board",
492
+ action: "budget.policy_upserted",
493
+ entityType: "budget_policy",
494
+ entityId: row.id,
495
+ details: {
496
+ scopeType: row.scopeType,
497
+ scopeId: row.scopeId,
498
+ amount: row.amount,
499
+ windowKind: row.windowKind,
500
+ },
501
+ });
502
+ return buildPolicySummary(row);
503
+ },
504
+ overview: async (companyId) => {
505
+ const rows = await listPolicyRows(companyId);
506
+ const policies = await Promise.all(rows.map((row) => buildPolicySummary(row)));
507
+ const activeIncidentRows = await db
508
+ .select()
509
+ .from(budgetIncidents)
510
+ .where(and(eq(budgetIncidents.companyId, companyId), eq(budgetIncidents.status, "open")))
511
+ .orderBy(desc(budgetIncidents.createdAt));
512
+ const activeIncidents = await hydrateIncidentRows(activeIncidentRows);
513
+ return {
514
+ companyId,
515
+ policies,
516
+ activeIncidents,
517
+ pausedAgentCount: policies.filter((policy) => policy.scopeType === "agent" && policy.paused).length,
518
+ pausedProjectCount: policies.filter((policy) => policy.scopeType === "project" && policy.paused).length,
519
+ pendingApprovalCount: activeIncidents.filter((incident) => incident.approvalStatus === "pending").length,
520
+ };
521
+ },
522
+ evaluateCostEvent: async (event) => {
523
+ const candidatePolicies = await db
524
+ .select()
525
+ .from(budgetPolicies)
526
+ .where(and(eq(budgetPolicies.companyId, event.companyId), eq(budgetPolicies.isActive, true), inArray(budgetPolicies.scopeType, ["company", "agent", "project"])));
527
+ const relevantPolicies = candidatePolicies.filter((policy) => {
528
+ if (policy.scopeType === "company")
529
+ return policy.scopeId === event.companyId;
530
+ if (policy.scopeType === "agent")
531
+ return policy.scopeId === event.agentId;
532
+ if (policy.scopeType === "project")
533
+ return Boolean(event.projectId) && policy.scopeId === event.projectId;
534
+ return false;
535
+ });
536
+ for (const policy of relevantPolicies) {
537
+ if (policy.metric !== "billed_cents" || policy.amount <= 0)
538
+ continue;
539
+ const observedAmount = await computeObservedAmount(db, policy);
540
+ const softThreshold = Math.ceil((policy.amount * policy.warnPercent) / 100);
541
+ if (policy.notifyEnabled && observedAmount >= softThreshold) {
542
+ const softIncident = await createIncidentIfNeeded(policy, "soft", observedAmount);
543
+ if (softIncident) {
544
+ await logActivity(db, {
545
+ companyId: policy.companyId,
546
+ actorType: "system",
547
+ actorId: "budget_service",
548
+ action: "budget.soft_threshold_crossed",
549
+ entityType: "budget_incident",
550
+ entityId: softIncident.id,
551
+ details: {
552
+ scopeType: policy.scopeType,
553
+ scopeId: policy.scopeId,
554
+ amountObserved: observedAmount,
555
+ amountLimit: policy.amount,
556
+ },
557
+ });
558
+ }
559
+ }
560
+ if (policy.hardStopEnabled && observedAmount >= policy.amount) {
561
+ await resolveOpenSoftIncidents(policy.id);
562
+ const hardIncident = await createIncidentIfNeeded(policy, "hard", observedAmount);
563
+ await pauseAndCancelScopeForBudget(policy);
564
+ if (hardIncident) {
565
+ await logActivity(db, {
566
+ companyId: policy.companyId,
567
+ actorType: "system",
568
+ actorId: "budget_service",
569
+ action: "budget.hard_threshold_crossed",
570
+ entityType: "budget_incident",
571
+ entityId: hardIncident.id,
572
+ details: {
573
+ scopeType: policy.scopeType,
574
+ scopeId: policy.scopeId,
575
+ amountObserved: observedAmount,
576
+ amountLimit: policy.amount,
577
+ approvalId: hardIncident.approvalId ?? null,
578
+ },
579
+ });
580
+ }
581
+ }
582
+ }
583
+ },
584
+ getInvocationBlock: async (companyId, agentId, context) => {
585
+ const agent = await db
586
+ .select({
587
+ status: agents.status,
588
+ pauseReason: agents.pauseReason,
589
+ companyId: agents.companyId,
590
+ name: agents.name,
591
+ })
592
+ .from(agents)
593
+ .where(eq(agents.id, agentId))
594
+ .then((rows) => rows[0] ?? null);
595
+ if (!agent || agent.companyId !== companyId)
596
+ throw notFound("Agent not found");
597
+ const company = await db
598
+ .select({
599
+ status: companies.status,
600
+ pauseReason: companies.pauseReason,
601
+ name: companies.name,
602
+ })
603
+ .from(companies)
604
+ .where(eq(companies.id, companyId))
605
+ .then((rows) => rows[0] ?? null);
606
+ if (!company)
607
+ throw notFound("Company not found");
608
+ if (company.status === "paused") {
609
+ return {
610
+ scopeType: "company",
611
+ scopeId: companyId,
612
+ scopeName: company.name,
613
+ reason: company.pauseReason === "budget"
614
+ ? "Company is paused because its budget hard-stop was reached."
615
+ : "Company is paused and cannot start new work.",
616
+ };
617
+ }
618
+ const companyPolicy = await db
619
+ .select()
620
+ .from(budgetPolicies)
621
+ .where(and(eq(budgetPolicies.companyId, companyId), eq(budgetPolicies.scopeType, "company"), eq(budgetPolicies.scopeId, companyId), eq(budgetPolicies.isActive, true), eq(budgetPolicies.metric, "billed_cents")))
622
+ .then((rows) => rows[0] ?? null);
623
+ if (companyPolicy && companyPolicy.hardStopEnabled && companyPolicy.amount > 0) {
624
+ const observed = await computeObservedAmount(db, companyPolicy);
625
+ if (observed >= companyPolicy.amount) {
626
+ return {
627
+ scopeType: "company",
628
+ scopeId: companyId,
629
+ scopeName: company.name,
630
+ reason: "Company cannot start new work because its budget hard-stop is exceeded.",
631
+ };
632
+ }
633
+ }
634
+ if (agent.status === "paused" && agent.pauseReason === "budget") {
635
+ return {
636
+ scopeType: "agent",
637
+ scopeId: agentId,
638
+ scopeName: agent.name,
639
+ reason: "Agent is paused because its budget hard-stop was reached.",
640
+ };
641
+ }
642
+ const agentPolicy = await db
643
+ .select()
644
+ .from(budgetPolicies)
645
+ .where(and(eq(budgetPolicies.companyId, companyId), eq(budgetPolicies.scopeType, "agent"), eq(budgetPolicies.scopeId, agentId), eq(budgetPolicies.isActive, true), eq(budgetPolicies.metric, "billed_cents")))
646
+ .then((rows) => rows[0] ?? null);
647
+ if (agentPolicy && agentPolicy.hardStopEnabled && agentPolicy.amount > 0) {
648
+ const observed = await computeObservedAmount(db, agentPolicy);
649
+ if (observed >= agentPolicy.amount) {
650
+ return {
651
+ scopeType: "agent",
652
+ scopeId: agentId,
653
+ scopeName: agent.name,
654
+ reason: "Agent cannot start because its budget hard-stop is still exceeded.",
655
+ };
656
+ }
657
+ }
658
+ const candidateProjectId = context?.projectId ?? null;
659
+ if (!candidateProjectId)
660
+ return null;
661
+ const project = await db
662
+ .select({
663
+ id: projects.id,
664
+ name: projects.name,
665
+ companyId: projects.companyId,
666
+ pauseReason: projects.pauseReason,
667
+ pausedAt: projects.pausedAt,
668
+ })
669
+ .from(projects)
670
+ .where(eq(projects.id, candidateProjectId))
671
+ .then((rows) => rows[0] ?? null);
672
+ if (!project || project.companyId !== companyId)
673
+ return null;
674
+ const projectPolicy = await db
675
+ .select()
676
+ .from(budgetPolicies)
677
+ .where(and(eq(budgetPolicies.companyId, companyId), eq(budgetPolicies.scopeType, "project"), eq(budgetPolicies.scopeId, project.id), eq(budgetPolicies.isActive, true), eq(budgetPolicies.metric, "billed_cents")))
678
+ .then((rows) => rows[0] ?? null);
679
+ if (projectPolicy && projectPolicy.hardStopEnabled && projectPolicy.amount > 0) {
680
+ const observed = await computeObservedAmount(db, projectPolicy);
681
+ if (observed >= projectPolicy.amount) {
682
+ return {
683
+ scopeType: "project",
684
+ scopeId: project.id,
685
+ scopeName: project.name,
686
+ reason: "Project cannot start work because its budget hard-stop is still exceeded.",
687
+ };
688
+ }
689
+ }
690
+ if (!project.pausedAt || project.pauseReason !== "budget")
691
+ return null;
692
+ return {
693
+ scopeType: "project",
694
+ scopeId: project.id,
695
+ scopeName: project.name,
696
+ reason: "Project is paused because its budget hard-stop was reached.",
697
+ };
698
+ },
699
+ resolveIncident: async (companyId, incidentId, input, actorUserId) => {
700
+ const incident = await db
701
+ .select()
702
+ .from(budgetIncidents)
703
+ .where(eq(budgetIncidents.id, incidentId))
704
+ .then((rows) => rows[0] ?? null);
705
+ if (!incident)
706
+ throw notFound("Budget incident not found");
707
+ if (incident.companyId !== companyId)
708
+ throw notFound("Budget incident not found");
709
+ const policy = await getPolicyRow(incident.policyId);
710
+ if (input.action === "raise_budget_and_resume") {
711
+ const nextAmount = Math.max(0, Math.floor(input.amount ?? 0));
712
+ const currentObserved = await computeObservedAmount(db, policy);
713
+ if (nextAmount <= currentObserved) {
714
+ throw unprocessable("New budget must exceed current observed spend");
715
+ }
716
+ const now = new Date();
717
+ await db
718
+ .update(budgetPolicies)
719
+ .set({
720
+ amount: nextAmount,
721
+ isActive: true,
722
+ updatedByUserId: actorUserId,
723
+ updatedAt: now,
724
+ })
725
+ .where(eq(budgetPolicies.id, policy.id));
726
+ if (policy.scopeType === "company" && policy.windowKind === "calendar_month_utc") {
727
+ await db
728
+ .update(companies)
729
+ .set({ budgetMonthlyCents: nextAmount, updatedAt: now })
730
+ .where(eq(companies.id, policy.scopeId));
731
+ }
732
+ if (policy.scopeType === "agent" && policy.windowKind === "calendar_month_utc") {
733
+ await db
734
+ .update(agents)
735
+ .set({ budgetMonthlyCents: nextAmount, updatedAt: now })
736
+ .where(eq(agents.id, policy.scopeId));
737
+ }
738
+ await resumeScopeFromBudget(policy);
739
+ await db
740
+ .update(budgetIncidents)
741
+ .set({
742
+ status: "resolved",
743
+ resolvedAt: now,
744
+ updatedAt: now,
745
+ })
746
+ .where(and(eq(budgetIncidents.policyId, policy.id), eq(budgetIncidents.status, "open")));
747
+ await markApprovalStatus(db, incident.approvalId ?? null, "approved", input.decisionNote, actorUserId);
748
+ }
749
+ else {
750
+ await db
751
+ .update(budgetIncidents)
752
+ .set({
753
+ status: "dismissed",
754
+ resolvedAt: new Date(),
755
+ updatedAt: new Date(),
756
+ })
757
+ .where(eq(budgetIncidents.id, incident.id));
758
+ await markApprovalStatus(db, incident.approvalId ?? null, "rejected", input.decisionNote, actorUserId);
759
+ }
760
+ await logActivity(db, {
761
+ companyId: incident.companyId,
762
+ actorType: "user",
763
+ actorId: actorUserId,
764
+ action: "budget.incident_resolved",
765
+ entityType: "budget_incident",
766
+ entityId: incident.id,
767
+ details: {
768
+ action: input.action,
769
+ amount: input.amount ?? null,
770
+ scopeType: incident.scopeType,
771
+ scopeId: incident.scopeId,
772
+ },
773
+ });
774
+ const [updated] = await hydrateIncidentRows([{
775
+ ...incident,
776
+ status: input.action === "raise_budget_and_resume" ? "resolved" : "dismissed",
777
+ resolvedAt: new Date(),
778
+ updatedAt: new Date(),
779
+ }]);
780
+ return updated;
781
+ },
782
+ };
783
+ }
784
+ //# sourceMappingURL=budgets.js.map