@linzumi/cli 0.0.50-beta → 0.0.51-beta

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 (3) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +118 -95
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -62,7 +62,7 @@ Install the CLI or run it with `npx`:
62
62
  ```bash
63
63
  npm install -g @linzumi/cli@latest
64
64
  npx -y @linzumi/cli@latest signup
65
- npx -y @linzumi/cli@0.0.50-beta --version
65
+ npx -y @linzumi/cli@0.0.51-beta --version
66
66
  linzumi --version
67
67
  ```
68
68
 
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ var __toESM = (mod, isNodeMode, target) => {
18
18
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
19
19
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
20
20
 
21
- // ../../node_modules/.bun/yoctocolors-cjs@2.1.3/node_modules/yoctocolors-cjs/index.js
21
+ // ../../node_modules/yoctocolors-cjs/index.js
22
22
  var require_yoctocolors_cjs = __commonJS((exports, module) => {
23
23
  var tty = __require("node:tty");
24
24
  var hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;
@@ -92,7 +92,7 @@ var require_yoctocolors_cjs = __commonJS((exports, module) => {
92
92
  module.exports = colors;
93
93
  });
94
94
 
95
- // ../../node_modules/.bun/cli-width@4.1.0/node_modules/cli-width/index.js
95
+ // ../../node_modules/cli-width/index.js
96
96
  var require_cli_width = __commonJS((exports, module) => {
97
97
  module.exports = cliWidth;
98
98
  function normalizeOpts(options) {
@@ -132,7 +132,7 @@ var require_cli_width = __commonJS((exports, module) => {
132
132
  }
133
133
  });
134
134
 
135
- // ../../node_modules/.bun/ansi-regex@5.0.1/node_modules/ansi-regex/index.js
135
+ // ../../node_modules/ansi-regex/index.js
136
136
  var require_ansi_regex = __commonJS((exports, module) => {
137
137
  module.exports = ({ onlyFirst = false } = {}) => {
138
138
  const pattern = [
@@ -143,13 +143,13 @@ var require_ansi_regex = __commonJS((exports, module) => {
143
143
  };
144
144
  });
145
145
 
146
- // ../../node_modules/.bun/strip-ansi@6.0.1/node_modules/strip-ansi/index.js
146
+ // ../../node_modules/strip-ansi/index.js
147
147
  var require_strip_ansi = __commonJS((exports, module) => {
148
148
  var ansiRegex = require_ansi_regex();
149
149
  module.exports = (string) => typeof string === "string" ? string.replace(ansiRegex(), "") : string;
150
150
  });
151
151
 
152
- // ../../node_modules/.bun/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js
152
+ // ../../node_modules/string-width/node_modules/is-fullwidth-code-point/index.js
153
153
  var require_is_fullwidth_code_point = __commonJS((exports, module) => {
154
154
  var isFullwidthCodePoint = (codePoint) => {
155
155
  if (Number.isNaN(codePoint)) {
@@ -164,14 +164,14 @@ var require_is_fullwidth_code_point = __commonJS((exports, module) => {
164
164
  module.exports.default = isFullwidthCodePoint;
165
165
  });
166
166
 
167
- // ../../node_modules/.bun/emoji-regex@8.0.0/node_modules/emoji-regex/index.js
167
+ // ../../node_modules/string-width/node_modules/emoji-regex/index.js
168
168
  var require_emoji_regex = __commonJS((exports, module) => {
169
169
  module.exports = function() {
170
170
  return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
171
171
  };
172
172
  });
173
173
 
174
- // ../../node_modules/.bun/string-width@4.2.3/node_modules/string-width/index.js
174
+ // ../../node_modules/string-width/index.js
175
175
  var require_string_width = __commonJS((exports, module) => {
176
176
  var stripAnsi = require_strip_ansi();
177
177
  var isFullwidthCodePoint = require_is_fullwidth_code_point();
@@ -205,7 +205,7 @@ var require_string_width = __commonJS((exports, module) => {
205
205
  module.exports.default = stringWidth;
206
206
  });
207
207
 
208
- // ../../node_modules/.bun/color-name@1.1.4/node_modules/color-name/index.js
208
+ // ../../node_modules/color-name/index.js
209
209
  var require_color_name = __commonJS((exports, module) => {
210
210
  module.exports = {
211
211
  aliceblue: [240, 248, 255],
@@ -359,7 +359,7 @@ var require_color_name = __commonJS((exports, module) => {
359
359
  };
360
360
  });
361
361
 
362
- // ../../node_modules/.bun/color-convert@2.0.1/node_modules/color-convert/conversions.js
362
+ // ../../node_modules/color-convert/conversions.js
363
363
  var require_conversions = __commonJS((exports, module) => {
364
364
  var cssKeywords = require_color_name();
365
365
  var reverseKeywords = {};
@@ -1028,7 +1028,7 @@ var require_conversions = __commonJS((exports, module) => {
1028
1028
  };
1029
1029
  });
1030
1030
 
1031
- // ../../node_modules/.bun/color-convert@2.0.1/node_modules/color-convert/route.js
1031
+ // ../../node_modules/color-convert/route.js
1032
1032
  var require_route = __commonJS((exports, module) => {
1033
1033
  var conversions = require_conversions();
1034
1034
  function buildGraph() {
@@ -1094,7 +1094,7 @@ var require_route = __commonJS((exports, module) => {
1094
1094
  };
1095
1095
  });
1096
1096
 
1097
- // ../../node_modules/.bun/color-convert@2.0.1/node_modules/color-convert/index.js
1097
+ // ../../node_modules/color-convert/index.js
1098
1098
  var require_color_convert = __commonJS((exports, module) => {
1099
1099
  var conversions = require_conversions();
1100
1100
  var route = require_route();
@@ -1153,7 +1153,7 @@ var require_color_convert = __commonJS((exports, module) => {
1153
1153
  module.exports = convert;
1154
1154
  });
1155
1155
 
1156
- // ../../node_modules/.bun/ansi-styles@4.3.0/node_modules/ansi-styles/index.js
1156
+ // ../../node_modules/ansi-styles/index.js
1157
1157
  var require_ansi_styles = __commonJS((exports, module) => {
1158
1158
  var wrapAnsi16 = (fn, offset) => (...args) => {
1159
1159
  const code = fn(...args);
@@ -1289,7 +1289,7 @@ var require_ansi_styles = __commonJS((exports, module) => {
1289
1289
  });
1290
1290
  });
1291
1291
 
1292
- // ../../node_modules/.bun/wrap-ansi@6.2.0/node_modules/wrap-ansi/index.js
1292
+ // ../../node_modules/@inquirer/core/node_modules/wrap-ansi/index.js
1293
1293
  var require_wrap_ansi = __commonJS((exports, module) => {
1294
1294
  var stringWidth = require_string_width();
1295
1295
  var stripAnsi = require_strip_ansi();
@@ -1425,7 +1425,7 @@ var require_wrap_ansi = __commonJS((exports, module) => {
1425
1425
  };
1426
1426
  });
1427
1427
 
1428
- // ../../node_modules/.bun/mute-stream@2.0.0/node_modules/mute-stream/lib/index.js
1428
+ // ../../node_modules/mute-stream/lib/index.js
1429
1429
  var require_lib = __commonJS((exports, module) => {
1430
1430
  var Stream = __require("stream");
1431
1431
 
@@ -10152,7 +10152,7 @@ function realpathOrResolved(pathValue) {
10152
10152
  }
10153
10153
 
10154
10154
  // src/version.ts
10155
- var linzumiCliVersion = "0.0.50-beta";
10155
+ var linzumiCliVersion = "0.0.51-beta";
10156
10156
  var linzumiCliVersionText = `linzumi ${linzumiCliVersion}`;
10157
10157
 
10158
10158
  // src/runnerLock.ts
@@ -11364,6 +11364,7 @@ async function discoverCodexThreads(codex, cwd) {
11364
11364
  preview: stringValue(thread.preview) ?? "",
11365
11365
  cwd: stringValue(thread.cwd) ?? "",
11366
11366
  source: stringValue(thread.source) ?? "",
11367
+ createdAt: integerValue(thread.createdAt) ?? stringValue(thread.createdAt) ?? null,
11367
11368
  updatedAt: integerValue(thread.updatedAt) ?? null,
11368
11369
  status: objectValue(thread.status) ?? null
11369
11370
  })).filter((thread) => thread.id !== "");
@@ -11747,6 +11748,22 @@ ${args.developerPrompt}
11747
11748
  `;
11748
11749
  const linzumiContext = args.linzumiContext === undefined ? "" : `
11749
11750
  ${formatLinzumiConversationContextForPrompt(args.linzumiContext)}
11751
+ `;
11752
+ const reviewGuidance = `
11753
+ <linzumi_pr_review_guidance>
11754
+ For frontend or other user-visible changes, ask whether the user wants
11755
+ screenshot or screen-recording proof, ideally before/after when that helps
11756
+ review the change. Screen recordings should be WebM or MP4. When the user asks
11757
+ you to open or update a PR, attach or link that proof in the PR when feasible,
11758
+ and state the exact blocker when it is not feasible.
11759
+ </linzumi_pr_review_guidance>
11760
+
11761
+ <linzumi_user_visible_writing_guide>
11762
+ When you write user-visible UI, status, error, or PR-review copy, keep it short,
11763
+ direct, and focused on the user's outcome. Avoid implementation-heavy sentences,
11764
+ stacked clauses, and internal mechanics unless the user explicitly needs that
11765
+ detail.
11766
+ </linzumi_user_visible_writing_guide>
11750
11767
  `;
11751
11768
  return `<context>
11752
11769
  You are a Linzumi Codex session launched by the Linzumi Commander.
@@ -11791,6 +11808,7 @@ GOOD preview command: npm run dev -- --host 0.0.0.0 --port 8787
11791
11808
  BAD preview command: npm run dev -- --host 127.0.0.1
11792
11809
  </examples>
11793
11810
  ${linzumiContext}
11811
+ ${reviewGuidance}
11794
11812
  ${customPrompt}
11795
11813
  <task_reminder>
11796
11814
  You are the Commander-launched Linzumi Codex session. Do the implementation
@@ -13378,7 +13396,7 @@ To kick the agent off:
13378
13396
  3. Paste into the thread. Codex will pick it up and start editing this folder.
13379
13397
  `;
13380
13398
 
13381
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/key.js
13399
+ // ../../node_modules/@inquirer/core/dist/esm/lib/key.js
13382
13400
  var isUpKey = (key, keybindings = []) => key.name === "up" || keybindings.includes("vim") && key.name === "k" || keybindings.includes("emacs") && key.ctrl && key.name === "p";
13383
13401
  var isDownKey = (key, keybindings = []) => key.name === "down" || keybindings.includes("vim") && key.name === "j" || keybindings.includes("emacs") && key.ctrl && key.name === "n";
13384
13402
  var isSpaceKey = (key) => key.name === "space";
@@ -13386,7 +13404,7 @@ var isBackspaceKey = (key) => key.name === "backspace";
13386
13404
  var isTabKey = (key) => key.name === "tab";
13387
13405
  var isNumberKey = (key) => "1234567890".includes(key.name);
13388
13406
  var isEnterKey = (key) => key.name === "enter" || key.name === "return";
13389
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/errors.js
13407
+ // ../../node_modules/@inquirer/core/dist/esm/lib/errors.js
13390
13408
  class AbortPromptError extends Error {
13391
13409
  name = "AbortPromptError";
13392
13410
  message = "Prompt was aborted";
@@ -13412,10 +13430,10 @@ class HookError extends Error {
13412
13430
  class ValidationError extends Error {
13413
13431
  name = "ValidationError";
13414
13432
  }
13415
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/use-state.js
13433
+ // ../../node_modules/@inquirer/core/dist/esm/lib/use-state.js
13416
13434
  import { AsyncResource as AsyncResource2 } from "node:async_hooks";
13417
13435
 
13418
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/hook-engine.js
13436
+ // ../../node_modules/@inquirer/core/dist/esm/lib/hook-engine.js
13419
13437
  import { AsyncLocalStorage, AsyncResource } from "node:async_hooks";
13420
13438
  var hookStorage = new AsyncLocalStorage;
13421
13439
  function createStore(rl) {
@@ -13520,7 +13538,7 @@ var effectScheduler = {
13520
13538
  }
13521
13539
  };
13522
13540
 
13523
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/use-state.js
13541
+ // ../../node_modules/@inquirer/core/dist/esm/lib/use-state.js
13524
13542
  function useState(defaultValue) {
13525
13543
  return withPointer((pointer) => {
13526
13544
  const setState = AsyncResource2.bind(function setState2(newValue) {
@@ -13538,7 +13556,7 @@ function useState(defaultValue) {
13538
13556
  });
13539
13557
  }
13540
13558
 
13541
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/use-effect.js
13559
+ // ../../node_modules/@inquirer/core/dist/esm/lib/use-effect.js
13542
13560
  function useEffect(cb, depArray) {
13543
13561
  withPointer((pointer) => {
13544
13562
  const oldDeps = pointer.get();
@@ -13550,10 +13568,10 @@ function useEffect(cb, depArray) {
13550
13568
  });
13551
13569
  }
13552
13570
 
13553
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/theme.js
13571
+ // ../../node_modules/@inquirer/core/dist/esm/lib/theme.js
13554
13572
  var import_yoctocolors_cjs = __toESM(require_yoctocolors_cjs(), 1);
13555
13573
 
13556
- // ../../node_modules/.bun/@inquirer+figures@1.0.15/node_modules/@inquirer/figures/dist/esm/index.js
13574
+ // ../../node_modules/@inquirer/figures/dist/esm/index.js
13557
13575
  import process2 from "node:process";
13558
13576
  function isUnicodeSupported() {
13559
13577
  if (process2.platform !== "win32") {
@@ -13842,7 +13860,7 @@ var figures = shouldUseMain ? mainSymbols : fallbackSymbols;
13842
13860
  var esm_default = figures;
13843
13861
  var replacements = Object.entries(specialMainSymbols);
13844
13862
 
13845
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/theme.js
13863
+ // ../../node_modules/@inquirer/core/dist/esm/lib/theme.js
13846
13864
  var defaultTheme = {
13847
13865
  prefix: {
13848
13866
  idle: import_yoctocolors_cjs.default.blue("?"),
@@ -13863,7 +13881,7 @@ var defaultTheme = {
13863
13881
  }
13864
13882
  };
13865
13883
 
13866
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/make-theme.js
13884
+ // ../../node_modules/@inquirer/core/dist/esm/lib/make-theme.js
13867
13885
  function isPlainObject(value) {
13868
13886
  if (typeof value !== "object" || value === null)
13869
13887
  return false;
@@ -13891,7 +13909,7 @@ function makeTheme(...themes) {
13891
13909
  return deepMerge(...themesToMerge);
13892
13910
  }
13893
13911
 
13894
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/use-prefix.js
13912
+ // ../../node_modules/@inquirer/core/dist/esm/lib/use-prefix.js
13895
13913
  function usePrefix({ status = "idle", theme }) {
13896
13914
  const [showLoader, setShowLoader] = useState(false);
13897
13915
  const [tick, setTick] = useState(0);
@@ -13921,7 +13939,7 @@ function usePrefix({ status = "idle", theme }) {
13921
13939
  const iconName = status === "loading" ? "idle" : status;
13922
13940
  return typeof prefix === "string" ? prefix : prefix[iconName] ?? prefix["idle"];
13923
13941
  }
13924
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/use-memo.js
13942
+ // ../../node_modules/@inquirer/core/dist/esm/lib/use-memo.js
13925
13943
  function useMemo(fn, dependencies) {
13926
13944
  return withPointer((pointer) => {
13927
13945
  const prev = pointer.get();
@@ -13933,11 +13951,11 @@ function useMemo(fn, dependencies) {
13933
13951
  return prev.value;
13934
13952
  });
13935
13953
  }
13936
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/use-ref.js
13954
+ // ../../node_modules/@inquirer/core/dist/esm/lib/use-ref.js
13937
13955
  function useRef(val) {
13938
13956
  return useState({ current: val })[0];
13939
13957
  }
13940
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/use-keypress.js
13958
+ // ../../node_modules/@inquirer/core/dist/esm/lib/use-keypress.js
13941
13959
  function useKeypress(userHandler) {
13942
13960
  const signal = useRef(userHandler);
13943
13961
  signal.current = userHandler;
@@ -13955,7 +13973,7 @@ function useKeypress(userHandler) {
13955
13973
  };
13956
13974
  }, []);
13957
13975
  }
13958
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/utils.js
13976
+ // ../../node_modules/@inquirer/core/dist/esm/lib/utils.js
13959
13977
  var import_cli_width = __toESM(require_cli_width(), 1);
13960
13978
  var import_wrap_ansi = __toESM(require_wrap_ansi(), 1);
13961
13979
  function breakLines(content, width) {
@@ -13968,7 +13986,7 @@ function readlineWidth() {
13968
13986
  return import_cli_width.default({ defaultWidth: 80, output: readline().output });
13969
13987
  }
13970
13988
 
13971
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/pagination/use-pagination.js
13989
+ // ../../node_modules/@inquirer/core/dist/esm/lib/pagination/use-pagination.js
13972
13990
  function usePointerPosition({ active, renderedItems, pageSize, loop }) {
13973
13991
  const state = useRef({
13974
13992
  lastPointer: active,
@@ -14034,12 +14052,12 @@ function usePagination({ items, active, renderItem, pageSize, loop = true }) {
14034
14052
  return pageBuffer.filter((line) => typeof line === "string").join(`
14035
14053
  `);
14036
14054
  }
14037
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/create-prompt.js
14055
+ // ../../node_modules/@inquirer/core/dist/esm/lib/create-prompt.js
14038
14056
  var import_mute_stream = __toESM(require_lib(), 1);
14039
14057
  import * as readline2 from "node:readline";
14040
14058
  import { AsyncResource as AsyncResource3 } from "node:async_hooks";
14041
14059
 
14042
- // ../../node_modules/.bun/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.js
14060
+ // ../../node_modules/@inquirer/core/node_modules/signal-exit/dist/mjs/signals.js
14043
14061
  var signals = [];
14044
14062
  signals.push("SIGHUP", "SIGINT", "SIGTERM");
14045
14063
  if (process.platform !== "win32") {
@@ -14049,7 +14067,7 @@ if (process.platform === "linux") {
14049
14067
  signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
14050
14068
  }
14051
14069
 
14052
- // ../../node_modules/.bun/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.js
14070
+ // ../../node_modules/@inquirer/core/node_modules/signal-exit/dist/mjs/index.js
14053
14071
  var processOk = (process3) => !!process3 && typeof process3 === "object" && typeof process3.removeListener === "function" && typeof process3.emit === "function" && typeof process3.reallyExit === "function" && typeof process3.listeners === "function" && typeof process3.kill === "function" && typeof process3.pid === "number" && typeof process3.on === "function";
14054
14072
  var kExitEmitter = Symbol.for("signal-exit emitter");
14055
14073
  var global = globalThis;
@@ -14247,10 +14265,10 @@ var {
14247
14265
  unload
14248
14266
  } = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback);
14249
14267
 
14250
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/screen-manager.js
14268
+ // ../../node_modules/@inquirer/core/dist/esm/lib/screen-manager.js
14251
14269
  import { stripVTControlCharacters } from "node:util";
14252
14270
 
14253
- // ../../node_modules/.bun/@inquirer+ansi@1.0.2/node_modules/@inquirer/ansi/dist/esm/index.js
14271
+ // ../../node_modules/@inquirer/ansi/dist/esm/index.js
14254
14272
  var ESC = "\x1B[";
14255
14273
  var cursorLeft = ESC + "G";
14256
14274
  var cursorHide = ESC + "?25l";
@@ -14266,7 +14284,7 @@ var cursorTo = (x, y) => {
14266
14284
  var eraseLine = ESC + "2K";
14267
14285
  var eraseLines = (lines) => lines > 0 ? (eraseLine + cursorUp(1)).repeat(lines - 1) + eraseLine + cursorLeft : "";
14268
14286
 
14269
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/screen-manager.js
14287
+ // ../../node_modules/@inquirer/core/dist/esm/lib/screen-manager.js
14270
14288
  var height = (content) => content.split(`
14271
14289
  `).length;
14272
14290
  var lastLine = (content) => content.split(`
@@ -14331,7 +14349,7 @@ class ScreenManager {
14331
14349
  }
14332
14350
  }
14333
14351
 
14334
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/promise-polyfill.js
14352
+ // ../../node_modules/@inquirer/core/dist/esm/lib/promise-polyfill.js
14335
14353
  class PromisePolyfill extends Promise {
14336
14354
  static withResolver() {
14337
14355
  let resolve8;
@@ -14344,7 +14362,7 @@ class PromisePolyfill extends Promise {
14344
14362
  }
14345
14363
  }
14346
14364
 
14347
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/create-prompt.js
14365
+ // ../../node_modules/@inquirer/core/dist/esm/lib/create-prompt.js
14348
14366
  function getCallSites() {
14349
14367
  const _prepareStackTrace = Error.prepareStackTrace;
14350
14368
  let result = [];
@@ -14430,7 +14448,7 @@ function createPrompt(view) {
14430
14448
  };
14431
14449
  return prompt;
14432
14450
  }
14433
- // ../../node_modules/.bun/@inquirer+core@10.3.2/node_modules/@inquirer/core/dist/esm/lib/Separator.js
14451
+ // ../../node_modules/@inquirer/core/dist/esm/lib/Separator.js
14434
14452
  var import_yoctocolors_cjs2 = __toESM(require_yoctocolors_cjs(), 1);
14435
14453
  class Separator {
14436
14454
  separator = import_yoctocolors_cjs2.default.dim(Array.from({ length: 15 }).join(esm_default.line));
@@ -14444,7 +14462,7 @@ class Separator {
14444
14462
  return Boolean(choice && typeof choice === "object" && "type" in choice && choice.type === "separator");
14445
14463
  }
14446
14464
  }
14447
- // ../../node_modules/.bun/@inquirer+checkbox@4.3.2/node_modules/@inquirer/checkbox/dist/esm/index.js
14465
+ // ../../node_modules/@inquirer/checkbox/dist/esm/index.js
14448
14466
  var import_yoctocolors_cjs3 = __toESM(require_yoctocolors_cjs(), 1);
14449
14467
  var checkboxTheme = {
14450
14468
  icon: {
@@ -14631,7 +14649,7 @@ var esm_default2 = createPrompt((config, done) => {
14631
14649
  `).trimEnd();
14632
14650
  return `${lines}${cursorHide}`;
14633
14651
  });
14634
- // ../../node_modules/.bun/@inquirer+input@4.3.1/node_modules/@inquirer/input/dist/esm/index.js
14652
+ // ../../node_modules/@inquirer/input/dist/esm/index.js
14635
14653
  var inputTheme = {
14636
14654
  validationFailureMode: "keep"
14637
14655
  };
@@ -14715,7 +14733,7 @@ var esm_default3 = createPrompt((config, done) => {
14715
14733
  error
14716
14734
  ];
14717
14735
  });
14718
- // ../../node_modules/.bun/@inquirer+select@4.4.2/node_modules/@inquirer/select/dist/esm/index.js
14736
+ // ../../node_modules/@inquirer/select/dist/esm/index.js
14719
14737
  var import_yoctocolors_cjs4 = __toESM(require_yoctocolors_cjs(), 1);
14720
14738
  var selectTheme = {
14721
14739
  icon: { cursor: esm_default.pointer },
@@ -14882,10 +14900,12 @@ var esm_default4 = createPrompt((config, done) => {
14882
14900
  // src/signupFlow.ts
14883
14901
  import { spawn as spawn7 } from "node:child_process";
14884
14902
  import {
14903
+ closeSync as closeSync2,
14885
14904
  existsSync as existsSync10,
14886
14905
  constants as fsConstants,
14887
14906
  mkdirSync as mkdirSync10,
14888
14907
  mkdtempSync as mkdtempSync3,
14908
+ openSync as openSync3,
14889
14909
  readFileSync as readFileSync10,
14890
14910
  readdirSync,
14891
14911
  rmSync as rmSync3,
@@ -14916,7 +14936,8 @@ function createSignupServerClient(args) {
14916
14936
  method: "POST",
14917
14937
  body: {
14918
14938
  email: request.email,
14919
- mode: request.mode
14939
+ mode: request.mode,
14940
+ selected_tasks: request.selectedTasks ?? []
14920
14941
  },
14921
14942
  render: renderEmailCodeStart
14922
14943
  }),
@@ -15429,7 +15450,8 @@ async function runSignupFlow(deps = {}) {
15429
15450
  state = updateSignupState(state, { currentStep: "code", email });
15430
15451
  const codeRequest = signupServerClient === undefined ? { type: "sent", request: { pendingId: "mock", email } } : await startEmailCodeForSignup(signupServerClient, {
15431
15452
  email,
15432
- mode: "existing_or_create"
15453
+ mode: "existing_or_create",
15454
+ selectedTasks: selectedTaskTitlesFromState(state)
15433
15455
  });
15434
15456
  if (codeRequest.type === "failed") {
15435
15457
  state = updateSignupState(state, {
@@ -15839,7 +15861,7 @@ function signupProgressRows(state) {
15839
15861
  checked: selectedTaskTitlesFromState(state).length > 0
15840
15862
  },
15841
15863
  {
15842
- label: "We'll launch you into Mission Control with your work already running",
15864
+ label: "Mission Control will open with your work already running",
15843
15865
  checked: state.currentStep === "launch"
15844
15866
  }
15845
15867
  ];
@@ -15978,7 +16000,7 @@ function writeLaunchSummary(output, state) {
15978
16000
  writeBoundedLine(output, blue(" npx -y @linzumi/cli@latest signup"));
15979
16001
  return;
15980
16002
  }
15981
- writeBoundedLine(output, blue("7) We'll launch you into Mission Control with your work already running"));
16003
+ writeBoundedLine(output, blue("7) Mission Control will open with your work already running"));
15982
16004
  const taskCount = selectedTaskTitlesFromState(state).length;
15983
16005
  writeBoundedLine(output, muted(` Starting ${taskCount} ${taskCount === 1 ? "task" : "tasks"} and saying hello to the Linzumi team...`));
15984
16006
  state.starterTaskLaunches.forEach((launch) => {
@@ -16054,12 +16076,20 @@ async function defaultSignupCommanderLauncher(args) {
16054
16076
  };
16055
16077
  }
16056
16078
  const logFile = signupCommanderLaunchLogFile(runnerId);
16079
+ let stdoutFd;
16080
+ let stderrFd;
16057
16081
  try {
16058
16082
  mkdirSync10(dirname9(logFile), { recursive: true });
16083
+ stdoutFd = openSync3(logFile, "a");
16084
+ stderrFd = openSync3(logFile, "a");
16059
16085
  const child = spawn7(processExecPath, signupCommanderConnectSpawnArgs(args, runnerId, logFile, scriptPath), {
16060
16086
  detached: true,
16061
- stdio: "ignore"
16087
+ stdio: ["ignore", stdoutFd, stderrFd]
16062
16088
  });
16089
+ closeSync2(stdoutFd);
16090
+ closeSync2(stderrFd);
16091
+ stdoutFd = undefined;
16092
+ stderrFd = undefined;
16063
16093
  child.unref();
16064
16094
  const connected = await waitForSignupCommanderConnection(logFile, 30000);
16065
16095
  if (!connected) {
@@ -16084,6 +16114,9 @@ async function defaultSignupCommanderLauncher(args) {
16084
16114
  restartCommand,
16085
16115
  error: error instanceof Error ? error.message : String(error)
16086
16116
  };
16117
+ } finally {
16118
+ closeFileDescriptor(stdoutFd);
16119
+ closeFileDescriptor(stderrFd);
16087
16120
  }
16088
16121
  }
16089
16122
  async function waitForSignupCommanderConnection(logFile, timeoutMs) {
@@ -16110,6 +16143,14 @@ function readTextFile(path) {
16110
16143
  return;
16111
16144
  }
16112
16145
  }
16146
+ function closeFileDescriptor(fd) {
16147
+ if (fd === undefined) {
16148
+ return;
16149
+ }
16150
+ try {
16151
+ closeSync2(fd);
16152
+ } catch (_error) {}
16153
+ }
16113
16154
  async function waitForSignupCommanderLogChange(logFile, deadline, ready2) {
16114
16155
  const remaining = Math.max(0, deadline - Date.now());
16115
16156
  await new Promise((resolve9) => {
@@ -16169,8 +16210,6 @@ function signupCommanderConnectSpawnArgs(args, runnerId, logFile, scriptPath) {
16169
16210
  args.serviceUrl,
16170
16211
  "--workspace",
16171
16212
  args.workspaceSlug,
16172
- "--channel",
16173
- args.officeChannelSlug,
16174
16213
  "--runner-id",
16175
16214
  runnerId,
16176
16215
  "--log-file",
@@ -17664,9 +17703,9 @@ function renderPreflightRow(check2, spinnerFrame, columns) {
17664
17703
  // src/commanderDaemon.ts
17665
17704
  import {
17666
17705
  existsSync as existsSync11,
17667
- closeSync as closeSync2,
17706
+ closeSync as closeSync3,
17668
17707
  mkdirSync as mkdirSync11,
17669
- openSync as openSync3,
17708
+ openSync as openSync4,
17670
17709
  readFileSync as readFileSync11,
17671
17710
  watch as watch2,
17672
17711
  writeFileSync as writeFileSync9
@@ -17706,8 +17745,8 @@ function startCommanderDaemon(options) {
17706
17745
  ];
17707
17746
  mkdirSync11(statusDir, { recursive: true });
17708
17747
  mkdirSync11(dirname10(logFile), { recursive: true });
17709
- const out = openSync3(logFile, "a");
17710
- const err = openSync3(logFile, "a");
17748
+ const out = openSync4(logFile, "a");
17749
+ const err = openSync4(logFile, "a");
17711
17750
  writeCliAuditEvent("process.spawn", {
17712
17751
  command: nodeBin,
17713
17752
  args: command,
@@ -17726,8 +17765,8 @@ function startCommanderDaemon(options) {
17726
17765
  pid: child.pid,
17727
17766
  purpose: "commander_daemon.start"
17728
17767
  }, { sessionId: options.runnerId });
17729
- closeSync2(out);
17730
- closeSync2(err);
17768
+ closeSync3(out);
17769
+ closeSync3(err);
17731
17770
  child.unref();
17732
17771
  if (child.pid === undefined) {
17733
17772
  throw new Error("commander daemon did not report a pid");
@@ -18600,7 +18639,8 @@ async function parseRunnerArgs(args, deps = {
18600
18639
  `);
18601
18640
  process.exit(0);
18602
18641
  }
18603
- const connectTarget = parseConnectTarget(values);
18642
+ rejectConnectChannelFlags(values);
18643
+ const workspaceSlug = stringValue4(values, "workspace");
18604
18644
  const kandanUrl = stringValue4(values, "linzumi-url") ?? defaultLinzumiWebSocketUrl;
18605
18645
  const cwd = stringValue4(values, "cwd") ?? process.cwd();
18606
18646
  const cwdAllowedCwds = assertConfiguredAllowedCwds([cwd]);
@@ -18612,8 +18652,7 @@ async function parseRunnerArgs(args, deps = {
18612
18652
  const token = await deps.resolveToken({
18613
18653
  kandanUrl,
18614
18654
  explicitToken,
18615
- workspaceSlug: connectTarget?.workspaceSlug,
18616
- channelSlug: connectTarget?.channelSlug,
18655
+ workspaceSlug,
18617
18656
  authFilePath: stringValue4(values, "auth-file"),
18618
18657
  callbackHost: stringValue4(values, "oauth-callback-host"),
18619
18658
  reportRejectedCachedToken: () => {
@@ -18621,7 +18660,6 @@ async function parseRunnerArgs(args, deps = {
18621
18660
  `);
18622
18661
  }
18623
18662
  });
18624
- const channelSession = parseChannelSession(values, token, connectTarget);
18625
18663
  const editorRuntime = await deps.resolveEditorRuntime({
18626
18664
  kandanUrl,
18627
18665
  token,
@@ -18652,9 +18690,8 @@ async function parseRunnerArgs(args, deps = {
18652
18690
  editorRuntime: editorRuntime.runtime,
18653
18691
  socketFactory: trustedWebSocketFactory(kandanTlsTrustFromEnv()),
18654
18692
  dependencyStatus,
18655
- workspaceSlug: connectTarget?.workspaceSlug ?? singleWorkspaceScopeFromAccessToken(token),
18656
- runtimeDefaults: runnerRuntimeDefaultsFromValues(values),
18657
- channelSession
18693
+ workspaceSlug: workspaceSlug ?? singleWorkspaceScopeFromAccessToken(token),
18694
+ runtimeDefaults: runnerRuntimeDefaultsFromValues(values)
18658
18695
  };
18659
18696
  }
18660
18697
  function runnerRuntimeDefaultsFromValues(values) {
@@ -18751,7 +18788,7 @@ function stripDaemonSupervisorFlags(args) {
18751
18788
  function rejectStartTargetingFlags(values) {
18752
18789
  const unsupportedFlags = ["workspace", "channel"].filter((flag) => values.has(flag));
18753
18790
  if (unsupportedFlags.length > 0) {
18754
- throw new Error(`linzumi start chooses its workspace during browser onboarding; remove ${unsupportedFlags.map((flag) => `--${flag}`).join(", ")} or use linzumi connect for an explicit workspace/channel.`);
18791
+ throw new Error(`linzumi start chooses its workspace during browser onboarding; remove ${unsupportedFlags.map((flag) => `--${flag}`).join(", ")} or use linzumi connect --workspace for an explicit workspace.`);
18755
18792
  }
18756
18793
  }
18757
18794
  function resolveUserPath(pathValue) {
@@ -18763,26 +18800,6 @@ function resolveUserPath(pathValue) {
18763
18800
  }
18764
18801
  return resolve10(pathValue);
18765
18802
  }
18766
- function parseChannelSession(values, token, target) {
18767
- if (target === undefined || target.channelSlug === undefined) {
18768
- return;
18769
- }
18770
- const listenUser = stringValue4(values, "listen-user") ?? defaultListenUserFromToken(token);
18771
- return {
18772
- workspaceSlug: target.workspaceSlug,
18773
- channelSlug: target.channelSlug,
18774
- kandanThreadId: stringValue4(values, "linzumi-thread-id"),
18775
- listenUser,
18776
- model: stringValue4(values, "model"),
18777
- reasoningEffort: stringValue4(values, "reasoning-effort"),
18778
- sandbox: stringValue4(values, "sandbox"),
18779
- approvalPolicy: stringValue4(values, "approval-policy"),
18780
- streamFlushMs: positiveIntegerValue2(values, "stream-flush-ms")
18781
- };
18782
- }
18783
- function parseConnectTarget(values) {
18784
- return parseOptionalChannelTarget(values);
18785
- }
18786
18803
  function defaultListenUserFromToken(token) {
18787
18804
  const username = identityFromAccessToken(token).actorUsername;
18788
18805
  if (username !== undefined) {
@@ -18790,6 +18807,17 @@ function defaultListenUserFromToken(token) {
18790
18807
  }
18791
18808
  throw new Error("missing --listen-user and authenticated user is unavailable");
18792
18809
  }
18810
+ function rejectConnectChannelFlags(values) {
18811
+ const unsupportedFlags = [
18812
+ "channel",
18813
+ "linzumi-thread-id",
18814
+ "listen-user"
18815
+ ].filter((flag) => values.has(flag));
18816
+ if (unsupportedFlags.length === 0) {
18817
+ return;
18818
+ }
18819
+ throw new Error(`linzumi connect starts a workspace Commander; remove ${unsupportedFlags.map((flag) => `--${flag}`).join(", ")}.`);
18820
+ }
18793
18821
  function parseOptionalChannelTarget(values) {
18794
18822
  const channel = stringValue4(values, "channel");
18795
18823
  const workspace = stringValue4(values, "workspace");
@@ -18876,7 +18904,7 @@ Usage:
18876
18904
  linzumi commander <folder> [options]
18877
18905
  linzumi start <folder> [options]
18878
18906
  linzumi paths list|add|remove [path]
18879
- linzumi connect --workspace <slug> [--channel <slug>] [options]
18907
+ linzumi connect --workspace <slug> [options]
18880
18908
  linzumi auth --linzumi-url <ws-url> [--workspace <slug> --channel <slug>]
18881
18909
 
18882
18910
  Connection:
@@ -18886,12 +18914,8 @@ Connection:
18886
18914
  --auth-file <path> Auth cache path, default ~/.linzumi/auth.json
18887
18915
  --oauth-callback-host <ip> Callback host reachable by your browser
18888
18916
 
18889
- Workspace and optional channel binding:
18917
+ Workspace:
18890
18918
  --workspace <slug> Workspace slug
18891
- --channel <slug|w/c> Optional channel slug, or workspace/channel
18892
- --linzumi-thread-id <uuid> Resume an existing Linzumi thread instead of announcing a new root
18893
- (deprecated alias: --kandan-thread-id)
18894
- --listen-user <user|all> User whose replies are accepted, default authenticated user
18895
18919
 
18896
18920
  Codex:
18897
18921
  --cwd <path> Working directory for Codex, default current directory
@@ -18923,16 +18947,15 @@ Examples:
18923
18947
  linzumi start ~/code/my-app
18924
18948
  linzumi connect --workspace <your-workspace> --launch-tui
18925
18949
  linzumi connect --workspace <your-workspace> --model gpt-5 --reasoning-effort low --fast --launch-tui
18926
- linzumi connect --workspace <your-workspace> --channel <your-channel>
18927
18950
  linzumi auth --workspace <your-workspace> --channel <your-channel>
18928
18951
  linzumi paths add ~/code/my-app
18929
18952
  linzumi paths list
18930
18953
 
18931
18954
  Bad:
18932
- linzumi connect --token not-a-jwt --workspace <your-workspace> --channel <your-channel>
18933
- Missing --listen-user and authenticated user is unavailable.
18934
- linzumi connect --token "$TOKEN" --listen-users sean
18935
- Invalid flag: use --listen-user.
18955
+ linzumi connect --workspace <your-workspace> --channel <your-channel>
18956
+ Invalid: Commanders connect to workspaces, not channels.
18957
+ linzumi connect --token "$TOKEN" --listen-user sean
18958
+ Invalid: Commanders connect to workspaces, not individual channel listeners.
18936
18959
  linzumi connect --workspace <your-workspace> --allowed-cwd /does/not/exist
18937
18960
  Invalid --allowed-cwd: allowed cwd roots must exist locally.
18938
18961
  linzumi connect --workspace <your-workspace> --forward-port vite
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linzumi/cli",
3
- "version": "0.0.50-beta",
3
+ "version": "0.0.51-beta",
4
4
  "description": "Linzumi CLI — point a Codex agent at the real code on your laptop, with your team watching and steering from shared threads.",
5
5
  "type": "module",
6
6
  "bin": {