factory-factory 0.4.8 → 0.4.9
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/README.md +66 -29
- package/dist/client/assets/{Archive.es-CGY-HOtI.js → Archive.es-moH8rDRO.js} +1 -1
- package/dist/client/assets/{ArrowLeft.es-BkuVunBb.js → ArrowLeft.es-CVl_zVBC.js} +1 -1
- package/dist/client/assets/{abnfDiagram-VCTEODGH-B2jWIJ_F.js → abnfDiagram-VCTEODGH-DzuBdUSN.js} +1 -1
- package/dist/client/assets/admin-page-CAsPxzW9.js +1 -0
- package/dist/client/assets/{alert-PePzkOCj.js → alert-2CAe526X.js} +1 -1
- package/dist/client/assets/{alert-dialog-BgqiS2Mp.js → alert-dialog-8vhMuR-k.js} +1 -1
- package/dist/client/assets/architecture-7GRP2DOG-Bcwjoi8B.js +1 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-CV8YjPRr.js → architectureDiagram-5GKGNRK7-CeuoQvaW.js} +1 -1
- package/dist/client/assets/{badge-BESbZ2wy.js → badge-CoDH1rER.js} +1 -1
- package/dist/client/assets/{blockDiagram-I7D4REHJ-BdQWAITV.js → blockDiagram-I7D4REHJ-BY92gQgN.js} +1 -1
- package/dist/client/assets/{c4Diagram-7LVT6UL2-Dp1ETdzU.js → c4Diagram-7LVT6UL2-D5TNBYXh.js} +1 -1
- package/dist/client/assets/channel-NEbtzeVB.js +1 -0
- package/dist/client/assets/{chunk-4HAMMTFA-BXRLulFZ.js → chunk-4HAMMTFA-DBbX-wzu.js} +1 -1
- package/dist/client/assets/{chunk-75Z2AOVW-FUHgKXYa.js → chunk-75Z2AOVW-962-yyBD.js} +1 -1
- package/dist/client/assets/{chunk-DU6HZSFF-nxkO_ute.js → chunk-DU6HZSFF-CHHMX1CR.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-Dal8QxK3.js → chunk-F27PBJKO-BOnYAGjZ.js} +1 -1
- package/dist/client/assets/{chunk-GMAD6QVW-B_VbYl2S.js → chunk-GMAD6QVW-DQF31PdR.js} +1 -1
- package/dist/client/assets/{chunk-GVQU2GXP-DobNOfAy.js → chunk-GVQU2GXP-rruJzn36.js} +1 -1
- package/dist/client/assets/{chunk-IMKFNOWR-D_P1eTAa.js → chunk-IMKFNOWR-GIKO0MCA.js} +1 -1
- package/dist/client/assets/{chunk-L3NEJ4N5-CZpV3_Q0.js → chunk-L3NEJ4N5-USlKRxmU.js} +1 -1
- package/dist/client/assets/{chunk-OSK3NFVY-e3uqzkQq.js → chunk-OSK3NFVY-DYQeYWNP.js} +1 -1
- package/dist/client/assets/{chunk-P2QGCYS3-B1FUAlmg.js → chunk-P2QGCYS3-SDkZ9hQX.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-BKVSxG-w.js → chunk-POPQ4Y6H-bdnFdIMc.js} +1 -1
- package/dist/client/assets/{chunk-PWAF6VOD-DQe8ztwz.js → chunk-PWAF6VOD-DuKrEmQw.js} +1 -1
- package/dist/client/assets/{chunk-SHT3W25Y-D8Ie2IK_.js → chunk-SHT3W25Y-BnWDS29f.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-_l4ZFWYL.js → chunk-SVP7TREG-BqyZjR36.js} +1 -1
- package/dist/client/assets/{chunk-TICWLB2K-BfcOBlR4.js → chunk-TICWLB2K-ZCb3dlre.js} +1 -1
- package/dist/client/assets/{ci-status-ChifTKM1.js → ci-status-cs76P3se.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-zE_E4kYq.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-zE_E4kYq.js +1 -0
- package/dist/client/assets/components-CoS_rGt2.js +1 -0
- package/dist/client/assets/{confirm-dialog-BAfboPjS.js → confirm-dialog-CfvO9f42.js} +1 -1
- package/dist/client/assets/{core-DW1Rn28Z.js → core-DW3tuXQ3.js} +1 -1
- package/dist/client/assets/{cynefin-OW5HDTMX-B7JP5WcM.js → cynefin-OW5HDTMX-Ci2WypGa.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-B5jcLvUi.js → cynefinDiagram-5FMLGOSQ-CGea7wa2.js} +1 -1
- package/dist/client/assets/{dagre-GXQ25YYZ-CFkt7lun.js → dagre-GXQ25YYZ-CJcHs09G.js} +1 -1
- package/dist/client/assets/data-import-button-cvKmYZJe.js +6 -0
- package/dist/client/assets/detail-C3U9ED1b.js +1 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-DpT9R2w0.js → diagram-S7CK7UJ4-Drsfjeco.js} +1 -1
- package/dist/client/assets/{diagram-UQ7AKVKN-DAy1Fpaf.js → diagram-UQ7AKVKN-0SrBP_3E.js} +1 -1
- package/dist/client/assets/{diagram-VSXAHHWV-Co-NFSf3.js → diagram-VSXAHHWV-DB2rqHgv.js} +1 -1
- package/dist/client/assets/{diagram-VX7I27RA-CaIWof2e.js → diagram-VX7I27RA-B2y3VQbR.js} +1 -1
- package/dist/client/assets/{diagram-Z3DM3KII-BpcVyNtl.js → diagram-Z3DM3KII-D63_zfy5.js} +1 -1
- package/dist/client/assets/diff-highlight.worker-FEJq0yPv.js +60 -0
- package/dist/client/assets/dist-BO6Gz-vk.js +1 -0
- package/dist/client/assets/{dist-Dtgf0TOg.js → dist-DGw3MClt.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-CS26Rt0p.js → ebnfDiagram-PWID7BFC-8gEK-ifx.js} +1 -1
- package/dist/client/assets/{en-US-SlQiGO_s.js → en-US-C-x19js7.js} +1 -1
- package/dist/client/assets/{erDiagram-RLTQ6QDP-DsdFXV4-.js → erDiagram-RLTQ6QDP-B2CcHHg7.js} +1 -1
- package/dist/client/assets/eventmodeling-NTZA5JFV-DqUwwD9w.js +1 -0
- package/dist/client/assets/{factory-config-scripts-BoDNVi6q.js → factory-config-scripts-C2BfO5od.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-DCZkaOsj.js +1 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-D_b7Bn-J.js → ganttDiagram-EL5Y4UJY-B_Y3HJTL.js} +1 -1
- package/dist/client/assets/{gitGraph-4MIJSDKK-De5ASUSY.js → gitGraph-4MIJSDKK-DBd1UxTm.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-BHMJvUNJ.js → gitGraphDiagram-WWUBYQGX-CrdKibnu.js} +1 -1
- package/dist/client/assets/{home-DjDt91tt.js → home-DRzNpm0E.js} +1 -1
- package/dist/client/assets/hooks-3rxtNHRh.js +1 -0
- package/dist/client/assets/index-BJo4hZ8z.js +10 -0
- package/dist/client/assets/{info-A6RAGUB7-DNiM6MW6.js → info-A6RAGUB7-CCMRmQ2H.js} +1 -1
- package/dist/client/assets/{infoDiagram-27XIBGKW-4g58w-zo.js → infoDiagram-27XIBGKW-DO-IhKUM.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DO7_eJ6Q.js → ishikawaDiagram-5VMMS53U-KejlLQ1k.js} +1 -1
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-6CJtdIGo.js → journeyDiagram-3NMN7TZE-DemWKqD6.js} +1 -1
- package/dist/client/assets/jsx-runtime-BNakU3Ej.js +1 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-D211MzXr.js → kanban-definition-UXKFOSKX-uRffHAE9.js} +1 -1
- package/dist/client/assets/{label-CI3jpwv-.js → label-ANA2Lfpk.js} +1 -1
- package/dist/client/assets/lib-CHy_7XQu.js +1 -0
- package/dist/client/assets/{line-DotOMT4o.js → line-CfCBYCoS.js} +1 -1
- package/dist/client/assets/list-C3P6JbyU.js +30 -0
- package/dist/client/assets/{list-bUzF8ozJ.js → list-oJCufmEX.js} +1 -1
- package/dist/client/assets/{logs-CjKXHkrB.js → logs-zb2la033.js} +1 -1
- package/dist/client/assets/{mermaid-diagram-CESNj6Ju.js → mermaid-diagram-kbWN558y.js} +4 -4
- package/dist/client/assets/{mermaid-parser.core-DK0kgowR.js → mermaid-parser.core-CpkwJ-8U.js} +3 -3
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-DF5ewLZ5.js → mindmap-definition-YA3MSWOX-DYYi_9Si.js} +1 -1
- package/dist/client/assets/{mobile-baseline-B0PakiKB.js → mobile-baseline-BVS3GXLz.js} +1 -1
- package/dist/client/assets/new-BiEmR60A.js +1 -0
- package/dist/client/assets/new-CcQm3ES8.js +1 -0
- package/dist/client/assets/{packet-AYTQ26CC-C4EHUAzU.js → packet-AYTQ26CC-kvNXQn-j.js} +1 -1
- package/dist/client/assets/{page-header-BCpV1oUO.js → page-header-CpSh-j1O.js} +1 -1
- package/dist/client/assets/{pegDiagram-XKGWAZYB-_WrA16pJ.js → pegDiagram-XKGWAZYB-CMAngYAK.js} +1 -1
- package/dist/client/assets/{pie-WAS4IAKB-BkSTK6KM.js → pie-WAS4IAKB-DFNGAljQ.js} +1 -1
- package/dist/client/assets/{pieDiagram-E7YTZNPT-CUR0mgrL.js → pieDiagram-E7YTZNPT-XGRy7b5E.js} +1 -1
- package/dist/client/assets/{popover-D-6mugCQ.js → popover-CIfFCO0U.js} +1 -1
- package/dist/client/assets/pr-inbox-item-D9UcI0SS.js +2 -0
- package/dist/client/assets/{preload-helper-Czpn1I53.js → preload-helper-BZ1Pz5am.js} +1 -1
- package/dist/client/assets/{project-repo-form-DjzRbY9O.js → project-repo-form-Dc8ha6XP.js} +1 -1
- package/dist/client/assets/{provider-cli-warning-LYUDO_5Y.js → provider-cli-warning-CIAJ88Cy.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-QXmh8FnA.js → quadrantDiagram-AXDQQJYC-BFek-axl.js} +1 -1
- package/dist/client/assets/{radar-RG4KPBEZ-ymOfNW7I.js → radar-RG4KPBEZ-k-UBw86I.js} +1 -1
- package/dist/client/assets/{radio-group-CcAx51bT.js → radio-group-BhmTXkIv.js} +1 -1
- package/dist/client/assets/{railroad-74A4TZTK-CwWB40du.js → railroad-74A4TZTK-B6DuT-HY.js} +1 -1
- package/dist/client/assets/railroad-abnf-HS5TGJTU-DF-z1cVb.js +1 -0
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-C6VgaalR.js +1 -0
- package/dist/client/assets/railroad-peg-WCYAUIDC-DRMqhGU3.js +1 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-O7DCuidl.js → railroadDiagram-O6MQD6OU-CBzDTFh9.js} +1 -1
- package/dist/client/assets/redirect-DexaYCz_.js +1 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-BajIi2rw.js → requirementDiagram-BXWQKSXE-DSgpbBy3.js} +1 -1
- package/dist/client/assets/{reviews-B04-ADI9.js → reviews-DDO7Pvrz.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CnR7slVB.js → sankeyDiagram-P5KCCOFB-BOWaOPXp.js} +1 -1
- package/dist/client/assets/{select-BgEObL9n.js → select-Cq3ddA2b.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BUxl34n_.js → sequenceDiagram-WJ2MYXX4-9wHsZFGh.js} +1 -1
- package/dist/client/assets/spinner-BszfzCYe.js +1 -0
- package/dist/client/assets/{startup-script-form-c7w0nnHp.js → startup-script-form-CHvwd1Nb.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-aFuhfmKp.js → stateDiagram-D77RDMKH-Blo9H6q_.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BzJ9AKXW.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-BccYx63r.js → swimlanes-42K2YHIH-DI0BHdWG.js} +1 -1
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DSnxWZUW.js +8 -0
- package/dist/client/assets/{table-wIG3osPW.js → table-CUvMM0aA.js} +1 -1
- package/dist/client/assets/{tabs-Cn3M4k-N.js → tabs-BBAQyvSA.js} +1 -1
- package/dist/client/assets/{terminal-instance-7W1Sdy6P.js → terminal-instance-BEqkmyvv.js} +1 -1
- package/dist/client/assets/{textarea-BVHmIkCM.js → textarea-DxWYClhS.js} +1 -1
- package/dist/client/assets/{timeline-definition-24CTP7MA-CM_waoCp.js → timeline-definition-24CTP7MA-C8fyxpVm.js} +1 -1
- package/dist/client/assets/{tooltip-DCH0jP98.js → tooltip-DXcY1U7y.js} +1 -1
- package/dist/client/assets/{treeView-Q6P3EWNA-CkV-8YWk.js → treeView-Q6P3EWNA-CzQAwJw-.js} +1 -1
- package/dist/client/assets/{treemap-WGGIJYW6-L1FedAzz.js → treemap-WGGIJYW6-zWRSK6WR.js} +1 -1
- package/dist/client/assets/trpc-CQO3zfei.js +1 -0
- package/dist/client/assets/{use-auto-scroll-QQMmbsX-.js → use-auto-scroll-DNohsNoz.js} +1 -1
- package/dist/client/assets/{use-download-server-log-Bag_Et_8.js → use-download-server-log-efKIcIwE.js} +1 -1
- package/dist/client/assets/use-project-header-navigation-D5yIIgnb.js +1 -0
- package/dist/client/assets/{use-websocket-channel-DW9rsEG5.js → use-websocket-channel-dNXOJZfW.js} +1 -1
- package/dist/client/assets/use-websocket-transport-BuYcrZTd.js +55 -0
- package/dist/client/assets/vbnet-CwR9YcOY.js +57 -0
- package/dist/client/assets/{vennDiagram-4TSXK5OY-Djoofmfi.js → vennDiagram-4TSXK5OY-ffnMpD5u.js} +1 -1
- package/dist/client/assets/{wardley-WFR3VGLG-BU-g6L7U.js → wardley-WFR3VGLG-acbsrLnl.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-DZNgTneT.js → wardleyDiagram-VM6X3IG4-BtqGCwsu.js} +1 -1
- package/dist/client/assets/workspace-a6lf168c.js +18 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-WTubjsZj.js → xychartDiagram-S5SC5T6Z-Bfy9xcWF.js} +1 -1
- package/dist/client/index.html +28 -35
- package/dist/prisma/generated/internal/class.js +1 -1
- package/dist/prisma/generated/internal/class.js.map +1 -1
- package/dist/prompts/quick-actions/fetch-rebase.md +5 -9
- package/dist/prompts/quick-actions/rename-branch.md +4 -8
- package/dist/prompts/quick-actions/review.md +6 -5
- package/dist/prompts/quick-actions/screenshots.md +7 -20
- package/dist/prompts/quick-actions/simplify.md +4 -1
- package/dist/prompts/ratchet/dispatch.md +13 -46
- package/dist/src/backend/orchestration/cli-health.service.d.ts.map +1 -1
- package/dist/src/backend/orchestration/cli-health.service.js +31 -23
- package/dist/src/backend/orchestration/cli-health.service.js.map +1 -1
- package/dist/src/backend/orchestration/cli-health.service.test.js +40 -0
- package/dist/src/backend/orchestration/cli-health.service.test.js.map +1 -1
- package/dist/src/backend/orchestration/data-backup.service.test.js +37 -4
- package/dist/src/backend/orchestration/data-backup.service.test.js.map +1 -1
- package/dist/src/backend/orchestration/event-collector.idle-refresh.test.d.ts +2 -0
- package/dist/src/backend/orchestration/event-collector.idle-refresh.test.d.ts.map +1 -0
- package/dist/src/backend/orchestration/event-collector.idle-refresh.test.js +83 -0
- package/dist/src/backend/orchestration/event-collector.idle-refresh.test.js.map +1 -0
- package/dist/src/backend/orchestration/event-collector.linear.test.d.ts +2 -0
- package/dist/src/backend/orchestration/event-collector.linear.test.d.ts.map +1 -0
- package/dist/src/backend/orchestration/event-collector.linear.test.js +206 -0
- package/dist/src/backend/orchestration/event-collector.linear.test.js.map +1 -0
- package/dist/src/backend/orchestration/event-collector.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/event-collector.orchestrator.js +40 -8
- package/dist/src/backend/orchestration/event-collector.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.d.ts +1 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.js +20 -4
- package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.test.js +55 -104
- package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.test.js.map +1 -1
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.d.ts +6 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.d.ts.map +1 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.js +117 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.js.map +1 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.test.d.ts +2 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.test.d.ts.map +1 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.test.js +8 -0
- package/dist/src/backend/orchestration/snapshot-reconciliation.test-helpers.test.js.map +1 -0
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.js +40 -34
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js +4 -0
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-children.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/workspace-children.orchestrator.js +1 -2
- package/dist/src/backend/orchestration/workspace-children.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-init-issue-prompts.test.js +3 -3
- package/dist/src/backend/orchestration/workspace-init-issue-prompts.test.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.d.ts.map +1 -1
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.js +3 -3
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.test.d.ts +2 -0
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.test.d.ts.map +1 -0
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.test.js +52 -0
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.test.js.map +1 -0
- package/dist/src/backend/orchestration/workspace-runtime-cleanup-notification.test.d.ts +2 -0
- package/dist/src/backend/orchestration/workspace-runtime-cleanup-notification.test.d.ts.map +1 -0
- package/dist/src/backend/orchestration/workspace-runtime-cleanup-notification.test.js +175 -0
- package/dist/src/backend/orchestration/workspace-runtime-cleanup-notification.test.js.map +1 -0
- package/dist/src/backend/prompts/branch-rename.js +1 -1
- package/dist/src/backend/prompts/ratchet-dispatch.d.ts.map +1 -1
- package/dist/src/backend/prompts/ratchet-dispatch.js +12 -78
- package/dist/src/backend/prompts/ratchet-dispatch.js.map +1 -1
- package/dist/src/backend/prompts/ratchet-dispatch.test.js +39 -27
- package/dist/src/backend/prompts/ratchet-dispatch.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 +6 -1
- 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 +60 -1
- package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.test.js.map +1 -1
- package/dist/src/backend/services/auto-iteration/service/prompts.d.ts.map +1 -1
- package/dist/src/backend/services/auto-iteration/service/prompts.js +14 -54
- package/dist/src/backend/services/auto-iteration/service/prompts.js.map +1 -1
- package/dist/src/backend/services/github/service/github-cli-health-cache.test.d.ts +2 -0
- package/dist/src/backend/services/github/service/github-cli-health-cache.test.d.ts.map +1 -0
- package/dist/src/backend/services/github/service/github-cli-health-cache.test.js +45 -0
- package/dist/src/backend/services/github/service/github-cli-health-cache.test.js.map +1 -0
- package/dist/src/backend/services/github/service/github-cli.service.d.ts +1 -1
- 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 +25 -23
- package/dist/src/backend/services/github/service/github-cli.service.js.map +1 -1
- package/dist/src/backend/services/linear/service/linear-client.service.d.ts +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 +24 -9
- 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 +46 -5
- package/dist/src/backend/services/linear/service/linear-client.service.test.js.map +1 -1
- package/dist/src/backend/services/linear/service/linear-state-sync.service.d.ts +1 -1
- package/dist/src/backend/services/linear/service/linear-state-sync.service.d.ts.map +1 -1
- package/dist/src/backend/services/linear/service/linear-state-sync.service.js +2 -1
- package/dist/src/backend/services/linear/service/linear-state-sync.service.js.map +1 -1
- package/dist/src/backend/services/linear/service/linear-state-sync.service.test.js +7 -3
- package/dist/src/backend/services/linear/service/linear-state-sync.service.test.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/fixer-session.service.js +1 -1
- package/dist/src/backend/services/ratchet/service/fixer-session.service.js.map +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet.service.test.js +1 -1
- package/dist/src/backend/services/ratchet/service/ratchet.service.test.js.map +1 -1
- package/dist/src/backend/services/run-script/service/startup-script.service.d.ts +1 -0
- package/dist/src/backend/services/run-script/service/startup-script.service.d.ts.map +1 -1
- package/dist/src/backend/services/run-script/service/startup-script.service.js +3 -1
- package/dist/src/backend/services/run-script/service/startup-script.service.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.js +1 -1
- package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.js +1 -1
- package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.js +1 -3
- package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.js.map +1 -1
- package/dist/src/backend/services/session/service/acp/types.d.ts +0 -1
- package/dist/src/backend/services/session/service/acp/types.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.test.js +0 -1
- 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/data/session-provider-resolver.service.test.js +1 -1
- package/dist/src/backend/services/session/service/data/session-provider-resolver.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/index.d.ts +1 -1
- 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/session-context.service.d.ts +1 -5
- package/dist/src/backend/services/session/service/lifecycle/session-context.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-context.service.js +2 -63
- package/dist/src/backend/services/session/service/lifecycle/session-context.service.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-context.service.test.js +23 -99
- package/dist/src/backend/services/session/service/lifecycle/session-context.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.js +13 -7
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.test.js +26 -5
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.d.ts +1 -0
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.js +3 -0
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.d.ts +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.js +0 -11
- package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.d.ts +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.js +8 -5
- package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.test.js +9 -5
- package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-services.composition.test.js +0 -1
- package/dist/src/backend/services/session/service/lifecycle/session-services.composition.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.js +0 -1
- package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session-workflow-permissions.d.ts +7 -0
- package/dist/src/backend/services/session/service/lifecycle/session-workflow-permissions.d.ts.map +1 -0
- package/dist/src/backend/services/session/service/lifecycle/session-workflow-permissions.js +9 -0
- package/dist/src/backend/services/session/service/lifecycle/session-workflow-permissions.js.map +1 -0
- package/dist/src/backend/services/session/service/lifecycle/session.config.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.config.service.js +4 -5
- package/dist/src/backend/services/session/service/lifecycle/session.config.service.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.config.service.test.js +8 -8
- package/dist/src/backend/services/session/service/lifecycle/session.config.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.facade.test.js +0 -2
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.facade.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts +0 -1
- 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.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.d.ts +0 -33
- 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 +0 -40
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.test.js +2 -170
- package/dist/src/backend/services/session/service/lifecycle/session.prompt-builder.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.repository.d.ts +4 -12
- package/dist/src/backend/services/session/service/lifecycle/session.repository.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.repository.js +2 -7
- package/dist/src/backend/services/session/service/lifecycle/session.repository.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.repository.test.js +1 -4
- package/dist/src/backend/services/session/service/lifecycle/session.repository.test.js.map +1 -1
- package/dist/src/backend/services/session/service/lifecycle/session.service.test.js +0 -162
- package/dist/src/backend/services/session/service/lifecycle/session.service.test.js.map +1 -1
- package/dist/src/backend/services/session/service/voice/voice-narration.service.d.ts +1 -0
- package/dist/src/backend/services/session/service/voice/voice-narration.service.d.ts.map +1 -1
- package/dist/src/backend/services/session/service/voice/voice-narration.service.js +69 -19
- package/dist/src/backend/services/session/service/voice/voice-narration.service.js.map +1 -1
- package/dist/src/backend/services/session/service/voice/voice-narration.service.test.js +196 -113
- package/dist/src/backend/services/session/service/voice/voice-narration.service.test.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 +3 -0
- package/dist/src/backend/services/workspace/resources/project.accessor.js.map +1 -1
- package/dist/src/backend/services/workspace/resources/project.accessor.test.js +24 -2
- package/dist/src/backend/services/workspace/resources/project.accessor.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/lifecycle/activity.service.d.ts +2 -0
- 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 +30 -0
- 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 +113 -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.test.js +2 -2
- package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace/service/worktree/git-ops.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace/service/worktree/git-ops.service.js +12 -1
- package/dist/src/backend/services/workspace/service/worktree/git-ops.service.js.map +1 -1
- package/dist/src/backend/services/workspace/service/worktree/git-ops.service.test.js +15 -0
- package/dist/src/backend/services/workspace/service/worktree/git-ops.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace-git-state.service.js +1 -1
- package/dist/src/backend/services/workspace-git-state.service.js.map +1 -1
- package/dist/src/backend/trpc/admin.router.test.js +34 -1
- package/dist/src/backend/trpc/admin.router.test.js.map +1 -1
- package/dist/src/backend/trpc/admin.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/admin.trpc.js +2 -2
- package/dist/src/backend/trpc/admin.trpc.js.map +1 -1
- package/dist/src/backend/trpc/voice.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/voice.trpc.js +6 -3
- package/dist/src/backend/trpc/voice.trpc.js.map +1 -1
- package/dist/src/backend/trpc/voice.trpc.test.js +27 -8
- package/dist/src/backend/trpc/voice.trpc.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace/init.router.test.js +40 -1
- package/dist/src/backend/trpc/workspace/init.router.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace/init.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace/init.trpc.js +20 -14
- package/dist/src/backend/trpc/workspace/init.trpc.js.map +1 -1
- package/dist/src/backend/trpc/workspace.router.test.js +1 -0
- package/dist/src/backend/trpc/workspace.router.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace.trpc.js +17 -16
- package/dist/src/backend/trpc/workspace.trpc.js.map +1 -1
- package/dist/src/shared/deepgram-voices.d.ts +7 -3
- package/dist/src/shared/deepgram-voices.d.ts.map +1 -1
- package/dist/src/shared/deepgram-voices.js +62 -45
- package/dist/src/shared/deepgram-voices.js.map +1 -1
- package/dist/src/shared/issue-start-prompt.d.ts.map +1 -1
- package/dist/src/shared/issue-start-prompt.js +6 -160
- package/dist/src/shared/issue-start-prompt.js.map +1 -1
- package/dist/src/shared/schemas/export-data.schema.d.ts +4 -4
- package/dist/src/shared/schemas/export-data.schema.d.ts.map +1 -1
- package/dist/src/shared/schemas/export-data.schema.js +13 -5
- package/dist/src/shared/schemas/export-data.schema.js.map +1 -1
- package/dist/tsconfig.backend.tsbuildinfo +1 -1
- package/package.json +34 -28
- package/prisma/migrations/20260904150539_upgrade_deepgram_flux_tts/migration.sql +43 -0
- package/prisma/schema.prisma +1 -1
- package/prompts/quick-actions/fetch-rebase.md +5 -9
- package/prompts/quick-actions/rename-branch.md +4 -8
- package/prompts/quick-actions/review.md +6 -5
- package/prompts/quick-actions/screenshots.md +7 -20
- package/prompts/quick-actions/simplify.md +4 -1
- package/prompts/ratchet/dispatch.md +13 -46
- package/dist/client/assets/admin-page-DSQHBVdP.js +0 -1
- package/dist/client/assets/architecture-7GRP2DOG-iqZodW6v.js +0 -1
- package/dist/client/assets/channel-CuF41sy9.js +0 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-CSnIdOhD.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-CSnIdOhD.js +0 -1
- package/dist/client/assets/components-CYsyoHP0.js +0 -1
- package/dist/client/assets/data-import-button-D-ZWnQAg.js +0 -6
- package/dist/client/assets/detail-C1zBkWd-.js +0 -1
- package/dist/client/assets/diff-highlight.worker-C-7SSG_d.js +0 -55
- package/dist/client/assets/dist-BiFeezwN.js +0 -1
- package/dist/client/assets/eventmodeling-NTZA5JFV-C4d4RnR4.js +0 -1
- package/dist/client/assets/flowDiagram-HODETNUW-Df-T-03y.js +0 -1
- package/dist/client/assets/hooks-BTcY6K1q.js +0 -1
- package/dist/client/assets/index-D34fUfAP.js +0 -10
- package/dist/client/assets/jsx-runtime-DE3RlOCf.js +0 -1
- package/dist/client/assets/lib-DyBYhPHb.js +0 -1
- package/dist/client/assets/list-DozL_ZP-.js +0 -184
- package/dist/client/assets/new-C3e5S62x.js +0 -1
- package/dist/client/assets/new-CCDeoRvw.js +0 -1
- package/dist/client/assets/pr-inbox-item-vOH1gfSf.js +0 -2
- package/dist/client/assets/railroad-abnf-HS5TGJTU-DGUx-UBP.js +0 -1
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-isA18bJo.js +0 -1
- package/dist/client/assets/railroad-peg-WCYAUIDC-Qz11I2dz.js +0 -1
- package/dist/client/assets/redirect-CNaRFL8d.js +0 -1
- package/dist/client/assets/spinner-ASaPCL5c.js +0 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-C3HBCmSp.js +0 -1
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DXqJPUvi.js +0 -8
- package/dist/client/assets/trpc-X4t2_jd5.js +0 -1
- package/dist/client/assets/use-project-header-navigation-BXqLQ4G_.js +0 -1
- package/dist/client/assets/use-websocket-transport-BT1hhmkl.js +0 -50
- package/dist/client/assets/vbnet-CrqJJ08J.js +0 -57
- package/dist/client/assets/workspace-CsQCO4D_.js +0 -18
- package/dist/prompts/workflows/bugfix.md +0 -86
- package/dist/prompts/workflows/ci-fix.md +0 -52
- package/dist/prompts/workflows/explore.md +0 -54
- package/dist/prompts/workflows/feature.md +0 -80
- package/dist/prompts/workflows/followup.md +0 -32
- package/dist/prompts/workflows/pr-review-fix.md +0 -50
- package/dist/src/backend/prompts/workflows.d.ts +0 -14
- package/dist/src/backend/prompts/workflows.d.ts.map +0 -1
- package/dist/src/backend/prompts/workflows.js +0 -47
- package/dist/src/backend/prompts/workflows.js.map +0 -1
- package/dist/src/backend/prompts/workflows.test.d.ts +0 -2
- package/dist/src/backend/prompts/workflows.test.d.ts.map +0 -1
- package/dist/src/backend/prompts/workflows.test.js +0 -128
- package/dist/src/backend/prompts/workflows.test.js.map +0 -1
- package/prompts/workflows/bugfix.md +0 -86
- package/prompts/workflows/ci-fix.md +0 -52
- package/prompts/workflows/explore.md +0 -54
- package/prompts/workflows/feature.md +0 -80
- package/prompts/workflows/followup.md +0 -32
- package/prompts/workflows/pr-review-fix.md +0 -50
package/README.md
CHANGED
|
@@ -21,19 +21,24 @@
|
|
|
21
21
|
<img src="public/working.png" alt="Factory Factory workspace with parallel agents, code changes, and an integrated terminal" width="1000">
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
|
-
Factory Factory is a local workspace manager for AI coding agents. Every
|
|
24
|
+
Factory Factory is a local workspace manager for AI coding agents. Every
|
|
25
|
+
workspace gets its own git worktree and branch, so agents can work on separate
|
|
26
|
+
tasks without stepping on each other. The UI brings chat, diffs, files,
|
|
27
|
+
terminals, issues, and pull request status together in one place.
|
|
25
28
|
|
|
26
29
|
## Quick start
|
|
27
30
|
|
|
28
31
|
You will need:
|
|
29
32
|
|
|
30
|
-
- Node.js 26.8.1+ for the CLI and development (pinned in `.node-version`); the
|
|
33
|
+
- Node.js 26.8.1+ for the CLI and development (pinned in `.node-version`); the
|
|
34
|
+
desktop app uses Electron's bundled Node.js runtime
|
|
31
35
|
- macOS 13 (Ventura) or newer for the macOS desktop app
|
|
32
36
|
- A local git repository
|
|
33
37
|
- At least one agent provider:
|
|
34
38
|
- Claude Code, authenticated with `claude login`
|
|
35
39
|
- A ChatGPT/Codex account configured for Codex sessions
|
|
36
|
-
- The authenticated [GitHub CLI](https://cli.github.com/) for GitHub issues and
|
|
40
|
+
- The authenticated [GitHub CLI](https://cli.github.com/) for GitHub issues and
|
|
41
|
+
pull requests
|
|
37
42
|
|
|
38
43
|
Start Factory Factory without installing it:
|
|
39
44
|
|
|
@@ -41,25 +46,35 @@ Start Factory Factory without installing it:
|
|
|
41
46
|
npx factory-factory@latest serve
|
|
42
47
|
```
|
|
43
48
|
|
|
44
|
-
Factory Factory opens in your browser and stores its database in
|
|
49
|
+
Factory Factory opens in your browser and stores its database in
|
|
50
|
+
`~/factory-factory/` by default.
|
|
45
51
|
|
|
46
|
-
See [Settings](docs/admin-settings.md) for IDE commands, default chat models,
|
|
52
|
+
See [Settings](docs/admin-settings.md) for IDE commands, default chat models,
|
|
53
|
+
and project configuration.
|
|
47
54
|
|
|
48
55
|
Then:
|
|
49
56
|
|
|
50
57
|
1. Add a project by selecting a local git repository.
|
|
51
58
|
2. Create a workspace, or start one from a GitHub or Linear issue.
|
|
52
59
|
3. Choose Claude or Codex and start a session.
|
|
53
|
-
4. Review the agent's changes, use the integrated terminal when needed, and open
|
|
60
|
+
4. Review the agent's changes, use the integrated terminal when needed, and open
|
|
61
|
+
a pull request.
|
|
54
62
|
|
|
55
63
|
## What it does
|
|
56
64
|
|
|
57
|
-
- **Parallel, isolated work:** Each task runs in a dedicated worktree and branch
|
|
58
|
-
|
|
59
|
-
- **
|
|
60
|
-
|
|
61
|
-
- **
|
|
62
|
-
|
|
65
|
+
- **Parallel, isolated work:** Each task runs in a dedicated worktree and branch
|
|
66
|
+
while your main checkout stays untouched.
|
|
67
|
+
- **One workspace for the whole task:** Chat with agents, inspect files and
|
|
68
|
+
diffs, run commands, and track PR state without switching tools.
|
|
69
|
+
- **Claude and Codex sessions:** Factory Factory connects to both providers
|
|
70
|
+
through the Agent Client Protocol (ACP), with resumable sessions and runtime
|
|
71
|
+
model options.
|
|
72
|
+
- **Issue-to-PR workflow:** Pull assigned work from GitHub or Linear, link it to
|
|
73
|
+
a workspace, and follow it through to merge.
|
|
74
|
+
- **Automatic PR progression:** Ratchet watches open pull requests and can
|
|
75
|
+
dispatch follow-up agents for failing CI and actionable review feedback.
|
|
76
|
+
- **Repeatable automation:** Quick actions, periodic tasks, and child workspaces
|
|
77
|
+
help split up or repeat common workflows.
|
|
63
78
|
|
|
64
79
|
The core model is intentionally small:
|
|
65
80
|
|
|
@@ -87,34 +102,52 @@ ff proxy --private # Share the app through a password-protected Cloudflare tunn
|
|
|
87
102
|
ff db:studio # Inspect the local database with Prisma Studio
|
|
88
103
|
```
|
|
89
104
|
|
|
90
|
-
`ff proxy` requires `cloudflared` on your `PATH`. Factory Factory automatically
|
|
105
|
+
`ff proxy` requires `cloudflared` on your `PATH`. Factory Factory automatically
|
|
106
|
+
runs database migrations, finds an available port, and opens the browser when
|
|
107
|
+
the server is ready.
|
|
91
108
|
|
|
92
109
|
### Hosting behind your own reverse proxy
|
|
93
110
|
|
|
94
|
-
To serve Factory Factory from your own domain (e.g. `https://ff.example.com`)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
-
|
|
98
|
-
|
|
99
|
-
|
|
111
|
+
To serve Factory Factory from your own domain (e.g. `https://ff.example.com`)
|
|
112
|
+
via nginx, Caddy, or another reverse proxy:
|
|
113
|
+
|
|
114
|
+
- Set `CORS_ALLOWED_ORIGINS` to the exact public origin(s), comma-separated:
|
|
115
|
+
`CORS_ALLOWED_ORIGINS=https://ff.example.com`. This gates both HTTP CORS and
|
|
116
|
+
WebSocket upgrades; non-loopback origins must match exactly (scheme + host +
|
|
117
|
+
non-default port, no trailing slash).
|
|
118
|
+
- Keep `BACKEND_HOST` bound to `localhost`/`127.0.0.1` so only your proxy can
|
|
119
|
+
reach the server.
|
|
120
|
+
|
|
121
|
+
By default the server rejects WebSocket upgrades that carry client-address
|
|
122
|
+
headers (`x-forwarded-for`, `cf-connecting-ip`, etc.), because it expects to sit
|
|
123
|
+
behind an authenticated proxy that strips them. If your reverse proxy adds these
|
|
124
|
+
headers, either strip them before forwarding, or set `TRUST_PROXY_HEADERS=true`
|
|
125
|
+
to accept them. **Only enable `TRUST_PROXY_HEADERS` when the backend is
|
|
126
|
+
reachable solely through your trusted proxy** (i.e. bound to loopback) —
|
|
127
|
+
otherwise clients could spoof address headers. The remote-address trust check
|
|
128
|
+
(loopback / `TRUSTED_LOCAL_CIDRS`) still applies.
|
|
100
129
|
|
|
101
130
|
## Security
|
|
102
131
|
|
|
103
|
-
> [!WARNING]
|
|
104
|
-
>
|
|
132
|
+
> [!WARNING] Factory Factory runs coding agents that can execute commands and
|
|
133
|
+
> modify files without manual confirmation. Workspaces isolate git branches;
|
|
134
|
+
> they are not containers or security sandboxes.
|
|
105
135
|
|
|
106
|
-
Use Factory Factory only with repositories and agent instructions you trust.
|
|
136
|
+
Use Factory Factory only with repositories and agent instructions you trust.
|
|
137
|
+
Review changes before merging, protect your GitHub and Linear credentials, and
|
|
138
|
+
consider a VM or container when working with untrusted code.
|
|
107
139
|
|
|
108
140
|
## Development
|
|
109
141
|
|
|
110
|
-
Use pnpm 12.
|
|
142
|
+
Use pnpm 12.4.2, pinned in `package.json`. Dependency build permissions live in
|
|
111
143
|
`pnpm-workspace.yaml` under `allowBuilds`; review new build scripts with
|
|
112
144
|
`pnpm approve-builds` when adding or updating dependencies.
|
|
113
145
|
|
|
114
|
-
Development requires Git 2.32 or newer for lint-staged. Builds and typechecks
|
|
115
|
-
TypeScript 7 through the `@typescript/native` package alias. The
|
|
116
|
-
alias provides Microsoft's TypeScript 6 compatibility API for
|
|
117
|
-
and tools that parse source files; `tsc` runs version 7 and
|
|
146
|
+
Development requires Git 2.32 or newer for lint-staged. Builds and typechecks
|
|
147
|
+
use TypeScript 7 through the `@typescript/native` package alias. The
|
|
148
|
+
`typescript` alias provides Microsoft's TypeScript 6 compatibility API for
|
|
149
|
+
guardrail scripts and tools that parse source files; `tsc` runs version 7 and
|
|
150
|
+
`tsc6` runs version 6.
|
|
118
151
|
|
|
119
152
|
```bash
|
|
120
153
|
git clone https://github.com/purplefish-ai/factory-factory.git
|
|
@@ -131,11 +164,15 @@ pnpm typecheck
|
|
|
131
164
|
pnpm check
|
|
132
165
|
```
|
|
133
166
|
|
|
134
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for project structure, conventions, and
|
|
167
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for project structure, conventions, and
|
|
168
|
+
the full contributor workflow.
|
|
135
169
|
|
|
136
170
|
## Acknowledgements
|
|
137
171
|
|
|
138
|
-
Factory Factory was inspired by [Conductor](https://conductor.build),
|
|
172
|
+
Factory Factory was inspired by [Conductor](https://conductor.build),
|
|
173
|
+
[VibeKanban](https://vibekanban.com),
|
|
174
|
+
[Gastown](https://github.com/steveyegge/gastown), and
|
|
175
|
+
[Multiclaude](https://github.com/dlorenc/multiclaude).
|
|
139
176
|
|
|
140
177
|
## License
|
|
141
178
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t}from"./jsx-runtime-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t}from"./jsx-runtime-BNakU3Ej.js";import{h as n}from"./dist-BO6Gz-vk.js";var r=e(t(),1),i=new Map([[`bold`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M224,44H32A20,20,0,0,0,12,64V88a20,20,0,0,0,16,19.6V192a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V107.6A20,20,0,0,0,244,88V64A20,20,0,0,0,224,44ZM36,68H220V84H36ZM52,188V108H204v80Zm112-52a12,12,0,0,1-12,12H104a12,12,0,0,1,0-24h48A12,12,0,0,1,164,136Z`}))],[`duotone`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M216,96v96a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V96Z`,opacity:`0.2`}),r.createElement(`path`,{d:`M224,48H32A16,16,0,0,0,16,64V88a16,16,0,0,0,16,16v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48ZM208,192H48V104H208ZM224,88H32V64H224V88ZM96,136a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,136Z`}))],[`fill`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M224,48H32A16,16,0,0,0,16,64V88a16,16,0,0,0,16,16v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm-72,96H104a8,8,0,0,1,0-16h48a8,8,0,0,1,0,16Zm72-56H32V64H224V88Z`}))],[`light`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M224,50H32A14,14,0,0,0,18,64V88a14,14,0,0,0,14,14h2v90a14,14,0,0,0,14,14H208a14,14,0,0,0,14-14V102h2a14,14,0,0,0,14-14V64A14,14,0,0,0,224,50ZM210,192a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V102H210ZM226,88a2,2,0,0,1-2,2H32a2,2,0,0,1-2-2V64a2,2,0,0,1,2-2H224a2,2,0,0,1,2,2ZM98,136a6,6,0,0,1,6-6h48a6,6,0,0,1,0,12H104A6,6,0,0,1,98,136Z`}))],[`regular`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M224,48H32A16,16,0,0,0,16,64V88a16,16,0,0,0,16,16v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48ZM208,192H48V104H208ZM224,88H32V64H224V88ZM96,136a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,136Z`}))],[`thin`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M224,52H32A12,12,0,0,0,20,64V88a12,12,0,0,0,12,12h4v92a12,12,0,0,0,12,12H208a12,12,0,0,0,12-12V100h4a12,12,0,0,0,12-12V64A12,12,0,0,0,224,52ZM212,192a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V100H212ZM228,88a4,4,0,0,1-4,4H32a4,4,0,0,1-4-4V64a4,4,0,0,1,4-4H224a4,4,0,0,1,4,4ZM100,136a4,4,0,0,1,4-4h48a4,4,0,0,1,0,8H104A4,4,0,0,1,100,136Z`}))]]),a=r.forwardRef((e,t)=>r.createElement(n,{ref:t,...e,weights:i}));a.displayName=`ArchiveIcon`;export{a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t}from"./jsx-runtime-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t}from"./jsx-runtime-BNakU3Ej.js";import{h as n}from"./dist-BO6Gz-vk.js";var r=e(t(),1),i=new Map([[`bold`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M228,128a12,12,0,0,1-12,12H69l51.52,51.51a12,12,0,0,1-17,17l-72-72a12,12,0,0,1,0-17l72-72a12,12,0,0,1,17,17L69,116H216A12,12,0,0,1,228,128Z`}))],[`duotone`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M112,56V200L40,128Z`,opacity:`0.2`}),r.createElement(`path`,{d:`M216,120H120V56a8,8,0,0,0-13.66-5.66l-72,72a8,8,0,0,0,0,11.32l72,72A8,8,0,0,0,120,200V136h96a8,8,0,0,0,0-16ZM104,180.69,51.31,128,104,75.31Z`}))],[`fill`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H120v64a8,8,0,0,1-13.66,5.66l-72-72a8,8,0,0,1,0-11.32l72-72A8,8,0,0,1,120,56v64h96A8,8,0,0,1,224,128Z`}))],[`light`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M222,128a6,6,0,0,1-6,6H54.49l61.75,61.76a6,6,0,1,1-8.48,8.48l-72-72a6,6,0,0,1,0-8.48l72-72a6,6,0,0,1,8.48,8.48L54.49,122H216A6,6,0,0,1,222,128Z`}))],[`regular`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H59.31l58.35,58.34a8,8,0,0,1-11.32,11.32l-72-72a8,8,0,0,1,0-11.32l72-72a8,8,0,0,1,11.32,11.32L59.31,120H216A8,8,0,0,1,224,128Z`}))],[`thin`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M220,128a4,4,0,0,1-4,4H49.66l65.17,65.17a4,4,0,0,1-5.66,5.66l-72-72a4,4,0,0,1,0-5.66l72-72a4,4,0,0,1,5.66,5.66L49.66,124H216A4,4,0,0,1,220,128Z`}))]]),a=r.forwardRef((e,t)=>r.createElement(n,{ref:t,...e,weights:i}));a.displayName=`ArrowLeftIcon`;export{a as t};
|
package/dist/client/assets/{abnfDiagram-VCTEODGH-B2jWIJ_F.js → abnfDiagram-VCTEODGH-DzuBdUSN.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,t}from"./mermaid-parser.core-
|
|
1
|
+
import{m as e,t}from"./mermaid-parser.core-CpkwJ-8U.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-B6xuSHsQ.js";import"./chunk-DU6HZSFF-CHHMX1CR.js";import{n as i,r as a,t as o}from"./chunk-SVP7TREG-BqyZjR36.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid-diagram-kbWN558y.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-BNakU3Ej.js";import{h as r,i,o as a,p as o,r as s,t as c}from"./dist-BO6Gz-vk.js";import{t as l}from"./lib-CHy_7XQu.js";import{C as u,E as d,O as f,p,t as m}from"./workspace-a6lf168c.js";import{n as h}from"./trpc-CQO3zfei.js";import{en as g,fn as _,vn as v}from"./vbnet-CwR9YcOY.js";import{l as y}from"./use-websocket-channel-dNXOJZfW.js";import{p as b}from"./en-US-C-x19js7.js";import{c as x,i as S,l as C,n as w,o as T,s as E,t as D}from"./select-Cq3ddA2b.js";import{r as O,v as k}from"./core-DW3tuXQ3.js";import{p as ee}from"./radio-group-BhmTXkIv.js";import{a as te,c as A,i as ne,l as re,n as ie,r as ae,s as oe,t as se}from"./data-import-button-cvKmYZJe.js";import{n as ce,r as le,t as ue}from"./use-download-server-log-efKIcIwE.js";import{n as de,t as fe}from"./textarea-DxWYClhS.js";import{n as pe,t as me}from"./provider-cli-warning-CIAJ88Cy.js";import{O as he}from"./use-websocket-transport-BuYcrZTd.js";import{C as ge,E as j,b as _e,n as ve,t as ye,u as be,w as M}from"./dist-DGw3MClt.js";import{t as N}from"./badge-CoDH1rER.js";import{t as P}from"./label-ANA2Lfpk.js";import{A as xe,O as Se,T as Ce,_ as F,a as we,g as I,h as L,i as Te,k as R,m as z,v as B}from"./index-BJo4hZ8z.js";import{i as V,n as H,r as Ee,t as De}from"./tabs-BBAQyvSA.js";import{i as Oe,n as ke,r as Ae,t as je}from"./voice-vad-ChMQMgBS.js";import{a as Me,i as U,n as Ne,o as W,r as G,t as Pe}from"./table-CUvMM0aA.js";import{i as Fe,n as Ie,t as Le}from"./formatters-D_bnXRun.js";import{t as Re}from"./factory-config-scripts-C2BfO5od.js";var K=e(t(),1),ze=new Map([[`bold`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z`}))],[`duotone`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M218.34,119.6,183.6,154.34a46.58,46.58,0,0,1-44.31,12.26c-.31.34-.62.67-.95,1L103.6,202.34A46.63,46.63,0,1,1,37.66,136.4L72.4,101.66A46.6,46.6,0,0,1,116.71,89.4c.31-.34.62-.67,1-1L152.4,53.66a46.63,46.63,0,0,1,65.94,65.94Z`,opacity:`0.2`}),K.createElement(`path`,{d:`M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,7.78,8.22H152a8,8,0,0,0,8-7.78A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z`}))],[`fill`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM115.7,192.49a43.31,43.31,0,0,1-55-66.43l25.37-25.37a43.35,43.35,0,0,1,61.25,0,42.9,42.9,0,0,1,9.95,15.43,8,8,0,1,1-15,5.6A27.33,27.33,0,0,0,97.37,112L72,137.37a27.32,27.32,0,0,0,34.68,41.91,8,8,0,1,1,9,13.21Zm79.61-62.55-25.37,25.37A43,43,0,0,1,139.32,168h0a43.35,43.35,0,0,1-40.53-28.12,8,8,0,1,1,15-5.6A27.35,27.35,0,0,0,139.28,152h0a27.14,27.14,0,0,0,19.32-8L184,118.63a27.32,27.32,0,0,0-34.68-41.91,8,8,0,1,1-9-13.21,43.32,43.32,0,0,1,55,66.43Z`}))],[`light`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M238,88.18a52.42,52.42,0,0,1-15.4,35.66l-34.75,34.75A52.28,52.28,0,0,1,150.62,174h-.05A52.63,52.63,0,0,1,98,119.9a6,6,0,0,1,6-5.84h.17a6,6,0,0,1,5.83,6.16A40.62,40.62,0,0,0,150.58,162h0a40.4,40.4,0,0,0,28.73-11.9l34.75-34.74A40.63,40.63,0,0,0,156.63,57.9l-11,11a6,6,0,0,1-8.49-8.49l11-11a52.62,52.62,0,0,1,74.43,0A52.83,52.83,0,0,1,238,88.18Zm-127.62,98.9-11,11A40.36,40.36,0,0,1,70.6,210h0a40.63,40.63,0,0,1-28.7-69.36L76.62,105.9A40.63,40.63,0,0,1,146,135.77a6,6,0,0,0,5.83,6.16H152a6,6,0,0,0,6-5.84A52.63,52.63,0,0,0,68.14,97.42L33.38,132.16A52.63,52.63,0,0,0,70.56,222h0a52.26,52.26,0,0,0,37.22-15.42l11-11a6,6,0,1,0-8.49-8.48Z`}))],[`regular`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,16,.45A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z`}))],[`thin`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M236,88.12a50.44,50.44,0,0,1-14.81,34.31l-34.75,34.74A50.33,50.33,0,0,1,150.62,172h-.05A50.63,50.63,0,0,1,100,120a4,4,0,0,1,4-3.89h.11a4,4,0,0,1,3.89,4.11A42.64,42.64,0,0,0,150.58,164h0a42.32,42.32,0,0,0,30.14-12.49l34.75-34.74a42.63,42.63,0,1,0-60.29-60.28l-11,11a4,4,0,0,1-5.66-5.65l11-11A50.64,50.64,0,0,1,236,88.12ZM111.78,188.49l-11,11A42.33,42.33,0,0,1,70.6,212h0a42.63,42.63,0,0,1-30.11-72.77l34.75-34.74A42.63,42.63,0,0,1,148,135.82a4,4,0,0,0,8,.23A50.64,50.64,0,0,0,69.55,98.83L34.8,133.57A50.63,50.63,0,0,0,70.56,220h0a50.33,50.33,0,0,0,35.81-14.83l11-11a4,4,0,1,0-5.65-5.66Z`}))]]),Be=new Map([[`bold`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M216,48H180V36A28,28,0,0,0,152,8H104A28,28,0,0,0,76,36V48H40a12,12,0,0,0,0,24h4V208a20,20,0,0,0,20,20H192a20,20,0,0,0,20-20V72h4a12,12,0,0,0,0-24ZM100,36a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4V48H100Zm88,168H68V72H188ZM116,104v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Zm48,0v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Z`}))],[`duotone`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M200,56V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V56Z`,opacity:`0.2`}),K.createElement(`path`,{d:`M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z`}))],[`fill`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM112,168a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm0-120H96V40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8Z`}))],[`light`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M216,50H174V40a22,22,0,0,0-22-22H104A22,22,0,0,0,82,40V50H40a6,6,0,0,0,0,12H50V208a14,14,0,0,0,14,14H192a14,14,0,0,0,14-14V62h10a6,6,0,0,0,0-12ZM94,40a10,10,0,0,1,10-10h48a10,10,0,0,1,10,10V50H94ZM194,208a2,2,0,0,1-2,2H64a2,2,0,0,1-2-2V62H194ZM110,104v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Zm48,0v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Z`}))],[`regular`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z`}))],[`thin`,K.createElement(K.Fragment,null,K.createElement(`path`,{d:`M216,52H172V40a20,20,0,0,0-20-20H104A20,20,0,0,0,84,40V52H40a4,4,0,0,0,0,8H52V208a12,12,0,0,0,12,12H192a12,12,0,0,0,12-12V60h12a4,4,0,0,0,0-8ZM92,40a12,12,0,0,1,12-12h48a12,12,0,0,1,12,12V52H92ZM196,208a4,4,0,0,1-4,4H64a4,4,0,0,1-4-4V60H196ZM108,104v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Zm48,0v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Z`}))]]),Ve=K.forwardRef((e,t)=>K.createElement(r,{ref:t,...e,weights:ze}));Ve.displayName=`LinkIcon`;var He=K.forwardRef((e,t)=>K.createElement(r,{ref:t,...e,weights:Be}));He.displayName=`TrashIcon`;var q=n(),Ue={ok:`border-l-success`,warning:`border-l-warning`,error:`border-l-destructive`};function We({title:e,value:t,subtitle:n,status:r}){return(0,q.jsxs)(z,{className:`border-l-4 ${r?Ue[r]:`border-l-muted`}`,children:[(0,q.jsxs)(F,{className:`pb-2`,children:[(0,q.jsx)(I,{children:e}),(0,q.jsx)(B,{className:`text-2xl`,children:t})]}),n&&(0,q.jsx)(L,{className:`pt-0`,children:(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n})})]})}function Ge({apiUsage:e,onReset:t,isResetting:n}){return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{className:`flex flex-row items-center justify-between space-y-0 pb-4`,children:[(0,q.jsx)(B,{children:`API Usage`}),(0,q.jsx)(i,{variant:`link`,onClick:t,disabled:n,className:`h-auto p-0`,children:`Reset Stats`})]}),(0,q.jsx)(L,{children:(0,q.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-4 gap-4`,children:[(0,q.jsx)(We,{title:`Requests/min`,value:e?.requestsLastMinute||0,status:e?.isRateLimited?`warning`:`ok`}),(0,q.jsx)(We,{title:`Requests/hour`,value:e?.requestsLastHour||0}),(0,q.jsx)(We,{title:`Total Requests`,value:e?.totalRequests||0}),(0,q.jsx)(We,{title:`Queue Depth`,value:e?.queueDepth||0,status:e?.queueDepth&&e.queueDepth>10?`warning`:`ok`})]})})]})}function Ke(e,t=`(restart to detect)`){return e==null?t:String(e)}function qe(e){if(e.port){let t=Number.parseInt(e.port,10);if(!Number.isNaN(t))return String(t)}return e.protocol===`http:`?`80`:e.protocol===`https:`?`443`:`(not available)`}function Je(){let{data:e,isLoading:t}=h.admin.getServerInfo.useQuery(void 0,{retry:1,retryDelay:1e3,meta:{suppressErrors:!0}}),n=qe(window.location),r=e?.backendPort??null;return t?(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`App Info`}),(0,q.jsx)(I,{children:`Repository and runtime details`})]}),(0,q.jsx)(L,{children:(0,q.jsx)(R,{className:`h-10 w-full`})})]}):(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`App Info`}),(0,q.jsx)(I,{children:`Repository and runtime details`})]}),(0,q.jsxs)(L,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{children:`Repository`}),(0,q.jsxs)(`a`,{href:`https://github.com/purplefish-ai/factory-factory`,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors`,children:[`GitHub`,(0,q.jsx)(v,{className:`h-3.5 w-3.5`})]})]}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{children:`Ports`}),(0,q.jsxs)(`div`,{className:`space-y-1 text-sm text-muted-foreground`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`span`,{children:`Frontend`}),(0,q.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5`,children:n})]}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`span`,{children:`Backend`}),(0,q.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5`,children:Ke(r)})]})]})]})]})]})}function Ye(){let{data:e,isLoading:t}=h.userSettings.get.useQuery(),{data:n}=h.userSettings.getProviderOptions.useQuery(void 0,{staleTime:3e4}),r=h.useUtils(),[i,a]=(0,K.useState)(`sonnet`),[o,s]=(0,K.useState)(`default`),c=h.userSettings.update.useMutation({onSuccess:()=>{j.success(`Chat defaults updated`),r.userSettings.get.invalidate()},onError:(t,n)=>{let i=r.userSettings.get.getData()??e;n.defaultClaudeModel!==void 0&&a(e=>e===n.defaultClaudeModel?i?.defaultClaudeModel??`sonnet`:e),n.defaultCodexModel!==void 0&&s(e=>e===n.defaultCodexModel?i?.defaultCodexModel??`default`:e),j.error(`Failed to update chat defaults: ${t.message}`)}});if((0,K.useEffect)(()=>{a(e?.defaultClaudeModel??`sonnet`),s(e?.defaultCodexModel??`default`)},[e?.defaultClaudeModel,e?.defaultCodexModel]),t)return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`Chat Defaults`}),(0,q.jsx)(I,{children:`Default provider for new chats`})]}),(0,q.jsx)(L,{children:(0,q.jsx)(R,{className:`h-10 w-full`})})]});let l=e?.defaultSessionProvider??`CLAUDE`,u=e?.defaultClaudeModel??`sonnet`,d=e?.defaultCodexModel??`default`,f=e?.defaultClaudeReasoningEffort??null,p=e?.defaultCodexReasoningEffort??null,m=e?.defaultWorkspacePermissions??`STRICT`,g=`__provider_default__`,_=(e,t)=>{let r=n?.[e]?.models??[];return r.some(e=>e.value===t)?r:[{value:t,label:e===`CLAUDE`?`Saved model — ${t} (not in current catalog)`:t},...r]},v=(e,t)=>{let r=n?.[e]?.efforts??[];return!t||r.some(e=>e.value===t)?r:[{value:t,label:t},...r]},y={CLAUDE:{fallbackValue:`sonnet`,currentValue:u,localValue:i,setLocalValue:a,buildPayload:e=>({defaultClaudeModel:e}),buildEffortPayload:e=>({defaultClaudeReasoningEffort:e})},CODEX:{fallbackValue:`default`,currentValue:d,localValue:o,setLocalValue:s,buildPayload:e=>({defaultCodexModel:e}),buildEffortPayload:e=>({defaultCodexReasoningEffort:e})}},b=(e,t)=>{let n=y[e],r=t.trim()||n.fallbackValue;if(r===n.currentValue){n.localValue!==n.currentValue&&n.setLocalValue(n.currentValue);return}c.mutate(n.buildPayload(r))},x=(e,t)=>{let n=t===g?null:t;c.mutate(y[e].buildEffortPayload(n))};return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`Chat Defaults`}),(0,q.jsx)(I,{children:`Default provider used when a workspace defers provider selection`})]}),(0,q.jsxs)(L,{className:`space-y-3`,children:[(0,q.jsx)(P,{htmlFor:`chat-default-provider`,children:`Default chat provider`}),(0,q.jsxs)(D,{value:l,onValueChange:e=>{(e===`CLAUDE`||e===`CODEX`)&&c.mutate({defaultSessionProvider:e})},disabled:c.isPending,children:[(0,q.jsx)(T,{id:`chat-default-provider`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:`CLAUDE`,children:`Claude`}),(0,q.jsx)(S,{value:`CODEX`,children:`Codex`})]})]}),(0,q.jsx)(me,{provider:l}),(0,q.jsxs)(`div`,{className:`grid gap-3 pt-1 sm:grid-cols-2`,children:[(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`default-claude-model`,children:`Default Claude model`}),(0,q.jsxs)(D,{value:i,onValueChange:e=>{a(e),b(`CLAUDE`,e)},disabled:c.isPending,children:[(0,q.jsx)(T,{id:`default-claude-model`,children:(0,q.jsx)(E,{})}),(0,q.jsx)(w,{children:_(`CLAUDE`,u).map(e=>(0,q.jsx)(S,{value:e.value,children:e.label},e.value))})]}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Claude aliases like `,(0,q.jsx)(`code`,{className:`rounded bg-muted px-1`,children:`sonnet`}),` and`,` `,(0,q.jsx)(`code`,{className:`rounded bg-muted px-1`,children:`opus`}),` are supported.`]})]}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`default-codex-model`,children:`Default Codex model`}),(0,q.jsxs)(D,{value:o,onValueChange:e=>{s(e),b(`CODEX`,e)},disabled:c.isPending,children:[(0,q.jsx)(T,{id:`default-codex-model`,children:(0,q.jsx)(E,{})}),(0,q.jsx)(w,{children:_(`CODEX`,d).map(e=>(0,q.jsx)(S,{value:e.value,children:e.label},e.value))})]}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Codex options are loaded from the CLI when available.`})]})]}),(0,q.jsxs)(`div`,{className:`grid gap-3 pt-1 sm:grid-cols-2`,children:[(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`default-claude-effort`,children:`Default Claude effort`}),(0,q.jsxs)(D,{value:f??g,onValueChange:e=>x(`CLAUDE`,e),disabled:c.isPending,children:[(0,q.jsx)(T,{id:`default-claude-effort`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:g,children:`Provider default`}),v(`CLAUDE`,f).map(e=>(0,q.jsx)(S,{value:e.value,children:e.label},e.value))]})]})]}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`default-codex-effort`,children:`Default Codex effort`}),(0,q.jsxs)(D,{value:p??g,onValueChange:e=>x(`CODEX`,e),disabled:c.isPending,children:[(0,q.jsx)(T,{id:`default-codex-effort`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:g,children:`Provider default`}),v(`CODEX`,p).map(e=>(0,q.jsx)(S,{value:e.value,children:e.label},e.value))]})]})]})]}),(0,q.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[(0,q.jsx)(P,{htmlFor:`workspace-permissions`,children:`Default permissions for new workspaces`}),(0,q.jsxs)(D,{value:m,onValueChange:e=>{(e===`STRICT`||e===`RELAXED`||e===`YOLO`)&&c.mutate({defaultWorkspacePermissions:e})},disabled:c.isPending,children:[(0,q.jsx)(T,{id:`workspace-permissions`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:`STRICT`,children:`Strict`}),(0,q.jsx)(S,{value:`RELAXED`,children:`Relaxed`}),(0,q.jsx)(S,{value:`YOLO`,children:`YOLO`})]})]})]})]})]})}function Xe(){let[e,t]=(0,K.useState)(!1),{refresh:n}=re();return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(he,{className:`w-5 h-5`}),`CLI Authentication`]}),(0,q.jsx)(I,{children:`Check and manage authentication for Claude, Codex, and GitHub CLI`})]}),(0,q.jsxs)(L,{children:[(0,q.jsx)(A,{onOpenTerminal:()=>t(!0)}),(0,q.jsx)(oe,{open:e,onClose:()=>{t(!1),n()}})]})]})}function Ze(){let[e,t]=(0,K.useState)(!1),n=h.useUtils();return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(de,{className:`w-5 h-5`}),`Data Backup`]}),(0,q.jsx)(I,{children:`Export and import database data for backup or migration purposes`})]}),(0,q.jsxs)(L,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:gap-4`,children:[(0,q.jsxs)(i,{onClick:async()=>{t(!0);try{let e=await n.admin.exportData.fetch(),t=JSON.stringify(e,null,2);ce({data:t,mimeType:`application/json`,fileName:`factory-factory-backup-${new Date().toISOString().split(`T`)[0]}.json`}),j.success(`Export completed`)}catch(e){j.error(`Export failed: ${e instanceof Error?e.message:`Unknown error`}`)}finally{t(!1)}},disabled:e,variant:`outline`,className:`w-full sm:w-auto`,children:[(0,q.jsx)(le,{className:`w-4 h-4 mr-2`}),e?`Exporting...`:`Export Data`]}),(0,q.jsx)(se,{variant:`outline`,className:`w-full sm:w-auto`})]}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Export includes projects, workspaces, session metadata, and user preferences. Caches will be rebuilt automatically after import.`})]})]})}function Qe(){let{data:e,isLoading:t}=h.userSettings.get.useQuery(),n=h.useUtils(),[r,a]=(0,K.useState)(!1),o=h.userSettings.update.useMutation({onSuccess:async()=>{j.success(`IDE settings updated`),await Promise.all([n.userSettings.get.invalidate(),n.workspace.getAvailableIdes.invalidate()]),a(!1)},onError:e=>{j.error(`Failed to update settings: ${e.message}`)}}),c=h.userSettings.testCustomCommand.useMutation({onSuccess:()=>{j.success(`Command executed successfully!`)},onError:e=>{j.error(`Command test failed: ${e.message}`)}}),[l,u]=(0,K.useState)(e?.customIdeCommand||``);(0,K.useEffect)(()=>{u(e?.customIdeCommand||``)},[e?.customIdeCommand]);let d=e=>{let t=e.trim();t&&o.mutate({preferredIde:`custom`,customIdeCommand:t})},f=e=>{e===`custom`?(a(!0),d(l)):(e===`cursor`||e===`vscode`)&&(a(!1),o.mutate({preferredIde:e}))},p=r?`custom`:e?.preferredIde??`cursor`;return t?(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`IDE Settings`}),(0,q.jsx)(I,{children:`Configure your preferred IDE for opening workspaces`})]}),(0,q.jsx)(L,{children:(0,q.jsx)(R,{className:`h-10 w-full`})})]}):(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`IDE Settings`}),(0,q.jsx)(I,{children:`Configure your preferred IDE for opening workspaces`})]}),(0,q.jsxs)(L,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`ide-select`,children:`Preferred IDE`}),(0,q.jsxs)(D,{value:p,onValueChange:f,disabled:o.isPending,children:[(0,q.jsx)(T,{id:`ide-select`,children:(0,q.jsx)(E,{placeholder:`Select an IDE`})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:`cursor`,children:`Cursor`}),(0,q.jsx)(S,{value:`vscode`,children:`VS Code`}),(0,q.jsx)(S,{value:`custom`,children:`Custom`})]})]})]}),p===`custom`&&(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`custom-command`,children:`Custom Command`}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,q.jsx)(s,{id:`custom-command`,value:l,onChange:e=>u(e.target.value),onBlur:()=>d(l),placeholder:`code-insiders {workspace}`,className:`font-mono text-sm flex-1`,disabled:o.isPending}),(0,q.jsx)(i,{variant:`outline`,onClick:()=>{if(!l.trim()){j.error(`Please enter a custom command first`);return}c.mutate({customCommand:l})},disabled:c.isPending||!l.trim(),children:c.isPending?`Testing...`:`Test`})]}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Use `,(0,q.jsx)(`code`,{className:`bg-muted px-1 py-0.5 rounded`,children:`{workspace}`}),` as a placeholder for the workspace path. Example:`,` `,(0,q.jsxs)(`code`,{className:`bg-muted px-1 py-0.5 rounded`,children:[`code-insiders `,`{workspace}`]})]})]})]})]})}function $e({projectId:e,linearConfig:t,onSave:n,isSaving:r}){let[a,o]=(0,K.useState)(``),[c,l]=(0,K.useState)(t?.viewerName??null),[u,d]=(0,K.useState)([]),[f,p]=(0,K.useState)(null),m=h.linear.validateKeyAndListTeams.useMutation({onError:e=>j.error(`Validation failed: ${e.message}`)}),g=async()=>{try{let e=await m.mutateAsync({apiKey:a});e.valid?(l(e.viewerName??null),d(e.teams??[])):j.error(`Validation failed: ${e.error??`Unknown error`}`)}catch{}},_=()=>{let e=u.find(e=>e.id===f);e&&c&&(n({linear:{apiKey:a,teamId:e.id,teamName:`${e.name} (${e.key})`,viewerName:c}}),o(``),l(null),d([]),p(null))},v=c!==null,y=u.length>0,b=t?.hasApiKey??!1,x=t?.teamName??null;return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(P,{htmlFor:`api-key-${e}`,children:`API Key`}),v&&(0,q.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-green-600`,children:[(0,q.jsx)(k,{className:`w-3 h-3`}),`Connected as `,c]})]}),(0,q.jsx)(s,{id:`api-key-${e}`,type:`password`,value:a,onChange:e=>o(e.target.value),placeholder:b?`••••••••••••••••••••`:`lin_api_...`,className:`font-mono text-sm w-[280px]`})]}),(0,q.jsx)(i,{variant:`outline`,onClick:g,disabled:m.isPending||!a,children:m.isPending?`Validating...`:`Validate`})]}),v&&y&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsx)(P,{children:`Team`}),(0,q.jsxs)(D,{value:f??``,onValueChange:p,children:[(0,q.jsx)(T,{className:`w-[220px]`,children:(0,q.jsx)(E,{placeholder:`Select a team`})}),(0,q.jsx)(w,{children:u.map(e=>(0,q.jsxs)(S,{value:e.id,children:[e.name,` (`,e.key,`)`]},e.id))})]})]}),(0,q.jsx)(i,{onClick:_,disabled:!f||r,className:`self-end`,children:r?`Saving...`:`Save`})]}),x&&!y&&(0,q.jsxs)(`p`,{className:`text-sm text-muted-foreground self-end pb-2`,children:[`Team: `,x]}),!v&&(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-2 basis-full`,children:[`Create a personal API key at`,` `,(0,q.jsx)(`a`,{href:`https://linear.app/settings/api`,target:`_blank`,rel:`noopener noreferrer`,className:`underline`,children:`linear.app/settings/api`})]})]})}function et({projectId:e,projectName:t,currentProvider:n,issueTrackerConfig:r}){let i=h.useUtils(),[a,o]=(0,K.useState)(n),s=h.project.update.useMutation({onSuccess:()=>{j.success(`Issue tracking settings saved`),i.project.list.invalidate()},onError:e=>j.error(`Failed to save: ${e.message}`)}),c=t=>{o(t),s.mutate({id:e,issueProvider:t})},l=t=>{s.mutate({id:e,issueProvider:O.LINEAR,issueTrackerConfig:t})},u=a===O.LINEAR,d=!u||r?.linear!=null;return(0,q.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[(0,q.jsx)(`div`,{className:`border-b bg-muted/50 px-4 py-3`,children:(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`h3`,{className:`font-semibold text-sm`,children:t}),d&&(0,q.jsxs)(N,{variant:`default`,className:`bg-green-600 hover:bg-green-700`,children:[(0,q.jsx)(k,{className:`w-3 h-3 mr-1`}),u?`Linear`:`GitHub`]})]})}),(0,q.jsx)(`div`,{className:`p-4`,children:(0,q.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsx)(P,{children:`Issue Provider`}),(0,q.jsxs)(D,{value:a,onValueChange:c,disabled:s.isPending,children:[(0,q.jsx)(T,{className:`w-[180px]`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:O.GITHUB,children:`GitHub Issues`}),(0,q.jsx)(S,{value:O.LINEAR,children:`Linear Issues`})]})]})]}),u&&(0,q.jsx)($e,{projectId:e,linearConfig:r?.linear??null,onSave:l,isSaving:s.isPending})]})})]})}var tt=Object.defineProperty,J=(e,t)=>tt(e,`name`,{value:t,configurable:!0}),nt=`Switch`,[rt,it]=ge(nt),[at,ot]=rt(nt);function st(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:l,value:u=`on`,internal_do_not_use_render:d}=e,[f,p]=_e({prop:n,defaultProp:i??!1,onChange:c,caller:nt}),[m,h]=K.useState(null),[g,_]=K.useState(null),v=K.useRef(!1),[y,b]=K.useReducer(e=>e+1,0),x={checked:f,setChecked:p,disabled:a,control:m,setControl:h,name:s,form:o,value:u,hasConsumerStoppedPropagationRef:v,userInteractionCount:y,onUserInteraction:b,required:l,defaultChecked:i,isFormControl:!m||!!o||!!m.closest(`form`),bubbleInput:g,setBubbleInput:_};return(0,q.jsx)(at,{scope:t,...x,children:ht(d)?d(x):r})}J(st,`SwitchProvider`);var ct=`SwitchTrigger`,lt=K.forwardRef(J(function({__scopeSwitch:e,onClick:t,...n},r){let{control:i,form:a,value:s,disabled:l,checked:u,required:d,setControl:f,setChecked:p,hasConsumerStoppedPropagationRef:m,onUserInteraction:h,isFormControl:g,bubbleInput:_}=ot(ct,e),v=o(r,f),y=K.useRef(u);return K.useEffect(()=>{let e=a?i?.ownerDocument.getElementById(a):i?.form;if(e instanceof HTMLFormElement){let t=J(()=>p(y.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[i,a,p]),(0,q.jsx)(c.button,{type:`button`,role:`switch`,"aria-checked":u,"aria-required":d,"data-state":gt(u),"data-disabled":l?``:void 0,disabled:l,value:s,...n,ref:v,onClick:M(t,e=>{h(),p(e=>!e),_&&g&&(m.current=e.isPropagationStopped(),m.current||e.stopPropagation())})})},`SwitchTrigger`)),ut=K.forwardRef(J(function(e,t){let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,q.jsx)(st,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(lt,{...d,ref:t,__scopeSwitch:n}),e&&(0,q.jsx)(mt,{__scopeSwitch:n})]})})},`Switch`)),dt=`SwitchThumb`,ft=K.forwardRef(J(function(e,t){let{__scopeSwitch:n,...r}=e,i=ot(dt,n);return(0,q.jsx)(c.span,{"data-state":gt(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})},`SwitchThumb`)),pt=`SwitchBubbleInput`,mt=K.forwardRef(J(function({__scopeSwitch:e,onClick:t,...n},r){let{control:i,hasConsumerStoppedPropagationRef:a,userInteractionCount:s,checked:l,defaultChecked:u,required:d,disabled:f,name:p,value:m,form:h,bubbleInput:g,setBubbleInput:_}=ot(pt,e),v=o(r,_),y=be(i),b=K.useRef(!1),x=K.useRef(l),S=K.useRef(s);K.useEffect(()=>{let e=g;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=s!==S.current;S.current=s;let i=x.current!==l;x.current=l;let o=!(r&&a.current);if(i&&n){b.current=!r;let t=new Event(`click`,{bubbles:o});n.call(e,l),e.dispatchEvent(t),b.current=!1}},[g,l,a,s]);let C=K.useRef(l);return(0,q.jsx)(c.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:u??C.current,required:d,disabled:f,name:p,value:m,form:h,...n,tabIndex:-1,ref:v,onClick:M(t,e=>{b.current&&e.stopPropagation()}),style:{...n.style,...y,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})},`SwitchBubbleInput`));function ht(e){return typeof e==`function`}J(ht,`isFunction`);function gt(e){return e?`checked`:`unchecked`}J(gt,`getState`);function Y({className:e,size:t=`default`,...n}){return(0,q.jsx)(ut,{"data-slot":`switch`,"data-size":t,className:a(`peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80`,e),...n,children:(0,q.jsx)(ft,{"data-slot":`switch-thumb`,className:a(`pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground`)})})}function _t(){let{data:e,isLoading:t}=h.userSettings.get.useQuery(),n=h.useUtils(),r=h.userSettings.update.useMutation({onSuccess:()=>{n.userSettings.get.invalidate()},onError:e=>{j.error(`Failed to update settings: ${e.message}`)}});return t?(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`Notification Settings`}),(0,q.jsx)(I,{children:`Configure notification behavior`})]}),(0,q.jsx)(L,{children:(0,q.jsx)(R,{className:`h-10 w-full`})})]}):(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsx)(B,{children:`Notification Settings`}),(0,q.jsx)(I,{children:`Configure notification behavior`})]}),(0,q.jsx)(L,{className:`space-y-4`,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,q.jsx)(P,{htmlFor:`sound-toggle`,children:`Play completion sound`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Play a sound when a workspace finishes`})]}),(0,q.jsx)(Y,{id:`sound-toggle`,checked:e?.playSoundOnComplete??!0,onCheckedChange:e=>{r.mutate({playSoundOnComplete:e})},disabled:r.isPending})]})})]})}var vt=5;function yt(e,t=Date.now()){let n=e.getTime()-t,r=Math.round(n/1e3);if(Math.abs(r)<=vt)return`now`;let i=bt(Math.abs(r));return r<0?`${i} overdue`:`in ${i}`}function bt(e){if(e<60)return`${e}s`;let t=Math.round(e/60);if(t<60)return`${t}m`;let n=Math.round(t/60);return n<24?`${n}h`:`${Math.round(n/24)}d`}function xt(e,t=localStorage){return Te(t)||e[0]?.slug||``}function St({projects:e}){let[t,n]=(0,K.useState)(()=>xt(e)),r=e.find(e=>e.slug===t)??e[0];return(0,K.useEffect)(()=>{r&&r.slug!==t&&(n(r.slug),we(r.slug))},[r,t]),r?(0,q.jsxs)(`div`,{className:`space-y-6`,children:[(0,q.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,q.jsxs)(D,{value:r.slug,onValueChange:e=>{n(e),we(e)},children:[(0,q.jsx)(T,{className:`w-auto max-w-xs`,children:(0,q.jsx)(E,{placeholder:`Select a project`})}),(0,q.jsx)(w,{children:e.map(e=>(0,q.jsx)(S,{value:e.slug,children:e.name},e.id))})]})}),(0,q.jsx)(Ct,{projectId:r.id})]}):(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No projects found.`})}function Ct({projectId:e}){let t=h.useUtils(),{data:n,isLoading:r}=h.periodicTask.list.useQuery({projectId:e},{refetchInterval:1e4}),i=h.periodicTask.delete.useMutation({onSuccess:()=>{j.success(`Periodic task deleted`),t.periodicTask.list.invalidate({projectId:e})},onError:e=>j.error(`Delete failed: ${e.message}`)}),a=h.periodicTask.toggleEnabled.useMutation({onSuccess:()=>{t.periodicTask.list.invalidate({projectId:e})},onError:e=>j.error(`Toggle failed: ${e.message}`)}),o=h.periodicTask.update.useMutation({onSuccess:()=>{j.success(`Periodic task updated`),t.periodicTask.list.invalidate({projectId:e})},onError:e=>j.error(`Update failed: ${e.message}`)});return r?(0,q.jsxs)(z,{children:[(0,q.jsx)(F,{children:(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(b,{className:`w-5 h-5`}),`Periodic Tasks`]})}),(0,q.jsx)(L,{children:(0,q.jsx)(R,{className:`h-20 w-full`})})]}):(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(b,{className:`w-5 h-5`}),`Periodic Tasks`]}),(0,q.jsx)(I,{children:`Recurring tasks that create workspaces on a schedule`})]}),(0,q.jsx)(L,{children:!n||n.length===0?(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground py-4 text-center`,children:`No periodic tasks yet. Create one from the workspace launch dropdown.`}):(0,q.jsx)(`div`,{className:`space-y-3`,children:n.map(e=>(0,q.jsx)(Ot,{task:e,onToggle:t=>a.mutate({id:e.id,enabled:t}),onDelete:()=>i.mutate({id:e.id}),onUpdate:t=>o.mutate({id:e.id,...t}),isUpdating:o.isPending||a.isPending},e.id))})})]})}function wt({status:e}){return(0,q.jsx)(N,{variant:{PR_CREATED:`default`,RUNNING:`secondary`}[e]??`destructive`,className:`text-[10px]`,children:{PR_CREATED:`PR Created`,RUNNING:`Running`,FAILED:`Failed`,SKIPPED:`Skipped`}[e]??e})}var Tt=new Set([`DAILY`,`WEEKLY`,`MONTHLY`]);function Et(e,t,n){return e!==t||!n?Intl.DateTimeFormat().resolvedOptions().timeZone:n}function Dt(e,t){let n=e.split(`:`).map(Number),r=n[0]??0,i=n[1]??0,a=new Date(Date.UTC(2e3,0,1,r,i,0,0)),o=a.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`,timeZone:`UTC`}),s=new Intl.DateTimeFormat(`en-US`,{timeZone:t,timeZoneName:`short`}).formatToParts(a).find(e=>e.type===`timeZoneName`)?.value;return s?`${o} (${s})`:o}function Ot({task:e,onToggle:t,onDelete:n,onUpdate:r,isUpdating:a}){let[o,c]=(0,K.useState)(!1),[l,u]=(0,K.useState)(e.name),[d,p]=(0,K.useState)(e.prompt),[m,h]=(0,K.useState)(e.cadence),[g,_]=(0,K.useState)(e.scheduledTime??``),[v,y]=(0,K.useState)(!1),b=()=>{let t=Tt.has(m)&&!!g,n=t?g:null,i=t?Et(g,e.scheduledTime,e.timezone):null;r({name:l===e.name?void 0:l,prompt:d===e.prompt?void 0:d,cadence:m===e.cadence?void 0:m,scheduledTime:n===e.scheduledTime?void 0:n,timezone:i===e.timezone?void 0:i}),c(!1)},x={EVERY_MINUTE:`Every minute`,EVERY_FIVE_MINUTES:`Every 5 minutes`,DAILY:`Daily`,WEEKLY:`Weekly`,MONTHLY:`Monthly`}[e.cadence]??e.cadence,C=e.executions[0];return(0,q.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,q.jsx)(Y,{checked:e.isEnabled,onCheckedChange:t,disabled:a,className:`shrink-0`}),(0,q.jsx)(`span`,{className:`font-medium text-sm truncate`,children:e.name}),(0,q.jsx)(N,{variant:`secondary`,className:`shrink-0 text-[10px]`,children:x})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,q.jsx)(i,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:()=>{u(e.name),p(e.prompt),h(e.cadence),_(e.scheduledTime??``),c(!o)},children:(0,q.jsx)(f,{className:`h-3.5 w-3.5`})}),(0,q.jsx)(i,{variant:`ghost`,size:`icon`,className:`h-7 w-7 text-destructive hover:text-destructive`,onClick:n,children:(0,q.jsx)(He,{className:`h-3.5 w-3.5`})})]})]}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground line-clamp-2`,children:e.prompt}),(0,q.jsxs)(`div`,{className:`flex items-center gap-3 text-[10px] text-muted-foreground`,children:[e.lastRunAt&&(0,q.jsxs)(`span`,{children:[`Last run: `,new Date(e.lastRunAt).toLocaleString()]}),(0,q.jsxs)(`span`,{title:new Date(e.nextRunAt).toLocaleString(),children:[`Next run: `,yt(new Date(e.nextRunAt))]}),Tt.has(e.cadence)&&e.scheduledTime&&e.timezone&&(0,q.jsxs)(`span`,{children:[`at `,Dt(e.scheduledTime,e.timezone)]}),C&&(0,q.jsx)(wt,{status:C.status})]}),o&&(0,q.jsxs)(`div`,{className:`space-y-2 pt-2 border-t`,children:[(0,q.jsxs)(`div`,{className:`space-y-1`,children:[(0,q.jsx)(P,{className:`text-xs`,children:`Name`}),(0,q.jsx)(s,{className:`h-7 text-xs`,value:l,onChange:e=>u(e.target.value)})]}),(0,q.jsxs)(`div`,{className:`space-y-1`,children:[(0,q.jsx)(P,{className:`text-xs`,children:`Prompt`}),(0,q.jsx)(fe,{className:`text-xs min-h-[60px]`,value:d,onChange:e=>p(e.target.value)})]}),(0,q.jsxs)(`div`,{className:`space-y-1`,children:[(0,q.jsx)(P,{className:`text-xs`,children:`Cadence`}),(0,q.jsxs)(D,{value:m,onValueChange:h,children:[(0,q.jsx)(T,{className:`h-7 text-xs`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:`EVERY_MINUTE`,children:`Every minute (testing)`}),(0,q.jsx)(S,{value:`EVERY_FIVE_MINUTES`,children:`Every 5 minutes (testing)`}),(0,q.jsx)(S,{value:`DAILY`,children:`Daily`}),(0,q.jsx)(S,{value:`WEEKLY`,children:`Weekly`}),(0,q.jsx)(S,{value:`MONTHLY`,children:`Monthly`})]})]})]}),Tt.has(m)&&(0,q.jsxs)(`div`,{className:`space-y-1`,children:[(0,q.jsx)(P,{className:`text-xs`,children:`Run time (optional)`}),(0,q.jsx)(s,{type:`time`,className:`h-7 text-xs`,value:g,onChange:e=>_(e.target.value)})]}),(0,q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,q.jsx)(i,{variant:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:()=>c(!1),children:`Cancel`}),(0,q.jsx)(i,{size:`sm`,className:`h-7 text-xs`,onClick:b,disabled:a,children:`Save`})]})]}),e.executions.length>0&&(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`button`,{type:`button`,className:`text-[10px] text-muted-foreground hover:text-foreground underline`,onClick:()=>y(!v),children:[v?`Hide`:`Show`,` execution history (`,e.executions.length,`)`]}),v&&(0,q.jsx)(`div`,{className:`mt-2 space-y-1`,children:e.executions.map(e=>(0,q.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] text-muted-foreground`,children:[(0,q.jsx)(wt,{status:e.status}),(0,q.jsx)(`span`,{children:new Date(e.startedAt).toLocaleString()}),e.prUrl&&(0,q.jsx)(`a`,{href:e.prUrl,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary hover:underline`,children:`PR`})]},e.id))})]})]})}function kt(e){switch(e.toUpperCase()){case`RUNNING`:return`default`;case`IDLE`:case`COMPLETED`:return`secondary`;case`FAILED`:return`destructive`;default:return`outline`}}function At(e){let{process:t}=e;return(0,q.jsx)(G,{children:(0,q.jsxs)(`div`,{className:`flex flex-col`,children:[t.projectSlug?(0,q.jsx)(l,{to:`/projects/${t.projectSlug}/workspaces/${t.workspaceId}`,className:`font-medium hover:underline`,children:t.workspaceName}):(0,q.jsx)(`span`,{className:`font-medium`,children:t.workspaceName}),t.workspaceBranch&&(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground font-mono`,children:t.workspaceBranch})]})})}function jt({process:e,isStopping:t,onStop:n}){return(0,q.jsxs)(`div`,{className:`rounded-md border bg-background p-3`,children:[(0,q.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`div`,{className:`font-medium truncate`,children:e.workspaceName}),e.workspaceBranch&&(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono truncate`,children:e.workspaceBranch}),(0,q.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground font-mono`,children:e.name||e.sessionId.slice(0,8)})]}),(0,q.jsx)(i,{variant:`ghost`,size:`sm`,onClick:()=>n(e.sessionId),disabled:t||e.status===`COMPLETED`||e.status===`FAILED`,title:`Stop session`,children:(0,q.jsx)(g,{className:`w-4 h-4`})})]}),(0,q.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs`,children:[(0,q.jsx)(N,{variant:`outline`,children:e.workflow}),(0,q.jsx)(N,{variant:kt(e.status),children:e.status})]}),(0,q.jsxs)(`div`,{className:`mt-2 grid grid-cols-2 gap-2 text-xs font-mono text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[`CPU: `,Ie(e.cpuPercent)]}),(0,q.jsxs)(`span`,{children:[`Mem: `,Le(e.memoryBytes)]}),(0,q.jsxs)(`span`,{children:[`Idle: `,Fe(e.idleTimeMs)]}),(0,q.jsxs)(`span`,{children:[`PID: `,e.pid??`-`]})]})]})}function Mt({process:e}){return(0,q.jsxs)(`div`,{className:`rounded-md border bg-background p-3`,children:[(0,q.jsx)(`div`,{className:`font-medium truncate`,children:e.workspaceName}),e.workspaceBranch&&(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono truncate`,children:e.workspaceBranch}),(0,q.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground font-mono`,children:[(0,q.jsxs)(`span`,{children:[`Terminal: `,e.terminalId.slice(0,12)]}),(0,q.jsxs)(`span`,{children:[`PID: `,e.pid]}),(0,q.jsxs)(`span`,{children:[`Size: `,e.cols,`x`,e.rows]})]}),(0,q.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs font-mono text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[`CPU: `,Ie(e.cpuPercent)]}),(0,q.jsxs)(`span`,{children:[`Mem: `,Le(e.memoryBytes)]}),(0,q.jsxs)(`span`,{children:[`Created: `,new Date(e.createdAt).toLocaleTimeString()]})]})]})}function Nt(){return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[`Active Processes`,(0,q.jsx)(R,{className:`h-5 w-16 ml-2`})]}),(0,q.jsx)(I,{children:`Agent and Terminal processes currently running`})]}),(0,q.jsx)(L,{className:`space-y-6`,children:(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsx)(R,{className:`h-5 w-48`}),(0,q.jsxs)(`div`,{className:`border rounded-md p-4 space-y-3`,children:[(0,q.jsx)(R,{className:`h-8 w-full`}),(0,q.jsx)(R,{className:`h-12 w-full`}),(0,q.jsx)(R,{className:`h-12 w-full`})]})]})})]})}function Pt({processes:e}){let t=ee(),n=e?.agent&&e.agent.length>0,r=e?.terminal&&e.terminal.length>0,a=!(n||r),[o,s]=(0,K.useState)(new Set),{data:c}=h.session.getMaxSessionsPerWorkspace.useQuery(),l=h.useUtils(),u=h.admin.stopSession.useMutation(),f=(0,K.useCallback)(async e=>{s(t=>new Set(t).add(e));try{(await u.mutateAsync({sessionId:e})).wasRunning?j.success(`Session stopped`):j.info(`Session was already stopped`),l.admin.getActiveProcesses.invalidate()}catch(e){j.error(`Failed to stop session: ${e instanceof Error?e.message:String(e)}`)}finally{s(t=>{let n=new Set(t);return n.delete(e),n})}},[u,l]),p=e?.agent&&e.agent.length>0?Math.max(...Object.values(e.agent.reduce((e,t)=>(e[t.workspaceId]=(e[t.workspaceId]||0)+1,e),{}))):0;return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex flex-wrap items-center gap-2`,children:[`Active Processes`,e?.summary&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(N,{variant:`secondary`,className:`ml-2`,children:[e.summary.totalAgent,` Agent sessions`]}),c!==void 0&&p>0&&(0,q.jsxs)(N,{variant:p>=c*.8?`destructive`:`outline`,title:`Highest session count across all workspaces. Limit is ${c} per workspace.`,children:[`Max per workspace: `,p,`/`,c]})]})]}),(0,q.jsx)(I,{children:`Agent and Terminal processes currently running`})]}),(0,q.jsxs)(L,{className:`space-y-6`,children:[a&&(0,q.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:`No active processes`}),n&&(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`h4`,{className:`text-sm font-medium mb-2 flex items-center gap-2`,children:[(0,q.jsx)(d,{className:`w-4 h-4`}),`Agent Sessions (`,e.agent.length,`)`]}),t?(0,q.jsx)(`div`,{className:`space-y-2`,children:e.agent.map(e=>(0,q.jsx)(jt,{process:e,isStopping:o.has(e.sessionId),onStop:f},e.sessionId))}):(0,q.jsx)(`div`,{className:`border rounded-md`,children:(0,q.jsxs)(Pe,{children:[(0,q.jsx)(Me,{children:(0,q.jsxs)(W,{children:[(0,q.jsx)(U,{children:`Workspace`}),(0,q.jsx)(U,{children:`Session`}),(0,q.jsx)(U,{children:`Workflow`}),(0,q.jsx)(U,{children:`PID`}),(0,q.jsx)(U,{children:`Resources`}),(0,q.jsx)(U,{children:`Status`}),(0,q.jsx)(U,{children:`Actions`})]})}),(0,q.jsx)(Ne,{children:e.agent.map(e=>(0,q.jsxs)(W,{children:[(0,q.jsx)(At,{process:e}),(0,q.jsx)(G,{children:(0,q.jsxs)(`div`,{className:`flex flex-col`,children:[(0,q.jsx)(`span`,{className:`text-xs font-mono text-muted-foreground`,children:e.name||e.sessionId.slice(0,8)}),(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.model})]})}),(0,q.jsx)(G,{children:(0,q.jsx)(N,{variant:`outline`,children:e.workflow})}),(0,q.jsx)(G,{className:`font-mono text-xs`,children:e.pid??`-`}),(0,q.jsx)(G,{children:(0,q.jsxs)(`div`,{className:`flex flex-col text-xs font-mono`,children:[(0,q.jsxs)(`span`,{children:[`CPU: `,Ie(e.cpuPercent)]}),(0,q.jsxs)(`span`,{children:[`Mem: `,Le(e.memoryBytes)]}),(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Idle: `,Fe(e.idleTimeMs)]})]})}),(0,q.jsx)(G,{children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(N,{variant:kt(e.status),children:e.status}),e.memoryStatus&&e.memoryStatus!==e.status.toLowerCase()&&(0,q.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`(`,e.memoryStatus,`)`]})]})}),(0,q.jsx)(G,{children:(0,q.jsx)(i,{variant:`ghost`,size:`sm`,onClick:()=>f(e.sessionId),disabled:o.has(e.sessionId)||e.status===`COMPLETED`||e.status===`FAILED`,title:`Stop session`,children:(0,q.jsx)(g,{className:`w-4 h-4`})})})]},e.sessionId))})]})})]}),r&&(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`h4`,{className:`text-sm font-medium mb-2 flex items-center gap-2`,children:[(0,q.jsx)(he,{className:`w-4 h-4`}),`Terminal Processes (`,e.terminal.length,`)`]}),t?(0,q.jsx)(`div`,{className:`space-y-2`,children:e.terminal.map(e=>(0,q.jsx)(Mt,{process:e},e.terminalId))}):(0,q.jsx)(`div`,{className:`border rounded-md`,children:(0,q.jsxs)(Pe,{children:[(0,q.jsx)(Me,{children:(0,q.jsxs)(W,{children:[(0,q.jsx)(U,{children:`Workspace`}),(0,q.jsx)(U,{children:`Terminal ID`}),(0,q.jsx)(U,{children:`PID`}),(0,q.jsx)(U,{children:`Resources`}),(0,q.jsx)(U,{children:`Size`}),(0,q.jsx)(U,{children:`Created`})]})}),(0,q.jsx)(Ne,{children:e.terminal.map(e=>(0,q.jsxs)(W,{children:[(0,q.jsx)(At,{process:e}),(0,q.jsx)(G,{children:(0,q.jsx)(`span`,{className:`text-xs font-mono text-muted-foreground`,children:e.terminalId.slice(0,12)})}),(0,q.jsx)(G,{className:`font-mono text-xs`,children:e.pid}),(0,q.jsx)(G,{children:(0,q.jsxs)(`div`,{className:`flex flex-col text-xs font-mono`,children:[(0,q.jsxs)(`span`,{children:[`CPU: `,Ie(e.cpuPercent)]}),(0,q.jsxs)(`span`,{children:[`Mem: `,Le(e.memoryBytes)]})]})}),(0,q.jsxs)(G,{className:`font-mono text-xs`,children:[e.cols,`x`,e.rows]}),(0,q.jsx)(G,{className:`text-xs text-muted-foreground`,children:new Date(e.createdAt).toLocaleTimeString()})]},e.terminalId))})]})})]})]})]})}function Ft({projectId:e,projectName:t}){let[n,r]=(0,K.useState)(!1),a=h.useUtils(),{data:o,isPending:s,isSuccess:c,isError:l,error:d,refetch:p}=h.workspace.getFactoryConfig.useQuery({projectId:e});(0,K.useEffect)(()=>{c||r(!1)},[c]);let m=h.project.saveFactoryConfig.useMutation({onSuccess:()=>{a.workspace.getFactoryConfig.invalidate({projectId:e}),r(!1)},onError:e=>{j.error(`Failed to save configuration: ${e.message}`)}}),g=h.workspace.refreshFactoryConfigs.useMutation({onSuccess:e=>{e.errors.length>0?j.warning(`Refreshed ${e.updatedCount} workspace(s), but ${e.errors.length} failed`):j.success(`Refreshed factory-factory.json for ${e.updatedCount} workspace(s)`)},onError:e=>{j.error(`Failed to refresh configurations: ${e.message}`)}});return(0,q.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[c&&(0,q.jsx)(u,{open:n,onOpenChange:r,currentConfig:o?o.scripts:void 0,onSave:t=>{c&&m.mutate({projectId:e,config:t})},isPending:m.isPending,error:m.error}),(0,q.jsx)(`div`,{className:`border-b bg-muted/50 px-4 py-3`,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,q.jsx)(`h3`,{className:`min-w-0 truncate font-semibold text-sm`,children:t}),c&&(o?(0,q.jsxs)(N,{variant:`default`,className:`bg-green-600 hover:bg-green-700`,children:[(0,q.jsx)(k,{className:`w-3 h-3 mr-1`}),`Configured`]}):(0,q.jsxs)(N,{variant:`secondary`,className:`bg-muted`,children:[(0,q.jsx)(de,{className:`w-3 h-3 mr-1`}),`Not configured`]})),(0,q.jsx)(i,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":`Edit factory configuration`,disabled:!c,onClick:()=>r(!0),children:(0,q.jsx)(f,{className:`w-3.5 h-3.5`})})]}),(0,q.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>{g.mutate({projectId:e})},disabled:g.isPending,className:`w-full gap-2 sm:w-auto`,children:[(0,q.jsx)(y,{className:`w-4 h-4 ${g.isPending?`animate-spin`:``}`}),`Refresh Workspaces`]})]})}),(0,q.jsxs)(`div`,{className:`p-4`,children:[s&&(0,q.jsx)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:`Loading configuration...`}),l&&(0,q.jsxs)(`div`,{role:`alert`,className:`space-y-3`,children:[(0,q.jsxs)(`p`,{className:`text-sm text-destructive`,children:[`Failed to load configuration: `,d.message]}),(0,q.jsx)(i,{variant:`outline`,size:`sm`,onClick:()=>void p(),children:`Retry`})]}),c&&(o?(0,q.jsx)(`div`,{className:`space-y-4`,children:(0,q.jsx)(Re,{factoryConfig:o,variant:`card`})}):(0,q.jsx)(`div`,{className:`space-y-3`,children:(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No factory-factory.json found in this repository. Click the edit button above to configure workspace setup and run scripts.`})}))]})]})}function It({projects:e}){let[t,n]=(0,K.useState)(()=>Te()||e[0]?.slug||``),r=e.find(e=>e.slug===t)??e[0];return r?(0,q.jsxs)(`div`,{className:`space-y-6`,children:[(0,q.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,q.jsxs)(D,{value:r.slug,onValueChange:e=>{n(e),we(e)},children:[(0,q.jsx)(T,{className:`w-auto max-w-xs`,children:(0,q.jsx)(E,{placeholder:`Select a project`})}),(0,q.jsx)(w,{children:e.map(e=>(0,q.jsx)(S,{value:e.slug,children:e.name},e.id))})]})}),(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(de,{className:`w-5 h-5`}),`Factory Configuration`]}),(0,q.jsx)(I,{children:`Configuration for workspace setup and run scripts (factory-factory.json)`})]}),(0,q.jsxs)(L,{className:`space-y-4`,children:[(0,q.jsx)(Ft,{projectId:r.id,projectName:r.name},r.id),(0,q.jsxs)(`div`,{className:`text-xs text-muted-foreground space-y-1 border-t pt-4`,children:[(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`strong`,{children:`Port Allocation:`}),` Use`,` `,(0,q.jsx)(`code`,{className:`bg-muted px-1 rounded`,children:`{port}`}),` in run script for automatic port allocation`]}),(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`strong`,{children:`Location:`}),` factory-factory.json in repository root`]})]})]})]}),(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(Ve,{className:`w-5 h-5`}),`Issue Tracking`]}),(0,q.jsx)(I,{children:`Configure the issue provider (GitHub Issues or Linear)`})]}),(0,q.jsx)(L,{children:(0,q.jsx)(et,{projectId:r.id,projectName:r.name,currentProvider:r.issueProvider,issueTrackerConfig:r.issueTrackerConfig},r.id)})]})]}):(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No projects found.`})}function Lt(){let{data:e,isLoading:t}=h.userSettings.get.useQuery(),n=h.useUtils(),r=h.userSettings.update.useMutation({onSuccess:()=>{j.success(`Ratchet settings updated`),n.userSettings.get.invalidate()},onError:e=>{j.error(`Failed to update settings: ${e.message}`)}}),a=h.admin.triggerRatchetCheck.useMutation({onSuccess:e=>{j.success(`Ratchet check completed: ${e.checked} checked, ${e.stateChanges} state changes, ${e.actionsTriggered} actions triggered`)},onError:e=>{j.error(`Failed to trigger ratchet check: ${e.message}`)}});if(t)return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(p,{enabled:!0,className:`w-5 h-5`,iconClassName:`w-3.5 h-3.5`}),`Ratchet Pull Requests`]}),(0,q.jsx)(I,{children:`Automatically dispatch agents to fix CI failures and address code review comments`})]}),(0,q.jsx)(L,{children:(0,q.jsx)(R,{className:`h-10 w-full`})})]});let o=e?.ratchetPermissions??`YOLO`,s=e?.ratchetReviewTriggerMode??`CHANGES_REQUESTED`;return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(p,{enabled:!0,className:`w-5 h-5`,iconClassName:`w-3.5 h-3.5`}),`Ratchet Pull Requests`]}),(0,q.jsx)(I,{children:`Automatically dispatch agents to fix CI failures and address code review comments`})]}),(0,q.jsxs)(L,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`rounded-md border bg-muted/40 p-3 space-y-1.5`,children:[(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`When a workspace has an open pull request, Factory Factory can automatically:`}),(0,q.jsxs)(`ul`,{className:`text-sm text-muted-foreground list-disc list-inside space-y-0.5 ml-2`,children:[(0,q.jsx)(`li`,{children:`Fix failing CI checks`}),(0,q.jsx)(`li`,{children:`Address code review comments`})]})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,q.jsx)(P,{htmlFor:`ratchet-enabled`,children:`Default for new workspaces`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enable Ratchet for workspaces created from GitHub issues`})]}),(0,q.jsx)(Y,{id:`ratchet-enabled`,checked:e?.ratchetEnabled??!1,onCheckedChange:e=>{r.mutate({ratchetEnabled:e})},disabled:r.isPending})]}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`ratchet-review-trigger`,children:`Review feedback trigger`}),(0,q.jsxs)(D,{value:s,onValueChange:e=>{(e===`CHANGES_REQUESTED`||e===`ALL_REVIEW_FEEDBACK`)&&r.mutate({ratchetReviewTriggerMode:e})},disabled:r.isPending,children:[(0,q.jsx)(T,{id:`ratchet-review-trigger`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:`CHANGES_REQUESTED`,children:`Changes requested and unresolved threads`}),(0,q.jsx)(S,{value:`ALL_REVIEW_FEEDBACK`,children:`All review feedback`})]})]}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`All review feedback also lets top-level commented review summaries start sessions. Ordinary PR conversation comments never trigger Ratchet.`})]}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(P,{htmlFor:`ratchet-permissions`,children:`Ratchet permission defaults`}),(0,q.jsxs)(D,{value:o,onValueChange:e=>{(e===`STRICT`||e===`RELAXED`||e===`YOLO`)&&r.mutate({ratchetPermissions:e})},disabled:r.isPending,children:[(0,q.jsx)(T,{id:`ratchet-permissions`,children:(0,q.jsx)(E,{})}),(0,q.jsxs)(w,{children:[(0,q.jsx)(S,{value:`STRICT`,children:`Strict`}),(0,q.jsx)(S,{value:`RELAXED`,children:`Relaxed`}),(0,q.jsx)(S,{value:`YOLO`,children:`YOLO`})]})]}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Controls the default execution mode used when Ratchet starts a fixer session.`})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,q.jsx)(P,{htmlFor:`ratchet-reply-to-pr-comments`,children:`Reply to PR comments`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`When enabled, Ratchet replies on review threads and posts a re-review PR comment`})]}),(0,q.jsx)(Y,{id:`ratchet-reply-to-pr-comments`,checked:e?.ratchetReplyToPrComments??!0,onCheckedChange:e=>{r.mutate({ratchetReplyToPrComments:e})},disabled:r.isPending})]}),(0,q.jsx)(`div`,{className:`border-t pt-4`,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,q.jsx)(P,{children:`Manual Check`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Check all workspaces with PRs and dispatch agents if needed`})]}),(0,q.jsx)(i,{variant:`outline`,size:`sm`,onClick:()=>a.mutate(),disabled:a.isPending,children:a.isPending?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(y,{className:`w-4 h-4 mr-2 animate-spin`}),`Checking...`]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(y,{className:`w-4 h-4 mr-2`}),`Check All PRs Now`]})})]})})]})]})}function Rt(){let{download:e,isDownloading:t}=ue();return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(_,{className:`w-5 h-5`}),`Server Logs`]}),(0,q.jsx)(I,{children:`View and search structured server log entries`})]}),(0,q.jsxs)(L,{className:`flex flex-col gap-2 sm:flex-row sm:gap-3`,children:[(0,q.jsx)(i,{variant:`outline`,className:`w-full sm:w-auto`,asChild:!0,children:(0,q.jsx)(l,{to:`/logs`,children:`View Logs`})}),(0,q.jsxs)(i,{variant:`outline`,onClick:e,disabled:t,className:`w-full sm:w-auto`,children:[(0,q.jsx)(le,{className:`w-4 h-4 mr-2`}),t?`Downloading...`:`Download Log File`]})]})]})}var zt=Object.defineProperty,X=(e,t)=>zt(e,`name`,{value:t,configurable:!0}),Bt=[`PageUp`,`PageDown`],Vt=[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`],Ht={"from-left":[`Home`,`PageDown`,`ArrowDown`,`ArrowLeft`],"from-right":[`Home`,`PageDown`,`ArrowDown`,`ArrowRight`],"from-bottom":[`Home`,`PageDown`,`ArrowDown`,`ArrowLeft`],"from-top":[`Home`,`PageDown`,`ArrowUp`,`ArrowLeft`]},Z=`Slider`,[Ut,Wt,Gt]=ve(Z),[Kt,qt]=ge(Z,[Gt]),[Jt,Q]=Kt(Z),Yt=K.forwardRef(X(function(e,t){let{name:n,min:r=0,max:i=100,step:a=1,orientation:s=`horizontal`,disabled:c=!1,minStepsBetweenThumbs:l=0,defaultValue:u=[r],value:d,onValueChange:f=X(()=>{},`onValueChange`),onValueCommit:p=X(()=>{},`onValueCommit`),inverted:m=!1,form:h,...g}=e,_=K.useRef(new Set),v=K.useRef(0),y=K.useRef(!1),b=s===`horizontal`?Qt:$t,[x,S]=K.useState(null),w=o(t,S),[T=[],E]=_e({prop:d,defaultProp:u,onChange:X(e=>{[..._.current][v.current]?.focus({preventScroll:!0,focusVisible:y.current}),y.current=!1,f(e)},`onChange`)}),D=K.useRef(T),O=K.useRef(T);K.useEffect(()=>{let e=h?x?.ownerDocument.getElementById(h):x?.closest(`form`);if(e instanceof HTMLFormElement){let t=X(()=>E(O.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[x,h,E]);function k(e){A(e,vn(T,e))}X(k,`handleSlideStart`);function ee(e){A(e,v.current)}X(ee,`handleSlideMove`);function te(){String(T)!==String(D.current)&&p(T)}X(te,`handleSlideEnd`);function A(e,t,{commit:n}={commit:!1}){let o=Cn(a),s=$(Math.round((e-r)/a)*a+r,o),c=C(s,[r,i]);E((e=[])=>{let r=hn(e,c,t);if(xn(r,l*a)){v.current=r.indexOf(c);let t=String(r)!==String(e);return t&&n&&p(r),t?r:e}return e})}return X(A,`updateValues`),(0,q.jsx)(Jt,{scope:e.__scopeSlider,name:n,disabled:c,min:r,max:i,valueIndexToChangeRef:v,thumbs:_.current,values:T,orientation:s,form:h,children:(0,q.jsx)(Ut.Provider,{scope:e.__scopeSlider,children:(0,q.jsx)(Ut.Slot,{scope:e.__scopeSlider,children:(0,q.jsx)(b,{"aria-disabled":c,"data-disabled":c?``:void 0,...g,ref:w,onPointerDown:M(g.onPointerDown,()=>{c||(D.current=T,y.current=!1)}),min:r,max:i,inverted:m,onSlideStart:c?void 0:k,onSlideMove:c?void 0:ee,onSlideEnd:c?void 0:te,onHomeKeyDown:()=>{c||(y.current=!0,A(r,0,{commit:!0}))},onEndKeyDown:()=>{c||(y.current=!0,A(i,T.length-1,{commit:!0}))},onStepKeyDown:({event:e,direction:t})=>{if(!c){y.current=!0;let n=Bt.includes(e.key)||e.shiftKey&&Vt.includes(e.key)?10:1,i=v.current,o=T[i];A(wn(o,{min:r,step:a,direction:t,multiplier:n}),i,{commit:!0})}}})})})})},`Slider`)),[Xt,Zt]=Kt(Z,{startEdge:`left`,endEdge:`right`,size:`width`,direction:1}),Qt=K.forwardRef(X(function(e,t){let{min:n,max:r,dir:i,inverted:a,onSlideStart:s,onSlideMove:c,onSlideEnd:l,onStepKeyDown:u,...d}=e,[f,p]=K.useState(null),m=o(t,p),h=K.useRef(void 0),g=ye(i),_=g===`ltr`,v=_&&!a||!_&&a;function y(e){let t=h.current||f.getBoundingClientRect(),i=Sn([0,t.width],v?[n,r]:[r,n]);return h.current=t,i(e-t.left)}return X(y,`getValueFromPointer`),(0,q.jsx)(Xt,{scope:e.__scopeSlider,startEdge:v?`left`:`right`,endEdge:v?`right`:`left`,direction:v?1:-1,size:`width`,children:(0,q.jsx)(en,{dir:g,"data-orientation":`horizontal`,...d,ref:m,style:{...d.style,"--radix-slider-thumb-transform":`translateX(-50%)`},onSlideStart:e=>{let t=y(e.clientX);s?.(t)},onSlideMove:e=>{let t=y(e.clientX);c?.(t)},onSlideEnd:()=>{h.current=void 0,l?.()},onStepKeyDown:e=>{let t=Ht[v?`from-left`:`from-right`].includes(e.key);u?.({event:e,direction:t?-1:1})}})})},`SliderHorizontal`)),$t=K.forwardRef(X(function(e,t){let{min:n,max:r,inverted:i,onSlideStart:a,onSlideMove:s,onSlideEnd:c,onStepKeyDown:l,...u}=e,d=K.useRef(null),f=o(t,d),p=K.useRef(void 0),m=!i;function h(e){let t=p.current||d.current.getBoundingClientRect(),i=Sn([0,t.height],m?[r,n]:[n,r]);return p.current=t,i(e-t.top)}return X(h,`getValueFromPointer`),(0,q.jsx)(Xt,{scope:e.__scopeSlider,startEdge:m?`bottom`:`top`,endEdge:m?`top`:`bottom`,size:`height`,direction:m?1:-1,children:(0,q.jsx)(en,{"data-orientation":`vertical`,...u,ref:f,style:{...u.style,"--radix-slider-thumb-transform":`translateY(50%)`},onSlideStart:e=>{let t=h(e.clientY);a?.(t)},onSlideMove:e=>{let t=h(e.clientY);s?.(t)},onSlideEnd:()=>{p.current=void 0,c?.()},onStepKeyDown:e=>{let t=Ht[m?`from-bottom`:`from-top`].includes(e.key);l?.({event:e,direction:t?-1:1})}})})},`SliderVertical`)),en=K.forwardRef(X(function(e,t){let{__scopeSlider:n,onSlideStart:r,onSlideMove:i,onSlideEnd:a,onHomeKeyDown:o,onEndKeyDown:s,onStepKeyDown:l,...u}=e,d=Q(Z,n);return(0,q.jsx)(c.span,{...u,ref:t,onKeyDown:M(e.onKeyDown,e=>{e.key===`Home`?(o(e),e.preventDefault()):e.key===`End`?(s(e),e.preventDefault()):Bt.concat(Vt).includes(e.key)&&(l(e),e.preventDefault())}),onPointerDown:M(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),d.thumbs.has(t)?t.focus({preventScroll:!0,focusVisible:!1}):r(e)}),onPointerMove:M(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&i(e)}),onPointerUp:M(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),a(e))})})},`SliderImpl`)),tn=`SliderTrack`,nn=K.forwardRef(X(function(e,t){let{__scopeSlider:n,...r}=e,i=Q(tn,n);return(0,q.jsx)(c.span,{"data-disabled":i.disabled?``:void 0,"data-orientation":i.orientation,...r,ref:t})},`SliderTrack`)),rn=`SliderRange`,an=K.forwardRef(X(function(e,t){let{__scopeSlider:n,...r}=e,i=Q(rn,n),a=Zt(rn,n),s=K.useRef(null),l=o(t,s),u=i.values.length,d=i.values.map(e=>gn(e,i.min,i.max)),f=u>1?Math.min(...d):0,p=100-Math.max(...d);return(0,q.jsx)(c.span,{"data-orientation":i.orientation,"data-disabled":i.disabled?``:void 0,...r,ref:l,style:{...e.style,[a.startEdge]:f+`%`,[a.endEdge]:p+`%`}})},`SliderRange`)),[on,sn]=Kt(`SliderThumb`),cn=`SliderThumbProvider`;function ln(e){let{__scopeSlider:t,name:n,children:r,internal_do_not_use_render:i}=e,a=Q(cn,t),o=Wt(t),[s,c]=K.useState(null),l=K.useMemo(()=>s?o().findIndex(e=>e.ref.current===s):-1,[o,s]),u=be(s),d=!s||!!a.form||!!s.closest(`form`),f=a.values[l],p=n??(a.name?a.name+(a.values.length>1?`[]`:``):void 0),m=f===void 0?0:gn(f,a.min,a.max);K.useEffect(()=>{if(s)return a.thumbs.add(s),()=>{a.thumbs.delete(s)}},[s,a.thumbs]);let h={value:f,name:p,form:a.form,isFormControl:d,index:l,thumb:s,onThumbChange:c,percent:m,size:u};return(0,q.jsx)(on,{scope:t,...h,children:Tn(i)?i(h):r})}X(ln,`SliderThumbProvider`);var un=`SliderThumbTrigger`,dn=K.forwardRef(X(function(e,t){let{__scopeSlider:n,...r}=e,i=Q(un,n),a=Zt(un,n),{index:s,value:l,percent:u,size:d,onThumbChange:f}=sn(un,n),p=o(t,f),m=_n(s,i.values.length),h=d?.[a.size],g=h?yn(h,u,a.direction):0;return(0,q.jsx)(`span`,{style:{transform:`var(--radix-slider-thumb-transform)`,position:`absolute`,[a.startEdge]:`calc(${u}% + ${g}px)`},children:(0,q.jsx)(Ut.ItemSlot,{scope:n,children:(0,q.jsx)(c.span,{role:`slider`,"aria-label":e[`aria-label`]||m,"aria-valuemin":i.min,"aria-valuenow":l,"aria-valuemax":i.max,"aria-orientation":i.orientation,"data-orientation":i.orientation,"data-disabled":i.disabled?``:void 0,tabIndex:i.disabled?void 0:0,...r,ref:p,style:l===void 0?{display:`none`}:e.style,onFocus:M(e.onFocus,()=>{i.valueIndexToChangeRef.current=s})})})})},`SliderThumbTrigger`)),fn=K.forwardRef(X(function(e,t){let{__scopeSlider:n,name:r,...i}=e;return(0,q.jsx)(ln,{__scopeSlider:n,name:r,internal_do_not_use_render:({index:e,isFormControl:r})=>(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(dn,{...i,ref:t,__scopeSlider:n}),r?(0,q.jsx)(mn,{__scopeSlider:n},e):null]})})},`SliderThumb`)),pn=`SliderBubbleInput`,mn=K.forwardRef(X(function({__scopeSlider:e,...t},n){let{value:r,name:i,form:a}=sn(pn,e),s=K.useRef(null),l=o(s,n),u=x(r);return K.useEffect(()=>{let e=s.current;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`value`).set;if(u!==r&&n){let t=new Event(`input`,{bubbles:!0});n.call(e,r),e.dispatchEvent(t)}},[u,r]),(0,q.jsx)(c.input,{style:{display:`none`},name:i,form:a,...t,ref:l,defaultValue:r})},`SliderBubbleInput`));function hn(e=[],t,n){let r=[...e];return r[n]=t,r.sort((e,t)=>e-t)}X(hn,`getNextSortedValues`);function gn(e,t,n){let r=100/(n-t)*(e-t);return C(r,[0,100])}X(gn,`convertValueToPercentage`);function _n(e,t){if(t>2)return`Value ${e+1} of ${t}`;if(t===2)return[`Minimum`,`Maximum`][e]}X(_n,`getLabel`);function vn(e,t){if(e.length===1)return 0;let n=e.map(e=>Math.abs(e-t)),r=Math.min(...n);return n.indexOf(r)}X(vn,`getClosestValueIndex`);function yn(e,t,n){let r=e/2;return(r-Sn([0,50],[0,r])(t)*n)*n}X(yn,`getThumbInBoundsOffset`);function bn(e){return e.slice(0,-1).map((t,n)=>e[n+1]-t)}X(bn,`getStepsBetweenValues`);function xn(e,t){if(t>0){let n=bn(e);return Math.min(...n)>=t}return!0}X(xn,`hasMinStepsBetweenValues`);function Sn(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}X(Sn,`linearScale`);function Cn(e){if(!Number.isFinite(e))return 0;let t=e.toString();if(t.includes(`e`)){let[e,n]=t.split(`e`),r=e.split(`.`)[1]||``,i=Number(n);return Math.max(0,r.length-i)}let n=t.split(`.`)[1];return n?n.length:0}X(Cn,`getDecimalCount`);function $(e,t){let n=10**t;return Math.round(e*n)/n}X($,`roundValue`);function wn(e,{min:t,step:n,direction:r,multiplier:i}){let a=Cn(n),o=(e-t)/n,s=Math.round(o),c=$(s*n+t,a)===$(e,a),l;return l=c?s+i*r:r>0?Math.ceil(o):Math.floor(o),$(l*n+t,a)}X(wn,`getNextStepValue`);function Tn(e){return typeof e==`function`}X(Tn,`isFunction`);function En({className:e,defaultValue:t,value:n,min:r=0,max:i=100,...o}){let s=n?.length??t?.length??1,c=K.useMemo(()=>Array.from({length:s},(e,t)=>`thumb-${t}`),[s]);return(0,q.jsxs)(Yt,{"data-slot":`slider`,defaultValue:t,value:n,min:r,max:i,className:a(`relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col`,e),...o,children:[(0,q.jsx)(nn,{"data-slot":`slider-track`,className:a(`relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5`),children:(0,q.jsx)(an,{"data-slot":`slider-range`,className:a(`absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full`)})}),c.map(e=>(0,q.jsx)(fn,{"data-slot":`slider-thumb`,className:`block size-4 shrink-0 rounded-full border border-primary bg-background shadow-sm ring-ring/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50`},e))]})}function Dn({id:e,label:t,helpText:n,value:r,min:i,max:a,step:o,formatValue:s,disabled:c,onChange:l,onCommit:u}){return(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between w-[280px]`,children:[(0,q.jsx)(P,{htmlFor:e,children:t}),(0,q.jsxs)(`span`,{className:`text-xs text-muted-foreground font-mono`,children:[s(r),` · `,Oe(r,i,a)]})]}),(0,q.jsx)(En,{id:e,className:`w-[280px]`,value:[r],onValueChange:([e])=>l(e??r),onValueCommit:([e])=>u(e??r),min:i,max:a,step:o,disabled:c}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n})]})}function On(e,t){return h.voice.validateApiKey.useMutation({onSuccess:(n,r)=>{n.valid?(t(r.apiKey),j.success(`Deepgram API key is valid`)):(r.apiKey===e&&t(null),j.error(`Validation failed: ${n.error??`Unknown error`}`))},onError:(n,r)=>{r.apiKey===e&&t(null),j.error(`Validation failed: ${n.message}`)}})}function kn({apiKey:e,onApiKeyChange:t,validated:n,hasStoredKey:r,validating:a,saving:o,onValidate:c,onSave:l}){return(0,q.jsxs)(`div`,{className:`flex flex-wrap items-end gap-2`,children:[(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(P,{htmlFor:`deepgram-api-key`,children:`Deepgram API Key`}),n&&(0,q.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-green-600`,children:[(0,q.jsx)(k,{className:`w-3 h-3`}),`Valid`]})]}),(0,q.jsx)(s,{id:`deepgram-api-key`,type:`password`,value:e,onChange:e=>t(e.target.value),placeholder:r?`••••••••••••••••••••`:`Enter your Deepgram API key`,className:`font-mono text-sm w-[280px]`})]}),(0,q.jsx)(i,{variant:`outline`,onClick:c,disabled:a||!e,children:a?`Validating...`:`Validate`}),n&&(0,q.jsx)(i,{onClick:l,disabled:o,children:o?`Saving...`:`Save`})]})}function An({utteranceEndMs:e,bargeInSustainedMs:t,enabled:n,disabled:r,updateConfig:i}){let[a,o]=(0,K.useState)(je),[s,c]=(0,K.useState)(16);return(0,K.useEffect)(()=>{e!==void 0&&o(e)},[e]),(0,K.useEffect)(()=>{t!==void 0&&c(t)},[t]),(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Dn,{id:`voice-utterance-end`,label:`Stop-speaking sensitivity`,helpText:`How long a pause before voice mode decides you've finished talking.`,value:a,min:Ae,max:ke,step:250,formatValue:e=>`${(e/1e3).toFixed(2)}s`,disabled:r,onChange:o,onCommit:t=>i.mutate({enabled:n,utteranceEndMs:t},{onError:()=>o(e??1e3)})}),(0,q.jsx)(Dn,{id:`voice-barge-in`,label:`Barge-in sensitivity`,helpText:`How quickly voice mode notices you've started talking over its spoken reply and stops to listen.`,value:s,min:8,max:80,step:8,formatValue:e=>`${e}ms`,disabled:r,onChange:c,onCommit:e=>i.mutate({enabled:n,bargeInSustainedMs:e},{onError:()=>c(t??16)})})]})}function jn(){let{data:e,isLoading:t}=h.voice.getConfig.useQuery(),n=h.useUtils(),[r,i]=(0,K.useState)(``),[a,o]=(0,K.useState)(null),s=a!==null&&a===r,[c,l]=(0,K.useState)(1);(0,K.useEffect)(()=>{e?.ttsSpeed!==void 0&&l(e.ttsSpeed)},[e?.ttsSpeed]);let u=On(r,o),d=h.voice.updateConfig.useMutation({onSuccess:e=>{n.voice.getConfig.setData(void 0,e),n.voice.getConfig.invalidate()},onError:e=>j.error(`Failed to save: ${e.message}`)});if(t)return(0,q.jsxs)(z,{children:[(0,q.jsx)(F,{children:(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(pe,{className:`w-5 h-5`}),`Voice Mode`]})}),(0,q.jsx)(L,{children:(0,q.jsx)(R,{className:`h-10 w-full`})})]});let f=e?.hasApiKey??!1,p=e?.enabled??!1,m=e?.ttsModel??`flux-haley-en`;return(0,q.jsxs)(z,{children:[(0,q.jsxs)(F,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2`,children:[(0,q.jsx)(pe,{className:`w-5 h-5`}),`Voice Mode`]}),(0,q.jsx)(I,{children:`Talk to Claude/Codex sessions by voice using your own Deepgram API key for speech-to-text and text-to-speech.`})]}),(0,q.jsxs)(L,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,q.jsx)(P,{htmlFor:`voice-mode-enabled`,children:`Enable voice mode`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:f?`Available in workspace chat`:`Requires a Deepgram API key below`})]}),(0,q.jsx)(Y,{id:`voice-mode-enabled`,checked:p,onCheckedChange:e=>d.mutate({enabled:e}),disabled:d.isPending||!f})]}),(0,q.jsx)(kn,{apiKey:r,onApiKeyChange:e=>{i(e),o(null)},validated:s,hasStoredKey:f,validating:u.isPending,saving:d.isPending,onValidate:()=>{r&&u.mutate({apiKey:r})},onSave:()=>{r&&s&&d.mutate({enabled:p,apiKey:r},{onSuccess:()=>{i(``),o(null)}})}}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Create an API key at`,` `,(0,q.jsx)(`a`,{href:`https://console.deepgram.com/`,target:`_blank`,rel:`noopener noreferrer`,className:`underline`,children:`console.deepgram.com`})]}),(0,q.jsxs)(`div`,{className:`border-t pt-4 space-y-4`,children:[(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsx)(P,{htmlFor:`voice-model`,children:`Voice`}),(0,q.jsxs)(D,{value:m,onValueChange:e=>d.mutate({enabled:p,ttsModel:e}),disabled:d.isPending||!f,children:[(0,q.jsx)(T,{id:`voice-model`,className:`w-[280px]`,children:(0,q.jsx)(E,{})}),(0,q.jsx)(w,{children:ie.map(e=>(0,q.jsxs)(S,{value:e.model,children:[e.name,e.description?` — ${e.description}`:``]},e.model))})]}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Deepgram Flux TTS English voices`})]}),(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between w-[280px]`,children:[(0,q.jsx)(P,{htmlFor:`voice-speed`,children:`Speed`}),(0,q.jsxs)(`span`,{className:`text-xs text-muted-foreground font-mono`,children:[c.toFixed(2),`x`]})]}),(0,q.jsx)(En,{id:`voice-speed`,className:`w-[280px]`,value:[c],onValueChange:([e])=>l(e??1),onValueCommit:([t])=>d.mutate({enabled:p,ttsSpeed:t??1},{onError:()=>l(e?.ttsSpeed??1)}),min:ne,max:ae,step:te,disabled:d.isPending||!f})]}),(0,q.jsx)(An,{utteranceEndMs:e?.utteranceEndMs,bargeInSustainedMs:e?.bargeInSustainedMs,enabled:p,disabled:d.isPending||!f,updateConfig:d})]})]})]})}function Mn(e){if(!e||e.length===0)return;let t=Te();return t&&e.some(e=>e.slug===t)?t:e[0]?.slug}function Nn(){Se({title:`Settings`});let[e,t]=(0,K.useState)(`general`),{data:n,isLoading:r,refetch:i}=h.admin.getSystemStats.useQuery(void 0,{refetchInterval:5e3}),{data:a,isLoading:o}=h.admin.getActiveProcesses.useQuery(void 0,{refetchInterval:5e3}),{data:s}=h.project.list.useQuery(),c=h.admin.resetApiUsageStats.useMutation({onSuccess:()=>{i()}}),l=Mn(s);return r?(0,q.jsx)(xe,{message:`Loading settings...`}):(0,q.jsxs)(`div`,{className:`h-full overflow-y-auto`,children:[l&&(0,q.jsx)(Ce,{children:(0,q.jsx)(m,{projectSlug:l})}),(0,q.jsx)(`div`,{className:`space-y-6 p-3 md:p-6`,children:(0,q.jsxs)(De,{value:e,onValueChange:e=>t(e),children:[(0,q.jsxs)(Ee,{className:`w-full sm:w-auto`,children:[(0,q.jsx)(V,{value:`general`,className:`flex-1 sm:flex-initial`,children:`General Settings`}),(0,q.jsx)(V,{value:`project`,className:`flex-1 sm:flex-initial`,children:`Project Settings`}),(0,q.jsx)(V,{value:`periodic-tasks`,className:`flex-1 sm:flex-initial`,children:`Periodic Tasks`}),(0,q.jsx)(V,{value:`voice`,className:`flex-1 sm:flex-initial`,children:`Voice Mode`})]}),(0,q.jsxs)(H,{value:`general`,className:`space-y-6 mt-4`,children:[(0,q.jsx)(Ge,{apiUsage:n?.apiUsage,onReset:()=>c.mutate(),isResetting:c.isPending}),o?(0,q.jsx)(Nt,{}):(0,q.jsx)(Pt,{processes:a}),(0,q.jsx)(z,{className:`bg-muted/50`,children:(0,q.jsx)(L,{className:`py-4`,children:(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`font-medium`,children:`Environment:`}),(0,q.jsx)(N,{variant:`outline`,children:n?.environment||`unknown`})]})})}),(0,q.jsx)(_t,{}),(0,q.jsx)(Qe,{}),(0,q.jsx)(Ye,{}),(0,q.jsx)(Xe,{}),(0,q.jsx)(Lt,{}),(0,q.jsx)(Je,{}),(0,q.jsx)(Ze,{}),(0,q.jsx)(Rt,{})]}),(0,q.jsx)(H,{value:`project`,className:`mt-4`,children:s?(0,q.jsx)(It,{projects:s}):(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading projects...`})}),(0,q.jsx)(H,{value:`periodic-tasks`,className:`mt-4`,children:s?(0,q.jsx)(St,{projects:s}):(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading projects...`})}),(0,q.jsx)(H,{value:`voice`,className:`mt-4`,children:(0,q.jsx)(jn,{})})]})})]})}export{Nn as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-
|
|
1
|
+
import{t as e}from"./jsx-runtime-BNakU3Ej.js";import{c as t,o as n}from"./dist-BO6Gz-vk.js";var r=e(),i=t(`relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current`}},defaultVariants:{variant:`default`}});function a({className:e,variant:t,...a}){return(0,r.jsx)(`div`,{"data-slot":`alert`,role:`alert`,className:n(i({variant:t}),e),...a})}function o({className:e,...t}){return(0,r.jsx)(`div`,{"data-slot":`alert-description`,className:n(`col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed`,e),...t})}export{o as n,a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-BNakU3Ej.js";import{i as r,o as i,p as a}from"./dist-BO6Gz-vk.js";import{S as o,_ as s,b as c,g as l,h as u,m as d,v as f,x as p,y as m}from"./radio-group-BhmTXkIv.js";import{C as h,w as g}from"./dist-DGw3MClt.js";var _=e(t(),1),v=n(),y=Object.defineProperty,b=(e,t)=>y(e,`name`,{value:t,configurable:!0}),[x,S]=h(`AlertDialog`,[o]),C=o(),w=b(e=>{let{__scopeAlertDialog:t,...n}=e,r=C(t);return(0,v.jsx)(d,{...r,...n,modal:!0})},`AlertDialog`);_.forwardRef(b(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=C(n);return(0,v.jsx)(p,{...i,...r,ref:t})},`AlertDialogTrigger`));var T=b(e=>{let{__scopeAlertDialog:t,...n}=e,r=C(t);return(0,v.jsx)(m,{...r,...n})},`AlertDialogPortal`),E=_.forwardRef(b(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=C(n);return(0,v.jsx)(f,{...i,...r,ref:t})},`AlertDialogOverlay`)),[D,O]=x(`AlertDialogContent`),k=_.forwardRef(b(function(e,t){let{__scopeAlertDialog:n,children:r,...i}=e,o=C(n),s=_.useRef(null),c=a(t,s),u=_.useRef(null);return(0,v.jsx)(D,{scope:n,cancelRef:u,children:(0,v.jsx)(l,{role:`alertdialog`,...o,...i,ref:c,onOpenAutoFocus:g(i.onOpenAutoFocus,e=>{e.preventDefault(),u.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:r})})},`AlertDialogContent`)),A=_.forwardRef(b(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=C(n);return(0,v.jsx)(c,{...i,...r,ref:t})},`AlertDialogTitle`)),j=_.forwardRef(b(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=C(n);return(0,v.jsx)(s,{...i,...r,ref:t})},`AlertDialogDescription`)),M=_.forwardRef(b(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=C(n);return(0,v.jsx)(u,{...i,...r,ref:t})},`AlertDialogAction`)),N=`AlertDialogCancel`,P=_.forwardRef(b(function(e,t){let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=O(N,n),o=C(n),s=a(t,i);return(0,v.jsx)(u,{...o,...r,ref:s})},`AlertDialogCancel`)),F=w,I=T,L=E,R=k,z=M,B=P,V=A,H=j;function U({...e}){return(0,v.jsx)(F,{"data-slot":`alert-dialog`,...e})}function W({...e}){return(0,v.jsx)(I,{"data-slot":`alert-dialog-portal`,...e})}function G({className:e,...t}){return(0,v.jsx)(L,{"data-slot":`alert-dialog-overlay`,className:i(`fixed inset-0 z-50 bg-black/50 motion-reduce:data-[state=open]:animate-none motion-reduce:data-[state=closed]:animate-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0`,e),...t})}function K({className:e,size:t=`default`,...n}){return(0,v.jsxs)(W,{children:[(0,v.jsx)(G,{}),(0,v.jsx)(R,{"data-slot":`alert-dialog-content`,"data-size":t,className:i(`group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-sm duration-200 motion-reduce:data-[state=open]:animate-none motion-reduce:data-[state=closed]:animate-none data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg`,e),...n})]})}function q({className:e,...t}){return(0,v.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:i(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),...t})}function J({className:e,...t}){return(0,v.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:i(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),...t})}function Y({className:e,...t}){return(0,v.jsx)(V,{"data-slot":`alert-dialog-title`,className:i(`text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,e),...t})}function X({className:e,...t}){return(0,v.jsx)(H,{"data-slot":`alert-dialog-description`,className:i(`text-sm text-muted-foreground`,e),...t})}function Z({className:e,variant:t=`default`,size:n=`default`,...i}){return(0,v.jsx)(r,{variant:t,size:n,className:e,asChild:!0,children:(0,v.jsx)(z,{"data-slot":`alert-dialog-action`,...i})})}function Q({className:e,variant:t=`outline`,size:n=`default`,...i}){return(0,v.jsx)(r,{variant:t,size:n,className:e,asChild:!0,children:(0,v.jsx)(B,{"data-slot":`alert-dialog-cancel`,...i})})}export{X as a,Y as c,K as i,Z as n,J as o,Q as r,q as s,U as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-FOHPRMQF-CoA4358r.js";import{M as e}from"./mermaid-parser.core-CpkwJ-8U.js";export{e as createArchitectureServices};
|