@mrrlin-dev/mcp 0.3.62 → 0.3.64

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 +70 -7
  2. package/package.json +4 -4
package/dist/bin.cjs CHANGED
@@ -39965,7 +39965,7 @@ function startCodexProbe(deps = {}) {
39965
39965
  }
39966
39966
 
39967
39967
  // src/_generated/version.ts
39968
- var PKG_VERSION = "0.3.62";
39968
+ var PKG_VERSION = "0.3.64";
39969
39969
 
39970
39970
  // src/api-base-url-migrate.ts
39971
39971
  var import_node_fs2 = __toESM(require("node:fs"), 1);
@@ -43202,6 +43202,9 @@ var BASE_INSTRUCTIONS_PREFIX = [
43202
43202
  " if you are blocked and a human must decide before the work can continue, leave it at `handoff_needed`.",
43203
43203
  "",
43204
43204
  "File artifacts:",
43205
+ "- Decide BEFORE writing your result whether the operator will scan it, compare across it,",
43206
+ " re-read it later, keep it, or share it. If so it is a file, not inline text \u2014 judge by use,",
43207
+ " not by topic, domain, or data type.",
43205
43208
  "- When your output is a file (markdown report, HTML, screenshot), upload it with",
43206
43209
  " `upload_artifact` and embed the returned markdown link \u2014 never inline large blobs",
43207
43210
  " into chat, spec, or note text.",
@@ -43209,8 +43212,28 @@ var BASE_INSTRUCTIONS_PREFIX = [
43209
43212
  " or evidence page will reference (180 days). Always pass taskId/runId when known.",
43210
43213
  "- Anything user-facing delivered as a file MUST be uploaded. Files are capped at 5MB \u2014",
43211
43214
  " split or summarize larger outputs.",
43215
+ "- `upload_artifact` needs a real local file path, so it presupposes you can write one. When this",
43216
+ " run path CAN write files, produce the artifact normally \u2014 that is the default. ONLY when it",
43217
+ " cannot write, do NOT attempt the file: put the summary in your result text and state what a",
43218
+ " file would have held. Never fake a path you did not write.",
43219
+ "",
43220
+ "Produced URLs \u2014 the operator's per-page links come only from you:",
43221
+ "- Call `record_produced_url` after publishing EACH web page this task produced, so the task UI",
43222
+ " links the page itself instead of the deployed site root. One call per page, not per run.",
43223
+ "- Pass either a full external https URL, or a path starting with `/` to resolve against the",
43224
+ " run's deployed env URL. An optional `label` (<=40 chars) replaces the default page title.",
43225
+ "- Never record the site root or a bare domain \u2014 the point is a link that opens the page itself.",
43226
+ " If a published page is not serving yet, record it once the deploy completes; never skip it.",
43227
+ " Nothing else populates these links, so a page you do not record has none at all.",
43212
43228
  "",
43213
43229
  "Browser tools (when the run needs to drive a browser):",
43230
+ "- Choose the browser FIRST when the target is a rendered UI, the question is inherently visual,",
43231
+ " the content sits behind a logged-in session, or reconstructing the answer would take many",
43232
+ " chained fetches. A single cheap fetch is still right for a plain one-shot HTTP/HTML check.",
43233
+ "- Escalate from a fetch to the browser in the same run on 401/403, a bot/consent/CAPTCHA wall,",
43234
+ " an empty JS-only shell, or a login gate. A 429 is rate limiting, not a wall \u2014 back off and",
43235
+ " retry once, escalating only if it persists. A failed fetch is a signal to change tool, not",
43236
+ " a finding \u2014 never conclude a public target is unverifiable without having tried the browser.",
43214
43237
  "- Use tools from the `mrrlin-browser` MCP server ONLY \u2014 browser_navigate, browser_click,",
43215
43238
  " browser_snapshot, browser_type, etc. Never invoke the same-named tools from any other",
43216
43239
  " browser MCP (`playwright`, `chrome-devtools`, `puppeteer`, ...) that may also be connected.",
@@ -50315,7 +50338,9 @@ function buildThreadStartParams(msg, config2, desiredModel) {
50315
50338
  "- For public/third-party HTTP/HTML verification through `commandExecution`, prefer built-in",
50316
50339
  " tooling such as `curl`, `python3` stdlib `urllib.request`, and `html.parser`; do not assume",
50317
50340
  " third-party Python packages such as `requests` or `bs4` are installed. This permission covers",
50318
- " third-party sites ONLY \u2014 never call the Mrrlin API from `commandExecution`.",
50341
+ " third-party sites ONLY \u2014 never call the Mrrlin API from `commandExecution`. A cheap fetch is",
50342
+ " the default, not the only option: see the browser-vs-fetch contract below for when a fetch is",
50343
+ " the wrong tool outright and when a failed fetch must be escalated to `mrrlin-browser`.",
50319
50344
  "",
50320
50345
  "Handoff contract \u2014 durable operator action MUST NOT live only in chat:",
50321
50346
  "- If you conclude that a specific task needs human input, account access, manual evidence,",
@@ -50348,11 +50373,49 @@ function buildThreadStartParams(msg, config2, desiredModel) {
50348
50373
  " if it did not (that state REQUIRES a linked Evidence wiki page); or, if the effect still",
50349
50374
  " is not measurable, re-set `verificationDueAt` to a new date with a reason.",
50350
50375
  "",
50351
- "File artifacts: when you produce a file for the operator (report, HTML, screenshot),",
50352
- "upload it with `upload_artifact` (class=temp for one-off downloads, class=durable when a",
50353
- "spec/evidence page references it; pass taskId when known) and paste the returned markdown",
50354
- "link into your reply. For images, embed as an image (`![name](url)`) so the chat previews",
50355
- "it inline. Never inline file contents into chat. 5MB max per file.",
50376
+ "File artifacts contract \u2014 decide the delivery medium BEFORE you compose the reply:",
50377
+ "- First ask what the operator will DO with this output. If they will scan it, compare across",
50378
+ " it, re-read it later, keep it, or share it, it belongs in a FILE. If they need to know one",
50379
+ " thing right now, chat alone is right. Judge by use, not by topic, domain, or data type.",
50380
+ "- When it is a file: write it (`.md` for linear prose, `.html` when structure or layout",
50381
+ " carries meaning), upload with `upload_artifact` (class=temp for one-off downloads,",
50382
+ " class=durable when a spec/evidence page references it; pass taskId when known), and paste",
50383
+ " the returned markdown link into your reply.",
50384
+ "- The chat reply must still stand alone as a complete answer even if the file is never opened:",
50385
+ " the headline finding, the few points that matter, then the link. Never reduce it to",
50386
+ ' "see attached" or "details in the report".',
50387
+ "- For images, embed as an image (`![name](url)`) so the chat previews it inline.",
50388
+ "- Never inline file contents into chat. 5MB max per file.",
50389
+ "",
50390
+ "Browser-vs-fetch contract \u2014 pick whatever reaches ground truth in the fewest steps:",
50391
+ "- Reach for `mrrlin-browser` FIRST, without trying a fetch at all, when the target is a",
50392
+ " rendered UI, the question is inherently visual, the content sits behind a logged-in session,",
50393
+ " or reconstructing the answer would take many chained fetches.",
50394
+ "- A single cheap `curl`/`python3 urllib` fetch stays the right default for a plain one-shot",
50395
+ " HTTP/HTML check. Do not launch a browser for something one fetch already answers.",
50396
+ "- Escalate to `mrrlin-browser` in the SAME turn whenever a fetch cannot establish ground",
50397
+ " truth: 401/403, a bot/consent/CAPTCHA wall, an empty JS-only shell, or a login gate. A 429",
50398
+ " is rate limiting, not a wall \u2014 back off and retry the fetch once, and escalate only if it",
50399
+ " persists (bot detection does sometimes answer 429 to non-browser clients).",
50400
+ "- A failed fetch is a signal to change tool, never a finding. NEVER report that you could not",
50401
+ " check, verify, or reach a publicly reachable target until you have actually tried the",
50402
+ " browser on it in this turn.",
50403
+ "",
50404
+ "Initiative contract \u2014 do the obvious next step instead of offering it:",
50405
+ "- When a next step is cheap, clearly wanted, and finishable in this turn, just do it and",
50406
+ ' report the result. Do not end a reply with "if you want, I can also ..." for work you',
50407
+ " could have finished in the time it took to offer.",
50408
+ "- This never overrides the turn-lifecycle rules above: still split a large batch UP FRONT and",
50409
+ " still end at a clean boundary with an explicit request to continue. Ask when the work is",
50410
+ " genuinely big, needs an operator decision, or would change scope \u2014 never to dodge cheap work.",
50411
+ "",
50412
+ "Context-handle contract \u2014 a `mrrlin://` handle is a pointer, not an answer:",
50413
+ "- When tool output carries a `mrrlin://` handle and your answer depends on detail the compact",
50414
+ " envelope does not contain, call `retrieve_context` on that handle BEFORE answering.",
50415
+ "- Before any irreversible action on a handled record \u2014 closing a task, dispatching a deploy,",
50416
+ " writing a spec \u2014 call `retrieve_context` first. Never act on a compact envelope alone.",
50417
+ "- Never guess the missing detail, and never report a field as absent when it is merely",
50418
+ " un-rehydrated. Do not echo a raw handle to the operator as if it were data.",
50356
50419
  "",
50357
50420
  "Clarifying-question contract \u2014 ask early, never lose the question:",
50358
50421
  "- During a live chat turn, when a SPECIFIC task is ambiguous and the ambiguity affects",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrrlin-dev/mcp",
3
- "version": "0.3.62",
3
+ "version": "0.3.64",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mrrlin-mcp": "dist/bin.cjs"
@@ -21,12 +21,12 @@
21
21
  "@types/ws": "^8.18.1",
22
22
  "esbuild": "^0.24.0",
23
23
  "tsx": "^4.22.3",
24
- "@mrrlin/schemas": "0.0.0",
25
24
  "@mrrlin/director-e2e": "0.0.0",
26
- "@mrrlin/client": "0.0.0",
25
+ "@mrrlin/schemas": "0.0.0",
27
26
  "@mrrlin/codex-client": "0.0.0",
28
27
  "@mrrlin/wiki": "0.0.0",
29
- "@mrrlin/tsconfig": "0.0.0"
28
+ "@mrrlin/tsconfig": "0.0.0",
29
+ "@mrrlin/client": "0.0.0"
30
30
  },
31
31
  "dependencies": {
32
32
  "@iarna/toml": "^2.2.5",