@mrrlin-dev/mcp 0.4.98 → 0.4.99

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 (2) hide show
  1. package/dist/bin.cjs +213 -4
  2. package/package.json +1 -1
package/dist/bin.cjs CHANGED
@@ -37189,6 +37189,39 @@ function date4(params) {
37189
37189
  // ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
37190
37190
  config(en_default());
37191
37191
 
37192
+ // ../../packages/schemas/dist/plans.js
37193
+ var PLAN_TIERS = ["base", "pro", "team", "ultra"];
37194
+ var planTierSchema = external_exports.enum(PLAN_TIERS);
37195
+ var billingPriceSchema = external_exports.object({
37196
+ amount: external_exports.number().int().nonnegative(),
37197
+ currency: external_exports.string().length(3)
37198
+ });
37199
+ var billingPlansResponseSchema = external_exports.object({
37200
+ data: external_exports.object({
37201
+ plans: external_exports.array(external_exports.object({
37202
+ tier: planTierSchema,
37203
+ name: external_exports.string().min(1),
37204
+ limits: external_exports.object({
37205
+ projects: external_exports.number().int(),
37206
+ seats: external_exports.number().int()
37207
+ }),
37208
+ prices: external_exports.object({
37209
+ month: billingPriceSchema.optional(),
37210
+ year: billingPriceSchema.optional()
37211
+ })
37212
+ }))
37213
+ })
37214
+ });
37215
+ var createCheckoutSessionRequestSchema = external_exports.object({
37216
+ tier: planTierSchema,
37217
+ interval: external_exports.enum(["month", "year"])
37218
+ });
37219
+ var billingUrlResponseSchema = external_exports.object({
37220
+ data: external_exports.object({
37221
+ url: external_exports.string().url()
37222
+ })
37223
+ });
37224
+
37192
37225
  // ../../packages/schemas/dist/artifact-checks.js
37193
37226
  var artifactKindSchema = external_exports.enum([
37194
37227
  "document",
@@ -37394,7 +37427,16 @@ var openApiOperationIds = {
37394
37427
  confirmFirstWrite: "confirmFirstWrite",
37395
37428
  resolveArtifactKindRoute: "resolveArtifactKindRoute",
37396
37429
  resolveDeliveryForArtifactKind: "resolveDeliveryForArtifactKind",
37397
- recordCapabilityUse: "recordCapabilityUse"
37430
+ recordCapabilityUse: "recordCapabilityUse",
37431
+ resolveAccount: "resolveAccount",
37432
+ linkAccountIdentity: "linkAccountIdentity",
37433
+ getMyAccount: "getMyAccount",
37434
+ getMyEntitlement: "getMyEntitlement",
37435
+ listBillingPlans: "listBillingPlans",
37436
+ createCheckoutSession: "createCheckoutSession",
37437
+ createBillingPortalSession: "createBillingPortalSession",
37438
+ syncBilling: "syncBilling",
37439
+ redeemAppsumoCode: "redeemAppsumoCode"
37398
37440
  };
37399
37441
 
37400
37442
  // ../../packages/schemas/dist/session.js
@@ -37414,10 +37456,13 @@ var operatorSessionSchema = external_exports.object({
37414
37456
  // Default 'project' for backward-compat: tokens minted before this field existed parse
37415
37457
  // cleanly into the project branch of the middleware (which mirrors today's behavior).
37416
37458
  scope: external_exports.enum(["project", "operator"]).default("project"),
37459
+ accountId: external_exports.string().uuid().optional(),
37460
+ identitySubject: external_exports.string().min(1).optional(),
37461
+ purpose: external_exports.enum(["session", "identity_assertion"]).default("session"),
37417
37462
  // Billing entitlement carried on the session. Optional because a GitHub session never has one
37418
37463
  // and a Firebase session has one only once the claims exist. `determinedAt` is what makes it
37419
37464
  // falsifiable: the token lives for 7 days, so a value that can go stale needs a freshness bound
37420
- // enforced by the reader (readEffectivePlan), not by the cookie.
37465
+ // enforced by the reader, not by the cookie.
37421
37466
  entitlement: external_exports.object({
37422
37467
  plan: external_exports.string(),
37423
37468
  status: external_exports.enum(["active", "none"]),
@@ -38064,6 +38109,24 @@ var TASK_NOTES_JOURNAL_SECTIONS = [
38064
38109
  ];
38065
38110
  var JOURNAL_HEADING_RE = new RegExp(`^##[ \\t]+(${TASK_NOTES_JOURNAL_SECTIONS.map((s) => s.heading).join("|")})\\b[ \\t]*(?:[\u2014\u2013-][ \\t]*(\\S.*?))?[ \\t]*$`);
38066
38111
 
38112
+ // ../../packages/schemas/dist/appsumo.js
38113
+ var APPSUMO_CODE_ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
38114
+ var APPSUMO_ALPHABET_SET = new Set(APPSUMO_CODE_ALPHABET);
38115
+ var redeemAppsumoCodeRequestSchema = external_exports.object({
38116
+ code: external_exports.string().min(1).max(64)
38117
+ });
38118
+ var redeemAppsumoCodeResponseSchema = external_exports.object({
38119
+ data: external_exports.object({
38120
+ outcome: external_exports.enum(["redeemed", "already_redeemed_by_you"]),
38121
+ codes: external_exports.number().int().min(1).max(4),
38122
+ tier: planTierSchema,
38123
+ limits: external_exports.object({
38124
+ projects: external_exports.number().int().nonnegative(),
38125
+ seats: external_exports.number().int().nonnegative()
38126
+ })
38127
+ })
38128
+ });
38129
+
38067
38130
  // ../../packages/schemas/dist/integration-route-defaults.js
38068
38131
  var DEFAULT_INTEGRATION_ROUTES = {
38069
38132
  github: {
@@ -38665,9 +38728,12 @@ var mrrlinProjectSummarySchema = external_exports.object({
38665
38728
  clientName: external_exports.string().trim().max(80).nullable().optional(),
38666
38729
  scopeDescription: external_exports.string().trim().max(240).nullable().optional()
38667
38730
  });
38731
+ var mrrlinProjectOperatorInputSchema = external_exports.string().regex(/^@[!-~]+$/, "operator must be '@' followed by printable ASCII with no whitespace");
38668
38732
  var mrrlinProjectUpsertSchema = mrrlinProjectSummarySchema.omit({
38669
38733
  onboardingKickoffState: true,
38670
38734
  slug: true
38735
+ }).extend({
38736
+ github: mrrlinGithubBindingSchema.extend({ operator: mrrlinProjectOperatorInputSchema })
38671
38737
  });
38672
38738
  var mrrlinProjectRenameSchema = external_exports.object({
38673
38739
  displayName: external_exports.string().trim().min(1).max(120).optional(),
@@ -39091,13 +39157,61 @@ var projectSnapshotResponseSchema = external_exports.object({
39091
39157
  var projectSummaryResponseSchema = external_exports.object({
39092
39158
  data: mrrlinProjectSummarySchema
39093
39159
  });
39160
+ var projectListItemSchema = mrrlinProjectSummarySchema.extend({
39161
+ viewerRole: external_exports.enum(["owner", "collaborator"]).optional(),
39162
+ // True when this caller would get 402 (owner plan inactive, project over limit, or no seat) on
39163
+ // the project's routes. Lets the web skip paused projects when picking a default and offer the
39164
+ // ones that still open. Absent when the API runs without a session (auth disabled).
39165
+ paused: external_exports.boolean().optional()
39166
+ });
39094
39167
  var projectSummaryListResponseSchema = external_exports.object({
39095
- data: external_exports.array(mrrlinProjectSummarySchema),
39168
+ data: external_exports.array(projectListItemSchema),
39096
39169
  entitlement: external_exports.object({
39097
39170
  plan: external_exports.string(),
39098
39171
  status: external_exports.union([external_exports.literal("active"), external_exports.literal("none")])
39099
39172
  })
39100
39173
  });
39174
+ var accountEntitlementSchema = external_exports.object({
39175
+ accountId: external_exports.string(),
39176
+ standing: external_exports.enum(["entitled", "collaborator", "none"]),
39177
+ lapsed: external_exports.boolean(),
39178
+ tier: planTierSchema.nullable(),
39179
+ source: external_exports.enum(["stripe", "appsumo", "grant"]).nullable(),
39180
+ stripe: external_exports.object({
39181
+ status: external_exports.string(),
39182
+ tier: planTierSchema.nullable(),
39183
+ interval: external_exports.enum(["month", "year"]).nullable(),
39184
+ currentPeriodEnd: external_exports.string().nullable(),
39185
+ cancelAtPeriodEnd: external_exports.boolean()
39186
+ }).nullable(),
39187
+ appsumo: external_exports.object({
39188
+ codes: external_exports.number().int(),
39189
+ tier: planTierSchema
39190
+ }).nullable(),
39191
+ grant: external_exports.object({
39192
+ tier: planTierSchema,
39193
+ reason: external_exports.string()
39194
+ }).nullable(),
39195
+ limits: external_exports.object({
39196
+ projects: external_exports.number().int(),
39197
+ seats: external_exports.number().int()
39198
+ }).nullable(),
39199
+ usage: external_exports.object({
39200
+ projects: external_exports.number().int(),
39201
+ seats: external_exports.number().int()
39202
+ }),
39203
+ collaboratorProjects: external_exports.number().int(),
39204
+ upgradePath: external_exports.enum(["stripe", "appsumo", "none"]),
39205
+ tiers: external_exports.array(external_exports.object({
39206
+ tier: planTierSchema,
39207
+ projects: external_exports.number().int(),
39208
+ seats: external_exports.number().int(),
39209
+ selfServe: external_exports.boolean()
39210
+ }))
39211
+ });
39212
+ var accountEntitlementResponseSchema = external_exports.object({
39213
+ data: accountEntitlementSchema
39214
+ });
39101
39215
  var taskResponseSchema = external_exports.object({
39102
39216
  data: mrrlinTaskSchema
39103
39217
  });
@@ -40021,6 +40135,47 @@ function resolveProjectClientScope(project) {
40021
40135
  scopeDescription
40022
40136
  };
40023
40137
  }
40138
+ var resolvedAccountSchema = external_exports.object({
40139
+ accountId: external_exports.string().uuid(),
40140
+ principal: external_exports.string().min(1),
40141
+ emails: external_exports.array(external_exports.string().email()),
40142
+ providers: external_exports.array(external_exports.enum(["github", "firebase"]))
40143
+ });
40144
+ var resolveAccountResponseSchema = external_exports.object({
40145
+ data: external_exports.discriminatedUnion("outcome", [
40146
+ resolvedAccountSchema.extend({ outcome: external_exports.literal("resolved") }),
40147
+ resolvedAccountSchema.extend({ outcome: external_exports.literal("created") }),
40148
+ external_exports.object({
40149
+ outcome: external_exports.literal("link_required"),
40150
+ accountId: external_exports.string().uuid(),
40151
+ principal: external_exports.null(),
40152
+ emails: external_exports.array(external_exports.string()).length(0),
40153
+ providers: external_exports.array(external_exports.enum(["github", "firebase"])).min(1)
40154
+ }),
40155
+ external_exports.object({
40156
+ outcome: external_exports.literal("refused"),
40157
+ accountId: external_exports.string().uuid().nullable().optional(),
40158
+ principal: external_exports.null().optional(),
40159
+ emails: external_exports.array(external_exports.string()).optional(),
40160
+ providers: external_exports.array(external_exports.enum(["github", "firebase"])).optional()
40161
+ })
40162
+ ])
40163
+ });
40164
+ var linkAccountIdentityRequestSchema = external_exports.object({
40165
+ assertion: external_exports.string().min(1)
40166
+ });
40167
+ var accountSummaryResponseSchema = external_exports.object({
40168
+ data: external_exports.object({
40169
+ accountId: external_exports.string().uuid(),
40170
+ principal: external_exports.string().min(1),
40171
+ emails: external_exports.array(external_exports.string().email()),
40172
+ identities: external_exports.array(external_exports.object({
40173
+ provider: external_exports.enum(["github", "firebase"]),
40174
+ login: external_exports.string().nullable(),
40175
+ email: external_exports.string().nullable()
40176
+ }))
40177
+ })
40178
+ });
40024
40179
 
40025
40180
  // ../../packages/client/dist/agent-token-provider.js
40026
40181
  var AgentTokenProviderError = class extends Error {
@@ -41143,6 +41298,60 @@ function createMrrlinClient(config2) {
41143
41298
  await request(`/operator/agent-credentials/${encodeURIComponent(credentialId)}`, {
41144
41299
  method: "DELETE"
41145
41300
  });
41301
+ },
41302
+ async resolveAccount() {
41303
+ const body = await request("/auth/account/resolve", {
41304
+ method: "POST"
41305
+ });
41306
+ return resolveAccountResponseSchema.parse(body);
41307
+ },
41308
+ async linkAccountIdentity(assertion) {
41309
+ const body = await request("/auth/account/link", {
41310
+ body: JSON.stringify({ assertion }),
41311
+ headers: { "content-type": "application/json" },
41312
+ method: "POST"
41313
+ });
41314
+ return resolveAccountResponseSchema.parse(body);
41315
+ },
41316
+ async getMyAccount() {
41317
+ const body = await request("/me/account");
41318
+ return accountSummaryResponseSchema.parse(body);
41319
+ },
41320
+ async getMyEntitlement() {
41321
+ const body = await request("/me/entitlement");
41322
+ return accountEntitlementResponseSchema.parse(body).data;
41323
+ },
41324
+ async listBillingPlans() {
41325
+ const body = await request("/billing/plans");
41326
+ return billingPlansResponseSchema.parse(body).data.plans;
41327
+ },
41328
+ async createCheckoutSession(input) {
41329
+ const body = await request("/billing/checkout-session", {
41330
+ body: JSON.stringify(input),
41331
+ headers: { "content-type": "application/json" },
41332
+ method: "POST"
41333
+ });
41334
+ return billingUrlResponseSchema.parse(body).data;
41335
+ },
41336
+ async createBillingPortalSession() {
41337
+ const body = await request("/billing/portal-session", {
41338
+ method: "POST"
41339
+ });
41340
+ return billingUrlResponseSchema.parse(body).data;
41341
+ },
41342
+ async syncBilling() {
41343
+ const body = await request("/billing/sync", {
41344
+ method: "POST"
41345
+ });
41346
+ return accountEntitlementResponseSchema.parse(body).data;
41347
+ },
41348
+ async redeemAppsumoCode(code) {
41349
+ const body = await request("/appsumo/redeem", {
41350
+ body: JSON.stringify({ code }),
41351
+ headers: { "content-type": "application/json" },
41352
+ method: "POST"
41353
+ });
41354
+ return redeemAppsumoCodeResponseSchema.parse(body).data;
41146
41355
  }
41147
41356
  };
41148
41357
  }
@@ -58695,7 +58904,7 @@ Do NOT derail the current task - if the operator has an in-flight question, answ
58695
58904
  }
58696
58905
 
58697
58906
  // src/_generated/version.ts
58698
- var PKG_VERSION = "0.4.98";
58907
+ var PKG_VERSION = "0.4.99";
58699
58908
 
58700
58909
  // src/director-closure.ts
58701
58910
  var CLOSURE_SNAPSHOT_TIMEOUT_MS = 2e3;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrrlin-dev/mcp",
3
- "version": "0.4.98",
3
+ "version": "0.4.99",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mrrlin-mcp": "dist/bin.cjs"