crewx 0.9.0-rc.16 → 0.9.0-rc.161

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/bin/cli-commands.js +1 -36
  2. package/bin/crewx-lib.js +2 -173
  3. package/bin/crewx-ui.js +1 -85
  4. package/bin/crewx.ico +0 -0
  5. package/bin/crewx.js +2 -252
  6. package/bin/launcher-flags.js +1 -29
  7. package/crewx-host.js +2 -0
  8. package/dist/assets/GitDiffEditor-B836lFO2.css +1 -0
  9. package/dist/assets/GitDiffEditor-BQAbbFAF.js +762 -0
  10. package/dist/assets/MarketPage-BM1Dj86H.js +41 -0
  11. package/dist/assets/PromptTab-D7K5NkGp.js +27 -0
  12. package/dist/assets/abap-BrgZPUOV.js +6 -0
  13. package/dist/assets/abnfDiagram-VCTEODGH-C1NCo3u3.js +1 -0
  14. package/dist/assets/apex-DyP6w7ZV.js +6 -0
  15. package/dist/assets/arc-D4xlPx8e.js +1 -0
  16. package/dist/assets/architectureDiagram-5GKGNRK7-B13bYiAK.js +36 -0
  17. package/dist/assets/azcli-BaLxmfj-.js +6 -0
  18. package/dist/assets/bat-CFOPXBzS.js +6 -0
  19. package/dist/assets/bicep-BfEKNvv3.js +7 -0
  20. package/dist/assets/blockDiagram-I7D4REHJ-BMgGD2N3.js +129 -0
  21. package/dist/assets/bronze-DHyggp7i.png +0 -0
  22. package/dist/assets/c4Diagram-7LVT6UL2-B5JjUsNz.js +38 -0
  23. package/dist/assets/cameligo-BFG1Mk7z.js +6 -0
  24. package/dist/assets/challenger-B6mvhLnD.png +0 -0
  25. package/dist/assets/channel-CFZUR_pR.js +1 -0
  26. package/dist/assets/{chunk-KFBOBJHC-Det1gu-Y.js → chunk-2Q5K7J3B-DDSikVCV.js} +1 -1
  27. package/dist/assets/chunk-5VM5RSS4-Do5MU3Fj.js +15 -0
  28. package/dist/assets/chunk-F27PBJKO-lJ7R1OMW.js +1 -0
  29. package/dist/assets/chunk-IMKFNOWR-GFCjkqLD.js +231 -0
  30. package/dist/assets/{chunk-TMUBEWPD-drsYJGIt.js → chunk-JWPE2WC7-bQjCmVlY.js} +1 -1
  31. package/dist/assets/chunk-POPQ4Y6H-Db9NIaiv.js +1 -0
  32. package/dist/assets/chunk-SVP7TREG-DdyTxhsi.js +88 -0
  33. package/dist/assets/chunk-TICWLB2K-BgKzYDU4.js +206 -0
  34. package/dist/assets/chunk-XXDRQBXY-D96e6oP2.js +1 -0
  35. package/dist/assets/classDiagram-ZZMXUADV-4ccPH7ra.js +1 -0
  36. package/dist/assets/classDiagram-v2-VYDZK3BY-4ccPH7ra.js +1 -0
  37. package/dist/assets/clojure-DTECt2xU.js +6 -0
  38. package/dist/assets/codicon-DCmgc-ay.ttf +0 -0
  39. package/dist/assets/coffee-CDGzqUPQ.js +6 -0
  40. package/dist/assets/cose-bilkent-JH36ORCC-BgzwMnIy.js +1 -0
  41. package/dist/assets/cpp-CLLBncYj.js +6 -0
  42. package/dist/assets/csharp-dUCx_-0o.js +6 -0
  43. package/dist/assets/csp-5Rap-vPy.js +6 -0
  44. package/dist/assets/css-D3h14YRZ.js +8 -0
  45. package/dist/assets/css.worker-CVdCITaq.js +84 -0
  46. package/dist/assets/cssMode-Bapw6a-f.js +9 -0
  47. package/dist/assets/cynefin-OW5HDTMX-TLNnybEC.js +184 -0
  48. package/dist/assets/cynefinDiagram-5FMLGOSQ-cgfmKB0m.js +62 -0
  49. package/dist/assets/cypher-DrQuvNYM.js +6 -0
  50. package/dist/assets/cytoscape.esm-C5JX3QLV.js +331 -0
  51. package/dist/assets/dagre-GXQ25YYZ-CdPdkAW_.js +4 -0
  52. package/dist/assets/dart-CFKIUWau.js +6 -0
  53. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  54. package/dist/assets/diagram-S7CK7UJ4-D0aexcBT.js +30 -0
  55. package/dist/assets/diagram-UQ7AKVKN-C8VDvasV.js +41 -0
  56. package/dist/assets/diagram-VSXAHHWV-BTCxQ5Tc.js +3 -0
  57. package/dist/assets/diagram-VX7I27RA-iaM8z1Qh.js +24 -0
  58. package/dist/assets/diagram-Z3DM3KII-sRCfbaNb.js +24 -0
  59. package/dist/assets/diamond-fgNrYQ3a.png +0 -0
  60. package/dist/assets/dockerfile-Zznr-cwX.js +6 -0
  61. package/dist/assets/ebnfDiagram-PWID7BFC-CIIiSie0.js +1 -0
  62. package/dist/assets/ecl-Ce3n6wWz.js +6 -0
  63. package/dist/assets/editor.worker-D_iEFMe4.js +12 -0
  64. package/dist/assets/elixir-deUWdS0T.js +6 -0
  65. package/dist/assets/emerald-B8dOw2R1.png +0 -0
  66. package/dist/assets/erDiagram-RLTQ6QDP-1E50NLgP.js +99 -0
  67. package/dist/assets/flow9-i9-g7ZhI.js +6 -0
  68. package/dist/assets/flowDiagram-HODETNUW-B5ChbCij.js +168 -0
  69. package/dist/assets/freemarker2-C3NP4R_G.js +8 -0
  70. package/dist/assets/fsharp-CzKuDChf.js +6 -0
  71. package/dist/assets/ganttDiagram-EL5Y4UJY-BGN2N-JM.js +292 -0
  72. package/dist/assets/gitGraphDiagram-WWUBYQGX-BdHJe0Eh.js +106 -0
  73. package/dist/assets/go-Cphgjts3.js +6 -0
  74. package/dist/assets/gold-C0_ymiXJ.png +0 -0
  75. package/dist/assets/grandmaster-B5OLgoaH.png +0 -0
  76. package/dist/assets/graphql-Cg7bfA9N.js +6 -0
  77. package/dist/assets/handlebars-D9N0esgz.js +6 -0
  78. package/dist/assets/hcl-0cvrggvQ.js +6 -0
  79. package/dist/assets/html-Bj03Qita.js +6 -0
  80. package/dist/assets/html.worker-BWKvDFG4.js +461 -0
  81. package/dist/assets/htmlMode-DyNqeKbK.js +9 -0
  82. package/dist/assets/infoDiagram-27XIBGKW-BQWn-scH.js +2 -0
  83. package/dist/assets/ini-Drc7WvVn.js +6 -0
  84. package/dist/assets/iron-ZiCbZroe.png +0 -0
  85. package/dist/assets/ishikawaDiagram-5VMMS53U-slo4axJo.js +70 -0
  86. package/dist/assets/java-B_fMsGYe.js +6 -0
  87. package/dist/assets/javascript-BzwK2md1.js +6 -0
  88. package/dist/assets/journeyDiagram-3NMN7TZE-E2TW8ScK.js +139 -0
  89. package/dist/assets/json.worker-BDor654j.js +49 -0
  90. package/dist/assets/jsonMode-C7reRwvB.js +15 -0
  91. package/dist/assets/julia-Bqgm2twL.js +6 -0
  92. package/dist/assets/{kanban-definition-QRCXZQQD-BKgHIztA.js → kanban-definition-UXKFOSKX-DQGpdiVK.js} +9 -8
  93. package/dist/assets/katex-C5jXJg4s.js +257 -0
  94. package/dist/assets/kotlin-BSkB5QuD.js +6 -0
  95. package/dist/assets/layout-a-fqANPC.js +1 -0
  96. package/dist/assets/less-BsTHnhdd.js +7 -0
  97. package/dist/assets/lexon-YWi4-JPR.js +6 -0
  98. package/dist/assets/linear-BV-N3Y_T.js +1 -0
  99. package/dist/assets/liquid-vgqjhkmu.js +6 -0
  100. package/dist/assets/lua-nf6ki56Z.js +6 -0
  101. package/dist/assets/m3-Cpb6xl2v.js +6 -0
  102. package/dist/assets/main-BGv4ArZj.css +10 -0
  103. package/dist/assets/main-C1rWzenL.js +2222 -0
  104. package/dist/assets/markdown-DSZPf7rp.js +6 -0
  105. package/dist/assets/master-Cu5Izdtt.png +0 -0
  106. package/dist/assets/mdx-CBy_1FeH.js +6 -0
  107. package/dist/assets/mindmap-definition-YA3MSWOX-BnciNxDZ.js +96 -0
  108. package/dist/assets/mips-B_c3zf-v.js +6 -0
  109. package/dist/assets/msdax-rUNN04Wq.js +6 -0
  110. package/dist/assets/mysql-DDwshQtU.js +6 -0
  111. package/dist/assets/objective-c-B5zXfXm9.js +6 -0
  112. package/dist/assets/pascal-CXOwvkN_.js +6 -0
  113. package/dist/assets/pascaligo-Bc-ZgV77.js +6 -0
  114. package/dist/assets/pegDiagram-XKGWAZYB-BlkKiibk.js +1 -0
  115. package/dist/assets/perl-CwNk8-XU.js +6 -0
  116. package/dist/assets/pgsql-tGk8EFnU.js +6 -0
  117. package/dist/assets/php-CpIb_Oan.js +6 -0
  118. package/dist/assets/pieDiagram-E7YTZNPT-Clo2BIix.js +39 -0
  119. package/dist/assets/pla-B03wrqEc.js +6 -0
  120. package/dist/assets/platinum-DdILQ7kR.png +0 -0
  121. package/dist/assets/postiats-BKlk5iyT.js +6 -0
  122. package/dist/assets/powerquery-Bhzvs7bI.js +6 -0
  123. package/dist/assets/powershell-Dd3NCNK9.js +6 -0
  124. package/dist/assets/protobuf-COyEY5Pt.js +7 -0
  125. package/dist/assets/pug-BaJupSGV.js +6 -0
  126. package/dist/assets/python-NofctUYV.js +6 -0
  127. package/dist/assets/qsharp-DXyYeYxl.js +6 -0
  128. package/dist/assets/quadrantDiagram-AXDQQJYC-Xk3ViATm.js +7 -0
  129. package/dist/assets/r-CdQndTaG.js +6 -0
  130. package/dist/assets/railroadDiagram-O6MQD6OU-DiKul4DR.js +1 -0
  131. package/dist/assets/razor-mTIcS9bp.js +6 -0
  132. package/dist/assets/redis-CVwtpugi.js +6 -0
  133. package/dist/assets/redshift-25W9uPmb.js +6 -0
  134. package/dist/assets/requirementDiagram-BXWQKSXE-zCNhL9a8.js +84 -0
  135. package/dist/assets/restructuredtext-DfzH4Xui.js +6 -0
  136. package/dist/assets/ruby-Cp1zYvxS.js +6 -0
  137. package/dist/assets/rust-D5C2fndG.js +6 -0
  138. package/dist/assets/sankeyDiagram-P5KCCOFB-IZwfa9Lp.js +40 -0
  139. package/dist/assets/sb-CDntyWJ8.js +6 -0
  140. package/dist/assets/scala-BoFRg7Ot.js +6 -0
  141. package/dist/assets/scheme-Bio4gycK.js +6 -0
  142. package/dist/assets/scss-4Ik7cdeQ.js +8 -0
  143. package/dist/assets/sequenceDiagram-WJ2MYXX4-DyGHlL7V.js +162 -0
  144. package/dist/assets/shell-CX-rkNHf.js +6 -0
  145. package/dist/assets/silver-B5Jg1fBq.png +0 -0
  146. package/dist/assets/sizeCapture-INFHLROL-CZwSSINd.js +1 -0
  147. package/dist/assets/solidity-Tw7wswEv.js +6 -0
  148. package/dist/assets/sophia-C5WLch3f.js +6 -0
  149. package/dist/assets/sparql-DHaeiCBh.js +6 -0
  150. package/dist/assets/sql-CCSDG5nI.js +6 -0
  151. package/dist/assets/st-pnP8ivHi.js +6 -0
  152. package/dist/assets/stateDiagram-D77RDMKH-7SICbU7X.js +1 -0
  153. package/dist/assets/stateDiagram-v2-MP3YSRHH-Ck6_asiW.js +1 -0
  154. package/dist/assets/swift-DwJ7jVG9.js +8 -0
  155. package/dist/assets/swimlanes-42K2YHIH-PB2qe8dD.js +1 -0
  156. package/dist/assets/swimlanesDiagram-VR7AAH4N-DGCZg0OG.js +8 -0
  157. package/dist/assets/systemverilog-B9Xyijhd.js +6 -0
  158. package/dist/assets/tcl-DnHyzjbg.js +6 -0
  159. package/dist/assets/timeline-definition-24CTP7MA-CdTuqdL-.js +120 -0
  160. package/dist/assets/{transformers.web-CBYsiihV.js → transformers.web-CIA13sFE.js} +1 -1
  161. package/dist/assets/ts.worker-DM5dOG-y.js +51334 -0
  162. package/dist/assets/tsMode-Caigri3v.js +16 -0
  163. package/dist/assets/twig-CPajHgWi.js +6 -0
  164. package/dist/assets/typescript-D8vCRIzO.js +6 -0
  165. package/dist/assets/typespec-D-MeaMDU.js +6 -0
  166. package/dist/assets/vb-DgyLZaXg.js +6 -0
  167. package/dist/assets/vennDiagram-4TSXK5OY-DoT14Xpo.js +34 -0
  168. package/dist/assets/wardleyDiagram-VM6X3IG4-Dp6p4cHT.js +78 -0
  169. package/dist/assets/wgsl-BIv9DU6q.js +303 -0
  170. package/dist/assets/xml-BBy1pmxv.js +6 -0
  171. package/dist/assets/xychartDiagram-S5SC5T6Z-Dyg-uFoa.js +7 -0
  172. package/dist/assets/yaml-CuZR0-b0.js +6 -0
  173. package/dist/index.html +145 -4
  174. package/dist/ui-build.json +4 -0
  175. package/dist-apps/bundle-index.json +1 -0
  176. package/dist-server/__stubs__/ccusage-codex.js +1 -8
  177. package/dist-server/adapters/adapter.module.js +1 -35
  178. package/dist-server/adapters/adapter.service.js +1 -79
  179. package/dist-server/adapters/http-router.service.js +1 -91
  180. package/dist-server/app.module.js +1 -123
  181. package/dist-server/bootstrap/browser-open.js +1 -29
  182. package/dist-server/bootstrap/codex-writable-roots.js +1 -88
  183. package/dist-server/bootstrap/crewx-server.js +1 -91
  184. package/dist-server/bootstrap/env.js +1 -0
  185. package/dist-server/bootstrap/tls.js +1 -138
  186. package/dist-server/common/analytics.client.js +1 -180
  187. package/dist-server/common/analytics.module.js +1 -21
  188. package/dist-server/common/cache/provider-limit-cache.js +1 -0
  189. package/dist-server/common/cache-db.js +21 -0
  190. package/dist-server/common/cors.js +1 -15
  191. package/dist-server/common/crewx-workspace-root.js +1 -0
  192. package/dist-server/common/current-user.js +1 -0
  193. package/dist-server/common/decorator/cached.decorator.js +1 -0
  194. package/dist-server/common/decorator/skip-request-log.decorator.js +1 -8
  195. package/dist-server/common/decorators/project.decorator.js +1 -21
  196. package/dist-server/common/decorators/workspace.decorator.js +1 -24
  197. package/dist-server/common/device-id.js +1 -33
  198. package/dist-server/common/guard/request-log-metadata.guard.js +1 -0
  199. package/dist-server/common/interceptor/api-id-header.interceptor.js +1 -53
  200. package/dist-server/common/interceptor/http-logging.interceptor.js +1 -137
  201. package/dist-server/common/limits/defaults.js +1 -15
  202. package/dist-server/common/limits/limits-provider.js +1 -6
  203. package/dist-server/common/limits/limits.controller.js +1 -38
  204. package/dist-server/common/limits/limits.module.js +1 -24
  205. package/dist-server/common/limits/local-limits.provider.js +1 -27
  206. package/dist-server/common/mcp-app-sandbox-boundary.js +5 -0
  207. package/dist-server/common/mcp-app-sandbox-contract.js +1 -0
  208. package/dist-server/common/middleware/request-log-lifecycle.middleware.js +1 -0
  209. package/dist-server/common/middleware/workspace.middleware.js +1 -210
  210. package/dist-server/common/pending-instruction.js +1 -0
  211. package/dist-server/common/product-app-bundle.generated.js +1 -0
  212. package/dist-server/common/product-app-bundle.js +1 -0
  213. package/dist-server/common/repository.exception-filter.js +1 -48
  214. package/dist-server/common/request-log/request-log-context.js +1 -0
  215. package/dist-server/common/request-log/request-log-principal.js +1 -0
  216. package/dist-server/common/security/instruction-sanitizer.js +1 -0
  217. package/dist-server/common/security/secret-mask.js +1 -0
  218. package/dist-server/common/task-display-provider.js +1 -0
  219. package/dist-server/common/task-error-projection.js +1 -0
  220. package/dist-server/common/task-log/progress-steps.js +1 -0
  221. package/dist-server/common/task-log/provider-resume.js +1 -0
  222. package/dist-server/common/task-log/public-log-projection.fixtures.js +1 -0
  223. package/dist-server/common/task-log/public-log-projection.js +1 -0
  224. package/dist-server/common/task-log/public-log-projection.past-tool-use.fixtures.js +1 -0
  225. package/dist-server/common/task-log/stdout-json-fallback.js +1 -200
  226. package/dist-server/common/task-result-projection.js +1 -0
  227. package/dist-server/common/task-stop.js +1 -0
  228. package/dist-server/common/task-terminal-reason.js +1 -0
  229. package/dist-server/common/task-usage-accounting.js +1 -0
  230. package/dist-server/common/ui/derive-ui-actor.js +1 -0
  231. package/dist-server/common/ui/resolve-task-actor.js +1 -0
  232. package/dist-server/common/ui/ui-runtime-http-error.js +1 -0
  233. package/dist-server/common/ui/ui-task-origin.service.js +1 -0
  234. package/dist-server/common/validation.pipe.js +1 -0
  235. package/dist-server/common/workspace-context.store.js +1 -25
  236. package/dist-server/domain/account/account-auth-url.js +1 -0
  237. package/dist-server/domain/account/account-error.constants.js +1 -0
  238. package/dist-server/domain/account/account-error.exception-filter.js +1 -0
  239. package/dist-server/domain/account/account-profile.service.js +1 -0
  240. package/dist-server/domain/account/account-session.guard.js +1 -0
  241. package/dist-server/domain/account/account.controller.js +1 -0
  242. package/dist-server/domain/account/account.module.js +1 -0
  243. package/dist-server/domain/account/auth-json.store.js +1 -0
  244. package/dist-server/domain/account/auth-json.types.js +1 -0
  245. package/dist-server/domain/account/billing-url.js +1 -0
  246. package/dist-server/domain/account/device-flow.service.js +1 -0
  247. package/dist-server/domain/account/token-refresh.service.js +1 -0
  248. package/dist-server/domain/agent/agent.controller.js +1 -110
  249. package/dist-server/domain/agent/agent.module.js +1 -27
  250. package/dist-server/domain/agent/agent.service.js +1 -484
  251. package/dist-server/domain/agent/agent.types.js +1 -3
  252. package/dist-server/domain/agent/builtin-agent-loader.js +1 -0
  253. package/dist-server/domain/agent/dto/create-agent.dto.js +1 -80
  254. package/dist-server/domain/agent/dto/preview-prompt.dto.js +1 -77
  255. package/dist-server/domain/agent/dto/provider-meta.dto.js +1 -2
  256. package/dist-server/domain/agent/dto/remote-provider.dto.js +1 -0
  257. package/dist-server/domain/agent/dto/reorder-agents.dto.js +1 -51
  258. package/dist-server/domain/agent/dto/update-agent.dto.js +1 -92
  259. package/dist-server/domain/agent/provider.controller.js +1 -49
  260. package/dist-server/domain/agent/template-processor.service.js +1 -71
  261. package/dist-server/domain/agent-suggestion/agent-suggestion.controller.js +1 -0
  262. package/dist-server/domain/agent-suggestion/agent-suggestion.module.js +1 -0
  263. package/dist-server/domain/agent-suggestion/agent-suggestion.service.js +1 -0
  264. package/dist-server/domain/agent-suggestion/analysis/evidence-json.js +1 -0
  265. package/dist-server/domain/agent-suggestion/analysis/h1-evidence.js +2 -0
  266. package/dist-server/domain/agent-suggestion/analysis/h1-prompt.js +108 -0
  267. package/dist-server/domain/agent-suggestion/analysis/h3-rules.js +1 -0
  268. package/dist-server/domain/agent-suggestion/analysis/index.js +1 -0
  269. package/dist-server/domain/agent-suggestion/analysis/merge3.js +2 -0
  270. package/dist-server/domain/agent-suggestion/analysis/secret-redaction.js +1 -0
  271. package/dist-server/domain/agent-suggestion/analysis/types.js +1 -0
  272. package/dist-server/domain/agent-suggestion/dto/apply-batch.dto.js +1 -0
  273. package/dist-server/domain/agent-suggestion/dto/suggestion-response.dto.js +1 -0
  274. package/dist-server/domain/app/app-list.types.js +1 -0
  275. package/dist-server/domain/app/app.controller.js +1 -0
  276. package/dist-server/domain/app/app.module.js +1 -0
  277. package/dist-server/domain/app/app.service.js +1 -0
  278. package/dist-server/domain/app/dto/app-list.dto.js +1 -0
  279. package/dist-server/domain/app-dev/app-dev-action-dispatcher.js +1 -0
  280. package/dist-server/domain/app-dev/app-dev-error.exception-filter.js +1 -0
  281. package/dist-server/domain/app-dev/app-dev-scan-incomplete.exception.js +1 -0
  282. package/dist-server/domain/app-dev/app-dev.controller.js +1 -0
  283. package/dist-server/domain/app-dev/app-dev.module.js +1 -0
  284. package/dist-server/domain/app-dev/app-dev.service.js +3 -0
  285. package/dist-server/domain/auth/auth-cookie-policy.js +1 -0
  286. package/dist-server/domain/auth/auth.constants.js +1 -4
  287. package/dist-server/domain/auth/auth.controller.js +1 -123
  288. package/dist-server/domain/auth/auth.module.js +1 -48
  289. package/dist-server/domain/auth/decorators/public.decorator.js +1 -7
  290. package/dist-server/domain/auth/guards/base-auth.guard.js +1 -88
  291. package/dist-server/domain/auth/guards/csrf.guard.js +1 -0
  292. package/dist-server/domain/auth/guards/local-only.guard.js +1 -0
  293. package/dist-server/domain/auth/guards/shortcut-csrf.guard.js +1 -0
  294. package/dist-server/domain/auth/local-pairing.service.js +1 -0
  295. package/dist-server/domain/auth/local-secret.js +1 -0
  296. package/dist-server/domain/auth/local-transport-policy.js +1 -0
  297. package/dist-server/domain/auth/session-store.js +8 -26
  298. package/dist-server/domain/auth/sessions-db.js +20 -0
  299. package/dist-server/domain/auth/utils/ip.utils.js +1 -31
  300. package/dist-server/domain/board/board.controller.js +1 -0
  301. package/dist-server/domain/board/board.module.js +1 -0
  302. package/dist-server/domain/board/board.service.js +1 -0
  303. package/dist-server/domain/board/board.types.js +1 -0
  304. package/dist-server/domain/board/dto/create-board-batch.dto.js +1 -0
  305. package/dist-server/domain/board/dto/create-board.dto.js +1 -0
  306. package/dist-server/domain/board/dto/plan-board.dto.js +1 -0
  307. package/dist-server/domain/board/dto/update-board.dto.js +1 -0
  308. package/dist-server/domain/box/box.controller.js +1 -77
  309. package/dist-server/domain/box/box.module.js +1 -21
  310. package/dist-server/domain/box/box.service.js +1 -97
  311. package/dist-server/domain/box/dto/create-box.dto.js +1 -74
  312. package/dist-server/domain/cli/cli-local-only.guard.js +1 -0
  313. package/dist-server/domain/cli/cli.controller.js +4 -136
  314. package/dist-server/domain/cli/cli.module.js +1 -21
  315. package/dist-server/domain/cli/cli.service.js +3 -579
  316. package/dist-server/domain/cli/dto/cli-auth-status-query.dto.js +1 -0
  317. package/dist-server/domain/cli/dto/login-cli.dto.js +1 -25
  318. package/dist-server/domain/cli/dto/update-cli.dto.js +1 -31
  319. package/dist-server/domain/cron/__fixtures__/app-schedule-fixture.js +30 -0
  320. package/dist-server/domain/cron/cron-bootstrap.service.js +1 -0
  321. package/dist-server/domain/cron/cron-runtime-host.module.js +1 -0
  322. package/dist-server/domain/cron/cron-runtime-sync.port.js +1 -0
  323. package/dist-server/domain/cron/cron-runtime-sync.service.js +1 -0
  324. package/dist-server/domain/cron/cron.controller.js +1 -147
  325. package/dist-server/domain/cron/cron.module.js +1 -22
  326. package/dist-server/domain/cron/cron.service.js +1 -81
  327. package/dist-server/domain/cron/dto/cron.dto.js +1 -80
  328. package/dist-server/domain/cron/mcp-app-schedule-host.service.js +1 -0
  329. package/dist-server/domain/doc/doc.controller.js +1 -172
  330. package/dist-server/domain/doc/doc.module.js +1 -21
  331. package/dist-server/domain/doc/doc.service.js +1 -504
  332. package/dist-server/domain/doc/dto/doc.dto.js +1 -64
  333. package/dist-server/domain/doc/image-constants.js +1 -21
  334. package/dist-server/domain/document/document.controller.js +1 -57
  335. package/dist-server/domain/document/document.module.js +1 -22
  336. package/dist-server/domain/document/document.service.js +7 -274
  337. package/dist-server/domain/document/dto/register-document.dto.js +1 -24
  338. package/dist-server/domain/env/dto/put-env.dto.js +1 -0
  339. package/dist-server/domain/env/env.controller.js +1 -0
  340. package/dist-server/domain/env/env.module.js +1 -0
  341. package/dist-server/domain/env/env.service.js +1 -0
  342. package/dist-server/domain/events/events.module.js +1 -31
  343. package/dist-server/domain/events/server-conversation.plugin.js +1 -45
  344. package/dist-server/domain/events/workspace-event.bus.js +1 -32
  345. package/dist-server/domain/events/workspace-event.types.js +1 -12
  346. package/dist-server/domain/events/workspace-events-test.controller.js +1 -83
  347. package/dist-server/domain/events/workspace-events.controller.js +1 -49
  348. package/dist-server/domain/fs/dto/mkdir-request.dto.js +1 -47
  349. package/dist-server/domain/fs/dto/mkdir-response.dto.js +1 -2
  350. package/dist-server/domain/fs/dto/quick-access.dto.js +1 -2
  351. package/dist-server/domain/fs/dto/tree-node.dto.js +1 -2
  352. package/dist-server/domain/fs/dto/tree-query.dto.js +1 -35
  353. package/dist-server/domain/fs/fs.controller.js +1 -63
  354. package/dist-server/domain/fs/fs.module.js +1 -22
  355. package/dist-server/domain/fs/fs.service.js +1 -303
  356. package/dist-server/domain/git/git.controller.js +1 -180
  357. package/dist-server/domain/git/git.module.js +1 -22
  358. package/dist-server/domain/git/git.service.js +1 -515
  359. package/dist-server/domain/goal/dto/goal.dto.js +1 -49
  360. package/dist-server/domain/goal/goal.controller.js +1 -86
  361. package/dist-server/domain/goal/goal.module.js +1 -22
  362. package/dist-server/domain/goal/goal.service.js +1 -197
  363. package/dist-server/domain/goal/parser/goal-md-parser.js +1 -166
  364. package/dist-server/domain/goal/parser/goal-md-serializer.js +5 -108
  365. package/dist-server/domain/health/health.controller.js +1 -57
  366. package/dist-server/domain/health/health.module.js +1 -19
  367. package/dist-server/domain/health/ui-asset-revision.service.js +1 -0
  368. package/dist-server/domain/knowledge/dto/graph-knowledge.dto.js +1 -27
  369. package/dist-server/domain/knowledge/dto/knowledge.dto.js +1 -71
  370. package/dist-server/domain/knowledge/knowledge.controller.js +1 -122
  371. package/dist-server/domain/knowledge/knowledge.module.js +1 -21
  372. package/dist-server/domain/knowledge/knowledge.service.js +1 -538
  373. package/dist-server/domain/market/__fixtures__/build-fixture.js +1 -0
  374. package/dist-server/domain/market/__fixtures__/marketplace-anonymous-install.contract.js +1 -0
  375. package/dist-server/domain/market/dto/add-registry.dto.js +1 -32
  376. package/dist-server/domain/market/dto/install-apply.dto.js +1 -0
  377. package/dist-server/domain/market/dto/install-cancel.dto.js +1 -0
  378. package/dist-server/domain/market/dto/install-market.dto.js +1 -30
  379. package/dist-server/domain/market/dto/install-plan.dto.js +1 -0
  380. package/dist-server/domain/market/dto/invite-accept.dto.js +1 -0
  381. package/dist-server/domain/market/dto/publish-plan.dto.js +1 -0
  382. package/dist-server/domain/market/dto/publish-run.dto.js +1 -0
  383. package/dist-server/domain/market/dto/publisher-funnel.dto.js +1 -0
  384. package/dist-server/domain/market/dto/publisher-invite.dto.js +1 -0
  385. package/dist-server/domain/market/dto/publisher-sharing-recipient.dto.js +1 -0
  386. package/dist-server/domain/market/dto/shr-response.dto.js +1 -0
  387. package/dist-server/domain/market/first-run-event.listener.js +1 -0
  388. package/dist-server/domain/market/install-error.exception-filter.js +1 -0
  389. package/dist-server/domain/market/install-id.validation.js +1 -0
  390. package/dist-server/domain/market/install-plan-expired.exception-filter.js +1 -0
  391. package/dist-server/domain/market/install.service.js +1 -0
  392. package/dist-server/domain/market/market.controller.js +1 -163
  393. package/dist-server/domain/market/market.module.js +1 -22
  394. package/dist-server/domain/market/market.service.js +3 -1447
  395. package/dist-server/domain/market/marketplace-api.client.js +1 -0
  396. package/dist-server/domain/market/marketplace-target.js +1 -0
  397. package/dist-server/domain/market/publish.controller.js +1 -0
  398. package/dist-server/domain/market/publish.service.js +1 -0
  399. package/dist-server/domain/market/publisher-invite-labels-ledger.service.js +2 -0
  400. package/dist-server/domain/market/publisher-invite.service.js +1 -0
  401. package/dist-server/domain/market/publisher-sharing-recipient.controller.js +1 -0
  402. package/dist-server/domain/market/publisher-sharing-recipient.exception-filter.js +1 -0
  403. package/dist-server/domain/market/publisher-sharing-recipient.service.js +1 -0
  404. package/dist-server/domain/market/publisher-sharing-usage.js +1 -0
  405. package/dist-server/domain/market/sharing-event.client.js +1 -0
  406. package/dist-server/domain/market/sharing-installs-ledger.service.js +1 -0
  407. package/dist-server/domain/market/sharing-updates.service.js +1 -0
  408. package/dist-server/domain/market/source-coordinate.js +1 -0
  409. package/dist-server/domain/market/template-installer.js +2 -0
  410. package/dist-server/domain/mcp/app-debug-log.js +4 -0
  411. package/dist-server/domain/mcp/browser-session.store.js +5 -297
  412. package/dist-server/domain/mcp/chromex-blacklist.js +1 -26
  413. package/dist-server/domain/mcp/chromex-negotiate.controller.js +1 -77
  414. package/dist-server/domain/mcp/chromex-negotiate.dto.js +1 -95
  415. package/dist-server/domain/mcp/chromex-negotiate.service.js +3 -237
  416. package/dist-server/domain/mcp/crewx-tool.factory.js +1 -119
  417. package/dist-server/domain/mcp/default-apps/shared.js +1 -0
  418. package/dist-server/domain/mcp/dto/open-mcp-app.dto.js +1 -0
  419. package/dist-server/domain/mcp/html-viewer.controller.js +1 -0
  420. package/dist-server/domain/mcp/html-viewer.service.js +1 -0
  421. package/dist-server/domain/mcp/mcp-app-actions.js +1 -0
  422. package/dist-server/domain/mcp/mcp-app-assets.js +1 -0
  423. package/dist-server/domain/mcp/mcp-app-prompt-context.js +1 -0
  424. package/dist-server/domain/mcp/mcp-app-resource-csp.interceptor.js +1 -0
  425. package/dist-server/domain/mcp/mcp-app-runtime.controller.js +1 -0
  426. package/dist-server/domain/mcp/mcp-app-runtime.service.js +1 -0
  427. package/dist-server/domain/mcp/mcp-app-sandbox.service.js +2 -0
  428. package/dist-server/domain/mcp/mcp-app-workspace-asset-catalog-resolver.js +1 -0
  429. package/dist-server/domain/mcp/mcp-apps.js +1 -0
  430. package/dist-server/domain/mcp/mcp-auth.guard.js +1 -75
  431. package/dist-server/domain/mcp/mcp.constants.js +1 -7
  432. package/dist-server/domain/mcp/mcp.controller.js +1 -126
  433. package/dist-server/domain/mcp/mcp.dto.js +1 -12
  434. package/dist-server/domain/mcp/mcp.module.js +1 -53
  435. package/dist-server/domain/mcp/mcp.service.js +1 -741
  436. package/dist-server/domain/mcp/product-app-bundle-assets.js +1 -0
  437. package/dist-server/domain/mcp/skill-backend.port.js +1 -0
  438. package/dist-server/domain/mcp/tool-router.service.js +1 -120
  439. package/dist-server/domain/mcp/ui-content-channel.service.js +1 -0
  440. package/dist-server/domain/message/dto/list-messages.dto.js +1 -57
  441. package/dist-server/domain/message/dto/send-message.dto.js +1 -133
  442. package/dist-server/domain/message/message.controller.js +1 -113
  443. package/dist-server/domain/message/message.module.js +1 -26
  444. package/dist-server/domain/message/message.multipart.js +1 -0
  445. package/dist-server/domain/message/message.service.js +9 -292
  446. package/dist-server/domain/notification/dto/create-notification.dto.js +1 -0
  447. package/dist-server/domain/notification/dto/list-notifications.dto.js +1 -0
  448. package/dist-server/domain/notification/notification.controller.js +1 -0
  449. package/dist-server/domain/notification/notification.module.js +1 -0
  450. package/dist-server/domain/notification/notification.service.js +1 -0
  451. package/dist-server/domain/onboarding/onboarding.controller.js +1 -97
  452. package/dist-server/domain/onboarding/onboarding.module.js +1 -23
  453. package/dist-server/domain/onboarding/onboarding.service.js +1 -106
  454. package/dist-server/domain/onboarding/onboarding.types.js +1 -2
  455. package/dist-server/domain/onboarding/presets/custom.js +1 -10
  456. package/dist-server/domain/onboarding/presets/dev-team.js +1 -41
  457. package/dist-server/domain/onboarding/presets/index.js +1 -15
  458. package/dist-server/domain/onboarding/presets/marketing-team.js +1 -29
  459. package/dist-server/domain/onboarding/presets/planning-team.js +1 -29
  460. package/dist-server/domain/onboarding/presets/solo.js +1 -17
  461. package/dist-server/domain/planner/dto/planner.dto.js +1 -58
  462. package/dist-server/domain/planner/planner.controller.js +1 -74
  463. package/dist-server/domain/planner/planner.module.js +1 -22
  464. package/dist-server/domain/planner/planner.service.js +1 -272
  465. package/dist-server/domain/project/dto/create-project-ledger.dto.js +1 -0
  466. package/dist-server/domain/project/dto/create-project.dto.js +1 -46
  467. package/dist-server/domain/project/dto/update-project.dto.js +1 -60
  468. package/dist-server/domain/project/project-ledger.controller.js +1 -0
  469. package/dist-server/domain/project/project-ledger.service.js +1 -0
  470. package/dist-server/domain/project/project.controller.js +1 -129
  471. package/dist-server/domain/project/project.module.js +1 -22
  472. package/dist-server/domain/project/project.service.js +1 -173
  473. package/dist-server/domain/settings/local-ai-server/local-ai-server.controller.js +1 -0
  474. package/dist-server/domain/settings/local-ai-server/local-ai-server.dto.js +1 -0
  475. package/dist-server/domain/settings/local-ai-server/local-ai-server.network-policy.js +1 -0
  476. package/dist-server/domain/settings/local-ai-server/local-ai-server.service.js +1 -0
  477. package/dist-server/domain/settings/local-ai-server/local-ai-server.types.js +1 -0
  478. package/dist-server/domain/settings/request-log-maintenance.js +1 -0
  479. package/dist-server/domain/settings/request-log-maintenance.service.js +1 -0
  480. package/dist-server/domain/settings/request-log-maintenance.worker.js +1 -0
  481. package/dist-server/domain/settings/request-log-prune.js +40 -0
  482. package/dist-server/domain/settings/request-log-rollup.js +31 -0
  483. package/dist-server/domain/settings/request-log-store.js +11 -0
  484. package/dist-server/domain/settings/request-logs.controller.js +1 -0
  485. package/dist-server/domain/settings/request-logs.service.js +15 -0
  486. package/dist-server/domain/settings/request-logs.types.js +1 -0
  487. package/dist-server/domain/settings/settings.controller.js +1 -52
  488. package/dist-server/domain/settings/settings.module.js +1 -24
  489. package/dist-server/domain/settings/settings.service.js +1 -221
  490. package/dist-server/domain/settings/storage-retention.js +52 -0
  491. package/dist-server/domain/settings/storage-retention.worker.js +21 -0
  492. package/dist-server/domain/settings/storage.controller.js +1 -0
  493. package/dist-server/domain/settings/storage.service.js +1 -0
  494. package/dist-server/domain/settings/storage.types.js +1 -0
  495. package/dist-server/domain/system/desktop-control.guard.js +1 -0
  496. package/dist-server/domain/system/shortcut.service.js +1 -0
  497. package/dist-server/domain/system/shortcut.types.js +1 -0
  498. package/dist-server/domain/system/shutdown.dto.js +1 -0
  499. package/dist-server/domain/system/system.controller.js +5 -41
  500. package/dist-server/domain/system/system.module.js +1 -19
  501. package/dist-server/domain/system/system.service.js +1 -0
  502. package/dist-server/domain/system/task-ownership.js +1 -0
  503. package/dist-server/domain/system/update-gate.service.js +1 -0
  504. package/dist-server/domain/task/child-task-projection.js +1 -0
  505. package/dist-server/domain/task/dto/all-tasks.dto.js +1 -55
  506. package/dist-server/domain/task/dto/descendants.dto.js +1 -0
  507. package/dist-server/domain/task/dto/list-tasks.dto.js +1 -69
  508. package/dist-server/domain/task/dto/search-tasks.dto.js +1 -66
  509. package/dist-server/domain/task/dto/send-message.dto.js +1 -41
  510. package/dist-server/domain/task/dto/task-prompt.dto.js +1 -0
  511. package/dist-server/domain/task/dto/task-rating.dto.js +1 -0
  512. package/dist-server/domain/task/dto/task-status.dto.js +1 -34
  513. package/dist-server/domain/task/dto/workspace-usage.dto.js +1 -38
  514. package/dist-server/domain/task/prompt-composition.js +1 -0
  515. package/dist-server/domain/task/task-execution-path.js +1 -0
  516. package/dist-server/domain/task/task.constants.js +1 -12
  517. package/dist-server/domain/task/task.controller.js +1 -184
  518. package/dist-server/domain/task/task.module.js +1 -23
  519. package/dist-server/domain/task/task.service.js +3 -1082
  520. package/dist-server/domain/terminal/terminal-access-policy.js +1 -0
  521. package/dist-server/domain/terminal/terminal-audit.service.js +25 -0
  522. package/dist-server/domain/terminal/terminal-csp.js +1 -0
  523. package/dist-server/domain/terminal/terminal-local-only.guard.js +1 -0
  524. package/dist-server/domain/terminal/terminal-session.service.js +1 -0
  525. package/dist-server/domain/terminal/terminal-ticket.service.js +1 -0
  526. package/dist-server/domain/terminal/terminal-ws.service.js +1 -0
  527. package/dist-server/domain/terminal/terminal.controller.js +1 -0
  528. package/dist-server/domain/terminal/terminal.module.js +1 -0
  529. package/dist-server/domain/thread/dto/build-context.dto.js +1 -42
  530. package/dist-server/domain/thread/dto/highlight.dto.js +1 -0
  531. package/dist-server/domain/thread/dto/list-messages.dto.js +1 -49
  532. package/dist-server/domain/thread/dto/list-threads.dto.js +1 -70
  533. package/dist-server/domain/thread/dto/reorder-pins.dto.js +1 -22
  534. package/dist-server/domain/thread/dto/search-threads.dto.js +1 -13
  535. package/dist-server/domain/thread/dto/thread-label.dto.js +1 -0
  536. package/dist-server/domain/thread/dto/timeline-query.dto.js +1 -0
  537. package/dist-server/domain/thread/dto/update-thread.dto.js +1 -23
  538. package/dist-server/domain/thread/overdrive.types.js +1 -38
  539. package/dist-server/domain/thread/thread-highlight-flight.service.js +1 -0
  540. package/dist-server/domain/thread/thread-highlight-regeneration.service.js +1 -0
  541. package/dist-server/domain/thread/thread-highlight-trigger.service.js +1 -0
  542. package/dist-server/domain/thread/thread-highlight.constants.js +1 -0
  543. package/dist-server/domain/thread/thread-label.controller.js +1 -0
  544. package/dist-server/domain/thread/thread-label.service.js +1 -0
  545. package/dist-server/domain/thread/thread-preview.controller.js +1 -0
  546. package/dist-server/domain/thread/thread-title.backfill.js +1 -0
  547. package/dist-server/domain/thread/thread-title.types.js +1 -0
  548. package/dist-server/domain/thread/thread.controller.js +1 -190
  549. package/dist-server/domain/thread/thread.module.js +1 -25
  550. package/dist-server/domain/thread/thread.service.js +6 -707
  551. package/dist-server/domain/token/token.controller.js +1 -73
  552. package/dist-server/domain/token/token.dto.js +1 -56
  553. package/dist-server/domain/token/token.module.js +1 -22
  554. package/dist-server/domain/token/token.service.js +3 -235
  555. package/dist-server/domain/usage/codex-rate-limits.client.js +2 -0
  556. package/dist-server/domain/usage/usage.controller.js +1 -186
  557. package/dist-server/domain/usage/usage.module.js +1 -22
  558. package/dist-server/domain/usage/usage.service.js +1 -952
  559. package/dist-server/domain/usage/usage.types.js +1 -4
  560. package/dist-server/domain/usage-report/dto/usage-report.dto.js +1 -2
  561. package/dist-server/domain/usage-report/report-findings.js +1 -0
  562. package/dist-server/domain/usage-report/usage-report.controller.js +1 -72
  563. package/dist-server/domain/usage-report/usage-report.module.js +1 -23
  564. package/dist-server/domain/usage-report/usage-report.service.js +1 -135
  565. package/dist-server/domain/wbs/wbs.controller.js +1 -51
  566. package/dist-server/domain/wbs/wbs.module.js +1 -21
  567. package/dist-server/domain/wbs/wbs.service.js +1 -94
  568. package/dist-server/domain/wi/dto/create-wi.dto.js +1 -0
  569. package/dist-server/domain/wi/dto/update-wi-status.dto.js +1 -0
  570. package/dist-server/domain/wi/wi.controller.js +1 -70
  571. package/dist-server/domain/wi/wi.module.js +1 -22
  572. package/dist-server/domain/wi/wi.service.js +2 -280
  573. package/dist-server/domain/wi/wi.types.js +1 -2
  574. package/dist-server/domain/workflow/chat-card-proof.service.js +1 -83
  575. package/dist-server/domain/workflow/dto/thread-app-launch.dto.js +1 -0
  576. package/dist-server/domain/workflow/thread-app-launch.controller.js +1 -0
  577. package/dist-server/domain/workflow/ui-instance.controller.js +1 -0
  578. package/dist-server/domain/workflow/workflow-approval-v2.js +1 -0
  579. package/dist-server/domain/workflow/workflow.controller.js +1 -149
  580. package/dist-server/domain/workflow/workflow.module.js +1 -22
  581. package/dist-server/domain/workflow/workflow.service.js +3 -782
  582. package/dist-server/domain/workspace/dto/create-workspace.dto.js +1 -45
  583. package/dist-server/domain/workspace/dto/rename-workspace.dto.js +1 -0
  584. package/dist-server/domain/workspace/dto/switch-workspace.dto.js +1 -32
  585. package/dist-server/domain/workspace/dto/workspace-info.dto.js +1 -2
  586. package/dist-server/domain/workspace/workspace.controller.js +1 -98
  587. package/dist-server/domain/workspace/workspace.module.js +1 -22
  588. package/dist-server/domain/workspace/workspace.service.js +1 -201
  589. package/dist-server/main.js +1 -231
  590. package/dist-server/modules/crewx-pool.service.js +1 -340
  591. package/dist-server/modules/crewx.module.js +1 -53
  592. package/dist-server/modules/workspace-config.store.js +1 -0
  593. package/dist-server/repository/agent-suggestion.repository.js +1 -0
  594. package/dist-server/repository/base-sqlite.repository.js +1 -18
  595. package/dist-server/repository/box.repository.js +1 -99
  596. package/dist-server/repository/message.repository.js +1 -22
  597. package/dist-server/repository/notification.repository.js +1 -0
  598. package/dist-server/repository/project.repository.js +1 -51
  599. package/dist-server/repository/repository.module.js +1 -38
  600. package/dist-server/repository/request-log.repository.js +2 -87
  601. package/dist-server/repository/task.repository.js +11 -376
  602. package/dist-server/repository/thread-label.repository.js +1 -0
  603. package/dist-server/repository/thread.repository.js +110 -189
  604. package/dist-server/repository/usage-limit-snapshot.repository.js +1 -24
  605. package/dist-server/repository/usage-report.repository.js +1 -27
  606. package/dist-server/shared/attachment-path.js +1 -0
  607. package/dist-server/shared/attachment-policy.js +1 -0
  608. package/dist-server/shared/crewx-home.js +1 -58
  609. package/dist-server/shared/crewx-state.js +1 -66
  610. package/dist-server/shared/doc-heading.js +1 -0
  611. package/dist-server/shared/marketplace-api.constants.js +1 -0
  612. package/dist-server/shared/thread-label.js +1 -0
  613. package/dist-server/shared/workflow-run.contract.js +1 -0
  614. package/dist-server/test-utils/compat-database.js +1 -30
  615. package/dist-server/test-utils/request-log-fixtures.js +35 -0
  616. package/dist-server/utils/tokenizer.js +1 -8
  617. package/examples/mcp-apps/dist/sandbox/sandbox.html +30 -0
  618. package/examples/mcp-apps/dist/workflow/workflow-card.html +161 -0
  619. package/package.json +201 -34
  620. package/packages/cli/dist/bootstrap/codex-writable-roots.d.ts +20 -1
  621. package/packages/cli/dist/bootstrap/codex-writable-roots.js +1 -88
  622. package/packages/cli/dist/bootstrap/crewx-cli.js +1 -63
  623. package/packages/cli/dist/builtin.d.ts +1 -1
  624. package/packages/cli/dist/builtin.js +5 -127
  625. package/packages/cli/dist/commands/agent.js +4 -224
  626. package/packages/cli/dist/commands/cal.d.ts +15 -0
  627. package/packages/cli/dist/commands/cal.js +2 -0
  628. package/packages/cli/dist/commands/db.d.ts +3 -0
  629. package/packages/cli/dist/commands/db.js +59 -125
  630. package/packages/cli/dist/commands/detached.d.ts +95 -0
  631. package/packages/cli/dist/commands/detached.js +15 -0
  632. package/packages/cli/dist/commands/doctor.d.ts +77 -0
  633. package/packages/cli/dist/commands/doctor.js +4 -196
  634. package/packages/cli/dist/commands/emit-trailer.d.ts +25 -0
  635. package/packages/cli/dist/commands/emit-trailer.js +2 -0
  636. package/packages/cli/dist/commands/execute.d.ts +8 -4
  637. package/packages/cli/dist/commands/execute.js +15 -146
  638. package/packages/cli/dist/commands/hook/command-marker.d.ts +2 -0
  639. package/packages/cli/dist/commands/hook/command-marker.js +1 -0
  640. package/packages/cli/dist/commands/hook/install.d.ts +0 -1
  641. package/packages/cli/dist/commands/hook/install.js +8 -175
  642. package/packages/cli/dist/commands/hook/paths.js +1 -94
  643. package/packages/cli/dist/commands/hook/status.js +1 -86
  644. package/packages/cli/dist/commands/hook/uninstall.js +1 -71
  645. package/packages/cli/dist/commands/hook-dispatch.js +2 -180
  646. package/packages/cli/dist/commands/init.d.ts +34 -0
  647. package/packages/cli/dist/commands/init.js +37 -370
  648. package/packages/cli/dist/commands/kill.d.ts +2 -8
  649. package/packages/cli/dist/commands/kill.js +1 -52
  650. package/packages/cli/dist/commands/log.js +3 -95
  651. package/packages/cli/dist/commands/parse-agent-message.js +1 -52
  652. package/packages/cli/dist/commands/parse-common-flags.d.ts +5 -1
  653. package/packages/cli/dist/commands/parse-common-flags.js +3 -181
  654. package/packages/cli/dist/commands/ps.d.ts +2 -2
  655. package/packages/cli/dist/commands/ps.js +2 -107
  656. package/packages/cli/dist/commands/publish.d.ts +1 -0
  657. package/packages/cli/dist/commands/publish.js +27 -0
  658. package/packages/cli/dist/commands/query.d.ts +7 -2
  659. package/packages/cli/dist/commands/query.js +16 -146
  660. package/packages/cli/dist/commands/registry.js +1 -31
  661. package/packages/cli/dist/commands/resolve-prompt.js +3 -54
  662. package/packages/cli/dist/commands/resolve-recipient.d.ts +14 -0
  663. package/packages/cli/dist/commands/resolve-recipient.js +3 -0
  664. package/packages/cli/dist/commands/restart.d.ts +3 -1
  665. package/packages/cli/dist/commands/restart.js +18 -162
  666. package/packages/cli/dist/commands/result.d.ts +8 -3
  667. package/packages/cli/dist/commands/result.js +1 -70
  668. package/packages/cli/dist/commands/shortcut.d.ts +1 -0
  669. package/packages/cli/dist/commands/shortcut.js +18 -0
  670. package/packages/cli/dist/commands/slack.js +16 -559
  671. package/packages/cli/dist/commands/stop.d.ts +8 -0
  672. package/packages/cli/dist/commands/stop.js +8 -0
  673. package/packages/cli/dist/commands/write-output.js +1 -24
  674. package/packages/cli/dist/index.d.ts +1 -1
  675. package/packages/cli/dist/index.js +1 -5
  676. package/packages/cli/dist/logging.d.ts +1 -1
  677. package/packages/cli/dist/logging.js +10 -86
  678. package/packages/cli/dist/main.d.ts +3 -2
  679. package/packages/cli/dist/main.js +44 -253
  680. package/packages/cli/dist/register-builtin-tools.js +1 -9
  681. package/packages/cli/dist/slack/file-download.js +1 -134
  682. package/packages/cli/dist/slack/markdown.js +1 -33
  683. package/packages/cli/dist/utils/env-defaults.d.ts +2 -5
  684. package/packages/cli/dist/utils/env-defaults.js +1 -10
  685. package/packages/cli/dist/utils/inherited-trace.d.ts +24 -0
  686. package/packages/cli/dist/utils/inherited-trace.js +1 -25
  687. package/packages/cli/dist/utils/product-package-root.d.ts +6 -0
  688. package/packages/cli/dist/utils/product-package-root.js +1 -0
  689. package/packages/cli/dist/utils/sdk-compat.d.ts +24 -0
  690. package/packages/cli/dist/utils/sdk-compat.js +1 -0
  691. package/packages/cli/dist/utils/version.js +1 -28
  692. package/packages/cli/package.json +7 -2
  693. package/server.js +2 -106
  694. package/dist/assets/MarketPage-BgAWacd7.js +0 -41
  695. package/dist/assets/PromptTab-LML0dhnv.js +0 -27
  696. package/dist/assets/arc-BBMQPf9Z.js +0 -1
  697. package/dist/assets/architectureDiagram-UYN6MBPD-Uinv3ruS.js +0 -36
  698. package/dist/assets/blockDiagram-ZHA2E4KO-CM8iVhUy.js +0 -121
  699. package/dist/assets/c4Diagram-6F5ED5ID-D6HM4dEk.js +0 -10
  700. package/dist/assets/channel-cs9O3fiH.js +0 -1
  701. package/dist/assets/chunk-5HRBRIJM-CsiffIEz.js +0 -1
  702. package/dist/assets/chunk-7U56Z5CX-kgH95T9a.js +0 -220
  703. package/dist/assets/chunk-ASOPGD6M-dKFyf37d.js +0 -1
  704. package/dist/assets/chunk-T2TOU4HS-DMk7ilyN.js +0 -164
  705. package/dist/assets/classDiagram-LNE6IOMH-veS4tD2p.js +0 -1
  706. package/dist/assets/classDiagram-v2-MQ7JQ4JX-veS4tD2p.js +0 -1
  707. package/dist/assets/cytoscape.esm-BiciSPf8.js +0 -331
  708. package/dist/assets/dagre-4EVJKHTY-DKMJYrr5.js +0 -4
  709. package/dist/assets/diagram-QW4FP2JN-BNyGnAGw.js +0 -24
  710. package/dist/assets/erDiagram-6RL3IURR-qo27Uk30.js +0 -51
  711. package/dist/assets/flowDiagram-7ASYPVHJ-BudDObQU.js +0 -160
  712. package/dist/assets/ganttDiagram-NTVNEXSI-DCFf5efZ.js +0 -257
  713. package/dist/assets/gitGraph-YCYPL57B-Cv8vXWsN.js +0 -133
  714. package/dist/assets/gitGraphDiagram-NRZ2UAAF-DJUV3_64.js +0 -65
  715. package/dist/assets/graph-BlwPajkw.js +0 -1
  716. package/dist/assets/infoDiagram-A4XQUW5V-BlzLOJuh.js +0 -2
  717. package/dist/assets/journeyDiagram-G5WM74LC-BoBDY7uv.js +0 -139
  718. package/dist/assets/katex-DkKDou_j.js +0 -257
  719. package/dist/assets/layout-Bvwu4dCi.js +0 -1
  720. package/dist/assets/linear-CoIZ0x19.js +0 -1
  721. package/dist/assets/main-BOcmSxv5.css +0 -10
  722. package/dist/assets/main-CZQslZK1.js +0 -1526
  723. package/dist/assets/mindmap-definition-GWI6TPTV-B4T62xYW.js +0 -95
  724. package/dist/assets/pieDiagram-YF2LJOPJ-C570Jl7r.js +0 -30
  725. package/dist/assets/quadrantDiagram-OS5C2QUG-D9kamKQz.js +0 -7
  726. package/dist/assets/requirementDiagram-MIRIMTAZ-CbI9--NI.js +0 -52
  727. package/dist/assets/sankeyDiagram-Y46BX6SQ-5AYnNxm5.js +0 -8
  728. package/dist/assets/sequenceDiagram-G6AWOVSC-awwP3H4O.js +0 -122
  729. package/dist/assets/stateDiagram-MAYHULR4-DsTGBCid.js +0 -1
  730. package/dist/assets/stateDiagram-v2-4JROLMXI-B8Exp_99.js +0 -1
  731. package/dist/assets/timeline-definition-U7ZMHBDA-Dur75zzR.js +0 -61
  732. package/dist/assets/xychartDiagram-6QU3TZC5-zevo9T1B.js +0 -7
  733. package/dist-electron/main.js +0 -194
  734. package/dist-electron/overlay.js +0 -129
  735. package/dist-electron/package.json +0 -1
  736. package/dist-electron/preload.js +0 -12
@@ -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
- * crewx launcher library — testable pure-logic functions extracted from crewx.js.
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
- * crewx launcher
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)}
@@ -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
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require("./dist-server/main.js");