@deeeed/metamask-harness 0.46.0 → 0.47.0
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/CHANGELOG.md +21 -0
- package/README.md +1 -1
- package/adapters/manifest.json +12 -4
- package/adapters/mobile/wait-for-bridge.cjs +550 -0
- package/adapters/mobile/wait-for-bridge.sh +11 -148
- package/bin/mm-harness +7 -2
- package/dist/adapters/mobile/prepare.js +26 -18
- package/dist/adapters/mobile/runtime-decision.js +1 -0
- package/dist/cli-commands.js +2 -0
- package/dist/command-contract.js +7 -0
- package/dist/commands/checklist.js +1 -0
- package/dist/commands/help.js +76 -0
- package/dist/commands/parse-args.js +2 -1
- package/dist/commands/recipe-quality.js +1 -1
- package/dist/commands/tutorial.js +46 -0
- package/dist/mm-harness-cli.js +45 -6
- package/docs/CONTRIBUTING.md +2 -0
- package/docs/QA.md +2 -2
- package/library/actions/mobile/perps/perps.mjs +1 -1
- package/package.json +1 -1
- package/scripts/site-contrast.mjs +6 -2
- package/site/architecture.html +3 -3
- package/site/assets/help-recipes.json +113 -0
- package/site/assets/help-recipes.mjs +25 -0
- package/site/assets/progress.mjs +2 -0
- package/site/ecosystem.html +2 -2
- package/site/how-it-works.html +5 -0
- package/site/index.html +65 -13
- package/site/recipes.html +7 -0
- package/site/tutorials/v1.html +4 -0
package/site/architecture.html
CHANGED
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
<section class="wrap">
|
|
145
145
|
<h2 id="spec">The spec underneath</h2>
|
|
146
146
|
<p>
|
|
147
|
-
<code>mm-harness</code> implements <strong>
|
|
147
|
+
<code>mm-harness</code> implements <strong><a href="https://farmslot.io">Farmslot</a></strong>, a versioned specification for agentic
|
|
148
148
|
proof work. The CLI is one implementation of it, not the thing itself.
|
|
149
149
|
</p>
|
|
150
150
|
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
grows.
|
|
191
191
|
</p>
|
|
192
192
|
<p>The seam shows in the CLI's own help — the flags a control plane supplies:</p>
|
|
193
|
-
<div class="out">managed trust boundary (not needed for normal runs; Farmslot supplies it):
|
|
193
|
+
<div class="out">managed trust boundary (not needed for normal runs; <a href="https://farmslot.io">Farmslot</a> supplies it):
|
|
194
194
|
--source-trust, --source-kind, --source-name, --source-digest,
|
|
195
195
|
<span class="hint">--approve-plan</span> (binds approval to the exact reviewed plan)</div>
|
|
196
196
|
<p>Approve a plan and only that plan runs — which is what keeps the gate a gate.</p>
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
<div class="note">
|
|
199
199
|
<span class="note-title">What you actually need</span>
|
|
200
200
|
<p>
|
|
201
|
-
The farmslot control plane is <strong>experimental and sole-maintained</strong>. Nothing this site
|
|
201
|
+
The <a href="https://farmslot.io">Farmslot</a> control plane is <strong>experimental and sole-maintained</strong>. Nothing this site
|
|
202
202
|
teaches requires it — the harness, recipes, and skills are complete on their own, and the CLI says
|
|
203
203
|
as much: those flags are "not needed for normal runs". The specification is what you adopt; the
|
|
204
204
|
control plane is one consumer of it.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"topic": "recipes",
|
|
4
|
+
"title": "Recipe-backed work",
|
|
5
|
+
"summary": "Build an executable proof from the closest installed recipe, adapt it to the exact product version, and leave evidence another agent can replay.",
|
|
6
|
+
"capabilities": "Recipe uses: functional QA, visual checks, analytics and log assertions, and performance measurements during development, PR review, or release testing.",
|
|
7
|
+
"scopeNotice": "Current coverage: mm-harness is heavily optimized for Perps. Other teams can use it by adding composable recipes for their key journeys; contact Arthur for help.",
|
|
8
|
+
"recipeProtocolVersion": "1",
|
|
9
|
+
"sections": [
|
|
10
|
+
{
|
|
11
|
+
"id": "target",
|
|
12
|
+
"title": "Freeze the proof target",
|
|
13
|
+
"instruction": "Work inside one isolated MetaMask checkout. Name the exact product version and acceptance criteria, repair harness-owned state, then verify or launch that checkout.",
|
|
14
|
+
"details": [
|
|
15
|
+
"The tested build and current criteria are authoritative. A prior recipe pass is not current proof.",
|
|
16
|
+
"Choose state, visual, log, or mixed evidence for each criterion before authoring the graph."
|
|
17
|
+
],
|
|
18
|
+
"commands": [
|
|
19
|
+
"mm-harness doctor --fix",
|
|
20
|
+
"mm-harness status --json"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "discover",
|
|
25
|
+
"title": "Discover the strongest starting point",
|
|
26
|
+
"instruction": "Search the installed recipe and action catalogs, inspect exact schemas, and select the closest recipe before writing anything new.",
|
|
27
|
+
"details": [
|
|
28
|
+
"A bundled recipe, including a Core recipe, is strong composable vocabulary, not authority for every future product version.",
|
|
29
|
+
"Prefer an existing recipe, then existing actions, then read-only CDP or controller inspection. Add shared vocabulary only after repeated need is proven."
|
|
30
|
+
],
|
|
31
|
+
"commands": [
|
|
32
|
+
"mm-harness actions --json",
|
|
33
|
+
"mm-harness actions --action app.status --json",
|
|
34
|
+
"mm-harness run --list --json",
|
|
35
|
+
"mm-harness run runner.smoke --describe --json"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "parameters",
|
|
40
|
+
"title": "Design a parameterized contract",
|
|
41
|
+
"instruction": "Declare genuine caller choices once in paramsSchema and keep invariants required by the postcondition inside the recipe.",
|
|
42
|
+
"details": [
|
|
43
|
+
"Parameterize reusable differences such as market, account, provider, network, amount, side, or lifecycle mode.",
|
|
44
|
+
"Do not parameterize away safety, assertions, cleanup, or the meaning of success. Never depend on hidden wallet, account, provider, network, page, port, or device state."
|
|
45
|
+
],
|
|
46
|
+
"commands": []
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "compose",
|
|
50
|
+
"title": "Compose a readable graph",
|
|
51
|
+
"instruction": "Use static call references for unchanged sub-journeys. Keep preparation, action, assertion, evidence, and guaranteed teardown visible as separate nodes with human-facing intent.",
|
|
52
|
+
"details": [
|
|
53
|
+
"Use idempotent ensure actions for required start state and independently assert their postconditions.",
|
|
54
|
+
"Actions translate stable UI, CDP, or controller operations. Recipes compose them. Product code owns business rules."
|
|
55
|
+
],
|
|
56
|
+
"commands": []
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "author",
|
|
60
|
+
"title": "Build and prove one node at a time",
|
|
61
|
+
"instruction": "Probe each unfamiliar action with call or a tiny action-to-end recipe. Use read-only CDP inspection only when declared actions cannot reveal the needed authoring detail, then consolidate the final proof from manifest-declared actions.",
|
|
62
|
+
"details": [
|
|
63
|
+
"Plan after every structural change and preserve the first failing trace.",
|
|
64
|
+
"A CDP observation can help find the current route or selector; it is not final evidence unless the recipe records an allowed action and assertion for that signal."
|
|
65
|
+
],
|
|
66
|
+
"commands": [
|
|
67
|
+
"mm-harness call app.status --json",
|
|
68
|
+
"mm-harness run ./proof.recipe.json --plan --json"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "branch",
|
|
73
|
+
"title": "Branch without hiding decisions",
|
|
74
|
+
"instruction": "Use switch for declared parameter choices. For runtime conditions, call an action that returns a finite declared case, then route every case to explicit assertions and a terminal result.",
|
|
75
|
+
"details": [
|
|
76
|
+
"Never template a call ref. Pass only declared child parameters and keep child output scoped to the call node.",
|
|
77
|
+
"Every success path must prove its postcondition. workflow.teardown must remain reachable after main success or failure."
|
|
78
|
+
],
|
|
79
|
+
"commands": []
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "quality",
|
|
83
|
+
"title": "Run the whole proof and judge its quality",
|
|
84
|
+
"instruction": "Run the complete graph once into an explicit artifact directory, then apply the built-in quality bar before assigning coverage or a verdict.",
|
|
85
|
+
"details": [
|
|
86
|
+
"Coverage: every criterion needs an executable path and assertion; manual, untestable, and environment-dependent gaps stay explicit.",
|
|
87
|
+
"Graph: no unconditional pass, generic intent, hidden start state, or opaque node that collapses preparation, action, assertion, evidence, and teardown.",
|
|
88
|
+
"Evidence: inspect the recipe resolution, summary, trace, manifest, logs, and actual visual evidence. A filename or passing node is not visual proof.",
|
|
89
|
+
"Flake risk: wait on observable state instead of sleeping, keep device and runtime identity explicit, and never overwrite a prior run's artifacts.",
|
|
90
|
+
"Mutation: require an independent state assertion, identity-bound receipt, and guaranteed cleanup."
|
|
91
|
+
],
|
|
92
|
+
"commands": [
|
|
93
|
+
"mm-harness run ./proof.recipe.json --artifacts-dir temp/recipe-proof --json",
|
|
94
|
+
"mm-harness last --json",
|
|
95
|
+
"mm-harness recipe-quality build --input recipe-quality-input.json --output recipe-quality.json --json"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "drift",
|
|
100
|
+
"title": "Repair drift and promote reusable learning",
|
|
101
|
+
"instruction": "When a shared recipe fails, reproduce once and classify product regression, recipe drift, fixture/runtime drift, harness defect, or live dependency before changing anything.",
|
|
102
|
+
"details": [
|
|
103
|
+
"The graph and evidence contract can be deterministic while the product, provider, account, or network outcome is not. Honest external rejection remains a valid result, not a reason to seek a green retry.",
|
|
104
|
+
"For product-version drift, preserve the failed trace, copy the composed recipe into the task, keep working nodes, and repair the smallest owning node against the tested build.",
|
|
105
|
+
"Prove the changed node in isolation, re-plan, then rerun the full task-local recipe and affected callers. Never weaken an assertion or change product code merely to turn stale proof green.",
|
|
106
|
+
"Record the source recipe digest, tested product identity, repair, and fresh evidence. If the defect belongs to reusable harness code or bundled vocabulary, prepare a focused experimental-metamask-harness issue and open it when authorized.",
|
|
107
|
+
"Promote a repair only after it works on the tested version and current main, or declare and enforce its compatibility boundary."
|
|
108
|
+
],
|
|
109
|
+
"commands": []
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"safety": "Recipe parameters never bypass mutation consent or live-funds gates. Preserve valid live financial rejections exactly; never tune or retry merely to obtain a pass, and always run guaranteed cleanup."
|
|
113
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const root = document.querySelector('[data-help-recipes]');
|
|
2
|
+
|
|
3
|
+
if (root) {
|
|
4
|
+
const response = await fetch(new URL('help-recipes.json', import.meta.url));
|
|
5
|
+
if (!response.ok) throw new Error(`Recipe help failed to load: ${response.status}`);
|
|
6
|
+
const topic = await response.json();
|
|
7
|
+
const code = document.createElement('code');
|
|
8
|
+
const lines = [
|
|
9
|
+
'Task: use the installed mm-harness for recipe-backed work. Follow these steps in order.',
|
|
10
|
+
topic.summary,
|
|
11
|
+
topic.capabilities,
|
|
12
|
+
topic.scopeNotice,
|
|
13
|
+
];
|
|
14
|
+
for (const [index, section] of topic.sections.entries()) {
|
|
15
|
+
lines.push('', `${index + 1}. ${section.title}`, ` ${section.instruction}`);
|
|
16
|
+
for (const detail of section.details) lines.push(` - ${detail}`);
|
|
17
|
+
for (const command of section.commands) lines.push(` ${command}`);
|
|
18
|
+
}
|
|
19
|
+
lines.push('', `Safety: ${topic.safety}`);
|
|
20
|
+
code.textContent = lines.join('\n');
|
|
21
|
+
const pre = document.createElement('pre');
|
|
22
|
+
pre.append(code);
|
|
23
|
+
root.replaceChildren(pre);
|
|
24
|
+
document.dispatchEvent(new CustomEvent('mm-harness-content-rendered'));
|
|
25
|
+
}
|
package/site/assets/progress.mjs
CHANGED
package/site/ecosystem.html
CHANGED
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
<div class="map-row">
|
|
76
76
|
<article class="node">
|
|
77
77
|
<span class="node-tag">Spec & engine</span>
|
|
78
|
-
<h2 class="node-name">
|
|
78
|
+
<h2 class="node-name"><a href="https://farmslot.io">Farmslot</a> packages</h2>
|
|
79
79
|
<p class="node-what">
|
|
80
80
|
The recipe protocol and the execution engine, as pinned by mm-harness.
|
|
81
81
|
<code>recipe-harness</code> depends on <code>protocol</code>.
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
<div class="note">
|
|
139
139
|
<span class="note-title">Standing disclosure</span>
|
|
140
140
|
<p>
|
|
141
|
-
The farmslot <strong>control plane</strong> is experimental and sole-maintained. What is adopted
|
|
141
|
+
The <a href="https://farmslot.io">Farmslot</a> <strong>control plane</strong> is experimental and sole-maintained. What is adopted
|
|
142
142
|
here is the spec and the engine — the npm packages above — not the control plane. Weigh that
|
|
143
143
|
before depending on anything beyond them.
|
|
144
144
|
</p>
|
package/site/how-it-works.html
CHANGED
|
@@ -194,6 +194,11 @@
|
|
|
194
194
|
<div class="cmd"><pre><code><span class="p">$ </span>npm i -g @deeeed/metamask-harness@latest
|
|
195
195
|
<span class="p">$ </span>mm-harness --version</code></pre></div>
|
|
196
196
|
|
|
197
|
+
<div class="note plain">
|
|
198
|
+
<span class="note-title">Why @deeeed?</span>
|
|
199
|
+
<p>Arthur publishes the pre-1.0 builds from his personal npm scope while MetaMask teams validate the workflows. Version 1.0 will move to a MetaMask-owned npm package.</p>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
197
202
|
<div class="out-label">Expected</div>
|
|
198
203
|
<div class="out">0.34.x <span class="dim">— any 0.34 or newer</span></div>
|
|
199
204
|
|
package/site/index.html
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>
|
|
7
|
-
<meta name="description" content="
|
|
6
|
+
<title>The trust layer for MetaMask agentic development</title>
|
|
7
|
+
<meta name="description" content="Skills encode MetaMask engineering workflows. Recipes prove the work against real builds, preserve the evidence, and remain as regression checks.">
|
|
8
8
|
<link rel="icon" href="assets/metamask-fox.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="stylesheet" href="assets/style.css?v=4">
|
|
10
10
|
</head>
|
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
<main class="lobby">
|
|
15
15
|
<div class="lobby-inner">
|
|
16
16
|
<img class="lobby-mark" src="assets/metamask-fox.svg" alt="" width="52" height="52">
|
|
17
|
-
<span class="eyebrow">
|
|
17
|
+
<span class="eyebrow">Built for MetaMask engineering workflows</span>
|
|
18
18
|
|
|
19
|
-
<h1>
|
|
19
|
+
<h1>The trust layer for agentic development.</h1>
|
|
20
20
|
<p class="lobby-lede">
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
Skills encode MetaMask's engineering workflows. Recipes prove the work against real builds,
|
|
22
|
+
preserve the evidence, and remain as regression checks.
|
|
23
23
|
</p>
|
|
24
24
|
<p class="lobby-sub">
|
|
25
25
|
Set up once, then work a real ticket.
|
|
@@ -86,9 +86,10 @@ instead of improvising.
|
|
|
86
86
|
when listing: the default only prints stable skills, so the recipe skills
|
|
87
87
|
below do not appear without it.
|
|
88
88
|
8. Add the skills that drive recipe-backed work:
|
|
89
|
-
`yarn skills --include agentic/recipe-cook,agentic/recipe-quality,agentic/recipe-pr-qa-review --save`
|
|
90
|
-
They install as `mms-recipe-cook`, `mms-recipe-quality`,
|
|
91
|
-
`mms-recipe-pr-qa-review
|
|
89
|
+
`yarn skills --include agentic/recipe-harness,agentic/recipe-cook,agentic/recipe-quality,agentic/recipe-performance,agentic/recipe-pr-qa-review,agentic/recipe-evidence --save`
|
|
90
|
+
They install as `mms-recipe-harness`, `mms-recipe-cook`, `mms-recipe-quality`,
|
|
91
|
+
`mms-recipe-performance`, `mms-recipe-pr-qa-review`, and
|
|
92
|
+
`mms-recipe-evidence`. They come from the `Consensys/skills` clone in
|
|
92
93
|
step 7 and are marked experimental, which is why the explicit `--include`
|
|
93
94
|
is required. If `yarn metamask-skills describe agentic/recipe-cook` cannot
|
|
94
95
|
find it, check `CONSENSYS_SKILLS_DIR` points at that clone, then stop and
|
|
@@ -113,15 +114,17 @@ exact error.</code></pre></div>
|
|
|
113
114
|
|
|
114
115
|
<div class="tabs">
|
|
115
116
|
<div class="tablist" role="tablist" aria-label="Choose what to do" hidden>
|
|
116
|
-
<button type="button" role="tab" id="tab-
|
|
117
|
-
<button type="button" role="tab" id="tab-fix" class="tab" aria-controls="panel-fix" aria-selected="false" tabindex="-1">Fix a bug</button>
|
|
117
|
+
<button type="button" role="tab" id="tab-fix" class="tab" aria-controls="panel-fix" aria-selected="true" tabindex="0">Fix a bug</button>
|
|
118
118
|
<button type="button" role="tab" id="tab-build" class="tab" aria-controls="panel-build" aria-selected="false" tabindex="-1">Build a feature</button>
|
|
119
|
+
<button type="button" role="tab" id="tab-review" class="tab" aria-controls="panel-review" aria-selected="false" tabindex="-1">QA + Review PR</button>
|
|
120
|
+
<button type="button" role="tab" id="tab-performance" class="tab" aria-controls="panel-performance" aria-selected="false" tabindex="-1">Performance</button>
|
|
121
|
+
<button type="button" role="tab" id="tab-evidence" class="tab" aria-controls="panel-evidence" aria-selected="false" tabindex="-1">Pretty PR</button>
|
|
119
122
|
</div>
|
|
120
123
|
|
|
121
124
|
<div class="qs-panel" role="tabpanel" id="panel-review" aria-labelledby="tab-review" tabindex="0">
|
|
122
125
|
<p class="qs-panel-why">
|
|
123
|
-
<code>mms-recipe-pr-qa-review</code>
|
|
124
|
-
before it touches the runtime, validates each one on a real build, and returns a report.
|
|
126
|
+
<code>mms-recipe-pr-qa-review</code> runs full read-only QA and code-risk review. It
|
|
127
|
+
freezes the acceptance criteria before it touches the runtime, validates each one on a real build, and returns a report.
|
|
125
128
|
It never edits product code and never posts to GitHub. The PR must be in the same
|
|
126
129
|
product as your checkout.
|
|
127
130
|
</p>
|
|
@@ -164,6 +167,55 @@ Plan the proof before you edit anything, implement it, then prove it with a
|
|
|
164
167
|
recipe that drives the real build. Show me the recipe status, the per-node
|
|
165
168
|
results, and the artifact paths.</code></pre></div>
|
|
166
169
|
</div>
|
|
170
|
+
|
|
171
|
+
<div class="qs-panel" role="tabpanel" id="panel-performance" aria-labelledby="tab-performance" tabindex="0">
|
|
172
|
+
<p class="qs-panel-why">
|
|
173
|
+
<code>mms-recipe-performance</code> measures one real MetaMask flow with
|
|
174
|
+
evidence tied to the recipe run. It freezes the user journey and measurement boundaries,
|
|
175
|
+
keeps setup outside the measured window, and requires approval before any fix.
|
|
176
|
+
</p>
|
|
177
|
+
<div class="cmd"><pre><code>/mms-recipe-performance
|
|
178
|
+
|
|
179
|
+
Measure this MetaMask flow:
|
|
180
|
+
<describe the exact user journey and suspected performance problem>
|
|
181
|
+
|
|
182
|
+
Propose the measured start and end, client, lifecycle state, environment,
|
|
183
|
+
evidence sources, and failure threshold. Wait for my approval before measuring.
|
|
184
|
+
Run one real-app baseline and return the recipe, trace, measurements, verdict,
|
|
185
|
+
and artifact paths. Do not edit product code unless I approve a proven fix.
|
|
186
|
+
If I approve one, rerun the identical recipe after the change.</code></pre></div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div class="qs-panel" role="tabpanel" id="panel-evidence" aria-labelledby="tab-evidence" tabindex="0">
|
|
190
|
+
<p class="qs-panel-why">
|
|
191
|
+
<code>mms-recipe-evidence</code> — the PR evidence skill. It first checks that every
|
|
192
|
+
claim has strong reviewable evidence, then turns the completed Recipe Cook task into
|
|
193
|
+
a clear, template-preserving PR description. Packaging is local; uploads and PR writes
|
|
194
|
+
require your separate approval.
|
|
195
|
+
</p>
|
|
196
|
+
<div class="cmd"><pre><code>From the MetaMask checkout, install the PR evidence skill if it is missing:
|
|
197
|
+
yarn skills --maturity experimental --include agentic/recipe-evidence --save
|
|
198
|
+
|
|
199
|
+
Then run:
|
|
200
|
+
/mms-recipe-evidence
|
|
201
|
+
|
|
202
|
+
Use the completed Recipe Cook task in this checkout. Before packaging, verify
|
|
203
|
+
that every PR claim maps to executed recipe evidence. Inspect each selected
|
|
204
|
+
screenshot or video and keep only the strongest reviewer-useful artifacts. If
|
|
205
|
+
the proof is weak, missing, stale, or does not show the claimed result, stop and
|
|
206
|
+
tell me what recipe or evidence must be rerun instead of polishing the PR.
|
|
207
|
+
|
|
208
|
+
Once the evidence is good, preserve the repository PR template and build the
|
|
209
|
+
cleanest reviewer-facing package. Show me pr-package/pr-desc.md, the selected
|
|
210
|
+
screenshots or videos, proved claims, and honest gaps before doing anything
|
|
211
|
+
external.
|
|
212
|
+
|
|
213
|
+
Do not upload screenshots or create/update the PR until I approve that outward
|
|
214
|
+
step. Warn me that uploaded screenshots go to a public evidence repository and
|
|
215
|
+
may show wallet state. Never invent evidence or turn an incomplete run into a
|
|
216
|
+
pass.</code></pre></div>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
167
219
|
</div>
|
|
168
220
|
</div>
|
|
169
221
|
|
package/site/recipes.html
CHANGED
|
@@ -38,6 +38,12 @@
|
|
|
38
38
|
</p>
|
|
39
39
|
</section>
|
|
40
40
|
|
|
41
|
+
<section class="wrap" id="agent-method">
|
|
42
|
+
<div class="cmd cmd-hero" data-help-recipes>
|
|
43
|
+
<pre><code>Loading version-matched recipe help…</code></pre>
|
|
44
|
+
</div>
|
|
45
|
+
</section>
|
|
46
|
+
|
|
41
47
|
<section class="wrap">
|
|
42
48
|
<div class="doctrine">
|
|
43
49
|
<p>
|
|
@@ -418,6 +424,7 @@
|
|
|
418
424
|
</div>
|
|
419
425
|
</footer>
|
|
420
426
|
|
|
427
|
+
<script type="module" src="assets/help-recipes.mjs?v=1"></script>
|
|
421
428
|
<script type="module" src="assets/progress.mjs?v=4"></script>
|
|
422
429
|
</body>
|
|
423
430
|
</html>
|
package/site/tutorials/v1.html
CHANGED
|
@@ -105,6 +105,10 @@
|
|
|
105
105
|
<div class="cmd"><pre><code><span class="p">$ </span>npm i -g @deeeed/metamask-harness@latest
|
|
106
106
|
<span class="p">$ </span>mm-harness --version</code></pre></div>
|
|
107
107
|
<div class="out">0.34.x <span class="dim">— any 0.34 or newer</span></div>
|
|
108
|
+
<div class="note plain">
|
|
109
|
+
<span class="note-title">Why @deeeed?</span>
|
|
110
|
+
<p>Arthur publishes the pre-1.0 builds from his personal npm scope while MetaMask teams validate the workflows. Version 1.0 will move to a MetaMask-owned npm package.</p>
|
|
111
|
+
</div>
|
|
108
112
|
</li>
|
|
109
113
|
|
|
110
114
|
<li class="step" data-step="doctor">
|