@keystrokehq/cli 0.1.127 → 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-Bb5k8jH8.mjs → dist-BXlsFzPI.mjs} +3 -3
- package/dist/{dist-Bb5k8jH8.mjs.map → dist-BXlsFzPI.mjs.map} +1 -1
- package/dist/dist-DN4wtamO.mjs +3 -0
- package/dist/{dist-DfSfjvC5.mjs → dist-Dq6QY3Cs.mjs} +13 -2
- package/dist/{dist-DfSfjvC5.mjs.map → dist-Dq6QY3Cs.mjs.map} +1 -1
- package/dist/{dist-FJ8S9RtQ.mjs → dist-Jqyy3_5E.mjs} +2 -2
- package/dist/{dist-FJ8S9RtQ.mjs.map → dist-Jqyy3_5E.mjs.map} +1 -1
- package/dist/{dist-JsDg6E2S.mjs → dist-n_5_mqiY.mjs} +3 -3
- package/dist/{dist-JsDg6E2S.mjs.map → dist-n_5_mqiY.mjs.map} +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{maybe-auto-update-vRL7OVlN.mjs → maybe-auto-update-D1ZTWXG5.mjs} +2 -2
- package/dist/{maybe-auto-update-vRL7OVlN.mjs.map → maybe-auto-update-D1ZTWXG5.mjs.map} +1 -1
- package/dist/{program-C4s4I_yc.mjs → program-BGCbhW03.mjs} +56 -12
- package/dist/program-BGCbhW03.mjs.map +1 -0
- package/dist/{run-package-manager-update-Be3UhxsK.mjs → run-package-manager-update-9llq8RCY.mjs} +2 -2
- package/dist/{run-package-manager-update-Be3UhxsK.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 +1 -1
- package/dist/dist-nlDPo9tY.mjs +0 -3
- package/dist/program-C4s4I_yc.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-vRL7OVlN.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),
|
|
@@ -6575,6 +6603,7 @@ function buildCreateRequest(input, template) {
|
|
|
6575
6603
|
source: input.source,
|
|
6576
6604
|
url: input.url,
|
|
6577
6605
|
authKind,
|
|
6606
|
+
...input.logo ? { logo: input.logo } : {},
|
|
6578
6607
|
...input.fields ? { fields: input.fields } : template.credentialFields ? { fields: template.credentialFields } : {},
|
|
6579
6608
|
...template.credentialScheme ? { credentialScheme: template.credentialScheme } : {},
|
|
6580
6609
|
...authKind === "oauth" && template.oauthScopes.length > 0 ? { oauthScopes: template.oauthScopes } : {}
|
|
@@ -6618,16 +6647,29 @@ function parseAuthKind(value) {
|
|
|
6618
6647
|
if (value === "oauth" || value === "api_key") return value;
|
|
6619
6648
|
throw new Error("--auth must be oauth or api_key");
|
|
6620
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
|
+
}
|
|
6621
6662
|
function parseFieldOverrides(flags) {
|
|
6622
6663
|
if (flags.length === 0) return;
|
|
6623
6664
|
return parseCustomAppFields(flags);
|
|
6624
6665
|
}
|
|
6625
6666
|
function registerAppCreateCommand(app) {
|
|
6626
|
-
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 () => {
|
|
6627
6668
|
const config = createCliConfig();
|
|
6628
6669
|
const client = createCliPlatformClient(config);
|
|
6629
6670
|
await resolveActiveOrganization(config);
|
|
6630
6671
|
const discovery = resolveDiscoverSource(options);
|
|
6672
|
+
const logo = parseLogoUrl(options.logo);
|
|
6631
6673
|
if (discovery) {
|
|
6632
6674
|
const result = await runAppCreateFromUrl(client, {
|
|
6633
6675
|
source: discovery.source,
|
|
@@ -6635,6 +6677,7 @@ function registerAppCreateCommand(app) {
|
|
|
6635
6677
|
name: options.name,
|
|
6636
6678
|
slug: options.slug,
|
|
6637
6679
|
description: options.description,
|
|
6680
|
+
logo,
|
|
6638
6681
|
authKind: parseAuthKind(options.auth),
|
|
6639
6682
|
fields: parseFieldOverrides(options.field),
|
|
6640
6683
|
preview: options.preview ?? false
|
|
@@ -6649,6 +6692,7 @@ function registerAppCreateCommand(app) {
|
|
|
6649
6692
|
slug: options.slug?.trim() || slugifyAppName(name),
|
|
6650
6693
|
description: options.description?.trim() || name,
|
|
6651
6694
|
source: "custom",
|
|
6695
|
+
...logo ? { logo } : {},
|
|
6652
6696
|
fields: parseCustomAppFields(options.field)
|
|
6653
6697
|
}, { preview: options.preview ?? false });
|
|
6654
6698
|
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
@@ -7575,7 +7619,7 @@ function registerBuildCommand(program) {
|
|
|
7575
7619
|
try {
|
|
7576
7620
|
const root = resolveProjectRoot(options.dir);
|
|
7577
7621
|
await ensureSdkCurrent(root);
|
|
7578
|
-
const { buildApp } = await import("./dist-
|
|
7622
|
+
const { buildApp } = await import("./dist-BXlsFzPI.mjs");
|
|
7579
7623
|
await buildApp({ root });
|
|
7580
7624
|
process.stdout.write(`Built ${root}\n`);
|
|
7581
7625
|
} catch (error) {
|
|
@@ -7710,7 +7754,7 @@ async function sleep(ms) {
|
|
|
7710
7754
|
}
|
|
7711
7755
|
async function buildDeployArchive(client, root, projectId, filter) {
|
|
7712
7756
|
if (filter?.length) {
|
|
7713
|
-
const { buildFilteredApp } = await import("./dist-
|
|
7757
|
+
const { buildFilteredApp } = await import("./dist-BXlsFzPI.mjs");
|
|
7714
7758
|
const filtered = await buildFilteredApp({
|
|
7715
7759
|
root,
|
|
7716
7760
|
filter,
|
|
@@ -7732,7 +7776,7 @@ async function buildDeployArchive(client, root, projectId, filter) {
|
|
|
7732
7776
|
sourceFiles: filtered.sourceFiles
|
|
7733
7777
|
};
|
|
7734
7778
|
}
|
|
7735
|
-
const { buildApp } = await import("./dist-
|
|
7779
|
+
const { buildApp } = await import("./dist-BXlsFzPI.mjs");
|
|
7736
7780
|
const { sourceFiles } = await buildApp({
|
|
7737
7781
|
root,
|
|
7738
7782
|
collectSources: true,
|
|
@@ -7863,7 +7907,7 @@ function runtimeChildEnv(parentEnv, overrides) {
|
|
|
7863
7907
|
//#region src/project/bootstrap-run.ts
|
|
7864
7908
|
/** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */
|
|
7865
7909
|
async function resolveBootstrapRun(options) {
|
|
7866
|
-
const { resolveRuntimeBuildArtifact } = await import("./dist-
|
|
7910
|
+
const { resolveRuntimeBuildArtifact } = await import("./dist-BXlsFzPI.mjs");
|
|
7867
7911
|
const loader = pathToFileURL(resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/runtime-loader.mjs")).href;
|
|
7868
7912
|
const bootstrap = resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/standalone-bootstrap.mjs");
|
|
7869
7913
|
const args = [`--import=${loader}`];
|
|
@@ -8013,7 +8057,7 @@ async function runDev(options) {
|
|
|
8013
8057
|
process.on("SIGINT", shutdown);
|
|
8014
8058
|
process.on("SIGTERM", shutdown);
|
|
8015
8059
|
try {
|
|
8016
|
-
const { watchApp } = await import("./dist-
|
|
8060
|
+
const { watchApp } = await import("./dist-BXlsFzPI.mjs");
|
|
8017
8061
|
await watchApp({
|
|
8018
8062
|
root,
|
|
8019
8063
|
clean: false,
|
|
@@ -9075,7 +9119,7 @@ async function runStart(options) {
|
|
|
9075
9119
|
const apiPort = Number(new URL(serverUrl).port || 80);
|
|
9076
9120
|
const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));
|
|
9077
9121
|
ensureNativeDeps(runtimeNodeModules);
|
|
9078
|
-
const { buildApp } = await import("./dist-
|
|
9122
|
+
const { buildApp } = await import("./dist-BXlsFzPI.mjs");
|
|
9079
9123
|
await buildApp({
|
|
9080
9124
|
root,
|
|
9081
9125
|
clean: false
|
|
@@ -9963,7 +10007,7 @@ function createProgram() {
|
|
|
9963
10007
|
async function runCli(argv) {
|
|
9964
10008
|
initCliTelemetry();
|
|
9965
10009
|
try {
|
|
9966
|
-
const { maybeAutoUpdate } = await import("./maybe-auto-update-
|
|
10010
|
+
const { maybeAutoUpdate } = await import("./maybe-auto-update-D1ZTWXG5.mjs");
|
|
9967
10011
|
await maybeAutoUpdate(argv);
|
|
9968
10012
|
await createProgram().parseAsync(argv);
|
|
9969
10013
|
} finally {
|
|
@@ -9973,4 +10017,4 @@ async function runCli(argv) {
|
|
|
9973
10017
|
//#endregion
|
|
9974
10018
|
export { runCli };
|
|
9975
10019
|
|
|
9976
|
-
//# sourceMappingURL=program-
|
|
10020
|
+
//# sourceMappingURL=program-BGCbhW03.mjs.map
|