crewx 0.9.0-rc.15 → 0.9.0-rc.151
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/bin/cli-commands.js +1 -36
- package/bin/crewx-lib.js +2 -173
- package/bin/crewx-ui.js +1 -85
- package/bin/crewx.ico +0 -0
- package/bin/crewx.js +2 -252
- package/bin/launcher-flags.js +1 -29
- package/crewx-host.js +2 -0
- package/dist/assets/GitDiffEditor-B836lFO2.css +1 -0
- package/dist/assets/GitDiffEditor-Bidaabyc.js +762 -0
- package/dist/assets/MarketPage-Cwz_klHJ.js +41 -0
- package/dist/assets/PromptTab-B-wd95zD.js +27 -0
- package/dist/assets/abap-BrgZPUOV.js +6 -0
- package/dist/assets/abnfDiagram-VCTEODGH-7si7Ux1S.js +1 -0
- package/dist/assets/apex-DyP6w7ZV.js +6 -0
- package/dist/assets/arc-BHxS6sAa.js +1 -0
- package/dist/assets/architectureDiagram-5GKGNRK7-BA_fcCdJ.js +36 -0
- package/dist/assets/azcli-BaLxmfj-.js +6 -0
- package/dist/assets/bat-CFOPXBzS.js +6 -0
- package/dist/assets/bicep-BfEKNvv3.js +7 -0
- package/dist/assets/blockDiagram-I7D4REHJ-FGujpSB5.js +129 -0
- package/dist/assets/bronze-DHyggp7i.png +0 -0
- package/dist/assets/c4Diagram-7LVT6UL2-CpNN4r-1.js +38 -0
- package/dist/assets/cameligo-BFG1Mk7z.js +6 -0
- package/dist/assets/challenger-B6mvhLnD.png +0 -0
- package/dist/assets/channel-Bbtell5s.js +1 -0
- package/dist/assets/{chunk-KFBOBJHC-Det1gu-Y.js → chunk-2Q5K7J3B-Bud7vs23.js} +1 -1
- package/dist/assets/chunk-5VM5RSS4-BXS2grS1.js +15 -0
- package/dist/assets/chunk-F27PBJKO-B9tq0uAh.js +1 -0
- package/dist/assets/chunk-IMKFNOWR-tq4KInSH.js +231 -0
- package/dist/assets/{chunk-TMUBEWPD-drsYJGIt.js → chunk-JWPE2WC7-BmQLI9rt.js} +1 -1
- package/dist/assets/chunk-POPQ4Y6H-Ddg38Zoz.js +1 -0
- package/dist/assets/chunk-SVP7TREG-Bzzky6tZ.js +88 -0
- package/dist/assets/chunk-TICWLB2K-vejkxttT.js +206 -0
- package/dist/assets/chunk-XXDRQBXY-BP3JR-uT.js +1 -0
- package/dist/assets/classDiagram-ZZMXUADV-DrBoNhIy.js +1 -0
- package/dist/assets/classDiagram-v2-VYDZK3BY-DrBoNhIy.js +1 -0
- package/dist/assets/clojure-DTECt2xU.js +6 -0
- package/dist/assets/codicon-DCmgc-ay.ttf +0 -0
- package/dist/assets/coffee-CDGzqUPQ.js +6 -0
- package/dist/assets/cose-bilkent-JH36ORCC-Bl2MG-zp.js +1 -0
- package/dist/assets/cpp-CLLBncYj.js +6 -0
- package/dist/assets/csharp-dUCx_-0o.js +6 -0
- package/dist/assets/csp-5Rap-vPy.js +6 -0
- package/dist/assets/css-D3h14YRZ.js +8 -0
- package/dist/assets/css.worker-CVdCITaq.js +84 -0
- package/dist/assets/cssMode-BuMXoN4I.js +9 -0
- package/dist/assets/cynefin-OW5HDTMX-CpdVyv8b.js +184 -0
- package/dist/assets/cynefinDiagram-5FMLGOSQ-P5TlqeNf.js +62 -0
- package/dist/assets/cypher-DrQuvNYM.js +6 -0
- package/dist/assets/cytoscape.esm-C5JX3QLV.js +331 -0
- package/dist/assets/dagre-GXQ25YYZ-CLXNngXE.js +4 -0
- package/dist/assets/dart-CFKIUWau.js +6 -0
- package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/assets/diagram-S7CK7UJ4-BLKNaEjR.js +30 -0
- package/dist/assets/diagram-UQ7AKVKN-BFljH9Bs.js +41 -0
- package/dist/assets/diagram-VSXAHHWV-zZ0fnHV1.js +3 -0
- package/dist/assets/diagram-VX7I27RA-BcPO0ZQg.js +24 -0
- package/dist/assets/diagram-Z3DM3KII-Bg2Ebya8.js +24 -0
- package/dist/assets/diamond-fgNrYQ3a.png +0 -0
- package/dist/assets/dockerfile-Zznr-cwX.js +6 -0
- package/dist/assets/ebnfDiagram-PWID7BFC-BFTi7w73.js +1 -0
- package/dist/assets/ecl-Ce3n6wWz.js +6 -0
- package/dist/assets/editor.worker-D_iEFMe4.js +12 -0
- package/dist/assets/elixir-deUWdS0T.js +6 -0
- package/dist/assets/emerald-B8dOw2R1.png +0 -0
- package/dist/assets/erDiagram-RLTQ6QDP-CRvxk1d6.js +99 -0
- package/dist/assets/flow9-i9-g7ZhI.js +6 -0
- package/dist/assets/flowDiagram-HODETNUW-CmrRsTf5.js +168 -0
- package/dist/assets/freemarker2-DRUSS3z6.js +8 -0
- package/dist/assets/fsharp-CzKuDChf.js +6 -0
- package/dist/assets/ganttDiagram-EL5Y4UJY-Bxhcyret.js +292 -0
- package/dist/assets/gitGraphDiagram-WWUBYQGX-trH0-QPC.js +106 -0
- package/dist/assets/go-Cphgjts3.js +6 -0
- package/dist/assets/gold-C0_ymiXJ.png +0 -0
- package/dist/assets/grandmaster-B5OLgoaH.png +0 -0
- package/dist/assets/graphql-Cg7bfA9N.js +6 -0
- package/dist/assets/handlebars-MwKwE8-a.js +6 -0
- package/dist/assets/hcl-0cvrggvQ.js +6 -0
- package/dist/assets/html-BNjIPiuE.js +6 -0
- package/dist/assets/html.worker-BWKvDFG4.js +461 -0
- package/dist/assets/htmlMode-MlHAfneW.js +9 -0
- package/dist/assets/infoDiagram-27XIBGKW-WBE7FzSb.js +2 -0
- package/dist/assets/ini-Drc7WvVn.js +6 -0
- package/dist/assets/iron-ZiCbZroe.png +0 -0
- package/dist/assets/ishikawaDiagram-5VMMS53U-DI93FPmU.js +70 -0
- package/dist/assets/java-B_fMsGYe.js +6 -0
- package/dist/assets/javascript-Djo328YN.js +6 -0
- package/dist/assets/journeyDiagram-3NMN7TZE-v9HXyz1g.js +139 -0
- package/dist/assets/json.worker-BDor654j.js +49 -0
- package/dist/assets/jsonMode-DP8hyOZ1.js +15 -0
- package/dist/assets/julia-Bqgm2twL.js +6 -0
- package/dist/assets/{kanban-definition-QRCXZQQD-BKgHIztA.js → kanban-definition-UXKFOSKX--SMx2vK_.js} +9 -8
- package/dist/assets/katex-C5jXJg4s.js +257 -0
- package/dist/assets/kotlin-BSkB5QuD.js +6 -0
- package/dist/assets/layout-DwQW_dTT.js +1 -0
- package/dist/assets/less-BsTHnhdd.js +7 -0
- package/dist/assets/lexon-YWi4-JPR.js +6 -0
- package/dist/assets/linear-DZ-qpApf.js +1 -0
- package/dist/assets/liquid-DI2_KVwm.js +6 -0
- package/dist/assets/lua-nf6ki56Z.js +6 -0
- package/dist/assets/m3-Cpb6xl2v.js +6 -0
- package/dist/assets/main-D2QeJwS2.css +10 -0
- package/dist/assets/main-Dh0KXw3T.js +2210 -0
- package/dist/assets/markdown-DSZPf7rp.js +6 -0
- package/dist/assets/master-Cu5Izdtt.png +0 -0
- package/dist/assets/mdx-V0SZra-V.js +6 -0
- package/dist/assets/mindmap-definition-YA3MSWOX-C_QgaSyt.js +96 -0
- package/dist/assets/mips-B_c3zf-v.js +6 -0
- package/dist/assets/msdax-rUNN04Wq.js +6 -0
- package/dist/assets/mysql-DDwshQtU.js +6 -0
- package/dist/assets/objective-c-B5zXfXm9.js +6 -0
- package/dist/assets/pascal-CXOwvkN_.js +6 -0
- package/dist/assets/pascaligo-Bc-ZgV77.js +6 -0
- package/dist/assets/pegDiagram-XKGWAZYB-Ba2QZbef.js +1 -0
- package/dist/assets/perl-CwNk8-XU.js +6 -0
- package/dist/assets/pgsql-tGk8EFnU.js +6 -0
- package/dist/assets/php-CpIb_Oan.js +6 -0
- package/dist/assets/pieDiagram-E7YTZNPT-BwRarC17.js +39 -0
- package/dist/assets/pla-B03wrqEc.js +6 -0
- package/dist/assets/platinum-DdILQ7kR.png +0 -0
- package/dist/assets/postiats-BKlk5iyT.js +6 -0
- package/dist/assets/powerquery-Bhzvs7bI.js +6 -0
- package/dist/assets/powershell-Dd3NCNK9.js +6 -0
- package/dist/assets/protobuf-COyEY5Pt.js +7 -0
- package/dist/assets/pug-BaJupSGV.js +6 -0
- package/dist/assets/python-Id3zbGME.js +6 -0
- package/dist/assets/qsharp-DXyYeYxl.js +6 -0
- package/dist/assets/quadrantDiagram-AXDQQJYC-CmV72YMu.js +7 -0
- package/dist/assets/r-CdQndTaG.js +6 -0
- package/dist/assets/railroadDiagram-O6MQD6OU-BKgHxlAL.js +1 -0
- package/dist/assets/razor-DlQfYMdl.js +6 -0
- package/dist/assets/redis-CVwtpugi.js +6 -0
- package/dist/assets/redshift-25W9uPmb.js +6 -0
- package/dist/assets/requirementDiagram-BXWQKSXE-DqMdeInQ.js +84 -0
- package/dist/assets/restructuredtext-DfzH4Xui.js +6 -0
- package/dist/assets/ruby-Cp1zYvxS.js +6 -0
- package/dist/assets/rust-D5C2fndG.js +6 -0
- package/dist/assets/sankeyDiagram-P5KCCOFB-B6i6Z_lL.js +40 -0
- package/dist/assets/sb-CDntyWJ8.js +6 -0
- package/dist/assets/scala-BoFRg7Ot.js +6 -0
- package/dist/assets/scheme-Bio4gycK.js +6 -0
- package/dist/assets/scss-4Ik7cdeQ.js +8 -0
- package/dist/assets/sequenceDiagram-WJ2MYXX4-DdE6jZIz.js +162 -0
- package/dist/assets/shell-CX-rkNHf.js +6 -0
- package/dist/assets/silver-B5Jg1fBq.png +0 -0
- package/dist/assets/sizeCapture-INFHLROL-CnVtYUe0.js +1 -0
- package/dist/assets/solidity-Tw7wswEv.js +6 -0
- package/dist/assets/sophia-C5WLch3f.js +6 -0
- package/dist/assets/sparql-DHaeiCBh.js +6 -0
- package/dist/assets/sql-CCSDG5nI.js +6 -0
- package/dist/assets/st-pnP8ivHi.js +6 -0
- package/dist/assets/stateDiagram-D77RDMKH-BdH1nuZj.js +1 -0
- package/dist/assets/stateDiagram-v2-MP3YSRHH-DIvLL8zy.js +1 -0
- package/dist/assets/swift-DwJ7jVG9.js +8 -0
- package/dist/assets/swimlanes-42K2YHIH-DAMxF1oQ.js +1 -0
- package/dist/assets/swimlanesDiagram-VR7AAH4N-DzoJ_h3g.js +8 -0
- package/dist/assets/systemverilog-B9Xyijhd.js +6 -0
- package/dist/assets/tcl-DnHyzjbg.js +6 -0
- package/dist/assets/timeline-definition-24CTP7MA-BvGwz2rH.js +120 -0
- package/dist/assets/{transformers.web-CBYsiihV.js → transformers.web-DIzioJap.js} +1 -1
- package/dist/assets/ts.worker-DM5dOG-y.js +51334 -0
- package/dist/assets/tsMode-U8igVhRw.js +16 -0
- package/dist/assets/twig-CPajHgWi.js +6 -0
- package/dist/assets/typescript-CccdeScb.js +6 -0
- package/dist/assets/typespec-D-MeaMDU.js +6 -0
- package/dist/assets/vb-DgyLZaXg.js +6 -0
- package/dist/assets/vennDiagram-4TSXK5OY-6V8ZlT_8.js +34 -0
- package/dist/assets/wardleyDiagram-VM6X3IG4-BTfSSnWm.js +78 -0
- package/dist/assets/wgsl-BIv9DU6q.js +303 -0
- package/dist/assets/xml-D8RDyImf.js +6 -0
- package/dist/assets/xychartDiagram-S5SC5T6Z-lT88RjL9.js +7 -0
- package/dist/assets/yaml-S_obm8A2.js +6 -0
- package/dist/index.html +145 -4
- package/dist/ui-build.json +4 -0
- package/dist-apps/bundle-index.json +1 -0
- package/dist-server/__stubs__/ccusage-codex.js +1 -8
- package/dist-server/adapters/adapter.module.js +1 -35
- package/dist-server/adapters/adapter.service.js +1 -79
- package/dist-server/adapters/http-router.service.js +1 -91
- package/dist-server/app.module.js +1 -123
- package/dist-server/bootstrap/browser-open.js +1 -29
- package/dist-server/bootstrap/codex-writable-roots.js +1 -88
- package/dist-server/bootstrap/crewx-server.js +1 -91
- package/dist-server/bootstrap/env.js +1 -0
- package/dist-server/bootstrap/tls.js +1 -138
- package/dist-server/common/analytics.client.js +1 -180
- package/dist-server/common/analytics.module.js +1 -21
- package/dist-server/common/cache/provider-limit-cache.js +1 -0
- package/dist-server/common/cache-db.js +21 -0
- package/dist-server/common/cors.js +1 -15
- package/dist-server/common/crewx-workspace-root.js +1 -0
- package/dist-server/common/current-user.js +1 -0
- package/dist-server/common/decorator/cached.decorator.js +1 -0
- package/dist-server/common/decorator/skip-request-log.decorator.js +1 -8
- package/dist-server/common/decorators/project.decorator.js +1 -21
- package/dist-server/common/decorators/workspace.decorator.js +1 -24
- package/dist-server/common/device-id.js +1 -33
- package/dist-server/common/guard/request-log-metadata.guard.js +1 -0
- package/dist-server/common/interceptor/api-id-header.interceptor.js +1 -53
- package/dist-server/common/interceptor/http-logging.interceptor.js +1 -137
- package/dist-server/common/limits/defaults.js +1 -15
- package/dist-server/common/limits/limits-provider.js +1 -6
- package/dist-server/common/limits/limits.controller.js +1 -38
- package/dist-server/common/limits/limits.module.js +1 -24
- package/dist-server/common/limits/local-limits.provider.js +1 -27
- package/dist-server/common/mcp-app-sandbox-boundary.js +5 -0
- package/dist-server/common/mcp-app-sandbox-contract.js +1 -0
- package/dist-server/common/middleware/request-log-lifecycle.middleware.js +1 -0
- package/dist-server/common/middleware/workspace.middleware.js +1 -210
- package/dist-server/common/pending-instruction.js +1 -0
- package/dist-server/common/product-app-bundle.generated.js +1 -0
- package/dist-server/common/product-app-bundle.js +1 -0
- package/dist-server/common/repository.exception-filter.js +1 -48
- package/dist-server/common/request-log/request-log-context.js +1 -0
- package/dist-server/common/request-log/request-log-principal.js +1 -0
- package/dist-server/common/security/instruction-sanitizer.js +1 -0
- package/dist-server/common/security/secret-mask.js +1 -0
- package/dist-server/common/task-display-provider.js +1 -0
- package/dist-server/common/task-error-projection.js +1 -0
- package/dist-server/common/task-log/progress-steps.js +1 -0
- package/dist-server/common/task-log/provider-resume.js +1 -0
- package/dist-server/common/task-log/public-log-projection.fixtures.js +1 -0
- package/dist-server/common/task-log/public-log-projection.js +1 -0
- package/dist-server/common/task-log/public-log-projection.past-tool-use.fixtures.js +1 -0
- package/dist-server/common/task-log/stdout-json-fallback.js +1 -200
- package/dist-server/common/task-result-projection.js +1 -0
- package/dist-server/common/task-stop.js +1 -0
- package/dist-server/common/task-terminal-reason.js +1 -0
- package/dist-server/common/task-usage-accounting.js +1 -0
- package/dist-server/common/ui/derive-ui-actor.js +1 -0
- package/dist-server/common/ui/resolve-task-actor.js +1 -0
- package/dist-server/common/ui/ui-runtime-http-error.js +1 -0
- package/dist-server/common/validation.pipe.js +1 -0
- package/dist-server/common/workspace-context.store.js +1 -25
- package/dist-server/domain/account/account-auth-url.js +1 -0
- package/dist-server/domain/account/account-error.constants.js +1 -0
- package/dist-server/domain/account/account-error.exception-filter.js +1 -0
- package/dist-server/domain/account/account-profile.service.js +1 -0
- package/dist-server/domain/account/account-session.guard.js +1 -0
- package/dist-server/domain/account/account.controller.js +1 -0
- package/dist-server/domain/account/account.module.js +1 -0
- package/dist-server/domain/account/auth-json.store.js +1 -0
- package/dist-server/domain/account/auth-json.types.js +1 -0
- package/dist-server/domain/account/device-flow.service.js +1 -0
- package/dist-server/domain/account/token-refresh.service.js +1 -0
- package/dist-server/domain/agent/agent.controller.js +1 -110
- package/dist-server/domain/agent/agent.module.js +1 -27
- package/dist-server/domain/agent/agent.service.js +1 -484
- package/dist-server/domain/agent/agent.types.js +1 -3
- package/dist-server/domain/agent/builtin-agent-loader.js +1 -0
- package/dist-server/domain/agent/dto/create-agent.dto.js +1 -80
- package/dist-server/domain/agent/dto/preview-prompt.dto.js +1 -77
- package/dist-server/domain/agent/dto/provider-meta.dto.js +1 -2
- package/dist-server/domain/agent/dto/remote-provider.dto.js +1 -0
- package/dist-server/domain/agent/dto/reorder-agents.dto.js +1 -51
- package/dist-server/domain/agent/dto/update-agent.dto.js +1 -92
- package/dist-server/domain/agent/provider.controller.js +1 -49
- package/dist-server/domain/agent/template-processor.service.js +1 -71
- package/dist-server/domain/agent-suggestion/agent-suggestion.controller.js +1 -0
- package/dist-server/domain/agent-suggestion/agent-suggestion.module.js +1 -0
- package/dist-server/domain/agent-suggestion/agent-suggestion.service.js +1 -0
- package/dist-server/domain/agent-suggestion/analysis/evidence-json.js +1 -0
- package/dist-server/domain/agent-suggestion/analysis/h1-evidence.js +2 -0
- package/dist-server/domain/agent-suggestion/analysis/h1-prompt.js +108 -0
- package/dist-server/domain/agent-suggestion/analysis/h3-rules.js +1 -0
- package/dist-server/domain/agent-suggestion/analysis/index.js +1 -0
- package/dist-server/domain/agent-suggestion/analysis/merge3.js +2 -0
- package/dist-server/domain/agent-suggestion/analysis/secret-redaction.js +1 -0
- package/dist-server/domain/agent-suggestion/analysis/types.js +1 -0
- package/dist-server/domain/agent-suggestion/dto/apply-batch.dto.js +1 -0
- package/dist-server/domain/agent-suggestion/dto/suggestion-response.dto.js +1 -0
- package/dist-server/domain/app/app-list.types.js +1 -0
- package/dist-server/domain/app/app.controller.js +1 -0
- package/dist-server/domain/app/app.module.js +1 -0
- package/dist-server/domain/app/app.service.js +1 -0
- package/dist-server/domain/app/dto/app-list.dto.js +1 -0
- package/dist-server/domain/app-dev/app-dev.controller.js +1 -0
- package/dist-server/domain/app-dev/app-dev.module.js +1 -0
- package/dist-server/domain/app-dev/app-dev.service.js +2 -0
- package/dist-server/domain/auth/auth-cookie-policy.js +1 -0
- package/dist-server/domain/auth/auth.constants.js +1 -4
- package/dist-server/domain/auth/auth.controller.js +1 -123
- package/dist-server/domain/auth/auth.module.js +1 -48
- package/dist-server/domain/auth/decorators/public.decorator.js +1 -7
- package/dist-server/domain/auth/guards/base-auth.guard.js +1 -88
- package/dist-server/domain/auth/guards/csrf.guard.js +1 -0
- package/dist-server/domain/auth/guards/local-only.guard.js +1 -0
- package/dist-server/domain/auth/guards/shortcut-csrf.guard.js +1 -0
- package/dist-server/domain/auth/local-pairing.service.js +1 -0
- package/dist-server/domain/auth/local-secret.js +1 -0
- package/dist-server/domain/auth/local-transport-policy.js +1 -0
- package/dist-server/domain/auth/session-store.js +8 -26
- package/dist-server/domain/auth/sessions-db.js +20 -0
- package/dist-server/domain/auth/utils/ip.utils.js +1 -31
- package/dist-server/domain/board/board.controller.js +1 -0
- package/dist-server/domain/board/board.module.js +1 -0
- package/dist-server/domain/board/board.service.js +1 -0
- package/dist-server/domain/board/board.types.js +1 -0
- package/dist-server/domain/board/dto/create-board-batch.dto.js +1 -0
- package/dist-server/domain/board/dto/create-board.dto.js +1 -0
- package/dist-server/domain/board/dto/plan-board.dto.js +1 -0
- package/dist-server/domain/board/dto/update-board.dto.js +1 -0
- package/dist-server/domain/box/box.controller.js +1 -77
- package/dist-server/domain/box/box.module.js +1 -21
- package/dist-server/domain/box/box.service.js +1 -97
- package/dist-server/domain/box/dto/create-box.dto.js +1 -74
- package/dist-server/domain/cli/cli-local-only.guard.js +1 -0
- package/dist-server/domain/cli/cli.controller.js +4 -136
- package/dist-server/domain/cli/cli.module.js +1 -21
- package/dist-server/domain/cli/cli.service.js +3 -579
- package/dist-server/domain/cli/dto/cli-auth-status-query.dto.js +1 -0
- package/dist-server/domain/cli/dto/login-cli.dto.js +1 -25
- package/dist-server/domain/cli/dto/update-cli.dto.js +1 -31
- package/dist-server/domain/cron/cron-bootstrap.service.js +1 -0
- package/dist-server/domain/cron/cron-runtime-host.module.js +1 -0
- package/dist-server/domain/cron/cron-runtime-sync.port.js +1 -0
- package/dist-server/domain/cron/cron-runtime-sync.service.js +1 -0
- package/dist-server/domain/cron/cron.controller.js +1 -147
- package/dist-server/domain/cron/cron.module.js +1 -22
- package/dist-server/domain/cron/cron.service.js +1 -81
- package/dist-server/domain/cron/dto/cron.dto.js +1 -80
- package/dist-server/domain/doc/doc.controller.js +1 -172
- package/dist-server/domain/doc/doc.module.js +1 -21
- package/dist-server/domain/doc/doc.service.js +1 -504
- package/dist-server/domain/doc/dto/doc.dto.js +1 -64
- package/dist-server/domain/doc/image-constants.js +1 -21
- package/dist-server/domain/document/document.controller.js +1 -57
- package/dist-server/domain/document/document.module.js +1 -22
- package/dist-server/domain/document/document.service.js +7 -274
- package/dist-server/domain/document/dto/register-document.dto.js +1 -24
- package/dist-server/domain/env/dto/put-env.dto.js +1 -0
- package/dist-server/domain/env/env.controller.js +1 -0
- package/dist-server/domain/env/env.module.js +1 -0
- package/dist-server/domain/env/env.service.js +1 -0
- package/dist-server/domain/events/events.module.js +1 -31
- package/dist-server/domain/events/server-conversation.plugin.js +1 -45
- package/dist-server/domain/events/workspace-event.bus.js +1 -32
- package/dist-server/domain/events/workspace-event.types.js +1 -12
- package/dist-server/domain/events/workspace-events-test.controller.js +1 -83
- package/dist-server/domain/events/workspace-events.controller.js +1 -49
- package/dist-server/domain/fs/dto/mkdir-request.dto.js +1 -47
- package/dist-server/domain/fs/dto/mkdir-response.dto.js +1 -2
- package/dist-server/domain/fs/dto/quick-access.dto.js +1 -2
- package/dist-server/domain/fs/dto/tree-node.dto.js +1 -2
- package/dist-server/domain/fs/dto/tree-query.dto.js +1 -35
- package/dist-server/domain/fs/fs.controller.js +1 -63
- package/dist-server/domain/fs/fs.module.js +1 -22
- package/dist-server/domain/fs/fs.service.js +1 -303
- package/dist-server/domain/git/git.controller.js +1 -180
- package/dist-server/domain/git/git.module.js +1 -22
- package/dist-server/domain/git/git.service.js +1 -515
- package/dist-server/domain/goal/dto/goal.dto.js +1 -49
- package/dist-server/domain/goal/goal.controller.js +1 -86
- package/dist-server/domain/goal/goal.module.js +1 -22
- package/dist-server/domain/goal/goal.service.js +1 -197
- package/dist-server/domain/goal/parser/goal-md-parser.js +1 -166
- package/dist-server/domain/goal/parser/goal-md-serializer.js +5 -108
- package/dist-server/domain/health/health.controller.js +1 -57
- package/dist-server/domain/health/health.module.js +1 -19
- package/dist-server/domain/health/ui-asset-revision.service.js +1 -0
- package/dist-server/domain/knowledge/dto/graph-knowledge.dto.js +1 -27
- package/dist-server/domain/knowledge/dto/knowledge.dto.js +1 -71
- package/dist-server/domain/knowledge/knowledge.controller.js +1 -122
- package/dist-server/domain/knowledge/knowledge.module.js +1 -21
- package/dist-server/domain/knowledge/knowledge.service.js +1 -538
- package/dist-server/domain/market/__fixtures__/build-fixture.js +1 -0
- package/dist-server/domain/market/__fixtures__/marketplace-anonymous-install.contract.js +1 -0
- package/dist-server/domain/market/dto/add-registry.dto.js +1 -32
- package/dist-server/domain/market/dto/install-apply.dto.js +1 -0
- package/dist-server/domain/market/dto/install-cancel.dto.js +1 -0
- package/dist-server/domain/market/dto/install-market.dto.js +1 -30
- package/dist-server/domain/market/dto/install-plan.dto.js +1 -0
- package/dist-server/domain/market/dto/invite-accept.dto.js +1 -0
- package/dist-server/domain/market/dto/publish-plan.dto.js +1 -0
- package/dist-server/domain/market/dto/publish-run.dto.js +1 -0
- package/dist-server/domain/market/dto/publisher-funnel.dto.js +1 -0
- package/dist-server/domain/market/dto/publisher-invite.dto.js +1 -0
- package/dist-server/domain/market/dto/shr-response.dto.js +1 -0
- package/dist-server/domain/market/first-run-event.listener.js +1 -0
- package/dist-server/domain/market/install-error.exception-filter.js +1 -0
- package/dist-server/domain/market/install-id.validation.js +1 -0
- package/dist-server/domain/market/install-plan-expired.exception-filter.js +1 -0
- package/dist-server/domain/market/install.service.js +1 -0
- package/dist-server/domain/market/market.controller.js +1 -163
- package/dist-server/domain/market/market.module.js +1 -22
- package/dist-server/domain/market/market.service.js +3 -1447
- package/dist-server/domain/market/marketplace-api.client.js +1 -0
- package/dist-server/domain/market/marketplace-target.js +1 -0
- package/dist-server/domain/market/publish.controller.js +1 -0
- package/dist-server/domain/market/publish.service.js +1 -0
- package/dist-server/domain/market/publisher-invite-labels-ledger.service.js +2 -0
- package/dist-server/domain/market/publisher-invite.service.js +1 -0
- package/dist-server/domain/market/sharing-event.client.js +1 -0
- package/dist-server/domain/market/sharing-installs-ledger.service.js +1 -0
- package/dist-server/domain/market/sharing-updates.service.js +1 -0
- package/dist-server/domain/market/source-coordinate.js +1 -0
- package/dist-server/domain/market/template-installer.js +2 -0
- package/dist-server/domain/mcp/app-debug-log.js +4 -0
- package/dist-server/domain/mcp/browser-session.store.js +5 -297
- package/dist-server/domain/mcp/chromex-blacklist.js +1 -26
- package/dist-server/domain/mcp/chromex-negotiate.controller.js +1 -77
- package/dist-server/domain/mcp/chromex-negotiate.dto.js +1 -95
- package/dist-server/domain/mcp/chromex-negotiate.service.js +3 -237
- package/dist-server/domain/mcp/crewx-tool.factory.js +1 -119
- package/dist-server/domain/mcp/default-apps/shared.js +1 -0
- package/dist-server/domain/mcp/dto/open-mcp-app.dto.js +1 -0
- package/dist-server/domain/mcp/html-viewer.controller.js +1 -0
- package/dist-server/domain/mcp/html-viewer.service.js +1 -0
- package/dist-server/domain/mcp/mcp-app-actions.js +1 -0
- package/dist-server/domain/mcp/mcp-app-assets.js +1 -0
- package/dist-server/domain/mcp/mcp-app-resource-csp.interceptor.js +1 -0
- package/dist-server/domain/mcp/mcp-app-runtime.controller.js +1 -0
- package/dist-server/domain/mcp/mcp-app-runtime.service.js +1 -0
- package/dist-server/domain/mcp/mcp-app-sandbox.service.js +2 -0
- package/dist-server/domain/mcp/mcp-app-workspace-asset-catalog-resolver.js +1 -0
- package/dist-server/domain/mcp/mcp-apps.js +1 -0
- package/dist-server/domain/mcp/mcp-auth.guard.js +1 -75
- package/dist-server/domain/mcp/mcp.constants.js +1 -7
- package/dist-server/domain/mcp/mcp.controller.js +1 -126
- package/dist-server/domain/mcp/mcp.dto.js +1 -12
- package/dist-server/domain/mcp/mcp.module.js +1 -53
- package/dist-server/domain/mcp/mcp.service.js +1 -741
- package/dist-server/domain/mcp/product-app-bundle-assets.js +1 -0
- package/dist-server/domain/mcp/skill-backend.port.js +1 -0
- package/dist-server/domain/mcp/tool-router.service.js +1 -120
- package/dist-server/domain/mcp/ui-content-channel.service.js +1 -0
- package/dist-server/domain/message/dto/list-messages.dto.js +1 -57
- package/dist-server/domain/message/dto/send-message.dto.js +1 -133
- package/dist-server/domain/message/message.controller.js +1 -113
- package/dist-server/domain/message/message.module.js +1 -26
- package/dist-server/domain/message/message.multipart.js +1 -0
- package/dist-server/domain/message/message.service.js +9 -292
- package/dist-server/domain/notification/dto/create-notification.dto.js +1 -0
- package/dist-server/domain/notification/dto/list-notifications.dto.js +1 -0
- package/dist-server/domain/notification/notification.controller.js +1 -0
- package/dist-server/domain/notification/notification.module.js +1 -0
- package/dist-server/domain/notification/notification.service.js +1 -0
- package/dist-server/domain/onboarding/onboarding.controller.js +1 -97
- package/dist-server/domain/onboarding/onboarding.module.js +1 -23
- package/dist-server/domain/onboarding/onboarding.service.js +1 -106
- package/dist-server/domain/onboarding/onboarding.types.js +1 -2
- package/dist-server/domain/onboarding/presets/custom.js +1 -10
- package/dist-server/domain/onboarding/presets/dev-team.js +1 -41
- package/dist-server/domain/onboarding/presets/index.js +1 -15
- package/dist-server/domain/onboarding/presets/marketing-team.js +1 -29
- package/dist-server/domain/onboarding/presets/planning-team.js +1 -29
- package/dist-server/domain/onboarding/presets/solo.js +1 -17
- package/dist-server/domain/planner/dto/planner.dto.js +1 -58
- package/dist-server/domain/planner/planner.controller.js +1 -74
- package/dist-server/domain/planner/planner.module.js +1 -22
- package/dist-server/domain/planner/planner.service.js +1 -272
- package/dist-server/domain/project/dto/create-project-ledger.dto.js +1 -0
- package/dist-server/domain/project/dto/create-project.dto.js +1 -46
- package/dist-server/domain/project/dto/update-project.dto.js +1 -60
- package/dist-server/domain/project/project-ledger.controller.js +1 -0
- package/dist-server/domain/project/project-ledger.service.js +1 -0
- package/dist-server/domain/project/project.controller.js +1 -129
- package/dist-server/domain/project/project.module.js +1 -22
- package/dist-server/domain/project/project.service.js +1 -173
- package/dist-server/domain/settings/local-ai-server/local-ai-server.controller.js +1 -0
- package/dist-server/domain/settings/local-ai-server/local-ai-server.dto.js +1 -0
- package/dist-server/domain/settings/local-ai-server/local-ai-server.network-policy.js +1 -0
- package/dist-server/domain/settings/local-ai-server/local-ai-server.service.js +1 -0
- package/dist-server/domain/settings/local-ai-server/local-ai-server.types.js +1 -0
- package/dist-server/domain/settings/request-log-maintenance.js +1 -0
- package/dist-server/domain/settings/request-log-maintenance.service.js +1 -0
- package/dist-server/domain/settings/request-log-maintenance.worker.js +1 -0
- package/dist-server/domain/settings/request-log-prune.js +40 -0
- package/dist-server/domain/settings/request-log-rollup.js +31 -0
- package/dist-server/domain/settings/request-log-store.js +11 -0
- package/dist-server/domain/settings/request-logs.controller.js +1 -0
- package/dist-server/domain/settings/request-logs.service.js +15 -0
- package/dist-server/domain/settings/request-logs.types.js +1 -0
- package/dist-server/domain/settings/settings.controller.js +1 -52
- package/dist-server/domain/settings/settings.module.js +1 -24
- package/dist-server/domain/settings/settings.service.js +1 -221
- package/dist-server/domain/settings/storage-retention.js +34 -0
- package/dist-server/domain/settings/storage-retention.worker.js +14 -0
- package/dist-server/domain/settings/storage.controller.js +1 -0
- package/dist-server/domain/settings/storage.service.js +1 -0
- package/dist-server/domain/settings/storage.types.js +1 -0
- package/dist-server/domain/system/desktop-control.guard.js +1 -0
- package/dist-server/domain/system/shortcut.service.js +1 -0
- package/dist-server/domain/system/shortcut.types.js +1 -0
- package/dist-server/domain/system/shutdown.dto.js +1 -0
- package/dist-server/domain/system/system.controller.js +5 -41
- package/dist-server/domain/system/system.module.js +1 -19
- package/dist-server/domain/system/system.service.js +1 -0
- package/dist-server/domain/system/task-ownership.js +1 -0
- package/dist-server/domain/system/update-gate.service.js +1 -0
- package/dist-server/domain/task/child-task-projection.js +1 -0
- package/dist-server/domain/task/dto/all-tasks.dto.js +1 -55
- package/dist-server/domain/task/dto/descendants.dto.js +1 -0
- package/dist-server/domain/task/dto/list-tasks.dto.js +1 -69
- package/dist-server/domain/task/dto/search-tasks.dto.js +1 -66
- package/dist-server/domain/task/dto/send-message.dto.js +1 -41
- package/dist-server/domain/task/dto/task-prompt.dto.js +1 -0
- package/dist-server/domain/task/dto/task-rating.dto.js +1 -0
- package/dist-server/domain/task/dto/task-status.dto.js +1 -34
- package/dist-server/domain/task/dto/workspace-usage.dto.js +1 -38
- package/dist-server/domain/task/prompt-composition.js +1 -0
- package/dist-server/domain/task/task-execution-path.js +1 -0
- package/dist-server/domain/task/task.constants.js +1 -12
- package/dist-server/domain/task/task.controller.js +1 -184
- package/dist-server/domain/task/task.module.js +1 -23
- package/dist-server/domain/task/task.service.js +3 -1082
- package/dist-server/domain/terminal/terminal-access-policy.js +1 -0
- package/dist-server/domain/terminal/terminal-audit.service.js +25 -0
- package/dist-server/domain/terminal/terminal-csp.js +1 -0
- package/dist-server/domain/terminal/terminal-local-only.guard.js +1 -0
- package/dist-server/domain/terminal/terminal-session.service.js +1 -0
- package/dist-server/domain/terminal/terminal-ticket.service.js +1 -0
- package/dist-server/domain/terminal/terminal-ws.service.js +1 -0
- package/dist-server/domain/terminal/terminal.controller.js +1 -0
- package/dist-server/domain/terminal/terminal.module.js +1 -0
- package/dist-server/domain/thread/dto/build-context.dto.js +1 -42
- package/dist-server/domain/thread/dto/highlight.dto.js +1 -0
- package/dist-server/domain/thread/dto/list-messages.dto.js +1 -49
- package/dist-server/domain/thread/dto/list-threads.dto.js +1 -70
- package/dist-server/domain/thread/dto/reorder-pins.dto.js +1 -22
- package/dist-server/domain/thread/dto/search-threads.dto.js +1 -13
- package/dist-server/domain/thread/dto/thread-label.dto.js +1 -0
- package/dist-server/domain/thread/dto/timeline-query.dto.js +1 -0
- package/dist-server/domain/thread/dto/update-thread.dto.js +1 -23
- package/dist-server/domain/thread/overdrive.types.js +1 -38
- package/dist-server/domain/thread/thread-highlight-flight.service.js +1 -0
- package/dist-server/domain/thread/thread-highlight-regeneration.service.js +1 -0
- package/dist-server/domain/thread/thread-highlight-trigger.service.js +1 -0
- package/dist-server/domain/thread/thread-highlight.constants.js +1 -0
- package/dist-server/domain/thread/thread-label.controller.js +1 -0
- package/dist-server/domain/thread/thread-label.service.js +1 -0
- package/dist-server/domain/thread/thread-preview.controller.js +1 -0
- package/dist-server/domain/thread/thread-title.backfill.js +1 -0
- package/dist-server/domain/thread/thread-title.types.js +1 -0
- package/dist-server/domain/thread/thread.controller.js +1 -190
- package/dist-server/domain/thread/thread.module.js +1 -25
- package/dist-server/domain/thread/thread.service.js +6 -707
- package/dist-server/domain/token/token.controller.js +1 -73
- package/dist-server/domain/token/token.dto.js +1 -56
- package/dist-server/domain/token/token.module.js +1 -22
- package/dist-server/domain/token/token.service.js +3 -235
- package/dist-server/domain/usage/codex-rate-limits.client.js +2 -0
- package/dist-server/domain/usage/usage.controller.js +1 -186
- package/dist-server/domain/usage/usage.module.js +1 -22
- package/dist-server/domain/usage/usage.service.js +1 -952
- package/dist-server/domain/usage/usage.types.js +1 -4
- package/dist-server/domain/usage-report/dto/usage-report.dto.js +1 -2
- package/dist-server/domain/usage-report/report-findings.js +1 -0
- package/dist-server/domain/usage-report/usage-report.controller.js +1 -72
- package/dist-server/domain/usage-report/usage-report.module.js +1 -23
- package/dist-server/domain/usage-report/usage-report.service.js +1 -135
- package/dist-server/domain/wbs/wbs.controller.js +1 -51
- package/dist-server/domain/wbs/wbs.module.js +1 -21
- package/dist-server/domain/wbs/wbs.service.js +1 -94
- package/dist-server/domain/wi/dto/create-wi.dto.js +1 -0
- package/dist-server/domain/wi/dto/update-wi-status.dto.js +1 -0
- package/dist-server/domain/wi/wi.controller.js +1 -70
- package/dist-server/domain/wi/wi.module.js +1 -22
- package/dist-server/domain/wi/wi.service.js +2 -280
- package/dist-server/domain/wi/wi.types.js +1 -2
- package/dist-server/domain/workflow/chat-card-proof.service.js +1 -83
- package/dist-server/domain/workflow/dto/thread-app-launch.dto.js +1 -0
- package/dist-server/domain/workflow/thread-app-launch.controller.js +1 -0
- package/dist-server/domain/workflow/ui-instance.controller.js +1 -0
- package/dist-server/domain/workflow/workflow-approval-v2.js +1 -0
- package/dist-server/domain/workflow/workflow.controller.js +1 -149
- package/dist-server/domain/workflow/workflow.module.js +1 -22
- package/dist-server/domain/workflow/workflow.service.js +3 -782
- package/dist-server/domain/workspace/dto/create-workspace.dto.js +1 -45
- package/dist-server/domain/workspace/dto/rename-workspace.dto.js +1 -0
- package/dist-server/domain/workspace/dto/switch-workspace.dto.js +1 -32
- package/dist-server/domain/workspace/dto/workspace-info.dto.js +1 -2
- package/dist-server/domain/workspace/workspace.controller.js +1 -98
- package/dist-server/domain/workspace/workspace.module.js +1 -22
- package/dist-server/domain/workspace/workspace.service.js +1 -201
- package/dist-server/main.js +1 -231
- package/dist-server/modules/crewx-pool.service.js +1 -340
- package/dist-server/modules/crewx.module.js +1 -53
- package/dist-server/modules/workspace-config.store.js +1 -0
- package/dist-server/repository/agent-suggestion.repository.js +1 -0
- package/dist-server/repository/base-sqlite.repository.js +1 -18
- package/dist-server/repository/box.repository.js +1 -99
- package/dist-server/repository/message.repository.js +1 -22
- package/dist-server/repository/notification.repository.js +1 -0
- package/dist-server/repository/project.repository.js +1 -51
- package/dist-server/repository/repository.module.js +1 -38
- package/dist-server/repository/request-log.repository.js +2 -87
- package/dist-server/repository/task.repository.js +11 -376
- package/dist-server/repository/thread-label.repository.js +1 -0
- package/dist-server/repository/thread.repository.js +110 -189
- package/dist-server/repository/usage-limit-snapshot.repository.js +1 -24
- package/dist-server/repository/usage-report.repository.js +1 -27
- package/dist-server/shared/attachment-path.js +1 -0
- package/dist-server/shared/attachment-policy.js +1 -0
- package/dist-server/shared/crewx-home.js +1 -58
- package/dist-server/shared/crewx-state.js +1 -66
- package/dist-server/shared/doc-heading.js +1 -0
- package/dist-server/shared/marketplace-api.constants.js +1 -0
- package/dist-server/shared/thread-label.js +1 -0
- package/dist-server/shared/workflow-run.contract.js +1 -0
- package/dist-server/test-utils/compat-database.js +1 -30
- package/dist-server/test-utils/request-log-fixtures.js +35 -0
- package/dist-server/utils/tokenizer.js +1 -8
- package/examples/mcp-apps/dist/sandbox/sandbox.html +14 -0
- package/examples/mcp-apps/dist/workflow/workflow-card.html +161 -0
- package/package.json +201 -34
- package/packages/cli/dist/bootstrap/codex-writable-roots.d.ts +20 -1
- package/packages/cli/dist/bootstrap/codex-writable-roots.js +1 -88
- package/packages/cli/dist/bootstrap/crewx-cli.js +1 -63
- package/packages/cli/dist/builtin.d.ts +1 -1
- package/packages/cli/dist/builtin.js +5 -127
- package/packages/cli/dist/commands/agent.js +4 -224
- package/packages/cli/dist/commands/cal.d.ts +15 -0
- package/packages/cli/dist/commands/cal.js +2 -0
- package/packages/cli/dist/commands/db.d.ts +3 -0
- package/packages/cli/dist/commands/db.js +59 -125
- package/packages/cli/dist/commands/detached.d.ts +95 -0
- package/packages/cli/dist/commands/detached.js +15 -0
- package/packages/cli/dist/commands/doctor.d.ts +77 -0
- package/packages/cli/dist/commands/doctor.js +4 -196
- package/packages/cli/dist/commands/emit-trailer.d.ts +25 -0
- package/packages/cli/dist/commands/emit-trailer.js +2 -0
- package/packages/cli/dist/commands/execute.d.ts +8 -4
- package/packages/cli/dist/commands/execute.js +15 -146
- package/packages/cli/dist/commands/hook/command-marker.d.ts +2 -0
- package/packages/cli/dist/commands/hook/command-marker.js +1 -0
- package/packages/cli/dist/commands/hook/install.d.ts +0 -1
- package/packages/cli/dist/commands/hook/install.js +8 -175
- package/packages/cli/dist/commands/hook/paths.js +1 -94
- package/packages/cli/dist/commands/hook/status.js +1 -86
- package/packages/cli/dist/commands/hook/uninstall.js +1 -71
- package/packages/cli/dist/commands/hook-dispatch.js +2 -180
- package/packages/cli/dist/commands/init.d.ts +34 -0
- package/packages/cli/dist/commands/init.js +37 -370
- package/packages/cli/dist/commands/kill.d.ts +2 -8
- package/packages/cli/dist/commands/kill.js +1 -52
- package/packages/cli/dist/commands/log.js +3 -95
- package/packages/cli/dist/commands/parse-agent-message.js +1 -52
- package/packages/cli/dist/commands/parse-common-flags.d.ts +5 -1
- package/packages/cli/dist/commands/parse-common-flags.js +3 -181
- package/packages/cli/dist/commands/ps.d.ts +2 -2
- package/packages/cli/dist/commands/ps.js +2 -107
- package/packages/cli/dist/commands/publish.d.ts +1 -0
- package/packages/cli/dist/commands/publish.js +27 -0
- package/packages/cli/dist/commands/query.d.ts +7 -2
- package/packages/cli/dist/commands/query.js +16 -146
- package/packages/cli/dist/commands/registry.js +1 -31
- package/packages/cli/dist/commands/resolve-prompt.js +3 -54
- package/packages/cli/dist/commands/resolve-recipient.d.ts +14 -0
- package/packages/cli/dist/commands/resolve-recipient.js +3 -0
- package/packages/cli/dist/commands/restart.d.ts +3 -1
- package/packages/cli/dist/commands/restart.js +18 -162
- package/packages/cli/dist/commands/result.d.ts +8 -3
- package/packages/cli/dist/commands/result.js +1 -70
- package/packages/cli/dist/commands/shortcut.d.ts +1 -0
- package/packages/cli/dist/commands/shortcut.js +18 -0
- package/packages/cli/dist/commands/slack.js +16 -559
- package/packages/cli/dist/commands/stop.d.ts +8 -0
- package/packages/cli/dist/commands/stop.js +8 -0
- package/packages/cli/dist/commands/write-output.js +1 -24
- package/packages/cli/dist/index.d.ts +1 -1
- package/packages/cli/dist/index.js +1 -5
- package/packages/cli/dist/logging.d.ts +1 -1
- package/packages/cli/dist/logging.js +10 -86
- package/packages/cli/dist/main.d.ts +3 -2
- package/packages/cli/dist/main.js +44 -253
- package/packages/cli/dist/register-builtin-tools.js +1 -9
- package/packages/cli/dist/slack/file-download.js +1 -134
- package/packages/cli/dist/slack/markdown.js +1 -33
- package/packages/cli/dist/utils/env-defaults.d.ts +2 -5
- package/packages/cli/dist/utils/env-defaults.js +1 -10
- package/packages/cli/dist/utils/inherited-trace.d.ts +24 -0
- package/packages/cli/dist/utils/inherited-trace.js +1 -25
- package/packages/cli/dist/utils/product-package-root.d.ts +6 -0
- package/packages/cli/dist/utils/product-package-root.js +1 -0
- package/packages/cli/dist/utils/sdk-compat.d.ts +24 -0
- package/packages/cli/dist/utils/sdk-compat.js +1 -0
- package/packages/cli/dist/utils/version.js +1 -28
- package/packages/cli/package.json +7 -2
- package/server.js +2 -106
- package/dist/assets/MarketPage-BgAWacd7.js +0 -41
- package/dist/assets/PromptTab-LML0dhnv.js +0 -27
- package/dist/assets/arc-BBMQPf9Z.js +0 -1
- package/dist/assets/architectureDiagram-UYN6MBPD-Uinv3ruS.js +0 -36
- package/dist/assets/blockDiagram-ZHA2E4KO-CM8iVhUy.js +0 -121
- package/dist/assets/c4Diagram-6F5ED5ID-D6HM4dEk.js +0 -10
- package/dist/assets/channel-cs9O3fiH.js +0 -1
- package/dist/assets/chunk-5HRBRIJM-CsiffIEz.js +0 -1
- package/dist/assets/chunk-7U56Z5CX-kgH95T9a.js +0 -220
- package/dist/assets/chunk-ASOPGD6M-dKFyf37d.js +0 -1
- package/dist/assets/chunk-T2TOU4HS-DMk7ilyN.js +0 -164
- package/dist/assets/classDiagram-LNE6IOMH-veS4tD2p.js +0 -1
- package/dist/assets/classDiagram-v2-MQ7JQ4JX-veS4tD2p.js +0 -1
- package/dist/assets/cytoscape.esm-BiciSPf8.js +0 -331
- package/dist/assets/dagre-4EVJKHTY-DKMJYrr5.js +0 -4
- package/dist/assets/diagram-QW4FP2JN-BNyGnAGw.js +0 -24
- package/dist/assets/erDiagram-6RL3IURR-qo27Uk30.js +0 -51
- package/dist/assets/flowDiagram-7ASYPVHJ-BudDObQU.js +0 -160
- package/dist/assets/ganttDiagram-NTVNEXSI-DCFf5efZ.js +0 -257
- package/dist/assets/gitGraph-YCYPL57B-Cv8vXWsN.js +0 -133
- package/dist/assets/gitGraphDiagram-NRZ2UAAF-DJUV3_64.js +0 -65
- package/dist/assets/graph-BlwPajkw.js +0 -1
- package/dist/assets/infoDiagram-A4XQUW5V-BlzLOJuh.js +0 -2
- package/dist/assets/journeyDiagram-G5WM74LC-BoBDY7uv.js +0 -139
- package/dist/assets/katex-DkKDou_j.js +0 -257
- package/dist/assets/layout-Bvwu4dCi.js +0 -1
- package/dist/assets/linear-CoIZ0x19.js +0 -1
- package/dist/assets/main-BOcmSxv5.css +0 -10
- package/dist/assets/main-CZQslZK1.js +0 -1526
- package/dist/assets/mindmap-definition-GWI6TPTV-B4T62xYW.js +0 -95
- package/dist/assets/pieDiagram-YF2LJOPJ-C570Jl7r.js +0 -30
- package/dist/assets/quadrantDiagram-OS5C2QUG-D9kamKQz.js +0 -7
- package/dist/assets/requirementDiagram-MIRIMTAZ-CbI9--NI.js +0 -52
- package/dist/assets/sankeyDiagram-Y46BX6SQ-5AYnNxm5.js +0 -8
- package/dist/assets/sequenceDiagram-G6AWOVSC-awwP3H4O.js +0 -122
- package/dist/assets/stateDiagram-MAYHULR4-DsTGBCid.js +0 -1
- package/dist/assets/stateDiagram-v2-4JROLMXI-B8Exp_99.js +0 -1
- package/dist/assets/timeline-definition-U7ZMHBDA-Dur75zzR.js +0 -61
- package/dist/assets/xychartDiagram-6QU3TZC5-zevo9T1B.js +0 -7
- package/dist-electron/main.js +0 -194
- package/dist-electron/overlay.js +0 -129
- package/dist-electron/package.json +0 -1
- package/dist-electron/preload.js +0 -12
package/bin/cli-commands.js
CHANGED
|
@@ -1,36 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* SSOT for CLI subcommand whitelist.
|
|
3
|
-
*
|
|
4
|
-
* These are all commands that the launcher routes to the CLI engine (packages/cli).
|
|
5
|
-
* Must stay in sync with KNOWN_COMMANDS ∪ BUILTIN_COMMAND_NAMES ∪ NOT_YET_MIGRATED
|
|
6
|
-
* in packages/cli/src/commands/registry.ts.
|
|
7
|
-
*
|
|
8
|
-
* Verified by bin/__tests__/crewx-entrypoint.test.ts SSOT assertion test.
|
|
9
|
-
*/
|
|
10
|
-
export const CLI_SUBCOMMANDS = new Set([
|
|
11
|
-
// Query / Execute
|
|
12
|
-
'q', 'query',
|
|
13
|
-
'x', 'execute',
|
|
14
|
-
|
|
15
|
-
// Agent / Task
|
|
16
|
-
'agent',
|
|
17
|
-
'ps', 'kill', 'result', 'log', 'restart',
|
|
18
|
-
|
|
19
|
-
// Diagnostics / Init / DB
|
|
20
|
-
'doctor', 'init',
|
|
21
|
-
'db',
|
|
22
|
-
'help',
|
|
23
|
-
|
|
24
|
-
// Built-in tools
|
|
25
|
-
'memory', 'search', 'doc', 'wbs', 'cron', 'workflow', 'skill', 'dreaming',
|
|
26
|
-
'wi', 'chromex',
|
|
27
|
-
|
|
28
|
-
// Hook platform
|
|
29
|
-
'hook', 'hook-dispatch',
|
|
30
|
-
|
|
31
|
-
// Slack / Adapters
|
|
32
|
-
'slack', 'slack:files',
|
|
33
|
-
|
|
34
|
-
// Not-yet-migrated
|
|
35
|
-
'template', 'templates', 'chat', 'mcp',
|
|
36
|
-
]);
|
|
1
|
+
const e=new Set(["q","query","x","execute","agent","ps","stop","kill","result","log","restart","doctor","init","db","help","shortcut","publish","memory","search","doc","wbs","cron","workflow","skill","dreaming","wi","chromex","notify","app","hook","hook-dispatch","slack","slack:files","template","templates","chat","mcp"]);export{e as CLI_SUBCOMMANDS};
|
package/bin/crewx-lib.js
CHANGED
|
@@ -1,173 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
import { mkdirSync } from 'fs';
|
|
5
|
-
import { homedir } from 'os';
|
|
6
|
-
import { join } from 'path';
|
|
7
|
-
import { CLI_SUBCOMMANDS } from './cli-commands.js';
|
|
8
|
-
import { buildHintMessage } from './launcher-flags.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Parse --port option from extra CLI args.
|
|
13
|
-
* Backward-compatible thin wrapper; kept for existing callers.
|
|
14
|
-
*
|
|
15
|
-
* @param {string[]} extraArgs
|
|
16
|
-
* @returns {{ port: number } | { error: string } | null}
|
|
17
|
-
*/
|
|
18
|
-
export function parseWebPort(extraArgs) {
|
|
19
|
-
const portIdx = extraArgs.indexOf('--port');
|
|
20
|
-
if (portIdx === -1) return null;
|
|
21
|
-
const portVal = Number(extraArgs[portIdx + 1]);
|
|
22
|
-
if (!portVal || portVal < 1 || portVal > 65535) {
|
|
23
|
-
return { error: 'Invalid port number. Use 1-65535.' };
|
|
24
|
-
}
|
|
25
|
-
return { port: portVal };
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Determine the route based on CLI arguments.
|
|
30
|
-
*
|
|
31
|
-
* Priority order:
|
|
32
|
-
* 1. --help/-h, --version/-v → CLI (global options handled by CLI engine)
|
|
33
|
-
* 2. Known CLI subcommand → CLI
|
|
34
|
-
* 3. 'serve' verb → serve
|
|
35
|
-
* 4. 'electron' verb → electron
|
|
36
|
-
* 5. No arguments → web-default (browser auto-open)
|
|
37
|
-
* 6. Unknown first argument → error with hint
|
|
38
|
-
*
|
|
39
|
-
* @param {string[]} args - process.argv.slice(2)
|
|
40
|
-
* @returns {{ route: string, routeArgs: string[], error?: string }}
|
|
41
|
-
*/
|
|
42
|
-
export function resolveRoute(args) {
|
|
43
|
-
const firstArg = args[0];
|
|
44
|
-
|
|
45
|
-
// 1. Global options → CLI engine handles them
|
|
46
|
-
if (firstArg === '--help' || firstArg === '-h') {
|
|
47
|
-
return { route: 'cli', routeArgs: args };
|
|
48
|
-
}
|
|
49
|
-
if (firstArg === '--version' || firstArg === '-v') {
|
|
50
|
-
return { route: 'cli', routeArgs: args };
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// 2. CLI subcommand whitelist → CLI engine
|
|
54
|
-
if (firstArg !== undefined && CLI_SUBCOMMANDS.has(firstArg)) {
|
|
55
|
-
return { route: 'cli', routeArgs: args };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// 3. New verb: serve
|
|
59
|
-
if (firstArg === 'serve') {
|
|
60
|
-
return { route: 'serve', routeArgs: args.slice(1) };
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// 4. New verb: electron
|
|
64
|
-
if (firstArg === 'electron') {
|
|
65
|
-
return { route: 'electron', routeArgs: args.slice(1) };
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// 5. No arguments → web default
|
|
69
|
-
if (firstArg === undefined) {
|
|
70
|
-
return { route: 'web-default', routeArgs: [] };
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// 6. Unknown → error with hint
|
|
74
|
-
const hint = buildHintMessage(firstArg);
|
|
75
|
-
const hintSuffix = hint ? `\n ${hint}` : '\n Run `crewx --help` for usage.';
|
|
76
|
-
return {
|
|
77
|
-
route: 'error',
|
|
78
|
-
error: `Unknown command or option: "${firstArg}"${hintSuffix}`,
|
|
79
|
-
routeArgs: args,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Ensure CrewX directories exist before any subcommand runs.
|
|
85
|
-
* - ~/.crewx (crewx home) — config + DB (crewx.db)
|
|
86
|
-
* - ~/crewx (crewx workspaces dir) — user-facing workspaces collection,
|
|
87
|
-
* surfaced as "워크스페이스" Quick Access shortcut
|
|
88
|
-
* in DirectoryPickerDialog (WKSUI001-NEW).
|
|
89
|
-
*
|
|
90
|
-
* The two are completely different directories — never conflate them.
|
|
91
|
-
* Both calls are idempotent (mkdir recursive). Failures are warned to stderr
|
|
92
|
-
* but never abort the launcher.
|
|
93
|
-
*/
|
|
94
|
-
export function ensureCrewxDirs() {
|
|
95
|
-
const crewxHome = join(homedir(), '.crewx'); // config/DB
|
|
96
|
-
const crewxWorkspaces = join(homedir(), 'crewx'); // workspaces collection
|
|
97
|
-
|
|
98
|
-
const crewxTls = join(crewxHome, 'tls');
|
|
99
|
-
|
|
100
|
-
for (const dir of [crewxHome, crewxWorkspaces, crewxTls]) {
|
|
101
|
-
try {
|
|
102
|
-
mkdirSync(dir, { recursive: true });
|
|
103
|
-
} catch (err) {
|
|
104
|
-
console.warn(`[crewx] Failed to ensure ${dir}: ${err?.message ?? err}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Forward signals to a child process for clean shutdown.
|
|
111
|
-
*
|
|
112
|
-
* Uses an `exited` flag (set by the child's 'exit' event) instead of
|
|
113
|
-
* `child.killed`, because `child.killed` becomes `true` immediately after
|
|
114
|
-
* calling `child.kill()` — even if the child process is still running.
|
|
115
|
-
* This ensures the SIGKILL escalation timer can actually fire.
|
|
116
|
-
*
|
|
117
|
-
* On Windows, SIGTERM is equivalent to an immediate kill.
|
|
118
|
-
*
|
|
119
|
-
* @param {import('child_process').ChildProcess} child
|
|
120
|
-
* @param {{ escalateKill?: boolean, detached?: boolean }} options
|
|
121
|
-
*/
|
|
122
|
-
export function setupSignalForwarding(child, { escalateKill = false, detached = false } = {}) {
|
|
123
|
-
let exited = false;
|
|
124
|
-
let escalationScheduled = false;
|
|
125
|
-
|
|
126
|
-
child.on('exit', () => {
|
|
127
|
-
exited = true;
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
// When detached, the child runs in its own process group.
|
|
131
|
-
// Use process.kill(-pid) to kill the entire group (Electron + GPU helpers).
|
|
132
|
-
// When not detached, use child.kill() for single-process kill.
|
|
133
|
-
const killChild = (signal) => {
|
|
134
|
-
try {
|
|
135
|
-
if (detached) {
|
|
136
|
-
process.kill(-child.pid, signal);
|
|
137
|
-
} else {
|
|
138
|
-
child.kill(signal);
|
|
139
|
-
}
|
|
140
|
-
} catch {
|
|
141
|
-
// Process or process group already terminated
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
process.on('SIGINT', () => {
|
|
146
|
-
if (!exited) {
|
|
147
|
-
killChild('SIGTERM');
|
|
148
|
-
if (escalateKill && !escalationScheduled) {
|
|
149
|
-
escalationScheduled = true;
|
|
150
|
-
setTimeout(() => {
|
|
151
|
-
if (!exited) killChild('SIGKILL');
|
|
152
|
-
}, 3000).unref();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
process.on('SIGTERM', () => {
|
|
158
|
-
if (!exited) killChild('SIGTERM');
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
process.on('SIGHUP', () => {
|
|
162
|
-
if (!exited) killChild('SIGHUP');
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
// Clean up the child process group when the parent exits unexpectedly
|
|
166
|
-
if (detached) {
|
|
167
|
-
process.on('exit', () => {
|
|
168
|
-
if (!exited) {
|
|
169
|
-
try { process.kill(-child.pid, 'SIGKILL'); } catch {}
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
}
|
|
1
|
+
import{lstatSync as a,mkdirSync as l,readFileSync as f}from"fs";import{homedir as u}from"os";import{join as s}from"path";import{getCrewxHome as p}from"@crewx/sdk";import{CLI_SUBCOMMANDS as d}from"./cli-commands.js";import{buildHintMessage as w}from"./launcher-flags.js";const m=384;const h="pairing.token";const E="http://localhost:8150";const I=/^crewxrt_pairing_[0-9a-f]{64}$/;function g(){return process.platform==="win32"||typeof process.getuid!=="function"?void 0:process.getuid()}function x(){return s(p(),"auth","runtime",h)}function C(){const e=x();let r;try{r=a(e)}catch(o){if(o?.code==="ENOENT"){throw new Error("Pairing runtime credential is missing; start the CrewX server once to create pairing.token.")}throw new Error("Pairing runtime credential is not readable.")}if(!r.isFile()){throw new Error("Pairing runtime credential is not a regular file.")}if(process.platform!=="win32"&&(r.mode&511)!==m){throw new Error("Pairing runtime credential permissions are invalid; expected mode 0600.")}const n=g();if(n!==void 0&&r.uid!==n){throw new Error("Pairing runtime credential must be owned by the current user.")}let t;try{t=f(e,"utf8")}catch{throw new Error("Pairing runtime credential is not readable.")}if(!I.test(t)){throw new Error("Pairing runtime credential has an invalid format.")}return t}function T({port:e,env:r=process.env}={}){const n=e===void 0?r.CREWX_ENDPOINT?.trim()||E:`http://localhost:${e}`;let t;try{t=new URL(n)}catch{throw new Error("Invalid CrewX endpoint. Use an http:// or https:// URL.")}if(t.protocol!=="http:"&&t.protocol!=="https:"){throw new Error("Invalid CrewX endpoint. Use an http:// or https:// URL.")}if(t.username||t.password||t.search||t.hash){throw new Error("Invalid CrewX endpoint. Do not include credentials, query, or fragment data.")}return t.toString().replace(/\/$/,"")}function y(e){const r=e.indexOf("--port");if(r===-1)return null;const n=Number(e[r+1]);if(!n||n<1||n>65535){return{error:"Invalid port number. Use 1-65535."}}return{port:n}}function G(e){const r=e[0];if(r==="--help"||r==="-h"){return{route:"cli",routeArgs:e}}if(r==="--version"||r==="-v"){return{route:"cli",routeArgs:e}}if(r!==void 0&&d.has(r)){return{route:"cli",routeArgs:e}}if(r==="serve"){return{route:"serve",routeArgs:e.slice(1)}}if(r==="pair"){return{route:"pair",routeArgs:e.slice(1)}}if(r==="electron"){return{route:"electron",routeArgs:e.slice(1)}}if(r===void 0){return{route:"web-default",routeArgs:[]}}const n=w(r);const t=n?`
|
|
2
|
+
${n}`:"\n Run `crewx --help` for usage.";return{route:"error",error:`Unknown command or option: "${r}"${t}`,routeArgs:e}}function L(){const e=s(u(),".crewx");const r=s(u(),"crewx");const n=s(e,"tls");for(const t of[e,r,n]){try{l(t,{recursive:true})}catch(o){console.warn(`[crewx] Failed to ensure ${t}: ${o?.message??o}`)}}}function U(e,{escalateKill:r=false,detached:n=false}={}){let t=false;let o=false;e.on("exit",()=>{t=true});const i=c=>{try{if(n){process.kill(-e.pid,c)}else{e.kill(c)}}catch{}};process.on("SIGINT",()=>{if(!t){i("SIGTERM");if(r&&!o){o=true;setTimeout(()=>{if(!t)i("SIGKILL")},3e3).unref()}}});process.on("SIGTERM",()=>{if(!t)i("SIGTERM")});process.on("SIGHUP",()=>{if(!t)i("SIGHUP")});if(n){process.on("exit",()=>{if(!t){try{process.kill(-e.pid,"SIGKILL")}catch{}}})}}export{L as ensureCrewxDirs,x as pairingCredentialPath,y as parseWebPort,C as readPairingCredential,T as resolvePairEndpoint,G as resolveRoute,U as setupSignalForwarding};
|
package/bin/crewx-ui.js
CHANGED
|
@@ -1,86 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
* crewx-ui launcher
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* npx crewx-ui → NestJS web server (default)
|
|
7
|
-
* npx crewx-ui --electron → Electron dashboard (main window)
|
|
8
|
-
* npx crewx-ui --overlay → Electron floating overlay
|
|
9
|
-
*/
|
|
10
|
-
import { spawn } from 'child_process';
|
|
11
|
-
import { fileURLToPath } from 'url';
|
|
12
|
-
import { dirname, join } from 'path';
|
|
13
|
-
import { createRequire } from 'module';
|
|
14
|
-
import { ensureCrewxDirs } from './crewx-lib.js';
|
|
15
|
-
|
|
16
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
-
const __dirname = dirname(__filename);
|
|
18
|
-
|
|
19
|
-
ensureCrewxDirs();
|
|
20
|
-
|
|
21
|
-
const args = process.argv.slice(2);
|
|
22
|
-
const isElectron = args.includes('--electron');
|
|
23
|
-
const isOverlay = args.includes('--overlay');
|
|
24
|
-
|
|
25
|
-
function getElectronSpawnEnv() {
|
|
26
|
-
const env = { ...process.env };
|
|
27
|
-
delete env.ELECTRON_RUN_AS_NODE;
|
|
28
|
-
env.NODE_ENV = 'production'; // Force production — prevents users from bypassing FREE limits via env
|
|
29
|
-
return env;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (isElectron || isOverlay) {
|
|
33
|
-
// Electron mode: resolve binary path via require('electron')
|
|
34
|
-
const require = createRequire(import.meta.url);
|
|
35
|
-
|
|
36
|
-
let electronPath;
|
|
37
|
-
try {
|
|
38
|
-
electronPath = require('electron');
|
|
39
|
-
} catch {
|
|
40
|
-
console.error('');
|
|
41
|
-
console.error(' ❌ Electron is not installed.');
|
|
42
|
-
console.error('');
|
|
43
|
-
console.error(' To use --electron or --overlay mode, install Electron:');
|
|
44
|
-
console.error('');
|
|
45
|
-
console.error(' npm install -g electron');
|
|
46
|
-
console.error(' # or, in this project:');
|
|
47
|
-
console.error(' npm install --save-dev electron');
|
|
48
|
-
console.error('');
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const entryFile = isOverlay
|
|
53
|
-
? join(__dirname, '..', 'dist-electron', 'overlay.js')
|
|
54
|
-
: join(__dirname, '..', 'dist-electron', 'main.js');
|
|
55
|
-
|
|
56
|
-
if (process.env.ELECTRON_RUN_AS_NODE) {
|
|
57
|
-
console.warn(
|
|
58
|
-
'[crewx-ui] Ignoring ELECTRON_RUN_AS_NODE for Electron UI launch (it forces Electron into Node mode).',
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const child = spawn(String(electronPath), [entryFile], {
|
|
63
|
-
stdio: 'inherit',
|
|
64
|
-
env: getElectronSpawnEnv(),
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
child.on('exit', (code) => process.exit(code ?? 0));
|
|
68
|
-
child.on('error', (err) => {
|
|
69
|
-
console.error('Failed to launch Electron:', err);
|
|
70
|
-
process.exit(1);
|
|
71
|
-
});
|
|
72
|
-
} else {
|
|
73
|
-
// Default: delegate to server.js (NestJS web server)
|
|
74
|
-
const serverScript = join(__dirname, '..', 'server.js');
|
|
75
|
-
|
|
76
|
-
const child = spawn(process.execPath, [serverScript, ...args], {
|
|
77
|
-
stdio: 'inherit',
|
|
78
|
-
env: { ...process.env, NODE_ENV: 'production' }, // Force production — prevents users from bypassing FREE limits via env
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
child.on('exit', (code) => process.exit(code ?? 0));
|
|
82
|
-
child.on('error', (err) => {
|
|
83
|
-
console.error('Failed to start server:', err);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
2
|
+
import{spawn as l}from"child_process";import{fileURLToPath as p}from"url";import{dirname as m,join as t}from"path";import{createRequire as d}from"module";import{ensureCrewxDirs as v}from"./crewx-lib.js";const u=p(import.meta.url);const s=m(u);v();const c=process.argv.slice(2);const E=c.includes("--electron");const a=c.includes("--overlay");function h(){const e={...process.env};delete e.ELECTRON_RUN_AS_NODE;e.NODE_ENV="production";return e}if(E||a){const e=d(import.meta.url);let r;try{r=e("electron")}catch{console.error("");console.error(" \u274C Electron is not installed.");console.error("");console.error(" To use --electron or --overlay mode, install Electron:");console.error("");console.error(" npm install -g electron");console.error(" # or, in this project:");console.error(" npm install --save-dev electron");console.error("");process.exit(1)}const o=a?t(s,"..","dist-electron","overlay.js"):t(s,"..","dist-electron","main.js");const i=l(String(r),[o],{stdio:"inherit",env:h()});i.on("exit",n=>process.exit(n??0));i.on("error",n=>{console.error("Failed to launch Electron:",n);process.exit(1)})}else{const e=t(s,"..","server.js");const r=l(process.execPath,[e,...c],{stdio:"inherit",env:{...process.env,NODE_ENV:"production"}});r.on("exit",o=>process.exit(o??0));r.on("error",o=>{console.error("Failed to start server:",o);process.exit(1)})}
|
package/bin/crewx.ico
ADDED
|
Binary file
|
package/bin/crewx.js
CHANGED
|
@@ -1,253 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* crewx → Web dashboard + browser auto-open (default)
|
|
7
|
-
* crewx serve [--port N] → Web server (explicit)
|
|
8
|
-
* [--token T] → MCP bearer token (⚠️ prefer --token-file in shared shells)
|
|
9
|
-
* [--token-file PATH] → Read token from file
|
|
10
|
-
* [--https] → Enable HTTPS with auto-generated certificate
|
|
11
|
-
* [--trust] → Install CA to system trust store (requires --https)
|
|
12
|
-
* [--no-open] → Do not open browser
|
|
13
|
-
* crewx electron [--overlay] → Electron desktop or overlay window
|
|
14
|
-
* crewx --version → CLI version output
|
|
15
|
-
* crewx --help → CLI help output
|
|
16
|
-
* crewx q|x|agent|... <args> → CLI subcommand (forwarded to packages/cli)
|
|
17
|
-
*/
|
|
18
|
-
import { spawn } from 'child_process';
|
|
19
|
-
import { existsSync, readFileSync } from 'fs';
|
|
20
|
-
import { fileURLToPath } from 'url';
|
|
21
|
-
import { dirname, join } from 'path';
|
|
22
|
-
import { homedir, tmpdir } from 'os';
|
|
23
|
-
import { createRequire } from 'module';
|
|
24
|
-
import { defineCommand, runCommand, renderUsage } from 'citty';
|
|
25
|
-
import { setupSignalForwarding, resolveRoute, ensureCrewxDirs } from './crewx-lib.js';
|
|
26
|
-
|
|
27
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
28
|
-
const __dirname = dirname(__filename);
|
|
29
|
-
|
|
30
|
-
function getElectronSpawnEnv() {
|
|
31
|
-
const env = { ...process.env };
|
|
32
|
-
delete env.ELECTRON_RUN_AS_NODE;
|
|
33
|
-
env.NODE_ENV = 'production'; // Force production — prevents users from bypassing FREE limits via env
|
|
34
|
-
return env;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Launch Electron with the given entry file.
|
|
39
|
-
* Returns false when Electron is not installed (fail-fast — caller must handle).
|
|
40
|
-
*/
|
|
41
|
-
function launchElectron(entryFile, routeArgs = []) {
|
|
42
|
-
const require = createRequire(import.meta.url);
|
|
43
|
-
let electronPath;
|
|
44
|
-
try {
|
|
45
|
-
electronPath = require('electron');
|
|
46
|
-
} catch {
|
|
47
|
-
return false; // Electron not installed
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (process.env.ELECTRON_RUN_AS_NODE) {
|
|
51
|
-
console.warn(
|
|
52
|
-
'[crewx] Ignoring ELECTRON_RUN_AS_NODE for Electron UI launch (it forces Electron into Node mode).',
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const child = spawn(String(electronPath), [entryFile, ...routeArgs], {
|
|
57
|
-
stdio: 'inherit',
|
|
58
|
-
env: getElectronSpawnEnv(),
|
|
59
|
-
detached: true, // Separate process group so Ctrl+C doesn't reach Electron directly
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
setupSignalForwarding(child, { escalateKill: true, detached: true });
|
|
63
|
-
|
|
64
|
-
child.on('exit', (code) => process.exit(code ?? 0));
|
|
65
|
-
child.on('error', (err) => {
|
|
66
|
-
console.error('Failed to launch Electron:', err);
|
|
67
|
-
process.exit(1);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Launch the web server with the given options.
|
|
75
|
-
* Token injection: --token → MCP_BEARER_TOKEN env; --token-file → read + inject.
|
|
76
|
-
*/
|
|
77
|
-
function launchWeb({ port, token, tokenFile, open: openFlag, https, trust } = {}) {
|
|
78
|
-
const serverScript = join(__dirname, '..', 'server.js');
|
|
79
|
-
|
|
80
|
-
const env = { ...process.env, NODE_ENV: 'production' };
|
|
81
|
-
|
|
82
|
-
if (https) {
|
|
83
|
-
env.CREWX_HTTPS = 'true';
|
|
84
|
-
}
|
|
85
|
-
if (trust) {
|
|
86
|
-
env.CREWX_TRUST_CA = 'true';
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (port) {
|
|
90
|
-
env.PORT = String(port);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (token) {
|
|
94
|
-
env.MCP_BEARER_TOKEN = token;
|
|
95
|
-
process.stderr.write(
|
|
96
|
-
'ℹ️ Tip: use --token-file to avoid exposing token in shell history.\n',
|
|
97
|
-
);
|
|
98
|
-
} else if (tokenFile) {
|
|
99
|
-
let content;
|
|
100
|
-
try {
|
|
101
|
-
content = readFileSync(tokenFile, 'utf8').trim();
|
|
102
|
-
} catch (err) {
|
|
103
|
-
console.error(`❌ --token-file not readable: ${tokenFile}`);
|
|
104
|
-
console.error(` ${err.message}`);
|
|
105
|
-
process.exit(1);
|
|
106
|
-
}
|
|
107
|
-
if (!content) {
|
|
108
|
-
console.error(`❌ --token-file is empty: ${tokenFile}`);
|
|
109
|
-
process.exit(1);
|
|
110
|
-
}
|
|
111
|
-
env.MCP_BEARER_TOKEN = content;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const certPath = join(homedir(), '.crewx', 'tls', 'cert.pem');
|
|
115
|
-
if (existsSync(certPath)) {
|
|
116
|
-
env.NODE_EXTRA_CA_CERTS = certPath;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (https) {
|
|
120
|
-
console.log('🔒 HTTPS enabled with SowonLabs CA');
|
|
121
|
-
if (!trust) {
|
|
122
|
-
console.log('⚠️ Browser may show a certificate warning.');
|
|
123
|
-
console.log(' To remove warning: npx crewx serve --https --trust');
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (openFlag) {
|
|
128
|
-
env.CREWX_OPEN_BROWSER = '1';
|
|
129
|
-
env.CREWX_OPEN_BROWSER_ONCE_FILE = join(
|
|
130
|
-
tmpdir(),
|
|
131
|
-
`crewx-open-browser-${process.pid}-${Date.now()}`,
|
|
132
|
-
);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const child = spawn(process.execPath, [serverScript], {
|
|
136
|
-
stdio: 'inherit',
|
|
137
|
-
env,
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
setupSignalForwarding(child);
|
|
141
|
-
|
|
142
|
-
child.on('exit', (code) => process.exit(code ?? 0));
|
|
143
|
-
child.on('error', (err) => {
|
|
144
|
-
console.error('Failed to start web server:', err);
|
|
145
|
-
process.exit(1);
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const serveCommand = defineCommand({
|
|
150
|
-
meta: { name: 'serve', description: 'Launch CrewX web server' },
|
|
151
|
-
args: {
|
|
152
|
-
port: { type: 'string', description: 'Port to listen on' },
|
|
153
|
-
token: { type: 'string', description: 'MCP bearer token' },
|
|
154
|
-
'token-file': { type: 'string', description: 'Read token from file' },
|
|
155
|
-
https: { type: 'boolean', description: 'Enable HTTPS with auto-generated certificate' },
|
|
156
|
-
trust: { type: 'boolean', description: 'Install CA to system trust store (requires --https)' },
|
|
157
|
-
open: { type: 'boolean', description: 'Auto-open browser', default: true },
|
|
158
|
-
help: { type: 'boolean', alias: 'h', description: 'Show this help' },
|
|
159
|
-
},
|
|
160
|
-
async run({ args }) {
|
|
161
|
-
if (args.help) {
|
|
162
|
-
const usage = await renderUsage(serveCommand);
|
|
163
|
-
process.stdout.write(usage + '\n');
|
|
164
|
-
process.exit(0);
|
|
165
|
-
}
|
|
166
|
-
const knownArgs = new Set(['_', 'port', 'token', 'token-file', 'tokenFile', 'https', 'trust', 'open', 'help', 'h']);
|
|
167
|
-
for (const key of Object.keys(args)) {
|
|
168
|
-
if (!knownArgs.has(key)) {
|
|
169
|
-
console.error(`❌ Unknown option for "crewx serve": --${key}`);
|
|
170
|
-
console.error(' Run `crewx serve --help` for usage.');
|
|
171
|
-
process.exit(2);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
if (args.trust && !args.https) {
|
|
175
|
-
console.error('❌ --trust requires --https');
|
|
176
|
-
process.exit(1);
|
|
177
|
-
}
|
|
178
|
-
const port = args.port ? Number(args.port) : undefined;
|
|
179
|
-
if (args.port && (!port || port < 1 || port > 65535)) {
|
|
180
|
-
console.error('❌ Invalid port number. Use 1-65535.');
|
|
181
|
-
process.exit(1);
|
|
182
|
-
}
|
|
183
|
-
launchWeb({
|
|
184
|
-
port,
|
|
185
|
-
token: args.token,
|
|
186
|
-
tokenFile: args['token-file'],
|
|
187
|
-
open: args.open,
|
|
188
|
-
https: args.https,
|
|
189
|
-
trust: args.trust,
|
|
190
|
-
});
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
function forwardToCli(cliArgs) {
|
|
195
|
-
const serverScript = join(__dirname, '..', 'server.js');
|
|
196
|
-
const child = spawn(process.execPath, [serverScript, 'cli', ...cliArgs], {
|
|
197
|
-
stdio: 'inherit',
|
|
198
|
-
env: { ...process.env, NODE_ENV: 'production' }, // Force production — prevents users from bypassing FREE limits via env
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
setupSignalForwarding(child);
|
|
202
|
-
|
|
203
|
-
child.on('exit', (code) => process.exit(code ?? 0));
|
|
204
|
-
child.on('error', (err) => {
|
|
205
|
-
console.error('Failed to run CLI subcommand:', err);
|
|
206
|
-
process.exit(1);
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
ensureCrewxDirs();
|
|
211
|
-
|
|
212
|
-
// Route
|
|
213
|
-
const args = process.argv.slice(2);
|
|
214
|
-
const { route, routeArgs, error } = resolveRoute(args);
|
|
215
|
-
|
|
216
|
-
if (route === 'serve') {
|
|
217
|
-
runCommand(serveCommand, { rawArgs: routeArgs });
|
|
218
|
-
} else if (route === 'electron') {
|
|
219
|
-
// Electron: desktop (default) or overlay (--overlay flag)
|
|
220
|
-
const isOverlay = routeArgs.includes('--overlay');
|
|
221
|
-
const entryFile = join(
|
|
222
|
-
__dirname, '..', 'dist-electron',
|
|
223
|
-
isOverlay ? 'overlay.js' : 'main.js',
|
|
224
|
-
);
|
|
225
|
-
const launched = launchElectron(entryFile, isOverlay ? [] : []);
|
|
226
|
-
if (!launched) {
|
|
227
|
-
console.error('');
|
|
228
|
-
console.error(' ❌ Electron is not installed.');
|
|
229
|
-
console.error('');
|
|
230
|
-
console.error(' This command requires Electron. Install it:');
|
|
231
|
-
console.error('');
|
|
232
|
-
console.error(' npm install -g electron');
|
|
233
|
-
console.error(' # or in this project:');
|
|
234
|
-
console.error(' npm install --save-dev electron');
|
|
235
|
-
console.error('');
|
|
236
|
-
console.error(' Alternatively, use: crewx serve (web mode)');
|
|
237
|
-
console.error('');
|
|
238
|
-
process.exit(1);
|
|
239
|
-
}
|
|
240
|
-
} else if (route === 'cli') {
|
|
241
|
-
forwardToCli(routeArgs);
|
|
242
|
-
} else if (route === 'web-default') {
|
|
243
|
-
// No arguments → web dashboard + browser auto-open
|
|
244
|
-
runCommand(serveCommand, { rawArgs: ['--open', ...routeArgs] });
|
|
245
|
-
} else if (route === 'error') {
|
|
246
|
-
// Unknown command or option
|
|
247
|
-
console.error(`❌ ${error}`);
|
|
248
|
-
process.exit(2);
|
|
249
|
-
} else {
|
|
250
|
-
// Should not happen — guard against future routing additions
|
|
251
|
-
console.error(`❌ Internal routing error: unknown route "${route}"`);
|
|
252
|
-
process.exit(1);
|
|
253
|
-
}
|
|
2
|
+
import{spawn as f}from"child_process";import{existsSync as _,readFileSync as C}from"fs";import{fileURLToPath as P}from"url";import{dirname as R,join as p}from"path";import{homedir as k,tmpdir as S}from"os";import{createRequire as T}from"module";import{defineCommand as g,runCommand as h,renderUsage as v}from"citty";import{setupSignalForwarding as w,resolveRoute as O,ensureCrewxDirs as N,readPairingCredential as A,resolvePairEndpoint as $}from"./crewx-lib.js";const U=P(import.meta.url);const m=R(U);function j(){const e={...process.env};delete e.ELECTRON_RUN_AS_NODE;e.NODE_ENV="production";return e}function q(e,r=[]){const o=T(import.meta.url);let t;try{t=o("electron")}catch{return false}const i=f(String(t),[e,...r],{stdio:"inherit",env:j(),detached:true});w(i,{escalateKill:true,detached:true});i.on("exit",s=>process.exit(s??0));i.on("error",s=>{console.error("Failed to launch Electron:",s);process.exit(1)});return true}function L({port:e,token:r,tokenFile:o,open:t,https:i,trust:s}={}){const n=p(m,"..","server.js");const c={...process.env,NODE_ENV:"production"};if(i){c.CREWX_HTTPS="true"}if(s){c.CREWX_TRUST_CA="true"}if(e){c.PORT=String(e)}if(r){c.MCP_BEARER_TOKEN=r;process.stderr.write("\u2139\uFE0F Tip: use --token-file to avoid exposing token in shell history.\n")}else if(o){let l;try{l=C(o,"utf8").trim()}catch(b){console.error(`\u274C --token-file not readable: ${o}`);console.error(` ${b.message}`);process.exit(1)}if(!l){console.error(`\u274C --token-file is empty: ${o}`);process.exit(1)}c.MCP_BEARER_TOKEN=l}const y=p(k(),".crewx","tls","cert.pem");if(_(y)){c.NODE_EXTRA_CA_CERTS=y}if(i){console.log("\u{1F512} HTTPS enabled with SowonLabs CA");if(!s){console.log("\u26A0\uFE0F Browser may show a certificate warning.");console.log(" To remove warning: npx crewx serve --https --trust")}}if(t){c.CREWX_OPEN_BROWSER="1";c.CREWX_OPEN_BROWSER_ONCE_FILE=p(S(),`crewx-open-browser-${process.pid}-${Date.now()}`)}const d=f(process.execPath,["--disable-sigusr1",n],{stdio:"inherit",env:c});w(d);d.on("exit",l=>process.exit(l??0));d.on("error",l=>{console.error("Failed to start web server:",l);process.exit(1)})}function I(e){const r=Number(e);if(!Number.isInteger(r)||r<1||r>65535){console.error("\u274C Invalid port number. Use 1-65535.");process.exit(1)}return r}function X(e){if(typeof e!=="string"||e.length===0)return false;try{const r=new URL(e);return(r.protocol==="http:"||r.protocol==="https:")&&r.search===""&&/^#pair=.{1,}$/.test(r.hash)}catch{return false}}async function D(e,r){let o;try{o=await fetch(`${e}/api/v1/auth/local/code`,{method:"POST",headers:{Accept:"application/json",Authorization:`Bearer ${r}`}})}catch{throw new Error(`Could not reach the CrewX server at ${e}.`)}if(!o.ok){throw new Error(`Pairing code request failed (HTTP ${o.status}).`)}let t;try{t=await o.json()}catch{throw new Error("Pairing code response was not valid JSON.")}if(!X(t?.url)){throw new Error("Pairing code response did not contain a valid pairing URL.")}return t.url}const x=g({meta:{name:"pair",description:"Request a one-time local browser pairing link"},args:{port:{type:"string",description:"Port of the CrewX web server"},open:{type:"boolean",description:"Open the pairing link in a browser",default:false},help:{type:"boolean",alias:"h",description:"Show this help"}},async run({args:e}){if(e.help){const n=await v(x);process.stdout.write(n+"\n");process.exit(0)}const r=new Set(["_","port","open","help","h"]);for(const n of Object.keys(e)){if(!r.has(n)){console.error(`\u274C Unknown option for "crewx pair": --${n}`);console.error(" Run `crewx pair --help` for usage.");process.exit(2)}}const o=e.port===void 0?void 0:I(e.port);let t;let i;try{t=$({port:o});i=A()}catch(n){console.error(`\u274C ${n instanceof Error?n.message:"Unable to read pairing credential."}`);process.exit(1)}let s;try{s=await D(t,i)}catch(n){console.error(`\u274C ${n instanceof Error?n.message:"Unable to request pairing link."}`);process.exit(1)}process.stdout.write(`${s}
|
|
3
|
+
`);if(e.open){try{const n=(await import("open")).default;await n(s)}catch{console.error("\u274C Could not open the pairing link automatically.");process.exit(1)}}}});const E=g({meta:{name:"serve",description:"Launch CrewX web server"},args:{port:{type:"string",description:"Port to listen on"},token:{type:"string",description:"MCP bearer token"},"token-file":{type:"string",description:"Read token from file"},https:{type:"boolean",description:"Enable HTTPS with auto-generated certificate"},trust:{type:"boolean",description:"Install CA to system trust store (requires --https)"},open:{type:"boolean",description:"Auto-open browser",default:true},help:{type:"boolean",alias:"h",description:"Show this help"}},async run({args:e}){if(e.help){const t=await v(E);process.stdout.write(t+"\n");process.exit(0)}const r=new Set(["_","port","token","token-file","tokenFile","https","trust","open","help","h"]);for(const t of Object.keys(e)){if(!r.has(t)){console.error(`\u274C Unknown option for "crewx serve": --${t}`);console.error(" Run `crewx serve --help` for usage.");process.exit(2)}}if(e.trust&&!e.https){console.error("\u274C --trust requires --https");process.exit(1)}const o=e.port?Number(e.port):void 0;if(e.port&&(!o||o<1||o>65535)){console.error("\u274C Invalid port number. Use 1-65535.");process.exit(1)}L({port:o,token:e.token,tokenFile:e["token-file"],open:e.open,https:e.https,trust:e.trust})}});function W(e){const r=p(m,"..","server.js");const o=f(process.execPath,[r,"cli",...e],{stdio:"inherit",env:{...process.env,NODE_ENV:"production"}});w(o);o.on("exit",t=>process.exit(t??0));o.on("error",t=>{console.error("Failed to run CLI subcommand:",t);process.exit(1)})}N();const B=process.argv.slice(2);const{route:a,routeArgs:u,error:F}=O(B);if(a==="serve"){h(E,{rawArgs:u})}else if(a==="pair"){h(x,{rawArgs:u})}else if(a==="electron"){const e=u.includes("--overlay");const r=p(m,"..","dist-electron",e?"overlay.js":"main.js");const o=q(r,e?[]:[]);if(!o){console.error("");console.error(" \u274C Electron is not installed.");console.error("");console.error(" This command requires Electron. Install it:");console.error("");console.error(" npm install -g electron");console.error(" # or in this project:");console.error(" npm install --save-dev electron");console.error("");console.error(" Alternatively, use: crewx serve (web mode)");console.error("");process.exit(1)}}else if(a==="cli"){W(u)}else if(a==="web-default"){h(E,{rawArgs:["--open",...u]})}else if(a==="error"){console.error(`\u274C ${F}`);process.exit(2)}else{console.error(`\u274C Internal routing error: unknown route "${a}"`);process.exit(1)}
|
package/bin/launcher-flags.js
CHANGED
|
@@ -1,29 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* SSOT for launcher-owned flags.
|
|
3
|
-
* Imported by bin/crewx-lib.js and bin/crewx.js.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/** Flags owned by the launcher (bin/crewx.js), not the CLI engine. */
|
|
7
|
-
export const LAUNCHER_OWNED_FLAGS = new Set([
|
|
8
|
-
'--port',
|
|
9
|
-
'--no-open',
|
|
10
|
-
'--overlay',
|
|
11
|
-
'--token',
|
|
12
|
-
'--token-file',
|
|
13
|
-
]);
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Build a hint message for a launcher-owned flag used in wrong context.
|
|
17
|
-
* @param {string} flag
|
|
18
|
-
* @returns {string}
|
|
19
|
-
*/
|
|
20
|
-
export function buildHintMessage(flag) {
|
|
21
|
-
const hints = {
|
|
22
|
-
'--port': 'use: crewx serve --port <N>',
|
|
23
|
-
'--token': 'use: crewx serve --token <T>',
|
|
24
|
-
'--token-file': 'use: crewx serve --token-file <PATH>',
|
|
25
|
-
'--no-open': 'use: crewx serve --no-open',
|
|
26
|
-
'--overlay': 'use: crewx electron --overlay',
|
|
27
|
-
};
|
|
28
|
-
return hints[flag] ?? '';
|
|
29
|
-
}
|
|
1
|
+
const n=new Set(["--port","--no-open","--overlay","--token","--token-file"]);function r(e){const o={"--port":"use: crewx serve --port <N>","--token":"use: crewx serve --token <T>","--token-file":"use: crewx serve --token-file <PATH>","--no-open":"use: crewx serve --no-open","--overlay":"use: crewx electron --overlay"};return o[e]??""}export{n as LAUNCHER_OWNED_FLAGS,r as buildHintMessage};
|
package/crewx-host.js
ADDED