@swarmclawai/swarmclaw 0.7.0 → 0.7.1

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/README.md CHANGED
@@ -85,7 +85,7 @@ curl -fsSL https://raw.githubusercontent.com/swarmclawai/swarmclaw/main/install.
85
85
  ```
86
86
 
87
87
  The installer resolves the latest stable release tag and installs that version by default.
88
- To pin a version: `SWARMCLAW_VERSION=v0.7.0 curl ... | bash`
88
+ To pin a version: `SWARMCLAW_VERSION=v0.7.1 curl ... | bash`
89
89
 
90
90
  Or run locally from the repo (friendly for non-technical users):
91
91
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swarmclawai/swarmclaw",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "Self-hosted AI agent orchestration dashboard — manage LLM providers, orchestrate agent swarms, schedule tasks, and bridge agents to chat platforms.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -220,9 +220,15 @@ export function buildWebTools(bctx: ToolBuildContext): StructuredToolInterface[]
220
220
  return text.replace(/\n{3,}/g, '\n').trim()
221
221
  }
222
222
 
223
+ const MCP_CALL_TIMEOUT_MS = 30000 // 30s timeout per browser action
223
224
  const callMcpTool = async (toolName: string, args: Record<string, any>, options?: { saveTo?: string }): Promise<string> => {
224
225
  await ensureMcp()
225
- const result = await mcpClient.callTool({ name: toolName, arguments: args })
226
+ const result = await Promise.race([
227
+ mcpClient.callTool({ name: toolName, arguments: args }),
228
+ new Promise<never>((_resolve, reject) =>
229
+ setTimeout(() => reject(new Error(`Browser action "${toolName}" timed out after ${MCP_CALL_TIMEOUT_MS / 1000}s`)), MCP_CALL_TIMEOUT_MS)
230
+ ),
231
+ ])
226
232
  const isError = result?.isError === true; const content = result?.content; const savedPaths: string[] = []
227
233
  const saveArtifact = (buffer: Buffer, suggestedExt: string): void => {
228
234
  const rawSaveTo = options?.saveTo?.trim()