@deeeed/metamask-harness 0.91.4 → 0.91.6

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 CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.91.6 - 2026-10-13
6
+
7
+ ### Fixed
8
+
9
+ - Keep all bundled recipe intents within the shared conformance limit, with a full-library regression check.
10
+ - Adopt recipe-cli 0.14.3 so proof plans reject invalid intents before execution.
11
+
12
+ ## 0.91.5 - 2026-10-13
13
+
14
+ ### Changed
15
+
16
+ - Bundled Perps journeys establish and verify their configurable network before proof, defaulting to testnet. Mainnet requires an explicit recipe parameter and retains its policy guards. Read-only observation subrecipes preserve their caller's state.
17
+
18
+ ### Fixed
19
+
20
+ - Restore Mobile `stop` success after owned Metro/helper cleanup. Simulator power and resource retention follow the slot lifecycle; a running simulator does not make dev-server cleanup fail.
21
+
5
22
  ## 0.91.4 - 2026-10-13
6
23
 
7
24
  ### Fixed
@@ -21,7 +21,8 @@ const extensionActions = {
21
21
  "metamask.perps.assert_visible_consistency",
22
22
  "metamask.settings.set_basic_functionality",
23
23
  "metamask.perps.read_snapshot",
24
- "metamask.perps.set_network"
24
+ "metamask.perps.set_network",
25
+ "metamask.perps.start_state"
25
26
  ],
26
27
  liveNeedsCdpPort: true,
27
28
  cdpTarget: { transport: "chrome-extension-cdp", probePath: "json/version" },
@@ -1,4 +1,4 @@
1
- import { EXIT, recipeRuntimePath, shellQuote, writeInteractiveProgress } from "@farmslot/recipe-cli/harness";
1
+ import { recipeRuntimePath, shellQuote, writeInteractiveProgress } from "@farmslot/recipe-cli/harness";
2
2
  import { spawnSync } from "node:child_process";
3
3
  import path from "node:path";
4
4
  import { defineAdapter } from "@farmslot/adapter-sdk";
@@ -60,10 +60,9 @@ const mobileSurface = defineAdapter({
60
60
  const args = ["--target", target];
61
61
  if (process.env.WATCHER_PORT) args.push("--port", process.env.WATCHER_PORT);
62
62
  const result = spawnSync("bash", [leaf, ...args], { encoding: "utf8" });
63
- const metroStatus = result.status ?? 1;
64
- const status = metroStatus === 0 ? EXIT.runtime : metroStatus;
63
+ const status = result.status ?? 1;
65
64
  const output = `${result.stdout ?? ""}${result.stderr ?? ""}`.trim();
66
- const summary = metroStatus === 0 ? `Metro cleanup completed for ${target}, but Mobile app/device restoration is unverified: no initial state is recorded. Restore and verify the device through its lifecycle owner.` : `failed to stop Metro for ${target}`;
65
+ const summary = status === 0 ? `stopped Metro dev server for ${target}` : `failed to stop Metro for ${target}`;
67
66
  return { kind: "stopped", status, summary, output };
68
67
  }
69
68
  },
@@ -1,7 +1,7 @@
1
1
  // Prepare selected testnet baselines before proof, handling positions before orders.
2
2
  // Omitted domains are skipped; this headless action performs no UI navigation.
3
3
 
4
- import { isDirectRun, resolveNetwork, runAdapter } from './_controller.mjs';
4
+ import { getCoreController, isDirectRun, resolveNetwork, runAdapter } from './_controller.mjs';
5
5
  import { ensureOrders } from './ensure_orders.mjs';
6
6
  import { ensurePositions } from './ensure_positions.mjs';
7
7
 
@@ -54,11 +54,13 @@ export async function startState(input) {
54
54
  const network = resolveNetwork(input);
55
55
  const positionsBaseline = normalizeBaseline(input.node?.positions, 'positions');
56
56
  const ordersBaseline = normalizeBaseline(input.node?.orders, 'orders');
57
+ const { controller } = await getCoreController(input);
57
58
 
58
59
  const result = {
59
60
  action: input.action,
60
61
  source: 'perps-controller-composite',
61
62
  network,
63
+ isTestnet: controller.state.isTestnet,
62
64
  profile: input.node?.profile ?? null,
63
65
  converged: { positions: null, orders: null },
64
66
  proofPath: 'perps-controller-start_state',
@@ -0,0 +1,9 @@
1
+ // Establish the requested Perps network before proof through the existing guarded toggle.
2
+ import { runAdapter } from '../platform/cdp.mjs';
3
+ import { setNetwork } from './perps.mjs';
4
+
5
+ runAdapter(async (input) => ({
6
+ action: input.action,
7
+ phase: 'start_state',
8
+ network: await setNetwork(input),
9
+ }));
@@ -5167,6 +5167,62 @@
5167
5167
  "app-mutation"
5168
5168
  ]
5169
5169
  },
5170
+ "metamask.perps.start_state": {
5171
+ "description": "Apply the requested Perps network through the supported product toggle and verify readback before proof. Explicit false positions/orders preserve trading state. Mainnet keeps the existing opt-in, order guard and run cleanup policy.",
5172
+ "schema": {
5173
+ "type": "object",
5174
+ "properties": {
5175
+ "network": {
5176
+ "type": "string",
5177
+ "enum": [
5178
+ "testnet",
5179
+ "mainnet"
5180
+ ]
5181
+ },
5182
+ "page": {
5183
+ "type": "boolean",
5184
+ "enum": [
5185
+ false
5186
+ ],
5187
+ "description": "No additional route setup; network selection uses the Perps home surface."
5188
+ },
5189
+ "positions": {
5190
+ "type": "boolean",
5191
+ "enum": [
5192
+ false
5193
+ ]
5194
+ },
5195
+ "orders": {
5196
+ "type": "boolean",
5197
+ "enum": [
5198
+ false
5199
+ ]
5200
+ },
5201
+ "timeout_ms": {
5202
+ "type": "number",
5203
+ "minimum": 1
5204
+ }
5205
+ },
5206
+ "additionalProperties": false,
5207
+ "required": [
5208
+ "network"
5209
+ ]
5210
+ },
5211
+ "examples": [
5212
+ {
5213
+ "action": "metamask.perps.start_state",
5214
+ "network": "testnet",
5215
+ "page": false,
5216
+ "positions": false,
5217
+ "orders": false,
5218
+ "intent": "Establish and verify testnet before Perps proof without clearing trading state",
5219
+ "next": "done"
5220
+ }
5221
+ ],
5222
+ "execution_capabilities": [
5223
+ "app-mutation"
5224
+ ]
5225
+ },
5170
5226
  "metamask.perps.set_network": {
5171
5227
  "description": "Switch the Extension's Perps network through the background perpsToggleTestnet request and wait until the app reports it. The fixture loads testnet; network=mainnet is the explicit opt-in and lasts one run: the run's teardown switches back to testnet (success, failure or abort).",
5172
5228
  "schema": {
@@ -1,35 +1,50 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "MetaMask Core health check",
4
- "description": "Read-only check to run before ticket work: the headless Perps controller imports and answers one bounded HyperLiquid testnet account read. A failed precondition stops at the node named after its error; that node's intent gives the recovery. Places no orders.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Read-only check to run before ticket work: the headless Perps controller imports and answers one bounded HyperLiquid account read on the requested network. A failed precondition stops at the node named after its error; that node's intent gives the recovery. Places no orders.",
5
5
  "paramsSchema": {
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "properties": {
9
+ "network": {
10
+ "type": "string",
11
+ "enum": [
12
+ "testnet",
13
+ "mainnet"
14
+ ],
15
+ "default": "testnet",
16
+ "description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
17
+ },
9
18
  "timeout_ms": { "type": "integer", "minimum": 1000, "default": 60000 }
10
19
  }
11
20
  },
12
21
  "workflow": {
13
22
  "entry": "status",
14
23
  "nodes": {
24
+ "NETWORK_SETUP_FAILED": {
25
+ "action": "metamask.perps.start_state",
26
+ "network": "{{params.network}}",
27
+ "next": "CONTROLLER_UNAVAILABLE",
28
+ "intent": "Network setup failed before proof. Next: mm-harness doctor --fix"
29
+ },
15
30
  "status": {
16
31
  "action": "app.status",
17
- "next": "CONTROLLER_UNAVAILABLE",
32
+ "next": "NETWORK_SETUP_FAILED",
18
33
  "intent": "Record the resolved Core checkout"
19
34
  },
20
35
  "CONTROLLER_UNAVAILABLE": {
21
36
  "action": "metamask.perps.read_account",
22
- "network": "testnet",
37
+ "network": "{{params.network}}",
23
38
  "timeout_ms": "{{params.timeout_ms}}",
24
39
  "next": "ACCOUNT_READ_FAILED",
25
- "intent": "CONTROLLER_UNAVAILABLE unless the Perps controller imports and reads the testnet account in time. Recovery: mm-harness doctor --fix"
40
+ "intent": "Perps controller is unavailable on the selected network. Next: mm-harness doctor --fix"
26
41
  },
27
42
  "ACCOUNT_READ_FAILED": {
28
43
  "action": "assert_output",
29
44
  "source": "CONTROLLER_UNAVAILABLE",
30
45
  "assert": { "path": "$.accountState.totalBalance", "operator": "matches", "value": "^-?[0-9]+(\\.[0-9]+)?$" },
31
46
  "next": "done",
32
- "intent": "ACCOUNT_READ_FAILED unless the read returned a numeric balance; the controller reports an unreachable venue as a placeholder. Recovery: check network access to HyperLiquid testnet, then rerun"
47
+ "intent": "Account read returned no numeric balance. Next: check HyperLiquid testnet access"
33
48
  },
34
49
  "done": {
35
50
  "action": "end",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "MetaMask core Perps smoke",
4
- "description": "Non-mutating Perps domain smoke for the headless core adapter: instantiates the Perps controller and reads live positions, orders, and account state.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Perps domain smoke for the headless core adapter: instantiates the Perps controller and reads live positions, orders, and account state.",
5
5
  "paramsSchema": {
6
6
  "type": "object",
7
7
  "additionalProperties": false,
@@ -22,9 +22,16 @@
22
22
  "workflow": {
23
23
  "entry": "status",
24
24
  "nodes": {
25
+ "start-state": {
26
+ "action": "metamask.perps.start_state",
27
+ "network": "{{params.network}}",
28
+ "account": "{{params.account}}",
29
+ "next": "read-positions",
30
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
31
+ },
25
32
  "status": {
26
33
  "action": "app.status",
27
- "next": "read-positions",
34
+ "next": "start-state",
28
35
  "intent": "Resolve the core checkout and report headless compatibility mode"
29
36
  },
30
37
  "read-positions": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "MetaMask core Perps snapshots",
4
- "description": "Reads global market and account snapshots through the public PerpsController API used by wallet clients. Configure CORE_PERPS_TERMINAL_GLOBAL_SNAPSHOT_URL to exercise a Terminal schema-v2 endpoint.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Reads global market and account snapshots through the public PerpsController API used by wallet clients. Configure CORE_PERPS_TERMINAL_GLOBAL_SNAPSHOT_URL to exercise a Terminal schema-v2 endpoint.",
5
5
  "paramsSchema": {
6
6
  "type": "object",
7
7
  "additionalProperties": false,
@@ -28,9 +28,16 @@
28
28
  "workflow": {
29
29
  "entry": "status",
30
30
  "nodes": {
31
+ "start-state": {
32
+ "action": "metamask.perps.start_state",
33
+ "network": "{{params.network}}",
34
+ "account": "{{params.account}}",
35
+ "next": "read_snapshot",
36
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
37
+ },
31
38
  "status": {
32
39
  "action": "app.status",
33
- "next": "read_snapshot",
40
+ "next": "start-state",
34
41
  "intent": "Resolve the Core checkout and report headless compatibility"
35
42
  },
36
43
  "read_snapshot": {
@@ -54,7 +54,7 @@
54
54
  "CONSOLE_ERRORS": {
55
55
  "action": "metamask.app.assert_no_console_errors",
56
56
  "next": "screenshot",
57
- "intent": "CONSOLE_ERRORS if the app logged an error outside the console allowlist since launch. Recovery: fix the error, or allowlist known noise with a reason in a library's diagnostics/console-allowlist.json"
57
+ "intent": "Unexpected app console error. Next: fix it or add explained noise to diagnostics/console-allowlist.json"
58
58
  },
59
59
  "screenshot": {
60
60
  "action": "ui.screenshot",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "Extension multi-screen retained-memory suite",
4
- "description": "Broad maintainer suite: retain all eight screen slopes, detached-DOM checks, and equal-duration idle attribution. Use performance.navigation-memory for one screen. Verify these reference screen markers against the tested build.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Broad maintainer suite: retain all eight screen slopes, detached-DOM checks, and equal-duration idle attribution. Use performance.navigation-memory for one screen. Verify these reference screen markers against the tested build.",
5
5
  "proofTargets": [
6
6
  {
7
7
  "id": "screen-slopes",
@@ -16,9 +16,33 @@
16
16
  "claim": "Navigation-attributable listener growth remains within its declared bound after subtracting an equal-duration idle control."
17
17
  }
18
18
  ],
19
+ "paramsSchema": {
20
+ "type": "object",
21
+ "additionalProperties": false,
22
+ "properties": {
23
+ "network": {
24
+ "type": "string",
25
+ "enum": [
26
+ "testnet",
27
+ "mainnet"
28
+ ],
29
+ "default": "testnet",
30
+ "description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
31
+ }
32
+ }
33
+ },
19
34
  "workflow": {
20
35
  "entry": "require-cdp",
21
36
  "nodes": {
37
+ "start-state": {
38
+ "action": "metamask.perps.start_state",
39
+ "network": "{{params.network}}",
40
+ "page": false,
41
+ "positions": false,
42
+ "orders": false,
43
+ "next": "market-detail",
44
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
45
+ },
22
46
  "require-cdp": {
23
47
  "action": "cdp.target",
24
48
  "required": true,
@@ -29,7 +53,7 @@
29
53
  "ensure-unlocked": {
30
54
  "action": "metamask.wallet.ensure_unlocked",
31
55
  "intent": "Ensure the representative screens are reachable from an unlocked wallet.",
32
- "next": "market-detail"
56
+ "next": "start-state"
33
57
  },
34
58
  "market-detail": {
35
59
  "action": "call",
@@ -1,10 +1,34 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "MetaMask Extension Perps smoke",
4
- "description": "Read-only Extension Perps smoke: verifies CDP, unlocks if needed, opens Perps, proves visible home with market data, and reads positions/orders. Requires approved wallet setup and completed onboarding gates; a visible tutorial is setup, not passing smoke.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Extension Perps smoke: verifies CDP, unlocks if needed, opens Perps, proves visible home with market data, and reads positions/orders. Requires approved wallet setup and completed onboarding gates; a visible tutorial is setup, not passing smoke.",
5
+ "paramsSchema": {
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "network": {
10
+ "type": "string",
11
+ "enum": [
12
+ "testnet",
13
+ "mainnet"
14
+ ],
15
+ "default": "testnet",
16
+ "description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
17
+ }
18
+ }
19
+ },
5
20
  "workflow": {
6
21
  "entry": "status",
7
22
  "nodes": {
23
+ "start-state": {
24
+ "action": "metamask.perps.start_state",
25
+ "network": "{{params.network}}",
26
+ "page": false,
27
+ "positions": false,
28
+ "orders": false,
29
+ "next": "read-home",
30
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
31
+ },
8
32
  "status": {
9
33
  "action": "app.status",
10
34
  "next": "cdp",
@@ -26,7 +50,7 @@
26
50
  "open-perps": {
27
51
  "action": "ui.navigate",
28
52
  "page": "perps",
29
- "next": "read-home",
53
+ "next": "start-state",
30
54
  "intent": "Show the Perps home surface"
31
55
  },
32
56
  "read-positions": {
@@ -54,7 +54,7 @@
54
54
  "CONSOLE_ERRORS": {
55
55
  "action": "metamask.app.assert_no_console_errors",
56
56
  "next": "screenshot",
57
- "intent": "CONSOLE_ERRORS if the app logged an error outside the console allowlist since launch. Recovery: fix the error, or allowlist known noise with a reason in a library's diagnostics/console-allowlist.json"
57
+ "intent": "Unexpected app console error. Next: fix it or add explained noise to diagnostics/console-allowlist.json"
58
58
  },
59
59
  "screenshot": {
60
60
  "action": "ui.screenshot",
@@ -1,10 +1,34 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "MetaMask Mobile Perps smoke",
4
- "description": "Non-mutating Perps domain smoke for debug-enabled MetaMask Mobile: unlock if needed, open Perps, assert live positions and orders, and retain a HUD screenshot. Teardown observes wallet home. Does not close positions or stop the app.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Perps domain smoke for debug-enabled MetaMask Mobile: unlock if needed, open Perps, assert live positions and orders, and retain a HUD screenshot. Teardown observes wallet home. Does not close positions or stop the app.",
5
+ "paramsSchema": {
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "network": {
10
+ "type": "string",
11
+ "enum": [
12
+ "testnet",
13
+ "mainnet"
14
+ ],
15
+ "default": "testnet",
16
+ "description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
17
+ }
18
+ }
19
+ },
5
20
  "workflow": {
6
21
  "entry": "status",
7
22
  "nodes": {
23
+ "start-state": {
24
+ "action": "metamask.perps.start_state",
25
+ "network": "{{params.network}}",
26
+ "page": false,
27
+ "positions": false,
28
+ "orders": false,
29
+ "next": "observe-perps",
30
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
31
+ },
8
32
  "status": {
9
33
  "action": "app.status",
10
34
  "next": "cdp",
@@ -27,7 +51,7 @@
27
51
  "open-perps": {
28
52
  "action": "ui.navigate",
29
53
  "page": "perps",
30
- "next": "observe-perps",
54
+ "next": "start-state",
31
55
  "intent": "Show the Perps market list"
32
56
  },
33
57
  "observe-perps": {
@@ -1,12 +1,21 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "Perps release market details",
4
- "description": "Opens one live Perps market through visible UI and proves its header price, change, statistics, and Long/Short controls; it does not assert chart data. Requires no existing position in the chosen market: held markets show Modify/Close instead. Verify the fixture with a supported read before selecting market; never close a position to satisfy this recipe.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Opens one live Perps market through visible UI and proves its header price, change, statistics, and Long/Short controls; it does not assert chart data. Requires no existing position in the chosen market: held markets show Modify/Close instead. Verify the fixture with a supported read before selecting market; never close a position to satisfy this recipe.",
5
5
  "paramsSchema": {
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": ["market"],
9
9
  "properties": {
10
+ "network": {
11
+ "type": "string",
12
+ "enum": [
13
+ "testnet",
14
+ "mainnet"
15
+ ],
16
+ "default": "testnet",
17
+ "description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
18
+ },
10
19
  "market": {
11
20
  "type": "string",
12
21
  "description": "Perps market symbol with no existing position, so Long/Short controls are expected."
@@ -21,12 +30,21 @@
21
30
  "workflow": {
22
31
  "entry": "open-perps",
23
32
  "nodes": {
33
+ "start-state": {
34
+ "action": "metamask.perps.start_state",
35
+ "network": "{{params.network}}",
36
+ "page": false,
37
+ "positions": false,
38
+ "orders": false,
39
+ "next": "open-market-list",
40
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
41
+ },
24
42
  "open-perps": {
25
43
  "action": "ui.navigate",
26
44
  "page": "perps",
27
45
  "timeout_ms": "{{params.timeout_ms}}",
28
46
  "intent": "Reset transient market-list state on the Perps home surface",
29
- "next": "open-market-list"
47
+ "next": "start-state"
30
48
  },
31
49
  "open-market-list": {
32
50
  "action": "ui.navigate",
@@ -1,11 +1,20 @@
1
1
  {
2
2
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
3
3
  "title": "Perps release market search",
4
- "description": "Searches the live Perps market list by product name through trusted keyboard input and proves the filtered result set without development-only bridges.",
4
+ "description": "Sets and verifies the configured Perps network, default testnet, before proof. Searches the live Perps market list by product name through trusted keyboard input and proves the filtered result set without development-only bridges.",
5
5
  "paramsSchema": {
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "properties": {
9
+ "network": {
10
+ "type": "string",
11
+ "enum": [
12
+ "testnet",
13
+ "mainnet"
14
+ ],
15
+ "default": "testnet",
16
+ "description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
17
+ },
9
18
  "query": {
10
19
  "type": "string",
11
20
  "default": "Bitcoin"
@@ -29,11 +38,20 @@
29
38
  "workflow": {
30
39
  "entry": "open-perps",
31
40
  "nodes": {
41
+ "start-state": {
42
+ "action": "metamask.perps.start_state",
43
+ "network": "{{params.network}}",
44
+ "page": false,
45
+ "positions": false,
46
+ "orders": false,
47
+ "next": "open-market-list",
48
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
49
+ },
32
50
  "open-perps": {
33
51
  "action": "ui.navigate",
34
52
  "page": "perps",
35
53
  "intent": "Reset transient market-list state on the Perps home surface",
36
- "next": "open-market-list"
54
+ "next": "start-state"
37
55
  },
38
56
  "open-market-list": {
39
57
  "action": "ui.navigate",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deeeed/metamask-harness",
3
- "version": "0.91.4",
3
+ "version": "0.91.6",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mm-harness": "bin/mm-harness"
@@ -28,7 +28,7 @@
28
28
  "@farmslot/agent-runtime": "0.18.1",
29
29
  "@farmslot/handoff": "^0.3.1",
30
30
  "@farmslot/protocol": "0.40.0",
31
- "@farmslot/recipe-cli": "0.14.2",
31
+ "@farmslot/recipe-cli": "0.14.3",
32
32
  "@farmslot/recipe-runner": "0.31.0",
33
33
  "agent-device": "0.19.3",
34
34
  "commander": "^12.0.0",