crewx 0.9.0-rc.16 → 0.9.0-rc.160

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 (734) 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-BaGHcrM3.js +762 -0
  10. package/dist/assets/MarketPage-BqbhW9qO.js +41 -0
  11. package/dist/assets/PromptTab-CNr8o5Hk.js +27 -0
  12. package/dist/assets/abap-BrgZPUOV.js +6 -0
  13. package/dist/assets/abnfDiagram-VCTEODGH-ClxH59u1.js +1 -0
  14. package/dist/assets/apex-DyP6w7ZV.js +6 -0
  15. package/dist/assets/arc-C2tedPg4.js +1 -0
  16. package/dist/assets/architectureDiagram-5GKGNRK7-DaY6udmr.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-CLVdONfc.js +129 -0
  21. package/dist/assets/bronze-DHyggp7i.png +0 -0
  22. package/dist/assets/c4Diagram-7LVT6UL2-DHp29rxF.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-9BCSJXH6.js +1 -0
  26. package/dist/assets/{chunk-KFBOBJHC-Det1gu-Y.js → chunk-2Q5K7J3B-_yJHMx6L.js} +1 -1
  27. package/dist/assets/chunk-5VM5RSS4-Bw5ZEs4n.js +15 -0
  28. package/dist/assets/chunk-F27PBJKO-Dj2CHlmx.js +1 -0
  29. package/dist/assets/chunk-IMKFNOWR-B0tXcRcl.js +231 -0
  30. package/dist/assets/{chunk-TMUBEWPD-drsYJGIt.js → chunk-JWPE2WC7-DFJGhXtN.js} +1 -1
  31. package/dist/assets/chunk-POPQ4Y6H-DuM-dQxf.js +1 -0
  32. package/dist/assets/chunk-SVP7TREG-DwXwK5BF.js +88 -0
  33. package/dist/assets/chunk-TICWLB2K-ChBKwP-7.js +206 -0
  34. package/dist/assets/chunk-XXDRQBXY-CIxFg27c.js +1 -0
  35. package/dist/assets/classDiagram-ZZMXUADV-m5zBZQ3_.js +1 -0
  36. package/dist/assets/classDiagram-v2-VYDZK3BY-m5zBZQ3_.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-ZomgxbkJ.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-BMk_PqCx.js +9 -0
  47. package/dist/assets/cynefin-OW5HDTMX-V7RUZeLq.js +184 -0
  48. package/dist/assets/cynefinDiagram-5FMLGOSQ-BrrIyzdn.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-sGwoT6J5.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-BJPmB0b2.js +30 -0
  55. package/dist/assets/diagram-UQ7AKVKN-CDx2ninO.js +41 -0
  56. package/dist/assets/diagram-VSXAHHWV-DSd7b9rX.js +3 -0
  57. package/dist/assets/diagram-VX7I27RA-002F9Pck.js +24 -0
  58. package/dist/assets/diagram-Z3DM3KII-CbC3ojOM.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-BrQn7vCh.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-CydyIAQq.js +99 -0
  67. package/dist/assets/flow9-i9-g7ZhI.js +6 -0
  68. package/dist/assets/flowDiagram-HODETNUW-DMtpZRY3.js +168 -0
  69. package/dist/assets/freemarker2-DX223zhd.js +8 -0
  70. package/dist/assets/fsharp-CzKuDChf.js +6 -0
  71. package/dist/assets/ganttDiagram-EL5Y4UJY-B_0gzQpk.js +292 -0
  72. package/dist/assets/gitGraphDiagram-WWUBYQGX-z24DgWYO.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-B7ECWhaU.js +6 -0
  78. package/dist/assets/hcl-0cvrggvQ.js +6 -0
  79. package/dist/assets/html-VK6Xo-_z.js +6 -0
  80. package/dist/assets/html.worker-BWKvDFG4.js +461 -0
  81. package/dist/assets/htmlMode-pw5FAP7Z.js +9 -0
  82. package/dist/assets/infoDiagram-27XIBGKW-Bs31I7o0.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-Br_LilyH.js +70 -0
  86. package/dist/assets/java-B_fMsGYe.js +6 -0
  87. package/dist/assets/javascript-DxEiaRBx.js +6 -0
  88. package/dist/assets/journeyDiagram-3NMN7TZE-CUGc82vI.js +139 -0
  89. package/dist/assets/json.worker-BDor654j.js +49 -0
  90. package/dist/assets/jsonMode-BLTTfhPP.js +15 -0
  91. package/dist/assets/julia-Bqgm2twL.js +6 -0
  92. package/dist/assets/{kanban-definition-QRCXZQQD-BKgHIztA.js → kanban-definition-UXKFOSKX-DikYaYP2.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-od8tz6NX.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-CLDvclCn.js +1 -0
  99. package/dist/assets/liquid-D54CRrUJ.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-BLn-s3H5.js +2212 -0
  104. package/dist/assets/markdown-DSZPf7rp.js +6 -0
  105. package/dist/assets/master-Cu5Izdtt.png +0 -0
  106. package/dist/assets/mdx-BeqTjek4.js +6 -0
  107. package/dist/assets/mindmap-definition-YA3MSWOX-mIy5BMh-.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-CrDXnSvq.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-CTZzi3k6.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-DGOFs9t9.js +6 -0
  127. package/dist/assets/qsharp-DXyYeYxl.js +6 -0
  128. package/dist/assets/quadrantDiagram-AXDQQJYC-jLBdZtIX.js +7 -0
  129. package/dist/assets/r-CdQndTaG.js +6 -0
  130. package/dist/assets/railroadDiagram-O6MQD6OU-CDhELJVJ.js +1 -0
  131. package/dist/assets/razor-UsrSvDC9.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-sbqG4wcV.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-ZdKqWrAr.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-2W-euL-e.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-CIRAF37h.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-MsmUe1om.js +1 -0
  153. package/dist/assets/stateDiagram-v2-MP3YSRHH-Bp_iATvw.js +1 -0
  154. package/dist/assets/swift-DwJ7jVG9.js +8 -0
  155. package/dist/assets/swimlanes-42K2YHIH-CdLGFrNu.js +1 -0
  156. package/dist/assets/swimlanesDiagram-VR7AAH4N-Be_WC2C0.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-LYf6fDrf.js +120 -0
  160. package/dist/assets/{transformers.web-CBYsiihV.js → transformers.web-CVcoZqj1.js} +1 -1
  161. package/dist/assets/ts.worker-DM5dOG-y.js +51334 -0
  162. package/dist/assets/tsMode-BUcdefp3.js +16 -0
  163. package/dist/assets/twig-CPajHgWi.js +6 -0
  164. package/dist/assets/typescript-Ss-4EE38.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-DsHQgYhh.js +34 -0
  168. package/dist/assets/wardleyDiagram-VM6X3IG4-B9PhCiqs.js +78 -0
  169. package/dist/assets/wgsl-BIv9DU6q.js +303 -0
  170. package/dist/assets/xml-BR0dyvgu.js +6 -0
  171. package/dist/assets/xychartDiagram-S5SC5T6Z-Bhcqpvua.js +7 -0
  172. package/dist/assets/yaml-Cv_akoT3.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/cron-bootstrap.service.js +1 -0
  320. package/dist-server/domain/cron/cron-runtime-host.module.js +1 -0
  321. package/dist-server/domain/cron/cron-runtime-sync.port.js +1 -0
  322. package/dist-server/domain/cron/cron-runtime-sync.service.js +1 -0
  323. package/dist-server/domain/cron/cron.controller.js +1 -147
  324. package/dist-server/domain/cron/cron.module.js +1 -22
  325. package/dist-server/domain/cron/cron.service.js +1 -81
  326. package/dist-server/domain/cron/dto/cron.dto.js +1 -80
  327. package/dist-server/domain/doc/doc.controller.js +1 -172
  328. package/dist-server/domain/doc/doc.module.js +1 -21
  329. package/dist-server/domain/doc/doc.service.js +1 -504
  330. package/dist-server/domain/doc/dto/doc.dto.js +1 -64
  331. package/dist-server/domain/doc/image-constants.js +1 -21
  332. package/dist-server/domain/document/document.controller.js +1 -57
  333. package/dist-server/domain/document/document.module.js +1 -22
  334. package/dist-server/domain/document/document.service.js +7 -274
  335. package/dist-server/domain/document/dto/register-document.dto.js +1 -24
  336. package/dist-server/domain/env/dto/put-env.dto.js +1 -0
  337. package/dist-server/domain/env/env.controller.js +1 -0
  338. package/dist-server/domain/env/env.module.js +1 -0
  339. package/dist-server/domain/env/env.service.js +1 -0
  340. package/dist-server/domain/events/events.module.js +1 -31
  341. package/dist-server/domain/events/server-conversation.plugin.js +1 -45
  342. package/dist-server/domain/events/workspace-event.bus.js +1 -32
  343. package/dist-server/domain/events/workspace-event.types.js +1 -12
  344. package/dist-server/domain/events/workspace-events-test.controller.js +1 -83
  345. package/dist-server/domain/events/workspace-events.controller.js +1 -49
  346. package/dist-server/domain/fs/dto/mkdir-request.dto.js +1 -47
  347. package/dist-server/domain/fs/dto/mkdir-response.dto.js +1 -2
  348. package/dist-server/domain/fs/dto/quick-access.dto.js +1 -2
  349. package/dist-server/domain/fs/dto/tree-node.dto.js +1 -2
  350. package/dist-server/domain/fs/dto/tree-query.dto.js +1 -35
  351. package/dist-server/domain/fs/fs.controller.js +1 -63
  352. package/dist-server/domain/fs/fs.module.js +1 -22
  353. package/dist-server/domain/fs/fs.service.js +1 -303
  354. package/dist-server/domain/git/git.controller.js +1 -180
  355. package/dist-server/domain/git/git.module.js +1 -22
  356. package/dist-server/domain/git/git.service.js +1 -515
  357. package/dist-server/domain/goal/dto/goal.dto.js +1 -49
  358. package/dist-server/domain/goal/goal.controller.js +1 -86
  359. package/dist-server/domain/goal/goal.module.js +1 -22
  360. package/dist-server/domain/goal/goal.service.js +1 -197
  361. package/dist-server/domain/goal/parser/goal-md-parser.js +1 -166
  362. package/dist-server/domain/goal/parser/goal-md-serializer.js +5 -108
  363. package/dist-server/domain/health/health.controller.js +1 -57
  364. package/dist-server/domain/health/health.module.js +1 -19
  365. package/dist-server/domain/health/ui-asset-revision.service.js +1 -0
  366. package/dist-server/domain/knowledge/dto/graph-knowledge.dto.js +1 -27
  367. package/dist-server/domain/knowledge/dto/knowledge.dto.js +1 -71
  368. package/dist-server/domain/knowledge/knowledge.controller.js +1 -122
  369. package/dist-server/domain/knowledge/knowledge.module.js +1 -21
  370. package/dist-server/domain/knowledge/knowledge.service.js +1 -538
  371. package/dist-server/domain/market/__fixtures__/build-fixture.js +1 -0
  372. package/dist-server/domain/market/__fixtures__/marketplace-anonymous-install.contract.js +1 -0
  373. package/dist-server/domain/market/dto/add-registry.dto.js +1 -32
  374. package/dist-server/domain/market/dto/install-apply.dto.js +1 -0
  375. package/dist-server/domain/market/dto/install-cancel.dto.js +1 -0
  376. package/dist-server/domain/market/dto/install-market.dto.js +1 -30
  377. package/dist-server/domain/market/dto/install-plan.dto.js +1 -0
  378. package/dist-server/domain/market/dto/invite-accept.dto.js +1 -0
  379. package/dist-server/domain/market/dto/publish-plan.dto.js +1 -0
  380. package/dist-server/domain/market/dto/publish-run.dto.js +1 -0
  381. package/dist-server/domain/market/dto/publisher-funnel.dto.js +1 -0
  382. package/dist-server/domain/market/dto/publisher-invite.dto.js +1 -0
  383. package/dist-server/domain/market/dto/publisher-sharing-recipient.dto.js +1 -0
  384. package/dist-server/domain/market/dto/shr-response.dto.js +1 -0
  385. package/dist-server/domain/market/first-run-event.listener.js +1 -0
  386. package/dist-server/domain/market/install-error.exception-filter.js +1 -0
  387. package/dist-server/domain/market/install-id.validation.js +1 -0
  388. package/dist-server/domain/market/install-plan-expired.exception-filter.js +1 -0
  389. package/dist-server/domain/market/install.service.js +1 -0
  390. package/dist-server/domain/market/market.controller.js +1 -163
  391. package/dist-server/domain/market/market.module.js +1 -22
  392. package/dist-server/domain/market/market.service.js +3 -1447
  393. package/dist-server/domain/market/marketplace-api.client.js +1 -0
  394. package/dist-server/domain/market/marketplace-target.js +1 -0
  395. package/dist-server/domain/market/publish.controller.js +1 -0
  396. package/dist-server/domain/market/publish.service.js +1 -0
  397. package/dist-server/domain/market/publisher-invite-labels-ledger.service.js +2 -0
  398. package/dist-server/domain/market/publisher-invite.service.js +1 -0
  399. package/dist-server/domain/market/publisher-sharing-recipient.controller.js +1 -0
  400. package/dist-server/domain/market/publisher-sharing-recipient.exception-filter.js +1 -0
  401. package/dist-server/domain/market/publisher-sharing-recipient.service.js +1 -0
  402. package/dist-server/domain/market/publisher-sharing-usage.js +1 -0
  403. package/dist-server/domain/market/sharing-event.client.js +1 -0
  404. package/dist-server/domain/market/sharing-installs-ledger.service.js +1 -0
  405. package/dist-server/domain/market/sharing-updates.service.js +1 -0
  406. package/dist-server/domain/market/source-coordinate.js +1 -0
  407. package/dist-server/domain/market/template-installer.js +2 -0
  408. package/dist-server/domain/mcp/app-debug-log.js +4 -0
  409. package/dist-server/domain/mcp/browser-session.store.js +5 -297
  410. package/dist-server/domain/mcp/chromex-blacklist.js +1 -26
  411. package/dist-server/domain/mcp/chromex-negotiate.controller.js +1 -77
  412. package/dist-server/domain/mcp/chromex-negotiate.dto.js +1 -95
  413. package/dist-server/domain/mcp/chromex-negotiate.service.js +3 -237
  414. package/dist-server/domain/mcp/crewx-tool.factory.js +1 -119
  415. package/dist-server/domain/mcp/default-apps/shared.js +1 -0
  416. package/dist-server/domain/mcp/dto/open-mcp-app.dto.js +1 -0
  417. package/dist-server/domain/mcp/html-viewer.controller.js +1 -0
  418. package/dist-server/domain/mcp/html-viewer.service.js +1 -0
  419. package/dist-server/domain/mcp/mcp-app-actions.js +1 -0
  420. package/dist-server/domain/mcp/mcp-app-assets.js +1 -0
  421. package/dist-server/domain/mcp/mcp-app-prompt-context.js +1 -0
  422. package/dist-server/domain/mcp/mcp-app-resource-csp.interceptor.js +1 -0
  423. package/dist-server/domain/mcp/mcp-app-runtime.controller.js +1 -0
  424. package/dist-server/domain/mcp/mcp-app-runtime.service.js +1 -0
  425. package/dist-server/domain/mcp/mcp-app-sandbox.service.js +2 -0
  426. package/dist-server/domain/mcp/mcp-app-workspace-asset-catalog-resolver.js +1 -0
  427. package/dist-server/domain/mcp/mcp-apps.js +1 -0
  428. package/dist-server/domain/mcp/mcp-auth.guard.js +1 -75
  429. package/dist-server/domain/mcp/mcp.constants.js +1 -7
  430. package/dist-server/domain/mcp/mcp.controller.js +1 -126
  431. package/dist-server/domain/mcp/mcp.dto.js +1 -12
  432. package/dist-server/domain/mcp/mcp.module.js +1 -53
  433. package/dist-server/domain/mcp/mcp.service.js +1 -741
  434. package/dist-server/domain/mcp/product-app-bundle-assets.js +1 -0
  435. package/dist-server/domain/mcp/skill-backend.port.js +1 -0
  436. package/dist-server/domain/mcp/tool-router.service.js +1 -120
  437. package/dist-server/domain/mcp/ui-content-channel.service.js +1 -0
  438. package/dist-server/domain/message/dto/list-messages.dto.js +1 -57
  439. package/dist-server/domain/message/dto/send-message.dto.js +1 -133
  440. package/dist-server/domain/message/message.controller.js +1 -113
  441. package/dist-server/domain/message/message.module.js +1 -26
  442. package/dist-server/domain/message/message.multipart.js +1 -0
  443. package/dist-server/domain/message/message.service.js +9 -292
  444. package/dist-server/domain/notification/dto/create-notification.dto.js +1 -0
  445. package/dist-server/domain/notification/dto/list-notifications.dto.js +1 -0
  446. package/dist-server/domain/notification/notification.controller.js +1 -0
  447. package/dist-server/domain/notification/notification.module.js +1 -0
  448. package/dist-server/domain/notification/notification.service.js +1 -0
  449. package/dist-server/domain/onboarding/onboarding.controller.js +1 -97
  450. package/dist-server/domain/onboarding/onboarding.module.js +1 -23
  451. package/dist-server/domain/onboarding/onboarding.service.js +1 -106
  452. package/dist-server/domain/onboarding/onboarding.types.js +1 -2
  453. package/dist-server/domain/onboarding/presets/custom.js +1 -10
  454. package/dist-server/domain/onboarding/presets/dev-team.js +1 -41
  455. package/dist-server/domain/onboarding/presets/index.js +1 -15
  456. package/dist-server/domain/onboarding/presets/marketing-team.js +1 -29
  457. package/dist-server/domain/onboarding/presets/planning-team.js +1 -29
  458. package/dist-server/domain/onboarding/presets/solo.js +1 -17
  459. package/dist-server/domain/planner/dto/planner.dto.js +1 -58
  460. package/dist-server/domain/planner/planner.controller.js +1 -74
  461. package/dist-server/domain/planner/planner.module.js +1 -22
  462. package/dist-server/domain/planner/planner.service.js +1 -272
  463. package/dist-server/domain/project/dto/create-project-ledger.dto.js +1 -0
  464. package/dist-server/domain/project/dto/create-project.dto.js +1 -46
  465. package/dist-server/domain/project/dto/update-project.dto.js +1 -60
  466. package/dist-server/domain/project/project-ledger.controller.js +1 -0
  467. package/dist-server/domain/project/project-ledger.service.js +1 -0
  468. package/dist-server/domain/project/project.controller.js +1 -129
  469. package/dist-server/domain/project/project.module.js +1 -22
  470. package/dist-server/domain/project/project.service.js +1 -173
  471. package/dist-server/domain/settings/local-ai-server/local-ai-server.controller.js +1 -0
  472. package/dist-server/domain/settings/local-ai-server/local-ai-server.dto.js +1 -0
  473. package/dist-server/domain/settings/local-ai-server/local-ai-server.network-policy.js +1 -0
  474. package/dist-server/domain/settings/local-ai-server/local-ai-server.service.js +1 -0
  475. package/dist-server/domain/settings/local-ai-server/local-ai-server.types.js +1 -0
  476. package/dist-server/domain/settings/request-log-maintenance.js +1 -0
  477. package/dist-server/domain/settings/request-log-maintenance.service.js +1 -0
  478. package/dist-server/domain/settings/request-log-maintenance.worker.js +1 -0
  479. package/dist-server/domain/settings/request-log-prune.js +40 -0
  480. package/dist-server/domain/settings/request-log-rollup.js +31 -0
  481. package/dist-server/domain/settings/request-log-store.js +11 -0
  482. package/dist-server/domain/settings/request-logs.controller.js +1 -0
  483. package/dist-server/domain/settings/request-logs.service.js +15 -0
  484. package/dist-server/domain/settings/request-logs.types.js +1 -0
  485. package/dist-server/domain/settings/settings.controller.js +1 -52
  486. package/dist-server/domain/settings/settings.module.js +1 -24
  487. package/dist-server/domain/settings/settings.service.js +1 -221
  488. package/dist-server/domain/settings/storage-retention.js +52 -0
  489. package/dist-server/domain/settings/storage-retention.worker.js +21 -0
  490. package/dist-server/domain/settings/storage.controller.js +1 -0
  491. package/dist-server/domain/settings/storage.service.js +1 -0
  492. package/dist-server/domain/settings/storage.types.js +1 -0
  493. package/dist-server/domain/system/desktop-control.guard.js +1 -0
  494. package/dist-server/domain/system/shortcut.service.js +1 -0
  495. package/dist-server/domain/system/shortcut.types.js +1 -0
  496. package/dist-server/domain/system/shutdown.dto.js +1 -0
  497. package/dist-server/domain/system/system.controller.js +5 -41
  498. package/dist-server/domain/system/system.module.js +1 -19
  499. package/dist-server/domain/system/system.service.js +1 -0
  500. package/dist-server/domain/system/task-ownership.js +1 -0
  501. package/dist-server/domain/system/update-gate.service.js +1 -0
  502. package/dist-server/domain/task/child-task-projection.js +1 -0
  503. package/dist-server/domain/task/dto/all-tasks.dto.js +1 -55
  504. package/dist-server/domain/task/dto/descendants.dto.js +1 -0
  505. package/dist-server/domain/task/dto/list-tasks.dto.js +1 -69
  506. package/dist-server/domain/task/dto/search-tasks.dto.js +1 -66
  507. package/dist-server/domain/task/dto/send-message.dto.js +1 -41
  508. package/dist-server/domain/task/dto/task-prompt.dto.js +1 -0
  509. package/dist-server/domain/task/dto/task-rating.dto.js +1 -0
  510. package/dist-server/domain/task/dto/task-status.dto.js +1 -34
  511. package/dist-server/domain/task/dto/workspace-usage.dto.js +1 -38
  512. package/dist-server/domain/task/prompt-composition.js +1 -0
  513. package/dist-server/domain/task/task-execution-path.js +1 -0
  514. package/dist-server/domain/task/task.constants.js +1 -12
  515. package/dist-server/domain/task/task.controller.js +1 -184
  516. package/dist-server/domain/task/task.module.js +1 -23
  517. package/dist-server/domain/task/task.service.js +3 -1082
  518. package/dist-server/domain/terminal/terminal-access-policy.js +1 -0
  519. package/dist-server/domain/terminal/terminal-audit.service.js +25 -0
  520. package/dist-server/domain/terminal/terminal-csp.js +1 -0
  521. package/dist-server/domain/terminal/terminal-local-only.guard.js +1 -0
  522. package/dist-server/domain/terminal/terminal-session.service.js +1 -0
  523. package/dist-server/domain/terminal/terminal-ticket.service.js +1 -0
  524. package/dist-server/domain/terminal/terminal-ws.service.js +1 -0
  525. package/dist-server/domain/terminal/terminal.controller.js +1 -0
  526. package/dist-server/domain/terminal/terminal.module.js +1 -0
  527. package/dist-server/domain/thread/dto/build-context.dto.js +1 -42
  528. package/dist-server/domain/thread/dto/highlight.dto.js +1 -0
  529. package/dist-server/domain/thread/dto/list-messages.dto.js +1 -49
  530. package/dist-server/domain/thread/dto/list-threads.dto.js +1 -70
  531. package/dist-server/domain/thread/dto/reorder-pins.dto.js +1 -22
  532. package/dist-server/domain/thread/dto/search-threads.dto.js +1 -13
  533. package/dist-server/domain/thread/dto/thread-label.dto.js +1 -0
  534. package/dist-server/domain/thread/dto/timeline-query.dto.js +1 -0
  535. package/dist-server/domain/thread/dto/update-thread.dto.js +1 -23
  536. package/dist-server/domain/thread/overdrive.types.js +1 -38
  537. package/dist-server/domain/thread/thread-highlight-flight.service.js +1 -0
  538. package/dist-server/domain/thread/thread-highlight-regeneration.service.js +1 -0
  539. package/dist-server/domain/thread/thread-highlight-trigger.service.js +1 -0
  540. package/dist-server/domain/thread/thread-highlight.constants.js +1 -0
  541. package/dist-server/domain/thread/thread-label.controller.js +1 -0
  542. package/dist-server/domain/thread/thread-label.service.js +1 -0
  543. package/dist-server/domain/thread/thread-preview.controller.js +1 -0
  544. package/dist-server/domain/thread/thread-title.backfill.js +1 -0
  545. package/dist-server/domain/thread/thread-title.types.js +1 -0
  546. package/dist-server/domain/thread/thread.controller.js +1 -190
  547. package/dist-server/domain/thread/thread.module.js +1 -25
  548. package/dist-server/domain/thread/thread.service.js +6 -707
  549. package/dist-server/domain/token/token.controller.js +1 -73
  550. package/dist-server/domain/token/token.dto.js +1 -56
  551. package/dist-server/domain/token/token.module.js +1 -22
  552. package/dist-server/domain/token/token.service.js +3 -235
  553. package/dist-server/domain/usage/codex-rate-limits.client.js +2 -0
  554. package/dist-server/domain/usage/usage.controller.js +1 -186
  555. package/dist-server/domain/usage/usage.module.js +1 -22
  556. package/dist-server/domain/usage/usage.service.js +1 -952
  557. package/dist-server/domain/usage/usage.types.js +1 -4
  558. package/dist-server/domain/usage-report/dto/usage-report.dto.js +1 -2
  559. package/dist-server/domain/usage-report/report-findings.js +1 -0
  560. package/dist-server/domain/usage-report/usage-report.controller.js +1 -72
  561. package/dist-server/domain/usage-report/usage-report.module.js +1 -23
  562. package/dist-server/domain/usage-report/usage-report.service.js +1 -135
  563. package/dist-server/domain/wbs/wbs.controller.js +1 -51
  564. package/dist-server/domain/wbs/wbs.module.js +1 -21
  565. package/dist-server/domain/wbs/wbs.service.js +1 -94
  566. package/dist-server/domain/wi/dto/create-wi.dto.js +1 -0
  567. package/dist-server/domain/wi/dto/update-wi-status.dto.js +1 -0
  568. package/dist-server/domain/wi/wi.controller.js +1 -70
  569. package/dist-server/domain/wi/wi.module.js +1 -22
  570. package/dist-server/domain/wi/wi.service.js +2 -280
  571. package/dist-server/domain/wi/wi.types.js +1 -2
  572. package/dist-server/domain/workflow/chat-card-proof.service.js +1 -83
  573. package/dist-server/domain/workflow/dto/thread-app-launch.dto.js +1 -0
  574. package/dist-server/domain/workflow/thread-app-launch.controller.js +1 -0
  575. package/dist-server/domain/workflow/ui-instance.controller.js +1 -0
  576. package/dist-server/domain/workflow/workflow-approval-v2.js +1 -0
  577. package/dist-server/domain/workflow/workflow.controller.js +1 -149
  578. package/dist-server/domain/workflow/workflow.module.js +1 -22
  579. package/dist-server/domain/workflow/workflow.service.js +3 -782
  580. package/dist-server/domain/workspace/dto/create-workspace.dto.js +1 -45
  581. package/dist-server/domain/workspace/dto/rename-workspace.dto.js +1 -0
  582. package/dist-server/domain/workspace/dto/switch-workspace.dto.js +1 -32
  583. package/dist-server/domain/workspace/dto/workspace-info.dto.js +1 -2
  584. package/dist-server/domain/workspace/workspace.controller.js +1 -98
  585. package/dist-server/domain/workspace/workspace.module.js +1 -22
  586. package/dist-server/domain/workspace/workspace.service.js +1 -201
  587. package/dist-server/main.js +1 -231
  588. package/dist-server/modules/crewx-pool.service.js +1 -340
  589. package/dist-server/modules/crewx.module.js +1 -53
  590. package/dist-server/modules/workspace-config.store.js +1 -0
  591. package/dist-server/repository/agent-suggestion.repository.js +1 -0
  592. package/dist-server/repository/base-sqlite.repository.js +1 -18
  593. package/dist-server/repository/box.repository.js +1 -99
  594. package/dist-server/repository/message.repository.js +1 -22
  595. package/dist-server/repository/notification.repository.js +1 -0
  596. package/dist-server/repository/project.repository.js +1 -51
  597. package/dist-server/repository/repository.module.js +1 -38
  598. package/dist-server/repository/request-log.repository.js +2 -87
  599. package/dist-server/repository/task.repository.js +11 -376
  600. package/dist-server/repository/thread-label.repository.js +1 -0
  601. package/dist-server/repository/thread.repository.js +110 -189
  602. package/dist-server/repository/usage-limit-snapshot.repository.js +1 -24
  603. package/dist-server/repository/usage-report.repository.js +1 -27
  604. package/dist-server/shared/attachment-path.js +1 -0
  605. package/dist-server/shared/attachment-policy.js +1 -0
  606. package/dist-server/shared/crewx-home.js +1 -58
  607. package/dist-server/shared/crewx-state.js +1 -66
  608. package/dist-server/shared/doc-heading.js +1 -0
  609. package/dist-server/shared/marketplace-api.constants.js +1 -0
  610. package/dist-server/shared/thread-label.js +1 -0
  611. package/dist-server/shared/workflow-run.contract.js +1 -0
  612. package/dist-server/test-utils/compat-database.js +1 -30
  613. package/dist-server/test-utils/request-log-fixtures.js +35 -0
  614. package/dist-server/utils/tokenizer.js +1 -8
  615. package/examples/mcp-apps/dist/sandbox/sandbox.html +30 -0
  616. package/examples/mcp-apps/dist/workflow/workflow-card.html +161 -0
  617. package/package.json +201 -34
  618. package/packages/cli/dist/bootstrap/codex-writable-roots.d.ts +20 -1
  619. package/packages/cli/dist/bootstrap/codex-writable-roots.js +1 -88
  620. package/packages/cli/dist/bootstrap/crewx-cli.js +1 -63
  621. package/packages/cli/dist/builtin.d.ts +1 -1
  622. package/packages/cli/dist/builtin.js +5 -127
  623. package/packages/cli/dist/commands/agent.js +4 -224
  624. package/packages/cli/dist/commands/cal.d.ts +15 -0
  625. package/packages/cli/dist/commands/cal.js +2 -0
  626. package/packages/cli/dist/commands/db.d.ts +3 -0
  627. package/packages/cli/dist/commands/db.js +59 -125
  628. package/packages/cli/dist/commands/detached.d.ts +95 -0
  629. package/packages/cli/dist/commands/detached.js +15 -0
  630. package/packages/cli/dist/commands/doctor.d.ts +77 -0
  631. package/packages/cli/dist/commands/doctor.js +4 -196
  632. package/packages/cli/dist/commands/emit-trailer.d.ts +25 -0
  633. package/packages/cli/dist/commands/emit-trailer.js +2 -0
  634. package/packages/cli/dist/commands/execute.d.ts +8 -4
  635. package/packages/cli/dist/commands/execute.js +15 -146
  636. package/packages/cli/dist/commands/hook/command-marker.d.ts +2 -0
  637. package/packages/cli/dist/commands/hook/command-marker.js +1 -0
  638. package/packages/cli/dist/commands/hook/install.d.ts +0 -1
  639. package/packages/cli/dist/commands/hook/install.js +8 -175
  640. package/packages/cli/dist/commands/hook/paths.js +1 -94
  641. package/packages/cli/dist/commands/hook/status.js +1 -86
  642. package/packages/cli/dist/commands/hook/uninstall.js +1 -71
  643. package/packages/cli/dist/commands/hook-dispatch.js +2 -180
  644. package/packages/cli/dist/commands/init.d.ts +34 -0
  645. package/packages/cli/dist/commands/init.js +37 -370
  646. package/packages/cli/dist/commands/kill.d.ts +2 -8
  647. package/packages/cli/dist/commands/kill.js +1 -52
  648. package/packages/cli/dist/commands/log.js +3 -95
  649. package/packages/cli/dist/commands/parse-agent-message.js +1 -52
  650. package/packages/cli/dist/commands/parse-common-flags.d.ts +5 -1
  651. package/packages/cli/dist/commands/parse-common-flags.js +3 -181
  652. package/packages/cli/dist/commands/ps.d.ts +2 -2
  653. package/packages/cli/dist/commands/ps.js +2 -107
  654. package/packages/cli/dist/commands/publish.d.ts +1 -0
  655. package/packages/cli/dist/commands/publish.js +27 -0
  656. package/packages/cli/dist/commands/query.d.ts +7 -2
  657. package/packages/cli/dist/commands/query.js +16 -146
  658. package/packages/cli/dist/commands/registry.js +1 -31
  659. package/packages/cli/dist/commands/resolve-prompt.js +3 -54
  660. package/packages/cli/dist/commands/resolve-recipient.d.ts +14 -0
  661. package/packages/cli/dist/commands/resolve-recipient.js +3 -0
  662. package/packages/cli/dist/commands/restart.d.ts +3 -1
  663. package/packages/cli/dist/commands/restart.js +18 -162
  664. package/packages/cli/dist/commands/result.d.ts +8 -3
  665. package/packages/cli/dist/commands/result.js +1 -70
  666. package/packages/cli/dist/commands/shortcut.d.ts +1 -0
  667. package/packages/cli/dist/commands/shortcut.js +18 -0
  668. package/packages/cli/dist/commands/slack.js +16 -559
  669. package/packages/cli/dist/commands/stop.d.ts +8 -0
  670. package/packages/cli/dist/commands/stop.js +8 -0
  671. package/packages/cli/dist/commands/write-output.js +1 -24
  672. package/packages/cli/dist/index.d.ts +1 -1
  673. package/packages/cli/dist/index.js +1 -5
  674. package/packages/cli/dist/logging.d.ts +1 -1
  675. package/packages/cli/dist/logging.js +10 -86
  676. package/packages/cli/dist/main.d.ts +3 -2
  677. package/packages/cli/dist/main.js +44 -253
  678. package/packages/cli/dist/register-builtin-tools.js +1 -9
  679. package/packages/cli/dist/slack/file-download.js +1 -134
  680. package/packages/cli/dist/slack/markdown.js +1 -33
  681. package/packages/cli/dist/utils/env-defaults.d.ts +2 -5
  682. package/packages/cli/dist/utils/env-defaults.js +1 -10
  683. package/packages/cli/dist/utils/inherited-trace.d.ts +24 -0
  684. package/packages/cli/dist/utils/inherited-trace.js +1 -25
  685. package/packages/cli/dist/utils/product-package-root.d.ts +6 -0
  686. package/packages/cli/dist/utils/product-package-root.js +1 -0
  687. package/packages/cli/dist/utils/sdk-compat.d.ts +24 -0
  688. package/packages/cli/dist/utils/sdk-compat.js +1 -0
  689. package/packages/cli/dist/utils/version.js +1 -28
  690. package/packages/cli/package.json +7 -2
  691. package/server.js +2 -106
  692. package/dist/assets/MarketPage-BgAWacd7.js +0 -41
  693. package/dist/assets/PromptTab-LML0dhnv.js +0 -27
  694. package/dist/assets/arc-BBMQPf9Z.js +0 -1
  695. package/dist/assets/architectureDiagram-UYN6MBPD-Uinv3ruS.js +0 -36
  696. package/dist/assets/blockDiagram-ZHA2E4KO-CM8iVhUy.js +0 -121
  697. package/dist/assets/c4Diagram-6F5ED5ID-D6HM4dEk.js +0 -10
  698. package/dist/assets/channel-cs9O3fiH.js +0 -1
  699. package/dist/assets/chunk-5HRBRIJM-CsiffIEz.js +0 -1
  700. package/dist/assets/chunk-7U56Z5CX-kgH95T9a.js +0 -220
  701. package/dist/assets/chunk-ASOPGD6M-dKFyf37d.js +0 -1
  702. package/dist/assets/chunk-T2TOU4HS-DMk7ilyN.js +0 -164
  703. package/dist/assets/classDiagram-LNE6IOMH-veS4tD2p.js +0 -1
  704. package/dist/assets/classDiagram-v2-MQ7JQ4JX-veS4tD2p.js +0 -1
  705. package/dist/assets/cytoscape.esm-BiciSPf8.js +0 -331
  706. package/dist/assets/dagre-4EVJKHTY-DKMJYrr5.js +0 -4
  707. package/dist/assets/diagram-QW4FP2JN-BNyGnAGw.js +0 -24
  708. package/dist/assets/erDiagram-6RL3IURR-qo27Uk30.js +0 -51
  709. package/dist/assets/flowDiagram-7ASYPVHJ-BudDObQU.js +0 -160
  710. package/dist/assets/ganttDiagram-NTVNEXSI-DCFf5efZ.js +0 -257
  711. package/dist/assets/gitGraph-YCYPL57B-Cv8vXWsN.js +0 -133
  712. package/dist/assets/gitGraphDiagram-NRZ2UAAF-DJUV3_64.js +0 -65
  713. package/dist/assets/graph-BlwPajkw.js +0 -1
  714. package/dist/assets/infoDiagram-A4XQUW5V-BlzLOJuh.js +0 -2
  715. package/dist/assets/journeyDiagram-G5WM74LC-BoBDY7uv.js +0 -139
  716. package/dist/assets/katex-DkKDou_j.js +0 -257
  717. package/dist/assets/layout-Bvwu4dCi.js +0 -1
  718. package/dist/assets/linear-CoIZ0x19.js +0 -1
  719. package/dist/assets/main-BOcmSxv5.css +0 -10
  720. package/dist/assets/main-CZQslZK1.js +0 -1526
  721. package/dist/assets/mindmap-definition-GWI6TPTV-B4T62xYW.js +0 -95
  722. package/dist/assets/pieDiagram-YF2LJOPJ-C570Jl7r.js +0 -30
  723. package/dist/assets/quadrantDiagram-OS5C2QUG-D9kamKQz.js +0 -7
  724. package/dist/assets/requirementDiagram-MIRIMTAZ-CbI9--NI.js +0 -52
  725. package/dist/assets/sankeyDiagram-Y46BX6SQ-5AYnNxm5.js +0 -8
  726. package/dist/assets/sequenceDiagram-G6AWOVSC-awwP3H4O.js +0 -122
  727. package/dist/assets/stateDiagram-MAYHULR4-DsTGBCid.js +0 -1
  728. package/dist/assets/stateDiagram-v2-4JROLMXI-B8Exp_99.js +0 -1
  729. package/dist/assets/timeline-definition-U7ZMHBDA-Dur75zzR.js +0 -61
  730. package/dist/assets/xychartDiagram-6QU3TZC5-zevo9T1B.js +0 -7
  731. package/dist-electron/main.js +0 -194
  732. package/dist-electron/overlay.js +0 -129
  733. package/dist-electron/package.json +0 -1
  734. 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");