Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions RELEASE-v0.10.5.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,43 +21,43 @@ OpenClaw 2026.2.22 added multilingual memory search for Spanish, Portuguese, Jap

### Keywords Added Across All 12 Dimensions

| Dimension | ES | PT | KO | AR |
| ---------------------- | -- | -- | -- | -- |
| codeKeywords | ✅ | ✅ | ✅ | ✅ |
| reasoningKeywords | ✅ | ✅ | ✅ | ✅ |
| simpleKeywords | ✅ | ✅ | ✅ | ✅ |
| technicalKeywords | ✅ | ✅ | ✅ | ✅ |
| creativeKeywords | ✅ | ✅ | ✅ | ✅ |
| imperativeVerbs | ✅ | ✅ | ✅ | ✅ |
| constraintIndicators | ✅ | ✅ | ✅ | ✅ |
| outputFormatKeywords | ✅ | ✅ | ✅ | ✅ |
| referenceKeywords | ✅ | ✅ | ✅ | ✅ |
| negationKeywords | ✅ | ✅ | ✅ | ✅ |
| domainSpecificKeywords | ✅ | ✅ | ✅ | ✅ |
| agenticTaskKeywords | ✅ | ✅ | ✅ | ✅ |
| Dimension | ES | PT | KO | AR |
| ---------------------- | --- | --- | --- | --- |
| codeKeywords | ✅ | ✅ | ✅ | ✅ |
| reasoningKeywords | ✅ | ✅ | ✅ | ✅ |
| simpleKeywords | ✅ | ✅ | ✅ | ✅ |
| technicalKeywords | ✅ | ✅ | ✅ | ✅ |
| creativeKeywords | ✅ | ✅ | ✅ | ✅ |
| imperativeVerbs | ✅ | ✅ | ✅ | ✅ |
| constraintIndicators | ✅ | ✅ | ✅ | ✅ |
| outputFormatKeywords | ✅ | ✅ | ✅ | ✅ |
| referenceKeywords | ✅ | ✅ | ✅ | ✅ |
| negationKeywords | ✅ | ✅ | ✅ | ✅ |
| domainSpecificKeywords | ✅ | ✅ | ✅ | ✅ |
| agenticTaskKeywords | ✅ | ✅ | ✅ | ✅ |

---

## 📝 Metadata Updates

| File | Change |
| ---------------------- | ----------------------------------- |
| `package.json` | Version 0.10.4 → 0.10.5 |
| `package.json` | Description: "41 models" → "41+" |
| File | Change |
| ---------------------- | ------------------------------------- |
| `package.json` | Version 0.10.4 → 0.10.5 |
| `package.json` | Description: "41 models" → "41+" |
| `openclaw.plugin.json` | "30+ models, 78%" → "41+ models, 92%" |
| `README.md` | All model counts: 38+/30+ → 41+ |
| `README.md` | All model counts: 38+/30+ → 41+ |

---

## 📋 OpenClaw 2026.2.22 Compatibility Notes

| OpenClaw Feature | ClawRouter Impact | Status |
| ------------------------ | ----------------- | ---------- |
| OpenClaw Feature | ClawRouter Impact | Status |
| ------------------------ | ----------------- | ---------------------------------------- |
| Mistral provider support | Add models | ⏳ Pending (blocked on BlockRun backend) |
| Multilingual memory | Keyword expansion | ✅ Done |
| Auto-updater | No impact | ✅ N/A |
| Cron parallel runs | Proxy handles it | ✅ OK |
| 40+ security fixes | No impact | ✅ N/A |
| Multilingual memory | Keyword expansion | ✅ Done |
| Auto-updater | No impact | ✅ N/A |
| Cron parallel runs | Proxy handles it | ✅ OK |
| 40+ security fixes | No impact | ✅ N/A |

---

Expand Down
19 changes: 11 additions & 8 deletions RELEASE-v0.10.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ The `blockrun_x_users_lookup` tool was registered correctly but the AI rarely ca
**Root cause:** The description said what the tool _is_, not when the AI _must_ use it.

**Before:**

```
"Look up Twitter/X user profiles by username. Returns follower counts,
verification status, bio, and more. Accepts up to 100 usernames per request."
```

**After:**

```
"ALWAYS use this tool to look up real-time Twitter/X user profiles.
Call this when the user asks about any Twitter/X account, username, handle,
Expand Down Expand Up @@ -68,6 +70,7 @@ The `/partners` command output now includes a **How to use** line so users know
Previously, if the wallet file existed but had an invalid format, ClawRouter would silently fall through and generate a new empty wallet — potentially abandoning a funded wallet.

**Now:** throws a descriptive error with recovery instructions:

```
CRITICAL: Wallet file exists but has invalid format!
Refusing to auto-generate new wallet to protect existing funds.
Expand All @@ -80,14 +83,14 @@ Also adds a prominent backup reminder banner when a new wallet is generated for

## 📋 Files Changed

| File | Change |
|------|--------|
| `src/partners/registry.ts` | Directive tool description for `x_users_lookup` |
| `src/index.ts` | Usage hint in `/partners` command output |
| `src/router/selector.ts` | Fix `BASELINE_MODEL_ID` typo (`4-5` → `4.6`) |
| `src/router/selector.test.ts` | Update test mock to match corrected baseline ID |
| `src/auth.ts` | Wallet corruption safety + new-wallet backup reminder |
| `package.json` | Version bump `0.10.6` → `0.10.7` |
| File | Change |
| ----------------------------- | ----------------------------------------------------- |
| `src/partners/registry.ts` | Directive tool description for `x_users_lookup` |
| `src/index.ts` | Usage hint in `/partners` command output |
| `src/router/selector.ts` | Fix `BASELINE_MODEL_ID` typo (`4-5` → `4.6`) |
| `src/router/selector.test.ts` | Update test mock to match corrected baseline ID |
| `src/auth.ts` | Wallet corruption safety + new-wallet backup reminder |
| `package.json` | Version bump `0.10.6` → `0.10.7` |

---

Expand Down
6 changes: 3 additions & 3 deletions RELEASE-v0.10.8.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ OpenClaw expects `{ content: [{ type: "text", text: "..." }], details: ... }`. C

## 📋 File Changed

| File | Change |
|------|--------|
| File | Change |
| ----------------------- | ------------------------------------------- |
| `src/partners/tools.ts` | Fix all 3 OpenClaw tool API contract issues |
| `package.json` | Version bump `0.10.7` → `0.10.8` |
| `package.json` | Version bump `0.10.7` → `0.10.8` |

---

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 7 additions & 5 deletions src/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,13 @@ async function loadSavedWallet(): Promise<string | undefined> {
console.error(`[ClawRouter] ✗ CRITICAL: Wallet file exists but has invalid format!`);
console.error(`[ClawRouter] File: ${WALLET_FILE}`);
console.error(`[ClawRouter] Expected: 0x followed by 64 hex characters (66 chars total)`);
console.error(`[ClawRouter] To fix: restore your backup key or set BLOCKRUN_WALLET_KEY env var`);
console.error(
`[ClawRouter] To fix: restore your backup key or set BLOCKRUN_WALLET_KEY env var`,
);
throw new Error(
`Wallet file at ${WALLET_FILE} is corrupted or has wrong format. ` +
`Refusing to auto-generate new wallet to protect existing funds. ` +
`Restore your backup key or set BLOCKRUN_WALLET_KEY environment variable.`,
`Refusing to auto-generate new wallet to protect existing funds. ` +
`Restore your backup key or set BLOCKRUN_WALLET_KEY environment variable.`,
);
} catch (err) {
// Re-throw corruption errors (not ENOENT)
Expand All @@ -69,8 +71,8 @@ async function loadSavedWallet(): Promise<string | undefined> {
);
throw new Error(
`Cannot read wallet file at ${WALLET_FILE}: ${err instanceof Error ? err.message : String(err)}. ` +
`Refusing to auto-generate new wallet to protect existing funds. ` +
`Fix file permissions or set BLOCKRUN_WALLET_KEY environment variable.`,
`Refusing to auto-generate new wallet to protect existing funds. ` +
`Fix file permissions or set BLOCKRUN_WALLET_KEY environment variable.`,
);
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,9 @@ async function main(): Promise<void> {
console.log(` ${svc.description}`);
console.log(` Tool: blockrun_${svc.id}`);
console.log(` Method: ${svc.method} /v1${svc.proxyPath}`);
console.log(` Pricing: ${svc.pricing.perUnit} per ${svc.pricing.unit} (min ${svc.pricing.minimum}, max ${svc.pricing.maximum})`);
console.log(
` Pricing: ${svc.pricing.perUnit} per ${svc.pricing.unit} (min ${svc.pricing.minimum}, max ${svc.pricing.maximum})`,
);
console.log();
}

Expand Down
17 changes: 10 additions & 7 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,9 @@ const plugin: OpenClawPluginDefinition = {
api.registerTool(tool);
}
if (partnerTools.length > 0) {
api.logger.info(`Registered ${partnerTools.length} partner tool(s): ${partnerTools.map((t) => t.name).join(", ")}`);
api.logger.info(
`Registered ${partnerTools.length} partner tool(s): ${partnerTools.map((t) => t.name).join(", ")}`,
);
}

// Register /partners command
Expand All @@ -693,17 +695,18 @@ const plugin: OpenClawPluginDefinition = {
return { text: "No partner APIs available." };
}

const lines = [
"**Partner APIs** (paid via your ClawRouter wallet)",
"",
];
const lines = ["**Partner APIs** (paid via your ClawRouter wallet)", ""];

for (const svc of PARTNER_SERVICES) {
lines.push(`**${svc.name}** (${svc.partner})`);
lines.push(` ${svc.description}`);
lines.push(` Tool: \`${`blockrun_${svc.id}`}\``);
lines.push(` Pricing: ${svc.pricing.perUnit} per ${svc.pricing.unit} (min ${svc.pricing.minimum}, max ${svc.pricing.maximum})`);
lines.push(` **How to use:** Ask "Look up Twitter user @elonmusk" or "Get info on these X accounts: @naval, @balajis"`);
lines.push(
` Pricing: ${svc.pricing.perUnit} per ${svc.pricing.unit} (min ${svc.pricing.minimum}, max ${svc.pricing.maximum})`,
);
lines.push(
` **How to use:** Ask "Look up Twitter user @elonmusk" or "Get info on these X accounts: @naval, @balajis"`,
);
lines.push("");
}

Expand Down
5 changes: 1 addition & 4 deletions src/partners/tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ export type PartnerToolDefinition = {
/**
* Build a single partner tool from a service definition.
*/
function buildTool(
service: PartnerServiceDefinition,
proxyBaseUrl: string,
): PartnerToolDefinition {
function buildTool(service: PartnerServiceDefinition, proxyBaseUrl: string): PartnerToolDefinition {
// Build JSON Schema properties from service params
const properties: Record<string, unknown> = {};
const required: string[] = [];
Expand Down
10 changes: 8 additions & 2 deletions src/proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -973,7 +973,12 @@ async function proxyPartnerRequest(
// Forward headers (strip hop-by-hop)
const headers: Record<string, string> = {};
for (const [key, value] of Object.entries(req.headers)) {
if (key === "host" || key === "connection" || key === "transfer-encoding" || key === "content-length")
if (
key === "host" ||
key === "connection" ||
key === "transfer-encoding" ||
key === "content-length"
)
continue;
if (typeof value === "string") headers[key] = value;
}
Expand Down Expand Up @@ -1025,7 +1030,8 @@ async function proxyPartnerRequest(
baselineCost: 0,
savings: 0,
latencyMs,
partnerId: (req.url?.split("?")[0] ?? "").replace(/^\/v1\//, "").replace(/\//g, "_") || "unknown",
partnerId:
(req.url?.split("?")[0] ?? "").replace(/^\/v1\//, "").replace(/\//g, "_") || "unknown",
service: "partner",
}).catch(() => {});
}
Expand Down