@keystrokehq/cli 0.0.65 → 0.0.66

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.
Files changed (32) hide show
  1. package/dist/{cat-TSFMZVYS-Qzyhqpeq.mjs → cat-TSFMZVYS-RwFYGRgl.mjs} +2 -2
  2. package/dist/{cat-TSFMZVYS-Qzyhqpeq.mjs.map → cat-TSFMZVYS-RwFYGRgl.mjs.map} +1 -1
  3. package/dist/{cut-OKARJCCV-UOo5blGN.mjs → cut-OKARJCCV-7cebiTlb.mjs} +2 -2
  4. package/dist/{cut-OKARJCCV-UOo5blGN.mjs.map → cut-OKARJCCV-7cebiTlb.mjs.map} +1 -1
  5. package/dist/{dist-CMxQJtOA.mjs → dist-CrZVpQSd.mjs} +2 -2
  6. package/dist/{dist-CMxQJtOA.mjs.map → dist-CrZVpQSd.mjs.map} +1 -1
  7. package/dist/{dist-D2apKUWN-BDQ3166v.mjs → dist-DRPUD4yJ-3gMinGsn.mjs} +82 -9
  8. package/dist/dist-DRPUD4yJ-3gMinGsn.mjs.map +1 -0
  9. package/dist/{du-572XNP42-4gdN6HgU.mjs → du-572XNP42-RgaK1Rqq.mjs} +2 -2
  10. package/dist/{du-572XNP42-4gdN6HgU.mjs.map → du-572XNP42-RgaK1Rqq.mjs.map} +1 -1
  11. package/dist/{emit-route-manifest-DRcNXHCP-BHonsCIQ.mjs → emit-route-manifest-DRcNXHCP-DN1BpGOi.mjs} +31 -13
  12. package/dist/{emit-route-manifest-DRcNXHCP-BHonsCIQ.mjs.map → emit-route-manifest-DRcNXHCP-DN1BpGOi.mjs.map} +1 -1
  13. package/dist/index.mjs +146 -28
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/{jq-4XLYLOS5-D_rIiq4w.mjs → jq-4XLYLOS5-DNvJFpkY.mjs} +2 -2
  16. package/dist/{jq-4XLYLOS5-D_rIiq4w.mjs.map → jq-4XLYLOS5-DNvJFpkY.mjs.map} +1 -1
  17. package/dist/{ls-ZJGQER7M-B-eSANU2.mjs → ls-ZJGQER7M-DHpAibRp.mjs} +2 -2
  18. package/dist/{ls-ZJGQER7M-B-eSANU2.mjs.map → ls-ZJGQER7M-DHpAibRp.mjs.map} +1 -1
  19. package/dist/{mistral-CCsOaxvh-FZsMk4KR.mjs → mistral-R2FX6jgL-C3TQNHh7.mjs} +3 -3
  20. package/dist/{mistral-CCsOaxvh-FZsMk4KR.mjs.map → mistral-R2FX6jgL-C3TQNHh7.mjs.map} +1 -1
  21. package/dist/{sort-SW2YEO5B-BaN_eY3l.mjs → sort-SW2YEO5B-BD_P9Q6n.mjs} +2 -2
  22. package/dist/{sort-SW2YEO5B-BaN_eY3l.mjs.map → sort-SW2YEO5B-BD_P9Q6n.mjs.map} +1 -1
  23. package/dist/{tree-YLD52CNT-BZJomf0H.mjs → tree-YLD52CNT-C9IR00tM.mjs} +2 -2
  24. package/dist/{tree-YLD52CNT-BZJomf0H.mjs.map → tree-YLD52CNT-C9IR00tM.mjs.map} +1 -1
  25. package/dist/{uniq-XSIZR6PB-Ajuixkb6.mjs → uniq-XSIZR6PB-gU1BpRGX.mjs} +2 -2
  26. package/dist/{uniq-XSIZR6PB-Ajuixkb6.mjs.map → uniq-XSIZR6PB-gU1BpRGX.mjs.map} +1 -1
  27. package/dist/{wc-LF7NU4LA-DiSdKP_u.mjs → wc-LF7NU4LA-DwSj8_V4.mjs} +2 -2
  28. package/dist/{wc-LF7NU4LA-DiSdKP_u.mjs.map → wc-LF7NU4LA-DwSj8_V4.mjs.map} +1 -1
  29. package/dist/{xan-Y6WF3IRG-COQGCVSz.mjs → xan-Y6WF3IRG-CAgH4sE_.mjs} +2 -2
  30. package/dist/{xan-Y6WF3IRG-COQGCVSz.mjs.map → xan-Y6WF3IRG-CAgH4sE_.mjs.map} +1 -1
  31. package/package.json +14 -14
  32. package/dist/dist-D2apKUWN-BDQ3166v.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -6872,14 +6872,18 @@ const ProjectStatusSchema = _enum([
6872
6872
  "active",
6873
6873
  "failed"
6874
6874
  ]);
6875
- const OrganizationUserRoleSchema = _enum(["admin"]);
6876
- const isoDateTime$1 = string().datetime();
6875
+ const OrganizationUserRoleSchema = _enum([
6876
+ "owner",
6877
+ "admin",
6878
+ "builder"
6879
+ ]);
6880
+ const isoDateTime$2 = string().datetime();
6877
6881
  const OrganizationSchema = object({
6878
6882
  id: string(),
6879
6883
  name: string(),
6880
6884
  slug: OrganizationSlugSchema,
6881
- createdAt: isoDateTime$1,
6882
- updatedAt: isoDateTime$1
6885
+ createdAt: isoDateTime$2,
6886
+ updatedAt: isoDateTime$2
6883
6887
  });
6884
6888
  const ProjectSchema = object({
6885
6889
  id: string(),
@@ -6889,8 +6893,8 @@ const ProjectSchema = object({
6889
6893
  baseUrl: string().nullable(),
6890
6894
  runtimeId: string().nullable(),
6891
6895
  lastError: string().nullable(),
6892
- createdAt: isoDateTime$1,
6893
- updatedAt: isoDateTime$1
6896
+ createdAt: isoDateTime$2,
6897
+ updatedAt: isoDateTime$2
6894
6898
  });
6895
6899
  const UserOrganizationSchema = object({
6896
6900
  organization: OrganizationSchema,
@@ -7354,6 +7358,57 @@ const TriggerListItemSchema = object({
7354
7358
  const TriggerListResponseSchema = object({ triggers: array(TriggerListItemSchema) });
7355
7359
  object({ endpoint: string().min(1).optional() });
7356
7360
  const TriggerDetailResponseSchema = TriggerListItemSchema;
7361
+ const OrganizationMemberRoleSchema = _enum([
7362
+ "owner",
7363
+ "admin",
7364
+ "builder"
7365
+ ]);
7366
+ const OrganizationMemberStatusSchema = _enum([
7367
+ "invited",
7368
+ "active",
7369
+ "rejected",
7370
+ "suspended"
7371
+ ]);
7372
+ const InvitableOrganizationMemberRoleSchema = _enum(["admin", "builder"]);
7373
+ const isoDateTime$1 = string().datetime();
7374
+ const OrganizationMemberSchema = object({
7375
+ id: string(),
7376
+ name: string(),
7377
+ email: string().email(),
7378
+ role: OrganizationMemberRoleSchema,
7379
+ status: OrganizationMemberStatusSchema,
7380
+ avatarUrl: string().optional(),
7381
+ joinedAt: isoDateTime$1.optional(),
7382
+ lastActiveAt: isoDateTime$1.nullable().optional()
7383
+ });
7384
+ const ListOrganizationMembersResponseSchema = object({ members: array(OrganizationMemberSchema) });
7385
+ const InviteOrganizationMembersRequestSchema = object({
7386
+ emails: array(string().trim().email()).min(1),
7387
+ role: InvitableOrganizationMemberRoleSchema
7388
+ });
7389
+ const InviteOrganizationMemberResultStatusSchema = _enum([
7390
+ "sent",
7391
+ "already_member",
7392
+ "pending",
7393
+ "invalid"
7394
+ ]);
7395
+ const InviteOrganizationMembersResponseSchema = object({ results: array(object({
7396
+ email: string(),
7397
+ status: InviteOrganizationMemberResultStatusSchema,
7398
+ invitationId: string().optional()
7399
+ })) });
7400
+ const UpdateOrganizationMemberRequestSchema = object({ role: InvitableOrganizationMemberRoleSchema });
7401
+ const UpdateOrganizationMemberResponseSchema = object({ member: OrganizationMemberSchema });
7402
+ const ListOrganizationInvitationsResponseSchema = object({ invitations: array(object({
7403
+ id: string(),
7404
+ organizationName: string(),
7405
+ organizationSlug: OrganizationSlugSchema,
7406
+ invitedByName: string().optional(),
7407
+ invitedByEmail: string().email().optional(),
7408
+ role: OrganizationMemberRoleSchema
7409
+ })) });
7410
+ const AcceptOrganizationInvitationResponseSchema = object({ organization: UserOrganizationSchema });
7411
+ const DeclineOrganizationInvitationResponseSchema = object({ success: literal(true) });
7357
7412
  const ProjectArtifactStatusSchema = _enum(["pending", "ready"]);
7358
7413
  const isoDateTime = string().datetime();
7359
7414
  const ProjectArtifactSchema = object({
@@ -8085,6 +8140,71 @@ function createProjectSettingsResource() {
8085
8140
  })
8086
8141
  };
8087
8142
  }
8143
+ function createInvitationsResource(http) {
8144
+ return {
8145
+ async list() {
8146
+ try {
8147
+ const data = await http.get("/api/invitations").json();
8148
+ return ListOrganizationInvitationsResponseSchema.parse(data).invitations;
8149
+ } catch (error) {
8150
+ throw await toPlatformError(error);
8151
+ }
8152
+ },
8153
+ async accept(invitationId) {
8154
+ try {
8155
+ const data = await http.post(`/api/invitations/${encodeURIComponent(invitationId)}/accept`).json();
8156
+ return AcceptOrganizationInvitationResponseSchema.parse(data).organization;
8157
+ } catch (error) {
8158
+ throw await toPlatformError(error);
8159
+ }
8160
+ },
8161
+ async decline(invitationId) {
8162
+ try {
8163
+ const data = await http.post(`/api/invitations/${encodeURIComponent(invitationId)}/decline`).json();
8164
+ DeclineOrganizationInvitationResponseSchema.parse(data);
8165
+ } catch (error) {
8166
+ throw await toPlatformError(error);
8167
+ }
8168
+ }
8169
+ };
8170
+ }
8171
+ function createMembersResource$1(http) {
8172
+ return {
8173
+ async listOrganizationMembers() {
8174
+ try {
8175
+ const data = await http.get("/api/members").json();
8176
+ return ListOrganizationMembersResponseSchema.parse(data).members;
8177
+ } catch (error) {
8178
+ throw await toPlatformError(error);
8179
+ }
8180
+ },
8181
+ async inviteOrganizationMembers(input) {
8182
+ const body = InviteOrganizationMembersRequestSchema.parse(input);
8183
+ try {
8184
+ const data = await http.post("/api/members/invitations", { json: body }).json();
8185
+ return InviteOrganizationMembersResponseSchema.parse(data);
8186
+ } catch (error) {
8187
+ throw await toPlatformError(error);
8188
+ }
8189
+ },
8190
+ async updateOrganizationMember(userId, input) {
8191
+ const body = UpdateOrganizationMemberRequestSchema.parse(input);
8192
+ try {
8193
+ const data = await http.patch(`/api/members/${encodeURIComponent(userId)}`, { json: body }).json();
8194
+ return UpdateOrganizationMemberResponseSchema.parse(data).member;
8195
+ } catch (error) {
8196
+ throw await toPlatformError(error);
8197
+ }
8198
+ },
8199
+ async removeOrganizationMember(userId) {
8200
+ try {
8201
+ await http.delete(`/api/members/${encodeURIComponent(userId)}`);
8202
+ } catch (error) {
8203
+ throw await toPlatformError(error);
8204
+ }
8205
+ }
8206
+ };
8207
+ }
8088
8208
  /**
8089
8209
  * The supported-app catalog shown in the "Connect an app" picker. Mirrors the
8090
8210
  * curated integration list from keystroke-mockups. No connected/available flag:
@@ -9258,12 +9378,13 @@ export const sendSlackMessage = defineAction({
9258
9378
  `
9259
9379
  }
9260
9380
  ];
9261
- const organizationMemberSeed = [
9381
+ /** Review personas for mocked project members and API key authors (not org membership). */
9382
+ const mockPersonaSeed = [
9262
9383
  {
9263
9384
  id: "user_blake_rouse",
9264
9385
  name: "Blake Rouse",
9265
9386
  email: "blake@keystroke.ai",
9266
- role: "owner",
9387
+ avatarUrl: "/icons/avatars/blake-rouse.png",
9267
9388
  joinedAt: "2026-01-12T18:00:00Z",
9268
9389
  lastActiveAt: "2026-05-31T18:00:00Z"
9269
9390
  },
@@ -9271,7 +9392,7 @@ const organizationMemberSeed = [
9271
9392
  id: "org-member-nate",
9272
9393
  name: "Nate Wells",
9273
9394
  email: "nate@keystroke.ai",
9274
- role: "admin",
9395
+ avatarUrl: "/icons/avatars/nate-kelley.png",
9275
9396
  joinedAt: "2026-02-03T18:00:00Z",
9276
9397
  lastActiveAt: "2026-05-31T16:00:00Z"
9277
9398
  },
@@ -9279,7 +9400,7 @@ const organizationMemberSeed = [
9279
9400
  id: "org-member-dallin",
9280
9401
  name: "Dallin Bentley",
9281
9402
  email: "dallin@keystroke.ai",
9282
- role: "builder",
9403
+ avatarUrl: "/icons/avatars/dallin-bentley.png",
9283
9404
  joinedAt: "2026-03-18T18:00:00Z",
9284
9405
  lastActiveAt: "2026-05-30T16:00:00Z"
9285
9406
  },
@@ -9287,12 +9408,12 @@ const organizationMemberSeed = [
9287
9408
  id: "org-member-wells",
9288
9409
  name: "Wells Riley",
9289
9410
  email: "wells@keystroke.ai",
9290
- role: "builder",
9411
+ avatarUrl: "/icons/avatars/wells-bunker.png",
9291
9412
  joinedAt: "2026-04-09T18:00:00Z",
9292
9413
  lastActiveAt: "2026-05-20T16:00:00Z"
9293
9414
  }
9294
9415
  ];
9295
- const projectMemberSeed = organizationMemberSeed.map((member, index) => ({
9416
+ const projectMemberSeed = mockPersonaSeed.map((member, index) => ({
9296
9417
  id: `project-member-${member.id}`,
9297
9418
  projectId: "project_personal_repo",
9298
9419
  name: member.name,
@@ -9309,7 +9430,7 @@ const apiKeySeed = [
9309
9430
  name: "LOCAL_DEV_BLAKE",
9310
9431
  keyPreview: "******J7Pt",
9311
9432
  createdAt: "2026-04-20T15:44:00Z",
9312
- createdBy: organizationMemberSeed[0],
9433
+ createdBy: mockPersonaSeed[0],
9313
9434
  isCreatedByCurrentUser: true
9314
9435
  },
9315
9436
  {
@@ -9317,7 +9438,7 @@ const apiKeySeed = [
9317
9438
  name: "CI deploy",
9318
9439
  keyPreview: "******TJb7",
9319
9440
  createdAt: "2026-03-08T15:44:00Z",
9320
- createdBy: organizationMemberSeed[1],
9441
+ createdBy: mockPersonaSeed[1],
9321
9442
  isCreatedByCurrentUser: false
9322
9443
  },
9323
9444
  {
@@ -9325,7 +9446,7 @@ const apiKeySeed = [
9325
9446
  name: "partner_webhooks",
9326
9447
  keyPreview: "******9Qzc",
9327
9448
  createdAt: "2026-02-18T15:44:00Z",
9328
- createdBy: organizationMemberSeed[2],
9449
+ createdBy: mockPersonaSeed[2],
9329
9450
  isCreatedByCurrentUser: false
9330
9451
  }
9331
9452
  ];
@@ -9554,13 +9675,9 @@ function createProjectFilesResource() {
9554
9675
  projectId
9555
9676
  }))) };
9556
9677
  }
9557
- function createMembersResource() {
9678
+ function createMembersResource(http) {
9558
9679
  return {
9559
- listOrganizationMembers: mock({
9560
- domain: "members",
9561
- method: "listOrganizationMembers",
9562
- plannedEndpoint: "GET /api/members"
9563
- }, async () => organizationMemberSeed),
9680
+ ...createMembersResource$1(http),
9564
9681
  listForProject: mock({
9565
9682
  domain: "members",
9566
9683
  method: "listForProject",
@@ -9590,7 +9707,7 @@ function createApiKeysResource() {
9590
9707
  name: input.name,
9591
9708
  keyPreview,
9592
9709
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
9593
- createdBy: organizationMemberSeed[0],
9710
+ createdBy: mockPersonaSeed[0],
9594
9711
  isCreatedByCurrentUser: true
9595
9712
  };
9596
9713
  apiKeyRecords = [created, ...apiKeyRecords];
@@ -10413,7 +10530,8 @@ function createPlatformClient(options) {
10413
10530
  deployments: createDeploymentsResource(),
10414
10531
  projectMetrics: createProjectMetricsResource(),
10415
10532
  projectFiles: createProjectFilesResource(),
10416
- members: createMembersResource(),
10533
+ members: createMembersResource(http),
10534
+ invitations: createInvitationsResource(http),
10417
10535
  apiKeys: createApiKeysResource(),
10418
10536
  recents: createRecentsResource(),
10419
10537
  userPreferences: createUserPreferencesResource({ getCurrentUserId: options.getCurrentUserId }),
@@ -12739,7 +12857,7 @@ function registerBuildCommand(program) {
12739
12857
  program.command("build").description("Build the keystroke project for production").option("--dir <path>", "Project directory", process.cwd()).action(async (options) => {
12740
12858
  try {
12741
12859
  const root = resolveProjectRoot(options.dir);
12742
- const { buildApp } = await import("./dist-CMxQJtOA.mjs");
12860
+ const { buildApp } = await import("./dist-CrZVpQSd.mjs");
12743
12861
  await buildApp({
12744
12862
  root,
12745
12863
  emitRouteManifest: false
@@ -12798,7 +12916,7 @@ async function runDeploy(options) {
12798
12916
  const config = createCliConfig();
12799
12917
  const client = createCliPlatformClient(config);
12800
12918
  if (!options.skipBuild) {
12801
- const { buildApp } = await import("./dist-CMxQJtOA.mjs");
12919
+ const { buildApp } = await import("./dist-CrZVpQSd.mjs");
12802
12920
  await buildApp({
12803
12921
  root,
12804
12922
  emitRouteManifest: false
@@ -12892,7 +13010,7 @@ function runtimeChildEnv(parentEnv, overrides) {
12892
13010
  //#region src/project/bootstrap-run.ts
12893
13011
  /** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */
12894
13012
  async function resolveBootstrapRun(options) {
12895
- const { resolveRuntimeBuildArtifact } = await import("./dist-CMxQJtOA.mjs");
13013
+ const { resolveRuntimeBuildArtifact } = await import("./dist-CrZVpQSd.mjs");
12896
13014
  const loader = pathToFileURL(resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/runtime-loader.mjs")).href;
12897
13015
  const bootstrap = resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/bootstrap.mjs");
12898
13016
  const args = [`--import=${loader}`];
@@ -13057,7 +13175,7 @@ async function runDev(options) {
13057
13175
  process.on("SIGINT", shutdown);
13058
13176
  process.on("SIGTERM", shutdown);
13059
13177
  try {
13060
- const { watchApp } = await import("./dist-CMxQJtOA.mjs");
13178
+ const { watchApp } = await import("./dist-CrZVpQSd.mjs");
13061
13179
  await watchApp({
13062
13180
  root,
13063
13181
  clean: false,
@@ -13444,7 +13562,7 @@ async function runStart(options) {
13444
13562
  const apiPort = Number(new URL(serverUrl).port || 80);
13445
13563
  const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));
13446
13564
  ensureNativeDeps(runtimeNodeModules);
13447
- const { buildApp } = await import("./dist-CMxQJtOA.mjs");
13565
+ const { buildApp } = await import("./dist-CrZVpQSd.mjs");
13448
13566
  await buildApp({
13449
13567
  root,
13450
13568
  clean: false,