@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.
- package/dist/{cat-TSFMZVYS-Qzyhqpeq.mjs → cat-TSFMZVYS-RwFYGRgl.mjs} +2 -2
- package/dist/{cat-TSFMZVYS-Qzyhqpeq.mjs.map → cat-TSFMZVYS-RwFYGRgl.mjs.map} +1 -1
- package/dist/{cut-OKARJCCV-UOo5blGN.mjs → cut-OKARJCCV-7cebiTlb.mjs} +2 -2
- package/dist/{cut-OKARJCCV-UOo5blGN.mjs.map → cut-OKARJCCV-7cebiTlb.mjs.map} +1 -1
- package/dist/{dist-CMxQJtOA.mjs → dist-CrZVpQSd.mjs} +2 -2
- package/dist/{dist-CMxQJtOA.mjs.map → dist-CrZVpQSd.mjs.map} +1 -1
- package/dist/{dist-D2apKUWN-BDQ3166v.mjs → dist-DRPUD4yJ-3gMinGsn.mjs} +82 -9
- package/dist/dist-DRPUD4yJ-3gMinGsn.mjs.map +1 -0
- package/dist/{du-572XNP42-4gdN6HgU.mjs → du-572XNP42-RgaK1Rqq.mjs} +2 -2
- package/dist/{du-572XNP42-4gdN6HgU.mjs.map → du-572XNP42-RgaK1Rqq.mjs.map} +1 -1
- package/dist/{emit-route-manifest-DRcNXHCP-BHonsCIQ.mjs → emit-route-manifest-DRcNXHCP-DN1BpGOi.mjs} +31 -13
- package/dist/{emit-route-manifest-DRcNXHCP-BHonsCIQ.mjs.map → emit-route-manifest-DRcNXHCP-DN1BpGOi.mjs.map} +1 -1
- package/dist/index.mjs +146 -28
- package/dist/index.mjs.map +1 -1
- package/dist/{jq-4XLYLOS5-D_rIiq4w.mjs → jq-4XLYLOS5-DNvJFpkY.mjs} +2 -2
- package/dist/{jq-4XLYLOS5-D_rIiq4w.mjs.map → jq-4XLYLOS5-DNvJFpkY.mjs.map} +1 -1
- package/dist/{ls-ZJGQER7M-B-eSANU2.mjs → ls-ZJGQER7M-DHpAibRp.mjs} +2 -2
- package/dist/{ls-ZJGQER7M-B-eSANU2.mjs.map → ls-ZJGQER7M-DHpAibRp.mjs.map} +1 -1
- package/dist/{mistral-CCsOaxvh-FZsMk4KR.mjs → mistral-R2FX6jgL-C3TQNHh7.mjs} +3 -3
- package/dist/{mistral-CCsOaxvh-FZsMk4KR.mjs.map → mistral-R2FX6jgL-C3TQNHh7.mjs.map} +1 -1
- package/dist/{sort-SW2YEO5B-BaN_eY3l.mjs → sort-SW2YEO5B-BD_P9Q6n.mjs} +2 -2
- package/dist/{sort-SW2YEO5B-BaN_eY3l.mjs.map → sort-SW2YEO5B-BD_P9Q6n.mjs.map} +1 -1
- package/dist/{tree-YLD52CNT-BZJomf0H.mjs → tree-YLD52CNT-C9IR00tM.mjs} +2 -2
- package/dist/{tree-YLD52CNT-BZJomf0H.mjs.map → tree-YLD52CNT-C9IR00tM.mjs.map} +1 -1
- package/dist/{uniq-XSIZR6PB-Ajuixkb6.mjs → uniq-XSIZR6PB-gU1BpRGX.mjs} +2 -2
- package/dist/{uniq-XSIZR6PB-Ajuixkb6.mjs.map → uniq-XSIZR6PB-gU1BpRGX.mjs.map} +1 -1
- package/dist/{wc-LF7NU4LA-DiSdKP_u.mjs → wc-LF7NU4LA-DwSj8_V4.mjs} +2 -2
- package/dist/{wc-LF7NU4LA-DiSdKP_u.mjs.map → wc-LF7NU4LA-DwSj8_V4.mjs.map} +1 -1
- package/dist/{xan-Y6WF3IRG-COQGCVSz.mjs → xan-Y6WF3IRG-CAgH4sE_.mjs} +2 -2
- package/dist/{xan-Y6WF3IRG-COQGCVSz.mjs.map → xan-Y6WF3IRG-CAgH4sE_.mjs.map} +1 -1
- package/package.json +14 -14
- 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([
|
|
6876
|
-
|
|
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$
|
|
6882
|
-
updatedAt: isoDateTime$
|
|
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$
|
|
6893
|
-
updatedAt: isoDateTime$
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
13565
|
+
const { buildApp } = await import("./dist-CrZVpQSd.mjs");
|
|
13448
13566
|
await buildApp({
|
|
13449
13567
|
root,
|
|
13450
13568
|
clean: false,
|