@keystrokehq/cli 0.1.126 → 0.1.128
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/{dist-taKsx2rD.mjs → dist-BXlsFzPI.mjs} +3 -3
- package/dist/{dist-taKsx2rD.mjs.map → dist-BXlsFzPI.mjs.map} +1 -1
- package/dist/dist-DN4wtamO.mjs +3 -0
- package/dist/{dist-B48EHpH2.mjs → dist-Dq6QY3Cs.mjs} +36 -2
- package/dist/{dist-B48EHpH2.mjs.map → dist-Dq6QY3Cs.mjs.map} +1 -1
- package/dist/{dist-DlXOuU_e.mjs → dist-Jqyy3_5E.mjs} +2 -2
- package/dist/{dist-DlXOuU_e.mjs.map → dist-Jqyy3_5E.mjs.map} +1 -1
- package/dist/{dist-JgES5-HY.mjs → dist-n_5_mqiY.mjs} +3 -3
- package/dist/dist-n_5_mqiY.mjs.map +1 -0
- package/dist/index.mjs +1 -1
- package/dist/{maybe-auto-update-CacZiAqV.mjs → maybe-auto-update-D1ZTWXG5.mjs} +2 -2
- package/dist/{maybe-auto-update-CacZiAqV.mjs.map → maybe-auto-update-D1ZTWXG5.mjs.map} +1 -1
- package/dist/{program-CzabcFvC.mjs → program-BGCbhW03.mjs} +75 -22
- package/dist/program-BGCbhW03.mjs.map +1 -0
- package/dist/{run-package-manager-update-CBKJI6Fl.mjs → run-package-manager-update-9llq8RCY.mjs} +2 -2
- package/dist/{run-package-manager-update-CBKJI6Fl.mjs.map → run-package-manager-update-9llq8RCY.mjs.map} +1 -1
- package/dist/skills-bundle/_AGENTS.mcp.md +1 -1
- package/dist/skills-bundle/_AGENTS.md +1 -1
- package/package.json +3 -3
- package/dist/dist-DTRyl-cn.mjs +0 -3
- package/dist/dist-JgES5-HY.mjs.map +0 -1
- package/dist/program-CzabcFvC.mjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, y as getCliConfigDir } from "./run-package-manager-update-
|
|
2
|
+
import { _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, y as getCliConfigDir } from "./run-package-manager-update-9llq8RCY.mjs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { spawnSync } from "node:child_process";
|
|
@@ -136,4 +136,4 @@ async function maybeAutoUpdate(argv) {
|
|
|
136
136
|
//#endregion
|
|
137
137
|
export { maybeAutoUpdate };
|
|
138
138
|
|
|
139
|
-
//# sourceMappingURL=maybe-auto-update-
|
|
139
|
+
//# sourceMappingURL=maybe-auto-update-D1ZTWXG5.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maybe-auto-update-CacZiAqV.mjs","names":[],"sources":["../src/update/update-block-cache.ts","../src/update/maybe-auto-update.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { getCliConfigDir } from \"../config\";\n\nexport type UpdateBlockCache = {\n registryLatest?: string;\n blockedUntil?: string;\n lastFailedAt?: string;\n};\n\nconst CACHE_FILE = \"update-check.json\";\nconst GENERIC_RETRY_MS = 24 * 60 * 60 * 1000;\n\nfunction cachePath(configDir = getCliConfigDir()): string {\n return join(configDir, CACHE_FILE);\n}\n\nexport function readUpdateBlockCache(configDir?: string): UpdateBlockCache {\n const path = cachePath(configDir);\n if (!existsSync(path)) {\n return {};\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as UpdateBlockCache;\n } catch {\n return {};\n }\n}\n\nexport function writeUpdateBlockCache(cache: UpdateBlockCache, configDir?: string): void {\n const dir = configDir ?? getCliConfigDir();\n mkdirSync(dir, { recursive: true });\n writeFileSync(cachePath(dir), `${JSON.stringify(cache, null, 2)}\\n`, \"utf8\");\n}\n\nexport function shouldSkipCachedUpdate(\n cache: UpdateBlockCache,\n registryLatest: string,\n now = Date.now(),\n): boolean {\n if (cache.registryLatest !== registryLatest) {\n return false;\n }\n\n if (cache.blockedUntil) {\n const blockedUntilMs = Date.parse(cache.blockedUntil);\n if (Number.isFinite(blockedUntilMs) && blockedUntilMs > now) {\n return true;\n }\n }\n\n if (cache.lastFailedAt) {\n const lastFailedMs = Date.parse(cache.lastFailedAt);\n if (Number.isFinite(lastFailedMs) && now - lastFailedMs < GENERIC_RETRY_MS) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function clearUpdateBlockCache(configDir?: string): void {\n writeUpdateBlockCache({}, configDir);\n}\n\nexport function recordReleaseAgeBlock(options: {\n registryLatest: string;\n retryAfter?: Date;\n configDir?: string;\n}): void {\n writeUpdateBlockCache(\n {\n registryLatest: options.registryLatest,\n blockedUntil: options.retryAfter?.toISOString(),\n },\n options.configDir,\n );\n}\n\nexport function recordGenericUpdateFailure(registryLatest: string, configDir?: string): void {\n writeUpdateBlockCache(\n {\n registryLatest,\n lastFailedAt: new Date().toISOString(),\n },\n configDir,\n );\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { readCliVersion } from \"../version\";\nimport { isNewerVersion } from \"./compare-version\";\nimport { detectCliInstall } from \"./detect-cli-install\";\nimport { formatReleaseAgeBlockMessage, isReleaseAgeBlock } from \"./detect-release-age-block\";\nimport { fetchLatestCliRelease } from \"./fetch-latest-version\";\nimport {\n computeReleaseAgeRetryAfter,\n readPnpmMinimumReleaseAgeMinutes,\n} from \"./read-pnpm-release-age-minutes\";\nimport { runPackageManagerUpdate } from \"./run-package-manager-update\";\nimport {\n clearUpdateBlockCache,\n readUpdateBlockCache,\n recordGenericUpdateFailure,\n recordReleaseAgeBlock,\n shouldSkipCachedUpdate,\n} from \"./update-block-cache\";\n\nfunction isTopLevelUpdateCommand(args: string[]): boolean {\n const valueFlags = new Set([\"--project\", \"--organization\", \"--dir\"]);\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === undefined) {\n return false;\n }\n\n if (arg === \"--\") {\n return args[i + 1] === \"update\";\n }\n\n if (arg.startsWith(\"-\")) {\n if (\n arg === \"--local\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg.startsWith(\"-V\")\n ) {\n continue;\n }\n\n if (arg.includes(\"=\")) {\n continue;\n }\n\n if (valueFlags.has(arg) || arg.startsWith(\"--\")) {\n i++;\n }\n continue;\n }\n\n return arg === \"update\";\n }\n\n return false;\n}\n\nfunction shouldSkipAutoUpdate(argv: string[]): boolean {\n if (\n process.env.KEYSTROKE_DEV ||\n process.env.KEYSTROKE_SKIP_UPDATE ||\n process.env.KEYSTROKE_UPDATING\n ) {\n return true;\n }\n\n if (process.env.CI === \"true\" || process.env.CI === \"1\") {\n return true;\n }\n\n const args = argv.slice(2);\n if (args.length === 0) {\n return false;\n }\n\n // Explicit `keystroke update` owns CLI + project package updates.\n if (isTopLevelUpdateCommand(args)) {\n return true;\n }\n\n return args.every(\n (arg) =>\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg.startsWith(\"-V\"),\n );\n}\n\nfunction reexecCli(argv: string[]): never {\n const result = spawnSync(process.execPath, argv.slice(1), {\n stdio: \"inherit\",\n env: {\n ...process.env,\n KEYSTROKE_UPDATING: \"1\",\n },\n });\n\n process.exit(result.status ?? 1);\n}\n\nfunction releaseAgeRetryAfter(\n install: NonNullable<ReturnType<typeof detectCliInstall>>,\n publishedAt: string | undefined,\n): Date | undefined {\n if (install.packageManager !== \"pnpm\") {\n return undefined;\n }\n\n return computeReleaseAgeRetryAfter(publishedAt, readPnpmMinimumReleaseAgeMinutes());\n}\n\nexport async function maybeAutoUpdate(argv: string[]): Promise<void> {\n if (shouldSkipAutoUpdate(argv)) {\n return;\n }\n\n const install = detectCliInstall(resolveCliRoot(import.meta.url));\n if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const release = await fetchLatestCliRelease();\n\n if (!release || !isNewerVersion(release.version, currentVersion)) {\n clearUpdateBlockCache();\n return;\n }\n\n const cache = readUpdateBlockCache();\n if (shouldSkipCachedUpdate(cache, release.version)) {\n return;\n }\n\n process.stderr.write(\n `Updating @keystrokehq/cli ${currentVersion} -> ${release.version} via ${install.packageManager}...\\n`,\n );\n\n const result = runPackageManagerUpdate(install);\n const installedVersion = readCliVersion();\n\n if (isNewerVersion(installedVersion, currentVersion)) {\n clearUpdateBlockCache();\n process.stderr.write(`Updated @keystrokehq/cli ${currentVersion} -> ${installedVersion}.\\n`);\n reexecCli(argv);\n }\n\n if (result.ok) {\n clearUpdateBlockCache();\n return;\n }\n\n if (isReleaseAgeBlock(result.output)) {\n const retryAfter = releaseAgeRetryAfter(install, release.publishedAt);\n recordReleaseAgeBlock({\n registryLatest: release.version,\n retryAfter,\n });\n process.stderr.write(\n `${formatReleaseAgeBlockMessage({\n currentVersion,\n availableVersion: release.version,\n retryAfter,\n })}\\n`,\n );\n return;\n }\n\n recordGenericUpdateFailure(release.version);\n process.stderr.write(\"Auto-update failed; continuing with the current version.\\n\");\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"maybe-auto-update-D1ZTWXG5.mjs","names":[],"sources":["../src/update/update-block-cache.ts","../src/update/maybe-auto-update.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { getCliConfigDir } from \"../config\";\n\nexport type UpdateBlockCache = {\n registryLatest?: string;\n blockedUntil?: string;\n lastFailedAt?: string;\n};\n\nconst CACHE_FILE = \"update-check.json\";\nconst GENERIC_RETRY_MS = 24 * 60 * 60 * 1000;\n\nfunction cachePath(configDir = getCliConfigDir()): string {\n return join(configDir, CACHE_FILE);\n}\n\nexport function readUpdateBlockCache(configDir?: string): UpdateBlockCache {\n const path = cachePath(configDir);\n if (!existsSync(path)) {\n return {};\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as UpdateBlockCache;\n } catch {\n return {};\n }\n}\n\nexport function writeUpdateBlockCache(cache: UpdateBlockCache, configDir?: string): void {\n const dir = configDir ?? getCliConfigDir();\n mkdirSync(dir, { recursive: true });\n writeFileSync(cachePath(dir), `${JSON.stringify(cache, null, 2)}\\n`, \"utf8\");\n}\n\nexport function shouldSkipCachedUpdate(\n cache: UpdateBlockCache,\n registryLatest: string,\n now = Date.now(),\n): boolean {\n if (cache.registryLatest !== registryLatest) {\n return false;\n }\n\n if (cache.blockedUntil) {\n const blockedUntilMs = Date.parse(cache.blockedUntil);\n if (Number.isFinite(blockedUntilMs) && blockedUntilMs > now) {\n return true;\n }\n }\n\n if (cache.lastFailedAt) {\n const lastFailedMs = Date.parse(cache.lastFailedAt);\n if (Number.isFinite(lastFailedMs) && now - lastFailedMs < GENERIC_RETRY_MS) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function clearUpdateBlockCache(configDir?: string): void {\n writeUpdateBlockCache({}, configDir);\n}\n\nexport function recordReleaseAgeBlock(options: {\n registryLatest: string;\n retryAfter?: Date;\n configDir?: string;\n}): void {\n writeUpdateBlockCache(\n {\n registryLatest: options.registryLatest,\n blockedUntil: options.retryAfter?.toISOString(),\n },\n options.configDir,\n );\n}\n\nexport function recordGenericUpdateFailure(registryLatest: string, configDir?: string): void {\n writeUpdateBlockCache(\n {\n registryLatest,\n lastFailedAt: new Date().toISOString(),\n },\n configDir,\n );\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { readCliVersion } from \"../version\";\nimport { isNewerVersion } from \"./compare-version\";\nimport { detectCliInstall } from \"./detect-cli-install\";\nimport { formatReleaseAgeBlockMessage, isReleaseAgeBlock } from \"./detect-release-age-block\";\nimport { fetchLatestCliRelease } from \"./fetch-latest-version\";\nimport {\n computeReleaseAgeRetryAfter,\n readPnpmMinimumReleaseAgeMinutes,\n} from \"./read-pnpm-release-age-minutes\";\nimport { runPackageManagerUpdate } from \"./run-package-manager-update\";\nimport {\n clearUpdateBlockCache,\n readUpdateBlockCache,\n recordGenericUpdateFailure,\n recordReleaseAgeBlock,\n shouldSkipCachedUpdate,\n} from \"./update-block-cache\";\n\nfunction isTopLevelUpdateCommand(args: string[]): boolean {\n const valueFlags = new Set([\"--project\", \"--organization\", \"--dir\"]);\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === undefined) {\n return false;\n }\n\n if (arg === \"--\") {\n return args[i + 1] === \"update\";\n }\n\n if (arg.startsWith(\"-\")) {\n if (\n arg === \"--local\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg.startsWith(\"-V\")\n ) {\n continue;\n }\n\n if (arg.includes(\"=\")) {\n continue;\n }\n\n if (valueFlags.has(arg) || arg.startsWith(\"--\")) {\n i++;\n }\n continue;\n }\n\n return arg === \"update\";\n }\n\n return false;\n}\n\nfunction shouldSkipAutoUpdate(argv: string[]): boolean {\n if (\n process.env.KEYSTROKE_DEV ||\n process.env.KEYSTROKE_SKIP_UPDATE ||\n process.env.KEYSTROKE_UPDATING\n ) {\n return true;\n }\n\n if (process.env.CI === \"true\" || process.env.CI === \"1\") {\n return true;\n }\n\n const args = argv.slice(2);\n if (args.length === 0) {\n return false;\n }\n\n // Explicit `keystroke update` owns CLI + project package updates.\n if (isTopLevelUpdateCommand(args)) {\n return true;\n }\n\n return args.every(\n (arg) =>\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg.startsWith(\"-V\"),\n );\n}\n\nfunction reexecCli(argv: string[]): never {\n const result = spawnSync(process.execPath, argv.slice(1), {\n stdio: \"inherit\",\n env: {\n ...process.env,\n KEYSTROKE_UPDATING: \"1\",\n },\n });\n\n process.exit(result.status ?? 1);\n}\n\nfunction releaseAgeRetryAfter(\n install: NonNullable<ReturnType<typeof detectCliInstall>>,\n publishedAt: string | undefined,\n): Date | undefined {\n if (install.packageManager !== \"pnpm\") {\n return undefined;\n }\n\n return computeReleaseAgeRetryAfter(publishedAt, readPnpmMinimumReleaseAgeMinutes());\n}\n\nexport async function maybeAutoUpdate(argv: string[]): Promise<void> {\n if (shouldSkipAutoUpdate(argv)) {\n return;\n }\n\n const install = detectCliInstall(resolveCliRoot(import.meta.url));\n if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const release = await fetchLatestCliRelease();\n\n if (!release || !isNewerVersion(release.version, currentVersion)) {\n clearUpdateBlockCache();\n return;\n }\n\n const cache = readUpdateBlockCache();\n if (shouldSkipCachedUpdate(cache, release.version)) {\n return;\n }\n\n process.stderr.write(\n `Updating @keystrokehq/cli ${currentVersion} -> ${release.version} via ${install.packageManager}...\\n`,\n );\n\n const result = runPackageManagerUpdate(install);\n const installedVersion = readCliVersion();\n\n if (isNewerVersion(installedVersion, currentVersion)) {\n clearUpdateBlockCache();\n process.stderr.write(`Updated @keystrokehq/cli ${currentVersion} -> ${installedVersion}.\\n`);\n reexecCli(argv);\n }\n\n if (result.ok) {\n clearUpdateBlockCache();\n return;\n }\n\n if (isReleaseAgeBlock(result.output)) {\n const retryAfter = releaseAgeRetryAfter(install, release.publishedAt);\n recordReleaseAgeBlock({\n registryLatest: release.version,\n retryAfter,\n });\n process.stderr.write(\n `${formatReleaseAgeBlockMessage({\n currentVersion,\n availableVersion: release.version,\n retryAfter,\n })}\\n`,\n );\n return;\n }\n\n recordGenericUpdateFailure(release.version);\n process.stderr.write(\"Auto-update failed; continuing with the current version.\\n\");\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as CredentialInstanceListResponseSchema, $n as
|
|
3
|
-
import { a as alias, c as event, i as packProjectArtifact, l as flushTelemetry, n as withMcpReadClient, o as captureException, r as mergeFilteredArtifact, s as configureTelemetry, t as mapInParallelBatches, u as shutdownTelemetry } from "./dist-
|
|
4
|
-
import { C as getWebUrl, E as resolvePlatformUrlForWebUrl, S as getPlatformUrl, _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, b as getConfigDir, c as detectManagerFromLockfile, d as installDependencies$1, f as installPlaygroundDependencies, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, l as buildPlaygroundWorkspace, m as resolvePackageManager, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, p as resolveGithubPackagesToken, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, u as detectPackageManager, v as createCliConfig, w as DEFAULT_PLATFORM_URL, x as getEffectiveApiTarget, y as getCliConfigDir } from "./run-package-manager-update-
|
|
2
|
+
import { $ as CredentialInstanceListResponseSchema, $n as UpdateProjectRequestSchema, $t as PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, A as ConnectAuthorizeUrlResponseSchema, An as StartKeystrokeConnectionResultSchema, Ar as detectProjectPackageManagerFromSnapshot, At as ListAgentWorkspaceFilesResponseSchema, B as CreateCustomAppRequestSchema, Bn as TriggerListResponseSchema, Br as resolveDocsMcpUrl, Bt as ListOrganizationsResponseSchema, C as ChannelAccountListResponseSchema, Cn as QueuedRunResponseSchema, Cr as WorkspaceTriggerListResponseSchema, Ct as HistoryRunListResponseSchema, D as CompleteProjectArtifactResponseSchema, Dn as SkillSummaryListResponseSchema, Dr as buildConnectDeeplink, Dt as InviteProjectMembersResponseSchema, E as ChannelDirectoryListResponseSchema, En as SkillSummaryDetailResponseSchema, Er as WorkspaceWorkflowOverviewSchema, Et as InviteProjectMembersRequestSchema, F as CreateBillingPortalRequestSchema, Fn as SubmitMarketingContactRequestSchema, Fr as parseAppSlug, Ft as ListCredentialsPageResponseSchema, G as CreateProjectRequestSchema, Gn as UpdateCredentialInstanceBodySchema, Gt as ListProjectsResponseSchema, H as CreateOrganizationRequestSchema, Hn as TriggerRunListResponseSchema, Hr as slugifyAppName, Ht as ListProjectFilesResponseSchema, I as CreateCredentialInstanceBodySchema, In as SubmitTeamRequestRequestSchema, Ir as parseErrorResponse, It as ListManagedServiceCredentialsResponseSchema, J as CredentialAssignmentListQuerySchema, Jn as UpdateOrganizationMemberRequestSchema, Jt as McpDiscoverResponseSchema, K as CreateProjectResponseSchema, Kn as UpdateCredentialRequestSchema, Kt as ManagedServiceCredentialSchema, L as CreateCredentialsRequestSchema, Ln as TriggerDetailResponseSchema, Lt as ListOrganizationInvitationsResponseSchema, M as ConnectProvidersResponseSchema, Mn as StartMcpOAuthConnectionResultSchema, Mr as listenPortFromPublicUrl, Mt as ListAppsResponseSchema, N as CreateApiKeyRequestSchema, Nn as StartOAuthConnectionInputSchema, Nt as ListChannelPlatformsResponseSchema, O as ConfirmCheckoutRequestSchema, On as SlugAvailabilityResponseSchema, P as CreateApiKeyResponseSchema, Pn as StartOAuthConnectionResultSchema, Pt as ListCredentialsPageQuerySchema, Q as CredentialConsumerListResponseSchema, Qn as UpdateProjectMemberResponseSchema, Qt as PROJECT_PULL_STATE_RELATIVE_PATH, R as CreateCredentialsResponseSchema, Rn as TriggerInvokeInputsSchema, Rt as ListOrganizationMembersPageQuerySchema, S as CatalogAppsPageResponseSchema, Sn as QueuedAgentPromptResponseSchema, Sr as WorkspaceTriggerFileSchema, St as HistoryRunListQuerySchema, T as ChannelConnectionSchema, Tn as RecentResourceListResponseSchema, Tr as WorkspaceTriggerRunListResponseSchema, Tt as InviteOrganizationMembersResponseSchema, U as CreateOrganizationResponseSchema, Un as UpdateAutoTopupRequestSchema, Ut as ListProjectMembersResponseSchema, V as CreateCustomAppResponseSchema, Vn as TriggerRunDetailResponseSchema, Vr as resolvePublicPlatformOrigin, Vt as ListProjectDeploymentsResponseSchema, W as CreateProjectArtifactResponseSchema, Wn as UpdateChannelBindingBodySchema, Wt as ListProjectMetricsResponseSchema, X as CredentialAssignmentRecordSchema, Xn as UpdateOrganizationRequestSchema, Xt as OrganizationSidebarBrandingPatchSchema, Y as CredentialAssignmentListResponseSchema, Yn as UpdateOrganizationMemberResponseSchema, Yt as OpenApiDiscoverResponseSchema, Z as CredentialConsumerListQuerySchema, Zn as UpdateProjectMemberRequestSchema, Zt as OrganizationSidebarBrandingSchema, _ as BindChannelBodySchema, _n as PublicFormMetadataSchema, _r as WorkflowRunListResponseSchema, _t as GetCustomAppResponseSchema, a as AgentSessionListResponseSchema, an as PresignOrgLogoResponseSchema, ar as UserAvatarSchema, at as DownloadActiveProjectArtifactResponseSchema, b as CatalogActionsPageResponseSchema, br as WorkflowSummaryListResponseSchema, bt as HistoryRunCancelResponseSchema, c as AgentTriggerSummaryListResponseSchema, cn as PresignUserAvatarRequestSchema, cr as WorkflowCanvasCredentialBindingsSchema, ct as DuplicateCredentialsResponseSchema, d as AutoTopupSummarySchema, dn as ProjectReachabilityResponseSchema, dr as WorkflowFormResponseSchema, dt as FinalizeCustomAppLogoRequestSchema, en as PresignChatAttachmentRequestSchema, er as UpdateProjectSettingsRequestSchema, et as CredentialInstanceRecordSchema, f as BillingActivityResponseSchema, fn as ProjectResponseSchema, fr as WorkflowFormUpsertBodySchema, ft as FinalizeCustomAppLogoResponseSchema, g as BillingUsageResponseSchema, gn as PromptResponseSchema, gr as WorkflowRunInputsSchema, gt as GetCredentialResponseSchema, h as BillingSummaryResponseSchema, hn as PromptInputSchema, hr as WorkflowRunInputsPutBodySchema, ht as GetAppCatalogEntryResponseSchema, i as AgentSessionDetailResponseSchema, in as PresignOrgLogoRequestSchema, ir as UserAvatarPatchSchema, it as DeclineOrganizationInvitationResponseSchema, j as ConnectManagedServiceCredentialRequestSchema, jn as StartMcpOAuthConnectionInputSchema, jr as isAcceptableInstallExit, jt as ListApiKeysResponseSchema, k as ConfirmCheckoutResponseSchema, kn as StartKeystrokeConnectionInputSchema, kr as deriveCustomAppDisplay, kt as ListAgentMemoryFilesResponseSchema, l as AppSlugAvailabilityResponseSchema, ln as PresignUserAvatarResponseSchema, lr as WorkflowCanvasRunSchema, lt as ExecuteKeystrokeToolRequestSchema, m as BillingRedirectResponseSchema, mn as ProjectSlugAvailabilityResponseSchema, mr as WorkflowRunHooksResponseSchema, mt as GatewayAttachmentRecordSchema, n as AcceptOrganizationInvitationResponseSchema, nn as PresignCustomAppLogoRequestSchema, nr as UploadProjectSourceResponseSchema, nt as DOCS_QUERY_TOOL, o as AgentSummaryDetailResponseSchema, on as PresignProjectSourceRequestSchema, or as UserPreferencesPatchSchema, ot as DownloadActiveProjectSourceResponseSchema, p as BillingInvoiceUrlResponseSchema, pn as ProjectSettingsResponseSchema, pr as WorkflowRunDetailResponseSchema, pt as FormFieldConfigSchema, q as CreateSubscriptionCheckoutRequestSchema, qn as UpdateManagedServiceCredentialRequestSchema, qt as ManagedServiceKindSchema, r as ActiveOrganizationResponseSchema, rn as PresignCustomAppLogoResponseSchema, rr as UpsertGatewayAttachmentBodySchema, rt as DOCS_SEARCH_TOOL, s as AgentSummaryListResponseSchema, sn as PresignProjectSourceResponseSchema, sr as UserPreferencesSchema, st as DuplicateCredentialRequestSchema, t as ACTIVE_ORG_HEADER, tn as PresignChatAttachmentResponseSchema, tr as UploadProjectSourceManifestRequestSchema, u as AssignCredentialBodySchema, un as ProjectPullStateSchema, ur as WorkflowCanvasSchema, v as CLIENT_CHANNEL_HEADER, vn as PublicFormSubmitBodySchema, vr as WorkflowRunResponseSchema, vt as GraphqlDiscoverResponseSchema, w as ChannelConnectionListResponseSchema, wr as WorkspaceTriggerOverviewSchema, wt as InviteOrganizationMembersRequestSchema, x as CatalogAppDetailResponseSchema, xn as PublishedFormSchema, xr as WorkspaceTriggerDetailSchema, xt as HistoryRunDetailResponseSchema, y as CatalogActionDetailResponseSchema, yn as PublicFormSubmitResponseSchema, yr as WorkflowSummaryDetailResponseSchema, yt as HealthResponseSchema, z as CreateCreditsCheckoutRequestSchema, zn as TriggerInvokeResponseSchema, zr as resolveConnectAppSlug, zt as ListOrganizationMembersPageResponseSchema } from "./dist-Dq6QY3Cs.mjs";
|
|
3
|
+
import { a as alias, c as event, i as packProjectArtifact, l as flushTelemetry, n as withMcpReadClient, o as captureException, r as mergeFilteredArtifact, s as configureTelemetry, t as mapInParallelBatches, u as shutdownTelemetry } from "./dist-Jqyy3_5E.mjs";
|
|
4
|
+
import { C as getWebUrl, E as resolvePlatformUrlForWebUrl, S as getPlatformUrl, _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, b as getConfigDir, c as detectManagerFromLockfile, d as installDependencies$1, f as installPlaygroundDependencies, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, l as buildPlaygroundWorkspace, m as resolvePackageManager, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, p as resolveGithubPackagesToken, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, u as detectPackageManager, v as createCliConfig, w as DEFAULT_PLATFORM_URL, x as getEffectiveApiTarget, y as getCliConfigDir } from "./run-package-manager-update-9llq8RCY.mjs";
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
6
|
import { Command } from "commander";
|
|
7
7
|
import { platform, release } from "node:os";
|
|
@@ -5066,6 +5066,33 @@ function createUserAvatarResource(http) {
|
|
|
5066
5066
|
}
|
|
5067
5067
|
};
|
|
5068
5068
|
}
|
|
5069
|
+
function createCustomAppLogoResource(http) {
|
|
5070
|
+
async function presignUpload(contentType) {
|
|
5071
|
+
const body = PresignCustomAppLogoRequestSchema.parse({ contentType });
|
|
5072
|
+
const data = await http.post("/api/apps/logo/presign", { json: body }).json();
|
|
5073
|
+
return PresignCustomAppLogoResponseSchema.parse(data);
|
|
5074
|
+
}
|
|
5075
|
+
async function finalize(storageKey) {
|
|
5076
|
+
const body = FinalizeCustomAppLogoRequestSchema.parse({ storageKey });
|
|
5077
|
+
try {
|
|
5078
|
+
const data = await http.post("/api/apps/logo", { json: body }).json();
|
|
5079
|
+
return FinalizeCustomAppLogoResponseSchema.parse(data);
|
|
5080
|
+
} catch (error) {
|
|
5081
|
+
throw await toPlatformError(error);
|
|
5082
|
+
}
|
|
5083
|
+
}
|
|
5084
|
+
return {
|
|
5085
|
+
/** Upload an image to keystroke-assets and return its public logo URL. */
|
|
5086
|
+
async upload(file) {
|
|
5087
|
+
return presignPutAndFinalize({
|
|
5088
|
+
file,
|
|
5089
|
+
presign: presignUpload,
|
|
5090
|
+
finalize,
|
|
5091
|
+
uploadFailedMessage: "Logo upload failed",
|
|
5092
|
+
toPlatformError
|
|
5093
|
+
});
|
|
5094
|
+
} };
|
|
5095
|
+
}
|
|
5069
5096
|
function createChannelsResource(http) {
|
|
5070
5097
|
const projectPrefix = (projectId) => `/api/projects/${encodeURIComponent(projectId)}`;
|
|
5071
5098
|
return {
|
|
@@ -5199,6 +5226,7 @@ function createPlatformClient(options) {
|
|
|
5199
5226
|
recents: createRecentsResource(http),
|
|
5200
5227
|
userPreferences: createUserPreferencesResource(http),
|
|
5201
5228
|
userAvatar: createUserAvatarResource(http),
|
|
5229
|
+
customAppLogo: createCustomAppLogoResource(http),
|
|
5202
5230
|
organizationSidebarBranding: createOrganizationSidebarBrandingResource(http, { getActiveOrganizationId: resolveActiveOrganizationId }),
|
|
5203
5231
|
teamRequests: createTeamRequestsResource(http),
|
|
5204
5232
|
marketingContact: createMarketingContactResource(http),
|
|
@@ -6291,38 +6319,47 @@ async function handleManagedServicesError(fallback, action) {
|
|
|
6291
6319
|
process.exitCode = 1;
|
|
6292
6320
|
}
|
|
6293
6321
|
}
|
|
6322
|
+
function parseManagedServiceKind(kind) {
|
|
6323
|
+
const parsed = ManagedServiceKindSchema.safeParse(kind);
|
|
6324
|
+
if (!parsed.success) {
|
|
6325
|
+
const validKinds = ManagedServiceKindSchema.options.join(", ");
|
|
6326
|
+
throw new Error(`Invalid --kind "${kind}". Expected one of: ${validKinds}`);
|
|
6327
|
+
}
|
|
6328
|
+
return parsed.data;
|
|
6329
|
+
}
|
|
6330
|
+
function requireNonEmpty(value, label) {
|
|
6331
|
+
const trimmed = value.trim();
|
|
6332
|
+
if (!trimmed) throw new Error(`${label} is required`);
|
|
6333
|
+
return trimmed;
|
|
6334
|
+
}
|
|
6294
6335
|
function registerManagedServicesCommand(program) {
|
|
6295
6336
|
const managedServices = program.command("managed-services").description("Manage organization managed service credentials");
|
|
6296
6337
|
managedServices.command("list").description("List connected managed service credentials").option("--kind <kind>", "Managed service kind", "llm").action(async (options) => {
|
|
6297
6338
|
const config = createCliConfig();
|
|
6298
|
-
const kind = ManagedServiceKindSchema.parse(options.kind);
|
|
6299
6339
|
await handleManagedServicesError("List managed services failed", async () => {
|
|
6300
|
-
await runManagedServicesList(config, kind);
|
|
6340
|
+
await runManagedServicesList(config, parseManagedServiceKind(options.kind));
|
|
6301
6341
|
});
|
|
6302
6342
|
});
|
|
6303
6343
|
managedServices.command("connect").description("Connect a managed service provider with your API key").argument("<provider>", "Provider slug (openai, anthropic, google, groq, xai)").requiredOption("--api-key <key>", "Provider API key").option("--kind <kind>", "Managed service kind", "llm").action(async (provider, options) => {
|
|
6304
6344
|
const config = createCliConfig();
|
|
6305
|
-
const kind = ManagedServiceKindSchema.parse(options.kind);
|
|
6306
6345
|
await handleManagedServicesError("Connect managed service failed", async () => {
|
|
6307
6346
|
await runManagedServicesConnect(config, {
|
|
6308
|
-
kind,
|
|
6309
|
-
provider,
|
|
6310
|
-
apiKey: options.apiKey
|
|
6347
|
+
kind: parseManagedServiceKind(options.kind),
|
|
6348
|
+
provider: requireNonEmpty(provider, "Provider"),
|
|
6349
|
+
apiKey: requireNonEmpty(options.apiKey, "--api-key")
|
|
6311
6350
|
});
|
|
6312
6351
|
});
|
|
6313
6352
|
});
|
|
6314
6353
|
managedServices.command("update").description("Rotate the API key for a connected provider").argument("<provider>", "Provider slug (openai, anthropic, google, groq, xai)").requiredOption("--api-key <key>", "Provider API key").option("--kind <kind>", "Managed service kind", "llm").action(async (provider, options) => {
|
|
6315
6354
|
const config = createCliConfig();
|
|
6316
|
-
const kind = ManagedServiceKindSchema.parse(options.kind);
|
|
6317
6355
|
await handleManagedServicesError("Update managed service failed", async () => {
|
|
6318
|
-
await runManagedServicesUpdate(config, provider, { apiKey: options.apiKey }, kind);
|
|
6356
|
+
await runManagedServicesUpdate(config, requireNonEmpty(provider, "Provider"), { apiKey: requireNonEmpty(options.apiKey, "--api-key") }, parseManagedServiceKind(options.kind));
|
|
6319
6357
|
});
|
|
6320
6358
|
});
|
|
6321
6359
|
managedServices.command("disconnect").description("Disconnect a managed service provider").argument("<provider>", "Provider slug (openai, anthropic, google, groq, xai)").option("--kind <kind>", "Managed service kind", "llm").action(async (provider, options) => {
|
|
6322
6360
|
const config = createCliConfig();
|
|
6323
|
-
const kind = ManagedServiceKindSchema.parse(options.kind);
|
|
6324
6361
|
await handleManagedServicesError("Disconnect managed service failed", async () => {
|
|
6325
|
-
await runManagedServicesDisconnect(config, provider, kind);
|
|
6362
|
+
await runManagedServicesDisconnect(config, requireNonEmpty(provider, "Provider"), parseManagedServiceKind(options.kind));
|
|
6326
6363
|
});
|
|
6327
6364
|
});
|
|
6328
6365
|
}
|
|
@@ -6566,6 +6603,7 @@ function buildCreateRequest(input, template) {
|
|
|
6566
6603
|
source: input.source,
|
|
6567
6604
|
url: input.url,
|
|
6568
6605
|
authKind,
|
|
6606
|
+
...input.logo ? { logo: input.logo } : {},
|
|
6569
6607
|
...input.fields ? { fields: input.fields } : template.credentialFields ? { fields: template.credentialFields } : {},
|
|
6570
6608
|
...template.credentialScheme ? { credentialScheme: template.credentialScheme } : {},
|
|
6571
6609
|
...authKind === "oauth" && template.oauthScopes.length > 0 ? { oauthScopes: template.oauthScopes } : {}
|
|
@@ -6609,16 +6647,29 @@ function parseAuthKind(value) {
|
|
|
6609
6647
|
if (value === "oauth" || value === "api_key") return value;
|
|
6610
6648
|
throw new Error("--auth must be oauth or api_key");
|
|
6611
6649
|
}
|
|
6650
|
+
function parseLogoUrl(value) {
|
|
6651
|
+
const trimmed = value?.trim();
|
|
6652
|
+
if (!trimmed) return;
|
|
6653
|
+
try {
|
|
6654
|
+
const url = new URL(trimmed);
|
|
6655
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") throw new Error("--logo must be an http(s) URL");
|
|
6656
|
+
return url.href;
|
|
6657
|
+
} catch (error) {
|
|
6658
|
+
if (error instanceof Error && error.message.startsWith("--logo")) throw error;
|
|
6659
|
+
throw new Error("--logo must be a valid URL");
|
|
6660
|
+
}
|
|
6661
|
+
}
|
|
6612
6662
|
function parseFieldOverrides(flags) {
|
|
6613
6663
|
if (flags.length === 0) return;
|
|
6614
6664
|
return parseCustomAppFields(flags);
|
|
6615
6665
|
}
|
|
6616
6666
|
function registerAppCreateCommand(app) {
|
|
6617
|
-
app.command("create").description("Create a custom org app").option("--name <name>", "App display name").option("--slug <slug>", "App slug segment (defaults from name)").option("--description <description>", "App description (defaults to --name)").option("--field <field>", "Credential field as key, key:secret, key:optional, or key:secret:optional (repeatable)", collectValues$3, []).option("--mcp <url>", "Create from an MCP server URL (auto-detect auth)").option("--openapi <url>", "Create from an OpenAPI spec URL (auto-detect auth)").option("--graphql <url>", "Create from a GraphQL endpoint URL (auto-detect auth)").option("--auth <kind>", "Override detected auth: oauth or api_key (MCP only)").option("--preview", "Show the request that would be created without creating").action((options) => runCliCommand("Create app failed", async () => {
|
|
6667
|
+
app.command("create").description("Create a custom org app").option("--name <name>", "App display name").option("--slug <slug>", "App slug segment (defaults from name)").option("--description <description>", "App description (defaults to --name)").option("--logo <url>", "Public logo image URL").option("--field <field>", "Credential field as key, key:secret, key:optional, or key:secret:optional (repeatable)", collectValues$3, []).option("--mcp <url>", "Create from an MCP server URL (auto-detect auth)").option("--openapi <url>", "Create from an OpenAPI spec URL (auto-detect auth)").option("--graphql <url>", "Create from a GraphQL endpoint URL (auto-detect auth)").option("--auth <kind>", "Override detected auth: oauth or api_key (MCP only)").option("--preview", "Show the request that would be created without creating").action((options) => runCliCommand("Create app failed", async () => {
|
|
6618
6668
|
const config = createCliConfig();
|
|
6619
6669
|
const client = createCliPlatformClient(config);
|
|
6620
6670
|
await resolveActiveOrganization(config);
|
|
6621
6671
|
const discovery = resolveDiscoverSource(options);
|
|
6672
|
+
const logo = parseLogoUrl(options.logo);
|
|
6622
6673
|
if (discovery) {
|
|
6623
6674
|
const result = await runAppCreateFromUrl(client, {
|
|
6624
6675
|
source: discovery.source,
|
|
@@ -6626,6 +6677,7 @@ function registerAppCreateCommand(app) {
|
|
|
6626
6677
|
name: options.name,
|
|
6627
6678
|
slug: options.slug,
|
|
6628
6679
|
description: options.description,
|
|
6680
|
+
logo,
|
|
6629
6681
|
authKind: parseAuthKind(options.auth),
|
|
6630
6682
|
fields: parseFieldOverrides(options.field),
|
|
6631
6683
|
preview: options.preview ?? false
|
|
@@ -6640,6 +6692,7 @@ function registerAppCreateCommand(app) {
|
|
|
6640
6692
|
slug: options.slug?.trim() || slugifyAppName(name),
|
|
6641
6693
|
description: options.description?.trim() || name,
|
|
6642
6694
|
source: "custom",
|
|
6695
|
+
...logo ? { logo } : {},
|
|
6643
6696
|
fields: parseCustomAppFields(options.field)
|
|
6644
6697
|
}, { preview: options.preview ?? false });
|
|
6645
6698
|
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
@@ -7566,7 +7619,7 @@ function registerBuildCommand(program) {
|
|
|
7566
7619
|
try {
|
|
7567
7620
|
const root = resolveProjectRoot(options.dir);
|
|
7568
7621
|
await ensureSdkCurrent(root);
|
|
7569
|
-
const { buildApp } = await import("./dist-
|
|
7622
|
+
const { buildApp } = await import("./dist-BXlsFzPI.mjs");
|
|
7570
7623
|
await buildApp({ root });
|
|
7571
7624
|
process.stdout.write(`Built ${root}\n`);
|
|
7572
7625
|
} catch (error) {
|
|
@@ -7701,7 +7754,7 @@ async function sleep(ms) {
|
|
|
7701
7754
|
}
|
|
7702
7755
|
async function buildDeployArchive(client, root, projectId, filter) {
|
|
7703
7756
|
if (filter?.length) {
|
|
7704
|
-
const { buildFilteredApp } = await import("./dist-
|
|
7757
|
+
const { buildFilteredApp } = await import("./dist-BXlsFzPI.mjs");
|
|
7705
7758
|
const filtered = await buildFilteredApp({
|
|
7706
7759
|
root,
|
|
7707
7760
|
filter,
|
|
@@ -7723,7 +7776,7 @@ async function buildDeployArchive(client, root, projectId, filter) {
|
|
|
7723
7776
|
sourceFiles: filtered.sourceFiles
|
|
7724
7777
|
};
|
|
7725
7778
|
}
|
|
7726
|
-
const { buildApp } = await import("./dist-
|
|
7779
|
+
const { buildApp } = await import("./dist-BXlsFzPI.mjs");
|
|
7727
7780
|
const { sourceFiles } = await buildApp({
|
|
7728
7781
|
root,
|
|
7729
7782
|
collectSources: true,
|
|
@@ -7854,7 +7907,7 @@ function runtimeChildEnv(parentEnv, overrides) {
|
|
|
7854
7907
|
//#region src/project/bootstrap-run.ts
|
|
7855
7908
|
/** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */
|
|
7856
7909
|
async function resolveBootstrapRun(options) {
|
|
7857
|
-
const { resolveRuntimeBuildArtifact } = await import("./dist-
|
|
7910
|
+
const { resolveRuntimeBuildArtifact } = await import("./dist-BXlsFzPI.mjs");
|
|
7858
7911
|
const loader = pathToFileURL(resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/runtime-loader.mjs")).href;
|
|
7859
7912
|
const bootstrap = resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/standalone-bootstrap.mjs");
|
|
7860
7913
|
const args = [`--import=${loader}`];
|
|
@@ -8004,7 +8057,7 @@ async function runDev(options) {
|
|
|
8004
8057
|
process.on("SIGINT", shutdown);
|
|
8005
8058
|
process.on("SIGTERM", shutdown);
|
|
8006
8059
|
try {
|
|
8007
|
-
const { watchApp } = await import("./dist-
|
|
8060
|
+
const { watchApp } = await import("./dist-BXlsFzPI.mjs");
|
|
8008
8061
|
await watchApp({
|
|
8009
8062
|
root,
|
|
8010
8063
|
clean: false,
|
|
@@ -9066,7 +9119,7 @@ async function runStart(options) {
|
|
|
9066
9119
|
const apiPort = Number(new URL(serverUrl).port || 80);
|
|
9067
9120
|
const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));
|
|
9068
9121
|
ensureNativeDeps(runtimeNodeModules);
|
|
9069
|
-
const { buildApp } = await import("./dist-
|
|
9122
|
+
const { buildApp } = await import("./dist-BXlsFzPI.mjs");
|
|
9070
9123
|
await buildApp({
|
|
9071
9124
|
root,
|
|
9072
9125
|
clean: false
|
|
@@ -9954,7 +10007,7 @@ function createProgram() {
|
|
|
9954
10007
|
async function runCli(argv) {
|
|
9955
10008
|
initCliTelemetry();
|
|
9956
10009
|
try {
|
|
9957
|
-
const { maybeAutoUpdate } = await import("./maybe-auto-update-
|
|
10010
|
+
const { maybeAutoUpdate } = await import("./maybe-auto-update-D1ZTWXG5.mjs");
|
|
9958
10011
|
await maybeAutoUpdate(argv);
|
|
9959
10012
|
await createProgram().parseAsync(argv);
|
|
9960
10013
|
} finally {
|
|
@@ -9964,4 +10017,4 @@ async function runCli(argv) {
|
|
|
9964
10017
|
//#endregion
|
|
9965
10018
|
export { runCli };
|
|
9966
10019
|
|
|
9967
|
-
//# sourceMappingURL=program-
|
|
10020
|
+
//# sourceMappingURL=program-BGCbhW03.mjs.map
|