@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.
- package/README.md +1 -1
- package/dist/index.js +118 -95
- package/package.json +1 -1
package/README.md
CHANGED
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
14268
|
+
// ../../node_modules/@inquirer/core/dist/esm/lib/screen-manager.js
|
|
14251
14269
|
import { stripVTControlCharacters } from "node:util";
|
|
14252
14270
|
|
|
14253
|
-
// ../../node_modules
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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: "
|
|
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)
|
|
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
|
|
17706
|
+
closeSync as closeSync3,
|
|
17668
17707
|
mkdirSync as mkdirSync11,
|
|
17669
|
-
openSync as
|
|
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 =
|
|
17710
|
-
const err =
|
|
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
|
-
|
|
17730
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
|
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> [
|
|
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
|
|
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 --
|
|
18933
|
-
|
|
18934
|
-
linzumi connect --token "$TOKEN" --listen-
|
|
18935
|
-
Invalid
|
|
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