@keystrokehq/cli 0.0.31 → 0.0.37
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 +25 -4
- package/dist/{accept.handler-DNfIXPSP.mjs → accept.handler-DCsud1s5.mjs} +4 -4
- package/dist/{admin-CJp8XksD.mjs → admin-BaOtHeZ2.mjs} +10 -10
- package/dist/{agent-manifest-De5TCxZq.mjs → agent-manifest-DfWD5tvv.mjs} +17 -27
- package/dist/{agents-G37PM35Z.mjs → agents-BVAVfMR_.mjs} +9 -9
- package/dist/{api-keys-4igNHJ_W.mjs → api-keys-BhEEsHUh.mjs} +6 -6
- package/dist/{api-BK3EhPvs.mjs → api-sWkB_Wta.mjs} +1 -1
- package/dist/{auth-CIOmmV4x.mjs → auth-BnsitjzT.mjs} +6 -6
- package/dist/{auth.handler-CznN_vfz.mjs → auth.handler-W_xk14TL.mjs} +3 -3
- package/dist/authored-workflow-ref-fkHEEVnd.mjs +113 -0
- package/dist/{build-agents-DseUtzd4-CSGpNXur.mjs → build-agents-CUzBnlAG-3ePFZiJ6.mjs} +12 -11
- package/dist/{build-progress-DLM1Bt4T.mjs → build-progress-CM-b6Bby.mjs} +2 -2
- package/dist/{build-tasks-C09SdfjC-BmAVLTtQ.mjs → build-tasks-5eOvI19S-tbN6CRx9.mjs} +4 -4
- package/dist/{build-workflows-BZ_m97Pr-BiyptCrn.mjs → build-workflows-C-gQM3l5-_zcBHE3M.mjs} +14 -9
- package/dist/{build.handler-zHimoO7c.mjs → build.handler-CpAsAsBc.mjs} +12 -9
- package/dist/{clear-cache.handler-BP0K1-uN.mjs → clear-cache.handler-gJpwslkK.mjs} +2 -2
- package/dist/{clear.handler-T27GpgSu.mjs → clear.handler-CDyG6-dk.mjs} +1 -1
- package/dist/{clear.handler-PsA5QKHx.mjs → clear.handler-_sR33Hp8.mjs} +2 -2
- package/dist/{commander-BlrSdFcu.mjs → commander-C6SSTQJ2.mjs} +22 -3
- package/dist/{connect-BbLJhlIA.mjs → connect-27EgnljZ.mjs} +3 -3
- package/dist/{connect.handler-BthE-7Wg.mjs → connect.handler-COM1LnNg.mjs} +5 -5
- package/dist/{context-sgKhRc5v.mjs → context-ebZssGCY.mjs} +4 -4
- package/dist/{create.handler-BovbO_g0.mjs → create.handler-CAWJAGzQ.mjs} +3 -3
- package/dist/{credential-env-map-CRs0llf0.mjs → credential-env-map-5a41jLwM.mjs} +1 -1
- package/dist/{credential-requirements-D0mavK8j-CFMf0Xwu.mjs → credential-requirements-B5Alhu1v-DanlSKnT.mjs} +3 -3
- package/dist/{credential-schema-mismatch-ClQgEVtO.mjs → credential-schema-mismatch-c17ktoNU.mjs} +1 -1
- package/dist/{credentials-CsncZ52a.mjs → credentials-C0ssbMlp.mjs} +10 -10
- package/dist/{credentials-DKrSaaLw.mjs → credentials-DtwLbee6.mjs} +1 -1
- package/dist/current-deployment-workflow-C6x65imE.mjs +20 -0
- package/dist/current.handler-DP1L_hm3.mjs +19 -0
- package/dist/{delete.handler-DkAK396w.mjs → delete.handler-C-5XFkgN.mjs} +2 -2
- package/dist/{deploy-DvPfR9fC.mjs → deploy-BcVQJza8.mjs} +2 -2
- package/dist/{deploy-progress-BsUH7fGE.mjs → deploy-progress-Bt86Yc1r.mjs} +2 -2
- package/dist/{deploy.handler-BW3f2N2G.mjs → deploy.handler-GPS9lxGk.mjs} +16 -16
- package/dist/{diff-utils-Bs--xmoV.mjs → diff-utils-YEUYtSRs.mjs} +1 -1
- package/dist/{diff.handler-BwhsoAg0.mjs → diff.handler-DkM5dhaN.mjs} +15 -9
- package/dist/{dist-Dw7gCE7y.mjs → dist-B5jy238v.mjs} +37 -11
- package/dist/{dist-CTEtWDW4.mjs → dist-BmbFJq8U.mjs} +8 -27
- package/dist/{env.handler-Dks6ZQh-.mjs → env.handler-V_isbSi2.mjs} +52 -29
- package/dist/{error-boundary-0veZ_RDS.mjs → error-boundary-BRxUsPi7.mjs} +3 -3
- package/dist/{iam-command-utils-CSZj4XlH.mjs → iam-command-utils-DNDN0wT6.mjs} +3 -13
- package/dist/{import-module-y0glInUe-DV_3dsU0.mjs → import-module-y0glInUe-EuAWaw9g.mjs} +506 -128
- package/dist/{init-DX08T87c.mjs → init-D1OmmclX.mjs} +8 -3
- package/dist/{init.handler-CzlmkNXi.mjs → init.handler-CUbYlUgP.mjs} +57 -14
- package/dist/{inspect.handler-v9snxDLi.mjs → inspect.handler-BE6coOuW.mjs} +24 -13
- package/dist/{integration-catalog-CiZ62hb_.mjs → integration-catalog-pSmWHFLQ.mjs} +3 -3
- package/dist/{integrations-MEExmqcg.mjs → integrations-DZD5t8n2.mjs} +7 -7
- package/dist/{invites-BuatfJmN.mjs → invites-BuR1H-tA.mjs} +5 -5
- package/dist/{invites.list.handler-CK6mL10z.mjs → invites.list.handler-Dj4a6XOg.mjs} +6 -5
- package/dist/{invites.resend.handler-CKZouK1Z.mjs → invites.resend.handler-DEGF4vlB.mjs} +6 -5
- package/dist/{invites.revoke.handler-H0VI-3sp.mjs → invites.revoke.handler-Dg4ZvlFS.mjs} +6 -5
- package/dist/keystroke.mjs +122 -77
- package/dist/{list-enrichment-DP1wEyBZ.mjs → list-enrichment-dqbkXJzy.mjs} +2 -2
- package/dist/{list.handler-LxZInip2.mjs → list.handler-2g1CZAvB.mjs} +4 -4
- package/dist/{list.handler-BKfGLkFu.mjs → list.handler-7MkJfkak.mjs} +5 -5
- package/dist/list.handler-BTYVIn6z.mjs +39 -0
- package/dist/{list.handler-BiY5NFWd.mjs → list.handler-Bchcr3-e.mjs} +3 -3
- package/dist/list.handler-Choc4SZz.mjs +64 -0
- package/dist/{list.handler-Jk_vK66s.mjs → list.handler-D47C1z3m.mjs} +4 -4
- package/dist/{list.handler-DVnFrlis.mjs → list.handler-DYE48apa.mjs} +7 -7
- package/dist/{list.handler-DIMWZx78.mjs → list.handler-KcCaG3PZ.mjs} +4 -4
- package/dist/list2.handler-BIaIyrQf.mjs +99 -0
- package/dist/{listen-C_7Rgwkb.mjs → listen-CVY-_F29.mjs} +3 -3
- package/dist/{listen.handler-dJgorIzr.mjs → listen.handler-D_nEvXRn.mjs} +4 -4
- package/dist/{logs-B9YMhUGt.mjs → logs-CZ2qnsSH.mjs} +3 -3
- package/dist/{logs.handler-BfjCsAyq.mjs → logs.handler-BRUzZC9Z.mjs} +26 -29
- package/dist/{logs.handler-DGGVPMOX.mjs → logs.handler-Wk6mYyAZ.mjs} +1 -1
- package/dist/{members.add.handler-DSRCRxsI.mjs → members.add.handler-BJ0wr6rP.mjs} +6 -5
- package/dist/{members.invite.handler-BNpHn1dY.mjs → members.invite.handler-DyveDMuq.mjs} +6 -5
- package/dist/{members.list.handler-Bn9LJEPG.mjs → members.list.handler-CyQxH_zS.mjs} +6 -5
- package/dist/{members.remove.handler-Dkr2t_tX.mjs → members.remove.handler-Dtv9PooY.mjs} +6 -5
- package/dist/{members.update.handler-DBtUYuAY.mjs → members.update.handler-CeK-tCjT.mjs} +6 -5
- package/dist/{operations-AWMLs6mE.mjs → operations-CxQlt0S0.mjs} +5 -5
- package/dist/{org-DOH7YHk2.mjs → org-B8MPHJJu.mjs} +35 -28
- package/dist/org-context-BI9OSpbb.mjs +112 -0
- package/dist/org-output-DffU7DKn.mjs +64 -0
- package/dist/{orgs.create.handler-BO70zIdp.mjs → orgs.create.handler-BKvSmkU3.mjs} +4 -4
- package/dist/{orgs.get.handler-BuGg5bc9.mjs → orgs.get.handler-BA-CexIY.mjs} +4 -4
- package/dist/{orgs.list.handler--5HutMkl.mjs → orgs.list.handler-eCEg5kC1.mjs} +4 -4
- package/dist/{output-BWcVRt-T.mjs → output-DnIFEmi5.mjs} +1 -1
- package/dist/package-manager-BP3-q8hh.mjs +162 -0
- package/dist/{paused.handler-DHvxz-cC.mjs → paused.handler-4wKMTKZ-.mjs} +20 -33
- package/dist/{projects-C5GZ5Jrf.mjs → projects-Wu_2fB_x.mjs} +11 -9
- package/dist/{register.handler-CePNU3sP.mjs → register.handler-BvAkXCwE.mjs} +2 -2
- package/dist/{render-credential-Bn15FEUC.mjs → render-credential-D-H1ECDt.mjs} +1 -1
- package/dist/{render-operation-Bc7Wu1sP.mjs → render-operation-VdEPhoII.mjs} +2 -2
- package/dist/{requirements.handler-B5rqCjMu.mjs → requirements.handler-Bab4kBtw.mjs} +7 -7
- package/dist/{resolve-cli-credentials-CAOSVMJP.mjs → resolve-cli-credentials-GVOOedoQ.mjs} +1 -1
- package/dist/{resolve-project-E9mrh_el.mjs → resolve-project-DLKlAy0z.mjs} +24 -8
- package/dist/{run-polling-DawiBus-.mjs → run-polling-C5fI7xTp.mjs} +97 -14
- package/dist/{run.handler-BG7xitEK.mjs → run.handler-BKD5Xu0A.mjs} +42 -30
- package/dist/{runs-swYYBT6C.mjs → runs-CT31dczt.mjs} +4 -4
- package/dist/{schema-display-FvI8QjOQ.mjs → schema-display-sZ6ConJd.mjs} +33 -26
- package/dist/schemas-ClAIoIrX.mjs +281 -0
- package/dist/{search-BEfy2fG9.mjs → search-BeQW_pf4.mjs} +3 -3
- package/dist/{search.handler-V7ObLGjN.mjs → search.handler-BJ-ZlDL4.mjs} +6 -6
- package/dist/{show.handler-C_VDYU91.mjs → show.handler-BrIHUH28.mjs} +4 -4
- package/dist/{show.handler-CsidInW8.mjs → show.handler-Cqe_hCqU.mjs} +5 -5
- package/dist/{show.handler-Wmv0tkxx.mjs → show.handler-DB8xl5FU.mjs} +6 -6
- package/dist/{skill-installer-D6j9IA3Z.mjs → skill-installer-DuMhavmM.mjs} +3 -1
- package/dist/{skills-sync.handler-BAATdT6N.mjs → skills-sync.handler-BGs-_YD9.mjs} +13 -7
- package/dist/{skills.command-0-E8mcYE.mjs → skills.command-DUWn6FbL.mjs} +5 -5
- package/dist/skills.handler-DqLXJepA.mjs +9 -0
- package/dist/{spinner-progress-lrKDs4YF.mjs → spinner-progress-BYxlr3lY.mjs} +1 -1
- package/dist/status.handler-DAId4bVU.mjs +72 -0
- package/dist/{switch.handler-BwYndsP-.mjs → switch.handler-Cd4Yg2n8.mjs} +17 -4
- package/dist/{sync-6fZkIUtn.mjs → sync-DgC4lcxh.mjs} +2 -2
- package/dist/{sync.handler-Ctr-cN9X.mjs → sync.handler-Cm_WtGmH.mjs} +8 -8
- package/dist/{task-BWuIKWh4.mjs → task-DTvLzUkA.mjs} +2 -88
- package/dist/{task-target-build-QllcCfoN.mjs → task-target-build-CtvRyVjH.mjs} +5 -5
- package/dist/task-target-deploy-runner.mjs +6 -6
- package/dist/{test-C8VIZe9V.mjs → test-4V7nh67i.mjs} +5 -5
- package/dist/{test.handler-BCW0YBPd.mjs → test.handler-BdCYcwR4.mjs} +2 -2
- package/dist/{test.handler-DLaxrJ9V.mjs → test.handler-Bo4YTs2Z.mjs} +19 -16
- package/dist/{tool.handler-8qNmgdRe.mjs → tool.handler-CPCrSDq2.mjs} +12 -12
- package/dist/{trigger-artifacts-BcRScRSp-BiD2h6do.mjs → trigger-artifacts-BcRScRSp-BRpU-He5.mjs} +2 -2
- package/dist/{trigger-manifest-C07EM-b2.mjs → trigger-manifest-BVqjDhxU.mjs} +1 -1
- package/dist/{upgrade-DgOcc8IT.mjs → upgrade-2qUOcjxb.mjs} +4 -8
- package/dist/upgrade.handler-PqlKSuUE.mjs +99 -0
- package/dist/{upload.handler-B7xle1oX.mjs → upload.handler-CS-vLpzC.mjs} +9 -9
- package/dist/{users.get.handler-C4t1vXwi.mjs → users.get.handler-CH1c6Lnj.mjs} +4 -4
- package/dist/{users.list.handler-Dvl90grq.mjs → users.list.handler-CxbZFgjO.mjs} +4 -4
- package/dist/{users.set-role.handler-Djw1_VGf.mjs → users.set-role.handler-CBRE-Ws6.mjs} +4 -4
- package/dist/{validate.handler-Drf_lssw.mjs → validate.handler-1d-UmtXB.mjs} +171 -26
- package/dist/{workflow-build-Begvjfq8.mjs → workflow-build-Bm8JoVv4.mjs} +234 -32
- package/dist/{workflow-build-manifest-1sC52TIG.mjs → workflow-build-manifest-CV6bBmDO.mjs} +1 -1
- package/dist/{workflow-bundler-BzHk73PM-muPv1yGG.mjs → workflow-bundler-Bs3zQNQv-Dy7lXxy3.mjs} +15 -4
- package/dist/{workflows-DjMlxuBX.mjs → workflows-ny7rOdeH.mjs} +34 -37
- package/dist/{writer-byNNUjRm-B-on1n6c.mjs → writer-BLg0RuZa-Y6ExdYH9.mjs} +6 -4
- package/package.json +11 -11
- package/dist/current-deployment-workflow-B1VQCYC-.mjs +0 -94
- package/dist/current.handler-BaGaCLzB.mjs +0 -21
- package/dist/list.handler-BEMj3FyH.mjs +0 -76
- package/dist/list.handler-Cq_oQY5B.mjs +0 -52
- package/dist/list.handler-htR9TeiS.mjs +0 -24
- package/dist/package-manager-DT1EhOkS.mjs +0 -61
- package/dist/schemas-D2zfmyC-.mjs +0 -671
- package/dist/skills.handler-DYIQK0Vu.mjs +0 -9
- package/dist/status.handler-Ch_DtyBp.mjs +0 -109
- package/dist/upgrade.handler-DSZuw7-9.mjs +0 -80
- /package/dist/{build-metadata-BB_L45ZS-DSJL7dTy.mjs → build-metadata-BB_L45ZS-DRQsV6JK.mjs} +0 -0
- /package/dist/{deploy-DhCbYFc7.mjs → deploy-BiKBH25R.mjs} +0 -0
- /package/dist/{detect-env-access-CwkOYeYM-COq4U-4Y.mjs → detect-env-access-CwkOYeYM-r4aynBU0.mjs} +0 -0
- /package/dist/{read-credential-keys-77a91T8M-DGK5XTQp.mjs → read-credential-keys-77a91T8M-I07NYwfH.mjs} +0 -0
- /package/dist/{run-polling-fBouPjJ2.mjs → run-polling-1c0ckC1A.mjs} +0 -0
- /package/dist/{schemas-4Mq_bxob.mjs → schemas-8nhXlXWh.mjs} +0 -0
- /package/dist/{task-target-deploy-B_3HPSo2.mjs → task-target-deploy-m9LfE488.mjs} +0 -0
- /package/dist/{types-AlA-ifK9.mjs → types-Cb0eWmUU.mjs} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { t as createTypedCommand } from "./commander-
|
|
4
|
-
import { t as SKILL_INSTALL_METHODS } from "./types-
|
|
3
|
+
import { t as createTypedCommand } from "./commander-C6SSTQJ2.mjs";
|
|
4
|
+
import { t as SKILL_INSTALL_METHODS } from "./types-Cb0eWmUU.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/commands/init/init.command.ts
|
|
7
7
|
const InitOptionsSchema = z.object({
|
|
@@ -9,6 +9,7 @@ const InitOptionsSchema = z.object({
|
|
|
9
9
|
name: z.string().optional().describe("Project name (skips prompt; default: directory basename)"),
|
|
10
10
|
description: z.string().optional().describe("Project description for the API (skips prompt when creating a new project)"),
|
|
11
11
|
scaffold: z.boolean().default(true).describe("Scaffold project files (package.json, vitest.config.ts, etc.)"),
|
|
12
|
+
install: z.boolean().default(true).describe("Install scaffold dependencies after writing project files"),
|
|
12
13
|
agent: z.array(z.string()).optional().describe("Agent target to install Keystroke skills for. Repeat for multiple agents; '*' selects all."),
|
|
13
14
|
method: z.enum(SKILL_INSTALL_METHODS).optional().describe("Skill install method for agent-specific targets")
|
|
14
15
|
});
|
|
@@ -29,6 +30,10 @@ const INIT_OPTIONS_CONFIG = {
|
|
|
29
30
|
flag: "--no-scaffold",
|
|
30
31
|
description: "Skip scaffolding project files (package.json, vitest.config.ts, etc.)"
|
|
31
32
|
},
|
|
33
|
+
install: {
|
|
34
|
+
flag: "--no-install",
|
|
35
|
+
description: "Skip installing scaffold dependencies after writing project files"
|
|
36
|
+
},
|
|
32
37
|
agent: {
|
|
33
38
|
flag: "--agent <agent>",
|
|
34
39
|
description: "Install Keystroke skills for an agent target. Repeat for multiple agents; '*' selects all.",
|
|
@@ -45,7 +50,7 @@ function createInitCommand() {
|
|
|
45
50
|
description: "Initialize a Keystroke project (creates keystroke.config.ts)",
|
|
46
51
|
schema: InitOptionsSchema,
|
|
47
52
|
optionsConfig: INIT_OPTIONS_CONFIG,
|
|
48
|
-
loadHandler: async () => (await import("./init.handler-
|
|
53
|
+
loadHandler: async () => (await import("./init.handler-CUbYlUgP.mjs")).handleInit
|
|
49
54
|
});
|
|
50
55
|
}
|
|
51
56
|
//#endregion
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { i as projects } from "./dist-
|
|
3
|
+
import { N as throwReportedCliExit, i as fetchLatestNpmPackageVersion, k as CliExitError, p as ui } from "./keystroke.mjs";
|
|
4
|
+
import { i as projects } from "./dist-B5jy238v.mjs";
|
|
5
5
|
import { a as writeProjectConfig, i as readProjectConfig, r as getProjectConfigPath } from "./project-config-DudGRFPO.mjs";
|
|
6
|
-
import { i as requireClient } from "./context-
|
|
7
|
-
import {
|
|
6
|
+
import { i as requireClient } from "./context-ebZssGCY.mjs";
|
|
7
|
+
import { n as buildProjectInstallCommand, o as resolvePackageManagerResolution, s as runProjectInstall } from "./package-manager-BP3-q8hh.mjs";
|
|
8
|
+
import { i as UnknownSkillAgentError, n as resolveSkillInstallChoices, r as installKeystrokeAgentSkills, t as summarizeSkillInstall } from "./skill-installer-DuMhavmM.mjs";
|
|
8
9
|
import { createRequire } from "node:module";
|
|
9
10
|
import path from "node:path";
|
|
10
11
|
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
@@ -14,6 +15,7 @@ import { cancel, isCancel, text } from "@clack/prompts";
|
|
|
14
15
|
const WORKFLOW_CORE_PACKAGE_NAME = "@keystrokehq/core";
|
|
15
16
|
const CONFIG_PACKAGE_NAME = "@keystrokehq/config";
|
|
16
17
|
const RUNTIME_PACKAGE_NAME = "@keystrokehq/runtime";
|
|
18
|
+
const TESTING_PACKAGE_NAME = "@keystrokehq/testing";
|
|
17
19
|
const FALLBACK_SCAFFOLD_VERSION_RANGE = "latest";
|
|
18
20
|
const DEFAULT_TIMEOUT_MS = 750;
|
|
19
21
|
/**
|
|
@@ -41,6 +43,13 @@ async function runtimeScaffoldVersionRange(options = {}) {
|
|
|
41
43
|
readLocalVersion: options.readLocalRuntimeVersion ?? readLocalRuntimeVersion
|
|
42
44
|
});
|
|
43
45
|
}
|
|
46
|
+
async function testingScaffoldVersionRange(options = {}) {
|
|
47
|
+
return packageScaffoldVersionRange({
|
|
48
|
+
packageName: TESTING_PACKAGE_NAME,
|
|
49
|
+
timeoutMs: options.timeoutMs,
|
|
50
|
+
readLocalVersion: options.readLocalTestingVersion ?? readLocalTestingVersion
|
|
51
|
+
});
|
|
52
|
+
}
|
|
44
53
|
async function packageScaffoldVersionRange(options) {
|
|
45
54
|
const latestVersion = await fetchLatestNpmPackageVersion({
|
|
46
55
|
packageName: options.packageName,
|
|
@@ -75,6 +84,14 @@ function readLocalRuntimeVersion() {
|
|
|
75
84
|
} catch {}
|
|
76
85
|
return null;
|
|
77
86
|
}
|
|
87
|
+
function readLocalTestingVersion() {
|
|
88
|
+
try {
|
|
89
|
+
const raw = readFileSync(createRequire(import.meta.url).resolve(`${TESTING_PACKAGE_NAME}/package.json`), "utf-8");
|
|
90
|
+
const version = JSON.parse(raw).version?.trim();
|
|
91
|
+
if (version) return version;
|
|
92
|
+
} catch {}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
78
95
|
//#endregion
|
|
79
96
|
//#region src/commands/init/templates/biome-config.ts
|
|
80
97
|
/**
|
|
@@ -206,6 +223,8 @@ describe('hello workflow', () => {
|
|
|
206
223
|
}
|
|
207
224
|
//#endregion
|
|
208
225
|
//#region src/commands/init/templates/package-json.ts
|
|
226
|
+
/** Matches the Keystroke monorepo; Corepack uses this for `pnpm install`. */
|
|
227
|
+
const SCAFFOLD_PNPM_PACKAGE_MANAGER = "pnpm@11.1.1";
|
|
209
228
|
/**
|
|
210
229
|
* Template for generating a package.json for a new Keystroke project.
|
|
211
230
|
*/
|
|
@@ -214,6 +233,7 @@ function createPackageJsonContent(projectName, options) {
|
|
|
214
233
|
name: projectName,
|
|
215
234
|
private: true,
|
|
216
235
|
type: "module",
|
|
236
|
+
...options.packageManagerField ? { packageManager: options.packageManagerField } : {},
|
|
217
237
|
scripts: {
|
|
218
238
|
test: "vitest run",
|
|
219
239
|
typecheck: "tsc --noEmit",
|
|
@@ -227,7 +247,7 @@ function createPackageJsonContent(projectName, options) {
|
|
|
227
247
|
devDependencies: {
|
|
228
248
|
"@biomejs/biome": "2.4.13",
|
|
229
249
|
"@keystrokehq/runtime": options.runtimeVersionRange,
|
|
230
|
-
"@keystrokehq/testing": options.
|
|
250
|
+
"@keystrokehq/testing": options.testingVersionRange,
|
|
231
251
|
vitest: "^4.0.18",
|
|
232
252
|
typescript: "^5.9.3"
|
|
233
253
|
}
|
|
@@ -329,7 +349,7 @@ async function promptProjectDescription(options) {
|
|
|
329
349
|
const t = typeof answer === "string" ? answer.trim() : "";
|
|
330
350
|
return t.length > 0 ? t : void 0;
|
|
331
351
|
}
|
|
332
|
-
async function ensureScaffoldPackageJson(targetDir, projectName, workflowCoreRange, configRange, runtimeRange) {
|
|
352
|
+
async function ensureScaffoldPackageJson(targetDir, projectName, workflowCoreRange, configRange, runtimeRange, testingRange, packageManagerField) {
|
|
333
353
|
const pkgPath = path.join(targetDir, "package.json");
|
|
334
354
|
try {
|
|
335
355
|
const raw = await readFile(pkgPath, "utf-8");
|
|
@@ -340,7 +360,7 @@ async function ensureScaffoldPackageJson(targetDir, projectName, workflowCoreRan
|
|
|
340
360
|
pkg.dependencies.zod = pkg.dependencies.zod ?? "^4.3.6";
|
|
341
361
|
pkg.devDependencies = pkg.devDependencies ?? {};
|
|
342
362
|
pkg.devDependencies["@keystrokehq/runtime"] = runtimeRange;
|
|
343
|
-
pkg.devDependencies["@keystrokehq/testing"] =
|
|
363
|
+
pkg.devDependencies["@keystrokehq/testing"] = testingRange;
|
|
344
364
|
pkg.devDependencies.vitest = pkg.devDependencies.vitest ?? "^4.0.18";
|
|
345
365
|
pkg.devDependencies.typescript = pkg.devDependencies.typescript ?? "^5.9.3";
|
|
346
366
|
if (!pkg.name) pkg.name = projectName;
|
|
@@ -349,7 +369,9 @@ async function ensureScaffoldPackageJson(targetDir, projectName, workflowCoreRan
|
|
|
349
369
|
} catch {
|
|
350
370
|
await writeFile(pkgPath, `${createPackageJsonContent(projectName, {
|
|
351
371
|
configVersionRange: configRange,
|
|
372
|
+
packageManagerField,
|
|
352
373
|
runtimeVersionRange: runtimeRange,
|
|
374
|
+
testingVersionRange: testingRange,
|
|
353
375
|
workflowCoreVersionRange: workflowCoreRange
|
|
354
376
|
})}\n`, "utf-8");
|
|
355
377
|
return "created";
|
|
@@ -427,12 +449,13 @@ async function handleInit(options, ctx) {
|
|
|
427
449
|
await projects.track(targetDir, { name: projectName });
|
|
428
450
|
await installAgentSkillsForInit(targetDir, options);
|
|
429
451
|
if (options.scaffold) {
|
|
430
|
-
const [workflowCoreVersionRange, configVersionRange, runtimeVersionRange] = await Promise.all([
|
|
452
|
+
const [workflowCoreVersionRange, configVersionRange, runtimeVersionRange, testingVersionRange] = await Promise.all([
|
|
431
453
|
workflowCoreScaffoldVersionRange(),
|
|
432
454
|
configScaffoldVersionRange(),
|
|
433
|
-
runtimeScaffoldVersionRange()
|
|
455
|
+
runtimeScaffoldVersionRange(),
|
|
456
|
+
testingScaffoldVersionRange()
|
|
434
457
|
]);
|
|
435
|
-
await scaffoldProject(targetDir, projectName, workflowCoreVersionRange, configVersionRange, runtimeVersionRange);
|
|
458
|
+
await scaffoldProject(targetDir, projectName, workflowCoreVersionRange, configVersionRange, runtimeVersionRange, testingVersionRange, options.install !== false);
|
|
436
459
|
}
|
|
437
460
|
}
|
|
438
461
|
/** Write a file only if it does not already exist. Returns true if written. */
|
|
@@ -445,9 +468,11 @@ async function writeIfMissing(filePath, content) {
|
|
|
445
468
|
return true;
|
|
446
469
|
}
|
|
447
470
|
}
|
|
448
|
-
async function scaffoldProject(targetDir, projectName, workflowCoreVersionRange, configVersionRange, runtimeVersionRange) {
|
|
449
|
-
const
|
|
450
|
-
|
|
471
|
+
async function scaffoldProject(targetDir, projectName, workflowCoreVersionRange, configVersionRange, runtimeVersionRange, testingVersionRange, shouldInstall) {
|
|
472
|
+
const packageManagerResolution = await resolvePackageManagerResolution({ cwd: targetDir });
|
|
473
|
+
const { packageManager } = packageManagerResolution;
|
|
474
|
+
const pkgAction = await ensureScaffoldPackageJson(targetDir, projectName, workflowCoreVersionRange, configVersionRange, runtimeVersionRange, testingVersionRange, packageManager === "pnpm" && packageManagerResolution.source === "preferred" ? SCAFFOLD_PNPM_PACKAGE_MANAGER : void 0);
|
|
475
|
+
ui.success(pkgAction === "created" ? `Created package.json (@keystrokehq/core ${workflowCoreVersionRange}, @keystrokehq/config ${configVersionRange}, @keystrokehq/runtime ${runtimeVersionRange}, @keystrokehq/testing ${testingVersionRange})` : `Updated package.json (Keystroke deps -> core ${workflowCoreVersionRange}, config ${configVersionRange}, runtime ${runtimeVersionRange}, testing ${testingVersionRange})`);
|
|
451
476
|
const files = [
|
|
452
477
|
{
|
|
453
478
|
rel: "vitest.config.ts",
|
|
@@ -498,7 +523,25 @@ async function scaffoldProject(targetDir, projectName, workflowCoreVersionRange,
|
|
|
498
523
|
}
|
|
499
524
|
if (created.length > 0) ui.success(`Scaffolded ${created.length} file(s): ${created.join(", ")}`);
|
|
500
525
|
else ui.hint("Scaffold files already exist — skipped (package.json was still updated).");
|
|
501
|
-
|
|
526
|
+
if (shouldInstall) await installScaffoldDependencies(targetDir, packageManager);
|
|
527
|
+
else {
|
|
528
|
+
const installCommand = buildProjectInstallCommand(packageManager);
|
|
529
|
+
const renderedCommand = [installCommand.command, ...installCommand.args].join(" ");
|
|
530
|
+
ui.hint(`Skipped dependency install. Run \`${renderedCommand}\` when ready.`);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
async function installScaffoldDependencies(targetDir, packageManager) {
|
|
534
|
+
const installCommand = buildProjectInstallCommand(packageManager);
|
|
535
|
+
const renderedCommand = [installCommand.command, ...installCommand.args].join(" ");
|
|
536
|
+
ui.header(`Installing dependencies with ${packageManager}...`);
|
|
537
|
+
ui.hint(renderedCommand);
|
|
538
|
+
const exitCode = await runProjectInstall({
|
|
539
|
+
cwd: targetDir,
|
|
540
|
+
packageManager
|
|
541
|
+
});
|
|
542
|
+
if (exitCode !== 0) throwReportedCliExit(`Dependency install failed with exit code ${exitCode}.`);
|
|
543
|
+
ui.success("Dependencies installed.");
|
|
544
|
+
ui.hint(`Run \`${packageManager} test\` to run the scaffolded workflow tests.`);
|
|
502
545
|
}
|
|
503
546
|
//#endregion
|
|
504
547
|
export { handleInit };
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { i as projects } from "./dist-
|
|
5
|
-
import { i as writeJson } from "./output-
|
|
6
|
-
import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
3
|
+
import { N as throwReportedCliExit, n as style, p as ui, t as ANSI, x as toErrorMessage } from "./keystroke.mjs";
|
|
4
|
+
import { i as projects } from "./dist-B5jy238v.mjs";
|
|
5
|
+
import { i as writeJson } from "./output-DnIFEmi5.mjs";
|
|
6
|
+
import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-ebZssGCY.mjs";
|
|
7
|
+
import { s as resolveTypeHint } from "./schema-display-sZ6ConJd.mjs";
|
|
8
|
+
import { t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-C6x65imE.mjs";
|
|
9
|
+
import { r as requireLocalWorkflowManifest, t as WORKFLOW_ID_COMMANDS } from "./authored-workflow-ref-fkHEEVnd.mjs";
|
|
9
10
|
import dayjs from "dayjs";
|
|
10
11
|
//#region src/commands/workflows/inspect/inspect-display.ts
|
|
11
12
|
function formatBuildTimestamp(iso) {
|
|
@@ -19,6 +20,7 @@ function renderManifestInspect(manifest, source, version) {
|
|
|
19
20
|
ui.br();
|
|
20
21
|
}
|
|
21
22
|
ui.text(style(` ${manifest.name}`, `${ANSI.bold}${ANSI.cyan}`));
|
|
23
|
+
if (manifest.id) ui.text(style(` id: ${manifest.id}`, ANSI.dim));
|
|
22
24
|
if (manifest.description) ui.text(style(` ${manifest.description}`, ANSI.dim));
|
|
23
25
|
ui.br();
|
|
24
26
|
ui.text(style(" Input", ANSI.bold));
|
|
@@ -102,9 +104,13 @@ async function handleWorkflowsInspect(options, ctx) {
|
|
|
102
104
|
return handleInspectLocal(options, ctx);
|
|
103
105
|
}
|
|
104
106
|
async function handleInspectLocal(options, ctx) {
|
|
105
|
-
const resolved = await
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
const resolved = await requireLocalWorkflowManifest({
|
|
108
|
+
authoredWorkflowId: options.workflow,
|
|
109
|
+
path: options.path,
|
|
110
|
+
command: WORKFLOW_ID_COMMANDS.inspect,
|
|
111
|
+
jsonMode: ctx.jsonMode
|
|
112
|
+
});
|
|
113
|
+
projects.track(resolved.workflowsDir);
|
|
108
114
|
if (ctx.jsonMode) {
|
|
109
115
|
writeJson(resolved.manifest);
|
|
110
116
|
return;
|
|
@@ -112,7 +118,12 @@ async function handleInspectLocal(options, ctx) {
|
|
|
112
118
|
renderManifestInspect(resolved.manifest, "local");
|
|
113
119
|
}
|
|
114
120
|
async function handleInspectDeployed(options, ctx) {
|
|
115
|
-
const resolved = await
|
|
121
|
+
const resolved = await requireLocalWorkflowManifest({
|
|
122
|
+
authoredWorkflowId: options.workflow,
|
|
123
|
+
path: options.path,
|
|
124
|
+
command: WORKFLOW_ID_COMMANDS.inspectDeployed,
|
|
125
|
+
jsonMode: ctx.jsonMode
|
|
126
|
+
});
|
|
116
127
|
projects.track(resolved.workflowsDir);
|
|
117
128
|
const client = requireClient(ctx);
|
|
118
129
|
await assertProjectConfigMatchesAuthenticatedOrg(client, { organizationId: resolved.organizationId });
|
|
@@ -132,15 +143,15 @@ async function handleInspectDeployed(options, ctx) {
|
|
|
132
143
|
throwReportedCliExit("This project has no current deployment.");
|
|
133
144
|
}
|
|
134
145
|
if (deploymentLookup.status === "missingWorkflow") {
|
|
135
|
-
ui.error(`Workflow "${
|
|
146
|
+
ui.error(`Workflow "${resolved.authoredWorkflowId}" is not part of the current deployment.`);
|
|
136
147
|
ui.hint("Run `keystroke deploy` to include it in the current deployment, then try again.");
|
|
137
|
-
throwReportedCliExit(`Workflow "${
|
|
148
|
+
throwReportedCliExit(`Workflow "${resolved.authoredWorkflowId}" is not part of the current deployment.`);
|
|
138
149
|
}
|
|
139
150
|
if (ctx.jsonMode) {
|
|
140
151
|
writeJson(deploymentLookup.workflow.manifest);
|
|
141
152
|
return;
|
|
142
153
|
}
|
|
143
|
-
renderManifestInspect(deploymentLookup.workflow.manifest, "deployed");
|
|
154
|
+
renderManifestInspect(deploymentLookup.workflow.manifest, "deployed", deploymentLookup.workflow.deploymentNumber);
|
|
144
155
|
}
|
|
145
156
|
//#endregion
|
|
146
157
|
export { handleWorkflowsInspect };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { a as writeJsonError } from "./output-
|
|
5
|
-
import { i as requireClient } from "./context-
|
|
3
|
+
import { N as throwReportedCliExit, b as isNetworkError, g as REAUTH_HINT, k as CliExitError, p as ui, x as toErrorMessage, y as isAuthError } from "./keystroke.mjs";
|
|
4
|
+
import { a as writeJsonError } from "./output-DnIFEmi5.mjs";
|
|
5
|
+
import { i as requireClient } from "./context-ebZssGCY.mjs";
|
|
6
6
|
//#region src/lib/integration-catalog.ts
|
|
7
7
|
const catalogCache = /* @__PURE__ */ new WeakMap();
|
|
8
8
|
function buildView(entries) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-
|
|
4
|
-
import { t as createTypedCommand } from "./commander-
|
|
5
|
-
import { t as ConnectionKindValues } from "./api-
|
|
3
|
+
import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-DnIFEmi5.mjs";
|
|
4
|
+
import { t as createTypedCommand } from "./commander-C6SSTQJ2.mjs";
|
|
5
|
+
import { t as ConnectionKindValues } from "./api-sWkB_Wta.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
//#region ../../packages/shared-types/src/official-providers/index.ts
|
|
8
8
|
const officialProviderRegistry = {
|
|
@@ -158,14 +158,14 @@ function createIntegrationsCommand() {
|
|
|
158
158
|
description: "List Keystroke integrations available to your organization",
|
|
159
159
|
schema: IntegrationsListOptionsSchema,
|
|
160
160
|
optionsConfig: INTEGRATIONS_LIST_OPTIONS_CONFIG,
|
|
161
|
-
loadHandler: async () => (await import("./list.handler-
|
|
161
|
+
loadHandler: async () => (await import("./list.handler-D47C1z3m.mjs")).handleIntegrationsList,
|
|
162
162
|
subcommands: [
|
|
163
163
|
createTypedCommand({
|
|
164
164
|
name: "list",
|
|
165
165
|
description: "List Keystroke integrations available to your organization",
|
|
166
166
|
schema: IntegrationsListOptionsSchema,
|
|
167
167
|
optionsConfig: INTEGRATIONS_LIST_OPTIONS_CONFIG,
|
|
168
|
-
loadHandler: async () => (await import("./list.handler-
|
|
168
|
+
loadHandler: async () => (await import("./list.handler-D47C1z3m.mjs")).handleIntegrationsList
|
|
169
169
|
}),
|
|
170
170
|
createTypedCommand({
|
|
171
171
|
name: "show",
|
|
@@ -177,7 +177,7 @@ function createIntegrationsCommand() {
|
|
|
177
177
|
description: "Integration id, e.g. aws-s3",
|
|
178
178
|
key: "id"
|
|
179
179
|
},
|
|
180
|
-
loadHandler: async () => (await import("./show.handler-
|
|
180
|
+
loadHandler: async () => (await import("./show.handler-BrIHUH28.mjs")).handleIntegrationShow
|
|
181
181
|
}),
|
|
182
182
|
createTypedCommand({
|
|
183
183
|
name: "register",
|
|
@@ -185,7 +185,7 @@ function createIntegrationsCommand() {
|
|
|
185
185
|
schema: IntegrationsRegisterOptionsSchema,
|
|
186
186
|
optionsConfig: INTEGRATIONS_REGISTER_OPTIONS_CONFIG,
|
|
187
187
|
handler: async (opts, ctx) => {
|
|
188
|
-
const { handleIntegrationsRegister } = await import("./register.handler-
|
|
188
|
+
const { handleIntegrationsRegister } = await import("./register.handler-BvAkXCwE.mjs");
|
|
189
189
|
await handleIntegrationsRegister({
|
|
190
190
|
integrationId: opts.integrationId,
|
|
191
191
|
clientAppCredentialSetId: opts.clientApp,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-
|
|
4
|
-
import { t as createTypedCommand } from "./commander-
|
|
3
|
+
import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-DnIFEmi5.mjs";
|
|
4
|
+
import { t as createTypedCommand } from "./commander-C6SSTQJ2.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-2g1CZAvB.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-2g1CZAvB.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-DCsud1s5.mjs")).handleInvitesAccept
|
|
40
40
|
})]
|
|
41
41
|
});
|
|
42
42
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { i as writeJson } from "./output-
|
|
5
|
-
import { i as requireClient } from "./context-
|
|
6
|
-
import {
|
|
3
|
+
import { p as ui } from "./keystroke.mjs";
|
|
4
|
+
import { i as writeJson } from "./output-DnIFEmi5.mjs";
|
|
5
|
+
import { i as requireClient } from "./context-ebZssGCY.mjs";
|
|
6
|
+
import { n as isIamJsonMode, t as handleIamError } from "./iam-command-utils-DNDN0wT6.mjs";
|
|
7
|
+
import { s as requireOrganizationId } from "./org-context-BI9OSpbb.mjs";
|
|
7
8
|
import Table from "cli-table3";
|
|
8
9
|
//#region src/commands/org/invites.list.handler.ts
|
|
9
10
|
async function handleOrgInvitesList(_options, ctx) {
|
|
10
11
|
const client = requireClient(ctx);
|
|
11
|
-
const organizationId = requireOrganizationId(ctx);
|
|
12
|
+
const organizationId = await requireOrganizationId(ctx);
|
|
12
13
|
try {
|
|
13
14
|
const result = await client.organizations.invites.list(organizationId);
|
|
14
15
|
if (isIamJsonMode(_options, ctx)) {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { i as writeJson } from "./output-
|
|
5
|
-
import { i as requireClient } from "./context-
|
|
6
|
-
import {
|
|
3
|
+
import { p as ui } from "./keystroke.mjs";
|
|
4
|
+
import { i as writeJson } from "./output-DnIFEmi5.mjs";
|
|
5
|
+
import { i as requireClient } from "./context-ebZssGCY.mjs";
|
|
6
|
+
import { n as isIamJsonMode, t as handleIamError } from "./iam-command-utils-DNDN0wT6.mjs";
|
|
7
|
+
import { s as requireOrganizationId } from "./org-context-BI9OSpbb.mjs";
|
|
7
8
|
//#region src/commands/org/invites.resend.handler.ts
|
|
8
9
|
async function handleOrgInvitesResend(options, ctx) {
|
|
9
10
|
const client = requireClient(ctx);
|
|
10
|
-
const organizationId = requireOrganizationId(ctx);
|
|
11
|
+
const organizationId = await requireOrganizationId(ctx);
|
|
11
12
|
try {
|
|
12
13
|
const result = await client.organizations.invites.resend(organizationId, options.inviteId);
|
|
13
14
|
if (isIamJsonMode(options, ctx)) {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { i as writeJson } from "./output-
|
|
5
|
-
import { i as requireClient } from "./context-
|
|
6
|
-
import {
|
|
3
|
+
import { p as ui } from "./keystroke.mjs";
|
|
4
|
+
import { i as writeJson } from "./output-DnIFEmi5.mjs";
|
|
5
|
+
import { i as requireClient } from "./context-ebZssGCY.mjs";
|
|
6
|
+
import { n as isIamJsonMode, r as requireConfirmation, t as handleIamError } from "./iam-command-utils-DNDN0wT6.mjs";
|
|
7
|
+
import { s as requireOrganizationId } from "./org-context-BI9OSpbb.mjs";
|
|
7
8
|
//#region src/commands/org/invites.revoke.handler.ts
|
|
8
9
|
async function handleOrgInvitesRevoke(options, ctx) {
|
|
9
10
|
const client = requireClient(ctx);
|
|
10
|
-
const organizationId = requireOrganizationId(ctx);
|
|
11
|
+
const organizationId = await requireOrganizationId(ctx);
|
|
11
12
|
requireConfirmation({
|
|
12
13
|
confirmed: options.confirm,
|
|
13
14
|
message: "Revoking an invite prevents it from being accepted.",
|