@keystrokehq/cli 0.1.32 → 0.1.34

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/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $ as GetCustomAppResponseSchema, $t as SlugAvailabilityResponseSchema, A as CreateCustomAppRequestSchema, An as WorkflowCanvasRunSchema, At as PollRunResponseSchema, B as CredentialConsumerListQuerySchema, Bn as WorkspaceTriggerDetailSchema, Bt as ProjectReachabilityResponseSchema, C as ConnectAuthorizeUrlResponseSchema, Cn as UploadProjectSourceResponseSchema, Ct as ListProjectsResponseSchema, D as CreateCredentialInstanceBodySchema, Dn as UserPreferencesPatchSchema, Dt as OrganizationSidebarBrandingSchema, E as CreateApiKeyResponseSchema, En as UserAvatarSchema, Et as OrganizationSidebarBrandingPatchSchema, F as CreateProjectRequestSchema, Fn as WorkflowRunInputsSchema, Ft as PresignProjectSourceRequestSchema, G as DOCS_QUERY_TOOL, Gn as WorkspaceWorkflowOverviewSchema, Gt as PromptResponseSchema, H as CredentialInstanceListResponseSchema, Hn as WorkspaceTriggerListResponseSchema, Ht as ProjectSettingsResponseSchema, I as CreateProjectResponseSchema, In as WorkflowRunListResponseSchema, It as PresignProjectSourceResponseSchema, J as DownloadActiveProjectArtifactResponseSchema, Jn as deriveCustomAppDisplay, Jt as QueuedRunResponseSchema, K as DOCS_SEARCH_TOOL, Kn as buildConnectDeeplink, L as CredentialAssignmentListQuerySchema, Ln as WorkflowRunResponseSchema, Lt as PresignUserAvatarRequestSchema, M as CreateOrganizationRequestSchema, Mn as WorkflowRunDetailResponseSchema, Mt as PresignChatAttachmentResponseSchema, N as CreateOrganizationResponseSchema, Nn as WorkflowRunHooksResponseSchema, Nt as PresignOrgLogoRequestSchema, O as CreateCredentialsRequestSchema, On as UserPreferencesSchema, Ot as PROJECT_PULL_STATE_RELATIVE_PATH, P as CreateProjectArtifactResponseSchema, Pn as WorkflowRunInputsPutBodySchema, Pt as PresignOrgLogoResponseSchema, Q as GetCredentialResponseSchema, Qt as SkillSummaryListResponseSchema, R as CredentialAssignmentListResponseSchema, Rn as WorkflowSummaryDetailResponseSchema, Rt as PresignUserAvatarResponseSchema, S as CompleteProjectArtifactResponseSchema, Sn as UploadProjectSourceManifestRequestSchema, St as ListProjectMetricsResponseSchema, T as CreateApiKeyRequestSchema, Tn as UserAvatarPatchSchema, Tt as OpenApiDiscoverResponseSchema, U as CredentialInstanceRecordSchema, Un as WorkspaceTriggerOverviewSchema, Ut as ProjectSlugAvailabilityResponseSchema, V as CredentialConsumerListResponseSchema, Vn as WorkspaceTriggerFileSchema, Vt as ProjectResponseSchema, Wn as WorkspaceTriggerRunListResponseSchema, Wt as PromptInputSchema, X as ErrorResponseSchema, Xn as isAcceptableInstallExit, Xt as RecentResourceListResponseSchema, Y as DownloadActiveProjectSourceResponseSchema, Yn as detectProjectPackageManagerFromSnapshot, Z as GatewayAttachmentRecordSchema, Zn as listenPortFromPublicUrl, Zt as SkillSummaryDetailResponseSchema, _ as ChannelAccountListResponseSchema, _n as UpdateOrganizationRequestSchema, _t as ListOrganizationMembersResponseSchema, a as AgentSessionDetailResponseSchema, an as StartOAuthConnectionResultSchema, ar as resolveDocsMcpUrl, at as HistoryRunListResponseSchema, b as ChannelDirectoryListResponseSchema, bn as UpdateProjectRequestSchema, bt as ListProjectFilesResponseSchema, c as AgentSummaryListResponseSchema, cn as TriggerDetailResponseSchema, ct as InviteProjectMembersRequestSchema, d as AssignCredentialBodySchema, dn as TriggerRunListResponseSchema, dt as ListAgentMemoryFilesResponseSchema, en as StartKeystrokeConnectionInputSchema, er as parseAppSlug, et as GraphqlDiscoverResponseSchema, f as BindChannelBodySchema, fn as UpdateChannelBindingBodySchema, ft as ListAgentWorkspaceFilesResponseSchema, g as CatalogAppsPageResponseSchema, gn as UpdateOrganizationMemberResponseSchema, gt as ListOrganizationInvitationsResponseSchema, h as CatalogAppDetailResponseSchema, hn as UpdateOrganizationMemberRequestSchema, ht as ListCredentialsResponseSchema, i as AgentSessionChatStateResponseSchema, in as StartOAuthConnectionInputSchema, ir as resolveConnectAppSlug, it as HistoryRunListQuerySchema, j as CreateCustomAppResponseSchema, jn as WorkflowCanvasSchema, jt as PresignChatAttachmentRequestSchema, k as CreateCredentialsResponseSchema, kn as WorkflowCanvasCredentialBindingsSchema, kt as PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, l as AgentTriggerSummaryListResponseSchema, ln as TriggerListResponseSchema, lt as InviteProjectMembersResponseSchema, m as CatalogActionsPageResponseSchema, mn as UpdateCredentialRequestSchema, mt as ListAppsResponseSchema, n as AcceptOrganizationInvitationResponseSchema, nn as StartMcpOAuthConnectionInputSchema, nt as HistoryRunCancelResponseSchema, o as AgentSessionListResponseSchema, on as SubmitMarketingContactRequestSchema, or as resolvePublicPlatformOrigin, ot as InviteOrganizationMembersRequestSchema, p as CatalogActionDetailResponseSchema, pn as UpdateCredentialInstanceBodySchema, pt as ListApiKeysResponseSchema, q as DeclineOrganizationInvitationResponseSchema, qt as QueuedAgentPromptResponseSchema, r as ActiveOrganizationResponseSchema, rn as StartMcpOAuthConnectionResultSchema, rt as HistoryRunDetailResponseSchema, s as AgentSummaryDetailResponseSchema, sn as SubmitTeamRequestRequestSchema, sr as slugifyAppName, st as InviteOrganizationMembersResponseSchema, t as ACTIVE_ORG_HEADER, tn as StartKeystrokeConnectionResultSchema, tr as parseErrorResponse, tt as HealthResponseSchema, u as AppSlugAvailabilityResponseSchema, un as TriggerRunDetailResponseSchema, v as ChannelConnectionListResponseSchema, vn as UpdateProjectMemberRequestSchema, vt as ListOrganizationsResponseSchema, w as ConnectProvidersResponseSchema, wn as UpsertGatewayAttachmentBodySchema, wt as McpDiscoverResponseSchema, x as ChannelPlatformSchema, xn as UpdateProjectSettingsRequestSchema, xt as ListProjectMembersResponseSchema, y as ChannelConnectionSchema, yn as UpdateProjectMemberResponseSchema, yt as ListProjectDeploymentsResponseSchema, z as CredentialAssignmentRecordSchema, zn as WorkflowSummaryListResponseSchema, zt as ProjectPullStateSchema } from "./dist-COhdZicI.mjs";
3
- import { i as packProjectArtifact, n as withMcpReadClient, r as mergeFilteredArtifact, t as mapInParallelBatches } from "./dist-9VWONIo1.mjs";
4
- import { a as installPlaygroundDependencies, c as createCliConfig, d as getEffectiveApiTarget, f as getPlatformUrl, g as resolvePlatformUrlForWebUrl, i as installDependencies$1, l as getCliConfigDir, m as DEFAULT_PLATFORM_URL, n as buildPlaygroundWorkspace, o as resolvePackageManager, p as getWebUrl, s as resolveCliRoot, t as readCliVersion, u as getConfigDir } from "./version-DtFg32hj.mjs";
2
+ import { $ as GetCredentialResponseSchema, $t as SkillSummaryListResponseSchema, A as CreateCustomAppRequestSchema, An as WorkflowCanvasCredentialBindingsSchema, At as PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, B as CredentialConsumerListQuerySchema, Bn as WorkflowSummaryListResponseSchema, Bt as ProjectPullStateSchema, C as ConnectAuthorizeUrlResponseSchema, Cn as UploadProjectSourceManifestRequestSchema, Ct as ListProjectMetricsResponseSchema, D as CreateCredentialInstanceBodySchema, Dn as UserAvatarSchema, Dt as OrganizationSidebarBrandingPatchSchema, E as CreateApiKeyResponseSchema, En as UserAvatarPatchSchema, Et as OpenApiDiscoverResponseSchema, F as CreateProjectRequestSchema, Fn as WorkflowRunInputsPutBodySchema, Ft as PresignOrgLogoResponseSchema, G as DOCS_QUERY_TOOL, Gn as WorkspaceTriggerRunListResponseSchema, Gt as PromptInputSchema, H as CredentialInstanceListResponseSchema, Hn as WorkspaceTriggerFileSchema, Ht as ProjectResponseSchema, I as CreateProjectResponseSchema, In as WorkflowRunInputsSchema, It as PresignProjectSourceRequestSchema, J as DownloadActiveProjectArtifactResponseSchema, Jt as QueuedAgentPromptResponseSchema, K as DOCS_SEARCH_TOOL, Kn as WorkspaceWorkflowOverviewSchema, Kt as PromptResponseSchema, L as CredentialAssignmentListQuerySchema, Ln as WorkflowRunListResponseSchema, Lt as PresignProjectSourceResponseSchema, M as CreateOrganizationRequestSchema, Mn as WorkflowCanvasSchema, Mt as PresignChatAttachmentRequestSchema, N as CreateOrganizationResponseSchema, Nn as WorkflowRunDetailResponseSchema, Nt as PresignChatAttachmentResponseSchema, O as CreateCredentialsRequestSchema, On as UserPreferencesPatchSchema, Ot as OrganizationSidebarBrandingSchema, P as CreateProjectArtifactResponseSchema, Pn as WorkflowRunHooksResponseSchema, Pt as PresignOrgLogoRequestSchema, Q as GatewayAttachmentRecordSchema, Qn as listenPortFromPublicUrl, Qt as SkillSummaryDetailResponseSchema, R as CredentialAssignmentListResponseSchema, Rn as WorkflowRunResponseSchema, Rt as PresignUserAvatarRequestSchema, S as CompleteProjectArtifactResponseSchema, Sn as UpdateProjectSettingsRequestSchema, St as ListProjectMembersResponseSchema, T as CreateApiKeyRequestSchema, Tn as UpsertGatewayAttachmentBodySchema, Tt as McpDiscoverResponseSchema, U as CredentialInstanceRecordSchema, Un as WorkspaceTriggerListResponseSchema, Ut as ProjectSettingsResponseSchema, V as CredentialConsumerListResponseSchema, Vn as WorkspaceTriggerDetailSchema, Vt as ProjectReachabilityResponseSchema, Wn as WorkspaceTriggerOverviewSchema, Wt as ProjectSlugAvailabilityResponseSchema, X as ErrorResponseSchema, Xn as detectProjectPackageManagerFromSnapshot, Y as DownloadActiveProjectSourceResponseSchema, Yn as deriveCustomAppDisplay, Yt as QueuedRunResponseSchema, Z as ExecuteKeystrokeToolRequestSchema, Zn as isAcceptableInstallExit, Zt as RecentResourceListResponseSchema, _ as ChannelAccountListResponseSchema, _n as UpdateOrganizationMemberResponseSchema, _t as ListOrganizationInvitationsResponseSchema, a as AgentSessionDetailResponseSchema, an as StartOAuthConnectionInputSchema, ar as resolveConnectAppSlug, at as HistoryRunListQuerySchema, b as ChannelDirectoryListResponseSchema, bn as UpdateProjectMemberResponseSchema, bt as ListProjectDeploymentsResponseSchema, c as AgentSummaryListResponseSchema, cn as SubmitTeamRequestRequestSchema, cr as slugifyAppName, ct as InviteOrganizationMembersResponseSchema, d as AssignCredentialBodySchema, dn as TriggerRunDetailResponseSchema, en as SlugAvailabilityResponseSchema, et as GetCustomAppResponseSchema, f as BindChannelBodySchema, fn as TriggerRunListResponseSchema, ft as ListAgentMemoryFilesResponseSchema, g as CatalogAppsPageResponseSchema, gn as UpdateOrganizationMemberRequestSchema, gt as ListCredentialsResponseSchema, h as CatalogAppDetailResponseSchema, hn as UpdateCredentialRequestSchema, ht as ListAppsResponseSchema, i as AgentSessionChatStateResponseSchema, in as StartMcpOAuthConnectionResultSchema, it as HistoryRunDetailResponseSchema, j as CreateCustomAppResponseSchema, jn as WorkflowCanvasRunSchema, jt as PollRunResponseSchema, k as CreateCredentialsResponseSchema, kn as UserPreferencesSchema, kt as PROJECT_PULL_STATE_RELATIVE_PATH, l as AgentTriggerSummaryListResponseSchema, ln as TriggerDetailResponseSchema, lt as InviteProjectMembersRequestSchema, m as CatalogActionsPageResponseSchema, mn as UpdateCredentialInstanceBodySchema, mt as ListApiKeysResponseSchema, n as AcceptOrganizationInvitationResponseSchema, nn as StartKeystrokeConnectionResultSchema, nr as parseErrorResponse, nt as HealthResponseSchema, o as AgentSessionListResponseSchema, on as StartOAuthConnectionResultSchema, or as resolveDocsMcpUrl, ot as HistoryRunListResponseSchema, p as CatalogActionDetailResponseSchema, pn as UpdateChannelBindingBodySchema, pt as ListAgentWorkspaceFilesResponseSchema, q as DeclineOrganizationInvitationResponseSchema, qn as buildConnectDeeplink, r as ActiveOrganizationResponseSchema, rn as StartMcpOAuthConnectionInputSchema, rt as HistoryRunCancelResponseSchema, s as AgentSummaryDetailResponseSchema, sn as SubmitMarketingContactRequestSchema, sr as resolvePublicPlatformOrigin, st as InviteOrganizationMembersRequestSchema, t as ACTIVE_ORG_HEADER, tn as StartKeystrokeConnectionInputSchema, tr as parseAppSlug, tt as GraphqlDiscoverResponseSchema, u as AppSlugAvailabilityResponseSchema, un as TriggerListResponseSchema, ut as InviteProjectMembersResponseSchema, v as ChannelConnectionListResponseSchema, vn as UpdateOrganizationRequestSchema, vt as ListOrganizationMembersResponseSchema, w as ConnectProvidersResponseSchema, wn as UploadProjectSourceResponseSchema, wt as ListProjectsResponseSchema, x as ChannelPlatformSchema, xn as UpdateProjectRequestSchema, xt as ListProjectFilesResponseSchema, y as ChannelConnectionSchema, yn as UpdateProjectMemberRequestSchema, yt as ListOrganizationsResponseSchema, z as CredentialAssignmentRecordSchema, zn as WorkflowSummaryDetailResponseSchema, zt as PresignUserAvatarResponseSchema } from "./dist-DkLbeW8l.mjs";
3
+ import { i as packProjectArtifact, n as withMcpReadClient, r as mergeFilteredArtifact, t as mapInParallelBatches } from "./dist-gAvgHBlr.mjs";
4
+ import { a as installPlaygroundDependencies, c as createCliConfig, d as getEffectiveApiTarget, f as getPlatformUrl, g as resolvePlatformUrlForWebUrl, i as installDependencies$1, l as getCliConfigDir, m as DEFAULT_PLATFORM_URL, n as buildPlaygroundWorkspace, o as resolvePackageManager, p as getWebUrl, s as resolveCliRoot, t as readCliVersion, u as getConfigDir } from "./version-CiFlKPyE.mjs";
5
5
  import { createRequire } from "node:module";
6
6
  import { Command } from "commander";
7
7
  import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
@@ -4227,6 +4227,16 @@ function createAppsResource(http) {
4227
4227
  throw await toPlatformError(error);
4228
4228
  }
4229
4229
  },
4230
+ async executeTool(request) {
4231
+ try {
4232
+ const body = ExecuteKeystrokeToolRequestSchema.parse(request);
4233
+ const data = await http.post("/mcp/execute", { json: body }).json();
4234
+ if (typeof data !== "object" || data === null || !("ok" in data) || data.ok !== true || !("result" in data)) throw new PlatformError("Invalid MCP execute response", 502, data);
4235
+ return data;
4236
+ } catch (error) {
4237
+ throw await toPlatformError(error);
4238
+ }
4239
+ },
4230
4240
  async checkSlug(slug) {
4231
4241
  try {
4232
4242
  const searchParams = new URLSearchParams({ slug });
@@ -5466,6 +5476,33 @@ function registerApiKeyCommand(program) {
5466
5476
  });
5467
5477
  }
5468
5478
  //#endregion
5479
+ //#region src/commands/app/action-hints.ts
5480
+ function toCamelCase(value) {
5481
+ const pascal = value.split(/[^a-zA-Z0-9]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
5482
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
5483
+ }
5484
+ /** `github`, `GITHUB_CREATE_ISSUE` → `githubCreateIssue` (matches the generated action export). */
5485
+ function actionExportName(app, tool) {
5486
+ const toolkit = app.toLowerCase();
5487
+ const upperTool = tool.toUpperCase();
5488
+ const prefix = `${toolkit.toUpperCase()}_`;
5489
+ return toCamelCase(`${toolkit}-${upperTool.startsWith(prefix) ? upperTool.slice(prefix.length) : upperTool}`);
5490
+ }
5491
+ /** Best-effort code-import line for a catalog action. */
5492
+ function actionImportHint(app, tool) {
5493
+ return `import { ${actionExportName(app, tool)} } from "@keystrokehq/${app.toLowerCase()}/actions"`;
5494
+ }
5495
+ /** Next-step hint printed after listing an app's actions. */
5496
+ function listActionsHint(app) {
5497
+ const bin = cliBinaryName();
5498
+ return `\nNext steps:\n Inspect a tool: ${bin} app action ${app} <TOOL_SLUG>\n Run a tool: ${bin} app execute ${app} <TOOL_SLUG> --input '{...}'\n`;
5499
+ }
5500
+ /** Next-step hint printed after showing one action's schema. */
5501
+ function showActionHint(app, tool) {
5502
+ const bin = cliBinaryName();
5503
+ return `\nNext steps:\n Run ad-hoc: ${bin} app execute ${app} ${tool} --input '{...}'\n Use in code: ${actionImportHint(app, tool)}\n Not connected? ${bin} connect ${app}\n`;
5504
+ }
5505
+ //#endregion
5469
5506
  //#region src/commands/app/run-app-catalog.ts
5470
5507
  async function runAppSearch(client, query, options) {
5471
5508
  const trimmed = query.trim();
@@ -5498,25 +5535,26 @@ async function runAppActions(client, options) {
5498
5535
  });
5499
5536
  }
5500
5537
  async function runAppAction(client, toolSlug) {
5501
- const trimmed = toolSlug.trim();
5538
+ const trimmed = toolSlug.trim().toUpperCase();
5502
5539
  if (!trimmed) throw new Error("Tool slug is required");
5503
5540
  return client.apps.getCatalogAction(trimmed);
5504
5541
  }
5505
5542
  //#endregion
5506
5543
  //#region src/commands/app/action.ts
5507
5544
  function registerAppActionCommand(app) {
5508
- app.command("action").description("Show a Composio action schema from the live catalog").argument("<tool-slug>", "Composio tool slug (e.g. GITHUB_CREATE_ISSUE)").action((toolSlug) => runCliCommand("App action failed", async () => {
5545
+ app.command("action").description("Show a catalog action schema, plus how to run and import it").argument("<app>", "App slug (e.g. github)").argument("<tool>", "Tool slug (e.g. github_create_an_issue)").action((appSlug, toolSlug) => runCliCommand("App action failed", async () => {
5509
5546
  const config = createCliConfig();
5510
5547
  const client = createCliPlatformClient(config);
5511
5548
  await ensureActiveOrganization(config);
5512
5549
  const result = await runAppAction(client, toolSlug);
5513
5550
  process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
5551
+ process.stderr.write(showActionHint(appSlug.trim().toLowerCase(), toolSlug.trim().toUpperCase()));
5514
5552
  }, void 0, { orgScoped: true }));
5515
5553
  }
5516
5554
  //#endregion
5517
5555
  //#region src/commands/app/actions.ts
5518
5556
  function registerAppActionsCommand(app) {
5519
- app.command("actions [slug]").description("List or search Composio actions (per app or globally with --search)").option("--search <query>", "Search actions within the app or across all apps").option("--limit <n>", "Page size", (value) => Number.parseInt(value, 10)).option("--cursor <cursor>", "Pagination cursor").action((slug, options) => runCliCommand("App actions failed", async () => {
5557
+ app.command("actions [slug]").description("List or search a catalog app's actions (per app, or globally with --search)").option("--search <query>", "Search actions within the app or across all apps").option("--limit <n>", "Page size", (value) => Number.parseInt(value, 10)).option("--cursor <cursor>", "Pagination cursor").action((slug, options) => runCliCommand("App actions failed", async () => {
5520
5558
  const config = createCliConfig();
5521
5559
  const client = createCliPlatformClient(config);
5522
5560
  await ensureActiveOrganization(config);
@@ -5525,6 +5563,7 @@ function registerAppActionsCommand(app) {
5525
5563
  ...options
5526
5564
  });
5527
5565
  process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
5566
+ if (slug?.trim()) process.stderr.write(listActionsHint(slug.trim().toLowerCase()));
5528
5567
  }, void 0, { orgScoped: true }));
5529
5568
  }
5530
5569
  //#endregion
@@ -5673,6 +5712,68 @@ function registerAppCreateCommand(app) {
5673
5712
  }, void 0, { orgScoped: true }));
5674
5713
  }
5675
5714
  //#endregion
5715
+ //#region src/commands/app/run-app-execute.ts
5716
+ function isNotConnectedError(error) {
5717
+ if (!(error instanceof PlatformError) || error.status !== 404) return false;
5718
+ const body = error.body;
5719
+ if (typeof body !== "object" || body === null || !("error" in body)) return false;
5720
+ return body.error === "not_found";
5721
+ }
5722
+ async function runAppExecute(client, appSlug, toolSlug, options) {
5723
+ const app = appSlug.trim().toLowerCase();
5724
+ const tool = toolSlug.trim().toUpperCase();
5725
+ if (!app || !tool) throw new Error("App and tool slugs are required (e.g. github github_get_the_authenticated_user)");
5726
+ const credentialSlug = options.credentialSlug?.trim() || void 0;
5727
+ const projectSlug = options.projectSlug?.trim() || void 0;
5728
+ const version = options.version?.trim() || (await client.apps.getCatalogAction(tool)).version?.trim() || void 0;
5729
+ if (!version) throw new Error(`Catalog action "${tool}" has no pinned version. Pass --version explicitly.`);
5730
+ try {
5731
+ const { result } = await client.apps.executeTool({
5732
+ app,
5733
+ tool,
5734
+ version,
5735
+ arguments: typeof options.input === "object" && options.input !== null && !Array.isArray(options.input) ? options.input : {},
5736
+ ...credentialSlug ? { credentialSlug } : {},
5737
+ ...projectSlug ? { projectSlug } : {}
5738
+ });
5739
+ return result;
5740
+ } catch (error) {
5741
+ if (isNotConnectedError(error) && !credentialSlug) throw new Error(`Not connected to ${app}. Run: ${cliBinaryName()} connect ${app}`);
5742
+ throw error;
5743
+ }
5744
+ }
5745
+ //#endregion
5746
+ //#region src/commands/app/execute.ts
5747
+ function registerAppExecuteCommand(app) {
5748
+ app.command("execute").description("Run a connected catalog action against the cloud (no local server)").argument("<app>", "App slug (e.g. github)").argument("<tool>", "Tool slug (e.g. github_get_the_authenticated_user)").option("--input <json>", "JSON arguments (defaults to {})", "{}").option("--version <version>", "Pinned toolkit version (defaults to the catalog value)").option("--credential <slug>", `Pin a specific credential by slug (see '${cliBinaryName()} credentials list'); overrides the default and is the only way to use a user credential`).addHelpText("after", `
5749
+ Credential resolution matches the runtime: project default → org default. User credentials are
5750
+ never a default — reach one with --credential <slug>. Target a project with the global
5751
+ --project <slug> flag; without it, only org credentials resolve.
5752
+
5753
+ Examples:
5754
+ ${cliBinaryName()} app execute github github_get_the_authenticated_user
5755
+ ${cliBinaryName()} app execute github github_get_the_authenticated_user --project my-app
5756
+ ${cliBinaryName()} app execute github github_get_the_authenticated_user --credential work-github
5757
+ ${cliBinaryName()} app execute acculynx acculynx_add_job_appointment --input '{"jobId":"123","startDate":"2026-01-01T09:00:00Z","endDate":"2026-01-01T10:00:00Z"}'
5758
+ `).action((appSlug, toolSlug, options) => runCliCommand("App execute failed", async () => {
5759
+ const config = createCliConfig();
5760
+ const client = createCliPlatformClient(config);
5761
+ await ensureActiveOrganization(config);
5762
+ const input = parseJsonOption(options.input, "--input");
5763
+ const project = await resolveActiveProject(config, client);
5764
+ const result = await runAppExecute(client, appSlug, toolSlug, {
5765
+ input,
5766
+ version: options.version,
5767
+ credentialSlug: options.credential,
5768
+ projectSlug: project?.slug
5769
+ });
5770
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
5771
+ }, { usage: {
5772
+ command: `${cliBinaryName()} app execute ${appSlug} ${toolSlug}`,
5773
+ flag: "--input"
5774
+ } }, { orgScoped: true }));
5775
+ }
5776
+ //#endregion
5676
5777
  //#region src/commands/app/run-app-list.ts
5677
5778
  async function runAppList(client) {
5678
5779
  return client.apps.listCatalog();
@@ -5773,12 +5874,13 @@ function registerAppSyncCommand(app) {
5773
5874
  //#endregion
5774
5875
  //#region src/commands/app/index.ts
5775
5876
  function registerAppCommand(program) {
5776
- const app = program.command("app").description("Browse connectable integrations");
5877
+ const app = program.command("app").description("Discover and run connectable integrations");
5777
5878
  registerAppListCommand(app);
5778
5879
  registerAppSearchCommand(app);
5779
5880
  registerAppShowCommand(app);
5780
5881
  registerAppActionsCommand(app);
5781
5882
  registerAppActionCommand(app);
5883
+ registerAppExecuteCommand(app);
5782
5884
  registerAppCreateCommand(app);
5783
5885
  registerAppSyncCommand(app);
5784
5886
  }
@@ -6377,7 +6479,7 @@ function registerBuildCommand(program) {
6377
6479
  program.command("build").description("Build the keystroke project for production").option("--dir <path>", "Project directory", process.cwd()).action(async (options) => {
6378
6480
  try {
6379
6481
  const root = resolveProjectRoot(options.dir);
6380
- const { buildApp } = await import("./dist-BGJ-Gw_w.mjs");
6482
+ const { buildApp } = await import("./dist-CoFdTDow.mjs");
6381
6483
  await buildApp({ root });
6382
6484
  process.stdout.write(`Built ${root}\n`);
6383
6485
  } catch (error) {
@@ -6431,7 +6533,7 @@ async function sleep(ms) {
6431
6533
  }
6432
6534
  async function buildDeployArchive(client, root, projectId, filter) {
6433
6535
  if (filter?.length) {
6434
- const { buildFilteredApp } = await import("./dist-BGJ-Gw_w.mjs");
6536
+ const { buildFilteredApp } = await import("./dist-CoFdTDow.mjs");
6435
6537
  const filtered = await buildFilteredApp({
6436
6538
  root,
6437
6539
  filter,
@@ -6453,7 +6555,7 @@ async function buildDeployArchive(client, root, projectId, filter) {
6453
6555
  sourceFiles: filtered.sourceFiles
6454
6556
  };
6455
6557
  }
6456
- const { buildApp } = await import("./dist-BGJ-Gw_w.mjs");
6558
+ const { buildApp } = await import("./dist-CoFdTDow.mjs");
6457
6559
  const { sourceFiles } = await buildApp({
6458
6560
  root,
6459
6561
  collectSources: true,
@@ -6572,7 +6674,7 @@ function runtimeChildEnv(parentEnv, overrides) {
6572
6674
  //#region src/project/bootstrap-run.ts
6573
6675
  /** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */
6574
6676
  async function resolveBootstrapRun(options) {
6575
- const { resolveRuntimeBuildArtifact } = await import("./dist-BGJ-Gw_w.mjs");
6677
+ const { resolveRuntimeBuildArtifact } = await import("./dist-CoFdTDow.mjs");
6576
6678
  const loader = pathToFileURL(resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/runtime-loader.mjs")).href;
6577
6679
  const bootstrap = resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/standalone-bootstrap.mjs");
6578
6680
  const args = [`--import=${loader}`];
@@ -6721,7 +6823,7 @@ async function runDev(options) {
6721
6823
  process.on("SIGINT", shutdown);
6722
6824
  process.on("SIGTERM", shutdown);
6723
6825
  try {
6724
- const { watchApp } = await import("./dist-BGJ-Gw_w.mjs");
6826
+ const { watchApp } = await import("./dist-CoFdTDow.mjs");
6725
6827
  await watchApp({
6726
6828
  root,
6727
6829
  clean: false,
@@ -6928,7 +7030,7 @@ const INIT_CATALOG_VERSIONS = {
6928
7030
  vitest: "^4.1.7",
6929
7031
  "@types/node": "^25.9.1"
6930
7032
  };
6931
- const INIT_KEYSTROKE_VERSION = "^0.1.25";
7033
+ const INIT_KEYSTROKE_VERSION = "^0.1.26";
6932
7034
  //#endregion
6933
7035
  //#region src/init/copy-template.ts
6934
7036
  function renderTemplate(content, variables) {
@@ -7760,7 +7862,7 @@ async function runStart(options) {
7760
7862
  const apiPort = Number(new URL(serverUrl).port || 80);
7761
7863
  const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));
7762
7864
  ensureNativeDeps(runtimeNodeModules);
7763
- const { buildApp } = await import("./dist-BGJ-Gw_w.mjs");
7865
+ const { buildApp } = await import("./dist-CoFdTDow.mjs");
7764
7866
  await buildApp({
7765
7867
  root,
7766
7868
  clean: false
@@ -8322,7 +8424,7 @@ function createProgram() {
8322
8424
  return program;
8323
8425
  }
8324
8426
  async function runCli(argv) {
8325
- const { maybeAutoUpdate } = await import("./maybe-auto-update--WoIaE-P.mjs");
8427
+ const { maybeAutoUpdate } = await import("./maybe-auto-update-Dv4MJvWb.mjs");
8326
8428
  await maybeAutoUpdate(argv);
8327
8429
  createProgram().parse(argv);
8328
8430
  }