factory-factory 0.4.2 → 0.4.4

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 (386) hide show
  1. package/dist/client/assets/{abnfDiagram-VRR7QNED-Bz06FkfB.js → abnfDiagram-VRR7QNED-CtUj9J56.js} +1 -1
  2. package/dist/client/assets/{arc--1iscGgN.js → arc-2QeawLbF.js} +1 -1
  3. package/dist/client/assets/{architectureDiagram-ZJ3FMSHR-Ds-52hDI.js → architectureDiagram-ZJ3FMSHR-Cz-V9xRh.js} +1 -1
  4. package/dist/client/assets/{blockDiagram-677ZJIJ3-DZwPPZmp.js → blockDiagram-677ZJIJ3-BN6MDejN.js} +1 -1
  5. package/dist/client/assets/{c4Diagram-LMCZKHZV-RQch21fC.js → c4Diagram-LMCZKHZV-ZxcmUt9u.js} +1 -1
  6. package/dist/client/assets/channel-DVMObwOq.js +1 -0
  7. package/dist/client/assets/{chunk-2Q5K7J3B-Df6Q19iI.js → chunk-2Q5K7J3B-CyvdNBvs.js} +1 -1
  8. package/dist/client/assets/{chunk-32BRIVSS-DlbaZtVC.js → chunk-32BRIVSS-BXA35oY0.js} +1 -1
  9. package/dist/client/assets/{chunk-5VM5RSS4-KgkMhS6k.js → chunk-5VM5RSS4-6lY9D3Us.js} +1 -1
  10. package/dist/client/assets/{chunk-EX3LRPZG-DAfTWCem.js → chunk-EX3LRPZG-BRYEhwoK.js} +1 -1
  11. package/dist/client/assets/{chunk-JWPE2WC7-D6Y5C5Yz.js → chunk-JWPE2WC7-DBeDDTf3.js} +1 -1
  12. package/dist/client/assets/{chunk-MOJQB5TN-B_P4pqPC.js → chunk-MOJQB5TN-MIX8YUEz.js} +1 -1
  13. package/dist/client/assets/{chunk-RYQCIY6F-CzFboHFv.js → chunk-RYQCIY6F-CT_f1sbt.js} +1 -1
  14. package/dist/client/assets/{chunk-V7JOEXUC-8yT3lW_D.js → chunk-V7JOEXUC-DpMacC1A.js} +1 -1
  15. package/dist/client/assets/{chunk-VR4S4FIN-B_QG1di-.js → chunk-VR4S4FIN-Bd6MGh78.js} +1 -1
  16. package/dist/client/assets/{chunk-XXDRQBXY-CzL4_omu.js → chunk-XXDRQBXY-BYg-oILv.js} +1 -1
  17. package/dist/client/assets/classDiagram-OUVF2IWQ-wHGXcbfd.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-EOCWNBFH-wHGXcbfd.js +1 -0
  19. package/dist/client/assets/{cose-bilkent-JH36ORCC-DmZLPx5-.js → cose-bilkent-JH36ORCC-BGhjYi6z.js} +1 -1
  20. package/dist/client/assets/{cynefin-VYW2F7L2-DUejQU5F.js → cynefin-VYW2F7L2-BouObN4T.js} +1 -1
  21. package/dist/client/assets/{cynefinDiagram-TSTJHNR4-BjallChk.js → cynefinDiagram-TSTJHNR4-DrbscNyk.js} +1 -1
  22. package/dist/client/assets/{dagre-VKFMJZFB-COdOy8Kp.js → dagre-VKFMJZFB-CpHBhtab.js} +1 -1
  23. package/dist/client/assets/{diagram-FQU43EPY-C8Xk7Fyh.js → diagram-FQU43EPY-C_pXymmj.js} +1 -1
  24. package/dist/client/assets/{diagram-G47NLZAW-B_qqKBqq.js → diagram-G47NLZAW-DNPz9Qrh.js} +1 -1
  25. package/dist/client/assets/{diagram-NH7WQ7WH-DS1-6fzl.js → diagram-NH7WQ7WH-DWHcerSm.js} +1 -1
  26. package/dist/client/assets/{diagram-OA4YK3LP-enaDU5V4.js → diagram-OA4YK3LP-C6Jnb8nm.js} +1 -1
  27. package/dist/client/assets/{diagram-WEI45ONY-Cx6LFRuh.js → diagram-WEI45ONY-DF667tXW.js} +1 -1
  28. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-DVGMcsj6.js → ebnfDiagram-CCIWWBDH-_Wt4C-Lm.js} +1 -1
  29. package/dist/client/assets/{erDiagram-Q63AITRT-DCsDfIB_.js → erDiagram-Q63AITRT-D9F9IIZ7.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-23GEKE2U-C5QCjsF8.js → flowDiagram-23GEKE2U-BzTUtnLY.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-NO4QXBWP-CLvtSsZ-.js → ganttDiagram-NO4QXBWP-lmFnKYE5.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-BS6vNDTo.js → gitGraphDiagram-IHSO6WYX-DiIQa_m6.js} +1 -1
  33. package/dist/client/assets/{index-0-xpZu6O.js → index-CpvT2M5m.js} +168 -168
  34. package/dist/client/assets/index-CwfNzqG5.css +1 -0
  35. package/dist/client/assets/{infoDiagram-FWYZ7A6U-CIuYQAoE.js → infoDiagram-FWYZ7A6U-BXtmiN5g.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-DeVUVV8X.js → ishikawaDiagram-FXEZZL3T-Ce8fzasD.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-5HDEW3XC-BsmmwqMS.js → journeyDiagram-5HDEW3XC-CAhJE-OU.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-HUTT4EX6-D-mDPzR0.js → kanban-definition-HUTT4EX6-B8br5xew.js} +1 -1
  39. package/dist/client/assets/{linear-BSdMIO3_.js → linear-BPVVEns_.js} +1 -1
  40. package/dist/client/assets/{mindmap-definition-LN4V7U3C-DOuSISM2.js → mindmap-definition-LN4V7U3C-lX6h9H-N.js} +1 -1
  41. package/dist/client/assets/{mobile-baseline-C-1Tc5b_.js → mobile-baseline-C45NSkzw.js} +1 -1
  42. package/dist/client/assets/{pegDiagram-2B236MQR-C8CMsmVK.js → pegDiagram-2B236MQR-CiFWwnk4.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-ENE6RG2P-B1UfUhQO.js → pieDiagram-ENE6RG2P-CvkwWtzQ.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-DujmyYtF.js → quadrantDiagram-ABIIQ3AL-B40anMyK.js} +1 -1
  45. package/dist/client/assets/{railroadDiagram-RFXS5EU6-DaF-IoiS.js → railroadDiagram-RFXS5EU6-WVYsdkDC.js} +1 -1
  46. package/dist/client/assets/{requirementDiagram-TGXJPOKE-dfpBVIPb.js → requirementDiagram-TGXJPOKE-DBTIsXpA.js} +1 -1
  47. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-BYCvwHlS.js → sankeyDiagram-HTMAVEWB-Dx8y47pZ.js} +1 -1
  48. package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-DOdQoxUf.js → sequenceDiagram-DBY2YBRQ-C6ZZMZJm.js} +1 -1
  49. package/dist/client/assets/{sizeCapture-X5ZJPWSS-9sUXw3Q8.js → sizeCapture-X5ZJPWSS-DLy8loNR.js} +1 -1
  50. package/dist/client/assets/{stateDiagram-2N3HPSRC-QZszWUA_.js → stateDiagram-2N3HPSRC-RoTcqZkX.js} +1 -1
  51. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-CGxDgHho.js +1 -0
  52. package/dist/client/assets/{swimlanes-5IMT3BWC-CtEVTRNN.js → swimlanes-5IMT3BWC-CFmoSHiT.js} +2 -2
  53. package/dist/client/assets/swimlanesDiagram-G3AALYLV-1u_1g3u4.js +8 -0
  54. package/dist/client/assets/{terminal-instance-nU4PXHMm.js → terminal-instance-Br0jXsXE.js} +1 -1
  55. package/dist/client/assets/{timeline-definition-FHXFAJF6-0fOfnsxU.js → timeline-definition-FHXFAJF6-Bh5XA09y.js} +1 -1
  56. package/dist/client/assets/{vennDiagram-L72KCM5P-5eWMXdkg.js → vennDiagram-L72KCM5P-BC754zGO.js} +1 -1
  57. package/dist/client/assets/{wardleyDiagram-EHGQE667-BwNCxx2w.js → wardleyDiagram-EHGQE667-xJdUzWCg.js} +1 -1
  58. package/dist/client/assets/{xychartDiagram-FW5EYKEG-VIc8vlw6.js → xychartDiagram-FW5EYKEG-wxQH1S7i.js} +1 -1
  59. package/dist/client/index.html +2 -2
  60. package/dist/client/logo.png +0 -0
  61. package/dist/client/logo.sips.png +0 -0
  62. package/dist/prisma/generated/internal/class.js +4 -4
  63. package/dist/prisma/generated/internal/class.js.map +1 -1
  64. package/dist/prisma/generated/internal/prismaNamespace.d.ts +1 -0
  65. package/dist/prisma/generated/internal/prismaNamespace.d.ts.map +1 -1
  66. package/dist/prisma/generated/internal/prismaNamespace.js +2 -1
  67. package/dist/prisma/generated/internal/prismaNamespace.js.map +1 -1
  68. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts +1 -0
  69. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts.map +1 -1
  70. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js +2 -1
  71. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  72. package/dist/prisma/generated/models/WorkspaceRatchet.d.ts +33 -1
  73. package/dist/prisma/generated/models/WorkspaceRatchet.d.ts.map +1 -1
  74. package/dist/scripts/check-fk-indexes.d.ts +2 -0
  75. package/dist/scripts/check-fk-indexes.d.ts.map +1 -0
  76. package/dist/scripts/check-fk-indexes.js +143 -0
  77. package/dist/scripts/check-fk-indexes.js.map +1 -0
  78. package/dist/src/backend/lib/application-error.d.ts +6 -1
  79. package/dist/src/backend/lib/application-error.d.ts.map +1 -1
  80. package/dist/src/backend/lib/application-error.js +2 -0
  81. package/dist/src/backend/lib/application-error.js.map +1 -1
  82. package/dist/src/backend/lib/application-error.test.js +10 -0
  83. package/dist/src/backend/lib/application-error.test.js.map +1 -1
  84. package/dist/src/backend/lib/workspace-derived-state.d.ts +7 -16
  85. package/dist/src/backend/lib/workspace-derived-state.d.ts.map +1 -1
  86. package/dist/src/backend/lib/workspace-derived-state.js +21 -24
  87. package/dist/src/backend/lib/workspace-derived-state.js.map +1 -1
  88. package/dist/src/backend/lib/workspace-derived-state.test.js +37 -50
  89. package/dist/src/backend/lib/workspace-derived-state.test.js.map +1 -1
  90. package/dist/src/backend/orchestration/data-backup.service.test.js +1 -0
  91. package/dist/src/backend/orchestration/data-backup.service.test.js.map +1 -1
  92. package/dist/src/backend/orchestration/domain-bridges.orchestrator.d.ts.map +1 -1
  93. package/dist/src/backend/orchestration/domain-bridges.orchestrator.js +4 -3
  94. package/dist/src/backend/orchestration/domain-bridges.orchestrator.js.map +1 -1
  95. package/dist/src/backend/orchestration/event-coalescer.integration.test.js +7 -16
  96. package/dist/src/backend/orchestration/event-coalescer.integration.test.js.map +1 -1
  97. package/dist/src/backend/orchestration/event-collector.orchestrator.d.ts +2 -1
  98. package/dist/src/backend/orchestration/event-collector.orchestrator.d.ts.map +1 -1
  99. package/dist/src/backend/orchestration/event-collector.orchestrator.js +8 -1
  100. package/dist/src/backend/orchestration/event-collector.orchestrator.js.map +1 -1
  101. package/dist/src/backend/orchestration/event-collector.orchestrator.test.js +39 -2
  102. package/dist/src/backend/orchestration/event-collector.orchestrator.test.js.map +1 -1
  103. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.d.ts.map +1 -1
  104. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.js +4 -0
  105. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.js.map +1 -1
  106. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.test.js +7 -2
  107. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.test.js.map +1 -1
  108. package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts +4 -4
  109. package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts.map +1 -1
  110. package/dist/src/backend/orchestration/workspace-archive.orchestrator.js +1 -1
  111. package/dist/src/backend/orchestration/workspace-archive.orchestrator.js.map +1 -1
  112. package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js +5 -7
  113. package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js.map +1 -1
  114. package/dist/src/backend/routers/websocket/chat.handler.js +1 -1
  115. package/dist/src/backend/routers/websocket/chat.handler.js.map +1 -1
  116. package/dist/src/backend/routers/websocket/chat.handler.test.js +6 -2
  117. package/dist/src/backend/routers/websocket/chat.handler.test.js.map +1 -1
  118. package/dist/src/backend/routers/websocket/websocket.integration.test.js +0 -1
  119. package/dist/src/backend/routers/websocket/websocket.integration.test.js.map +1 -1
  120. package/dist/src/backend/server.d.ts.map +1 -1
  121. package/dist/src/backend/server.js +2 -1
  122. package/dist/src/backend/server.js.map +1 -1
  123. package/dist/src/backend/server.upgrade.test.js +20 -0
  124. package/dist/src/backend/server.upgrade.test.js.map +1 -1
  125. package/dist/src/backend/services/github/service/bridges.d.ts +1 -0
  126. package/dist/src/backend/services/github/service/bridges.d.ts.map +1 -1
  127. package/dist/src/backend/services/github/service/pr-snapshot.service.d.ts +1 -0
  128. package/dist/src/backend/services/github/service/pr-snapshot.service.d.ts.map +1 -1
  129. package/dist/src/backend/services/github/service/pr-snapshot.service.js +1 -0
  130. package/dist/src/backend/services/github/service/pr-snapshot.service.js.map +1 -1
  131. package/dist/src/backend/services/github/service/pr-snapshot.service.test.js +11 -0
  132. package/dist/src/backend/services/github/service/pr-snapshot.service.test.js.map +1 -1
  133. package/dist/src/backend/services/linear/service/linear-client.service.d.ts +1 -1
  134. package/dist/src/backend/services/linear/service/linear-client.service.d.ts.map +1 -1
  135. package/dist/src/backend/services/linear/service/linear-client.service.js +4 -4
  136. package/dist/src/backend/services/linear/service/linear-client.service.js.map +1 -1
  137. package/dist/src/backend/services/linear/service/linear-client.service.test.js +10 -10
  138. package/dist/src/backend/services/linear/service/linear-client.service.test.js.map +1 -1
  139. package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.d.ts.map +1 -1
  140. package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.js +8 -5
  141. package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.js.map +1 -1
  142. package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.test.js +82 -0
  143. package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.test.js.map +1 -1
  144. package/dist/src/backend/services/ratchet/service/bridges.d.ts +2 -0
  145. package/dist/src/backend/services/ratchet/service/bridges.d.ts.map +1 -1
  146. package/dist/src/backend/services/ratchet/service/fixer-session.service.test.js +1 -0
  147. package/dist/src/backend/services/ratchet/service/fixer-session.service.test.js.map +1 -1
  148. package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.d.ts.map +1 -1
  149. package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.js +10 -2
  150. package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.js.map +1 -1
  151. package/dist/src/backend/services/ratchet/service/ratchet.service.d.ts +2 -0
  152. package/dist/src/backend/services/ratchet/service/ratchet.service.d.ts.map +1 -1
  153. package/dist/src/backend/services/ratchet/service/ratchet.service.js +30 -0
  154. package/dist/src/backend/services/ratchet/service/ratchet.service.js.map +1 -1
  155. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js +284 -5
  156. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js.map +1 -1
  157. package/dist/src/backend/services/run-script/service/run-script.service.d.ts +1 -0
  158. package/dist/src/backend/services/run-script/service/run-script.service.d.ts.map +1 -1
  159. package/dist/src/backend/services/run-script/service/run-script.service.js +26 -17
  160. package/dist/src/backend/services/run-script/service/run-script.service.js.map +1 -1
  161. package/dist/src/backend/services/run-script/service/run-script.service.test.js +23 -0
  162. package/dist/src/backend/services/run-script/service/run-script.service.test.js.map +1 -1
  163. package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.d.ts.map +1 -1
  164. package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.js +5 -0
  165. package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.js.map +1 -1
  166. package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.test.js +39 -6
  167. package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.test.js.map +1 -1
  168. package/dist/src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.d.ts +0 -3
  169. package/dist/src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.d.ts.map +1 -1
  170. package/dist/src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.js +66 -26
  171. package/dist/src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.js.map +1 -1
  172. package/dist/src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.test.js +194 -6
  173. package/dist/src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.test.js.map +1 -1
  174. package/dist/src/backend/services/session/service/chat/chat-message-handlers/image-format-validation.d.ts +7 -0
  175. package/dist/src/backend/services/session/service/chat/chat-message-handlers/image-format-validation.d.ts.map +1 -0
  176. package/dist/src/backend/services/session/service/chat/chat-message-handlers/image-format-validation.js +466 -0
  177. package/dist/src/backend/services/session/service/chat/chat-message-handlers/image-format-validation.js.map +1 -0
  178. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js +6 -4
  179. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js.map +1 -1
  180. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js +52 -15
  181. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js.map +1 -1
  182. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts.map +1 -1
  183. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js +3 -1
  184. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js.map +1 -1
  185. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js +104 -1
  186. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js.map +1 -1
  187. package/dist/src/backend/services/session/service/session-domain.service.d.ts +5 -1
  188. package/dist/src/backend/services/session/service/session-domain.service.d.ts.map +1 -1
  189. package/dist/src/backend/services/session/service/session-domain.service.js +50 -31
  190. package/dist/src/backend/services/session/service/session-domain.service.js.map +1 -1
  191. package/dist/src/backend/services/session/service/session-domain.service.test.js +108 -0
  192. package/dist/src/backend/services/session/service/session-domain.service.test.js.map +1 -1
  193. package/dist/src/backend/services/session/service/store/session-replay-builder.d.ts.map +1 -1
  194. package/dist/src/backend/services/session/service/store/session-replay-builder.js +2 -1
  195. package/dist/src/backend/services/session/service/store/session-replay-builder.js.map +1 -1
  196. package/dist/src/backend/services/session/service/store/session-store-registry.d.ts +8 -1
  197. package/dist/src/backend/services/session/service/store/session-store-registry.d.ts.map +1 -1
  198. package/dist/src/backend/services/session/service/store/session-store-registry.js +58 -1
  199. package/dist/src/backend/services/session/service/store/session-store-registry.js.map +1 -1
  200. package/dist/src/backend/services/session/service/store/session-store-registry.test.js +120 -0
  201. package/dist/src/backend/services/session/service/store/session-store-registry.test.js.map +1 -1
  202. package/dist/src/backend/services/session/service/store/session-store.types.d.ts +5 -1
  203. package/dist/src/backend/services/session/service/store/session-store.types.d.ts.map +1 -1
  204. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.d.ts +8 -2
  205. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.d.ts.map +1 -1
  206. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.js +17 -10
  207. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.js.map +1 -1
  208. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.test.js +26 -10
  209. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.test.js.map +1 -1
  210. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.d.ts +4 -1
  211. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.d.ts.map +1 -1
  212. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.js +20 -2
  213. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.js.map +1 -1
  214. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.test.js +35 -1
  215. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.test.js.map +1 -1
  216. package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts +10 -3
  217. package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts.map +1 -1
  218. package/dist/src/backend/services/workspace/resources/workspace.accessor.js +16 -6
  219. package/dist/src/backend/services/workspace/resources/workspace.accessor.js.map +1 -1
  220. package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js +33 -2
  221. package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js.map +1 -1
  222. package/dist/src/backend/services/workspace/service/index.d.ts +1 -2
  223. package/dist/src/backend/services/workspace/service/index.d.ts.map +1 -1
  224. package/dist/src/backend/services/workspace/service/index.js +1 -2
  225. package/dist/src/backend/services/workspace/service/index.js.map +1 -1
  226. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js +1 -0
  227. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js.map +1 -1
  228. package/dist/src/backend/services/workspace/service/lifecycle/data.service.d.ts +3 -1
  229. package/dist/src/backend/services/workspace/service/lifecycle/data.service.d.ts.map +1 -1
  230. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.d.ts +10 -2
  231. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.d.ts.map +1 -1
  232. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.js +19 -5
  233. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.js.map +1 -1
  234. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.test.js +1 -0
  235. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.test.js.map +1 -1
  236. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.d.ts +1 -0
  237. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.d.ts.map +1 -1
  238. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.js +3 -0
  239. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.js.map +1 -1
  240. package/dist/src/backend/services/workspace/service/lifecycle/workspace-relationships.service.d.ts +1 -0
  241. package/dist/src/backend/services/workspace/service/lifecycle/workspace-relationships.service.d.ts.map +1 -1
  242. package/dist/src/backend/services/workspace/service/lifecycle/workspace-state-capabilities.test.js +38 -3
  243. package/dist/src/backend/services/workspace/service/lifecycle/workspace-state-capabilities.test.js.map +1 -1
  244. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.d.ts +1 -0
  245. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.d.ts.map +1 -1
  246. package/dist/src/backend/services/workspace/service/query/workspace-query.service.d.ts +2 -0
  247. package/dist/src/backend/services/workspace/service/query/workspace-query.service.d.ts.map +1 -1
  248. package/dist/src/backend/services/workspace/service/query/workspace-query.service.js +34 -20
  249. package/dist/src/backend/services/workspace/service/query/workspace-query.service.js.map +1 -1
  250. package/dist/src/backend/services/workspace/service/query/workspace-query.service.test.js +102 -11
  251. package/dist/src/backend/services/workspace/service/query/workspace-query.service.test.js.map +1 -1
  252. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.d.ts +5 -12
  253. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.d.ts.map +1 -1
  254. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.js +23 -9
  255. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.js.map +1 -1
  256. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.test.js +28 -18
  257. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.test.js.map +1 -1
  258. package/dist/src/backend/services/workspace/service/state/flow-state.d.ts.map +1 -1
  259. package/dist/src/backend/services/workspace/service/state/flow-state.js +1 -9
  260. package/dist/src/backend/services/workspace/service/state/flow-state.js.map +1 -1
  261. package/dist/src/backend/services/workspace/service/state/flow-state.test.js +10 -27
  262. package/dist/src/backend/services/workspace/service/state/flow-state.test.js.map +1 -1
  263. package/dist/src/backend/services/workspace/service/workspace-domain-exports.test.js +1 -4
  264. package/dist/src/backend/services/workspace/service/workspace-domain-exports.test.js.map +1 -1
  265. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.d.ts +8 -1
  266. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.d.ts.map +1 -1
  267. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.js +45 -8
  268. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.js.map +1 -1
  269. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.test.js +108 -13
  270. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.test.js.map +1 -1
  271. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.d.ts +3 -3
  272. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.d.ts.map +1 -1
  273. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js +8 -1
  274. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js.map +1 -1
  275. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js +29 -12
  276. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js.map +1 -1
  277. package/dist/src/backend/services/workspace-git-state.service.d.ts +1 -0
  278. package/dist/src/backend/services/workspace-git-state.service.d.ts.map +1 -1
  279. package/dist/src/backend/services/workspace-git-state.service.js +14 -0
  280. package/dist/src/backend/services/workspace-git-state.service.js.map +1 -1
  281. package/dist/src/backend/services/workspace-git-state.service.test.js +37 -0
  282. package/dist/src/backend/services/workspace-git-state.service.test.js.map +1 -1
  283. package/dist/src/backend/testing/check-fk-indexes-script.test.d.ts +2 -0
  284. package/dist/src/backend/testing/check-fk-indexes-script.test.d.ts.map +1 -0
  285. package/dist/src/backend/testing/check-fk-indexes-script.test.js +46 -0
  286. package/dist/src/backend/testing/check-fk-indexes-script.test.js.map +1 -0
  287. package/dist/src/backend/trpc/admin.trpc.d.ts +11 -1
  288. package/dist/src/backend/trpc/admin.trpc.d.ts.map +1 -1
  289. package/dist/src/backend/trpc/auto-iteration.trpc.d.ts +11 -1
  290. package/dist/src/backend/trpc/auto-iteration.trpc.d.ts.map +1 -1
  291. package/dist/src/backend/trpc/closed-sessions.trpc.d.ts +11 -1
  292. package/dist/src/backend/trpc/closed-sessions.trpc.d.ts.map +1 -1
  293. package/dist/src/backend/trpc/context-dependencies.test.js +0 -1
  294. package/dist/src/backend/trpc/context-dependencies.test.js.map +1 -1
  295. package/dist/src/backend/trpc/decision-log.trpc.d.ts +11 -1
  296. package/dist/src/backend/trpc/decision-log.trpc.d.ts.map +1 -1
  297. package/dist/src/backend/trpc/github.trpc.d.ts +11 -1
  298. package/dist/src/backend/trpc/github.trpc.d.ts.map +1 -1
  299. package/dist/src/backend/trpc/index.d.ts +151 -16
  300. package/dist/src/backend/trpc/index.d.ts.map +1 -1
  301. package/dist/src/backend/trpc/linear.trpc.d.ts +11 -1
  302. package/dist/src/backend/trpc/linear.trpc.d.ts.map +1 -1
  303. package/dist/src/backend/trpc/periodic-task.trpc.d.ts +11 -1
  304. package/dist/src/backend/trpc/periodic-task.trpc.d.ts.map +1 -1
  305. package/dist/src/backend/trpc/pr-review.trpc.d.ts +11 -1
  306. package/dist/src/backend/trpc/pr-review.trpc.d.ts.map +1 -1
  307. package/dist/src/backend/trpc/project.trpc.d.ts +11 -1
  308. package/dist/src/backend/trpc/project.trpc.d.ts.map +1 -1
  309. package/dist/src/backend/trpc/session.trpc.d.ts +11 -1
  310. package/dist/src/backend/trpc/session.trpc.d.ts.map +1 -1
  311. package/dist/src/backend/trpc/trpc.d.ts +11 -1
  312. package/dist/src/backend/trpc/trpc.d.ts.map +1 -1
  313. package/dist/src/backend/trpc/trpc.js +10 -0
  314. package/dist/src/backend/trpc/trpc.js.map +1 -1
  315. package/dist/src/backend/trpc/user-settings.trpc.d.ts +11 -1
  316. package/dist/src/backend/trpc/user-settings.trpc.d.ts.map +1 -1
  317. package/dist/src/backend/trpc/workspace/children.router.test.js +7 -1
  318. package/dist/src/backend/trpc/workspace/children.router.test.js.map +1 -1
  319. package/dist/src/backend/trpc/workspace/children.trpc.d.ts +12 -2
  320. package/dist/src/backend/trpc/workspace/children.trpc.d.ts.map +1 -1
  321. package/dist/src/backend/trpc/workspace/children.trpc.js +11 -8
  322. package/dist/src/backend/trpc/workspace/children.trpc.js.map +1 -1
  323. package/dist/src/backend/trpc/workspace/files.trpc.d.ts +11 -1
  324. package/dist/src/backend/trpc/workspace/files.trpc.d.ts.map +1 -1
  325. package/dist/src/backend/trpc/workspace/git.trpc.d.ts +11 -1
  326. package/dist/src/backend/trpc/workspace/git.trpc.d.ts.map +1 -1
  327. package/dist/src/backend/trpc/workspace/ide.trpc.d.ts +11 -1
  328. package/dist/src/backend/trpc/workspace/ide.trpc.d.ts.map +1 -1
  329. package/dist/src/backend/trpc/workspace/init.trpc.d.ts +12 -1
  330. package/dist/src/backend/trpc/workspace/init.trpc.d.ts.map +1 -1
  331. package/dist/src/backend/trpc/workspace/run-script.trpc.d.ts +11 -1
  332. package/dist/src/backend/trpc/workspace/run-script.trpc.d.ts.map +1 -1
  333. package/dist/src/backend/trpc/workspace/workspace-helpers.d.ts +1 -0
  334. package/dist/src/backend/trpc/workspace/workspace-helpers.d.ts.map +1 -1
  335. package/dist/src/backend/trpc/workspace.router.test.js +11 -7
  336. package/dist/src/backend/trpc/workspace.router.test.js.map +1 -1
  337. package/dist/src/backend/trpc/workspace.trpc.d.ts +36 -7
  338. package/dist/src/backend/trpc/workspace.trpc.d.ts.map +1 -1
  339. package/dist/src/backend/trpc/workspace.trpc.js +22 -13
  340. package/dist/src/backend/trpc/workspace.trpc.js.map +1 -1
  341. package/dist/src/shared/acp-protocol/protocol/websocket.d.ts +1 -0
  342. package/dist/src/shared/acp-protocol/protocol/websocket.d.ts.map +1 -1
  343. package/dist/src/shared/acp-protocol/protocol/websocket.js.map +1 -1
  344. package/dist/src/shared/attachment-limits.d.ts +2 -0
  345. package/dist/src/shared/attachment-limits.d.ts.map +1 -0
  346. package/dist/src/shared/attachment-limits.js +2 -0
  347. package/dist/src/shared/attachment-limits.js.map +1 -0
  348. package/dist/src/shared/kanban-column-projection.d.ts +5 -0
  349. package/dist/src/shared/kanban-column-projection.d.ts.map +1 -0
  350. package/dist/src/shared/kanban-column-projection.js +31 -0
  351. package/dist/src/shared/kanban-column-projection.js.map +1 -0
  352. package/dist/src/shared/session-runtime.d.ts +1 -0
  353. package/dist/src/shared/session-runtime.d.ts.map +1 -1
  354. package/dist/src/shared/session-runtime.js +3 -0
  355. package/dist/src/shared/session-runtime.js.map +1 -1
  356. package/dist/src/shared/workspace-snapshot.d.ts +100 -5
  357. package/dist/src/shared/workspace-snapshot.d.ts.map +1 -1
  358. package/dist/src/shared/workspace-snapshot.js +5 -1
  359. package/dist/src/shared/workspace-snapshot.js.map +1 -1
  360. package/dist/src/shared/workspace-status-reason.d.ts +8 -3
  361. package/dist/src/shared/workspace-status-reason.d.ts.map +1 -1
  362. package/dist/src/shared/workspace-status-reason.js +50 -20
  363. package/dist/src/shared/workspace-status-reason.js.map +1 -1
  364. package/dist/src/test-utils/application-graph.d.ts +0 -1
  365. package/dist/src/test-utils/application-graph.d.ts.map +1 -1
  366. package/dist/src/test-utils/application-graph.js +0 -2
  367. package/dist/src/test-utils/application-graph.js.map +1 -1
  368. package/dist/tsconfig.backend.tsbuildinfo +1 -1
  369. package/package.json +3 -2
  370. package/prisma/migrations/20260728000000_add_workspace_periodic_task_id_index/migration.sql +2 -0
  371. package/prisma/migrations/20260728232525_add_ratchet_dispatch_stalled/migration.sql +20 -0
  372. package/prisma/schema.prisma +8 -0
  373. package/dist/client/assets/channel-DFzHt_cl.js +0 -1
  374. package/dist/client/assets/classDiagram-OUVF2IWQ-IkvZ4qsF.js +0 -1
  375. package/dist/client/assets/classDiagram-v2-EOCWNBFH-IkvZ4qsF.js +0 -1
  376. package/dist/client/assets/index-CxLzpVmH.css +0 -1
  377. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-CueME36n.js +0 -1
  378. package/dist/client/assets/swimlanesDiagram-G3AALYLV-DITFxuwY.js +0 -8
  379. package/dist/src/backend/services/workspace/service/state/kanban-state.d.ts +0 -16
  380. package/dist/src/backend/services/workspace/service/state/kanban-state.d.ts.map +0 -1
  381. package/dist/src/backend/services/workspace/service/state/kanban-state.js +0 -29
  382. package/dist/src/backend/services/workspace/service/state/kanban-state.js.map +0 -1
  383. package/dist/src/backend/services/workspace/service/state/kanban-state.test.d.ts +0 -2
  384. package/dist/src/backend/services/workspace/service/state/kanban-state.test.d.ts.map +0 -1
  385. package/dist/src/backend/services/workspace/service/state/kanban-state.test.js +0 -60
  386. package/dist/src/backend/services/workspace/service/state/kanban-state.test.js.map +0 -1
@@ -15,10 +15,19 @@ const toolResponseSchema = z.object({
15
15
  });
16
16
  async function callToolWithHttpResponse(options) {
17
17
  let requestMethod;
18
+ let requestBody;
18
19
  const server = createServer((req, res) => {
19
20
  requestMethod = req.method;
20
- res.writeHead(options.status, { 'Content-Type': 'application/json' });
21
- res.end(JSON.stringify(options.body));
21
+ let rawBody = '';
22
+ req.setEncoding('utf8');
23
+ req.on('data', (chunk) => {
24
+ rawBody += chunk;
25
+ });
26
+ req.on('end', () => {
27
+ requestBody = rawBody ? JSON.parse(rawBody) : undefined;
28
+ res.writeHead(options.status, { 'Content-Type': 'application/json' });
29
+ res.end(JSON.stringify(options.body));
30
+ });
22
31
  });
23
32
  server.listen(0, '127.0.0.1');
24
33
  await once(server, 'listening');
@@ -52,15 +61,20 @@ async function callToolWithHttpResponse(options) {
52
61
  method: 'tools/call',
53
62
  params: {
54
63
  name: options.toolName,
55
- arguments: options.toolName === 'spawn_child_workspace'
56
- ? { projectId: 'missing-project', name: 'Child workspace' }
57
- : {},
64
+ arguments: options.toolArguments ??
65
+ (options.toolName === 'spawn_child_workspace'
66
+ ? { projectId: 'missing-project', name: 'Child workspace' }
67
+ : {}),
58
68
  },
59
69
  })}\n`);
60
70
  const [exitCode] = await once(child, 'exit');
61
71
  expect(exitCode).toBe(0);
62
72
  expect(stderr).toBe('');
63
- return { requestMethod, response: toolResponseSchema.parse(JSON.parse(stdout.trim())) };
73
+ return {
74
+ requestBody,
75
+ requestMethod,
76
+ response: toolResponseSchema.parse(JSON.parse(stdout.trim())),
77
+ };
64
78
  }
65
79
  finally {
66
80
  server.close();
@@ -115,5 +129,24 @@ describe('child workspace MCP tRPC errors', () => {
115
129
  });
116
130
  expect(response.result.content[0]?.text).toBe('Error: HTTP 503');
117
131
  });
132
+ it('passes explicit Git index-lock recovery for child archive', async () => {
133
+ const { requestBody, response } = await callToolWithHttpResponse({
134
+ status: 200,
135
+ toolName: 'archive_child_workspace',
136
+ toolArguments: {
137
+ childWorkspaceId: 'child-1',
138
+ removeGitIndexLock: true,
139
+ },
140
+ body: { result: { data: { json: { archived: true } } } },
141
+ });
142
+ expect(requestBody).toEqual({
143
+ json: {
144
+ parentWorkspaceId: 'parent-workspace',
145
+ childWorkspaceId: 'child-1',
146
+ removeGitIndexLock: true,
147
+ },
148
+ });
149
+ expect(response.result.content[0]?.text).toBe('Child workspace archived successfully.');
150
+ });
118
151
  });
119
152
  //# sourceMappingURL=child-workspace-mcp-server.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"child-workspace-mcp-server.test.js","sourceRoot":"","sources":["../../../../../../../src/backend/services/session/service/acp/child-workspace-mcp-server.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AACzF,MAAM,OAAO,GAAG,IAAI,CAClB,SAAS,EACT,cAAc,EACd,MAAM,EACN,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CACjD,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC;CACH,CAAC,CAAC;AAIH,KAAK,UAAU,wBAAwB,CAAC,OAIvC;IACC,IAAI,aAAiC,CAAC;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9B,MAAM,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,EACP,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAC5E;YACE,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,sBAAsB,EAAE,GAAG;gBAC3B,eAAe,EAAE,kBAAkB;gBACnC,sBAAsB,EAAE,EAAE;gBAC1B,eAAe,EAAE,oBAAoB,OAAO,CAAC,IAAI,EAAE;aACpD;SACF,CACF,CAAC;QACF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,GAAG,CACb,GAAG,IAAI,CAAC,SAAS,CAAC;YAChB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,SAAS,EACP,OAAO,CAAC,QAAQ,KAAK,uBAAuB;oBAC1C,CAAC,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE;oBAC3D,CAAC,CAAC,EAAE;aACT;SACF,CAAC,IAAI,CACP,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAC1F,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,wBAAwB,CAAC;YACjE,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,uBAAuB;YACjC,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,OAAO,EAAE,sBAAsB;oBAC/B,IAAI,EAAE;wBACJ,OAAO,EAAE,oCAAoC;wBAC7C,IAAI,EAAE,CAAC,MAAM;wBACb,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE;qBAC7C;iBACF;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2CAA2C,EAAE,CAAC;YAC9E,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,wBAAwB,CAAC;YACjE,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE,EAAE;SAClE,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAChF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,wBAAwB,CAAC;YAClD,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,uBAAuB;YACjC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE;SACxD,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,wBAAwB,CAAC;YAClD,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;SAC9B,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"child-workspace-mcp-server.test.js","sourceRoot":"","sources":["../../../../../../../src/backend/services/session/service/acp/child-workspace-mcp-server.test.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,6 @@ import type { MessageAttachment } from '../../../../../../shared/acp-protocol/pr
3
3
  export declare class PermanentAttachmentError extends Error {
4
4
  constructor(message: string);
5
5
  }
6
- export declare class UnsupportedImageTypeError extends PermanentAttachmentError {
7
- constructor(type: string);
8
- }
9
6
  export declare function validateAttachment(attachment: MessageAttachment): void;
10
7
  export declare function sanitizeAttachmentName(name: string): string;
11
8
  interface CategorizedAttachments {
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-processing.d.ts","sourceRoot":"","sources":["../../../../../../../../src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAgBxE,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAMD,qBAAa,yBAA0B,SAAQ,wBAAwB;gBACzD,IAAI,EAAE,MAAM;CAMzB;AAqDD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAQtE;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS3D;AAMD,UAAU,sBAAsB;IAC9B,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACvC;AAKD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,sBAAsB,CAe9F;AAUD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,iBAAiB,EAAE,GACnC,MAAM,CAUR;AAMD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,iBAAiB,EAAE,GACpC,gBAAgB,EAAE,CAoBpB;AAcD,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAAE,GAChC,MAAM,GAAG,gBAAgB,EAAE,CAwB7B"}
1
+ {"version":3,"file":"attachment-processing.d.ts","sourceRoot":"","sources":["../../../../../../../../src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAiBxE,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AA2HD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAEtE;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS3D;AAMD,UAAU,sBAAsB;IAC9B,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACvC;AAKD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,sBAAsB,CAe9F;AAUD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,iBAAiB,EAAE,GACnC,MAAM,CAUR;AAMD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,iBAAiB,EAAE,GACpC,gBAAgB,EAAE,CAoBpB;AAcD,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAAE,GAChC,MAAM,GAAG,gBAAgB,EAAE,CAqB7B"}
@@ -1,22 +1,16 @@
1
1
  import { createLogger } from '../../../../../../backend/services/logger.service.js';
2
+ import { MAX_IMAGE_SIZE } from '../../../../../../shared/attachment-limits.js';
2
3
  import { resolveAttachmentContentType, stripBase64LineEndings } from './attachment-utils.js';
4
+ import { inspectSupportedImageFormat, } from './image-format-validation.js';
3
5
  const logger = createLogger('attachment-processing');
4
- const SUPPORTED_IMAGE_MEDIA_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
5
- function isSupportedImageMediaType(type) {
6
- return SUPPORTED_IMAGE_MEDIA_TYPES.includes(type);
7
- }
6
+ const MAX_BASE64_IMAGE_CHARACTERS = Math.ceil(MAX_IMAGE_SIZE / 3) * 4;
7
+ const IMAGE_SIGNATURE_BASE64_CHARACTERS = 16;
8
8
  export class PermanentAttachmentError extends Error {
9
9
  constructor(message) {
10
10
  super(message);
11
11
  this.name = 'PermanentAttachmentError';
12
12
  }
13
13
  }
14
- export class UnsupportedImageTypeError extends PermanentAttachmentError {
15
- constructor(type) {
16
- super(`Unsupported image format "${type || '(unknown)'}". Supported formats: JPEG, PNG, GIF, WebP.`);
17
- this.name = 'UnsupportedImageTypeError';
18
- }
19
- }
20
14
  function validateAttachmentHasData(attachment) {
21
15
  if (!attachment.data) {
22
16
  logger.error('[Chat WS] Attachment missing data', { attachmentId: attachment.id });
@@ -25,29 +19,77 @@ function validateAttachmentHasData(attachment) {
25
19
  }
26
20
  function validateImageBase64(attachment) {
27
21
  const normalizedData = stripBase64LineEndings(attachment.data);
28
- if (!(normalizedData && /^[A-Za-z0-9+/=]+$/.test(normalizedData))) {
22
+ if (!hasValidBase64Characters(normalizedData)) {
29
23
  logger.error('[Chat WS] Invalid base64 data in attachment', {
30
24
  attachmentId: attachment.id,
31
25
  });
32
26
  throw new PermanentAttachmentError(`Attachment "${attachment.name}" has invalid image data`);
33
27
  }
34
28
  }
35
- function validateImageMediaType(attachment) {
36
- if (!isSupportedImageMediaType(attachment.type)) {
37
- logger.error('[Chat WS] Unsupported image media type', {
29
+ function hasValidBase64Characters(data) {
30
+ return Boolean(data && /^[A-Za-z0-9+/=]+$/.test(data));
31
+ }
32
+ function decodedBase64ByteLength(data) {
33
+ const padding = data.endsWith('==') ? 2 : data.endsWith('=') ? 1 : 0;
34
+ return Math.floor(((data.length - padding) * 3) / 4);
35
+ }
36
+ function exceedsImageSizeLimit(data) {
37
+ return (data.length > MAX_BASE64_IMAGE_CHARACTERS || decodedBase64ByteLength(data) > MAX_IMAGE_SIZE);
38
+ }
39
+ function hasSupportedImageSignature(data) {
40
+ const encodedSignature = data.slice(0, IMAGE_SIGNATURE_BASE64_CHARACTERS);
41
+ return (hasValidBase64Characters(encodedSignature) &&
42
+ inspectSupportedImageFormat(Buffer.from(encodedSignature, 'base64')) !== null);
43
+ }
44
+ function normalizeAttachment(attachment) {
45
+ validateAttachmentHasData(attachment);
46
+ const normalizedData = stripBase64LineEndings(attachment.data);
47
+ if (exceedsImageSizeLimit(normalizedData)) {
48
+ if (!hasSupportedImageSignature(normalizedData) &&
49
+ resolveAttachmentContentType(attachment) !== 'image') {
50
+ return attachment;
51
+ }
52
+ logger.error('[Chat WS] Image attachment exceeds size limit', {
38
53
  attachmentId: attachment.id,
39
- type: attachment.type,
40
54
  });
41
- throw new UnsupportedImageTypeError(attachment.type);
55
+ throw new PermanentAttachmentError(`Attachment "${attachment.name}" exceeds the 10 MiB image limit`);
56
+ }
57
+ const imageInspection = hasValidBase64Characters(normalizedData)
58
+ ? inspectSupportedImageFormat(Buffer.from(normalizedData, 'base64'))
59
+ : null;
60
+ if (imageInspection) {
61
+ if (!imageInspection.isValid) {
62
+ if (resolveAttachmentContentType(attachment) !== 'image') {
63
+ return attachment;
64
+ }
65
+ logger.error('[Chat WS] Invalid image structure', {
66
+ attachmentId: attachment.id,
67
+ declaredType: attachment.type,
68
+ detectedType: imageInspection.mediaType,
69
+ });
70
+ throw new PermanentAttachmentError(`Attachment "${attachment.name}" does not contain valid ${imageInspection.mediaType} data`);
71
+ }
72
+ if (attachment.type === imageInspection.mediaType && attachment.contentType === 'image') {
73
+ return attachment;
74
+ }
75
+ return {
76
+ ...attachment,
77
+ type: imageInspection.mediaType,
78
+ contentType: 'image',
79
+ };
80
+ }
81
+ if (resolveAttachmentContentType(attachment) !== 'image') {
82
+ return attachment;
42
83
  }
84
+ validateImageBase64(attachment);
85
+ logger.error('[Chat WS] Unsupported image data', {
86
+ attachmentId: attachment.id,
87
+ declaredType: attachment.type,
88
+ });
89
+ throw new PermanentAttachmentError(`Attachment "${attachment.name}" does not contain supported image data`);
43
90
  }
44
91
  export function validateAttachment(attachment) {
45
- validateAttachmentHasData(attachment);
46
- const resolvedType = resolveAttachmentContentType(attachment);
47
- if (resolvedType === 'image') {
48
- validateImageBase64(attachment);
49
- validateImageMediaType(attachment);
50
- }
92
+ normalizeAttachment(attachment);
51
93
  }
52
94
  export function sanitizeAttachmentName(name) {
53
95
  const sanitized = Array.from(name)
@@ -102,10 +144,8 @@ export function processAttachmentsAndBuildContent(userText, attachments) {
102
144
  if (!attachments || attachments.length === 0) {
103
145
  return userText;
104
146
  }
105
- for (const attachment of attachments) {
106
- validateAttachment(attachment);
107
- }
108
- const { textAttachments, imageAttachments } = categorizeAttachments(attachments);
147
+ const normalizedAttachments = attachments.map(normalizeAttachment);
148
+ const { textAttachments, imageAttachments } = categorizeAttachments(normalizedAttachments);
109
149
  const combinedText = buildCombinedTextContent(userText, textAttachments);
110
150
  if (imageAttachments.length === 0) {
111
151
  return combinedText;
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-processing.js","sourceRoot":"","sources":["../../../../../../../../src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment-processing.js","sourceRoot":"","sources":["../../../../../../../../src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { buildCombinedTextContent, buildContentArray, categorizeAttachments, PermanentAttachmentError, processAttachmentsAndBuildContent, sanitizeAttachmentName, UnsupportedImageTypeError, validateAttachment, } from './attachment-processing.js';
2
+ import { MAX_IMAGE_SIZE } from '../../../../../../shared/attachment-limits.js';
3
+ import { buildCombinedTextContent, buildContentArray, categorizeAttachments, PermanentAttachmentError, processAttachmentsAndBuildContent, sanitizeAttachmentName, validateAttachment, } from './attachment-processing.js';
3
4
  function createTextAttachment(overrides = {}) {
4
5
  return {
5
6
  id: 'text-1',
@@ -22,6 +23,44 @@ function createImageAttachment(overrides = {}) {
22
23
  ...overrides,
23
24
  };
24
25
  }
26
+ function createOversizedPngBase64() {
27
+ const bytes = Buffer.alloc(MAX_IMAGE_SIZE + 1);
28
+ Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]).copy(bytes);
29
+ return bytes.toString('base64');
30
+ }
31
+ const VALID_JPEG_BASE64 = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDi6KKK+ZP3E//Z';
32
+ const SUPPORTED_IMAGE_FIXTURES = [
33
+ {
34
+ name: 'PNG with an empty declared type',
35
+ declaredType: '',
36
+ data: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==',
37
+ expectedType: 'image/png',
38
+ },
39
+ {
40
+ name: 'JPEG declared as PNG',
41
+ declaredType: 'image/png',
42
+ data: VALID_JPEG_BASE64,
43
+ expectedType: 'image/jpeg',
44
+ },
45
+ {
46
+ name: 'JPEG with a non-canonical declared type',
47
+ declaredType: 'image/jpg',
48
+ data: VALID_JPEG_BASE64,
49
+ expectedType: 'image/jpeg',
50
+ },
51
+ {
52
+ name: 'GIF declared as PNG',
53
+ declaredType: 'image/png',
54
+ data: 'R0lGODdhAQABAIEAAP8AAAAAAAAAAAAAACwAAAAAAQABAAAIBAABBAQAOw==',
55
+ expectedType: 'image/gif',
56
+ },
57
+ {
58
+ name: 'WebP declared as PNG',
59
+ declaredType: 'image/png',
60
+ data: 'UklGRjwAAABXRUJQVlA4IDAAAADQAQCdASoBAAEAAUAmJaACdLoB+AADsAD+8ut//NgVzXPv9//S4P0uD9Lg/9KQAAA=',
61
+ expectedType: 'image/webp',
62
+ },
63
+ ];
25
64
  describe('validateAttachment', () => {
26
65
  it('should accept valid text attachment', () => {
27
66
  const attachment = createTextAttachment();
@@ -50,11 +89,12 @@ describe('validateAttachment', () => {
50
89
  expect(() => validateAttachment(attachment)).toThrow('Attachment "screenshot.png" has invalid image data');
51
90
  expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
52
91
  });
53
- it('should accept image attachment with valid base64 characters', () => {
92
+ it('should reject valid base64 that is not a supported image', () => {
54
93
  const attachment = createImageAttachment({
55
94
  data: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
56
95
  });
57
- expect(() => validateAttachment(attachment)).not.toThrow();
96
+ expect(() => validateAttachment(attachment)).toThrow('Attachment "screenshot.png" does not contain supported image data');
97
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
58
98
  });
59
99
  it('should accept image attachment with line-wrapped base64 data', () => {
60
100
  const attachment = createImageAttachment({
@@ -62,9 +102,107 @@ describe('validateAttachment', () => {
62
102
  });
63
103
  expect(() => validateAttachment(attachment)).not.toThrow();
64
104
  });
65
- it('should throw a permanent error for unsupported image media types', () => {
66
- const attachment = createImageAttachment({ type: 'image/bmp' });
67
- expect(() => validateAttachment(attachment)).toThrow(UnsupportedImageTypeError);
105
+ it('should reject image data larger than 10 MiB before format inspection', () => {
106
+ const attachment = createImageAttachment({
107
+ data: 'A'.repeat(Math.ceil((MAX_IMAGE_SIZE + 1) / 3) * 4),
108
+ });
109
+ expect(() => validateAttachment(attachment)).toThrow('Attachment "screenshot.png" exceeds the 10 MiB image limit');
110
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
111
+ });
112
+ it('should reject oversized PNG bytes despite text metadata and forged size', () => {
113
+ const attachment = createImageAttachment({
114
+ type: 'text/plain',
115
+ contentType: 'text',
116
+ size: 1,
117
+ data: createOversizedPngBase64(),
118
+ });
119
+ expect(() => validateAttachment(attachment)).toThrow('Attachment "screenshot.png" exceeds the 10 MiB image limit');
120
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
121
+ });
122
+ it.each([
123
+ { format: 'PNG', data: 'iVBORw0KGgo=' },
124
+ { format: 'JPEG', data: '/9j/' },
125
+ { format: 'GIF', data: 'R0lGODlh' },
126
+ { format: 'WebP', data: 'UklGRgAAAABXRUJQ' },
127
+ ])('should reject a truncated $format with a recognized signature', ({ data }) => {
128
+ const attachment = createImageAttachment({ data });
129
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
130
+ });
131
+ it.each([
132
+ {
133
+ label: 'text MIME type',
134
+ overrides: { type: 'text/plain', contentType: undefined },
135
+ },
136
+ {
137
+ label: 'text content discriminator',
138
+ overrides: { type: 'image/png', contentType: 'text' },
139
+ },
140
+ {
141
+ label: 'pasted-text name',
142
+ overrides: { name: 'Pasted text', type: '', contentType: undefined },
143
+ },
144
+ ])('should accept image-like text with a $label', ({ overrides }) => {
145
+ const attachment = createTextAttachment({
146
+ ...overrides,
147
+ data: 'iVBORw0KGgoAAAANSUhEUg==',
148
+ });
149
+ expect(() => validateAttachment(attachment)).not.toThrow();
150
+ });
151
+ it('should reject a PNG whose image data fails its checksum', () => {
152
+ const attachment = createImageAttachment({
153
+ data: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+c9QDwADhgGAWjR9awAAAABJRU5ErkJggg==',
154
+ });
155
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
156
+ });
157
+ it.each([
158
+ {
159
+ name: 'unknown color type',
160
+ data: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAEAAACCwvwwAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==',
161
+ },
162
+ {
163
+ name: 'bit depth unsupported for truecolor',
164
+ data: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABBAIAAABVh77fAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==',
165
+ },
166
+ ])('should reject a PNG IHDR with $name', ({ data }) => {
167
+ const attachment = createImageAttachment({ data });
168
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
169
+ });
170
+ it('should reject an animated WebP frame with no image payload chunk', () => {
171
+ const attachment = createImageAttachment({
172
+ data: 'UklGRhwAAABXRUJQQU5NRhAAAAAAAAAAAAAAAAAAAAAAAAAA',
173
+ });
174
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
175
+ });
176
+ it.each([
177
+ {
178
+ layout: 'ANMF without VP8X and ANIM',
179
+ data: 'UklGRioAAABXRUJQQU5NRh4AAAAAAAAAAAAAAAAAAAAAAAAAVlA4TAUAAAAvAAAAAAA=',
180
+ },
181
+ {
182
+ layout: 'ANMF without ANIM',
183
+ data: 'UklGRjwAAABXRUJQVlA4WAoAAAACAAAAAAAAAAAAQU5NRh4AAAAAAAAAAAAAAAAAAAAAAAAAVlA4TAUAAAAvAAAAAAA=',
184
+ },
185
+ {
186
+ layout: 'ANMF before ANIM',
187
+ data: 'UklGRkoAAABXRUJQVlA4WAoAAAACAAAAAAAAAAAAQU5NRh4AAAAAAAAAAAAAAAAAAAAAAAAAVlA4TAUAAAAvAAAAAABBTklNBgAAAAAAAAAAAA==',
188
+ },
189
+ {
190
+ layout: 'ANMF while the VP8X animation flag is clear',
191
+ data: 'UklGRkoAAABXRUJQVlA4WAoAAAAAAAAAAAAAAAAAQU5JTQYAAAAAAAAAAABBTk1GHgAAAAAAAAAAAAAAAAAAAAAAAABWUDhMBQAAAC8AAAAAAA==',
192
+ },
193
+ ])('should reject an animated WebP containing $layout', ({ data }) => {
194
+ const attachment = createImageAttachment({ data });
195
+ expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
196
+ });
197
+ it('should accept an animated WebP with VP8X, ANIM, and ANMF in order', () => {
198
+ const attachment = createImageAttachment({
199
+ data: 'UklGRkoAAABXRUJQVlA4WAoAAAACAAAAAAAAAAAAQU5JTQYAAAAAAAAAAABBTk1GHgAAAAAAAAAAAAAAAAAAAAAAAABWUDhMBQAAAC8AAAAAAA==',
200
+ });
201
+ expect(() => validateAttachment(attachment)).not.toThrow();
202
+ });
203
+ it('should throw a permanent error for unsupported image bytes', () => {
204
+ const attachment = createImageAttachment({ type: 'image/bmp', data: 'Qk0AAAAA' });
205
+ expect(() => validateAttachment(attachment)).toThrow('Attachment "screenshot.png" does not contain supported image data');
68
206
  expect(() => validateAttachment(attachment)).toThrow(PermanentAttachmentError);
69
207
  });
70
208
  it('should not validate base64 for text attachments', () => {
@@ -253,6 +391,47 @@ describe('buildContentArray', () => {
253
391
  });
254
392
  });
255
393
  describe('processAttachmentsAndBuildContent', () => {
394
+ it.each([
395
+ {
396
+ name: 'text MIME type',
397
+ overrides: { type: 'text/plain', contentType: undefined },
398
+ },
399
+ {
400
+ name: 'text content discriminator',
401
+ overrides: { type: 'image/png', contentType: 'text' },
402
+ },
403
+ ])('should detect image bytes despite a $name', ({ overrides }) => {
404
+ const attachment = createImageAttachment(overrides);
405
+ const result = processAttachmentsAndBuildContent('Message', [attachment]);
406
+ expect(result).toHaveLength(2);
407
+ expect(result[1]).toMatchObject({
408
+ type: 'image',
409
+ source: {
410
+ type: 'base64',
411
+ media_type: 'image/png',
412
+ data: attachment.data,
413
+ },
414
+ });
415
+ expect(attachment).toMatchObject(overrides);
416
+ });
417
+ it.each(SUPPORTED_IMAGE_FIXTURES)('should normalize $name from its bytes', ({ declaredType, data, expectedType, }) => {
418
+ const attachment = createImageAttachment({ type: declaredType, data });
419
+ const result = processAttachmentsAndBuildContent('Message', [attachment]);
420
+ expect(result).toHaveLength(2);
421
+ expect(result[1]).toMatchObject({
422
+ type: 'image',
423
+ source: {
424
+ type: 'base64',
425
+ media_type: expectedType,
426
+ data,
427
+ },
428
+ });
429
+ expect(attachment.type).toBe(declaredType);
430
+ });
431
+ it('should dispatch structurally invalid image-like text as text', () => {
432
+ const attachment = createTextAttachment({ data: 'iVBORw0KGgoAAAANSUhEUg==' });
433
+ expect(processAttachmentsAndBuildContent('Message', [attachment])).toBe('Message\n\n[Pasted content: Pasted text]\niVBORw0KGgoAAAANSUhEUg==');
434
+ });
256
435
  it('should return text as-is when no attachments', () => {
257
436
  const result = processAttachmentsAndBuildContent('Hello world');
258
437
  expect(result).toBe('Hello world');
@@ -267,6 +446,15 @@ describe('processAttachmentsAndBuildContent', () => {
267
446
  expect(result).toBe('Check this:\n\n[Pasted content: code.ts]\nconst x = 1;');
268
447
  expect(typeof result).toBe('string');
269
448
  });
449
+ it('should not dispatch oversized PNG bytes mislabeled as text', () => {
450
+ const attachment = createImageAttachment({
451
+ type: 'text/plain',
452
+ contentType: 'text',
453
+ size: 1,
454
+ data: createOversizedPngBase64(),
455
+ });
456
+ expect(() => processAttachmentsAndBuildContent('Message', [attachment])).toThrow('Attachment "screenshot.png" exceeds the 10 MiB image limit');
457
+ });
270
458
  it('should process image-only attachments and return content array', () => {
271
459
  const attachments = [createImageAttachment()];
272
460
  const result = processAttachmentsAndBuildContent('Look:', attachments);
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-processing.test.js","sourceRoot":"","sources":["../../../../../../../../src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment-processing.test.js","sourceRoot":"","sources":["../../../../../../../../src/backend/services/session/service/chat/chat-message-handlers/attachment-processing.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type SupportedImageMediaType = 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp';
2
+ export interface ImageFormatInspection {
3
+ mediaType: SupportedImageMediaType;
4
+ isValid: boolean;
5
+ }
6
+ export declare function inspectSupportedImageFormat(bytes: Buffer): ImageFormatInspection | null;
7
+ //# sourceMappingURL=image-format-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-format-validation.d.ts","sourceRoot":"","sources":["../../../../../../../../src/backend/services/session/service/chat/chat-message-handlers/image-format-validation.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAE9F,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,uBAAuB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAolBD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAyBvF"}