@algolia/wizard 0.57.0 → 0.58.0
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/main.js +129 -42
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -2038,8 +2038,16 @@ import z6 from "zod";
|
|
|
2038
2038
|
import { readdir } from "node:fs/promises";
|
|
2039
2039
|
|
|
2040
2040
|
// src/lib/tools/path.ts
|
|
2041
|
-
import {
|
|
2041
|
+
import { constants } from "node:fs";
|
|
2042
|
+
import { lstat, mkdir as mkdir3, open } from "node:fs/promises";
|
|
2042
2043
|
import { resolve as resolve2, relative, isAbsolute, dirname as dirname2, join as join5, sep } from "node:path";
|
|
2044
|
+
var DEFAULT_FILE_MODE = 438;
|
|
2045
|
+
function errorCode(err) {
|
|
2046
|
+
if (typeof err === "object" && err !== null && "code" in err && typeof err.code === "string") {
|
|
2047
|
+
return err.code;
|
|
2048
|
+
}
|
|
2049
|
+
return void 0;
|
|
2050
|
+
}
|
|
2043
2051
|
function resolveInRoot(ctx, path) {
|
|
2044
2052
|
const target = resolve2(ctx.cwd, path);
|
|
2045
2053
|
const rel = relative(ctx.root, target);
|
|
@@ -2059,12 +2067,46 @@ async function hasSymlinkParent(ctx, target) {
|
|
|
2059
2067
|
try {
|
|
2060
2068
|
if ((await lstat(current)).isSymbolicLink()) return true;
|
|
2061
2069
|
} catch (err) {
|
|
2062
|
-
if (err
|
|
2070
|
+
if (errorCode(err) === "ENOENT") return false;
|
|
2063
2071
|
throw err;
|
|
2064
2072
|
}
|
|
2065
2073
|
}
|
|
2066
2074
|
return false;
|
|
2067
2075
|
}
|
|
2076
|
+
function symlinkTargetError(target) {
|
|
2077
|
+
return `Refused: ${target} is a symbolic link.`;
|
|
2078
|
+
}
|
|
2079
|
+
async function validateSafeWriteTarget(ctx, target) {
|
|
2080
|
+
if (await hasSymlinkParent(ctx, target)) {
|
|
2081
|
+
return `Refused: ${target} is outside the repo root (${ctx.root}).`;
|
|
2082
|
+
}
|
|
2083
|
+
try {
|
|
2084
|
+
if ((await lstat(target)).isSymbolicLink()) return symlinkTargetError(target);
|
|
2085
|
+
} catch (err) {
|
|
2086
|
+
if (errorCode(err) !== "ENOENT") throw err;
|
|
2087
|
+
}
|
|
2088
|
+
return null;
|
|
2089
|
+
}
|
|
2090
|
+
async function safeWriteFile(ctx, target, content) {
|
|
2091
|
+
const validationError = await validateSafeWriteTarget(ctx, target);
|
|
2092
|
+
if (validationError) return validationError;
|
|
2093
|
+
await mkdir3(dirname2(target), { recursive: true });
|
|
2094
|
+
try {
|
|
2095
|
+
const flags = constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC | constants.O_NOFOLLOW;
|
|
2096
|
+
const handle = await open(target, flags, DEFAULT_FILE_MODE);
|
|
2097
|
+
try {
|
|
2098
|
+
await handle.writeFile(content, "utf8");
|
|
2099
|
+
} finally {
|
|
2100
|
+
await handle.close();
|
|
2101
|
+
}
|
|
2102
|
+
} catch (err) {
|
|
2103
|
+
if (errorCode(err) === "ELOOP") {
|
|
2104
|
+
return symlinkTargetError(target);
|
|
2105
|
+
}
|
|
2106
|
+
throw err;
|
|
2107
|
+
}
|
|
2108
|
+
return null;
|
|
2109
|
+
}
|
|
2068
2110
|
|
|
2069
2111
|
// src/lib/tools/listFiles.ts
|
|
2070
2112
|
function listFilesTool(ctx) {
|
|
@@ -2240,8 +2282,6 @@ function readFileTool(ctx) {
|
|
|
2240
2282
|
// src/lib/tools/writeFile.ts
|
|
2241
2283
|
import { tool as tool5 } from "ai";
|
|
2242
2284
|
import z10 from "zod";
|
|
2243
|
-
import { mkdir as mkdir3, writeFile as writeFile3 } from "node:fs/promises";
|
|
2244
|
-
import { dirname as dirname3 } from "node:path";
|
|
2245
2285
|
function writeFileTool(ctx) {
|
|
2246
2286
|
return tool5({
|
|
2247
2287
|
description: "Write content to a file at the given path, overwriting it. Writes to secret env files (.env, .env.local, etc.) are refused by this tool \u2014 call it anyway and the tool will tell you how to proceed.",
|
|
@@ -2257,11 +2297,8 @@ function writeFileTool(ctx) {
|
|
|
2257
2297
|
return `Refused: ${filePath} holds secrets and cannot be written directly. If a writeCredentials tool is available, use it to set Algolia credentials. If not, tell the user to set the value manually \u2014 do not reproduce the secret value in your response.`;
|
|
2258
2298
|
}
|
|
2259
2299
|
try {
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
}
|
|
2263
|
-
await mkdir3(dirname3(resolved2.target), { recursive: true });
|
|
2264
|
-
await writeFile3(resolved2.target, content, "utf8");
|
|
2300
|
+
const writeError = await safeWriteFile(ctx, resolved2.target, content);
|
|
2301
|
+
if (writeError) return writeError;
|
|
2265
2302
|
useWizard.getState().recordWrittenFile(resolved2.target);
|
|
2266
2303
|
return `Wrote to ${filePath}`;
|
|
2267
2304
|
} catch (err) {
|
|
@@ -2274,8 +2311,8 @@ function writeFileTool(ctx) {
|
|
|
2274
2311
|
// src/lib/tools/writeAlgoliaCredentials.ts
|
|
2275
2312
|
import { tool as tool6 } from "ai";
|
|
2276
2313
|
import z13 from "zod";
|
|
2277
|
-
import {
|
|
2278
|
-
import {
|
|
2314
|
+
import { readFile as readFile5 } from "node:fs/promises";
|
|
2315
|
+
import { relative as relative3 } from "node:path";
|
|
2279
2316
|
|
|
2280
2317
|
// src/lib/algoliaApiKey.ts
|
|
2281
2318
|
import { z as z12 } from "zod";
|
|
@@ -2475,7 +2512,7 @@ async function resolveSearchOnlyKey(index, appId) {
|
|
|
2475
2512
|
|
|
2476
2513
|
// src/lib/gitignore.ts
|
|
2477
2514
|
import { execFile } from "node:child_process";
|
|
2478
|
-
import { lstat as lstat2, readFile as readFile4, writeFile as
|
|
2515
|
+
import { lstat as lstat2, readFile as readFile4, writeFile as writeFile3 } from "node:fs/promises";
|
|
2479
2516
|
import { join as join6, relative as relative2 } from "node:path";
|
|
2480
2517
|
var GIT_ENV_OVERRIDES = [
|
|
2481
2518
|
"GIT_DIR",
|
|
@@ -2540,7 +2577,7 @@ async function ensureGitIgnored(root, target) {
|
|
|
2540
2577
|
}
|
|
2541
2578
|
const existing = link ? await readFile4(gitIgnore, "utf8") : "";
|
|
2542
2579
|
const prefix = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
|
|
2543
|
-
await
|
|
2580
|
+
await writeFile3(gitIgnore, `${existing}${prefix}${pattern}
|
|
2544
2581
|
`, "utf8");
|
|
2545
2582
|
return tracked ? "tracked" : "added";
|
|
2546
2583
|
} catch (err) {
|
|
@@ -2603,9 +2640,8 @@ function writeCredentialsTool(ctx) {
|
|
|
2603
2640
|
let existing = "";
|
|
2604
2641
|
let present;
|
|
2605
2642
|
try {
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
}
|
|
2643
|
+
const targetError = await validateSafeWriteTarget(ctx, resolved2.target);
|
|
2644
|
+
if (targetError) return targetError;
|
|
2609
2645
|
try {
|
|
2610
2646
|
existing = await readFile5(resolved2.target, "utf8");
|
|
2611
2647
|
} catch (err) {
|
|
@@ -2657,8 +2693,8 @@ function writeCredentialsTool(ctx) {
|
|
|
2657
2693
|
(content, [name, value]) => upsertEnv(content, name, value),
|
|
2658
2694
|
existing
|
|
2659
2695
|
);
|
|
2660
|
-
await
|
|
2661
|
-
|
|
2696
|
+
const writeError = await safeWriteFile(ctx, resolved2.target, updated);
|
|
2697
|
+
if (writeError) return writeError;
|
|
2662
2698
|
const sentences = [
|
|
2663
2699
|
`Wrote ${[...credentials.map(([name]) => name), INDEX_NAME_VAR].join(", ")} to ${filePath}.`
|
|
2664
2700
|
];
|
|
@@ -3024,11 +3060,66 @@ var FILE_IO_COMMANDS = /* @__PURE__ */ new Set([
|
|
|
3024
3060
|
"od",
|
|
3025
3061
|
"strings"
|
|
3026
3062
|
]);
|
|
3063
|
+
function hasUnquotedHeredocOperator(command) {
|
|
3064
|
+
const nextCharacterOffset = 1;
|
|
3065
|
+
let quote = null;
|
|
3066
|
+
for (let i = 0; i < command.length; i++) {
|
|
3067
|
+
const char = command.at(i);
|
|
3068
|
+
if (char === "\\" && quote !== "'") {
|
|
3069
|
+
i += nextCharacterOffset;
|
|
3070
|
+
continue;
|
|
3071
|
+
}
|
|
3072
|
+
if (quote !== null) {
|
|
3073
|
+
if (char === quote) quote = null;
|
|
3074
|
+
continue;
|
|
3075
|
+
}
|
|
3076
|
+
if (char === "'" || char === '"') {
|
|
3077
|
+
quote = char;
|
|
3078
|
+
continue;
|
|
3079
|
+
}
|
|
3080
|
+
if (char === "<" && command.at(i + nextCharacterOffset) === "<") {
|
|
3081
|
+
return true;
|
|
3082
|
+
}
|
|
3083
|
+
}
|
|
3084
|
+
return false;
|
|
3085
|
+
}
|
|
3027
3086
|
function commandSegments(command) {
|
|
3028
|
-
|
|
3087
|
+
const nextCharacterOffset = 1;
|
|
3088
|
+
const segments = [];
|
|
3089
|
+
let start = 0;
|
|
3090
|
+
let quote = null;
|
|
3091
|
+
for (let i = 0; i < command.length; i++) {
|
|
3092
|
+
const char = command.at(i);
|
|
3093
|
+
if (char === "\\" && quote !== "'") {
|
|
3094
|
+
i += nextCharacterOffset;
|
|
3095
|
+
continue;
|
|
3096
|
+
}
|
|
3097
|
+
if (quote !== null) {
|
|
3098
|
+
if (char === quote) quote = null;
|
|
3099
|
+
continue;
|
|
3100
|
+
}
|
|
3101
|
+
if (char === "'" || char === '"') {
|
|
3102
|
+
quote = char;
|
|
3103
|
+
continue;
|
|
3104
|
+
}
|
|
3105
|
+
const nextCharacter = command.at(i + nextCharacterOffset);
|
|
3106
|
+
const isDoubleAmpersand = char === "&" && nextCharacter === "&";
|
|
3107
|
+
const isPipe = char === "|";
|
|
3108
|
+
const isLineBreak = char === "\n" || char === "\r";
|
|
3109
|
+
if (char !== ";" && !isDoubleAmpersand && !isPipe && !isLineBreak) {
|
|
3110
|
+
continue;
|
|
3111
|
+
}
|
|
3112
|
+
segments.push(command.slice(start, i).trim());
|
|
3113
|
+
if (isDoubleAmpersand || isPipe && nextCharacter === "|" || char === "\r" && nextCharacter === "\n") {
|
|
3114
|
+
i += nextCharacterOffset;
|
|
3115
|
+
}
|
|
3116
|
+
start = i + nextCharacterOffset;
|
|
3117
|
+
}
|
|
3118
|
+
segments.push(command.slice(start).trim());
|
|
3119
|
+
return segments;
|
|
3029
3120
|
}
|
|
3030
3121
|
function isFileIOCommand(command) {
|
|
3031
|
-
return commandSegments(command).map((segment) => segment.split(/\s+/)[0]).some((word) => word !== void 0 && FILE_IO_COMMANDS.has(word));
|
|
3122
|
+
return !hasUnquotedHeredocOperator(command) && commandSegments(command).map((segment) => segment.split(/\s+/)[0]).some((word) => word !== void 0 && FILE_IO_COMMANDS.has(word));
|
|
3032
3123
|
}
|
|
3033
3124
|
var READ_ONLY_BINARIES = /* @__PURE__ */ new Set([
|
|
3034
3125
|
"wc",
|
|
@@ -3131,6 +3222,7 @@ function fastPathSegmentSafety(segment) {
|
|
|
3131
3222
|
return void 0;
|
|
3132
3223
|
}
|
|
3133
3224
|
function fastPathSafety(command) {
|
|
3225
|
+
if (hasUnquotedHeredocOperator(command)) return false;
|
|
3134
3226
|
const results = commandSegments(command).map(fastPathSegmentSafety);
|
|
3135
3227
|
if (results.some((r) => r === false)) return false;
|
|
3136
3228
|
if (results.every((r) => r === true)) return true;
|
|
@@ -3172,7 +3264,7 @@ async function classifyCommandSafety(createModel, command, cwd, explanation, app
|
|
|
3172
3264
|
"(1) Reporting or listing existing state, with no side effect \u2014 e.g. `git status`, `npm ls`, `npm outdated`, `pip show`, `pip freeze`, `cargo tree`, `docker ps`, `docker images`, `kubectl get pods`, `terraform state list`. This includes a read-only GET-style query to a remote registry or API that only fetches public metadata and changes nothing remote (e.g. `npm view <package>`, `pip index versions <package>`, `curl` with no -X/--request other than GET and no -d/--data) \u2014 safe because nothing changes, not because it stays local.",
|
|
3173
3265
|
'(2) A "preview" or "check" mode that reports what a change WOULD do, or reports a problem, without making the change. This is a general pattern, not a fixed list \u2014 ANY command that takes a dry-run/check/plan/validate/diff/list-only flag is safe when that flag is present, regardless of whether the same flag would normally appear on a "safe" kind of command: `terraform plan`, `terraform validate`, `terraform fmt -check`, `black --check`, `prettier --check`, `isort --check`, `gofmt -l` (list-only), `stylelint` with no `--fix`, and equally `git push --dry-run`, `npm publish --dry-run`, `kubectl apply --dry-run=client` \u2014 these last three are otherwise-unsafe operations (push, publish, cluster changes) that the dry-run flag turns into a report. The corresponding command WITHOUT that flag (e.g. `terraform apply`, `black .`, `gofmt -w`, `git push`) is a different, unsafe command \u2014 the flag is what makes the difference, for any tool, not just the ones named here. This cuts both ways, so do not assume a bare invocation is the safe one: `cargo fmt`, `black`, `prettier`, `isort`, `rustfmt`, and `terraform fmt` all REWRITE FILES by default and need an explicit check/diff/dry-run flag to become safe, while `gofmt`, `eslint`, `stylelint`, `rubocop`, and `ruff check` default to a safe check-only mode and need an explicit fix/write flag to become unsafe \u2014 the same-looking bare command is safe for one group and unsafe for the other, so judge each by what its own flags actually say, not by resemblance to a tool you already judged.',
|
|
3174
3266
|
"(3) Running the project's own tests, type checker, linter, or build/compile step (e.g. `npm run build`, `yarn build`, `vite build`, `webpack`, `tsc`, `cargo build`, `go build`, `mvn compile`), as long as it is not passed an autofix/write/update flag (e.g. --fix, -u, --write, rubocop -a) \u2014 this holds even though the point of a build step is to write compiled output to a build/dist/target directory inside the project (e.g. a target/, build/, dist/, or __pycache__ directory): writing that output does not make the command unsafe. It stops being safe the moment the command chain goes past building \u2014 a step that also deploys, publishes, uploads, or pushes the build (e.g. `next build && vercel deploy`, `npm run build && npm publish`) is unsafe for that later segment even though the build segment itself is fine; judge each chained segment on its own, same as elsewhere in this list.",
|
|
3175
|
-
"Deleting or removing anything is unsafe, even something in a cache or build directory (e.g. `rm -rf __pycache__`, `cargo clean`, `git clean`), and even if the command otherwise fits one of the three categories above. Installing, uninstalling, or upgrading a dependency, changing a database schema, or writing to a path outside the project is also unsafe. A command chained with
|
|
3267
|
+
"Deleting or removing anything is unsafe, even something in a cache or build directory (e.g. `rm -rf __pycache__`, `cargo clean`, `git clean`), and even if the command otherwise fits one of the three categories above. Installing, uninstalling, or upgrading a dependency, changing a database schema, or writing to a path outside the project is also unsafe. A command chained with &&, ;, a pipe, or a line break (LF or CRLF) is only safe if every command segment is safe on its own. Treat each line as a separate command segment, even when the first line is safe.",
|
|
3176
3268
|
"One specific, narrow exception to all of the above: when the command literally invokes one of these runner programs BY NAME as the leading command \u2014 npx, bunx, pnpm dlx, yarn dlx, pipx run, uvx \u2014 it is unsafe regardless of what it then runs, even something that looks like a harmless test/lint/typecheck command (e.g. `npx tsc --noEmit`, `uvx ruff check .`), because that runner can fetch and execute a different, unreviewed version of a package from a registry each time. This exception is about that specific syntax, not a general doubt about whether a tool is installed: a plain `ruff check .`, `pytest`, or any other bare command name is NOT this exception merely because you cannot verify from the string alone that it is installed \u2014 judge those the same as any other already-installed project tool, per the categories above. If you are unsure, judge it unsafe.",
|
|
3177
3269
|
...approvedHistory.length > 0 ? [
|
|
3178
3270
|
"The user has already explicitly approved these exact commands earlier in this session (working directory in parentheses, then the command):",
|
|
@@ -3326,8 +3418,6 @@ function runShellTool(ctx, createModel = defaultCreateModel) {
|
|
|
3326
3418
|
import { tool as tool10, generateText as generateText2, Output as Output2, NoObjectGeneratedError } from "ai";
|
|
3327
3419
|
import { createAnthropic as createAnthropic2 } from "@ai-sdk/anthropic";
|
|
3328
3420
|
import { nanoid as nanoid2 } from "nanoid";
|
|
3329
|
-
import { mkdir as mkdir5, writeFile as writeFile6 } from "node:fs/promises";
|
|
3330
|
-
import { dirname as dirname5 } from "node:path";
|
|
3331
3421
|
import z17 from "zod";
|
|
3332
3422
|
var DATA_DIR = ".algolia-wizard/data";
|
|
3333
3423
|
var RECORD_MODEL = "claude-haiku-4-5";
|
|
@@ -3404,15 +3494,12 @@ function generateRecordTool(ctx, createModel = defaultCreateModel2) {
|
|
|
3404
3494
|
const relPath = `${DATA_DIR}/${slug}.json`;
|
|
3405
3495
|
const resolved2 = resolveInRoot(ctx, relPath);
|
|
3406
3496
|
if (resolved2.ok === false) return resolved2.error;
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
}
|
|
3410
|
-
await mkdir5(dirname5(resolved2.target), { recursive: true });
|
|
3411
|
-
await writeFile6(
|
|
3497
|
+
const writeError = await safeWriteFile(
|
|
3498
|
+
ctx,
|
|
3412
3499
|
resolved2.target,
|
|
3413
|
-
JSON.stringify(records, null, 2)
|
|
3414
|
-
"utf8"
|
|
3500
|
+
JSON.stringify(records, null, 2)
|
|
3415
3501
|
);
|
|
3502
|
+
if (writeError) return writeError;
|
|
3416
3503
|
logger.info(
|
|
3417
3504
|
{ entityName, count: records.length, relPath },
|
|
3418
3505
|
"generateRecord wrote records to disk"
|
|
@@ -3811,7 +3898,7 @@ async function runAnalysis(mode, extraInstructions = []) {
|
|
|
3811
3898
|
// package.json
|
|
3812
3899
|
var package_default = {
|
|
3813
3900
|
name: "@algolia/wizard",
|
|
3814
|
-
version: "0.
|
|
3901
|
+
version: "0.58.0",
|
|
3815
3902
|
description: "Magically implement Algolia functionality in your codebase",
|
|
3816
3903
|
type: "module",
|
|
3817
3904
|
engines: {
|
|
@@ -4256,13 +4343,13 @@ ${formatCompletedSteps(ctx.completedSteps)}`,
|
|
|
4256
4343
|
|
|
4257
4344
|
// src/actions/implement.ts
|
|
4258
4345
|
import z28 from "zod";
|
|
4259
|
-
import { mkdir as
|
|
4346
|
+
import { mkdir as mkdir5 } from "node:fs/promises";
|
|
4260
4347
|
import { join as join10, relative as relative6 } from "node:path";
|
|
4261
4348
|
|
|
4262
4349
|
// src/lib/git.ts
|
|
4263
4350
|
import { execFile as execFile2 } from "node:child_process";
|
|
4264
|
-
import { copyFile, mkdir as
|
|
4265
|
-
import { basename as basename2, dirname as
|
|
4351
|
+
import { copyFile, mkdir as mkdir4, stat as stat3 } from "node:fs/promises";
|
|
4352
|
+
import { basename as basename2, dirname as dirname3, isAbsolute as isAbsolute2, join as join8, resolve as resolve3 } from "node:path";
|
|
4266
4353
|
var MAX_BUFFER = 32 * 1024 * 1024;
|
|
4267
4354
|
function git(args) {
|
|
4268
4355
|
return new Promise((resolve4, reject) => {
|
|
@@ -4305,7 +4392,7 @@ async function copyUploadIntoProject(repoRoot, ingestDir, sourcePath) {
|
|
|
4305
4392
|
return { ok: true, relPath };
|
|
4306
4393
|
}
|
|
4307
4394
|
try {
|
|
4308
|
-
await
|
|
4395
|
+
await mkdir4(dirname3(dest), { recursive: true });
|
|
4309
4396
|
await copyFile(source, dest);
|
|
4310
4397
|
} catch (err) {
|
|
4311
4398
|
return {
|
|
@@ -4339,15 +4426,15 @@ function toRootRelative(p) {
|
|
|
4339
4426
|
|
|
4340
4427
|
// src/lib/algoliaDocs.ts
|
|
4341
4428
|
import { readFileSync, readdirSync, existsSync } from "node:fs";
|
|
4342
|
-
import { dirname as
|
|
4429
|
+
import { dirname as dirname4, join as join9 } from "node:path";
|
|
4343
4430
|
import { fileURLToPath } from "node:url";
|
|
4344
4431
|
var DOCS_SUBPATH = join9("docs", "algolia-sdk");
|
|
4345
4432
|
function findDocsDir() {
|
|
4346
|
-
let dir =
|
|
4433
|
+
let dir = dirname4(fileURLToPath(import.meta.url));
|
|
4347
4434
|
for (; ; ) {
|
|
4348
4435
|
const candidate = join9(dir, DOCS_SUBPATH);
|
|
4349
4436
|
if (existsSync(candidate)) return candidate;
|
|
4350
|
-
const parent =
|
|
4437
|
+
const parent = dirname4(dir);
|
|
4351
4438
|
if (parent === dir) return void 0;
|
|
4352
4439
|
dir = parent;
|
|
4353
4440
|
}
|
|
@@ -4731,7 +4818,7 @@ async function implement(ctx, useCases = DEFAULT_IMPLEMENT_USE_CASES) {
|
|
|
4731
4818
|
useWizard.getState().setTargetIndex(targetIndex ?? null);
|
|
4732
4819
|
await assertGitRepoWithHead(repoRoot);
|
|
4733
4820
|
if (useCases.includes("ingestion")) {
|
|
4734
|
-
await
|
|
4821
|
+
await mkdir5(join10(repoRoot, INGEST_DIR), { recursive: true });
|
|
4735
4822
|
}
|
|
4736
4823
|
const normalized = normalizeFindingPaths(findings);
|
|
4737
4824
|
const confirmed2 = normalized.confirmedEntities;
|
|
@@ -5280,7 +5367,7 @@ function getWorkflow(id) {
|
|
|
5280
5367
|
}
|
|
5281
5368
|
|
|
5282
5369
|
// src/ui/Welcome.tsx
|
|
5283
|
-
import { dirname as
|
|
5370
|
+
import { dirname as dirname5, join as join11 } from "node:path";
|
|
5284
5371
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
5285
5372
|
import { useState as useState9 } from "react";
|
|
5286
5373
|
import { Box as Box11, Spacer, Text as Text12, useInput as useInput5, useWindowSize as useWindowSize5 } from "ink";
|
|
@@ -5312,7 +5399,7 @@ var sidebarItems = [
|
|
|
5312
5399
|
// src/ui/Welcome.tsx
|
|
5313
5400
|
import Image, { TerminalInfoContext, defaultTerminalInfo } from "ink-picture";
|
|
5314
5401
|
import { jsx as jsx10, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
5315
|
-
var IMAGE_PATH = join11(
|
|
5402
|
+
var IMAGE_PATH = join11(dirname5(fileURLToPath2(import.meta.url)), "algolia.png");
|
|
5316
5403
|
var TERMINAL_INFO = {
|
|
5317
5404
|
...defaultTerminalInfo,
|
|
5318
5405
|
supportsUnicode: true,
|
|
@@ -6643,7 +6730,7 @@ function delay(ms) {
|
|
|
6643
6730
|
// package.json with { type: 'json' }
|
|
6644
6731
|
var package_default2 = {
|
|
6645
6732
|
name: "@algolia/wizard",
|
|
6646
|
-
version: "0.
|
|
6733
|
+
version: "0.58.0",
|
|
6647
6734
|
description: "Magically implement Algolia functionality in your codebase",
|
|
6648
6735
|
type: "module",
|
|
6649
6736
|
engines: {
|