@keystrokehq/cli 0.0.14 → 0.0.16
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 +14 -4
- package/dist/{admin-CXQezpQA.mjs → admin-Bb9Hx-gO.mjs} +1 -1
- package/dist/{agents-BdzwXAI1.mjs → agents-CbmvvOAx.mjs} +6 -6
- package/dist/{api-Sf7A0I5T.mjs → api-jkf0TTgD.mjs} +1 -1
- package/dist/{api-keys-BZmUiIEr.mjs → api-keys-DJlyIf10.mjs} +1 -1
- package/dist/{auth-CGBgi6PG.mjs → auth-DpDEkJz7.mjs} +1 -1
- package/dist/{build-agents-DseUtzd4-DBQ82ErJ.mjs → build-agents-DseUtzd4-VYWtIZy9.mjs} +2 -2
- package/dist/{build-metadata-qebrtraZ-BL-fo8HW.mjs → build-metadata-C8Ra_Gi--BdoyLQMl.mjs} +4 -4
- package/dist/{build-progress-BataNqG-.mjs → build-progress-BZivcVz4.mjs} +1 -1
- package/dist/{build-tasks-GVuMLS0h-CWrrj8SF.mjs → build-tasks-GVuMLS0h-p08mMOyK.mjs} +2 -2
- package/dist/{build-workflows-Dmzay1vP-CAhb0BSk.mjs → build-workflows-CV4tBo6S-knCnBKTc.mjs} +5 -5
- package/dist/{build.handler-DTKBdDzF.mjs → build.handler-BNSC_zhQ.mjs} +3 -3
- package/dist/{commander-i-7LgOyc.mjs → commander-D15UZVjp.mjs} +1 -1
- package/dist/{connect-BcTkRZ10.mjs → connect-DzSNDSmI.mjs} +2 -2
- package/dist/{connect.handler-DilOwhlW.mjs → connect.handler-DRO05ak3.mjs} +1 -1
- package/dist/{credentials-BsEHWMBh.mjs → credentials-VidBoOd7.mjs} +6 -6
- package/dist/{current-deployment-workflow-Biw1zV7S.mjs → current-deployment-workflow-BRUEdPrN.mjs} +5 -5
- package/dist/{deploy-DVE7Mx_X.mjs → deploy-eshEEiP-.mjs} +2 -2
- package/dist/{deploy-progress-7qj5ek8b.mjs → deploy-progress-DJHph1Fz.mjs} +1 -1
- package/dist/{deploy.handler-B3E7uX-x.mjs → deploy.handler-BxxWI7nV.mjs} +12 -12
- package/dist/{diff.handler-BMNZ_3J_.mjs → diff.handler-CzrKCj7N.mjs} +1 -1
- package/dist/{dist-BVD3Ga_l.mjs → dist-FQYQ2FLm.mjs} +3 -3
- package/dist/{env.handler-BUBsjm1k.mjs → env.handler-B3YDQIVE.mjs} +3 -3
- package/dist/{import-module-DEI7R8Yh-L32hhSoh.mjs → import-module--8x5SLum-DaUNACER.mjs} +2 -2
- package/dist/{init-CxMQ2ysa.mjs → init-PTwX63_P.mjs} +15 -3
- package/dist/{init.handler-BPKxeGZS.mjs → init.handler-CdytFiFt.mjs} +61 -67
- package/dist/{inspect.handler-CJ7e6iFB.mjs → inspect.handler-umc7of-r.mjs} +2 -2
- package/dist/{integrations-DUlJhGUS.mjs → integrations-B0Gv-L0s.mjs} +5 -5
- package/dist/{invites-BlB-hKUE.mjs → invites-Cqi7iyIN.mjs} +4 -4
- package/dist/keystroke.mjs +21 -21
- package/dist/{list.handler-DhFni3rk.mjs → list.handler-D-YFoKLU.mjs} +2 -2
- package/dist/{list.handler-VGPaJzl-.mjs → list.handler-c-8RpgB9.mjs} +1 -1
- package/dist/{list.handler-K3x71Y4Z.mjs → list2.handler-T5v4EK20.mjs} +4 -4
- package/dist/{listen-drcHFcKq.mjs → listen-rHLiCWbn.mjs} +2 -2
- package/dist/{listen.handler-DjK6RlLf.mjs → listen.handler-B9T58yAj.mjs} +1 -1
- package/dist/{logs-NI-DyeFY.mjs → logs-DUwdYZB-.mjs} +3 -3
- package/dist/{logs.handler-PRYGI57p.mjs → logs.handler-DGcGN2qb.mjs} +1 -1
- package/dist/{metadata-layout-C6ed-9dl-DCTTsjiG.mjs → metadata-layout-Bv-B0nHj-CqlcZz_g.mjs} +1 -1
- package/dist/{org-8bkIZAJ4.mjs → org-DUCts2MV.mjs} +15 -15
- package/dist/{project-config-CJGSh2RQ.mjs → project-config-CsBMT4TL.mjs} +1 -13
- package/dist/{projects-Pp5ENoyh.mjs → projects-CbquwUlm.mjs} +4 -4
- package/dist/{requirements.handler-CZ53jJ_5.mjs → requirements.handler-D5dFi7XZ.mjs} +2 -2
- package/dist/{resolve-project-CI_PxRXi.mjs → resolve-project-CURYMjex.mjs} +1 -1
- package/dist/{run-polling-7YWCL6c-.mjs → run-polling-BWcLQvm0.mjs} +3 -3
- package/dist/{run-polling-BPmB5N5A.mjs → run-polling-CwlzB5-9.mjs} +1 -1
- package/dist/{run.handler-BNrAIXDG.mjs → run.handler-BiBDLoeH.mjs} +4 -4
- package/dist/{runs-Bs8VzL8P.mjs → runs-Bc3zjk7V.mjs} +1 -1
- package/dist/{schema-display-B0LmISCe.mjs → schema-display-CNqiYBIb.mjs} +4 -4
- package/dist/skill-installer-DkRJ6oLi.mjs +506 -0
- package/dist/{skills-sync.handler-DXF6IgEX.mjs → skills-sync.handler-C4ztv1Vu.mjs} +20 -7
- package/dist/skills.command-DuL4kLUi.mjs +49 -0
- package/dist/{skills.handler-CPKCf9ZK.mjs → skills.handler-R5KAbioE.mjs} +1 -1
- package/dist/{source-analysis-DTnwNwKq-BqHdBGtw.mjs → source-analysis-BBg2E_6G-BQqm16RR.mjs} +3 -3
- package/dist/{spinner-progress-DpL68vYK.mjs → spinner-progress-DfkMzwGx.mjs} +1 -1
- package/dist/spinner-worker.d.mts +3 -0
- package/dist/spinner-worker.mjs +203 -0
- package/dist/{sync-BSL1s6PR.mjs → sync-Pssitj6K.mjs} +2 -2
- package/dist/{sync.handler-BN9oDWVx.mjs → sync.handler-Be0U3x-n.mjs} +5 -5
- package/dist/{task-target-build-Du0ObGbb.mjs → task-target-build-BG6cC3bz.mjs} +3 -3
- package/dist/task-target-deploy-runner.mjs +5 -5
- package/dist/test-BISghlKg.mjs +74 -0
- package/dist/{try-deploy.handler-A16ahnCF.mjs → test.handler-DkizZhVu.mjs} +13 -15
- package/dist/{test-BIz-oBxy.mjs → tool.handler-Bu130Vcz.mjs} +8 -90
- package/dist/{trigger-artifacts-RizI57RC-abdkW8-z.mjs → trigger-artifacts-RizI57RC-CxHwCkQ_.mjs} +2 -2
- package/dist/types-D04ah3uY.mjs +6 -0
- package/dist/{upgrade-f97U8Rll.mjs → upgrade-cH9I_pZq.mjs} +1 -1
- package/dist/{upload.handler-CUtfr3hY.mjs → upload.handler-CpKuAaQ_.mjs} +3 -3
- package/dist/{utils-LlH3l_yT.mjs → utils-VC0Vl_pm.mjs} +2 -2
- package/dist/{validate.handler-CUP3SjzC.mjs → validate.handler-I8LY-UkG.mjs} +3 -3
- package/dist/{workflow-build-C_qkq7jk.mjs → workflow-build-C9rQQ4qU.mjs} +14 -14
- package/dist/{workflow-bundler-BzHk73PM-CRcJvu9a.mjs → workflow-bundler-BzHk73PM-AIB4-u4Y.mjs} +1 -1
- package/dist/{workflows-ixllXKLo.mjs → workflows-CL1jYSLR.mjs} +55 -17
- package/dist/{writer-CtvttJdP-BEJHbiLs.mjs → writer-B-SpZ0G2-olEAgSLc.mjs} +5 -5
- package/package.json +7 -7
- package/dist/options-BsIkm0Bb.mjs +0 -43
- package/dist/skills.command-B8yExFCn.mjs +0 -35
- package/dist/sync-keystroke-agent-skills-ChUj1LnK.mjs +0 -66
- /package/dist/{accept.handler-BsZQqmzU.mjs → accept.handler-BPwp_UAE.mjs} +0 -0
- /package/dist/{clear-cache.handler-Bkt6GKnF.mjs → clear-cache.handler-gr5VmEYB.mjs} +0 -0
- /package/dist/{clear.handler-BieI9Oix.mjs → clear.handler-CtOZ4aRn.mjs} +0 -0
- /package/dist/{current.handler-C48q2mBd.mjs → current.handler-QZQ-l84v.mjs} +0 -0
- /package/dist/{deploy-D4ILrWpx.mjs → deploy-CJbVB7e2.mjs} +0 -0
- /package/dist/{detect-env-access-CwkOYeYM-BLtKepjx.mjs → detect-env-access-CwkOYeYM-CZIixHeR.mjs} +0 -0
- /package/dist/{invites.list.handler-DmeMcezN.mjs → invites.list.handler-CErgY35S.mjs} +0 -0
- /package/dist/{invites.resend.handler-pJTPtKHE.mjs → invites.resend.handler-DRCRIA4F.mjs} +0 -0
- /package/dist/{invites.revoke.handler-4NgnnfiU.mjs → invites.revoke.handler-C0FZdAR0.mjs} +0 -0
- /package/dist/{layout-DaoP8bcD.mjs → layout-CXkZEsXI.mjs} +0 -0
- /package/dist/{list.handler-C7AChEPW.mjs → list.handler-BjutlIkE.mjs} +0 -0
- /package/dist/{list.handler-BuX-bb2y.mjs → list.handler-Cr_DFAae.mjs} +0 -0
- /package/dist/{list.handler-BSyrxCma.mjs → list.handler-FlchXrKz.mjs} +0 -0
- /package/dist/{logs.handler-BqmZ4eLx.mjs → logs.handler-dcRq-zoc.mjs} +0 -0
- /package/dist/{members.add.handler-B4H8Hn6x.mjs → members.add.handler-DmYI43rZ.mjs} +0 -0
- /package/dist/{members.invite.handler-D8ONlt4Y.mjs → members.invite.handler-B_KVxv5m.mjs} +0 -0
- /package/dist/{members.list.handler-BHJTMMiA.mjs → members.list.handler-BtuuIgQS.mjs} +0 -0
- /package/dist/{members.remove.handler-_hKd_sFd.mjs → members.remove.handler-Lvg-CqVv.mjs} +0 -0
- /package/dist/{members.update.handler-CC7J0k8n.mjs → members.update.handler-D-8izeso.mjs} +0 -0
- /package/dist/{read-credential-keys-77a91T8M-COvwpok_.mjs → read-credential-keys-77a91T8M-DMmY6oDW.mjs} +0 -0
- /package/dist/{register.handler-CttgzybN.mjs → register.handler-BAx0IC-u.mjs} +0 -0
- /package/dist/{schema-BjH_e4Fo.mjs → schema-O9xTWad_.mjs} +0 -0
- /package/dist/{switch.handler-BFBM8rSi.mjs → switch.handler-CTwhIcaQ.mjs} +0 -0
- /package/dist/{task-target-deploy-OyxLvh3a.mjs → task-target-deploy-gMQC8kXU.mjs} +0 -0
|
@@ -2,18 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
import { k as CliExitError, n as ui, t as fetchLatestNpmPackageVersion } from "./keystroke.mjs";
|
|
4
4
|
import { d as trackProject } from "./dist-BF6r1hfv.mjs";
|
|
5
|
-
import { a as writeProjectConfig, i as readProjectConfig, r as getProjectConfigPath } from "./project-config-
|
|
5
|
+
import { a as writeProjectConfig, i as readProjectConfig, r as getProjectConfigPath } from "./project-config-CsBMT4TL.mjs";
|
|
6
6
|
import { i as requireClient } from "./context-B1L8pZsH.mjs";
|
|
7
|
-
import { t as
|
|
7
|
+
import { i as UnknownSkillAgentError, n as resolveSkillInstallChoices, r as installKeystrokeAgentSkills, t as summarizeSkillInstall } from "./skill-installer-DkRJ6oLi.mjs";
|
|
8
8
|
import { createRequire } from "node:module";
|
|
9
9
|
import { readFileSync } from "node:fs";
|
|
10
10
|
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
11
|
-
import * as path$1 from "node:path";
|
|
12
11
|
import path from "node:path";
|
|
13
|
-
import { fileURLToPath } from "node:url";
|
|
14
12
|
import { cancel, isCancel, text } from "@clack/prompts";
|
|
15
13
|
//#region src/lib/keystroke-scaffold-version-ranges.ts
|
|
16
14
|
const WORKFLOW_CORE_PACKAGE_NAME = "@keystrokehq/core";
|
|
15
|
+
const CONFIG_PACKAGE_NAME = "@keystrokehq/config";
|
|
17
16
|
const FALLBACK_WORKFLOW_CORE_VERSION_RANGE = "latest";
|
|
18
17
|
const DEFAULT_TIMEOUT_MS = 750;
|
|
19
18
|
/**
|
|
@@ -21,12 +20,26 @@ const DEFAULT_TIMEOUT_MS = 750;
|
|
|
21
20
|
* `@keystrokehq/core` version so new projects start with current primitives.
|
|
22
21
|
*/
|
|
23
22
|
async function workflowCoreScaffoldVersionRange(options = {}) {
|
|
24
|
-
|
|
23
|
+
return packageScaffoldVersionRange({
|
|
25
24
|
packageName: WORKFLOW_CORE_PACKAGE_NAME,
|
|
25
|
+
timeoutMs: options.timeoutMs,
|
|
26
|
+
readLocalVersion: options.readLocalCoreVersion ?? readLocalWorkflowCoreVersion
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function configScaffoldVersionRange(options = {}) {
|
|
30
|
+
return packageScaffoldVersionRange({
|
|
31
|
+
packageName: CONFIG_PACKAGE_NAME,
|
|
32
|
+
timeoutMs: options.timeoutMs,
|
|
33
|
+
readLocalVersion: options.readLocalConfigVersion ?? readLocalConfigVersion
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async function packageScaffoldVersionRange(options) {
|
|
37
|
+
const latestVersion = await fetchLatestNpmPackageVersion({
|
|
38
|
+
packageName: options.packageName,
|
|
26
39
|
timeoutMs: options.timeoutMs ?? DEFAULT_TIMEOUT_MS
|
|
27
40
|
});
|
|
28
41
|
if (latestVersion) return `^${latestVersion}`;
|
|
29
|
-
const localVersion =
|
|
42
|
+
const localVersion = options.readLocalVersion();
|
|
30
43
|
if (localVersion) return `^${localVersion}`;
|
|
31
44
|
return FALLBACK_WORKFLOW_CORE_VERSION_RANGE;
|
|
32
45
|
}
|
|
@@ -38,53 +51,13 @@ function readLocalWorkflowCoreVersion() {
|
|
|
38
51
|
} catch {}
|
|
39
52
|
return null;
|
|
40
53
|
}
|
|
41
|
-
|
|
42
|
-
//#region src/commands/init/agents-md.ts
|
|
43
|
-
const AGENTS_FILENAME = "AGENTS.md";
|
|
44
|
-
const AGENTS_BLURB_PACKAGE_PATH = "AGENTS-blurb.md";
|
|
45
|
-
function normalizeLineEndings(value) {
|
|
46
|
-
return value.replace(/\r\n/g, "\n");
|
|
47
|
-
}
|
|
48
|
-
function normalizeBlurb(value) {
|
|
49
|
-
return `${normalizeLineEndings(value).trim()}\n`;
|
|
50
|
-
}
|
|
51
|
-
function resolveMonorepoSkillsBlurbPath() {
|
|
52
|
-
return fileURLToPath(new URL("../../../../../packages/skills/AGENTS-blurb.md", import.meta.url));
|
|
53
|
-
}
|
|
54
|
-
function resolveCliPackageSkillsBlurbPath() {
|
|
55
|
-
const relativePath = import.meta.url.includes("/dist/") ? "../AGENTS-blurb.md" : "../../../AGENTS-blurb.md";
|
|
56
|
-
return fileURLToPath(new URL(relativePath, import.meta.url));
|
|
57
|
-
}
|
|
58
|
-
function resolveBundledKeystrokeAgentsBlurbPath() {
|
|
59
|
-
const require = createRequire(import.meta.url);
|
|
54
|
+
function readLocalConfigVersion() {
|
|
60
55
|
try {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
try {
|
|
65
|
-
return resolveCliPackageSkillsBlurbPath();
|
|
56
|
+
const raw = readFileSync(createRequire(import.meta.url).resolve(`${CONFIG_PACKAGE_NAME}/package.json`), "utf-8");
|
|
57
|
+
const version = JSON.parse(raw).version?.trim();
|
|
58
|
+
if (version) return version;
|
|
66
59
|
} catch {}
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
async function loadKeystrokeAgentsBlurb() {
|
|
70
|
-
try {
|
|
71
|
-
return normalizeBlurb(await readFile(resolveBundledKeystrokeAgentsBlurbPath(), "utf-8"));
|
|
72
|
-
} catch (error) {
|
|
73
|
-
throw new CliExitError("Could not load the bundled Keystroke AGENTS.md blurb. Reinstall the CLI or republish @keystrokehq/cli with AGENTS-blurb.md.", { cause: error });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
async function ensureAgentsMarkdown(targetDir, blurb) {
|
|
77
|
-
const agentsFilePath = path$1.join(targetDir, AGENTS_FILENAME);
|
|
78
|
-
const normalizedBlurb = normalizeBlurb(blurb);
|
|
79
|
-
try {
|
|
80
|
-
const normalizedExisting = normalizeLineEndings(await readFile(agentsFilePath, "utf-8"));
|
|
81
|
-
if (normalizedExisting.includes(normalizedBlurb.trim())) return "skipped";
|
|
82
|
-
await writeFile(agentsFilePath, normalizedExisting.trim().length > 0 ? `${normalizedExisting.trimEnd()}\n\n${normalizedBlurb}` : normalizedBlurb, "utf-8");
|
|
83
|
-
return "updated";
|
|
84
|
-
} catch {
|
|
85
|
-
await writeFile(agentsFilePath, normalizedBlurb, "utf-8");
|
|
86
|
-
return "created";
|
|
87
|
-
}
|
|
60
|
+
return null;
|
|
88
61
|
}
|
|
89
62
|
//#endregion
|
|
90
63
|
//#region src/commands/init/templates/biome-config.ts
|
|
@@ -231,6 +204,7 @@ function createPackageJsonContent(projectName, options) {
|
|
|
231
204
|
lint: "biome check ."
|
|
232
205
|
},
|
|
233
206
|
dependencies: {
|
|
207
|
+
"@keystrokehq/config": options.configVersionRange,
|
|
234
208
|
"@keystrokehq/core": options.workflowCoreVersionRange,
|
|
235
209
|
zod: "^4.3.6"
|
|
236
210
|
},
|
|
@@ -337,12 +311,13 @@ async function promptProjectDescription(options) {
|
|
|
337
311
|
const t = typeof answer === "string" ? answer.trim() : "";
|
|
338
312
|
return t.length > 0 ? t : void 0;
|
|
339
313
|
}
|
|
340
|
-
async function ensureScaffoldPackageJson(targetDir, projectName, workflowCoreRange) {
|
|
314
|
+
async function ensureScaffoldPackageJson(targetDir, projectName, workflowCoreRange, configRange) {
|
|
341
315
|
const pkgPath = path.join(targetDir, "package.json");
|
|
342
316
|
try {
|
|
343
317
|
const raw = await readFile(pkgPath, "utf-8");
|
|
344
318
|
const pkg = JSON.parse(raw);
|
|
345
319
|
pkg.dependencies = pkg.dependencies ?? {};
|
|
320
|
+
pkg.dependencies["@keystrokehq/config"] = configRange;
|
|
346
321
|
pkg.dependencies["@keystrokehq/core"] = workflowCoreRange;
|
|
347
322
|
pkg.dependencies.zod = pkg.dependencies.zod ?? "^4.3.6";
|
|
348
323
|
pkg.devDependencies = pkg.devDependencies ?? {};
|
|
@@ -352,10 +327,35 @@ async function ensureScaffoldPackageJson(targetDir, projectName, workflowCoreRan
|
|
|
352
327
|
await writeFile(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`, "utf-8");
|
|
353
328
|
return "updated";
|
|
354
329
|
} catch {
|
|
355
|
-
await writeFile(pkgPath, `${createPackageJsonContent(projectName, {
|
|
330
|
+
await writeFile(pkgPath, `${createPackageJsonContent(projectName, {
|
|
331
|
+
configVersionRange: configRange,
|
|
332
|
+
workflowCoreVersionRange: workflowCoreRange
|
|
333
|
+
})}\n`, "utf-8");
|
|
356
334
|
return "created";
|
|
357
335
|
}
|
|
358
336
|
}
|
|
337
|
+
async function installAgentSkillsForInit(targetDir, options) {
|
|
338
|
+
try {
|
|
339
|
+
const choices = await resolveSkillInstallChoices({
|
|
340
|
+
agentSlugs: options.agent,
|
|
341
|
+
method: options.method
|
|
342
|
+
});
|
|
343
|
+
const result = await installKeystrokeAgentSkills({
|
|
344
|
+
projectDir: targetDir,
|
|
345
|
+
agentSlugs: choices.agentSlugs,
|
|
346
|
+
method: choices.method
|
|
347
|
+
});
|
|
348
|
+
if (result.ok) {
|
|
349
|
+
summarizeSkillInstall(result, "Installed");
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
if (result.reason === "not_installed") throw new CliExitError("Could not resolve @keystrokehq/skills from the installed CLI. Reinstall the CLI, then run `keystroke skills sync`.");
|
|
353
|
+
throw new CliExitError(`@keystrokehq/skills is installed at ${result.packageRoot} but no skill directories with SKILL.md were found.`);
|
|
354
|
+
} catch (error) {
|
|
355
|
+
if (error instanceof UnknownSkillAgentError) throw new CliExitError(error.message, { cause: error });
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
359
|
async function handleInit(options, ctx) {
|
|
360
360
|
const targetDir = path.resolve(options.path ?? process.cwd());
|
|
361
361
|
const client = requireClient(ctx);
|
|
@@ -404,10 +404,11 @@ async function handleInit(options, ctx) {
|
|
|
404
404
|
ui.hint(`Project "${projectName}" is now tracked.`);
|
|
405
405
|
ui.hint(`Project ID: ${projectId}`);
|
|
406
406
|
await trackProject(targetDir, { name: projectName });
|
|
407
|
-
|
|
408
|
-
if (
|
|
409
|
-
|
|
410
|
-
|
|
407
|
+
await installAgentSkillsForInit(targetDir, options);
|
|
408
|
+
if (options.scaffold) {
|
|
409
|
+
const [workflowCoreVersionRange, configVersionRange] = await Promise.all([workflowCoreScaffoldVersionRange(), configScaffoldVersionRange()]);
|
|
410
|
+
await scaffoldProject(targetDir, projectName, workflowCoreVersionRange, configVersionRange);
|
|
411
|
+
}
|
|
411
412
|
}
|
|
412
413
|
/** Write a file only if it does not already exist. Returns true if written. */
|
|
413
414
|
async function writeIfMissing(filePath, content) {
|
|
@@ -419,15 +420,9 @@ async function writeIfMissing(filePath, content) {
|
|
|
419
420
|
return true;
|
|
420
421
|
}
|
|
421
422
|
}
|
|
422
|
-
async function
|
|
423
|
-
const
|
|
424
|
-
|
|
425
|
-
else if (syncResult.reason === "not_installed") ui.hint("After install completes, run `keystroke skills sync` to copy @keystrokehq/skills for Cursor / Claude Code.");
|
|
426
|
-
else ui.warn(`@keystrokehq/skills is installed at ${syncResult.packageRoot} but no skill directories with SKILL.md were found.`);
|
|
427
|
-
}
|
|
428
|
-
async function scaffoldProject(targetDir, projectName, workflowCoreVersionRange) {
|
|
429
|
-
const pkgAction = await ensureScaffoldPackageJson(targetDir, projectName, workflowCoreVersionRange);
|
|
430
|
-
ui.success(pkgAction === "created" ? `Created package.json (@keystrokehq/core ${workflowCoreVersionRange})` : `Updated package.json (Keystroke deps -> core ${workflowCoreVersionRange})`);
|
|
423
|
+
async function scaffoldProject(targetDir, projectName, workflowCoreVersionRange, configVersionRange) {
|
|
424
|
+
const pkgAction = await ensureScaffoldPackageJson(targetDir, projectName, workflowCoreVersionRange, configVersionRange);
|
|
425
|
+
ui.success(pkgAction === "created" ? `Created package.json (@keystrokehq/core ${workflowCoreVersionRange}, @keystrokehq/config ${configVersionRange})` : `Updated package.json (Keystroke deps -> core ${workflowCoreVersionRange}, config ${configVersionRange})`);
|
|
431
426
|
const files = [
|
|
432
427
|
{
|
|
433
428
|
rel: "vitest.config.ts",
|
|
@@ -479,7 +474,6 @@ async function scaffoldProject(targetDir, projectName, workflowCoreVersionRange)
|
|
|
479
474
|
if (created.length > 0) ui.success(`Scaffolded ${created.length} file(s): ${created.join(", ")}`);
|
|
480
475
|
else ui.hint("Scaffold files already exist — skipped (package.json was still updated).");
|
|
481
476
|
ui.hint("Run `pnpm install` to install dependencies, then `pnpm test` to run tests (or use your lockfile's package manager).");
|
|
482
|
-
await trySyncAgentSkillsAfterScaffold(targetDir);
|
|
483
477
|
}
|
|
484
478
|
//#endregion
|
|
485
479
|
export { handleInit };
|
|
@@ -4,8 +4,8 @@ import { N as throwReportedCliExit, f as ANSI, n as ui, p as style, x as toError
|
|
|
4
4
|
import { d as trackProject } from "./dist-BF6r1hfv.mjs";
|
|
5
5
|
import { i as writeJson } from "./output-CGdYhH0p.mjs";
|
|
6
6
|
import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-B1L8pZsH.mjs";
|
|
7
|
-
import { i as resolveTypeHint } from "./schema-display-
|
|
8
|
-
import { n as resolveLocalWorkflowManifest, r as resolveProjectContext, t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-
|
|
7
|
+
import { i as resolveTypeHint } from "./schema-display-CNqiYBIb.mjs";
|
|
8
|
+
import { n as resolveLocalWorkflowManifest, r as resolveProjectContext, t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-BRUEdPrN.mjs";
|
|
9
9
|
import dayjs from "dayjs";
|
|
10
10
|
//#region src/commands/workflows/inspect/inspect-display.ts
|
|
11
11
|
function formatBuildTimestamp(iso) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
|
|
4
|
-
import { t as createTypedCommand } from "./commander-
|
|
5
|
-
import { t as ConnectionKindValues } from "./api-
|
|
4
|
+
import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
|
|
5
|
+
import { t as ConnectionKindValues } from "./api-jkf0TTgD.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
//#region src/commands/integrations/integrations.command.ts
|
|
8
8
|
const IntegrationsListOptionsSchema = JsonOptionSchema.extend({
|
|
@@ -47,20 +47,20 @@ function createIntegrationsCommand() {
|
|
|
47
47
|
description: "List Keystroke integrations available to your organization",
|
|
48
48
|
schema: IntegrationsListOptionsSchema,
|
|
49
49
|
optionsConfig: INTEGRATIONS_LIST_OPTIONS_CONFIG,
|
|
50
|
-
loadHandler: async () => (await import("./list.handler-
|
|
50
|
+
loadHandler: async () => (await import("./list.handler-BjutlIkE.mjs")).handleIntegrationsList,
|
|
51
51
|
subcommands: [createTypedCommand({
|
|
52
52
|
name: "list",
|
|
53
53
|
description: "List Keystroke integrations available to your organization",
|
|
54
54
|
schema: IntegrationsListOptionsSchema,
|
|
55
55
|
optionsConfig: INTEGRATIONS_LIST_OPTIONS_CONFIG,
|
|
56
|
-
loadHandler: async () => (await import("./list.handler-
|
|
56
|
+
loadHandler: async () => (await import("./list.handler-BjutlIkE.mjs")).handleIntegrationsList
|
|
57
57
|
}), createTypedCommand({
|
|
58
58
|
name: "register",
|
|
59
59
|
description: "Register a workspace provider app for future workspace-authored OAuth support",
|
|
60
60
|
schema: IntegrationsRegisterOptionsSchema,
|
|
61
61
|
optionsConfig: INTEGRATIONS_REGISTER_OPTIONS_CONFIG,
|
|
62
62
|
handler: async (opts, ctx) => {
|
|
63
|
-
const { handleIntegrationsRegister } = await import("./register.handler-
|
|
63
|
+
const { handleIntegrationsRegister } = await import("./register.handler-BAx0IC-u.mjs");
|
|
64
64
|
await handleIntegrationsRegister({
|
|
65
65
|
integrationId: opts.integrationId,
|
|
66
66
|
clientAppCredentialSetId: opts.clientApp,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
|
|
4
|
-
import { t as createTypedCommand } from "./commander-
|
|
4
|
+
import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/commands/invites/invites.command.ts
|
|
7
7
|
const InvitesListOptionsSchema = JsonOptionSchema;
|
|
@@ -19,13 +19,13 @@ function createInvitesCommand() {
|
|
|
19
19
|
description: "Manage invitations for the current user",
|
|
20
20
|
schema: InvitesListOptionsSchema,
|
|
21
21
|
optionsConfig: { ...JSON_OPTION_CONFIG },
|
|
22
|
-
loadHandler: async () => (await import("./list.handler-
|
|
22
|
+
loadHandler: async () => (await import("./list.handler-FlchXrKz.mjs")).handleInvitesList,
|
|
23
23
|
subcommands: [createTypedCommand({
|
|
24
24
|
name: "list",
|
|
25
25
|
description: "List pending invites for the current user",
|
|
26
26
|
schema: InvitesListOptionsSchema,
|
|
27
27
|
optionsConfig: { ...JSON_OPTION_CONFIG },
|
|
28
|
-
loadHandler: async () => (await import("./list.handler-
|
|
28
|
+
loadHandler: async () => (await import("./list.handler-FlchXrKz.mjs")).handleInvitesList
|
|
29
29
|
}), createTypedCommand({
|
|
30
30
|
name: "accept",
|
|
31
31
|
description: "Accept a pending invite",
|
|
@@ -36,7 +36,7 @@ function createInvitesCommand() {
|
|
|
36
36
|
description: "Invite ID to accept",
|
|
37
37
|
key: "inviteId"
|
|
38
38
|
},
|
|
39
|
-
loadHandler: async () => (await import("./accept.handler-
|
|
39
|
+
loadHandler: async () => (await import("./accept.handler-BPwp_UAE.mjs")).handleInvitesAccept
|
|
40
40
|
})]
|
|
41
41
|
});
|
|
42
42
|
}
|
package/dist/keystroke.mjs
CHANGED
|
@@ -13,7 +13,7 @@ import { config } from "dotenv";
|
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
import { log } from "@clack/prompts";
|
|
15
15
|
//#region package.json
|
|
16
|
-
var version = "0.0.
|
|
16
|
+
var version = "0.0.16";
|
|
17
17
|
//#endregion
|
|
18
18
|
//#region src/command-registry.ts
|
|
19
19
|
const ROOT_OPTIONS_WITH_VALUES$1 = new Set([
|
|
@@ -25,84 +25,84 @@ const ROOT_VERSION_FLAGS = new Set(["-V", "--version"]);
|
|
|
25
25
|
const lazyCommandDefinitions = [
|
|
26
26
|
{
|
|
27
27
|
name: "agents",
|
|
28
|
-
loadCommand: async () => (await import("./agents-
|
|
28
|
+
loadCommand: async () => (await import("./agents-CbmvvOAx.mjs")).createAgentsCommand()
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
name: "admin",
|
|
32
|
-
loadCommand: async () => (await import("./admin-
|
|
32
|
+
loadCommand: async () => (await import("./admin-Bb9Hx-gO.mjs")).createAdminCommand()
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
name: "api-keys",
|
|
36
|
-
loadCommand: async () => (await import("./api-keys-
|
|
36
|
+
loadCommand: async () => (await import("./api-keys-DJlyIf10.mjs")).createApiKeysCommand()
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: "auth",
|
|
40
|
-
loadCommand: async () => (await import("./auth-
|
|
40
|
+
loadCommand: async () => (await import("./auth-DpDEkJz7.mjs")).createAuthCommand()
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: "connect",
|
|
44
|
-
loadCommand: async () => (await import("./connect-
|
|
44
|
+
loadCommand: async () => (await import("./connect-DzSNDSmI.mjs")).createConnectCommand()
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
name: "credentials",
|
|
48
|
-
loadCommand: async () => (await import("./credentials-
|
|
48
|
+
loadCommand: async () => (await import("./credentials-VidBoOd7.mjs")).createCredentialsCommand(),
|
|
49
49
|
copyInheritedSettings: true
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
name: "org",
|
|
53
|
-
loadCommand: async () => (await import("./org-
|
|
53
|
+
loadCommand: async () => (await import("./org-DUCts2MV.mjs")).createOrgCommand()
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
name: "deploy",
|
|
57
|
-
loadCommand: async () => (await import("./deploy-
|
|
57
|
+
loadCommand: async () => (await import("./deploy-eshEEiP-.mjs")).createDeployCommand()
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
name: "init",
|
|
61
|
-
loadCommand: async () => (await import("./init-
|
|
61
|
+
loadCommand: async () => (await import("./init-PTwX63_P.mjs")).createInitCommand()
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
name: "integrations",
|
|
65
|
-
loadCommand: async () => (await import("./integrations-
|
|
65
|
+
loadCommand: async () => (await import("./integrations-B0Gv-L0s.mjs")).createIntegrationsCommand()
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
name: "invites",
|
|
69
|
-
loadCommand: async () => (await import("./invites-
|
|
69
|
+
loadCommand: async () => (await import("./invites-Cqi7iyIN.mjs")).createInvitesCommand()
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
name: "logs",
|
|
73
|
-
loadCommand: async () => (await import("./logs-
|
|
73
|
+
loadCommand: async () => (await import("./logs-DUwdYZB-.mjs")).createLogsCommand()
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
name: "listen",
|
|
77
|
-
loadCommand: async () => (await import("./listen-
|
|
77
|
+
loadCommand: async () => (await import("./listen-rHLiCWbn.mjs")).createListenCommand()
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
80
|
name: "projects",
|
|
81
|
-
loadCommand: async () => (await import("./projects-
|
|
81
|
+
loadCommand: async () => (await import("./projects-CbquwUlm.mjs")).createProjectsCommand()
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
name: "runs",
|
|
85
|
-
loadCommand: async () => (await import("./runs-
|
|
85
|
+
loadCommand: async () => (await import("./runs-Bc3zjk7V.mjs")).createRunsCommand()
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
name: "skills",
|
|
89
|
-
loadCommand: async () => (await import("./skills.command-
|
|
89
|
+
loadCommand: async () => (await import("./skills.command-DuL4kLUi.mjs")).createSkillsCommand()
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
name: "sync",
|
|
93
|
-
loadCommand: async () => (await import("./sync-
|
|
93
|
+
loadCommand: async () => (await import("./sync-Pssitj6K.mjs")).createSyncCommand()
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
name: "test",
|
|
97
|
-
loadCommand: async () => (await import("./test-
|
|
97
|
+
loadCommand: async () => (await import("./test-BISghlKg.mjs")).createTestCommand()
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
100
|
name: "upgrade",
|
|
101
|
-
loadCommand: async () => (await import("./upgrade-
|
|
101
|
+
loadCommand: async () => (await import("./upgrade-cH9I_pZq.mjs")).createUpgradeCommand()
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
name: "workflows",
|
|
105
|
-
loadCommand: async () => (await import("./workflows-
|
|
105
|
+
loadCommand: async () => (await import("./workflows-CL1jYSLR.mjs")).createWorkflowsCommand()
|
|
106
106
|
}
|
|
107
107
|
];
|
|
108
108
|
function selectCommandRegistration(argv, commandNames = new Set(lazyCommandDefinitions.map((definition) => definition.name))) {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { N as throwReportedCliExit, a as getProcessEnv, n as ui } from "./keystroke.mjs";
|
|
4
4
|
import { i as writeJson } from "./output-CGdYhH0p.mjs";
|
|
5
5
|
import { i as requireClient } from "./context-B1L8pZsH.mjs";
|
|
6
|
-
import { a as readManifestsFromOutDir } from "./dist-
|
|
7
|
-
import { n as resolveWorkflowsDir } from "./resolve-project-
|
|
6
|
+
import { a as readManifestsFromOutDir } from "./dist-FQYQ2FLm.mjs";
|
|
7
|
+
import { n as resolveWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
|
|
8
8
|
import { t as readCredentialEnvMap } from "./credential-env-map-B2nVJXPn.mjs";
|
|
9
9
|
import { a as loadProjectDotenvFile, i as enrichServerCredentialRow, l as renderCredentialListBlocks, n as buildSyntheticNotOnServerRows, r as collectMergedManifestGroups, t as buildCredentialWorkflowConsumersByGroup } from "./list-enrichment-C6u5eI0j.mjs";
|
|
10
10
|
import dayjs from "dayjs";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { f as ANSI, n as ui, p as style } from "./keystroke.mjs";
|
|
4
4
|
import { s as readStoredProjects } from "./dist-BF6r1hfv.mjs";
|
|
5
|
-
import { i as readProjectConfig } from "./project-config-
|
|
5
|
+
import { i as readProjectConfig } from "./project-config-CsBMT4TL.mjs";
|
|
6
6
|
import { i as writeJson } from "./output-CGdYhH0p.mjs";
|
|
7
7
|
import { access } from "node:fs/promises";
|
|
8
8
|
import Table from "cli-table3";
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
import { N as throwReportedCliExit, f as ANSI, n as ui, p as style } from "./keystroke.mjs";
|
|
4
4
|
import { d as trackProject } from "./dist-BF6r1hfv.mjs";
|
|
5
5
|
import { i as writeJson } from "./output-CGdYhH0p.mjs";
|
|
6
|
-
import { t as requireWorkflowsDir } from "./resolve-project-
|
|
7
|
-
import { t as createSpinnerProgress } from "./spinner-progress-
|
|
8
|
-
import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-
|
|
6
|
+
import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
|
|
7
|
+
import { t as createSpinnerProgress } from "./spinner-progress-DfkMzwGx.mjs";
|
|
8
|
+
import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-C9rQQ4qU.mjs";
|
|
9
9
|
//#region src/commands/workflows/list.handler.ts
|
|
10
10
|
function formatWorkflow(artifact) {
|
|
11
11
|
const name = style(artifact.manifest.name, `${ANSI.bold}${ANSI.cyan}`);
|
|
12
12
|
const filePath = style(artifact.workflow.resolvedFilePath, ANSI.dim);
|
|
13
13
|
const lines = [` ${name}`, ` ${filePath}`];
|
|
14
14
|
if (artifact.manifest.description) lines.push(` ${artifact.manifest.description}`);
|
|
15
|
-
lines.push(` ${style(`$ keystroke workflows
|
|
15
|
+
lines.push(` ${style(`$ keystroke workflows test "${artifact.manifest.name}"`, ANSI.dim)}`);
|
|
16
16
|
return lines.join("\n");
|
|
17
17
|
}
|
|
18
18
|
async function handleWorkflowsList(options, ctx) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
|
|
4
|
-
import { t as createTypedCommand } from "./commander-
|
|
4
|
+
import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/commands/listen/listen.command.ts
|
|
7
7
|
const ListenOptionsSchema = JsonOptionSchema.extend({ timeout: z.coerce.number().int().min(1).default(300) });
|
|
@@ -18,7 +18,7 @@ function createListenCommand() {
|
|
|
18
18
|
description: "Listen for one incoming request and print its body",
|
|
19
19
|
schema: ListenOptionsSchema,
|
|
20
20
|
optionsConfig: LISTEN_OPTIONS_CONFIG,
|
|
21
|
-
loadHandler: async () => (await import("./listen.handler-
|
|
21
|
+
loadHandler: async () => (await import("./listen.handler-B9T58yAj.mjs")).handleListen
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
//#endregion
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { N as throwReportedCliExit, f as ANSI, k as CliExitError, n as ui, p as style, x as toErrorMessage } from "./keystroke.mjs";
|
|
4
4
|
import { a as writeJsonError, i as writeJson } from "./output-CGdYhH0p.mjs";
|
|
5
5
|
import { i as requireClient } from "./context-B1L8pZsH.mjs";
|
|
6
|
-
import { n as sleep } from "./run-polling-
|
|
6
|
+
import { n as sleep } from "./run-polling-CwlzB5-9.mjs";
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
8
8
|
//#region src/lib/clipboard.ts
|
|
9
9
|
function getClipboardCommands() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { t as createTypedCommand } from "./commander-
|
|
3
|
+
import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
//#region src/commands/logs/logs.command.ts
|
|
6
6
|
const LogsOptionsSchema = z.object({ count: z.coerce.number().int().min(1).max(1e3).default(100).describe("Number of log entries to display") });
|
|
@@ -14,13 +14,13 @@ function createLogsCommand() {
|
|
|
14
14
|
description: "Display recent CLI log entries",
|
|
15
15
|
schema: LogsOptionsSchema,
|
|
16
16
|
optionsConfig: LOGS_OPTIONS_CONFIG,
|
|
17
|
-
loadHandler: async () => (await import("./logs.handler-
|
|
17
|
+
loadHandler: async () => (await import("./logs.handler-dcRq-zoc.mjs")).handleLogs,
|
|
18
18
|
subcommands: [createTypedCommand({
|
|
19
19
|
name: "clear",
|
|
20
20
|
description: "Delete the CLI log file",
|
|
21
21
|
schema: z.object({}),
|
|
22
22
|
optionsConfig: {},
|
|
23
|
-
loadHandler: async () => (await import("./clear.handler-
|
|
23
|
+
loadHandler: async () => (await import("./clear.handler-CtOZ4aRn.mjs")).handleLogsClear
|
|
24
24
|
})]
|
|
25
25
|
});
|
|
26
26
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { N as throwReportedCliExit, f as ANSI, n as ui, p as style, x as toErrorMessage } from "./keystroke.mjs";
|
|
4
4
|
import { i as writeJson } from "./output-CGdYhH0p.mjs";
|
|
5
5
|
import { i as requireClient } from "./context-B1L8pZsH.mjs";
|
|
6
|
-
import { n as sleep, t as TERMINAL_STATUSES } from "./run-polling-
|
|
6
|
+
import { n as sleep, t as TERMINAL_STATUSES } from "./run-polling-CwlzB5-9.mjs";
|
|
7
7
|
import Table from "cli-table3";
|
|
8
8
|
//#region src/commands/workflows/_shared/run-query.ts
|
|
9
9
|
async function listRunsByWorkflowRef(client, options) {
|
package/dist/{metadata-layout-C6ed-9dl-DCTTsjiG.mjs → metadata-layout-Bv-B0nHj-CqlcZz_g.mjs}
RENAMED
|
@@ -5738,7 +5738,7 @@ var require_out = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
5738
5738
|
module.exports = FastGlob;
|
|
5739
5739
|
}));
|
|
5740
5740
|
//#endregion
|
|
5741
|
-
//#region ../../packages/workflow-builder/dist/metadata-layout-
|
|
5741
|
+
//#region ../../packages/workflow-builder/dist/metadata-layout-Bv-B0nHj.mjs
|
|
5742
5742
|
var import_out = /* @__PURE__ */ __toESM(require_out(), 1);
|
|
5743
5743
|
createRequire(import.meta.url);
|
|
5744
5744
|
async function computeBuilderFingerprint(packageRoot) {
|