@thirdfy/agent-cli 0.2.68 → 0.2.69

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
@@ -4,6 +4,12 @@ All notable changes to `@thirdfy/agent-cli` are documented here. The format is b
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.2.69] - 2026-09-16
8
+
9
+ ### Fixed
10
+
11
+ - Managed `agent_wallet` reads do not fall back to `/execute-intent` on `PARAMS_SCHEMA_INVALID` / unknown-key. Fallback stays limited to `does not support execute rail`. Matches `thirdfy-mcp` **0.0.119**. Pin: `test/agent-wallet-readonly-fallback.test.cjs`.
12
+
7
13
  ## [0.2.68] - 2026-09-16
8
14
 
9
15
  ### Fixed
package/README.md CHANGED
@@ -40,10 +40,10 @@ Run without global install:
40
40
  npx @thirdfy/agent-cli --help
41
41
  ```
42
42
 
43
- ## What's new in v0.2.68
43
+ ## What's new in v0.2.69
44
44
 
45
- - Avantis `complete_avantis_onboarding` defaults `estimatedAmountUsd` to `1` when the caller omits it.
46
- - `--confirmWrites` / `--confirm` merge into execute params so a Claude-style root confirmation reaches AgentKit.
45
+ - Managed `agent_wallet` reads keep `/execute` errors such as Avantis `get_avantis_price` unknown `symbols`. They do not fall back to an empty execute-intent queue.
46
+ - Execute-intent fallback stays limited to `does not support execute rail`.
47
47
  - See [CHANGELOG.md](./CHANGELOG.md) and GitHub Releases for older versions.
48
48
 
49
49
  ## Quick start
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thirdfy/agent-cli",
3
- "version": "0.2.68",
3
+ "version": "0.2.69",
4
4
  "description": "Thirdfy Agent CLI for onboarding, governance preflight, execute-intent, and status polling.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Managed `agent_wallet` reads prefer `/execute`. Execute-intent is only a fallback when that
3
+ * rail rejects the action (`does not support execute rail`). Schema failures must not fall back
4
+ * to an empty queued execute-intent envelope.
5
+ *
6
+ * Keep in sync with `thirdfy-mcp` `src/lib/managedReadExecuteRail.ts`.
7
+ */
8
+
9
+ export const EXECUTE_RAIL_UNSUPPORTED_FRAGMENT = 'does not support execute rail';
10
+
11
+ export function managedReadExecuteErrorText(data) {
12
+ return String(data?.error || data?.message || data?.code || data?.blockedReason || '').toLowerCase();
13
+ }
14
+
15
+ export function shouldFallbackManagedReadToExecuteIntent({ isReadOnly, errorText } = {}) {
16
+ if (!isReadOnly) return false;
17
+ const err = String(errorText || '').toLowerCase();
18
+ if (err.includes('params_schema_invalid') || err.includes('invalid paramsschema') || err.includes('unknown key')) {
19
+ return false;
20
+ }
21
+ return err.includes(EXECUTE_RAIL_UNSUPPORTED_FRAGMENT);
22
+ }
@@ -12,6 +12,7 @@ import {
12
12
  import { apiGet, apiPost } from '../../core/http.mjs';
13
13
  import { withActionTimeout } from '../../core/actionTimeouts.mjs';
14
14
  import { isReadOnlyResolvedAction } from '../../core/readOnlyActions.mjs';
15
+ import { shouldFallbackManagedReadToExecuteIntent } from './managedReadExecuteRail.mjs';
15
16
  import { createRequire } from 'module';
16
17
 
17
18
  const require = createRequire(import.meta.url);
@@ -85,9 +86,10 @@ function isReadOnlyAction(resolved) {
85
86
  }
86
87
 
87
88
  function shouldFallbackAgentWalletToExecuteIntent(resolved, response) {
88
- if (!isReadOnlyAction(resolved)) return false;
89
- const err = String(response?.error || response?.message || '').toLowerCase();
90
- return err.includes('does not support execute rail');
89
+ return shouldFallbackManagedReadToExecuteIntent({
90
+ isReadOnly: isReadOnlyAction(resolved),
91
+ errorText: String(response?.error || response?.message || response?.code || response?.blockedReason || ''),
92
+ });
91
93
  }
92
94
 
93
95
  // Managed /execute often returns provider payloads as JSON strings under data.result. Pack parsers