factory-factory 0.3.21 → 0.4.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.
- package/dist/client/assets/{arc-DMA75yUX.js → arc-BZLkggFv.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DfVbmuXe.js → architectureDiagram-3BPJPVTR-0dfKDS01.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-BBr1PMaO.js → blockDiagram-GPEHLZMM-kPnqTUvo.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-C6xSY9MY.js → c4Diagram-AAUBKEIU-fGcSJ5RM.js} +1 -1
- package/dist/client/assets/channel-76ipWABm.js +1 -0
- package/dist/client/assets/chunk-2J33WTMH-nkRXvoLd.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-DohmszzB.js → chunk-4BX2VUAB-BzGqW4v8.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-BxtEguq8.js → chunk-55IACEB6-CKYhsw8v.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM--7mPe6NT.js → chunk-727SXJPM-D6c3bkpP.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-CUtRyyX-.js → chunk-AQP2D5EJ-Cp_aqtpa.js} +3 -3
- package/dist/client/assets/{chunk-FMBD7UC4-Zvl7moTS.js → chunk-FMBD7UC4-CkbLLRk5.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-DHRE6LfZ.js → chunk-ND2GUHAM-BZ894oON.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DCUx43mp.js → chunk-QZHKN3VN-D4NOzC69.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-FuxnCTTL.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-FuxnCTTL.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-CTS7yey1.js → cose-bilkent-S5V4N54A-CPSnsVY6.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-CDvFWhCS.js → dagre-BM42HDAG-CDuVn0gJ.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-BP89d-WY.js → diagram-2AECGRRQ-DkPx69Lt.js} +2 -2
- package/dist/client/assets/{diagram-5GNKFQAL-BXDVw1Xi.js → diagram-5GNKFQAL-CchGithI.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DBYI-mqR.js → diagram-KO2AKTUF-DQ50kQAK.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-D359JaJw.js → diagram-LMA3HP47-hKBATxk5.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BMr7mzB4.js → diagram-OG6HWLK6-Bga7_0RO.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-CeCqd6tA.js → erDiagram-TEJ5UH35-D26at0F2.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-ZUKSazw4.js → flowDiagram-I6XJVG4X-Qf-TRw4O.js} +4 -4
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-Cq-q9kPK.js → ganttDiagram-6RSMTGT7-CmRredaI.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-zVissJIm.js → gitGraphDiagram-PVQCEYII-QQP7Sl8F.js} +3 -3
- package/dist/client/assets/index-Db00yCQO.js +672 -0
- package/dist/client/assets/index-kItkrW7R.css +1 -0
- package/dist/client/assets/infoDiagram-5YYISTIA-YKWLGpI0.js +2 -0
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Cux5p5kO.js → ishikawaDiagram-YF4QCWOH-DrCgRttT.js} +3 -3
- package/dist/client/assets/{journeyDiagram-JHISSGLW-1ke9LkJX.js → journeyDiagram-JHISSGLW-CcyKXKKG.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-DP9dkc_Z.js → kanban-definition-UN3LZRKU-CsGSN3QV.js} +1 -1
- package/dist/client/assets/{linear-CyyRtH0c.js → linear-DG8wt3yl.js} +1 -1
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-BcU2pjK2.js → mindmap-definition-RKZ34NQL-CD6E0vLi.js} +3 -3
- package/dist/client/assets/{mobile-baseline-CSjGr1_M.js → mobile-baseline-CCXJGaWY.js} +2 -2
- package/dist/client/assets/{pieDiagram-4H26LBE5-Bl7PuiuI.js → pieDiagram-4H26LBE5-PIN8tU1a.js} +2 -2
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Dx0ckMzC.js → quadrantDiagram-W4KKPZXB-DV6ne1ch.js} +3 -3
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-CXkIn3ft.js → requirementDiagram-4Y6WPE33-Cly9IJv1.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DIjHC-x5.js → sankeyDiagram-5OEKKPKP-D2SFbF9j.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BEdLD9KB.js → sequenceDiagram-3UESZ5HK-BsxZzGc-.js} +4 -4
- package/dist/client/assets/stateDiagram-AJRCARHV-DtZoFzqs.js +1 -0
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Dhf9Ohaz.js +1 -0
- package/dist/client/assets/{terminal-instance-W5XOlvlg.js → terminal-instance-DFzmxfzG.js} +8 -8
- package/dist/client/assets/{timeline-definition-PNZ67QCA-CkV6p1W8.js → timeline-definition-PNZ67QCA-B7ZqNmvc.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-ubGCO9Lw.js → vennDiagram-CIIHVFJN-Biz7Z4hM.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-_NZpI_YF.js → wardley-L42UT6IY-B-ZjZQUx.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DMXZwsFF.js → wardleyDiagram-YWT4CUSO-C9yV9o-K.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-T9YSJ2sB.js → xychartDiagram-2RQKCTM6-DuWAbR0h.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/prisma/generated/browser.d.ts +1 -0
- package/dist/prisma/generated/browser.d.ts.map +1 -1
- package/dist/prisma/generated/client.d.ts +1 -0
- package/dist/prisma/generated/client.d.ts.map +1 -1
- package/dist/prisma/generated/commonInputTypes.d.ts +60 -0
- package/dist/prisma/generated/commonInputTypes.d.ts.map +1 -1
- package/dist/prisma/generated/enums.d.ts +12 -0
- package/dist/prisma/generated/enums.d.ts.map +1 -1
- package/dist/prisma/generated/enums.js +11 -1
- package/dist/prisma/generated/enums.js.map +1 -1
- package/dist/prisma/generated/internal/class.d.ts +3 -0
- package/dist/prisma/generated/internal/class.d.ts.map +1 -1
- package/dist/prisma/generated/internal/class.js +4 -4
- package/dist/prisma/generated/internal/class.js.map +1 -1
- package/dist/prisma/generated/internal/prismaNamespace.d.ts +94 -1
- package/dist/prisma/generated/internal/prismaNamespace.d.ts.map +1 -1
- package/dist/prisma/generated/internal/prismaNamespace.js +16 -1
- package/dist/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts +16 -0
- package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts.map +1 -1
- package/dist/prisma/generated/internal/prismaNamespaceBrowser.js +16 -1
- package/dist/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/prisma/generated/models/Workspace.d.ts +1412 -92
- package/dist/prisma/generated/models/Workspace.d.ts.map +1 -1
- package/dist/prisma/generated/models/WorkspaceNotification.d.ts +684 -0
- package/dist/prisma/generated/models/WorkspaceNotification.d.ts.map +1 -0
- package/dist/prisma/generated/models/WorkspaceNotification.js +2 -0
- package/dist/prisma/generated/models/WorkspaceNotification.js.map +1 -0
- package/dist/prisma/generated/models.d.ts +1 -0
- package/dist/prisma/generated/models.d.ts.map +1 -1
- package/dist/prompts/ratchet/dispatch.md +2 -0
- package/dist/scripts/check-no-direct-process-env.d.mts.map +1 -1
- package/dist/scripts/check-no-direct-process-env.mjs +1 -0
- package/dist/scripts/check-no-direct-process-env.mjs.map +1 -1
- package/dist/src/backend/app-context.d.ts +1 -2
- package/dist/src/backend/app-context.d.ts.map +1 -1
- package/dist/src/backend/app-context.js +1 -2
- package/dist/src/backend/app-context.js.map +1 -1
- package/dist/src/backend/fatal-error-handlers.d.ts +19 -0
- package/dist/src/backend/fatal-error-handlers.d.ts.map +1 -0
- package/dist/src/backend/fatal-error-handlers.js +37 -0
- package/dist/src/backend/fatal-error-handlers.js.map +1 -0
- package/dist/src/backend/fatal-error-handlers.test.d.ts +2 -0
- package/dist/src/backend/fatal-error-handlers.test.d.ts.map +1 -0
- package/dist/src/backend/fatal-error-handlers.test.js +95 -0
- package/dist/src/backend/fatal-error-handlers.test.js.map +1 -0
- package/dist/src/backend/index.js +2 -15
- package/dist/src/backend/index.js.map +1 -1
- package/dist/src/backend/interceptors/branch-rename.interceptor.d.ts.map +1 -1
- package/dist/src/backend/interceptors/branch-rename.interceptor.js +1 -1
- package/dist/src/backend/interceptors/branch-rename.interceptor.js.map +1 -1
- package/dist/src/backend/interceptors/branch-rename.interceptor.test.js +7 -6
- package/dist/src/backend/interceptors/branch-rename.interceptor.test.js.map +1 -1
- package/dist/src/backend/interceptors/conversation-rename.interceptor.d.ts.map +1 -1
- package/dist/src/backend/interceptors/conversation-rename.interceptor.js +39 -22
- package/dist/src/backend/interceptors/conversation-rename.interceptor.js.map +1 -1
- package/dist/src/backend/interceptors/conversation-rename.interceptor.test.js +79 -1
- package/dist/src/backend/interceptors/conversation-rename.interceptor.test.js.map +1 -1
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.d.ts.map +1 -1
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.js +1 -2
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.js.map +1 -1
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.js +28 -7
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.js.map +1 -1
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.d.ts.map +1 -1
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.js +1 -2
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.js.map +1 -1
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.test.js +28 -7
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.test.js.map +1 -1
- package/dist/src/backend/lib/constants.d.ts +2 -0
- package/dist/src/backend/lib/constants.d.ts.map +1 -1
- package/dist/src/backend/lib/constants.js +2 -0
- package/dist/src/backend/lib/constants.js.map +1 -1
- package/dist/src/backend/lib/env.d.ts.map +1 -1
- package/dist/src/backend/lib/env.js +4 -3
- package/dist/src/backend/lib/env.js.map +1 -1
- package/dist/src/backend/lib/env.test.js +17 -1
- package/dist/src/backend/lib/env.test.js.map +1 -1
- package/dist/src/backend/lib/file-helpers.d.ts +7 -0
- package/dist/src/backend/lib/file-helpers.d.ts.map +1 -1
- package/dist/src/backend/lib/file-helpers.js +65 -15
- package/dist/src/backend/lib/file-helpers.js.map +1 -1
- package/dist/src/backend/lib/file-helpers.test.js +82 -2
- package/dist/src/backend/lib/file-helpers.test.js.map +1 -1
- package/dist/src/backend/lib/request-trust.d.ts +4 -0
- package/dist/src/backend/lib/request-trust.d.ts.map +1 -0
- package/dist/src/backend/lib/request-trust.js +116 -0
- package/dist/src/backend/lib/request-trust.js.map +1 -0
- package/dist/src/backend/lib/request-trust.test.d.ts +2 -0
- package/dist/src/backend/lib/request-trust.test.d.ts.map +1 -0
- package/dist/src/backend/lib/request-trust.test.js +64 -0
- package/dist/src/backend/lib/request-trust.test.js.map +1 -0
- package/dist/src/backend/lib/session-model.js +1 -1
- package/dist/src/backend/lib/session-model.js.map +1 -1
- package/dist/src/backend/lib/shell.d.ts +13 -1
- package/dist/src/backend/lib/shell.d.ts.map +1 -1
- package/dist/src/backend/lib/shell.js +124 -13
- package/dist/src/backend/lib/shell.js.map +1 -1
- package/dist/src/backend/lib/shell.test.js +72 -0
- package/dist/src/backend/lib/shell.test.js.map +1 -1
- package/dist/src/backend/lib/topic-broadcaster.d.ts +18 -0
- package/dist/src/backend/lib/topic-broadcaster.d.ts.map +1 -0
- package/dist/src/backend/lib/topic-broadcaster.js +56 -0
- package/dist/src/backend/lib/topic-broadcaster.js.map +1 -0
- package/dist/src/backend/lib/topic-broadcaster.test.d.ts +2 -0
- package/dist/src/backend/lib/topic-broadcaster.test.d.ts.map +1 -0
- package/dist/src/backend/lib/topic-broadcaster.test.js +126 -0
- package/dist/src/backend/lib/topic-broadcaster.test.js.map +1 -0
- package/dist/src/backend/lib/websocket-send.d.ts +12 -0
- package/dist/src/backend/lib/websocket-send.d.ts.map +1 -0
- package/dist/src/backend/lib/websocket-send.js +46 -0
- package/dist/src/backend/lib/websocket-send.js.map +1 -0
- package/dist/src/backend/lib/websocket-send.test.d.ts +2 -0
- package/dist/src/backend/lib/websocket-send.test.d.ts.map +1 -0
- package/dist/src/backend/lib/websocket-send.test.js +103 -0
- package/dist/src/backend/lib/websocket-send.test.js.map +1 -0
- package/dist/src/backend/middleware/cors.middleware.d.ts.map +1 -1
- package/dist/src/backend/middleware/cors.middleware.js +2 -1
- package/dist/src/backend/middleware/cors.middleware.js.map +1 -1
- package/dist/src/backend/middleware/middleware.test.js +17 -0
- package/dist/src/backend/middleware/middleware.test.js.map +1 -1
- package/dist/src/backend/orchestration/data-backup.service.test.js +3 -0
- package/dist/src/backend/orchestration/data-backup.service.test.js.map +1 -1
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.d.ts +2 -1
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.js +57 -21
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.test.js +118 -10
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.test.js.map +1 -1
- package/dist/src/backend/orchestration/event-collector.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/event-collector.orchestrator.js +23 -3
- package/dist/src/backend/orchestration/event-collector.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/event-collector.orchestrator.test.js +153 -6
- package/dist/src/backend/orchestration/event-collector.orchestrator.test.js.map +1 -1
- package/dist/src/backend/{services/ratchet/service → orchestration}/reconciliation.service.d.ts +8 -2
- package/dist/src/backend/orchestration/reconciliation.service.d.ts.map +1 -0
- package/dist/src/backend/{services/ratchet/service → orchestration}/reconciliation.service.js +6 -6
- package/dist/src/backend/orchestration/reconciliation.service.js.map +1 -0
- package/dist/src/backend/orchestration/reconciliation.service.test.d.ts.map +1 -0
- package/dist/src/backend/{services/ratchet/service → orchestration}/reconciliation.service.test.js +1 -1
- package/dist/src/backend/orchestration/reconciliation.service.test.js.map +1 -0
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts +9 -0
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.js +33 -25
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js +8 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-children.orchestrator.d.ts +22 -0
- package/dist/src/backend/orchestration/workspace-children.orchestrator.d.ts.map +1 -0
- package/dist/src/backend/orchestration/workspace-children.orchestrator.js +94 -0
- package/dist/src/backend/orchestration/workspace-children.orchestrator.js.map +1 -0
- package/dist/src/backend/orchestration/workspace-children.orchestrator.test.d.ts +2 -0
- package/dist/src/backend/orchestration/workspace-children.orchestrator.test.d.ts.map +1 -0
- package/dist/src/backend/orchestration/workspace-children.orchestrator.test.js +116 -0
- package/dist/src/backend/orchestration/workspace-children.orchestrator.test.js.map +1 -0
- package/dist/src/backend/orchestration/workspace-init.orchestrator.js +3 -3
- package/dist/src/backend/orchestration/workspace-init.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-init.orchestrator.test.js +2 -2
- package/dist/src/backend/orchestration/workspace-init.orchestrator.test.js.map +1 -1
- package/dist/src/backend/prompts/branch-rename.d.ts.map +1 -1
- package/dist/src/backend/prompts/branch-rename.js +20 -13
- package/dist/src/backend/prompts/branch-rename.js.map +1 -1
- package/dist/src/backend/prompts/branch-rename.test.d.ts +2 -0
- package/dist/src/backend/prompts/branch-rename.test.d.ts.map +1 -0
- package/dist/src/backend/prompts/branch-rename.test.js +56 -0
- package/dist/src/backend/prompts/branch-rename.test.js.map +1 -0
- package/dist/src/backend/prompts/ratchet-dispatch.d.ts.map +1 -1
- package/dist/src/backend/prompts/ratchet-dispatch.js +28 -6
- package/dist/src/backend/prompts/ratchet-dispatch.js.map +1 -1
- package/dist/src/backend/prompts/ratchet-dispatch.test.js +55 -0
- package/dist/src/backend/prompts/ratchet-dispatch.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/chat-connection-registry.d.ts +27 -0
- package/dist/src/backend/routers/websocket/chat-connection-registry.d.ts.map +1 -0
- package/dist/src/backend/routers/websocket/chat-connection-registry.js +106 -0
- package/dist/src/backend/routers/websocket/chat-connection-registry.js.map +1 -0
- package/dist/src/backend/routers/websocket/chat-connection-registry.test.d.ts +2 -0
- package/dist/src/backend/routers/websocket/chat-connection-registry.test.d.ts.map +1 -0
- package/dist/src/backend/routers/websocket/chat-connection-registry.test.js +242 -0
- package/dist/src/backend/routers/websocket/chat-connection-registry.test.js.map +1 -0
- package/dist/src/backend/routers/websocket/chat.handler.d.ts +2 -5
- package/dist/src/backend/routers/websocket/chat.handler.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/chat.handler.js +34 -45
- package/dist/src/backend/routers/websocket/chat.handler.js.map +1 -1
- package/dist/src/backend/routers/websocket/chat.handler.test.js +86 -43
- package/dist/src/backend/routers/websocket/chat.handler.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/dev-logs.handler.d.ts +3 -6
- package/dist/src/backend/routers/websocket/dev-logs.handler.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/dev-logs.handler.js +12 -68
- package/dist/src/backend/routers/websocket/dev-logs.handler.js.map +1 -1
- package/dist/src/backend/routers/websocket/dev-logs.handler.test.js +75 -3
- package/dist/src/backend/routers/websocket/dev-logs.handler.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/message-utils.d.ts +6 -0
- package/dist/src/backend/routers/websocket/message-utils.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/message-utils.js +28 -0
- package/dist/src/backend/routers/websocket/message-utils.js.map +1 -1
- package/dist/src/backend/routers/websocket/message-utils.test.d.ts +2 -0
- package/dist/src/backend/routers/websocket/message-utils.test.d.ts.map +1 -0
- package/dist/src/backend/routers/websocket/message-utils.test.js +54 -0
- package/dist/src/backend/routers/websocket/message-utils.test.js.map +1 -0
- package/dist/src/backend/routers/websocket/post-run-logs.handler.d.ts +3 -6
- package/dist/src/backend/routers/websocket/post-run-logs.handler.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/post-run-logs.handler.js +12 -57
- package/dist/src/backend/routers/websocket/post-run-logs.handler.js.map +1 -1
- package/dist/src/backend/routers/websocket/post-run-logs.handler.test.js +76 -12
- package/dist/src/backend/routers/websocket/post-run-logs.handler.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/push-channel.handler.d.ts +12 -0
- package/dist/src/backend/routers/websocket/push-channel.handler.d.ts.map +1 -0
- package/dist/src/backend/routers/websocket/push-channel.handler.js +40 -0
- package/dist/src/backend/routers/websocket/push-channel.handler.js.map +1 -0
- package/dist/src/backend/routers/websocket/setup-terminal.handler.d.ts +1 -4
- package/dist/src/backend/routers/websocket/setup-terminal.handler.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/setup-terminal.handler.js +14 -46
- package/dist/src/backend/routers/websocket/setup-terminal.handler.js.map +1 -1
- package/dist/src/backend/routers/websocket/setup-terminal.handler.test.js +66 -6
- package/dist/src/backend/routers/websocket/setup-terminal.handler.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/snapshots.handler.d.ts +5 -8
- package/dist/src/backend/routers/websocket/snapshots.handler.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/snapshots.handler.js +71 -56
- package/dist/src/backend/routers/websocket/snapshots.handler.js.map +1 -1
- package/dist/src/backend/routers/websocket/snapshots.handler.test.js +285 -44
- package/dist/src/backend/routers/websocket/snapshots.handler.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/terminal.handler.d.ts +3 -6
- package/dist/src/backend/routers/websocket/terminal.handler.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/terminal.handler.js +111 -101
- package/dist/src/backend/routers/websocket/terminal.handler.js.map +1 -1
- package/dist/src/backend/routers/websocket/terminal.handler.test.js +256 -16
- package/dist/src/backend/routers/websocket/terminal.handler.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/upgrade-utils.d.ts +30 -2
- package/dist/src/backend/routers/websocket/upgrade-utils.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/upgrade-utils.js +103 -8
- package/dist/src/backend/routers/websocket/upgrade-utils.js.map +1 -1
- package/dist/src/backend/routers/websocket/upgrade-utils.test.js +316 -3
- package/dist/src/backend/routers/websocket/upgrade-utils.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/websocket.integration.test.js +10 -17
- package/dist/src/backend/routers/websocket/websocket.integration.test.js.map +1 -1
- package/dist/src/backend/schemas/websocket/setup-terminal-message.schema.d.ts +0 -2
- package/dist/src/backend/schemas/websocket/setup-terminal-message.schema.d.ts.map +1 -1
- package/dist/src/backend/schemas/websocket/setup-terminal-message.schema.js +0 -3
- package/dist/src/backend/schemas/websocket/setup-terminal-message.schema.js.map +1 -1
- package/dist/src/backend/schemas/websocket/terminal-message.schema.d.ts +0 -2
- package/dist/src/backend/schemas/websocket/terminal-message.schema.d.ts.map +1 -1
- package/dist/src/backend/schemas/websocket/terminal-message.schema.js +0 -1
- package/dist/src/backend/schemas/websocket/terminal-message.schema.js.map +1 -1
- package/dist/src/backend/server.d.ts.map +1 -1
- package/dist/src/backend/server.js +169 -102
- package/dist/src/backend/server.js.map +1 -1
- package/dist/src/backend/server.upgrade.test.js +217 -24
- package/dist/src/backend/server.upgrade.test.js.map +1 -1
- package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.d.ts.map +1 -1
- package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.js +12 -2
- package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.js.map +1 -1
- package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.test.js +27 -3
- package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.test.js.map +1 -1
- package/dist/src/backend/services/check-single-writer.test.js +7 -7
- package/dist/src/backend/services/check-single-writer.test.js.map +1 -1
- package/dist/src/backend/services/config.service.d.ts +1 -0
- package/dist/src/backend/services/config.service.d.ts.map +1 -1
- package/dist/src/backend/services/config.service.js +20 -5
- package/dist/src/backend/services/config.service.js.map +1 -1
- package/dist/src/backend/services/config.service.test.js +18 -0
- package/dist/src/backend/services/config.service.test.js.map +1 -1
- package/dist/src/backend/services/constants.d.ts +1 -1
- package/dist/src/backend/services/constants.js +1 -1
- package/dist/src/backend/services/constants.js.map +1 -1
- package/dist/src/backend/services/env-schemas.d.ts +1 -0
- package/dist/src/backend/services/env-schemas.d.ts.map +1 -1
- package/dist/src/backend/services/env-schemas.js +1 -0
- package/dist/src/backend/services/env-schemas.js.map +1 -1
- package/dist/src/backend/services/git-clone.service.d.ts.map +1 -1
- package/dist/src/backend/services/git-clone.service.js +19 -3
- package/dist/src/backend/services/git-clone.service.js.map +1 -1
- package/dist/src/backend/services/git-clone.service.test.js +81 -1
- package/dist/src/backend/services/git-clone.service.test.js.map +1 -1
- package/dist/src/backend/services/git-ops.service.d.ts.map +1 -1
- package/dist/src/backend/services/git-ops.service.js +6 -1
- package/dist/src/backend/services/git-ops.service.js.map +1 -1
- package/dist/src/backend/services/git-ops.service.test.js +24 -3
- package/dist/src/backend/services/git-ops.service.test.js.map +1 -1
- package/dist/src/backend/services/github/service/github-cli/errors.d.ts.map +1 -1
- package/dist/src/backend/services/github/service/github-cli/errors.js +6 -1
- package/dist/src/backend/services/github/service/github-cli/errors.js.map +1 -1
- package/dist/src/backend/services/github/service/github-cli/schemas.d.ts +64 -6
- package/dist/src/backend/services/github/service/github-cli/schemas.d.ts.map +1 -1
- package/dist/src/backend/services/github/service/github-cli/schemas.js +45 -0
- package/dist/src/backend/services/github/service/github-cli/schemas.js.map +1 -1
- package/dist/src/backend/services/github/service/github-cli.service.d.ts +8 -3
- package/dist/src/backend/services/github/service/github-cli.service.d.ts.map +1 -1
- package/dist/src/backend/services/github/service/github-cli.service.js +244 -51
- package/dist/src/backend/services/github/service/github-cli.service.js.map +1 -1
- package/dist/src/backend/services/github/service/github-cli.service.test.js +398 -0
- package/dist/src/backend/services/github/service/github-cli.service.test.js.map +1 -1
- package/dist/src/backend/services/github/service/index.d.ts +1 -0
- package/dist/src/backend/services/github/service/index.d.ts.map +1 -1
- package/dist/src/backend/services/github/service/index.js +1 -0
- package/dist/src/backend/services/github/service/index.js.map +1 -1
- package/dist/src/backend/services/github/service/pr-fetch-registry.d.ts +1 -0
- package/dist/src/backend/services/github/service/pr-fetch-registry.d.ts.map +1 -1
- package/dist/src/backend/services/github/service/pr-fetch-registry.js +3 -0
- package/dist/src/backend/services/github/service/pr-fetch-registry.js.map +1 -1
- package/dist/src/backend/services/linear/service/linear-client.service.d.ts.map +1 -1
- package/dist/src/backend/services/linear/service/linear-client.service.js +33 -20
- package/dist/src/backend/services/linear/service/linear-client.service.js.map +1 -1
- package/dist/src/backend/services/linear/service/linear-client.service.test.js +76 -0
- package/dist/src/backend/services/linear/service/linear-client.service.test.js.map +1 -1
- package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.d.ts +13 -1
- package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.d.ts.map +1 -1
- package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.js +40 -13
- package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.js.map +1 -1
- package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.test.js +58 -0
- package/dist/src/backend/services/periodic-task/resources/periodic-task.accessor.test.js.map +1 -1
- package/dist/src/backend/services/periodic-task/service/periodic-task.service.d.ts +2 -0
- package/dist/src/backend/services/periodic-task/service/periodic-task.service.d.ts.map +1 -1
- package/dist/src/backend/services/periodic-task/service/periodic-task.service.js +54 -9
- package/dist/src/backend/services/periodic-task/service/periodic-task.service.js.map +1 -1
- package/dist/src/backend/services/periodic-task/service/periodic-task.service.test.js +131 -1
- package/dist/src/backend/services/periodic-task/service/periodic-task.service.test.js.map +1 -1
- package/dist/src/backend/services/port-allocation.service.d.ts +2 -1
- package/dist/src/backend/services/port-allocation.service.d.ts.map +1 -1
- package/dist/src/backend/services/port-allocation.service.js +12 -4
- package/dist/src/backend/services/port-allocation.service.js.map +1 -1
- package/dist/src/backend/services/port-allocation.service.test.d.ts +2 -0
- package/dist/src/backend/services/port-allocation.service.test.d.ts.map +1 -0
- package/dist/src/backend/services/port-allocation.service.test.js +43 -0
- package/dist/src/backend/services/port-allocation.service.test.js.map +1 -0
- package/dist/src/backend/services/ratchet/service/bridges.d.ts +18 -11
- package/dist/src/backend/services/ratchet/service/bridges.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/fixer-session.service.d.ts +1 -0
- package/dist/src/backend/services/ratchet/service/fixer-session.service.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/fixer-session.service.js +9 -2
- package/dist/src/backend/services/ratchet/service/fixer-session.service.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/fixer-session.service.test.js +25 -0
- package/dist/src/backend/services/ratchet/service/fixer-session.service.test.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/index.d.ts +1 -2
- package/dist/src/backend/services/ratchet/service/index.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/index.js +0 -1
- package/dist/src/backend/services/ratchet/service/index.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.d.ts +6 -12
- package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.js +52 -56
- package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-decision-logging.helpers.d.ts +2 -5
- package/dist/src/backend/services/ratchet/service/ratchet-decision-logging.helpers.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-decision-logging.helpers.js +7 -4
- package/dist/src/backend/services/ratchet/service/ratchet-decision-logging.helpers.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-domain-exports.test.js +1 -4
- package/dist/src/backend/services/ratchet/service/ratchet-domain-exports.test.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-fixer-dispatch.helpers.d.ts +3 -6
- package/dist/src/backend/services/ratchet/service/ratchet-fixer-dispatch.helpers.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-fixer-dispatch.helpers.js +145 -22
- package/dist/src/backend/services/ratchet/service/ratchet-fixer-dispatch.helpers.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.d.ts +10 -30
- package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.js +60 -30
- package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.test.js +264 -11
- package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.test.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.d.ts +11 -0
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.d.ts.map +1 -0
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.js +77 -0
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.js.map +1 -0
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.d.ts +2 -0
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.d.ts.map +1 -0
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.js +66 -0
- package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.js.map +1 -0
- package/dist/src/backend/services/ratchet/service/ratchet-workspace-check-coordinator.d.ts +2 -1
- package/dist/src/backend/services/ratchet/service/ratchet-workspace-check-coordinator.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-workspace-check-coordinator.js +35 -9
- package/dist/src/backend/services/ratchet/service/ratchet-workspace-check-coordinator.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet-workspace-check-coordinator.test.js +91 -0
- package/dist/src/backend/services/ratchet/service/ratchet-workspace-check-coordinator.test.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet.service.d.ts +12 -56
- package/dist/src/backend/services/ratchet/service/ratchet.service.d.ts.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet.service.js +249 -220
- package/dist/src/backend/services/ratchet/service/ratchet.service.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet.service.test.js +1520 -453
- package/dist/src/backend/services/ratchet/service/ratchet.service.test.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet.types.d.ts +20 -13
- package/dist/src/backend/services/ratchet/service/ratchet.types.d.ts.map +1 -1
- package/dist/src/backend/services/registry.d.ts +3 -3
- package/dist/src/backend/services/registry.d.ts.map +1 -1
- package/dist/src/backend/services/registry.js +3 -2
- package/dist/src/backend/services/registry.js.map +1 -1
- package/dist/src/backend/services/resources.integration.test.js +101 -10
- package/dist/src/backend/services/resources.integration.test.js.map +1 -1
- package/dist/src/backend/services/run-script/service/run-script.service.d.ts +5 -0
- package/dist/src/backend/services/run-script/service/run-script.service.d.ts.map +1 -1
- package/dist/src/backend/services/run-script/service/run-script.service.js +130 -33
- package/dist/src/backend/services/run-script/service/run-script.service.js.map +1 -1
- package/dist/src/backend/services/run-script/service/run-script.service.test.js +276 -24
- package/dist/src/backend/services/run-script/service/run-script.service.test.js.map +1 -1
- package/dist/src/backend/services/session/resources/agent-session.accessor.test.js +19 -0
- package/dist/src/backend/services/session/resources/agent-session.accessor.test.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/acp-runtime-manager.d.ts +13 -0
- package/dist/src/backend/services/session/service/acp/acp-runtime-manager.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/acp/acp-runtime-manager.js +192 -23
- package/dist/src/backend/services/session/service/acp/acp-runtime-manager.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.js +236 -24
- package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.d.ts +11 -0
- package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.d.ts.map +1 -0
- package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.js +318 -0
- package/dist/src/backend/services/session/service/acp/child-workspace-mcp-server.js.map +1 -0
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-rpc-client.d.ts +18 -1
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-rpc-client.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-rpc-client.js +54 -6
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-rpc-client.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-rpc-client.test.js +76 -1
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-rpc-client.test.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/types.d.ts +7 -0
- package/dist/src/backend/services/session/service/acp/types.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/bridges.d.ts +9 -5
- package/dist/src/backend/services/session/service/bridges.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.js +2 -14
- package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.js +59 -76
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.test.js +204 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.test.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.js +2 -11
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.test.js +5 -18
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.test.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.js +9 -0
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.test.js +34 -0
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.test.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.d.ts +11 -0
- package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js +148 -26
- package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js +339 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/data/codex-session-history-loader.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/data/codex-session-history-loader.service.js +200 -26
- package/dist/src/backend/services/session/service/data/codex-session-history-loader.service.js.map +1 -1
- package/dist/src/backend/services/session/service/data/codex-session-history-loader.service.test.js +352 -1
- package/dist/src/backend/services/session/service/data/codex-session-history-loader.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/data/session-data.service.d.ts +9 -2
- package/dist/src/backend/services/session/service/data/session-data.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/data/session-data.service.js +2 -2
- package/dist/src/backend/services/session/service/data/session-data.service.js.map +1 -1
- package/dist/src/backend/services/session/service/data/session-history-loader.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/data/session-history-loader.service.js +4 -1
- package/dist/src/backend/services/session/service/data/session-history-loader.service.js.map +1 -1
- package/dist/src/backend/services/session/service/data/session-history-loader.service.test.js +37 -0
- package/dist/src/backend/services/session/service/data/session-history-loader.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/index.d.ts +2 -2
- package/dist/src/backend/services/session/service/index.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/index.js +1 -1
- package/dist/src/backend/services/session/service/index.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.d.ts +2 -0
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.js +26 -7
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.slash-commands.test.d.ts +2 -0
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.slash-commands.test.d.ts.map +1 -0
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.slash-commands.test.js +159 -0
- package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.slash-commands.test.js.map +1 -0
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts +23 -3
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js +325 -36
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.d.ts +2 -0
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.d.ts.map +1 -0
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js +822 -0
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js.map +1 -0
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.d.ts +4 -0
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.js +13 -0
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.service.coverage.test.js +6 -0
- package/dist/src/backend/services/session/service/lifecycle/session.service.coverage.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.service.d.ts +12 -6
- package/dist/src/backend/services/session/service/lifecycle/session.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.service.js +18 -5
- package/dist/src/backend/services/session/service/lifecycle/session.service.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.service.test.js +189 -18
- package/dist/src/backend/services/session/service/lifecycle/session.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/session-domain.service.d.ts +2 -0
- package/dist/src/backend/services/session/service/session-domain.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/session-domain.service.js +26 -0
- package/dist/src/backend/services/session/service/session-domain.service.js.map +1 -1
- package/dist/src/backend/services/session/service/session-domain.service.test.js +37 -16
- package/dist/src/backend/services/session/service/session-domain.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/session-event-bus.d.ts +21 -0
- package/dist/src/backend/services/session/service/session-event-bus.d.ts.map +1 -0
- package/dist/src/backend/services/session/service/session-event-bus.js +28 -0
- package/dist/src/backend/services/session/service/session-event-bus.js.map +1 -0
- package/dist/src/backend/services/session/service/store/session-publisher.js +4 -4
- package/dist/src/backend/services/session/service/store/session-publisher.js.map +1 -1
- package/dist/src/backend/services/session/service/store/session-queue.test.js +1 -0
- package/dist/src/backend/services/session/service/store/session-queue.test.js.map +1 -1
- package/dist/src/backend/services/session/service/store/session-replay-builder.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/store/session-replay-builder.js +25 -3
- package/dist/src/backend/services/session/service/store/session-replay-builder.js.map +1 -1
- package/dist/src/backend/services/session/service/store/session-replay-builder.test.js +123 -0
- package/dist/src/backend/services/session/service/store/session-replay-builder.test.js.map +1 -1
- package/dist/src/backend/services/session/service/store/session-runtime-machine.test.js +1 -0
- package/dist/src/backend/services/session/service/store/session-runtime-machine.test.js.map +1 -1
- package/dist/src/backend/services/session/service/store/session-store-registry.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/store/session-store-registry.js +1 -0
- package/dist/src/backend/services/session/service/store/session-store-registry.js.map +1 -1
- package/dist/src/backend/services/session/service/store/session-store.types.d.ts +7 -0
- package/dist/src/backend/services/session/service/store/session-store.types.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/store/session-transcript.test.js +1 -0
- package/dist/src/backend/services/session/service/store/session-transcript.test.js.map +1 -1
- package/dist/src/backend/services/session/service/store/slash-command-cache.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/store/slash-command-cache.service.js +46 -10
- package/dist/src/backend/services/session/service/store/slash-command-cache.service.js.map +1 -1
- package/dist/src/backend/services/session/service/store/slash-command-cache.service.test.js +64 -3
- package/dist/src/backend/services/session/service/store/slash-command-cache.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.d.ts +7 -0
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.d.ts.map +1 -0
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.js +94 -0
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.js.map +1 -0
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.test.d.ts +2 -0
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.test.d.ts.map +1 -0
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.test.js +52 -0
- package/dist/src/backend/services/session/service/store/slash-command-disk-scanner.test.js.map +1 -0
- package/dist/src/backend/services/settings/resources/user-settings.accessor.d.ts +2 -1
- package/dist/src/backend/services/settings/resources/user-settings.accessor.d.ts.map +1 -1
- package/dist/src/backend/services/settings/resources/user-settings.accessor.js +46 -13
- package/dist/src/backend/services/settings/resources/user-settings.accessor.js.map +1 -1
- package/dist/src/backend/services/terminal/resources/terminal-session.accessor.d.ts +1 -1
- package/dist/src/backend/services/terminal/resources/terminal-session.accessor.d.ts.map +1 -1
- package/dist/src/backend/services/terminal/resources/terminal-session.accessor.js +2 -2
- package/dist/src/backend/services/terminal/resources/terminal-session.accessor.js.map +1 -1
- package/dist/src/backend/services/terminal/service/terminal.service.d.ts +2 -0
- package/dist/src/backend/services/terminal/service/terminal.service.d.ts.map +1 -1
- package/dist/src/backend/services/terminal/service/terminal.service.js +22 -4
- package/dist/src/backend/services/terminal/service/terminal.service.js.map +1 -1
- package/dist/src/backend/services/terminal/service/terminal.service.test.js +77 -1
- package/dist/src/backend/services/terminal/service/terminal.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace/index.d.ts +1 -0
- package/dist/src/backend/services/workspace/index.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/index.js +1 -0
- package/dist/src/backend/services/workspace/index.js.map +1 -1
- package/dist/src/backend/services/workspace/resources/project.accessor.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/resources/project.accessor.js +26 -1
- package/dist/src/backend/services/workspace/resources/project.accessor.js.map +1 -1
- package/dist/src/backend/services/workspace/resources/workspace-notification.accessor.d.ts +19 -0
- package/dist/src/backend/services/workspace/resources/workspace-notification.accessor.d.ts.map +1 -0
- package/dist/src/backend/services/workspace/resources/workspace-notification.accessor.js +34 -0
- package/dist/src/backend/services/workspace/resources/workspace-notification.accessor.js.map +1 -0
- package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts +26 -4
- package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/resources/workspace.accessor.js +69 -3
- package/dist/src/backend/services/workspace/resources/workspace.accessor.js.map +1 -1
- package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js +84 -0
- package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/activity.service.d.ts +2 -2
- package/dist/src/backend/services/workspace/service/lifecycle/activity.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/activity.service.js +20 -3
- package/dist/src/backend/services/workspace/service/lifecycle/activity.service.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/activity.service.test.js +30 -0
- package/dist/src/backend/services/workspace/service/lifecycle/activity.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/creation.service.d.ts +9 -0
- package/dist/src/backend/services/workspace/service/lifecycle/creation.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/creation.service.js +43 -1
- package/dist/src/backend/services/workspace/service/lifecycle/creation.service.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js +3 -0
- package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.d.ts +28 -1
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.js +2 -1
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.test.d.ts +2 -0
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.test.d.ts.map +1 -0
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.test.js +23 -0
- package/dist/src/backend/services/workspace/service/lifecycle/data.service.test.js.map +1 -0
- package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.d.ts +2 -0
- package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.js +42 -25
- package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.test.js +129 -4
- package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/query/project-management.service.d.ts +6 -0
- package/dist/src/backend/services/workspace/service/query/project-management.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/query/workspace-query.service.d.ts +13 -1
- package/dist/src/backend/services/workspace/service/query/workspace-query.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/query/workspace-query.service.js +65 -40
- package/dist/src/backend/services/workspace/service/query/workspace-query.service.js.map +1 -1
- package/dist/src/backend/services/workspace/service/query/workspace-query.service.test.js +60 -0
- package/dist/src/backend/services/workspace/service/query/workspace-query.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/worktree/worktree-init.test.js +1 -1
- package/dist/src/backend/services/workspace/service/worktree/worktree-init.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.d.ts +1 -1
- package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js +40 -5
- package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js.map +1 -1
- package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js +57 -6
- package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.d.ts +2 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.js +15 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.js.map +1 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.test.js +32 -0
- package/dist/src/backend/services/workspace-snapshot-store.service.test.js.map +1 -1
- package/dist/src/backend/trpc/admin.trpc.d.ts +6 -6
- package/dist/src/backend/trpc/github.router.test.js +29 -0
- package/dist/src/backend/trpc/github.router.test.js.map +1 -1
- package/dist/src/backend/trpc/github.trpc.d.ts +6 -5
- package/dist/src/backend/trpc/github.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/github.trpc.js +26 -1
- package/dist/src/backend/trpc/github.trpc.js.map +1 -1
- package/dist/src/backend/trpc/index.d.ts +209 -6
- package/dist/src/backend/trpc/index.d.ts.map +1 -1
- package/dist/src/backend/trpc/procedures/project-scoped.d.ts +1 -0
- package/dist/src/backend/trpc/procedures/project-scoped.d.ts.map +1 -1
- package/dist/src/backend/trpc/project.router.test.js +115 -18
- package/dist/src/backend/trpc/project.router.test.js.map +1 -1
- package/dist/src/backend/trpc/project.trpc.d.ts +6 -0
- package/dist/src/backend/trpc/project.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/project.trpc.js +23 -20
- package/dist/src/backend/trpc/project.trpc.js.map +1 -1
- package/dist/src/backend/trpc/session.router.test.js +38 -1
- package/dist/src/backend/trpc/session.router.test.js.map +1 -1
- package/dist/src/backend/trpc/session.trpc.d.ts +15 -0
- package/dist/src/backend/trpc/session.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/session.trpc.js +20 -6
- package/dist/src/backend/trpc/session.trpc.js.map +1 -1
- package/dist/src/backend/trpc/trpc.d.ts +9 -0
- package/dist/src/backend/trpc/trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/trpc.js +39 -1
- package/dist/src/backend/trpc/trpc.js.map +1 -1
- package/dist/src/backend/trpc/trpc.test.d.ts +2 -0
- package/dist/src/backend/trpc/trpc.test.d.ts.map +1 -0
- package/dist/src/backend/trpc/trpc.test.js +19 -0
- package/dist/src/backend/trpc/trpc.test.js.map +1 -0
- package/dist/src/backend/trpc/user-settings.router.test.js +1 -0
- package/dist/src/backend/trpc/user-settings.router.test.js.map +1 -1
- package/dist/src/backend/trpc/user-settings.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/user-settings.trpc.js +1 -0
- package/dist/src/backend/trpc/user-settings.trpc.js.map +1 -1
- package/dist/src/backend/trpc/workspace/files.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace/files.trpc.js +5 -9
- package/dist/src/backend/trpc/workspace/files.trpc.js.map +1 -1
- package/dist/src/backend/trpc/workspace/init.router.test.js +24 -2
- package/dist/src/backend/trpc/workspace/init.router.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace/init.trpc.d.ts +3 -0
- package/dist/src/backend/trpc/workspace/init.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace/init.trpc.js +2 -2
- package/dist/src/backend/trpc/workspace/init.trpc.js.map +1 -1
- package/dist/src/backend/trpc/workspace/run-script.router.test.js +23 -1
- package/dist/src/backend/trpc/workspace/run-script.router.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace/run-script.trpc.js +4 -4
- package/dist/src/backend/trpc/workspace/run-script.trpc.js.map +1 -1
- package/dist/src/backend/trpc/workspace/workspace-helpers.d.ts +6 -0
- package/dist/src/backend/trpc/workspace/workspace-helpers.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace.router.test.js +278 -2
- package/dist/src/backend/trpc/workspace.router.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace.trpc.d.ts +182 -0
- package/dist/src/backend/trpc/workspace.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace.trpc.js +247 -19
- package/dist/src/backend/trpc/workspace.trpc.js.map +1 -1
- package/dist/src/cli/database-path.d.ts.map +1 -1
- package/dist/src/cli/database-path.js +4 -2
- package/dist/src/cli/database-path.js.map +1 -1
- package/dist/src/cli/database-path.test.js +10 -0
- package/dist/src/cli/database-path.test.js.map +1 -1
- package/dist/src/cli/serve-env.d.ts.map +1 -1
- package/dist/src/cli/serve-env.js +5 -3
- package/dist/src/cli/serve-env.js.map +1 -1
- package/dist/src/cli/serve-env.test.js +30 -0
- package/dist/src/cli/serve-env.test.js.map +1 -1
- package/dist/src/shared/acp-protocol/protocol/constants.d.ts +1 -0
- package/dist/src/shared/acp-protocol/protocol/constants.d.ts.map +1 -1
- package/dist/src/shared/acp-protocol/protocol/constants.js +1 -0
- package/dist/src/shared/acp-protocol/protocol/constants.js.map +1 -1
- package/dist/src/shared/acp-protocol/protocol/index.d.ts +1 -0
- package/dist/src/shared/acp-protocol/protocol/index.d.ts.map +1 -1
- package/dist/src/shared/acp-protocol/protocol/index.js +1 -0
- package/dist/src/shared/acp-protocol/protocol/index.js.map +1 -1
- package/dist/src/shared/acp-protocol/protocol/messages.d.ts +8 -1
- package/dist/src/shared/acp-protocol/protocol/messages.d.ts.map +1 -1
- package/dist/src/shared/acp-protocol/protocol/messages.js +2 -0
- package/dist/src/shared/acp-protocol/protocol/messages.js.map +1 -1
- package/dist/src/shared/acp-protocol/protocol/renderer-window.d.ts +3 -0
- package/dist/src/shared/acp-protocol/protocol/renderer-window.d.ts.map +1 -0
- package/dist/src/shared/acp-protocol/protocol/renderer-window.js +36 -0
- package/dist/src/shared/acp-protocol/protocol/renderer-window.js.map +1 -0
- package/dist/src/shared/core/enums.d.ts +1 -0
- package/dist/src/shared/core/enums.d.ts.map +1 -1
- package/dist/src/shared/core/enums.js +1 -0
- package/dist/src/shared/core/enums.js.map +1 -1
- package/dist/src/shared/issue-start-prompt.d.ts.map +1 -1
- package/dist/src/shared/issue-start-prompt.js +38 -3
- package/dist/src/shared/issue-start-prompt.js.map +1 -1
- package/dist/src/shared/proxy-utils.d.ts +2 -0
- package/dist/src/shared/proxy-utils.d.ts.map +1 -1
- package/dist/src/shared/proxy-utils.js +20 -2
- package/dist/src/shared/proxy-utils.js.map +1 -1
- package/dist/src/shared/schemas/export-data.schema.d.ts +14 -12
- package/dist/src/shared/schemas/export-data.schema.d.ts.map +1 -1
- package/dist/src/shared/session-runtime.d.ts +9 -0
- package/dist/src/shared/session-runtime.d.ts.map +1 -1
- package/dist/src/shared/session-runtime.js +23 -0
- package/dist/src/shared/session-runtime.js.map +1 -1
- package/dist/src/shared/workspace-notifications.d.ts +10 -0
- package/dist/src/shared/workspace-notifications.d.ts.map +1 -0
- package/dist/src/shared/workspace-notifications.js +11 -0
- package/dist/src/shared/workspace-notifications.js.map +1 -0
- package/dist/tsconfig.backend.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/prisma/migrations/20260622135020_add_child_workspaces/migration.sql +99 -0
- package/prisma/migrations/20260622135100_add_child_workspaces/migration.sql +39 -0
- package/prisma/migrations/20260622195338_add_notification_direction/migration.sql +22 -0
- package/prisma/migrations/20260622220000_add_parent_workspace_id_index/migration.sql +2 -0
- package/prisma/migrations/20260715201522_add_ratchet_dispatch_record/migration.sql +125 -0
- package/prisma/schema.prisma +43 -1
- package/prompts/ratchet/dispatch.md +2 -0
- package/dist/client/assets/channel-DTP0LAbj.js +0 -1
- package/dist/client/assets/chunk-2J33WTMH-BfBptE9H.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Ctn2iFx-.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Ctn2iFx-.js +0 -1
- package/dist/client/assets/index-QJUv8N-T.js +0 -662
- package/dist/client/assets/index-z2dDRh55.css +0 -1
- package/dist/client/assets/infoDiagram-5YYISTIA-EcbEZrdJ.js +0 -2
- package/dist/client/assets/stateDiagram-AJRCARHV-JRGDQ0Z0.js +0 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-YFRSfKcY.js +0 -1
- package/dist/src/backend/services/ratchet/service/ratchet-review-poll.helpers.d.ts +0 -16
- package/dist/src/backend/services/ratchet/service/ratchet-review-poll.helpers.d.ts.map +0 -1
- package/dist/src/backend/services/ratchet/service/ratchet-review-poll.helpers.js +0 -52
- package/dist/src/backend/services/ratchet/service/ratchet-review-poll.helpers.js.map +0 -1
- package/dist/src/backend/services/ratchet/service/reconciliation.service.d.ts.map +0 -1
- package/dist/src/backend/services/ratchet/service/reconciliation.service.js.map +0 -1
- package/dist/src/backend/services/ratchet/service/reconciliation.service.test.d.ts.map +0 -1
- package/dist/src/backend/services/ratchet/service/reconciliation.service.test.js.map +0 -1
- package/dist/src/backend/services/session/service/chat/chat-connection.service.d.ts +0 -19
- package/dist/src/backend/services/session/service/chat/chat-connection.service.d.ts.map +0 -1
- package/dist/src/backend/services/session/service/chat/chat-connection.service.js +0 -78
- package/dist/src/backend/services/session/service/chat/chat-connection.service.js.map +0 -1
- package/dist/src/backend/services/session/service/chat/chat-connection.service.test.d.ts +0 -2
- package/dist/src/backend/services/session/service/chat/chat-connection.service.test.d.ts.map +0 -1
- package/dist/src/backend/services/session/service/chat/chat-connection.service.test.js +0 -214
- package/dist/src/backend/services/session/service/chat/chat-connection.service.test.js.map +0 -1
- /package/dist/src/backend/{services/ratchet/service → orchestration}/reconciliation.service.test.d.ts +0 -0
|
@@ -6,7 +6,7 @@ import { executeStartupScriptPipeline } from '../../../backend/orchestration/wor
|
|
|
6
6
|
import { FactoryConfigService } from '../../../backend/services/factory-config.service.js';
|
|
7
7
|
import { createLogger } from '../../../backend/services/logger.service.js';
|
|
8
8
|
import { getWorkspaceInitPolicy, workspaceDataService, workspaceStateMachine, worktreeLifecycleService, } from '../../../backend/services/workspace/index.js';
|
|
9
|
-
import { publicProcedure, router } from '../../../backend/trpc/trpc.js';
|
|
9
|
+
import { publicProcedure, router, trustedLocalProcedure } from '../../../backend/trpc/trpc.js';
|
|
10
10
|
const logger = createLogger('workspace-init-trpc');
|
|
11
11
|
function maxRetriesExceededError(maxRetries) {
|
|
12
12
|
return new TRPCError({
|
|
@@ -52,7 +52,7 @@ export const workspaceInitRouter = router({
|
|
|
52
52
|
hasWorktreePath: !!workspace.worktreePath,
|
|
53
53
|
};
|
|
54
54
|
}),
|
|
55
|
-
retryInit:
|
|
55
|
+
retryInit: trustedLocalProcedure
|
|
56
56
|
.input(z.object({ id: z.string(), useExistingBranch: z.boolean().optional() }))
|
|
57
57
|
.mutation(async ({ input }) => {
|
|
58
58
|
const workspace = await workspaceDataService.findByIdWithProject(input.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.trpc.js","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/init.trpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EACL,2BAA2B,EAC3B,sCAAsC,GACvC,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.trpc.js","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/init.trpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,10 +15,16 @@ vi.mock('@/backend/services/run-script-config-persistence.service', () => ({
|
|
|
15
15
|
},
|
|
16
16
|
}));
|
|
17
17
|
import { workspaceRunScriptRouter } from './run-script.trpc.js';
|
|
18
|
-
function createCaller(runScriptService) {
|
|
18
|
+
function createCaller(runScriptService, requestTrust) {
|
|
19
19
|
return workspaceRunScriptRouter.createCaller({
|
|
20
|
+
requestTrust,
|
|
20
21
|
appContext: {
|
|
21
22
|
services: {
|
|
23
|
+
configService: {
|
|
24
|
+
getCorsConfig: () => ({
|
|
25
|
+
allowedOrigins: ['http://localhost:3000', 'http://localhost:3001'],
|
|
26
|
+
}),
|
|
27
|
+
},
|
|
22
28
|
runScriptService: {
|
|
23
29
|
startRunScript: runScriptService?.startRunScript ?? (async () => ({ success: true })),
|
|
24
30
|
stopRunScript: runScriptService?.stopRunScript ?? (async () => ({ success: true })),
|
|
@@ -117,6 +123,22 @@ describe('workspaceRunScriptRouter', () => {
|
|
|
117
123
|
expect(stopRunScript).toHaveBeenCalledWith('w1');
|
|
118
124
|
expect(getRunScriptStatus).toHaveBeenCalledWith('w1');
|
|
119
125
|
});
|
|
126
|
+
it('rejects privileged run-script mutations from untrusted requests', async () => {
|
|
127
|
+
const startRunScript = vi.fn(async () => ({ success: true }));
|
|
128
|
+
const stopRunScript = vi.fn(async () => ({ success: true }));
|
|
129
|
+
const caller = createCaller({ startRunScript, stopRunScript }, {
|
|
130
|
+
remoteAddress: '203.0.113.10',
|
|
131
|
+
origin: 'https://attacker.example',
|
|
132
|
+
isLocal: false,
|
|
133
|
+
});
|
|
134
|
+
await expect(caller.createFactoryConfig({ workspaceId: 'w1', config: { scripts: {} } })).rejects.toThrow('trusted local Factory Factory client');
|
|
135
|
+
await expect(caller.startRunScript({ workspaceId: 'w1' })).rejects.toThrow('trusted local Factory Factory client');
|
|
136
|
+
await expect(caller.stopRunScript({ workspaceId: 'w1' })).rejects.toThrow('trusted local Factory Factory client');
|
|
137
|
+
expect(mockFindByIdWithProject).not.toHaveBeenCalled();
|
|
138
|
+
expect(mockWriteFactoryConfigAndSyncWorkspace).not.toHaveBeenCalled();
|
|
139
|
+
expect(startRunScript).not.toHaveBeenCalled();
|
|
140
|
+
expect(stopRunScript).not.toHaveBeenCalled();
|
|
141
|
+
});
|
|
120
142
|
it('returns trpc error when start/stop run script fails', async () => {
|
|
121
143
|
const caller = createCaller({
|
|
122
144
|
startRunScript: async () => ({ success: false, error: 'start failed' }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-script.router.test.js","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/run-script.router.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,MAAM,uBAAuB,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1D,MAAM,sCAAsC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAEzE,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,oBAAoB,EAAE;QACpB,mBAAmB,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC;KAC9E;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE,CAAC,CAAC;IACzE,iCAAiC,EAAE;QACjC,kCAAkC,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CACzD,sCAAsC,CAAC,GAAG,IAAI,CAAC;KAClD;CACF,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"run-script.router.test.js","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/run-script.router.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@ import { TRPCError } from '@trpc/server';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { runScriptConfigPersistenceService } from '../../../backend/services/run-script-config-persistence.service.js';
|
|
4
4
|
import { workspaceDataService } from '../../../backend/services/workspace/index.js';
|
|
5
|
-
import { publicProcedure, router } from '../../../backend/trpc/trpc.js';
|
|
5
|
+
import { publicProcedure, router, trustedLocalProcedure } from '../../../backend/trpc/trpc.js';
|
|
6
6
|
import { FactoryConfigSchema } from '../../../shared/schemas/factory-config.schema.js';
|
|
7
7
|
export const workspaceRunScriptRouter = router({
|
|
8
|
-
createFactoryConfig:
|
|
8
|
+
createFactoryConfig: trustedLocalProcedure
|
|
9
9
|
.input(z.object({
|
|
10
10
|
workspaceId: z.string(),
|
|
11
11
|
config: FactoryConfigSchema,
|
|
@@ -41,7 +41,7 @@ export const workspaceRunScriptRouter = router({
|
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
}),
|
|
44
|
-
startRunScript:
|
|
44
|
+
startRunScript: trustedLocalProcedure
|
|
45
45
|
.input(z.object({ workspaceId: z.string() }))
|
|
46
46
|
.mutation(async ({ ctx, input }) => {
|
|
47
47
|
const result = await ctx.appContext.services.runScriptService.startRunScript(input.workspaceId);
|
|
@@ -58,7 +58,7 @@ export const workspaceRunScriptRouter = router({
|
|
|
58
58
|
proxyUrl: result.proxyUrl ?? null,
|
|
59
59
|
};
|
|
60
60
|
}),
|
|
61
|
-
stopRunScript:
|
|
61
|
+
stopRunScript: trustedLocalProcedure
|
|
62
62
|
.input(z.object({ workspaceId: z.string() }))
|
|
63
63
|
.mutation(async ({ ctx, input }) => {
|
|
64
64
|
const result = await ctx.appContext.services.runScriptService.stopRunScript(input.workspaceId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-script.trpc.js","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/run-script.trpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iCAAiC,EAAE,MAAM,0DAA0D,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-script.trpc.js","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/run-script.trpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,12 +72,15 @@ export declare function getWorkspaceOrThrow(workspaceId: string): Promise<{
|
|
|
72
72
|
ratchetLastCheckedAt: Date | null;
|
|
73
73
|
ratchetActiveSessionId: string | null;
|
|
74
74
|
ratchetLastCiRunId: string | null;
|
|
75
|
+
ratchetDispatchOutcome: import("../../../../prisma/generated/enums.js").RatchetDispatchOutcome | null;
|
|
76
|
+
ratchetDispatchRetryCount: number;
|
|
75
77
|
mode: import("../../../../prisma/generated/enums.js").WorkspaceMode;
|
|
76
78
|
autoIterationStatus: import("../../../../prisma/generated/enums.js").AutoIterationStatus | null;
|
|
77
79
|
autoIterationConfig: import("@prisma/client/runtime/client").JsonValue | null;
|
|
78
80
|
autoIterationProgress: import("@prisma/client/runtime/client").JsonValue | null;
|
|
79
81
|
autoIterationSessionId: string | null;
|
|
80
82
|
periodicTaskId: string | null;
|
|
83
|
+
parentWorkspaceId: string | null;
|
|
81
84
|
hasHadSessions: boolean;
|
|
82
85
|
cachedKanbanColumn: import("../../../../prisma/generated/enums.js").KanbanColumn;
|
|
83
86
|
stateComputedAt: Date | null;
|
|
@@ -149,12 +152,15 @@ export declare function getWorkspaceWithProjectOrThrow(workspaceId: string): Pro
|
|
|
149
152
|
ratchetLastCheckedAt: Date | null;
|
|
150
153
|
ratchetActiveSessionId: string | null;
|
|
151
154
|
ratchetLastCiRunId: string | null;
|
|
155
|
+
ratchetDispatchOutcome: import("../../../../prisma/generated/enums.js").RatchetDispatchOutcome | null;
|
|
156
|
+
ratchetDispatchRetryCount: number;
|
|
152
157
|
mode: import("../../../../prisma/generated/enums.js").WorkspaceMode;
|
|
153
158
|
autoIterationStatus: import("../../../../prisma/generated/enums.js").AutoIterationStatus | null;
|
|
154
159
|
autoIterationConfig: import("@prisma/client/runtime/client").JsonValue | null;
|
|
155
160
|
autoIterationProgress: import("@prisma/client/runtime/client").JsonValue | null;
|
|
156
161
|
autoIterationSessionId: string | null;
|
|
157
162
|
periodicTaskId: string | null;
|
|
163
|
+
parentWorkspaceId: string | null;
|
|
158
164
|
hasHadSessions: boolean;
|
|
159
165
|
cachedKanbanColumn: import("../../../../prisma/generated/enums.js").KanbanColumn;
|
|
160
166
|
stateComputedAt: Date | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/workspace-helpers.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAOpE,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"workspace-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/backend/trpc/workspace/workspace-helpers.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAOpE,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAS5D;AAOD,wBAAsB,8BAA8B,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GASvE;AAKD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClF,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAQvC;AAQD,wBAAsB,+BAA+B,CACnD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAWhC;AAKD,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC7F,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD,wBAAsB,yCAAyC,CAC7D,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,+BAA+B,CAAC,CAiB1C"}
|
|
@@ -18,7 +18,9 @@ const mockWorkspaceQueryService = vi.hoisted(() => ({
|
|
|
18
18
|
}));
|
|
19
19
|
const mockDeriveFlowState = vi.hoisted(() => vi.fn());
|
|
20
20
|
const mockWorkspaceCreationCreate = vi.hoisted(() => vi.fn());
|
|
21
|
+
const mockClearWorkspaceActivity = vi.hoisted(() => vi.fn());
|
|
21
22
|
const mockArchiveWorkspace = vi.hoisted(() => vi.fn());
|
|
23
|
+
const mockCleanupWorkspaceRuntimeResources = vi.hoisted(() => vi.fn());
|
|
22
24
|
const mockInitializeWorkspaceWorktree = vi.hoisted(() => vi.fn());
|
|
23
25
|
const mockBuildSessionSummaries = vi.hoisted(() => vi.fn());
|
|
24
26
|
const mockHasWorkingSessionSummary = vi.hoisted(() => vi.fn());
|
|
@@ -30,9 +32,24 @@ const mockCheckWorkspaceById = vi.hoisted(() => vi.fn());
|
|
|
30
32
|
const mockSessionRuntimeSnapshot = vi.hoisted(() => vi.fn());
|
|
31
33
|
const mockCreateAgentSession = vi.hoisted(() => vi.fn());
|
|
32
34
|
const mockResolveProviderForWorkspaceCreation = vi.hoisted(() => vi.fn(async (_explicitProvider) => 'CLAUDE'));
|
|
35
|
+
const mockFindByIdWithProject = vi.hoisted(() => vi.fn());
|
|
36
|
+
const mockFindSessionsByWorkspaceId = vi.hoisted(() => vi.fn());
|
|
37
|
+
const mockAppendClaudeEvent = vi.hoisted(() => vi.fn());
|
|
38
|
+
const mockEmitDelta = vi.hoisted(() => vi.fn());
|
|
39
|
+
const mockEnqueue = vi.hoisted(() => vi.fn());
|
|
40
|
+
const mockHasQueuedMessage = vi.hoisted(() => vi.fn());
|
|
41
|
+
const mockTryDispatchNextMessage = vi.hoisted(() => vi.fn());
|
|
42
|
+
const mockPersistChildNotification = vi.hoisted(() => vi.fn());
|
|
43
|
+
const mockPersistParentNotification = vi.hoisted(() => vi.fn());
|
|
33
44
|
vi.mock('@/backend/services/workspace', () => ({
|
|
34
45
|
workspaceDataService: mockWorkspaceDataService,
|
|
35
46
|
workspaceQueryService: mockWorkspaceQueryService,
|
|
47
|
+
workspaceAccessor: {
|
|
48
|
+
findByIdWithProject: (...args) => mockFindByIdWithProject(...args),
|
|
49
|
+
},
|
|
50
|
+
workspaceActivityService: {
|
|
51
|
+
clearWorkspace: (...args) => mockClearWorkspaceActivity(...args),
|
|
52
|
+
},
|
|
36
53
|
deriveWorkspaceFlowStateFromWorkspace: (...args) => mockDeriveFlowState(...args),
|
|
37
54
|
computeKanbanColumn: (...args) => mockComputeKanbanColumn(...args),
|
|
38
55
|
computePendingRequestType: (...args) => mockComputePendingRequestType(...args),
|
|
@@ -46,6 +63,10 @@ vi.mock('@/backend/services/session', () => ({
|
|
|
46
63
|
},
|
|
47
64
|
sessionDomainService: {
|
|
48
65
|
getAllPendingRequests: () => new Map(),
|
|
66
|
+
appendClaudeEvent: (...args) => mockAppendClaudeEvent(...args),
|
|
67
|
+
emitDelta: (...args) => mockEmitDelta(...args),
|
|
68
|
+
enqueue: (...args) => mockEnqueue(...args),
|
|
69
|
+
hasQueuedMessage: (...args) => mockHasQueuedMessage(...args),
|
|
49
70
|
},
|
|
50
71
|
sessionDataService: {
|
|
51
72
|
createAgentSession: (...args) => mockCreateAgentSession(...args),
|
|
@@ -53,6 +74,12 @@ vi.mock('@/backend/services/session', () => ({
|
|
|
53
74
|
sessionProviderResolverService: {
|
|
54
75
|
resolveProviderForWorkspaceCreation: (explicitProvider) => mockResolveProviderForWorkspaceCreation(explicitProvider),
|
|
55
76
|
},
|
|
77
|
+
agentSessionAccessor: {
|
|
78
|
+
findByWorkspaceId: (...args) => mockFindSessionsByWorkspaceId(...args),
|
|
79
|
+
},
|
|
80
|
+
chatMessageHandlerService: {
|
|
81
|
+
tryDispatchNextMessage: (...args) => mockTryDispatchNextMessage(...args),
|
|
82
|
+
},
|
|
56
83
|
}));
|
|
57
84
|
vi.mock('@/backend/services/ratchet', () => ({
|
|
58
85
|
ratchetService: {
|
|
@@ -69,10 +96,17 @@ vi.mock('@/shared/workspace-sidebar-status', () => ({
|
|
|
69
96
|
}));
|
|
70
97
|
vi.mock('@/backend/orchestration/workspace-archive.orchestrator', () => ({
|
|
71
98
|
archiveWorkspace: (...args) => mockArchiveWorkspace(...args),
|
|
99
|
+
cleanupWorkspaceRuntimeResources: (...args) => mockCleanupWorkspaceRuntimeResources(...args),
|
|
72
100
|
}));
|
|
73
101
|
vi.mock('@/backend/orchestration/workspace-init.orchestrator', () => ({
|
|
74
102
|
initializeWorkspaceWorktree: (...args) => mockInitializeWorkspaceWorktree(...args),
|
|
75
103
|
}));
|
|
104
|
+
vi.mock('@/backend/orchestration/workspace-children.orchestrator', () => ({
|
|
105
|
+
createChildWorkspace: vi.fn(),
|
|
106
|
+
fireLifecycleNotification: vi.fn(),
|
|
107
|
+
persistChildNotification: (...args) => mockPersistChildNotification(...args),
|
|
108
|
+
persistParentNotification: (...args) => mockPersistParentNotification(...args),
|
|
109
|
+
}));
|
|
76
110
|
vi.mock('./workspace/workspace-helpers', () => ({
|
|
77
111
|
getWorkspaceWithProjectOrThrow: vi.fn(async (id) => ({
|
|
78
112
|
id,
|
|
@@ -95,12 +129,13 @@ vi.mock('./workspace/run-script.trpc', () => ({
|
|
|
95
129
|
workspaceRunScriptRouter: { _def: { procedures: {} } },
|
|
96
130
|
}));
|
|
97
131
|
import { workspaceRouter } from './workspace.trpc.js';
|
|
98
|
-
function createCaller() {
|
|
132
|
+
function createCaller(requestTrust) {
|
|
99
133
|
const sessionService = {
|
|
100
134
|
stopWorkspaceSessions: vi.fn(async () => undefined),
|
|
101
135
|
};
|
|
102
136
|
const runScriptService = {
|
|
103
|
-
stopRunScript: vi.fn(async () =>
|
|
137
|
+
stopRunScript: vi.fn(async () => ({ success: true })),
|
|
138
|
+
evictWorkspaceBuffers: vi.fn(),
|
|
104
139
|
};
|
|
105
140
|
const terminalService = {
|
|
106
141
|
destroyWorkspaceTerminals: vi.fn(),
|
|
@@ -114,11 +149,15 @@ function createCaller() {
|
|
|
114
149
|
})),
|
|
115
150
|
};
|
|
116
151
|
const caller = workspaceRouter.createCaller({
|
|
152
|
+
requestTrust,
|
|
117
153
|
appContext: {
|
|
118
154
|
services: {
|
|
119
155
|
configService: {
|
|
120
156
|
getWorktreeBaseDir: () => '/tmp/worktrees',
|
|
121
157
|
getMaxSessionsPerWorkspace: () => 2,
|
|
158
|
+
getCorsConfig: () => ({
|
|
159
|
+
allowedOrigins: ['http://localhost:3000', 'http://localhost:3001'],
|
|
160
|
+
}),
|
|
122
161
|
},
|
|
123
162
|
cliHealthService,
|
|
124
163
|
createLogger: () => ({
|
|
@@ -153,6 +192,23 @@ describe('workspaceRouter', () => {
|
|
|
153
192
|
mockComputeKanbanColumn.mockReturnValue('WAITING');
|
|
154
193
|
mockComputePendingRequestType.mockReturnValue(null);
|
|
155
194
|
mockCreateAgentSession.mockResolvedValue({ id: 'session-1' });
|
|
195
|
+
mockCleanupWorkspaceRuntimeResources.mockImplementation(async (workspaceId, services, operation) => {
|
|
196
|
+
const cleanupResults = await Promise.allSettled([
|
|
197
|
+
services.sessionService.stopWorkspaceSessions(workspaceId),
|
|
198
|
+
(async () => {
|
|
199
|
+
const result = await services.runScriptService.stopRunScript(workspaceId);
|
|
200
|
+
if (!result.success) {
|
|
201
|
+
throw new Error(result.error ?? 'Unknown run script stop failure');
|
|
202
|
+
}
|
|
203
|
+
})(),
|
|
204
|
+
Promise.resolve().then(() => {
|
|
205
|
+
services.terminalService.destroyWorkspaceTerminals(workspaceId);
|
|
206
|
+
}),
|
|
207
|
+
]);
|
|
208
|
+
if (cleanupResults.some((result) => result.status === 'rejected')) {
|
|
209
|
+
throw new Error(`Failed to cleanup workspace resources before ${operation}`);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
156
212
|
});
|
|
157
213
|
it('lists workspaces and returns enriched workspace details', async () => {
|
|
158
214
|
const workspace = {
|
|
@@ -210,6 +266,27 @@ describe('workspaceRouter', () => {
|
|
|
210
266
|
expect(mockCheckWorkspaceById).toHaveBeenCalledWith('w-created');
|
|
211
267
|
await expect(caller.archive({ id: 'w-created' })).resolves.toEqual({ archived: true });
|
|
212
268
|
});
|
|
269
|
+
it('rejects privileged workspace mutations from untrusted requests', async () => {
|
|
270
|
+
const { caller } = createCaller({
|
|
271
|
+
remoteAddress: '203.0.113.10',
|
|
272
|
+
origin: 'https://attacker.example',
|
|
273
|
+
isLocal: false,
|
|
274
|
+
});
|
|
275
|
+
await expect(caller.create({
|
|
276
|
+
type: 'MANUAL',
|
|
277
|
+
projectId: 'p1',
|
|
278
|
+
name: 'New Workspace',
|
|
279
|
+
})).rejects.toThrow('trusted local Factory Factory client');
|
|
280
|
+
await expect(caller.createChild({
|
|
281
|
+
parentWorkspaceId: 'parent-1',
|
|
282
|
+
projectId: 'p1',
|
|
283
|
+
name: 'Child Workspace',
|
|
284
|
+
})).rejects.toThrow('trusted local Factory Factory client');
|
|
285
|
+
expect(mockResolveProviderForWorkspaceCreation).not.toHaveBeenCalled();
|
|
286
|
+
expect(mockWorkspaceCreationCreate).not.toHaveBeenCalled();
|
|
287
|
+
expect(mockCreateAgentSession).not.toHaveBeenCalled();
|
|
288
|
+
expect(mockInitializeWorkspaceWorktree).not.toHaveBeenCalled();
|
|
289
|
+
});
|
|
213
290
|
it('passes initial attachments through manual workspace creation', async () => {
|
|
214
291
|
const { caller } = createCaller();
|
|
215
292
|
mockWorkspaceCreationCreate.mockResolvedValue({ id: 'w-created' });
|
|
@@ -393,9 +470,22 @@ describe('workspaceRouter', () => {
|
|
|
393
470
|
mockWorkspaceQueryService.hasChanges.mockResolvedValue({ hasChanges: true });
|
|
394
471
|
const { caller, sessionService, runScriptService, terminalService } = createCaller();
|
|
395
472
|
await expect(caller.delete({ id: 'w1' })).resolves.toEqual({ deleted: true });
|
|
473
|
+
expect(mockCleanupWorkspaceRuntimeResources).toHaveBeenCalledWith('w1', expect.objectContaining({
|
|
474
|
+
sessionService,
|
|
475
|
+
runScriptService,
|
|
476
|
+
terminalService,
|
|
477
|
+
}), 'delete');
|
|
396
478
|
expect(sessionService.stopWorkspaceSessions).toHaveBeenCalledWith('w1');
|
|
397
479
|
expect(runScriptService.stopRunScript).toHaveBeenCalledWith('w1');
|
|
480
|
+
expect(runScriptService.evictWorkspaceBuffers).toHaveBeenCalledWith('w1');
|
|
481
|
+
const evictionCallOrder = runScriptService.evictWorkspaceBuffers.mock.invocationCallOrder[0];
|
|
482
|
+
const deleteCallOrder = mockWorkspaceDataService.delete.mock.invocationCallOrder[0];
|
|
483
|
+
if (evictionCallOrder === undefined || deleteCallOrder === undefined) {
|
|
484
|
+
throw new Error('Expected buffer eviction and workspace deletion to be called');
|
|
485
|
+
}
|
|
486
|
+
expect(evictionCallOrder).toBeLessThan(deleteCallOrder);
|
|
398
487
|
expect(terminalService.destroyWorkspaceTerminals).toHaveBeenCalledWith('w1');
|
|
488
|
+
expect(mockClearWorkspaceActivity).toHaveBeenCalledWith('w1');
|
|
399
489
|
await expect(caller.refreshFactoryConfigs({ projectId: 'p1' })).resolves.toEqual({
|
|
400
490
|
refreshed: 3,
|
|
401
491
|
});
|
|
@@ -406,5 +496,191 @@ describe('workspaceRouter', () => {
|
|
|
406
496
|
await expect(caller.syncAllPRStatuses({ projectId: 'p1' })).resolves.toEqual({ synced: 10 });
|
|
407
497
|
await expect(caller.hasChanges({ workspaceId: 'w1' })).resolves.toEqual({ hasChanges: true });
|
|
408
498
|
});
|
|
499
|
+
it('does not delete when run script cleanup reports failure', async () => {
|
|
500
|
+
const { caller, sessionService, runScriptService, terminalService } = createCaller();
|
|
501
|
+
runScriptService.stopRunScript.mockResolvedValue({ success: false, error: 'stop failed' });
|
|
502
|
+
await expect(caller.delete({ id: 'w1' })).rejects.toThrow('Failed to cleanup workspace resources before delete');
|
|
503
|
+
expect(sessionService.stopWorkspaceSessions).toHaveBeenCalledWith('w1');
|
|
504
|
+
expect(runScriptService.stopRunScript).toHaveBeenCalledWith('w1');
|
|
505
|
+
expect(runScriptService.evictWorkspaceBuffers).not.toHaveBeenCalled();
|
|
506
|
+
expect(terminalService.destroyWorkspaceTerminals).toHaveBeenCalledWith('w1');
|
|
507
|
+
expect(mockWorkspaceDataService.delete).not.toHaveBeenCalled();
|
|
508
|
+
});
|
|
509
|
+
it('does not delete when workspace session cleanup throws', async () => {
|
|
510
|
+
const { caller, sessionService, runScriptService, terminalService } = createCaller();
|
|
511
|
+
sessionService.stopWorkspaceSessions.mockRejectedValue(new Error('session cleanup failed'));
|
|
512
|
+
await expect(caller.delete({ id: 'w1' })).rejects.toThrow('Failed to cleanup workspace resources before delete');
|
|
513
|
+
expect(sessionService.stopWorkspaceSessions).toHaveBeenCalledWith('w1');
|
|
514
|
+
expect(runScriptService.stopRunScript).toHaveBeenCalledWith('w1');
|
|
515
|
+
expect(runScriptService.evictWorkspaceBuffers).not.toHaveBeenCalled();
|
|
516
|
+
expect(terminalService.destroyWorkspaceTerminals).toHaveBeenCalledWith('w1');
|
|
517
|
+
expect(mockWorkspaceDataService.delete).not.toHaveBeenCalled();
|
|
518
|
+
});
|
|
519
|
+
it('does not delete when terminal cleanup throws', async () => {
|
|
520
|
+
const { caller, sessionService, runScriptService, terminalService } = createCaller();
|
|
521
|
+
terminalService.destroyWorkspaceTerminals.mockImplementation(() => {
|
|
522
|
+
throw new Error('terminal cleanup failed');
|
|
523
|
+
});
|
|
524
|
+
await expect(caller.delete({ id: 'w1' })).rejects.toThrow('Failed to cleanup workspace resources before delete');
|
|
525
|
+
expect(sessionService.stopWorkspaceSessions).toHaveBeenCalledWith('w1');
|
|
526
|
+
expect(runScriptService.stopRunScript).toHaveBeenCalledWith('w1');
|
|
527
|
+
expect(runScriptService.evictWorkspaceBuffers).not.toHaveBeenCalled();
|
|
528
|
+
expect(terminalService.destroyWorkspaceTerminals).toHaveBeenCalledWith('w1');
|
|
529
|
+
expect(mockWorkspaceDataService.delete).not.toHaveBeenCalled();
|
|
530
|
+
});
|
|
531
|
+
describe('sendMessageToParent', () => {
|
|
532
|
+
const child = {
|
|
533
|
+
id: 'child-1',
|
|
534
|
+
name: 'Child WS',
|
|
535
|
+
parentWorkspaceId: 'parent-1',
|
|
536
|
+
project: { name: 'Child Project' },
|
|
537
|
+
};
|
|
538
|
+
beforeEach(() => {
|
|
539
|
+
mockFindByIdWithProject.mockResolvedValue(child);
|
|
540
|
+
mockPersistChildNotification.mockResolvedValue({
|
|
541
|
+
id: 'notif-1',
|
|
542
|
+
direction: 'CHILD_TO_PARENT',
|
|
543
|
+
sourceWorkspaceName: 'Child WS',
|
|
544
|
+
message: 'hello',
|
|
545
|
+
});
|
|
546
|
+
mockAppendClaudeEvent.mockReturnValue(1);
|
|
547
|
+
mockEnqueue.mockReturnValue({ position: 0 });
|
|
548
|
+
mockHasQueuedMessage.mockReturnValue(false);
|
|
549
|
+
mockTryDispatchNextMessage.mockResolvedValue(undefined);
|
|
550
|
+
});
|
|
551
|
+
it('persists the notification before live delivery to an active session', async () => {
|
|
552
|
+
mockFindSessionsByWorkspaceId.mockResolvedValue([{ id: 'sess-1', status: 'RUNNING' }]);
|
|
553
|
+
const { caller } = createCaller();
|
|
554
|
+
await expect(caller.sendMessageToParent({ childWorkspaceId: 'child-1', message: 'hello' })).resolves.toEqual({ delivered: true });
|
|
555
|
+
expect(mockPersistChildNotification).toHaveBeenCalledWith({
|
|
556
|
+
parentWorkspaceId: 'parent-1',
|
|
557
|
+
sourceWorkspaceId: 'child-1',
|
|
558
|
+
message: 'hello',
|
|
559
|
+
});
|
|
560
|
+
expect(mockEnqueue).toHaveBeenCalledWith('sess-1', expect.objectContaining({
|
|
561
|
+
id: 'workspace-notification-notif-1',
|
|
562
|
+
text: `[Message from child workspace "Child WS"]: hello\n\n<!-- factory-factory-workspace-notification:notif-1 -->`,
|
|
563
|
+
}));
|
|
564
|
+
expect(mockTryDispatchNextMessage).toHaveBeenCalledWith('sess-1');
|
|
565
|
+
const persistOrder = mockPersistChildNotification.mock.invocationCallOrder[0];
|
|
566
|
+
const enqueueOrder = mockEnqueue.mock.invocationCallOrder[0];
|
|
567
|
+
if (persistOrder === undefined || enqueueOrder === undefined) {
|
|
568
|
+
throw new Error('Expected both persist and enqueue to be called');
|
|
569
|
+
}
|
|
570
|
+
expect(persistOrder).toBeLessThan(enqueueOrder);
|
|
571
|
+
});
|
|
572
|
+
it('persists the notification and skips live delivery when no active session', async () => {
|
|
573
|
+
mockFindSessionsByWorkspaceId.mockResolvedValue([{ id: 'sess-1', status: 'STOPPED' }]);
|
|
574
|
+
const { caller } = createCaller();
|
|
575
|
+
await expect(caller.sendMessageToParent({ childWorkspaceId: 'child-1', message: 'hello' })).resolves.toEqual({ delivered: false });
|
|
576
|
+
expect(mockPersistChildNotification).toHaveBeenCalledWith({
|
|
577
|
+
parentWorkspaceId: 'parent-1',
|
|
578
|
+
sourceWorkspaceId: 'child-1',
|
|
579
|
+
message: 'hello',
|
|
580
|
+
});
|
|
581
|
+
expect(mockEnqueue).not.toHaveBeenCalled();
|
|
582
|
+
expect(mockTryDispatchNextMessage).not.toHaveBeenCalled();
|
|
583
|
+
});
|
|
584
|
+
it('leaves the notification pending when live enqueue fails', async () => {
|
|
585
|
+
mockFindSessionsByWorkspaceId.mockResolvedValue([{ id: 'sess-1', status: 'RUNNING' }]);
|
|
586
|
+
mockEnqueue.mockReturnValue({ error: 'queue full' });
|
|
587
|
+
const { caller } = createCaller();
|
|
588
|
+
await expect(caller.sendMessageToParent({ childWorkspaceId: 'child-1', message: 'hello' })).resolves.toEqual({ delivered: false });
|
|
589
|
+
expect(mockPersistChildNotification).toHaveBeenCalled();
|
|
590
|
+
expect(mockTryDispatchNextMessage).not.toHaveBeenCalled();
|
|
591
|
+
});
|
|
592
|
+
it('skips enqueue when session startup already queued the notification', async () => {
|
|
593
|
+
mockFindSessionsByWorkspaceId.mockResolvedValue([{ id: 'sess-1', status: 'RUNNING' }]);
|
|
594
|
+
mockHasQueuedMessage.mockReturnValue(true);
|
|
595
|
+
const { caller } = createCaller();
|
|
596
|
+
await expect(caller.sendMessageToParent({ childWorkspaceId: 'child-1', message: 'hello' })).resolves.toEqual({ delivered: true });
|
|
597
|
+
expect(mockHasQueuedMessage).toHaveBeenCalledWith('sess-1', 'workspace-notification-notif-1');
|
|
598
|
+
expect(mockEnqueue).not.toHaveBeenCalled();
|
|
599
|
+
expect(mockAppendClaudeEvent).not.toHaveBeenCalled();
|
|
600
|
+
expect(mockEmitDelta).not.toHaveBeenCalled();
|
|
601
|
+
});
|
|
602
|
+
});
|
|
603
|
+
describe('sendMessageToChild', () => {
|
|
604
|
+
const child = {
|
|
605
|
+
id: 'child-1',
|
|
606
|
+
name: 'Child WS',
|
|
607
|
+
parentWorkspaceId: 'parent-1',
|
|
608
|
+
project: { name: 'Child Project' },
|
|
609
|
+
};
|
|
610
|
+
const parent = {
|
|
611
|
+
id: 'parent-1',
|
|
612
|
+
name: 'Parent WS',
|
|
613
|
+
parentWorkspaceId: null,
|
|
614
|
+
project: { name: 'Parent Project' },
|
|
615
|
+
};
|
|
616
|
+
beforeEach(() => {
|
|
617
|
+
mockFindByIdWithProject.mockImplementation(async (id) => id === 'child-1' ? child : parent);
|
|
618
|
+
mockPersistParentNotification.mockResolvedValue({
|
|
619
|
+
id: 'notif-2',
|
|
620
|
+
direction: 'PARENT_TO_CHILD',
|
|
621
|
+
sourceWorkspaceName: 'Parent WS',
|
|
622
|
+
message: 'do this',
|
|
623
|
+
});
|
|
624
|
+
mockAppendClaudeEvent.mockReturnValue(1);
|
|
625
|
+
mockEnqueue.mockReturnValue({ position: 0 });
|
|
626
|
+
mockHasQueuedMessage.mockReturnValue(false);
|
|
627
|
+
mockTryDispatchNextMessage.mockResolvedValue(undefined);
|
|
628
|
+
});
|
|
629
|
+
it('persists the notification before live delivery to an active session', async () => {
|
|
630
|
+
mockFindSessionsByWorkspaceId.mockResolvedValue([{ id: 'sess-2', status: 'IDLE' }]);
|
|
631
|
+
const { caller } = createCaller();
|
|
632
|
+
await expect(caller.sendMessageToChild({
|
|
633
|
+
parentWorkspaceId: 'parent-1',
|
|
634
|
+
childWorkspaceId: 'child-1',
|
|
635
|
+
message: 'do this',
|
|
636
|
+
})).resolves.toEqual({ delivered: true });
|
|
637
|
+
expect(mockPersistParentNotification).toHaveBeenCalledWith({
|
|
638
|
+
parentWorkspaceId: 'parent-1',
|
|
639
|
+
targetChildWorkspaceId: 'child-1',
|
|
640
|
+
message: 'do this',
|
|
641
|
+
});
|
|
642
|
+
expect(mockEnqueue).toHaveBeenCalledWith('sess-2', expect.objectContaining({
|
|
643
|
+
id: 'workspace-notification-notif-2',
|
|
644
|
+
text: `[Message from parent workspace "Parent WS"]: do this\n\n<!-- factory-factory-workspace-notification:notif-2 -->`,
|
|
645
|
+
}));
|
|
646
|
+
expect(mockTryDispatchNextMessage).toHaveBeenCalledWith('sess-2');
|
|
647
|
+
const persistOrder = mockPersistParentNotification.mock.invocationCallOrder[0];
|
|
648
|
+
const enqueueOrder = mockEnqueue.mock.invocationCallOrder[0];
|
|
649
|
+
if (persistOrder === undefined || enqueueOrder === undefined) {
|
|
650
|
+
throw new Error('Expected both persist and enqueue to be called');
|
|
651
|
+
}
|
|
652
|
+
expect(persistOrder).toBeLessThan(enqueueOrder);
|
|
653
|
+
});
|
|
654
|
+
it('persists the notification and skips live delivery when no active session', async () => {
|
|
655
|
+
mockFindSessionsByWorkspaceId.mockResolvedValue([]);
|
|
656
|
+
const { caller } = createCaller();
|
|
657
|
+
await expect(caller.sendMessageToChild({
|
|
658
|
+
parentWorkspaceId: 'parent-1',
|
|
659
|
+
childWorkspaceId: 'child-1',
|
|
660
|
+
message: 'do this',
|
|
661
|
+
})).resolves.toEqual({ delivered: false });
|
|
662
|
+
expect(mockPersistParentNotification).toHaveBeenCalledWith({
|
|
663
|
+
parentWorkspaceId: 'parent-1',
|
|
664
|
+
targetChildWorkspaceId: 'child-1',
|
|
665
|
+
message: 'do this',
|
|
666
|
+
});
|
|
667
|
+
expect(mockEnqueue).not.toHaveBeenCalled();
|
|
668
|
+
expect(mockTryDispatchNextMessage).not.toHaveBeenCalled();
|
|
669
|
+
});
|
|
670
|
+
it('skips enqueue when session startup already queued the notification', async () => {
|
|
671
|
+
mockFindSessionsByWorkspaceId.mockResolvedValue([{ id: 'sess-2', status: 'IDLE' }]);
|
|
672
|
+
mockHasQueuedMessage.mockReturnValue(true);
|
|
673
|
+
const { caller } = createCaller();
|
|
674
|
+
await expect(caller.sendMessageToChild({
|
|
675
|
+
parentWorkspaceId: 'parent-1',
|
|
676
|
+
childWorkspaceId: 'child-1',
|
|
677
|
+
message: 'do this',
|
|
678
|
+
})).resolves.toEqual({ delivered: true });
|
|
679
|
+
expect(mockHasQueuedMessage).toHaveBeenCalledWith('sess-2', 'workspace-notification-notif-2');
|
|
680
|
+
expect(mockEnqueue).not.toHaveBeenCalled();
|
|
681
|
+
expect(mockAppendClaudeEvent).not.toHaveBeenCalled();
|
|
682
|
+
expect(mockEmitDelta).not.toHaveBeenCalled();
|
|
683
|
+
});
|
|
684
|
+
});
|
|
409
685
|
});
|
|
410
686
|
//# sourceMappingURL=workspace.router.test.js.map
|