@mrrlin-dev/mcp 0.4.115 → 0.4.116

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 +61 -5
  2. package/package.json +1 -1
package/dist/bin.cjs CHANGED
@@ -38515,6 +38515,43 @@ var mrrlinDeclaredOutcomeSchema = mrrlinDeclaredOutcomeShapeSchema.superRefine((
38515
38515
  });
38516
38516
  }
38517
38517
  });
38518
+ var MRRLIN_PROJECT_CODE_HOSTS = ["github", "gitlab", "local"];
38519
+ var mrrlinProjectCodeHostSchema = external_exports.enum(MRRLIN_PROJECT_CODE_HOSTS);
38520
+ var GIT_SHA_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
38521
+ var SHA256_HEX_PATTERN = /^[0-9a-f]{64}$/;
38522
+ var MRRLIN_LOCAL_DELIVERY_REF_PATTERN = /^git\+local:\/\/([^/\s@]+)\/(mrrlin\/run-ER-[A-Za-z0-9-]+)@([0-9a-f]{40}|[0-9a-f]{64})$/;
38523
+ var mrrlinLocalDeliveryRefSchema = external_exports.string().regex(MRRLIN_LOCAL_DELIVERY_REF_PATTERN, "deliveryRef must be git+local://<projectSlug>/mrrlin/run-<runId>@<sha>");
38524
+ var mrrlinLocalBuildStepSchema = external_exports.object({
38525
+ command: external_exports.string().trim().min(1).max(200),
38526
+ exitCode: external_exports.number().int(),
38527
+ logDigest: external_exports.string().regex(SHA256_HEX_PATTERN)
38528
+ });
38529
+ var mrrlinLocalBuildEvidenceSchema = external_exports.object({
38530
+ branch: external_exports.string().regex(/^mrrlin\/run-ER-[A-Za-z0-9-]+$/),
38531
+ baseSha: external_exports.string().regex(GIT_SHA_PATTERN),
38532
+ headSha: external_exports.string().regex(GIT_SHA_PATTERN),
38533
+ commitCount: external_exports.number().int(),
38534
+ steps: external_exports.array(mrrlinLocalBuildStepSchema).max(4),
38535
+ noBuildStep: external_exports.boolean(),
38536
+ checkoutDigest: external_exports.string().regex(SHA256_HEX_PATTERN)
38537
+ });
38538
+ function checkLocalBuildEvidence(evidence, local) {
38539
+ if (evidence.type !== "build")
38540
+ return `localBuild evidence requires evidence.type "build", got "${evidence.type}"`;
38541
+ if (evidence.value !== local.headSha)
38542
+ return "evidence.value must equal localBuild.headSha";
38543
+ if (local.commitCount <= 0)
38544
+ return "localBuild.commitCount must be > 0: a run with no commits never closes a task";
38545
+ if (local.headSha === local.baseSha)
38546
+ return "localBuild.headSha equals baseSha: nothing was committed";
38547
+ if (local.noBuildStep !== (local.steps.length === 0)) {
38548
+ return "localBuild.noBuildStep must be true exactly when no build/test command was detected";
38549
+ }
38550
+ const failed = local.steps.find((step) => step.exitCode !== 0);
38551
+ if (failed)
38552
+ return `localBuild step "${failed.command}" exited ${failed.exitCode}`;
38553
+ return null;
38554
+ }
38518
38555
  var mrrlinReceiptSchema = external_exports.object({
38519
38556
  kind: external_exports.enum(["outcome", "attempt"]),
38520
38557
  evidence: external_exports.object({
@@ -38522,7 +38559,17 @@ var mrrlinReceiptSchema = external_exports.object({
38522
38559
  value: external_exports.string().trim().min(1)
38523
38560
  }),
38524
38561
  observedAt: external_exports.string().datetime(),
38525
- requiresCovered: external_exports.array(artifactKindSchema)
38562
+ requiresCovered: external_exports.array(artifactKindSchema),
38563
+ // local-git-delivery: what the BRIDGE observed for a code_change delivered into a local git repo.
38564
+ // Optional, so every existing receipt is untouched; when present it is checked by
38565
+ // checkLocalBuildEvidence below, which is the single receipt rule of the design.
38566
+ localBuild: mrrlinLocalBuildEvidenceSchema.optional()
38567
+ }).superRefine((value, ctx) => {
38568
+ if (!value.localBuild)
38569
+ return;
38570
+ const problem = checkLocalBuildEvidence(value.evidence, value.localBuild);
38571
+ if (problem)
38572
+ ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["localBuild"], message: problem });
38526
38573
  });
38527
38574
  function buildReceipt(input) {
38528
38575
  return {
@@ -38982,7 +39029,10 @@ var mrrlinProjectSummarySchema = external_exports.object({
38982
39029
  // workspace-context-isolation (OQ-091): explicit client name and scope description
38983
39030
  // for multi-tenant workspace containment. Output-optional and nullable for backwards compatibility.
38984
39031
  clientName: external_exports.string().trim().max(80).nullable().optional(),
38985
- scopeDescription: external_exports.string().trim().max(240).nullable().optional()
39032
+ scopeDescription: external_exports.string().trim().max(240).nullable().optional(),
39033
+ // local-git-delivery: where this project's code lives. Null means "not asked yet" -- see
39034
+ // mrrlinProjectCodeHostSchema. Output-optional so existing fixtures need no churn.
39035
+ codeHost: mrrlinProjectCodeHostSchema.nullable().optional()
38986
39036
  });
38987
39037
  var mrrlinProjectOperatorInputSchema = external_exports.string().regex(/^@[!-~]+$/, "operator must be '@' followed by printable ASCII with no whitespace");
38988
39038
  var mrrlinProjectUpsertSchema = mrrlinProjectSummarySchema.omit({
@@ -38995,7 +39045,8 @@ var mrrlinProjectRenameSchema = external_exports.object({
38995
39045
  displayName: external_exports.string().trim().min(1).max(120).optional(),
38996
39046
  intentJudgeEnabled: external_exports.boolean().optional(),
38997
39047
  clientName: external_exports.string().trim().max(80).nullable().optional(),
38998
- scopeDescription: external_exports.string().trim().max(240).nullable().optional()
39048
+ scopeDescription: external_exports.string().trim().max(240).nullable().optional(),
39049
+ codeHost: mrrlinProjectCodeHostSchema.nullable().optional()
38999
39050
  });
39000
39051
  var ONBOARDING_KICKOFF_TRANSITIONS = [
39001
39052
  { from: null, to: "pending" },
@@ -39032,7 +39083,8 @@ var mrrlinProjectSnapshotSchema = external_exports.object({
39032
39083
  emoji: mrrlinProjectEmojiSchema,
39033
39084
  slug: mrrlinProjectSlugSchema,
39034
39085
  clientName: external_exports.string().trim().max(80).nullable().optional(),
39035
- scopeDescription: external_exports.string().trim().max(240).nullable().optional()
39086
+ scopeDescription: external_exports.string().trim().max(240).nullable().optional(),
39087
+ codeHost: mrrlinProjectCodeHostSchema.nullable().optional()
39036
39088
  }),
39037
39089
  taskDependencies: external_exports.array(mrrlinTaskDependencySchema).default([]),
39038
39090
  taskEvents: external_exports.array(mrrlinTaskEventSchema).default([]),
@@ -39552,6 +39604,9 @@ var mrrlinExecutionRunSchema = external_exports.object({
39552
39604
  projectSlug: mrrlinProjectSlugSchema,
39553
39605
  provider: external_exports.string().min(1),
39554
39606
  pullRequestUrl: external_exports.string().min(1).nullable(),
39607
+ // local-git-delivery: set instead of pullRequestUrl when a run delivered into a local git repo.
39608
+ // Optional + nullable: absent on every pre-existing run and on every GitHub run.
39609
+ deliveryRef: mrrlinLocalDeliveryRefSchema.nullable().optional(),
39555
39610
  startedAt: external_exports.string().datetime().nullable(),
39556
39611
  status: mrrlinExecutionRunStatusSchema,
39557
39612
  taskId: mrrlinTaskIdSchema,
@@ -39646,6 +39701,7 @@ var mrrlinExecutionRunUpdateSchema = external_exports.object({
39646
39701
  prodPublishRef: external_exports.string().min(1).nullable().optional(),
39647
39702
  prodWorkflowId: external_exports.number().int().positive().nullable().optional(),
39648
39703
  pullRequestUrl: external_exports.string().min(1).nullable().optional(),
39704
+ deliveryRef: mrrlinLocalDeliveryRefSchema.nullable().optional(),
39649
39705
  status: mrrlinExecutionRunStatusSchema.optional(),
39650
39706
  worktreeId: external_exports.string().min(1).nullable().optional(),
39651
39707
  // Slice 6 (cost telemetry) + Slice 7 (effort). All nullable and optional: per D6, NULL means
@@ -61764,7 +61820,7 @@ Do NOT derail the current task - if the operator has an in-flight question, answ
61764
61820
  }
61765
61821
 
61766
61822
  // src/_generated/version.ts
61767
- var PKG_VERSION = "0.4.115";
61823
+ var PKG_VERSION = "0.4.116";
61768
61824
 
61769
61825
  // src/receipt-signing.ts
61770
61826
  var import_node_crypto13 = __toESM(require("node:crypto"), 1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrrlin-dev/mcp",
3
- "version": "0.4.115",
3
+ "version": "0.4.116",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mrrlin-mcp": "dist/bin.cjs"