@mrrlin-dev/mcp 0.3.11 → 0.3.13

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 +40 -13
  2. package/package.json +2 -2
package/dist/bin.cjs CHANGED
@@ -36728,10 +36728,11 @@ var mrrlinTaskUpdateSchema = external_exports.object({
36728
36728
  status: mrrlinTaskStatusSchema.optional(),
36729
36729
  subcategory: taxonomySubcategorySchema.optional(),
36730
36730
  tags: mrrlinTaskTagsSchema.optional(),
36731
+ title: external_exports.string().min(1).optional(),
36731
36732
  type: mrrlinTaskTypeSchema.optional(),
36732
36733
  followUpAt: external_exports.string().datetime().nullable().optional(),
36733
36734
  verificationDueAt: external_exports.string().datetime().nullable().optional()
36734
- }).refine((value) => value.assignee !== void 0 || value.autoDeploy !== void 0 || value.autonomyLevel !== void 0 || value.autonomyReason !== void 0 || value.category !== void 0 || value.directorThreadId !== void 0 || value.dueDate !== void 0 || value.followUpAt !== void 0 || value.impact !== void 0 || value.notes !== void 0 || value.planId !== void 0 || value.specApproved !== void 0 || value.specWikiPageId !== void 0 || value.status !== void 0 || value.subcategory !== void 0 || value.tags !== void 0 || value.type !== void 0 || value.verificationDueAt !== void 0, { message: "TaskUpdate requires at least one field" }).superRefine((value, context) => {
36735
+ }).refine((value) => value.assignee !== void 0 || value.autoDeploy !== void 0 || value.autonomyLevel !== void 0 || value.autonomyReason !== void 0 || value.category !== void 0 || value.directorThreadId !== void 0 || value.dueDate !== void 0 || value.followUpAt !== void 0 || value.impact !== void 0 || value.notes !== void 0 || value.planId !== void 0 || value.specApproved !== void 0 || value.specWikiPageId !== void 0 || value.status !== void 0 || value.subcategory !== void 0 || value.tags !== void 0 || value.title !== void 0 || value.type !== void 0 || value.verificationDueAt !== void 0, { message: "TaskUpdate requires at least one field" }).superRefine((value, context) => {
36735
36736
  if (value.autonomyLevel !== void 0 && value.autonomyReason === void 0) {
36736
36737
  context.addIssue({
36737
36738
  code: external_exports.ZodIssueCode.custom,
@@ -36857,6 +36858,10 @@ var githubInstallCallbackResponseSchema = external_exports.object({
36857
36858
  data: external_exports.object({
36858
36859
  installation: mrrlinGithubInstallationSchema,
36859
36860
  linkedProjectSlugs: external_exports.array(mrrlinProjectSlugSchema),
36861
+ // Projects the operator initiated the install for whose BOUND repo the installation cannot
36862
+ // access (repo not in the installation's selection) — deliberately NOT linked: "bound"
36863
+ // must mean the repo is actually reachable. Additive; defaults keep old clients parsing.
36864
+ unlinkedProjectSlugs: external_exports.array(mrrlinProjectSlugSchema).default([]),
36860
36865
  matchedRepos: external_exports.array(external_exports.string().regex(/^[^/]+\/[^/]+$/)),
36861
36866
  setupAction: external_exports.enum(["install", "request", "update"])
36862
36867
  })
@@ -37125,6 +37130,10 @@ var mrrlinExecutionArtifactCreateSchema = external_exports.object({
37125
37130
  kind: mrrlinExecutionArtifactKindSchema,
37126
37131
  payload: external_exports.record(external_exports.string(), external_exports.unknown()).default({})
37127
37132
  });
37133
+ var executionArtifactListFiltersSchema = external_exports.object({
37134
+ limit: external_exports.coerce.number().int().min(1).max(100).optional(),
37135
+ order: external_exports.enum(["asc", "desc"]).optional()
37136
+ });
37128
37137
  var executionRunResponseSchema = external_exports.object({
37129
37138
  data: mrrlinExecutionRunSchema
37130
37139
  });
@@ -37333,7 +37342,10 @@ var mrrlinInboxItemIdSchema = external_exports.string().regex(/^II-[A-Za-z0-9._-
37333
37342
  var mrrlinInboxItemActionPayloadSchema = external_exports.object({
37334
37343
  actor: external_exports.string().min(1),
37335
37344
  provider: external_exports.string().min(1),
37336
- runId: mrrlinExecutionRunIdSchema
37345
+ runId: mrrlinExecutionRunIdSchema,
37346
+ // Optional (additive): when true, approving the proposal creates a full code-execution run
37347
+ // (worktree + push/PR path). Scheduler proposals set it; legacy payloads omit it.
37348
+ codeExecution: external_exports.boolean().optional()
37337
37349
  });
37338
37350
  var mrrlinInboxItemSchema = external_exports.object({
37339
37351
  actionPayload: mrrlinInboxItemActionPayloadSchema.nullable(),
@@ -38087,8 +38099,12 @@ function createMrrlinClient(config2) {
38087
38099
  });
38088
38100
  return executionRunResponseSchema.parse(body).data;
38089
38101
  },
38090
- async listExecutionArtifacts(projectSlug, runId) {
38091
- const body = await request(`${projectPath(projectSlug)}/execution-runs/${encodeURIComponent(runId)}/artifacts`);
38102
+ async listExecutionArtifacts(projectSlug, runId, filters = {}) {
38103
+ const url2 = appendQuery(`${projectPath(projectSlug)}/execution-runs/${encodeURIComponent(runId)}/artifacts`, {
38104
+ limit: filters.limit !== void 0 ? String(filters.limit) : void 0,
38105
+ order: filters.order === "desc" ? "desc" : void 0
38106
+ });
38107
+ const body = await request(url2);
38092
38108
  return executionArtifactListResponseSchema.parse(body).data;
38093
38109
  },
38094
38110
  async appendExecutionArtifact(projectSlug, runId, input) {
@@ -38364,17 +38380,17 @@ function startSelfUpdate(deps) {
38364
38380
  version: pkgVersion,
38365
38381
  latestVersion
38366
38382
  });
38367
- return `[bridge:update] An update for @mrrlin-dev/mcp is available: ${pkgVersion} \u2192 ${latestVersion}.
38383
+ return `[bridge:update] An update for @mrrlin-dev/mcp is available: ${pkgVersion} -> ${latestVersion}.
38368
38384
 
38369
- This turn, at a natural pause, ASK the operator a yes/no question \u2014 e.g. "\u0411\u0430\u0447\u0443 \u0449\u043E bridge \u043D\u0430 ${pkgVersion}, \u043D\u0430 npm \u0443\u0436\u0435 ${latestVersion} \u2014 \u043E\u043D\u043E\u0432\u0438\u0442\u0438 \u0437\u0430\u0440\u0430\u0437? (\u0437\u0430\u043F\u0443\u0449\u0443 \`npm install -g @mrrlin-dev/mcp@latest\`)". Do NOT install without explicit confirmation.
38385
+ This turn, at a natural pause, ASK the operator a yes/no question IN THE OPERATOR'S LANGUAGE (mirror the language they are chatting in) - e.g. in English: "The bridge is on ${pkgVersion} but npm already has ${latestVersion} - update now? (I'll run \`npm install -g @mrrlin-dev/mcp@latest\`)". Do NOT install without explicit confirmation.
38370
38386
 
38371
- If the operator confirms (yes / \u0442\u0430\u043A / \u0430\u0433\u0430 / etc.): immediately run \`npm install -g @mrrlin-dev/mcp@latest\` via your shell tool and report the outcome in chat. After a successful install, the bridge auto-restarts via its self-update loop within a couple of minutes \u2014 you do NOT need to call pm2.
38387
+ If the operator confirms: immediately run \`npm install -g @mrrlin-dev/mcp@latest\` via your shell tool and report the outcome in chat. After a successful install, the bridge auto-restarts via its self-update loop within a couple of minutes - you do NOT need to call pm2.
38372
38388
 
38373
38389
  If the operator declines / says "later": acknowledge briefly and do not bring it up again this turn. The bridge has a cooldown and will re-offer in 48h.
38374
38390
 
38375
38391
  If the install fails (permission denied, registry pinned, sudo required, network blocked): paste the error verbatim and show the operator the manual command \`npm install -g @mrrlin-dev/mcp@latest\` plus a one-line hint about likely cause.
38376
38392
 
38377
- Do NOT derail the current task \u2014 if the operator has an in-flight question, answer that first; the update offer is a brief aside, not the main subject.`;
38393
+ Do NOT derail the current task - if the operator has an in-flight question, answer that first; the update offer is a brief aside, not the main subject.`;
38378
38394
  }
38379
38395
  let startupBinSha = null;
38380
38396
  try {
@@ -38534,7 +38550,7 @@ Do NOT derail the current task \u2014 if the operator has an in-flight question,
38534
38550
  }
38535
38551
 
38536
38552
  // src/_generated/version.ts
38537
- var PKG_VERSION = "0.3.11";
38553
+ var PKG_VERSION = "0.3.13";
38538
38554
 
38539
38555
  // src/api-base-url.ts
38540
38556
  var DEFAULT_API_BASE_URL = "http://127.0.0.1:8787";
@@ -39244,7 +39260,10 @@ async function driveRun(deps, projectSlug, runId) {
39244
39260
  runId,
39245
39261
  defaultBranch: await getDefaultBranch(projectSlug)
39246
39262
  });
39247
- await deps.client.updateExecutionRun(projectSlug, runId, { worktreeId: worktreePath });
39263
+ await deps.client.updateExecutionRun(projectSlug, runId, {
39264
+ worktreeId: worktreePath,
39265
+ branch: worktreeBranch(runId)
39266
+ });
39248
39267
  sandbox = "danger-full-access";
39249
39268
  turnCwd = worktreePath;
39250
39269
  useExecutor = true;
@@ -44203,7 +44222,15 @@ function tokenRefreshIntervalMs() {
44203
44222
  const seconds = Math.min(55, Math.max(15, readEnvInt("MRRLIN_DIRECTOR_BRIDGE_TOKEN_REFRESH_SECONDS", 45)));
44204
44223
  return seconds * 1e3;
44205
44224
  }
44206
- var COLLECTED_TURN_TIMEOUT_MS = 3e5;
44225
+ var COLLECTED_TURN_TIMEOUT_DEFAULT_MS = 9e5;
44226
+ function collectedTurnTimeoutMs() {
44227
+ const raw = process.env.MRRLIN_COLLECTED_TURN_TIMEOUT_MS;
44228
+ if (raw) {
44229
+ const parsed = Number(raw);
44230
+ if (Number.isFinite(parsed) && parsed > 0) return Math.floor(parsed);
44231
+ }
44232
+ return COLLECTED_TURN_TIMEOUT_DEFAULT_MS;
44233
+ }
44207
44234
  var DEFAULT_IMAGE_ONLY_PROMPT = "Look at the attached image.";
44208
44235
  var VERIFICATION_BASE_INSTRUCTIONS = [
44209
44236
  "You are a deployment verification agent. Make ONLY read-only HTTP requests to the single",
@@ -44269,8 +44296,8 @@ async function runCollectedCodexTurn(client, prompt, cwd, baseInstructions) {
44269
44296
  await turnEnded;
44270
44297
  },
44271
44298
  interrupt: () => client.turn.interrupt({ threadId }),
44272
- timeoutMs: COLLECTED_TURN_TIMEOUT_MS,
44273
- timeoutMessage: `Collected turn did not complete within ${COLLECTED_TURN_TIMEOUT_MS}ms.`
44299
+ timeoutMs: collectedTurnTimeoutMs(),
44300
+ timeoutMessage: `Collected turn did not complete within ${collectedTurnTimeoutMs()}ms.`
44274
44301
  });
44275
44302
  for (const ev of mapper.flush()) if (ev.type === "assistant") chunks.push(ev.content);
44276
44303
  } finally {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrrlin-dev/mcp",
3
- "version": "0.3.11",
3
+ "version": "0.3.13",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mrrlin-mcp": "dist/bin.cjs"
@@ -23,8 +23,8 @@
23
23
  "esbuild": "^0.24.0",
24
24
  "tsx": "^4.22.3",
25
25
  "@mrrlin/codex-client": "0.0.0",
26
- "@mrrlin/client": "0.0.0",
27
26
  "@mrrlin/director-e2e": "0.0.0",
27
+ "@mrrlin/client": "0.0.0",
28
28
  "@mrrlin/schemas": "0.0.0",
29
29
  "@mrrlin/tsconfig": "0.0.0",
30
30
  "@mrrlin/wiki": "0.0.0"