ocsmarttools 0.1.7 → 0.1.8

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,12 @@
2
2
 
3
3
  All notable changes to `ocsmarttools` are documented here.
4
4
 
5
+ ## [0.1.8] - 2026-02-22
6
+
7
+ ### Changed
8
+ - Improved `tool_search` fallback discovery for skill-driven workflows by adding relevance keywords for browser/playwright/stealth-style usage.
9
+ - Added explicit skill-compatibility note in search results and README.
10
+
5
11
  ## [0.1.7] - 2026-02-22
6
12
 
7
13
  ### Fixed
package/README.md CHANGED
@@ -11,6 +11,10 @@ Provider-agnostic tool orchestration for lower latency and lower token cost.
11
11
  - `tool_batch`: runs bounded multi-step workflows (`call` + `foreach`)
12
12
  - `tool_result_get`: retrieves large stored outputs by handle
13
13
 
14
+ Skills compatibility:
15
+ - Works with OpenClaw skills because skills are instructions layered on top of tools.
16
+ - For blocked websites, skill workflows that use `browser`/Playwright-style flows are compatible with `tool_dispatch` and `tool_batch`.
17
+
14
18
  ## Why It Helps
15
19
 
16
20
  ```mermaid
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ocsmarttools",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Provider-agnostic advanced tool orchestration plugin for OpenClaw with search, dispatch, and batching",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -5,11 +5,19 @@ export type ToolEntry = {
5
5
  group: string;
6
6
  description: string;
7
7
  paramsHint?: string;
8
+ keywords?: string[];
8
9
  source: "builtin" | "policy" | "live";
9
10
  };
10
11
 
11
12
  const BUILTIN: ToolEntry[] = [
12
- { name: "exec", group: "runtime", description: "Run shell commands.", paramsHint: "{ command }", source: "builtin" },
13
+ {
14
+ name: "exec",
15
+ group: "runtime",
16
+ description: "Run shell commands.",
17
+ paramsHint: "{ command }",
18
+ keywords: ["script", "python", "node", "playwright", "stealth", "scrape"],
19
+ source: "builtin",
20
+ },
13
21
  { name: "bash", group: "runtime", description: "Alias for exec in many contexts.", paramsHint: "{ command }", source: "builtin" },
14
22
  { name: "process", group: "runtime", description: "Manage background command sessions.", paramsHint: "{ action, sessionId? }", source: "builtin" },
15
23
  { name: "read", group: "fs", description: "Read files.", paramsHint: "{ path }", source: "builtin" },
@@ -23,9 +31,30 @@ const BUILTIN: ToolEntry[] = [
23
31
  { name: "session_status", group: "sessions", description: "Show current session status.", paramsHint: "{}", source: "builtin" },
24
32
  { name: "memory_search", group: "memory", description: "Search memory snippets.", paramsHint: "{ query }", source: "builtin" },
25
33
  { name: "memory_get", group: "memory", description: "Read memory entries.", paramsHint: "{ key }", source: "builtin" },
26
- { name: "web_search", group: "web", description: "Search the web.", paramsHint: "{ query }", source: "builtin" },
27
- { name: "web_fetch", group: "web", description: "Fetch and extract web page content.", paramsHint: "{ url }", source: "builtin" },
28
- { name: "browser", group: "ui", description: "Browser automation.", paramsHint: "{ action, ... }", source: "builtin" },
34
+ {
35
+ name: "web_search",
36
+ group: "web",
37
+ description: "Search the web.",
38
+ paramsHint: "{ query }",
39
+ keywords: ["research", "discover", "find"],
40
+ source: "builtin",
41
+ },
42
+ {
43
+ name: "web_fetch",
44
+ group: "web",
45
+ description: "Fetch and extract web page content.",
46
+ paramsHint: "{ url }",
47
+ keywords: ["read page", "extract", "html"],
48
+ source: "builtin",
49
+ },
50
+ {
51
+ name: "browser",
52
+ group: "ui",
53
+ description: "Browser automation.",
54
+ paramsHint: "{ action, ... }",
55
+ keywords: ["playwright", "stealth", "anti-bot", "captcha", "dynamic site", "javascript page"],
56
+ source: "builtin",
57
+ },
29
58
  { name: "canvas", group: "ui", description: "Canvas/artifact rendering actions.", paramsHint: "{ action, ... }", source: "builtin" },
30
59
  { name: "cron", group: "automation", description: "Manage scheduled jobs.", paramsHint: "{ action, ... }", source: "builtin" },
31
60
  { name: "gateway", group: "automation", description: "Gateway control-plane actions.", paramsHint: "{ action, ... }", source: "builtin" },
@@ -298,6 +327,7 @@ function score(query: string, entry: ToolEntry): number {
298
327
  const n = entry.name.toLowerCase();
299
328
  const d = entry.description.toLowerCase();
300
329
  const g = entry.group.toLowerCase();
330
+ const keywords = (entry.keywords ?? []).map((v) => v.toLowerCase());
301
331
 
302
332
  let s = 0;
303
333
  if (n === q) s += 100;
@@ -305,10 +335,13 @@ function score(query: string, entry: ToolEntry): number {
305
335
  if (n.includes(q)) s += 30;
306
336
  if (g.includes(q)) s += 15;
307
337
  if (d.includes(q)) s += 10;
338
+ if (keywords.includes(q)) s += 25;
308
339
 
309
340
  for (const token of q.split(/\s+/).filter(Boolean)) {
310
341
  if (n.includes(token)) s += 12;
311
342
  if (d.includes(token)) s += 4;
343
+ if (g.includes(token)) s += 4;
344
+ if (keywords.some((k) => k.includes(token))) s += 8;
312
345
  }
313
346
  return s;
314
347
  }
@@ -65,6 +65,8 @@ export function createToolSearchTool(api: OpenClawPluginApi): AnyAgentTool {
65
65
  liveCount: built.liveCount,
66
66
  totalCatalogSize: catalog.length,
67
67
  count: matches.length,
68
+ note:
69
+ "Skills are instruction layers. OCSmartTools can still dispatch/batch-call runtime and browser tools used by those skills.",
68
70
  tools: matches,
69
71
  });
70
72
  },