@vibeframe/cli 0.91.1 → 0.91.3
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/dist/index.js +34 -14
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -31896,12 +31896,14 @@ async function promptConfirm(question, defaultYes = true) {
|
|
|
31896
31896
|
return answer.toLowerCase().startsWith("y");
|
|
31897
31897
|
}
|
|
31898
31898
|
async function promptMultiSelect(_question, options, defaultSelected = [], opts = {}) {
|
|
31899
|
+
const pickFocused = opts.pickFocusedOnEnter ?? opts.enterSelectsFocusedWhenEmpty ?? false;
|
|
31899
31900
|
const input = getTTYInputStream();
|
|
31900
31901
|
const selected = options.map((_, i) => Boolean(defaultSelected[i]));
|
|
31901
31902
|
if (typeof input.setRawMode === "function") {
|
|
31902
31903
|
return new Promise((resolve64) => {
|
|
31903
31904
|
let cursor = 0;
|
|
31904
31905
|
let renderCount = 0;
|
|
31906
|
+
let userToggled = false;
|
|
31905
31907
|
const render = () => {
|
|
31906
31908
|
if (renderCount > 0) {
|
|
31907
31909
|
process.stdout.write(`\x1B[${options.length}A`);
|
|
@@ -31931,8 +31933,10 @@ async function promptMultiSelect(_question, options, defaultSelected = [], opts
|
|
|
31931
31933
|
};
|
|
31932
31934
|
const onData = (char) => {
|
|
31933
31935
|
if (char === "\r" || char === "\n") {
|
|
31934
|
-
if (
|
|
31936
|
+
if (pickFocused && !userToggled) {
|
|
31937
|
+
for (let i = 0; i < selected.length; i++) selected[i] = false;
|
|
31935
31938
|
selected[cursor] = true;
|
|
31939
|
+
render();
|
|
31936
31940
|
}
|
|
31937
31941
|
finish();
|
|
31938
31942
|
} else if (char === "") {
|
|
@@ -31941,6 +31945,7 @@ async function promptMultiSelect(_question, options, defaultSelected = [], opts
|
|
|
31941
31945
|
process.exit(1);
|
|
31942
31946
|
} else if (char === " ") {
|
|
31943
31947
|
selected[cursor] = !selected[cursor];
|
|
31948
|
+
userToggled = true;
|
|
31944
31949
|
render();
|
|
31945
31950
|
} else if (char === "\x1B[A" || char === "k") {
|
|
31946
31951
|
cursor = (cursor - 1 + options.length) % options.length;
|
|
@@ -31951,10 +31956,12 @@ async function promptMultiSelect(_question, options, defaultSelected = [], opts
|
|
|
31951
31956
|
} else if (char === "a") {
|
|
31952
31957
|
const allOn = selected.every(Boolean);
|
|
31953
31958
|
for (let i = 0; i < selected.length; i++) selected[i] = !allOn;
|
|
31959
|
+
userToggled = true;
|
|
31954
31960
|
render();
|
|
31955
31961
|
} else if (char >= "1" && char <= String(Math.min(options.length, 9))) {
|
|
31956
31962
|
const i = parseInt(char, 10) - 1;
|
|
31957
31963
|
selected[i] = !selected[i];
|
|
31964
|
+
userToggled = true;
|
|
31958
31965
|
render();
|
|
31959
31966
|
}
|
|
31960
31967
|
};
|
|
@@ -51610,7 +51617,7 @@ var init_key_live_test = __esm({
|
|
|
51610
51617
|
|
|
51611
51618
|
// src/pipeline/renderers/chrome.ts
|
|
51612
51619
|
import { existsSync as existsSync32 } from "node:fs";
|
|
51613
|
-
import { homedir as
|
|
51620
|
+
import { homedir as homedir6 } from "node:os";
|
|
51614
51621
|
import { join as join11 } from "node:path";
|
|
51615
51622
|
function findChrome() {
|
|
51616
51623
|
const candidates = [
|
|
@@ -51618,7 +51625,7 @@ function findChrome() {
|
|
|
51618
51625
|
process.env.CHROME_PATH,
|
|
51619
51626
|
// puppeteer auto-downloaded headless shell
|
|
51620
51627
|
join11(
|
|
51621
|
-
|
|
51628
|
+
homedir6(),
|
|
51622
51629
|
".cache",
|
|
51623
51630
|
"puppeteer",
|
|
51624
51631
|
"chrome-headless-shell",
|
|
@@ -62913,7 +62920,7 @@ init_source();
|
|
|
62913
62920
|
// package.json
|
|
62914
62921
|
var package_default = {
|
|
62915
62922
|
name: "@vibeframe/cli",
|
|
62916
|
-
version: "0.91.
|
|
62923
|
+
version: "0.91.3",
|
|
62917
62924
|
description: "VibeFrame CLI - natural language video editing from the terminal",
|
|
62918
62925
|
private: false,
|
|
62919
62926
|
license: "MIT",
|
|
@@ -69840,6 +69847,7 @@ init_tty();
|
|
|
69840
69847
|
init_api_key();
|
|
69841
69848
|
import { resolve as resolve42 } from "node:path";
|
|
69842
69849
|
import { access as access6, readFile as readFile29 } from "node:fs/promises";
|
|
69850
|
+
import { homedir as homedir5 } from "node:os";
|
|
69843
69851
|
|
|
69844
69852
|
// src/utils/key-format.ts
|
|
69845
69853
|
init_dist2();
|
|
@@ -70188,8 +70196,19 @@ async function runNonInteractiveSetup(opts) {
|
|
|
70188
70196
|
}
|
|
70189
70197
|
async function runSetupWizard(fullSetup = false, scope = "user") {
|
|
70190
70198
|
console.log();
|
|
70191
|
-
const
|
|
70192
|
-
|
|
70199
|
+
const cfgPath = getConfigPath(scope).replace(homedir5(), "~");
|
|
70200
|
+
const scopeNote = scope === "project" ? "applies to this project only \xB7 add .vibeframe/ to .gitignore" : "applies to every project for this user";
|
|
70201
|
+
console.log(
|
|
70202
|
+
source_default.bold.magenta("VibeFrame Setup") + source_default.bold(` \u2014 ${scope} scope`)
|
|
70203
|
+
);
|
|
70204
|
+
console.log(source_default.dim(`${cfgPath} \xB7 ${scopeNote}`));
|
|
70205
|
+
if (scope === "user") {
|
|
70206
|
+
console.log(
|
|
70207
|
+
source_default.dim(
|
|
70208
|
+
"Tip: for per-project keys, cd into a project and run: vibe setup --scope project"
|
|
70209
|
+
)
|
|
70210
|
+
);
|
|
70211
|
+
}
|
|
70193
70212
|
console.log(source_default.dim("\u2500".repeat(40)));
|
|
70194
70213
|
console.log();
|
|
70195
70214
|
const hosts = detectedAgentHosts();
|
|
@@ -70242,8 +70261,8 @@ async function runSetupWizard(fullSetup = false, scope = "user") {
|
|
|
70242
70261
|
}
|
|
70243
70262
|
console.log(source_default.dim("2. Features"));
|
|
70244
70263
|
console.log(source_default.bold("Which AI features do you need?"));
|
|
70245
|
-
console.log(source_default.dim("
|
|
70246
|
-
console.log(source_default.dim("
|
|
70264
|
+
console.log(source_default.dim(` ${source_default.bold("Most users pick more than one.")} Press ${source_default.bold("space")} on each feature you want, then ${source_default.bold("enter")} to confirm.`));
|
|
70265
|
+
console.log(source_default.dim(" Shortcut: enter alone picks only the highlighted feature."));
|
|
70247
70266
|
console.log();
|
|
70248
70267
|
const featureLabels = AI_FEATURES.map((f) => {
|
|
70249
70268
|
const keyCount = f.keys.length;
|
|
@@ -70254,7 +70273,7 @@ async function runSetupWizard(fullSetup = false, scope = "user") {
|
|
|
70254
70273
|
source_default.cyan(" Pick (e.g. 1,3 or 'all'): "),
|
|
70255
70274
|
featureLabels,
|
|
70256
70275
|
[],
|
|
70257
|
-
{
|
|
70276
|
+
{ pickFocusedOnEnter: true }
|
|
70258
70277
|
);
|
|
70259
70278
|
const selectedFeatures = picked.map((i) => AI_FEATURES[i]);
|
|
70260
70279
|
console.log();
|
|
@@ -70268,7 +70287,7 @@ async function runSetupWizard(fullSetup = false, scope = "user") {
|
|
|
70268
70287
|
const plannedKeys = /* @__PURE__ */ new Map();
|
|
70269
70288
|
console.log(source_default.dim("3. Providers"));
|
|
70270
70289
|
console.log(source_default.bold("Choose providers for each selected feature"));
|
|
70271
|
-
console.log(source_default.dim(
|
|
70290
|
+
console.log(source_default.dim(` Recommended default is highlighted. Press ${source_default.bold("enter")} to pick it, or use ${source_default.bold("space")} to add multiple.`));
|
|
70272
70291
|
console.log();
|
|
70273
70292
|
for (const feature of selectedFeatures) {
|
|
70274
70293
|
const keysForFeature = [];
|
|
@@ -70285,9 +70304,10 @@ async function runSetupWizard(fullSetup = false, scope = "user") {
|
|
|
70285
70304
|
return `${choice.label} ${source_default.dim(`- ${choice.desc}`)} ${keyHint}`;
|
|
70286
70305
|
});
|
|
70287
70306
|
const pickedProviders = await promptMultiSelect(
|
|
70288
|
-
source_default.cyan(" Providers (
|
|
70307
|
+
source_default.cyan(" Providers (arrow + enter picks one, space adds more): "),
|
|
70289
70308
|
providerLabels,
|
|
70290
|
-
defaultSelected
|
|
70309
|
+
defaultSelected,
|
|
70310
|
+
{ pickFocusedOnEnter: true }
|
|
70291
70311
|
);
|
|
70292
70312
|
const selectedChoices = pickedProviders.map((i) => feature.providerChoices[i]);
|
|
70293
70313
|
const defaultChoice = selectedChoices.find((choice) => choice.defaultFor);
|
|
@@ -71747,12 +71767,12 @@ async function runDiagnostics() {
|
|
|
71747
71767
|
}
|
|
71748
71768
|
} else if (toolName === "chrome") {
|
|
71749
71769
|
const { existsSync: existsSync41 } = await import("node:fs");
|
|
71750
|
-
const { homedir:
|
|
71770
|
+
const { homedir: homedir7 } = await import("node:os");
|
|
71751
71771
|
const { join: join17 } = await import("node:path");
|
|
71752
71772
|
const chromePaths = [
|
|
71753
71773
|
process.env.HYPERFRAMES_CHROME_PATH,
|
|
71754
71774
|
process.env.CHROME_PATH,
|
|
71755
|
-
join17(
|
|
71775
|
+
join17(homedir7(), ".cache", "puppeteer", "chrome-headless-shell", "mac_arm-147.0.7727.56", "chrome-headless-shell-mac_arm", "chrome-headless-shell"),
|
|
71756
71776
|
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
71757
71777
|
"/Applications/Chromium.app/Contents/MacOS/Chromium",
|
|
71758
71778
|
"/usr/bin/google-chrome",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/cli",
|
|
3
|
-
"version": "0.91.
|
|
3
|
+
"version": "0.91.3",
|
|
4
4
|
"description": "VibeFrame CLI - natural language video editing from the terminal",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -183,8 +183,8 @@
|
|
|
183
183
|
"tsx": "^4.21.0",
|
|
184
184
|
"typescript": "^5.3.3",
|
|
185
185
|
"vitest": "^1.2.2",
|
|
186
|
-
"@vibeframe/ai-providers": "0.91.
|
|
187
|
-
"@vibeframe/core": "0.91.
|
|
186
|
+
"@vibeframe/ai-providers": "0.91.3",
|
|
187
|
+
"@vibeframe/core": "0.91.3"
|
|
188
188
|
},
|
|
189
189
|
"engines": {
|
|
190
190
|
"node": ">=20"
|