@penclipai/server 2026.426.0 → 2026.505.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 (253) hide show
  1. package/dist/adapters/builtin-adapter-types.d.ts.map +1 -1
  2. package/dist/adapters/builtin-adapter-types.js +3 -0
  3. package/dist/adapters/builtin-adapter-types.js.map +1 -1
  4. package/dist/adapters/index.d.ts +2 -2
  5. package/dist/adapters/index.d.ts.map +1 -1
  6. package/dist/adapters/index.js +1 -1
  7. package/dist/adapters/index.js.map +1 -1
  8. package/dist/adapters/registry.d.ts +2 -1
  9. package/dist/adapters/registry.d.ts.map +1 -1
  10. package/dist/adapters/registry.js +76 -6
  11. package/dist/adapters/registry.js.map +1 -1
  12. package/dist/adapters/types.d.ts +1 -1
  13. package/dist/adapters/types.d.ts.map +1 -1
  14. package/dist/adapters/utils.d.ts.map +1 -1
  15. package/dist/adapters/utils.js +2 -1
  16. package/dist/adapters/utils.js.map +1 -1
  17. package/dist/attachment-types.d.ts +1 -16
  18. package/dist/attachment-types.d.ts.map +1 -1
  19. package/dist/attachment-types.js +7 -0
  20. package/dist/attachment-types.js.map +1 -1
  21. package/dist/auth/better-auth.d.ts +3 -1
  22. package/dist/auth/better-auth.d.ts.map +1 -1
  23. package/dist/auth/better-auth.js +8 -2
  24. package/dist/auth/better-auth.js.map +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +27 -13
  27. package/dist/index.js.map +1 -1
  28. package/dist/middleware/auth.d.ts.map +1 -1
  29. package/dist/middleware/auth.js +143 -2
  30. package/dist/middleware/auth.js.map +1 -1
  31. package/dist/onboarding-assets/ceo/AGENTS.md +1 -1
  32. package/dist/onboarding-assets/ceo/HEARTBEAT.md +5 -5
  33. package/dist/redaction.d.ts.map +1 -1
  34. package/dist/redaction.js +30 -12
  35. package/dist/redaction.js.map +1 -1
  36. package/dist/routes/access.d.ts.map +1 -1
  37. package/dist/routes/access.js +10 -0
  38. package/dist/routes/access.js.map +1 -1
  39. package/dist/routes/activity.d.ts.map +1 -1
  40. package/dist/routes/activity.js +4 -2
  41. package/dist/routes/activity.js.map +1 -1
  42. package/dist/routes/adapters.d.ts.map +1 -1
  43. package/dist/routes/adapters.js +1 -0
  44. package/dist/routes/adapters.js.map +1 -1
  45. package/dist/routes/agents.d.ts.map +1 -1
  46. package/dist/routes/agents.js +317 -56
  47. package/dist/routes/agents.js.map +1 -1
  48. package/dist/routes/costs.d.ts.map +1 -1
  49. package/dist/routes/costs.js +21 -2
  50. package/dist/routes/costs.js.map +1 -1
  51. package/dist/routes/instance-settings.d.ts.map +1 -1
  52. package/dist/routes/instance-settings.js +37 -2
  53. package/dist/routes/instance-settings.js.map +1 -1
  54. package/dist/routes/issue-tree-control.d.ts.map +1 -1
  55. package/dist/routes/issue-tree-control.js +3 -1
  56. package/dist/routes/issue-tree-control.js.map +1 -1
  57. package/dist/routes/issues.d.ts.map +1 -1
  58. package/dist/routes/issues.js +257 -32
  59. package/dist/routes/issues.js.map +1 -1
  60. package/dist/routes/projects.d.ts.map +1 -1
  61. package/dist/routes/projects.js +10 -3
  62. package/dist/routes/projects.js.map +1 -1
  63. package/dist/routes/routines.d.ts.map +1 -1
  64. package/dist/routes/routines.js +6 -1
  65. package/dist/routes/routines.js.map +1 -1
  66. package/dist/routes/workspace-command-authz.d.ts +1 -1
  67. package/dist/routes/workspace-command-authz.d.ts.map +1 -1
  68. package/dist/routes/workspace-command-authz.js +2 -2
  69. package/dist/routes/workspace-command-authz.js.map +1 -1
  70. package/dist/runtime-api.d.ts +4 -0
  71. package/dist/runtime-api.d.ts.map +1 -1
  72. package/dist/runtime-api.js +38 -10
  73. package/dist/runtime-api.js.map +1 -1
  74. package/dist/services/companies.d.ts +6 -0
  75. package/dist/services/companies.d.ts.map +1 -1
  76. package/dist/services/companies.js +1 -0
  77. package/dist/services/companies.js.map +1 -1
  78. package/dist/services/company-portability.d.ts.map +1 -1
  79. package/dist/services/company-portability.js +16 -15
  80. package/dist/services/company-portability.js.map +1 -1
  81. package/dist/services/costs.d.ts +9 -0
  82. package/dist/services/costs.d.ts.map +1 -1
  83. package/dist/services/costs.js +45 -1
  84. package/dist/services/costs.js.map +1 -1
  85. package/dist/services/environment-execution-target.d.ts.map +1 -1
  86. package/dist/services/environment-execution-target.js +7 -13
  87. package/dist/services/environment-execution-target.js.map +1 -1
  88. package/dist/services/environment-run-orchestrator.d.ts.map +1 -1
  89. package/dist/services/environment-run-orchestrator.js +56 -0
  90. package/dist/services/environment-run-orchestrator.js.map +1 -1
  91. package/dist/services/environment-runtime.d.ts +2 -0
  92. package/dist/services/environment-runtime.d.ts.map +1 -1
  93. package/dist/services/environment-runtime.js +80 -39
  94. package/dist/services/environment-runtime.js.map +1 -1
  95. package/dist/services/heartbeat-stop-metadata.d.ts +2 -1
  96. package/dist/services/heartbeat-stop-metadata.d.ts.map +1 -1
  97. package/dist/services/heartbeat-stop-metadata.js +10 -1
  98. package/dist/services/heartbeat-stop-metadata.js.map +1 -1
  99. package/dist/services/heartbeat-stop-metadata.test.js +24 -0
  100. package/dist/services/heartbeat-stop-metadata.test.js.map +1 -1
  101. package/dist/services/heartbeat.d.ts +156 -5
  102. package/dist/services/heartbeat.d.ts.map +1 -1
  103. package/dist/services/heartbeat.js +1384 -112
  104. package/dist/services/heartbeat.js.map +1 -1
  105. package/dist/services/index.d.ts +1 -0
  106. package/dist/services/index.d.ts.map +1 -1
  107. package/dist/services/index.js +1 -0
  108. package/dist/services/index.js.map +1 -1
  109. package/dist/services/instance-settings.d.ts.map +1 -1
  110. package/dist/services/instance-settings.js +4 -1
  111. package/dist/services/instance-settings.js.map +1 -1
  112. package/dist/services/issue-execution-policy.d.ts +56 -1
  113. package/dist/services/issue-execution-policy.d.ts.map +1 -1
  114. package/dist/services/issue-execution-policy.js +400 -2
  115. package/dist/services/issue-execution-policy.js.map +1 -1
  116. package/dist/services/issue-thread-interactions.d.ts +5 -1
  117. package/dist/services/issue-thread-interactions.d.ts.map +1 -1
  118. package/dist/services/issue-thread-interactions.js +44 -1
  119. package/dist/services/issue-thread-interactions.js.map +1 -1
  120. package/dist/services/issue-tree-control.d.ts +1 -0
  121. package/dist/services/issue-tree-control.d.ts.map +1 -1
  122. package/dist/services/issue-tree-control.js +84 -4
  123. package/dist/services/issue-tree-control.js.map +1 -1
  124. package/dist/services/issues.d.ts +10 -1
  125. package/dist/services/issues.d.ts.map +1 -1
  126. package/dist/services/issues.js +452 -48
  127. package/dist/services/issues.js.map +1 -1
  128. package/dist/services/plugin-environment-driver.d.ts +4 -0
  129. package/dist/services/plugin-environment-driver.d.ts.map +1 -1
  130. package/dist/services/plugin-environment-driver.js +18 -1
  131. package/dist/services/plugin-environment-driver.js.map +1 -1
  132. package/dist/services/productivity-review.d.ts +83 -0
  133. package/dist/services/productivity-review.d.ts.map +1 -0
  134. package/dist/services/productivity-review.js +650 -0
  135. package/dist/services/productivity-review.js.map +1 -0
  136. package/dist/services/recovery/index.d.ts +1 -1
  137. package/dist/services/recovery/index.d.ts.map +1 -1
  138. package/dist/services/recovery/index.js +1 -1
  139. package/dist/services/recovery/index.js.map +1 -1
  140. package/dist/services/recovery/issue-graph-liveness.d.ts +13 -1
  141. package/dist/services/recovery/issue-graph-liveness.d.ts.map +1 -1
  142. package/dist/services/recovery/issue-graph-liveness.js +212 -92
  143. package/dist/services/recovery/issue-graph-liveness.js.map +1 -1
  144. package/dist/services/recovery/origins.d.ts +2 -0
  145. package/dist/services/recovery/origins.d.ts.map +1 -1
  146. package/dist/services/recovery/origins.js +4 -0
  147. package/dist/services/recovery/origins.js.map +1 -1
  148. package/dist/services/recovery/run-liveness-continuations.d.ts.map +1 -1
  149. package/dist/services/recovery/run-liveness-continuations.js.map +1 -1
  150. package/dist/services/recovery/service.d.ts +20 -2
  151. package/dist/services/recovery/service.d.ts.map +1 -1
  152. package/dist/services/recovery/service.js +405 -63
  153. package/dist/services/recovery/service.js.map +1 -1
  154. package/dist/services/routines.d.ts +5 -2
  155. package/dist/services/routines.d.ts.map +1 -1
  156. package/dist/services/routines.js +47 -3
  157. package/dist/services/routines.js.map +1 -1
  158. package/dist/worktree-config.d.ts.map +1 -1
  159. package/dist/worktree-config.js +2 -5
  160. package/dist/worktree-config.js.map +1 -1
  161. package/package.json +16 -15
  162. package/skills/diagnose-why-work-stopped/SKILL.md +161 -0
  163. package/skills/paperclip/SKILL.md +37 -26
  164. package/skills/paperclip/references/api-reference.md +6 -2
  165. package/skills/paperclip-converting-plans-to-tasks/SKILL.md +42 -0
  166. package/skills/paperclip-create-agent/SKILL.md +3 -2
  167. package/skills/paperclip-create-agent/references/agent-instruction-templates.md +1 -1
  168. package/skills/paperclip-create-agent/references/api-reference.md +7 -2
  169. package/skills/paperclip-create-agent/references/baseline-role-guide.md +1 -1
  170. package/skills/paperclip-create-agent/references/draft-review-checklist.md +2 -2
  171. package/skills/paperclip-dev/SKILL.md +267 -0
  172. package/skills/terminal-bench-loop/SKILL.md +236 -0
  173. package/ui-dist/assets/{_basePickBy-BRqa7PJ5.js → _basePickBy-BS0Fg_DB.js} +1 -1
  174. package/ui-dist/assets/{_baseUniq-DhE2yrXC.js → _baseUniq-Dtnt_4SE.js} +1 -1
  175. package/ui-dist/assets/{arc-7qnikTQ3.js → arc-BCoOPxh5.js} +1 -1
  176. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-CH0wVUOM.js → architectureDiagram-VXUJARFQ-C6eX2QUo.js} +1 -1
  177. package/ui-dist/assets/{blockDiagram-VD42YOAC-CeeRyJQX.js → blockDiagram-VD42YOAC-aUueUD4B.js} +1 -1
  178. package/ui-dist/assets/browser-ponyfill-BlAfsWm_.js +2 -0
  179. package/ui-dist/assets/{c4Diagram-YG6GDRKO-C_cV0CGo.js → c4Diagram-YG6GDRKO-CfPWRlOF.js} +1 -1
  180. package/ui-dist/assets/channel-ChNSCFJf.js +1 -0
  181. package/ui-dist/assets/{chunk-4BX2VUAB-DQ6pxPVT.js → chunk-4BX2VUAB-BTD1apA4.js} +1 -1
  182. package/ui-dist/assets/{chunk-55IACEB6-L8pS0IoX.js → chunk-55IACEB6-BXXF_ClN.js} +1 -1
  183. package/ui-dist/assets/{chunk-B4BG7PRW-BZKGE88E.js → chunk-B4BG7PRW-hAZeWGP8.js} +1 -1
  184. package/ui-dist/assets/{chunk-DI55MBZ5-CefSoZ_K.js → chunk-DI55MBZ5-cOH3UoEl.js} +1 -1
  185. package/ui-dist/assets/{chunk-FMBD7UC4-Bc3qTTHB.js → chunk-FMBD7UC4-Cu2yZOcl.js} +1 -1
  186. package/ui-dist/assets/{chunk-QN33PNHL-CjWBr5bI.js → chunk-QN33PNHL-0DNN5aRU.js} +1 -1
  187. package/ui-dist/assets/{chunk-QZHKN3VN-C0JUdmmz.js → chunk-QZHKN3VN-B9_bhK2n.js} +1 -1
  188. package/ui-dist/assets/{chunk-TZMSLE5B-D4d4I82z.js → chunk-TZMSLE5B-Cr5xwxio.js} +1 -1
  189. package/ui-dist/assets/classDiagram-2ON5EDUG-4aK1QZU3.js +1 -0
  190. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-4aK1QZU3.js +1 -0
  191. package/ui-dist/assets/clone-C8lk5Qbc.js +1 -0
  192. package/ui-dist/assets/{cose-bilkent-S5V4N54A-B09h9XGZ.js → cose-bilkent-S5V4N54A-6_Dw6gpQ.js} +1 -1
  193. package/ui-dist/assets/{dagre-6UL2VRFP-CA02PXuX.js → dagre-6UL2VRFP-CFBhlh5H.js} +1 -1
  194. package/ui-dist/assets/{diagram-PSM6KHXK-DaT9cnrY.js → diagram-PSM6KHXK-C88ftcah.js} +1 -1
  195. package/ui-dist/assets/{diagram-QEK2KX5R-Drwc3gBw.js → diagram-QEK2KX5R-9EUupcuH.js} +1 -1
  196. package/ui-dist/assets/{diagram-S2PKOQOG-CpsGCaT6.js → diagram-S2PKOQOG-Dsml0wWh.js} +1 -1
  197. package/ui-dist/assets/{erDiagram-Q2GNP2WA-CVkBh9TY.js → erDiagram-Q2GNP2WA-sM-XdfHS.js} +1 -1
  198. package/ui-dist/assets/{flowDiagram-NV44I4VS-De9sXvPR.js → flowDiagram-NV44I4VS-qll7oaoW.js} +1 -1
  199. package/ui-dist/assets/{ganttDiagram-JELNMOA3-CSFa0gXS.js → ganttDiagram-JELNMOA3-VWnJMcjC.js} +1 -1
  200. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-DEJaChxa.js → gitGraphDiagram-V2S2FVAM-DFnocrfl.js} +1 -1
  201. package/ui-dist/assets/{graph-D2R4DCtu.js → graph-nq3Qye4Z.js} +1 -1
  202. package/ui-dist/assets/{index-DEG-9CFs.js → index-3Owzaheh.js} +1 -1
  203. package/ui-dist/assets/{index-DHnKx9xX.js → index-B2A-a635.js} +1 -1
  204. package/ui-dist/assets/{index-C1I0SGDm.js → index-BGFrRiqa.js} +1 -1
  205. package/ui-dist/assets/{index-B44EtLRv.js → index-BVC5UhRK.js} +1 -1
  206. package/ui-dist/assets/{index-C_dAXwxT.js → index-BrP1U_Hy.js} +1 -1
  207. package/ui-dist/assets/{index-flZjKn_n.js → index-CXXHGqM8.js} +1 -1
  208. package/ui-dist/assets/{index-ssM_UKPW.js → index-CgyPAauR.js} +1 -1
  209. package/ui-dist/assets/{index-Ct1AraKR.js → index-CksQ4Ytv.js} +1 -1
  210. package/ui-dist/assets/{index-DQ6I_vpd.js → index-CrNzj2vZ.js} +1 -1
  211. package/ui-dist/assets/{index-DzZID5RY.js → index-CxbZBH3M.js} +1 -1
  212. package/ui-dist/assets/{index-Cn6_RRY5.js → index-D-dSSrf-.js} +1 -1
  213. package/ui-dist/assets/{index-CVa2OHgx.js → index-D6uZ_7Vh.js} +1 -1
  214. package/ui-dist/assets/{index-BzjWQd50.js → index-D7JGmxas.js} +1 -1
  215. package/ui-dist/assets/{index-CnT1_9UF.js → index-DDqO9GAq.js} +1 -1
  216. package/ui-dist/assets/index-DEUtmlPm.js +513 -0
  217. package/ui-dist/assets/{index-D2fEhyQg.js → index-DF5RDSoK.js} +1 -1
  218. package/ui-dist/assets/{index-CZGNe8K3.js → index-DfI92epU.js} +1 -1
  219. package/ui-dist/assets/{index-ByamXtyB.js → index-Dukb9MDQ.js} +1 -1
  220. package/ui-dist/assets/index-HP73_6Vr.css +1 -0
  221. package/ui-dist/assets/{index-BJS4rvUh.js → index-NXDTW2n4.js} +1 -1
  222. package/ui-dist/assets/{index-Bad5Hy7e.js → index-SxPPG9ig.js} +1 -1
  223. package/ui-dist/assets/{index-CC51mhhA.js → index-lC4Yz3Gw.js} +1 -1
  224. package/ui-dist/assets/{index-BFzkl36p.js → index-q2RXGI2V.js} +1 -1
  225. package/ui-dist/assets/{index-40icqWwg.js → index-qjfdrS96.js} +1 -1
  226. package/ui-dist/assets/{infoDiagram-HS3SLOUP-CJcjzWkM.js → infoDiagram-HS3SLOUP-CTrK5xoS.js} +1 -1
  227. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-ByITI00s.js → journeyDiagram-XKPGCS4Q-YFC7FykG.js} +1 -1
  228. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-DvEjKke-.js → kanban-definition-3W4ZIXB7-B3dlyva0.js} +1 -1
  229. package/ui-dist/assets/{layout-CZcd66hi.js → layout-DefunPTK.js} +1 -1
  230. package/ui-dist/assets/{linear-jTUy3iHu.js → linear-CIPvzeMv.js} +1 -1
  231. package/ui-dist/assets/{mermaid.core-DECSZPbJ.js → mermaid.core-zKYhmnnR.js} +4 -4
  232. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-Twtu17_c.js → mindmap-definition-VGOIOE7T-BlU-ebRa.js} +1 -1
  233. package/ui-dist/assets/{pieDiagram-ADFJNKIX-DlbgZ010.js → pieDiagram-ADFJNKIX-Ceto4LXH.js} +1 -1
  234. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-CMAa3qAT.js → quadrantDiagram-AYHSOK5B-C6M6hkuE.js} +1 -1
  235. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-CXRTfJOe.js → requirementDiagram-UZGBJVZJ-B-bcG938.js} +1 -1
  236. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-DeyO4fer.js → sankeyDiagram-TZEHDZUN-CIqty6Qi.js} +1 -1
  237. package/ui-dist/assets/{sequenceDiagram-WL72ISMW-Ch8wlJIL.js → sequenceDiagram-WL72ISMW-CIt2R5tk.js} +1 -1
  238. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-BgL_AAl9.js → stateDiagram-FKZM4ZOC-BC1RFlfg.js} +1 -1
  239. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-Iy6tYSSw.js +1 -0
  240. package/ui-dist/assets/{timeline-definition-IT6M3QCI-D1QWd7TQ.js → timeline-definition-IT6M3QCI-DZqvoU94.js} +1 -1
  241. package/ui-dist/assets/{treemap-GDKQZRPO-B5RkmUv8.js → treemap-GDKQZRPO-CSeKauwA.js} +1 -1
  242. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-WtDhjZfk.js → xychartDiagram-PRI3JC2R-Ut3mCiEd.js} +1 -1
  243. package/ui-dist/index.html +2 -2
  244. package/ui-dist/locales/en/common.json +137 -1
  245. package/ui-dist/locales/zh-CN/common.json +111 -1
  246. package/ui-dist/assets/browser-ponyfill-Ct3hGqsr.js +0 -2
  247. package/ui-dist/assets/channel-pHFjGZL-.js +0 -1
  248. package/ui-dist/assets/classDiagram-2ON5EDUG-X4ZksqXl.js +0 -1
  249. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-X4ZksqXl.js +0 -1
  250. package/ui-dist/assets/clone-DZzimpfG.js +0 -1
  251. package/ui-dist/assets/index-C1oE3J7o.css +0 -1
  252. package/ui-dist/assets/index-fSIlEIHr.js +0 -510
  253. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-gnLzrhSv.js +0 -1
@@ -21,6 +21,7 @@ export { routineService } from "./routines.js";
21
21
  export { costService } from "./costs.js";
22
22
  export { financeService } from "./finance.js";
23
23
  export { heartbeatService } from "./heartbeat.js";
24
+ export { productivityReviewService, PRODUCTIVITY_REVIEW_ORIGIN_KIND, } from "./productivity-review.js";
24
25
  export { classifyIssueGraphLiveness, type IssueLivenessFinding } from "./recovery/index.js";
25
26
  export { dashboardService } from "./dashboard.js";
26
27
  export { sidebarBadgeService } from "./sidebar-badges.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ export { routineService } from "./routines.js";
21
21
  export { costService } from "./costs.js";
22
22
  export { financeService } from "./finance.js";
23
23
  export { heartbeatService } from "./heartbeat.js";
24
+ export { productivityReviewService, PRODUCTIVITY_REVIEW_ORIGIN_KIND, } from "./productivity-review.js";
24
25
  export { classifyIssueGraphLiveness } from "./recovery/index.js";
25
26
  export { dashboardService } from "./dashboard.js";
26
27
  export { sidebarBadgeService } from "./sidebar-badges.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,wCAAwC,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,uCAAuC,EACvC,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,GAChC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,GAEb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAA6B,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAyB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAgC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,0CAA0C,EAAE,sCAAsC,EAAE,MAAM,wBAAwB,CAAC;AAC5H,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,wCAAwC,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,uCAAuC,EACvC,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,GAChC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,GAEb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAA6B,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAyB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAgC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,0CAA0C,EAAE,sCAAsC,EAAE,MAAM,wBAAwB,CAAC;AAC5H,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"instance-settings.d.ts","sourceRoot":"","sources":["../../src/services/instance-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAKL,KAAK,uBAAuB,EAE5B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,iCAAiC,EACvC,MAAM,mBAAmB,CAAC;AAsD3B,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE;eAwC3B,OAAO,CAAC,gBAAgB,CAAC;sBAElB,OAAO,CAAC,uBAAuB,CAAC;2BAK3B,OAAO,CAAC,4BAA4B,CAAC;2BAKnC,4BAA4B,KAAG,OAAO,CAAC,gBAAgB,CAAC;gCAkBnD,iCAAiC,KAAG,OAAO,CAAC,gBAAgB,CAAC;0BAkBrE,OAAO,CAAC,MAAM,EAAE,CAAC;EAM9C"}
1
+ {"version":3,"file":"instance-settings.d.ts","sourceRoot":"","sources":["../../src/services/instance-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAML,KAAK,uBAAuB,EAE5B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,iCAAiC,EACvC,MAAM,mBAAmB,CAAC;AA2D3B,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE;eAwC3B,OAAO,CAAC,gBAAgB,CAAC;sBAElB,OAAO,CAAC,uBAAuB,CAAC;2BAK3B,OAAO,CAAC,4BAA4B,CAAC;2BAKnC,4BAA4B,KAAG,OAAO,CAAC,gBAAgB,CAAC;gCAkBnD,iCAAiC,KAAG,OAAO,CAAC,gBAAgB,CAAC;0BAkBrE,OAAO,CAAC,MAAM,EAAE,CAAC;EAM9C"}
@@ -1,5 +1,5 @@
1
1
  import { companies, instanceSettings } from "@penclipai/db";
2
- import { DEFAULT_UI_LOCALE, DEFAULT_FEEDBACK_DATA_SHARING_PREFERENCE, DEFAULT_BACKUP_RETENTION, instanceGeneralSettingsSchema, instanceExperimentalSettingsSchema, } from "@penclipai/shared";
2
+ import { DEFAULT_UI_LOCALE, DEFAULT_FEEDBACK_DATA_SHARING_PREFERENCE, DEFAULT_BACKUP_RETENTION, DEFAULT_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS, instanceGeneralSettingsSchema, instanceExperimentalSettingsSchema, } from "@penclipai/shared";
3
3
  import { eq } from "drizzle-orm";
4
4
  const DEFAULT_SINGLETON_KEY = "default";
5
5
  function normalizeGeneralSettings(raw) {
@@ -29,6 +29,8 @@ function normalizeExperimentalSettings(raw) {
29
29
  enableIsolatedWorkspaces: parsed.data.enableIsolatedWorkspaces ?? false,
30
30
  autoRestartDevServerWhenIdle: parsed.data.autoRestartDevServerWhenIdle ?? false,
31
31
  enableIssueGraphLivenessAutoRecovery: parsed.data.enableIssueGraphLivenessAutoRecovery ?? false,
32
+ issueGraphLivenessAutoRecoveryLookbackHours: parsed.data.issueGraphLivenessAutoRecoveryLookbackHours ??
33
+ DEFAULT_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS,
32
34
  };
33
35
  }
34
36
  return {
@@ -36,6 +38,7 @@ function normalizeExperimentalSettings(raw) {
36
38
  enableIsolatedWorkspaces: false,
37
39
  autoRestartDevServerWhenIdle: false,
38
40
  enableIssueGraphLivenessAutoRecovery: false,
41
+ issueGraphLivenessAutoRecoveryLookbackHours: DEFAULT_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS,
39
42
  };
40
43
  }
41
44
  function toInstanceSettings(row) {
@@ -1 +1 @@
1
- {"version":3,"file":"instance-settings.js","sourceRoot":"","sources":["../../src/services/instance-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-settings.js","sourceRoot":"","sources":["../../src/services/instance-settings.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { IssueExecutionDecision, IssueExecutionPolicy, IssueExecutionStagePrincipal, IssueExecutionState } from "@penclipai/shared";
1
+ import type { IssueExecutionDecision, IssueExecutionMonitorClearReason, IssueExecutionPolicy, IssueExecutionStagePrincipal, IssueExecutionState, IssueMonitorScheduledBy } from "@penclipai/shared";
2
2
  type AssigneeLike = {
3
3
  assigneeAgentId?: string | null;
4
4
  assigneeUserId?: string | null;
@@ -7,6 +7,12 @@ type IssueLike = AssigneeLike & {
7
7
  status: string;
8
8
  executionPolicy?: IssueExecutionPolicy | Record<string, unknown> | null;
9
9
  executionState?: IssueExecutionState | Record<string, unknown> | null;
10
+ monitorNextCheckAt?: Date | null;
11
+ monitorWakeRequestedAt?: Date | null;
12
+ monitorLastTriggeredAt?: Date | null;
13
+ monitorAttemptCount?: number | null;
14
+ monitorNotes?: string | null;
15
+ monitorScheduledBy?: string | null;
10
16
  };
11
17
  type ActorLike = {
12
18
  agentId?: string | null;
@@ -19,20 +25,69 @@ type RequestedAssigneePatch = {
19
25
  type TransitionInput = {
20
26
  issue: IssueLike;
21
27
  policy: IssueExecutionPolicy | null;
28
+ previousPolicy?: IssueExecutionPolicy | null;
22
29
  requestedStatus?: string;
23
30
  requestedAssigneePatch: RequestedAssigneePatch;
24
31
  actor: ActorLike;
25
32
  commentBody?: string | null;
26
33
  reviewRequest?: IssueExecutionState["reviewRequest"] | null;
34
+ monitorExplicitlyUpdated?: boolean;
27
35
  };
28
36
  type TransitionResult = {
29
37
  patch: Record<string, unknown>;
30
38
  decision?: Pick<IssueExecutionDecision, "stageId" | "stageType" | "outcome" | "body">;
31
39
  workflowControlledAssignment?: boolean;
32
40
  };
41
+ export declare const REDACTED_ISSUE_MONITOR_EXTERNAL_REF = "[redacted]";
42
+ export declare function redactIssueMonitorExternalRef(value: string | null | undefined): "[redacted]" | null;
43
+ export declare function stripMonitorFromExecutionPolicy(policy: IssueExecutionPolicy | null): IssueExecutionPolicy | null;
44
+ export declare function setIssueExecutionPolicyMonitorScheduledBy(policy: IssueExecutionPolicy | null, scheduledBy: IssueMonitorScheduledBy): IssueExecutionPolicy | null;
33
45
  export declare function normalizeIssueExecutionPolicy(input: unknown): IssueExecutionPolicy | null;
34
46
  export declare function parseIssueExecutionState(input: unknown): IssueExecutionState | null;
35
47
  export declare function assigneePrincipal(input: AssigneeLike): IssueExecutionStagePrincipal | null;
48
+ export declare function buildInitialIssueMonitorFields(input: {
49
+ policy: IssueExecutionPolicy | null;
50
+ status: string;
51
+ assigneeAgentId?: string | null;
52
+ assigneeUserId?: string | null;
53
+ }): {
54
+ monitorNextCheckAt?: undefined;
55
+ monitorWakeRequestedAt?: undefined;
56
+ monitorNotes?: undefined;
57
+ monitorScheduledBy?: undefined;
58
+ executionState?: undefined;
59
+ } | {
60
+ monitorNextCheckAt: Date;
61
+ monitorWakeRequestedAt: null;
62
+ monitorNotes: string | null;
63
+ monitorScheduledBy: "board" | "assignee";
64
+ executionState: Record<string, unknown> | null;
65
+ };
66
+ export declare function buildIssueMonitorTriggeredPatch(input: {
67
+ issue: IssueLike;
68
+ policy: IssueExecutionPolicy | null;
69
+ triggeredAt: Date;
70
+ }): {
71
+ executionPolicy: Record<string, unknown> | null;
72
+ executionState: Record<string, unknown> | null;
73
+ monitorNextCheckAt: null;
74
+ monitorWakeRequestedAt: null;
75
+ monitorLastTriggeredAt: Date;
76
+ monitorAttemptCount: number;
77
+ monitorNotes: string | null;
78
+ monitorScheduledBy: "board" | "assignee" | null;
79
+ };
80
+ export declare function buildIssueMonitorClearedPatch(input: {
81
+ issue: IssueLike;
82
+ policy: IssueExecutionPolicy | null;
83
+ clearReason: IssueExecutionMonitorClearReason;
84
+ clearedAt?: Date;
85
+ }): {
86
+ executionPolicy: Record<string, unknown> | null;
87
+ executionState: Record<string, unknown> | null;
88
+ monitorNextCheckAt: null;
89
+ monitorWakeRequestedAt: null;
90
+ };
36
91
  export declare function applyIssueExecutionPolicyTransition(input: TransitionInput): TransitionResult;
37
92
  export {};
38
93
  //# sourceMappingURL=issue-execution-policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"issue-execution-policy.d.ts","sourceRoot":"","sources":["../../src/services/issue-execution-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAuB,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAI9J,KAAK,YAAY,GAAG;IAClB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,KAAK,SAAS,GAAG,YAAY,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxE,cAAc,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACvE,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;CAC7D,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;IACtF,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAMF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CA4CzF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAKnF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,4BAA4B,GAAG,IAAI,CAQ1F;AA4LD,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA0Q5F"}
1
+ {"version":3,"file":"issue-execution-policy.d.ts","sourceRoot":"","sources":["../../src/services/issue-execution-policy.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,234 @@ import { unprocessable } from "../errors.js";
4
4
  const COMPLETED_STATUS = "completed";
5
5
  const PENDING_STATUS = "pending";
6
6
  const CHANGES_REQUESTED_STATUS = "changes_requested";
7
+ const MONITOR_INVALID_MESSAGE = "Monitor can only be scheduled on issues assigned to an agent in in_progress or in_review";
8
+ const MONITOR_BOUNDS_EXHAUSTED_MESSAGE = "Monitor bounds are already exhausted";
9
+ export const REDACTED_ISSUE_MONITOR_EXTERNAL_REF = "[redacted]";
10
+ function normalizeMonitorNotes(notes) {
11
+ if (typeof notes !== "string")
12
+ return null;
13
+ const trimmed = notes.trim();
14
+ return trimmed.length > 0 ? trimmed : null;
15
+ }
16
+ function normalizeMonitorText(value) {
17
+ if (typeof value !== "string")
18
+ return null;
19
+ const trimmed = value.trim();
20
+ return trimmed.length > 0 ? trimmed : null;
21
+ }
22
+ export function redactIssueMonitorExternalRef(value) {
23
+ return normalizeMonitorText(value) ? REDACTED_ISSUE_MONITOR_EXTERNAL_REF : null;
24
+ }
25
+ function monitorMetadataFromPolicy(monitor) {
26
+ return {
27
+ kind: monitor.kind ?? null,
28
+ serviceName: normalizeMonitorText(monitor.serviceName),
29
+ externalRef: redactIssueMonitorExternalRef(monitor.externalRef),
30
+ timeoutAt: monitor.timeoutAt ?? null,
31
+ maxAttempts: monitor.maxAttempts ?? null,
32
+ recoveryPolicy: monitor.recoveryPolicy ?? null,
33
+ };
34
+ }
35
+ function monitorMetadataFromState(state) {
36
+ return {
37
+ kind: state?.kind ?? null,
38
+ serviceName: normalizeMonitorText(state?.serviceName),
39
+ externalRef: redactIssueMonitorExternalRef(state?.externalRef),
40
+ timeoutAt: state?.timeoutAt ?? null,
41
+ maxAttempts: state?.maxAttempts ?? null,
42
+ recoveryPolicy: state?.recoveryPolicy ?? null,
43
+ };
44
+ }
45
+ function blankExecutionState() {
46
+ return {
47
+ status: "idle",
48
+ currentStageId: null,
49
+ currentStageIndex: null,
50
+ currentStageType: null,
51
+ currentParticipant: null,
52
+ returnAssignee: null,
53
+ reviewRequest: null,
54
+ completedStageIds: [],
55
+ lastDecisionId: null,
56
+ lastDecisionOutcome: null,
57
+ monitor: null,
58
+ };
59
+ }
60
+ function isoString(value) {
61
+ if (!value)
62
+ return null;
63
+ if (value instanceof Date)
64
+ return value.toISOString();
65
+ return value;
66
+ }
67
+ function monitorStatesEqual(left, right) {
68
+ return JSON.stringify(left ?? null) === JSON.stringify(right ?? null);
69
+ }
70
+ function executionStateWithMonitor(stageState, monitorState) {
71
+ if (!stageState && !monitorState)
72
+ return null;
73
+ const base = stageState ? { ...stageState } : blankExecutionState();
74
+ return {
75
+ ...base,
76
+ monitor: monitorState,
77
+ };
78
+ }
79
+ function derivePersistedMonitorState(input) {
80
+ const fromState = input.state?.monitor ?? null;
81
+ const scheduledMonitor = input.policy?.monitor ?? null;
82
+ const nextCheckAt = isoString(input.issue.monitorNextCheckAt) ?? scheduledMonitor?.nextCheckAt ?? fromState?.nextCheckAt ?? null;
83
+ const lastTriggeredAt = isoString(input.issue.monitorLastTriggeredAt) ?? fromState?.lastTriggeredAt ?? null;
84
+ const attemptCount = input.issue.monitorAttemptCount ?? fromState?.attemptCount ?? 0;
85
+ const notes = scheduledMonitor?.notes ?? normalizeMonitorNotes(input.issue.monitorNotes) ?? fromState?.notes ?? null;
86
+ const scheduledByRaw = input.issue.monitorScheduledBy ?? scheduledMonitor?.scheduledBy ?? fromState?.scheduledBy ?? null;
87
+ const scheduledBy = scheduledByRaw === "assignee" || scheduledByRaw === "board" ? scheduledByRaw : null;
88
+ const metadata = scheduledMonitor ? monitorMetadataFromPolicy(scheduledMonitor) : monitorMetadataFromState(fromState);
89
+ if (nextCheckAt) {
90
+ return {
91
+ status: "scheduled",
92
+ nextCheckAt,
93
+ lastTriggeredAt,
94
+ attemptCount,
95
+ notes,
96
+ scheduledBy,
97
+ ...metadata,
98
+ clearedAt: null,
99
+ clearReason: null,
100
+ };
101
+ }
102
+ if (fromState?.status === "cleared") {
103
+ return {
104
+ ...fromState,
105
+ notes,
106
+ scheduledBy,
107
+ attemptCount,
108
+ lastTriggeredAt,
109
+ ...metadata,
110
+ };
111
+ }
112
+ if (fromState?.status === "triggered" || lastTriggeredAt || attemptCount > 0) {
113
+ return {
114
+ status: "triggered",
115
+ nextCheckAt: null,
116
+ lastTriggeredAt,
117
+ attemptCount,
118
+ notes,
119
+ scheduledBy,
120
+ ...metadata,
121
+ clearedAt: null,
122
+ clearReason: null,
123
+ };
124
+ }
125
+ return null;
126
+ }
127
+ function buildScheduledMonitorState(previous, monitor) {
128
+ return {
129
+ status: "scheduled",
130
+ nextCheckAt: monitor.nextCheckAt,
131
+ lastTriggeredAt: previous?.lastTriggeredAt ?? null,
132
+ attemptCount: previous?.attemptCount ?? 0,
133
+ notes: monitor.notes ?? null,
134
+ scheduledBy: monitor.scheduledBy,
135
+ ...monitorMetadataFromPolicy(monitor),
136
+ clearedAt: null,
137
+ clearReason: null,
138
+ };
139
+ }
140
+ function buildTriggeredMonitorState(input) {
141
+ return {
142
+ status: "triggered",
143
+ nextCheckAt: null,
144
+ lastTriggeredAt: input.triggeredAt.toISOString(),
145
+ attemptCount: (input.previous?.attemptCount ?? 0) + 1,
146
+ notes: input.previous?.notes ?? null,
147
+ scheduledBy: input.previous?.scheduledBy ?? null,
148
+ ...monitorMetadataFromState(input.previous),
149
+ clearedAt: null,
150
+ clearReason: null,
151
+ };
152
+ }
153
+ function buildClearedMonitorState(input) {
154
+ return {
155
+ status: "cleared",
156
+ nextCheckAt: null,
157
+ lastTriggeredAt: input.previous?.lastTriggeredAt ?? null,
158
+ attemptCount: input.previous?.attemptCount ?? 0,
159
+ notes: input.previous?.notes ?? null,
160
+ scheduledBy: input.previous?.scheduledBy ?? null,
161
+ ...monitorMetadataFromState(input.previous),
162
+ clearedAt: input.clearedAt.toISOString(),
163
+ clearReason: input.clearReason,
164
+ };
165
+ }
166
+ function issueAllowsMonitor(status, assigneeAgentId, assigneeUserId) {
167
+ return Boolean(assigneeAgentId) && !assigneeUserId && (status === "in_progress" || status === "in_review");
168
+ }
169
+ function monitorClearReasonForIssue(status, assigneeAgentId, assigneeUserId) {
170
+ if (status === "done")
171
+ return "done";
172
+ if (status === "cancelled")
173
+ return "cancelled";
174
+ if (!issueAllowsMonitor(status, assigneeAgentId, assigneeUserId)) {
175
+ if (assigneeUserId || !assigneeAgentId)
176
+ return "invalid_assignee";
177
+ return "invalid_status";
178
+ }
179
+ return null;
180
+ }
181
+ function parseMonitorDate(value) {
182
+ if (!value)
183
+ return null;
184
+ const date = new Date(value);
185
+ return Number.isNaN(date.getTime()) ? null : date;
186
+ }
187
+ function exhaustedMonitorClearReason(input) {
188
+ const timeoutAt = parseMonitorDate(input.monitor.timeoutAt ?? null);
189
+ if (timeoutAt && input.now.getTime() >= timeoutAt.getTime()) {
190
+ return "timeout_exceeded";
191
+ }
192
+ const maxAttempts = input.monitor.maxAttempts ?? null;
193
+ if (maxAttempts !== null && input.attemptCount >= maxAttempts) {
194
+ return "max_attempts_exhausted";
195
+ }
196
+ return null;
197
+ }
198
+ function nextAssigneeIds(input) {
199
+ const assigneeAgentId = input.stagePatch.assigneeAgentId !== undefined
200
+ ? input.stagePatch.assigneeAgentId
201
+ : input.requestedAssigneePatch.assigneeAgentId !== undefined
202
+ ? input.requestedAssigneePatch.assigneeAgentId ?? null
203
+ : input.issue.assigneeAgentId ?? null;
204
+ const assigneeUserId = input.stagePatch.assigneeUserId !== undefined
205
+ ? input.stagePatch.assigneeUserId
206
+ : input.requestedAssigneePatch.assigneeUserId !== undefined
207
+ ? input.requestedAssigneePatch.assigneeUserId ?? null
208
+ : input.issue.assigneeUserId ?? null;
209
+ return { assigneeAgentId, assigneeUserId };
210
+ }
211
+ export function stripMonitorFromExecutionPolicy(policy) {
212
+ if (!policy)
213
+ return null;
214
+ if (!policy.monitor)
215
+ return policy;
216
+ if (policy.stages.length === 0)
217
+ return null;
218
+ return {
219
+ mode: policy.mode,
220
+ commentRequired: policy.commentRequired,
221
+ stages: policy.stages,
222
+ };
223
+ }
224
+ export function setIssueExecutionPolicyMonitorScheduledBy(policy, scheduledBy) {
225
+ if (!policy?.monitor)
226
+ return policy;
227
+ return {
228
+ ...policy,
229
+ monitor: {
230
+ ...policy.monitor,
231
+ scheduledBy,
232
+ },
233
+ };
234
+ }
7
235
  export function normalizeIssueExecutionPolicy(input) {
8
236
  if (input == null)
9
237
  return null;
@@ -40,12 +268,26 @@ export function normalizeIssueExecutionPolicy(input) {
40
268
  };
41
269
  })
42
270
  .filter((stage) => stage !== null);
43
- if (stages.length === 0)
271
+ const monitor = parsed.data.monitor
272
+ ? {
273
+ nextCheckAt: parsed.data.monitor.nextCheckAt,
274
+ notes: normalizeMonitorNotes(parsed.data.monitor.notes),
275
+ scheduledBy: parsed.data.monitor.scheduledBy,
276
+ kind: parsed.data.monitor.kind ?? null,
277
+ serviceName: normalizeMonitorText(parsed.data.monitor.serviceName),
278
+ externalRef: redactIssueMonitorExternalRef(parsed.data.monitor.externalRef),
279
+ timeoutAt: parsed.data.monitor.timeoutAt ?? null,
280
+ maxAttempts: parsed.data.monitor.maxAttempts ?? null,
281
+ recoveryPolicy: parsed.data.monitor.recoveryPolicy ?? null,
282
+ }
283
+ : null;
284
+ if (stages.length === 0 && !monitor)
44
285
  return null;
45
286
  return {
46
287
  mode: parsed.data.mode ?? "normal",
47
288
  commentRequired: true,
48
289
  stages,
290
+ ...(monitor ? { monitor } : {}),
49
291
  };
50
292
  }
51
293
  export function parseIssueExecutionState(input) {
@@ -126,6 +368,7 @@ function buildCompletedState(previous, currentStage) {
126
368
  completedStageIds,
127
369
  lastDecisionId: previous?.lastDecisionId ?? null,
128
370
  lastDecisionOutcome: "approved",
371
+ monitor: previous?.monitor ?? null,
129
372
  };
130
373
  }
131
374
  function buildStateWithCompletedStages(input) {
@@ -140,6 +383,7 @@ function buildStateWithCompletedStages(input) {
140
383
  completedStageIds: input.completedStageIds,
141
384
  lastDecisionId: input.previous?.lastDecisionId ?? null,
142
385
  lastDecisionOutcome: input.previous?.lastDecisionOutcome ?? null,
386
+ monitor: input.previous?.monitor ?? null,
143
387
  };
144
388
  }
145
389
  function buildSkippedStageCompletedState(input) {
@@ -154,6 +398,7 @@ function buildSkippedStageCompletedState(input) {
154
398
  completedStageIds: input.completedStageIds,
155
399
  lastDecisionId: input.previous?.lastDecisionId ?? null,
156
400
  lastDecisionOutcome: input.previous?.lastDecisionOutcome ?? null,
401
+ monitor: input.previous?.monitor ?? null,
157
402
  };
158
403
  }
159
404
  function buildPendingState(input) {
@@ -168,6 +413,7 @@ function buildPendingState(input) {
168
413
  completedStageIds: input.previous?.completedStageIds ?? [],
169
414
  lastDecisionId: input.previous?.lastDecisionId ?? null,
170
415
  lastDecisionOutcome: input.previous?.lastDecisionOutcome ?? null,
416
+ monitor: input.previous?.monitor ?? null,
171
417
  };
172
418
  }
173
419
  function buildChangesRequestedState(previous, currentStage) {
@@ -206,7 +452,7 @@ function canAutoSkipPendingStage(input) {
206
452
  return input.stage.participants.length > 0 &&
207
453
  input.stage.participants.every((participant) => principalsEqual(participant, input.returnAssignee));
208
454
  }
209
- export function applyIssueExecutionPolicyTransition(input) {
455
+ function applyIssueExecutionStageTransition(input) {
210
456
  const patch = {};
211
457
  const existingState = parseIssueExecutionState(input.issue.executionState);
212
458
  const currentAssignee = assigneePrincipal(input.issue);
@@ -437,4 +683,156 @@ export function applyIssueExecutionPolicyTransition(input) {
437
683
  workflowControlledAssignment: true,
438
684
  };
439
685
  }
686
+ function applyMonitorTransition(input, stagePatch) {
687
+ const patch = {};
688
+ const previousPolicy = input.previousPolicy ?? normalizeIssueExecutionPolicy(input.issue.executionPolicy ?? null);
689
+ const existingState = parseIssueExecutionState(input.issue.executionState);
690
+ const currentMonitorState = derivePersistedMonitorState({
691
+ issue: input.issue,
692
+ state: existingState,
693
+ policy: previousPolicy,
694
+ });
695
+ const nextStatus = typeof stagePatch.status === "string"
696
+ ? stagePatch.status
697
+ : input.requestedStatus ?? input.issue.status;
698
+ const { assigneeAgentId, assigneeUserId } = nextAssigneeIds({
699
+ issue: input.issue,
700
+ requestedAssigneePatch: input.requestedAssigneePatch,
701
+ stagePatch,
702
+ });
703
+ const stageState = stagePatch.executionState !== undefined
704
+ ? parseIssueExecutionState(stagePatch.executionState)
705
+ : existingState;
706
+ const invalidReason = input.policy?.monitor
707
+ ? monitorClearReasonForIssue(nextStatus, assigneeAgentId, assigneeUserId)
708
+ : null;
709
+ let targetMonitorState = currentMonitorState;
710
+ if (input.policy?.monitor) {
711
+ if (invalidReason) {
712
+ if (input.monitorExplicitlyUpdated) {
713
+ throw unprocessable(MONITOR_INVALID_MESSAGE);
714
+ }
715
+ patch.executionPolicy = stripMonitorFromExecutionPolicy(input.policy);
716
+ patch.monitorNextCheckAt = null;
717
+ patch.monitorWakeRequestedAt = null;
718
+ targetMonitorState = buildClearedMonitorState({
719
+ previous: currentMonitorState,
720
+ clearReason: invalidReason,
721
+ clearedAt: new Date(),
722
+ });
723
+ }
724
+ else {
725
+ const exhaustedReason = exhaustedMonitorClearReason({
726
+ monitor: input.policy.monitor,
727
+ attemptCount: currentMonitorState?.attemptCount ?? 0,
728
+ now: new Date(),
729
+ });
730
+ if (exhaustedReason) {
731
+ if (input.monitorExplicitlyUpdated) {
732
+ throw unprocessable(MONITOR_BOUNDS_EXHAUSTED_MESSAGE, { clearReason: exhaustedReason });
733
+ }
734
+ patch.executionPolicy = stripMonitorFromExecutionPolicy(input.policy);
735
+ patch.monitorNextCheckAt = null;
736
+ patch.monitorWakeRequestedAt = null;
737
+ targetMonitorState = buildClearedMonitorState({
738
+ previous: currentMonitorState,
739
+ clearReason: exhaustedReason,
740
+ clearedAt: new Date(),
741
+ });
742
+ }
743
+ else {
744
+ patch.monitorNextCheckAt = new Date(input.policy.monitor.nextCheckAt);
745
+ patch.monitorWakeRequestedAt = null;
746
+ patch.monitorNotes = input.policy.monitor.notes ?? null;
747
+ patch.monitorScheduledBy = input.policy.monitor.scheduledBy;
748
+ targetMonitorState = buildScheduledMonitorState(currentMonitorState, input.policy.monitor);
749
+ }
750
+ }
751
+ }
752
+ else if (previousPolicy?.monitor) {
753
+ patch.monitorNextCheckAt = null;
754
+ patch.monitorWakeRequestedAt = null;
755
+ targetMonitorState = buildClearedMonitorState({
756
+ previous: currentMonitorState,
757
+ clearReason: input.monitorExplicitlyUpdated
758
+ ? "manual"
759
+ : monitorClearReasonForIssue(nextStatus, assigneeAgentId, assigneeUserId) ?? "manual",
760
+ clearedAt: new Date(),
761
+ });
762
+ }
763
+ if (stagePatch.executionState !== undefined || !monitorStatesEqual(currentMonitorState, targetMonitorState)) {
764
+ patch.executionState = executionStateWithMonitor(stageState, targetMonitorState);
765
+ }
766
+ return patch;
767
+ }
768
+ export function buildInitialIssueMonitorFields(input) {
769
+ if (!input.policy?.monitor)
770
+ return {};
771
+ if (!issueAllowsMonitor(input.status, input.assigneeAgentId ?? null, input.assigneeUserId ?? null)) {
772
+ throw unprocessable(MONITOR_INVALID_MESSAGE);
773
+ }
774
+ const exhaustedReason = exhaustedMonitorClearReason({
775
+ monitor: input.policy.monitor,
776
+ attemptCount: 0,
777
+ now: new Date(),
778
+ });
779
+ if (exhaustedReason) {
780
+ throw unprocessable(MONITOR_BOUNDS_EXHAUSTED_MESSAGE, { clearReason: exhaustedReason });
781
+ }
782
+ const monitorState = buildScheduledMonitorState(null, input.policy.monitor);
783
+ return {
784
+ monitorNextCheckAt: new Date(input.policy.monitor.nextCheckAt),
785
+ monitorWakeRequestedAt: null,
786
+ monitorNotes: input.policy.monitor.notes ?? null,
787
+ monitorScheduledBy: input.policy.monitor.scheduledBy,
788
+ executionState: executionStateWithMonitor(null, monitorState),
789
+ };
790
+ }
791
+ export function buildIssueMonitorTriggeredPatch(input) {
792
+ const existingState = parseIssueExecutionState(input.issue.executionState);
793
+ const currentMonitorState = derivePersistedMonitorState({
794
+ issue: input.issue,
795
+ state: existingState,
796
+ policy: input.policy,
797
+ });
798
+ const nextMonitorState = buildTriggeredMonitorState({
799
+ previous: currentMonitorState,
800
+ triggeredAt: input.triggeredAt,
801
+ });
802
+ return {
803
+ executionPolicy: stripMonitorFromExecutionPolicy(input.policy),
804
+ executionState: executionStateWithMonitor(existingState, nextMonitorState),
805
+ monitorNextCheckAt: null,
806
+ monitorWakeRequestedAt: null,
807
+ monitorLastTriggeredAt: input.triggeredAt,
808
+ monitorAttemptCount: nextMonitorState.attemptCount,
809
+ monitorNotes: nextMonitorState.notes,
810
+ monitorScheduledBy: nextMonitorState.scheduledBy,
811
+ };
812
+ }
813
+ export function buildIssueMonitorClearedPatch(input) {
814
+ const existingState = parseIssueExecutionState(input.issue.executionState);
815
+ const currentMonitorState = derivePersistedMonitorState({
816
+ issue: input.issue,
817
+ state: existingState,
818
+ policy: input.policy,
819
+ });
820
+ const nextMonitorState = buildClearedMonitorState({
821
+ previous: currentMonitorState,
822
+ clearReason: input.clearReason,
823
+ clearedAt: input.clearedAt ?? new Date(),
824
+ });
825
+ return {
826
+ executionPolicy: stripMonitorFromExecutionPolicy(input.policy),
827
+ executionState: executionStateWithMonitor(existingState, nextMonitorState),
828
+ monitorNextCheckAt: null,
829
+ monitorWakeRequestedAt: null,
830
+ };
831
+ }
832
+ export function applyIssueExecutionPolicyTransition(input) {
833
+ const stageResult = applyIssueExecutionStageTransition(input);
834
+ const monitorPatch = applyMonitorTransition(input, stageResult.patch);
835
+ Object.assign(stageResult.patch, monitorPatch);
836
+ return stageResult;
837
+ }
440
838
  //# sourceMappingURL=issue-execution-policy.js.map