@stdiobus/workers-registry 1.5.2 → 1.5.4

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../workers-registry/mcp-to-acp-proxy/proxy.js"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\n/*\n * Apache License 2.0\n * Copyright (c) 2025\u2013present Raman Marozau, Target Insight Function.\n * Contact: raman@worktif.com\n *\n * This file is part of the stdio bus protocol reference implementation:\n * stdio_bus_kernel_workers (target: <target_stdio_bus_kernel_workers>).\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * MCP-to-ACP Protocol Proxy\n *\n * Converts MCP protocol (from Kiro) to ACP protocol (for stdio Bus)\n * Runs as MCP server for Kiro, forwards to ACP via TCP\n */\n\nimport net from 'net';\nimport { createInterface } from 'readline';\n\nconst ACP_HOST = process.env.ACP_HOST || '127.0.0.1';\nconst ACP_PORT = process.env.ACP_PORT || 9000;\nconst AGENT_ID = process.env.AGENT_ID || 'default-agent';\n\nconsole.error(`[MCP-APC][proxy] Starting proxy...`);\nconsole.error(`[MCP-APC][proxy] Target: ${ACP_HOST}:${ACP_PORT}`);\nconsole.error(`[MCP-APC][proxy] Agent ID: ${AGENT_ID}`);\n\n// State\nconst acpSocket = net.connect(ACP_PORT, ACP_HOST);\nlet acpConnected = false;\nlet proxySessionId = null; // For stdio Bus routing\nlet acpSessionId = null; // From ACP agent\nlet pendingRequests = new Map(); // id -> {method, params, ...}\nlet accumulatedText = new Map(); // requestId -> accumulated text\n\nacpSocket.on('connect', () => {\n console.error('[MCP-APC][proxy] Connected to ACP stdio Bus');\n acpConnected = true;\n});\n\nacpSocket.on('error', (err) => {\n console.error(`[MCP-APC][proxy] ACP connection error: ${err.message}`);\n process.exit(1);\n});\n\n// Handle ACP messages\nlet acpBuffer = '';\nacpSocket.on('data', (data) => {\n acpBuffer += data.toString();\n\n let newlineIndex;\n while ((newlineIndex = acpBuffer.indexOf('\\n')) !== -1) {\n const line = acpBuffer.slice(0, newlineIndex);\n acpBuffer = acpBuffer.slice(newlineIndex + 1);\n\n if (line.trim()) {\n try {\n const acpMsg = JSON.parse(line);\n console.error(`[MCP-APC][proxy] \u2190 ACP: ${JSON.stringify(acpMsg)}`);\n\n // Check if notification or response\n if (acpMsg.id === undefined || acpMsg.id === null) {\n // Notification from ACP worker - rewrite sessionId and send back to stdio Bus\n console.error(`[MCP-APC][proxy] Processing notification: ${acpMsg.method}`);\n handleACPNotification(acpMsg);\n } else {\n // Response\n console.error(`[MCP-APC][proxy] Processing response id=${acpMsg.id}`);\n console.error(`[MCP-APC][proxy] Pending: ${JSON.stringify([...pendingRequests.keys()])}`);\n const mcpResponse = convertACPtoMCP(acpMsg);\n if (mcpResponse) {\n console.error(`[MCP-APC][proxy] \u2192 MCP: ${JSON.stringify(mcpResponse)}`);\n process.stdout.write(JSON.stringify(mcpResponse) + '\\n');\n } else {\n console.error(`[MCP-APC][proxy] WARNING: No MCP response for id=${acpMsg.id}`);\n }\n }\n } catch (err) {\n console.error(`[MCP-APC][proxy] Error parsing ACP: ${err.message}`);\n }\n }\n }\n});\n\n// Handle MCP requests\nconst rl = createInterface({\n input: process.stdin,\n terminal: false\n});\n\nrl.on('line', (line) => {\n if (!line.trim()) return;\n\n try {\n const mcpReq = JSON.parse(line);\n console.error(`[MCP-APC][proxy] \u2190 MCP: ${JSON.stringify(mcpReq)}`);\n\n const acpReq = convertMCPtoACP(mcpReq);\n if (acpReq) {\n console.error(`[MCP-APC][proxy] \u2192 ACP: ${JSON.stringify(acpReq)}`);\n if (acpConnected) {\n acpSocket.write(JSON.stringify(acpReq) + '\\n');\n }\n }\n } catch (err) {\n console.error(`[MCP-APC][proxy] Error parsing MCP: ${err.message}`);\n }\n});\n\nfunction handleACPNotification(msg) {\n const { method, params } = msg;\n\n if (method === 'session/update' && params?.update) {\n const update = params.update;\n\n // Find pending session/prompt request\n for (const [reqId, pending] of pendingRequests.entries()) {\n if (pending.method === 'session/prompt') {\n if (update.sessionUpdate === 'agent_message_chunk' && update.content?.text) {\n if (!accumulatedText.has(reqId)) {\n accumulatedText.set(reqId, '');\n }\n accumulatedText.set(reqId, accumulatedText.get(reqId) + update.content.text);\n }\n break;\n }\n }\n }\n // Note: Notifications are processed internally, not forwarded\n // They accumulate text for the final response\n}\n\nfunction convertMCPtoACP(mcpReq) {\n const { id, method, params } = mcpReq;\n\n if (id === undefined || id === null) {\n return null; // Ignore notifications\n }\n\n pendingRequests.set(id, { method, params });\n\n if (!proxySessionId) {\n proxySessionId = `proxy-${Date.now()}`;\n }\n\n switch (method) {\n case 'initialize':\n return {\n jsonrpc: '2.0',\n id,\n method: 'initialize',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: {\n protocolVersion: 1,\n clientCapabilities: params?.capabilities || {},\n clientInfo: params?.clientInfo || { name: 'mcp-proxy', version: '1.0.0' }\n }\n };\n\n case 'tools/list':\n sendMCP({\n jsonrpc: '2.0',\n id,\n result: {\n tools: [{\n name: 'acp_prompt',\n description: `Send prompt to ${AGENT_ID}`,\n inputSchema: {\n type: 'object',\n properties: {\n prompt: { type: 'string', description: 'Prompt text' }\n },\n required: ['prompt']\n }\n }]\n }\n });\n pendingRequests.delete(id);\n return null;\n\n case 'tools/call':\n const promptText = params?.arguments?.prompt || '';\n\n if (!acpSessionId) {\n // Need to create session first\n const sessionReqId = `sess-${id}`;\n pendingRequests.set(sessionReqId, {\n method: 'session/new',\n originalId: id,\n promptText\n });\n return {\n jsonrpc: '2.0',\n id: sessionReqId,\n method: 'session/new',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: { cwd: process.cwd(), mcpServers: [] }\n };\n }\n\n // Session exists, send prompt\n // IMPORTANT: Update pending to session/prompt since that's what we're sending\n pendingRequests.set(id, { method: 'session/prompt', params });\n return {\n jsonrpc: '2.0',\n id,\n method: 'session/prompt',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: {\n sessionId: acpSessionId,\n prompt: [{ type: 'text', text: promptText }]\n }\n };\n\n case 'resources/list':\n sendMCP({ jsonrpc: '2.0', id, result: { resources: [] } });\n pendingRequests.delete(id);\n return null;\n\n case 'resources/templates/list':\n sendMCP({ jsonrpc: '2.0', id, result: { resourceTemplates: [] } });\n pendingRequests.delete(id);\n return null;\n\n case 'prompts/list':\n sendMCP({ jsonrpc: '2.0', id, result: { prompts: [] } });\n pendingRequests.delete(id);\n return null;\n\n default:\n sendMCP({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown method: ${method}` } });\n pendingRequests.delete(id);\n return null;\n }\n}\n\nfunction convertACPtoMCP(acpResp) {\n const { id, result, error } = acpResp;\n\n const pending = pendingRequests.get(id);\n if (!pending) {\n console.error(`[MCP-APC][proxy] ERROR: No pending request for id=${id}`);\n return null;\n }\n\n console.error(`[MCP-APC][proxy] Converting ACP->MCP for method: ${pending.method}`);\n pendingRequests.delete(id);\n\n if (error) {\n // For session/prompt errors: if we already accumulated text from streaming,\n // return the accumulated text as a successful response instead of the error.\n // This handles the case where the agent streams the full response via\n // session/update notifications but then fails to serialize the final response.\n if (pending.method === 'session/prompt') {\n const text = accumulatedText.get(id) || '';\n accumulatedText.delete(id);\n if (text.length > 0) {\n console.error(`[MCP-APC][proxy] Agent error after streaming, returning accumulated text (${text.length} chars) instead of error`);\n return {\n jsonrpc: '2.0',\n id,\n result: {\n content: [{ type: 'text', text }]\n }\n };\n }\n }\n accumulatedText.delete(id);\n return {\n jsonrpc: '2.0',\n id,\n error: { code: error.code || -32603, message: error.message || 'ACP error' }\n };\n }\n\n switch (pending.method) {\n case 'initialize':\n return {\n jsonrpc: '2.0',\n id,\n result: {\n protocolVersion: '2024-11-05',\n capabilities: { tools: {}, resources: {} },\n serverInfo: result?.agentInfo || { name: 'acp-agent', version: '1.0.0' }\n }\n };\n\n case 'session/new':\n acpSessionId = result?.sessionId;\n console.error(`[MCP-APC][proxy] ACP session: ${acpSessionId}`);\n\n if (pending.originalId && pending.promptText) {\n // Send queued prompt\n const promptReq = {\n jsonrpc: '2.0',\n id: pending.originalId,\n method: 'session/prompt',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: {\n sessionId: acpSessionId,\n prompt: [{ type: 'text', text: pending.promptText }]\n }\n };\n\n pendingRequests.set(pending.originalId, { method: 'session/prompt' });\n\n console.error(`[MCP-APC][proxy] \u2192 ACP: ${JSON.stringify(promptReq)}`);\n if (acpConnected) {\n acpSocket.write(JSON.stringify(promptReq) + '\\n');\n }\n }\n return null;\n\n case 'session/prompt':\n const text = accumulatedText.get(id) || '';\n accumulatedText.delete(id);\n console.error(`[MCP-APC][proxy] Returning accumulated text (${text.length} chars): \"${text.substring(0, 50)}...\"`);\n return {\n jsonrpc: '2.0',\n id,\n result: {\n content: [{ type: 'text', text: text || 'No response' }]\n }\n };\n\n default:\n console.error(`[MCP-APC][proxy] WARNING: Unhandled method ${pending.method}, returning raw result`);\n return { jsonrpc: '2.0', id, result: result || {} };\n }\n}\n\nfunction sendMCP(msg) {\n console.error(`[MCP-APC][proxy] \u2192 MCP: ${JSON.stringify(msg)}`);\n process.stdout.write(JSON.stringify(msg) + '\\n');\n}\n\nprocess.on('SIGTERM', () => {\n acpSocket.end();\n process.exit(0);\n});\n\nprocess.on('SIGINT', () => {\n acpSocket.end();\n process.exit(0);\n});\n"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n\n/*\n * Apache License 2.0\n * Copyright (c) 2025\u2013present Raman Marozau, Target Insight Function.\n * Contact: raman@worktif.com\n *\n * This file is part of the stdio bus protocol reference implementation:\n * stdio_bus_kernel_workers (target: <target_stdio_bus_kernel_workers>).\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * MCP-to-ACP Protocol Proxy\n *\n * Converts MCP protocol (from IDE) to ACP protocol (for stdio Bus)\n * Runs as MCP server for IDE, forwards to ACP via TCP\n */\n\nimport net from 'net';\nimport { createInterface } from 'readline';\n\nconst ACP_HOST = process.env.ACP_HOST || '127.0.0.1';\nconst ACP_PORT = process.env.ACP_PORT || 9000;\nconst AGENT_ID = process.env.AGENT_ID || 'default-agent';\n\nconsole.error(`[MCP-APC][proxy] Starting proxy...`);\nconsole.error(`[MCP-APC][proxy] Target: ${ACP_HOST}:${ACP_PORT}`);\nconsole.error(`[MCP-APC][proxy] Agent ID: ${AGENT_ID}`);\n\n// State\nconst acpSocket = net.connect(ACP_PORT, ACP_HOST);\nlet acpConnected = false;\nlet proxySessionId = null; // For stdio Bus routing\nlet acpSessionId = null; // From ACP agent\nlet pendingRequests = new Map(); // id -> {method, params, ...}\nlet accumulatedText = new Map(); // requestId -> accumulated text\n\nacpSocket.on('connect', () => {\n console.error('[MCP-APC][proxy] Connected to ACP stdio Bus');\n acpConnected = true;\n});\n\nacpSocket.on('error', (err) => {\n console.error(`[MCP-APC][proxy] ACP connection error: ${err.message}`);\n process.exit(1);\n});\n\n// Handle ACP messages\nlet acpBuffer = '';\nacpSocket.on('data', (data) => {\n acpBuffer += data.toString();\n\n let newlineIndex;\n while ((newlineIndex = acpBuffer.indexOf('\\n')) !== -1) {\n const line = acpBuffer.slice(0, newlineIndex);\n acpBuffer = acpBuffer.slice(newlineIndex + 1);\n\n if (line.trim()) {\n try {\n const acpMsg = JSON.parse(line);\n console.error(`[MCP-APC][proxy] \u2190 ACP: ${JSON.stringify(acpMsg)}`);\n\n // Check if notification or response\n if (acpMsg.id === undefined || acpMsg.id === null) {\n // Notification from ACP worker - rewrite sessionId and send back to stdio Bus\n console.error(`[MCP-APC][proxy] Processing notification: ${acpMsg.method}`);\n handleACPNotification(acpMsg);\n } else {\n // Response\n console.error(`[MCP-APC][proxy] Processing response id=${acpMsg.id}`);\n console.error(`[MCP-APC][proxy] Pending: ${JSON.stringify([...pendingRequests.keys()])}`);\n const mcpResponse = convertACPtoMCP(acpMsg);\n if (mcpResponse) {\n console.error(`[MCP-APC][proxy] \u2192 MCP: ${JSON.stringify(mcpResponse)}`);\n process.stdout.write(JSON.stringify(mcpResponse) + '\\n');\n } else {\n console.error(`[MCP-APC][proxy] WARNING: No MCP response for id=${acpMsg.id}`);\n }\n }\n } catch (err) {\n console.error(`[MCP-APC][proxy] Error parsing ACP: ${err.message}`);\n }\n }\n }\n});\n\n// Handle MCP requests\nconst rl = createInterface({\n input: process.stdin,\n terminal: false\n});\n\nrl.on('line', (line) => {\n if (!line.trim()) return;\n\n try {\n const mcpReq = JSON.parse(line);\n console.error(`[MCP-APC][proxy] \u2190 MCP: ${JSON.stringify(mcpReq)}`);\n\n const acpReq = convertMCPtoACP(mcpReq);\n if (acpReq) {\n console.error(`[MCP-APC][proxy] \u2192 ACP: ${JSON.stringify(acpReq)}`);\n if (acpConnected) {\n acpSocket.write(JSON.stringify(acpReq) + '\\n');\n }\n }\n } catch (err) {\n console.error(`[MCP-APC][proxy] Error parsing MCP: ${err.message}`);\n }\n});\n\nfunction handleACPNotification(msg) {\n const { method, params } = msg;\n\n if (method === 'session/update' && params?.update) {\n const update = params.update;\n\n // Find pending session/prompt request\n for (const [reqId, pending] of pendingRequests.entries()) {\n if (pending.method === 'session/prompt') {\n if (update.sessionUpdate === 'agent_message_chunk' && update.content?.text) {\n if (!accumulatedText.has(reqId)) {\n accumulatedText.set(reqId, '');\n }\n accumulatedText.set(reqId, accumulatedText.get(reqId) + update.content.text);\n }\n break;\n }\n }\n }\n // Note: Notifications are processed internally, not forwarded\n // They accumulate text for the final response\n}\n\nfunction convertMCPtoACP(mcpReq) {\n const { id, method, params } = mcpReq;\n\n if (id === undefined || id === null) {\n return null; // Ignore notifications\n }\n\n pendingRequests.set(id, { method, params });\n\n if (!proxySessionId) {\n proxySessionId = `proxy-${Date.now()}`;\n }\n\n switch (method) {\n case 'initialize':\n return {\n jsonrpc: '2.0',\n id,\n method: 'initialize',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: {\n protocolVersion: 1,\n clientCapabilities: params?.capabilities || {},\n clientInfo: params?.clientInfo || { name: 'mcp-proxy', version: '1.0.0' }\n }\n };\n\n case 'tools/list':\n sendMCP({\n jsonrpc: '2.0',\n id,\n result: {\n tools: [{\n name: 'acp_prompt',\n description: `Send prompt to ${AGENT_ID}`,\n inputSchema: {\n type: 'object',\n properties: {\n prompt: { type: 'string', description: 'Prompt text' }\n },\n required: ['prompt']\n }\n }]\n }\n });\n pendingRequests.delete(id);\n return null;\n\n case 'tools/call':\n const promptText = params?.arguments?.prompt || '';\n\n if (!acpSessionId) {\n // Need to create session first\n const sessionReqId = `sess-${id}`;\n pendingRequests.set(sessionReqId, {\n method: 'session/new',\n originalId: id,\n promptText\n });\n return {\n jsonrpc: '2.0',\n id: sessionReqId,\n method: 'session/new',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: { cwd: process.cwd(), mcpServers: [] }\n };\n }\n\n // Session exists, send prompt\n // IMPORTANT: Update pending to session/prompt since that's what we're sending\n pendingRequests.set(id, { method: 'session/prompt', params });\n return {\n jsonrpc: '2.0',\n id,\n method: 'session/prompt',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: {\n sessionId: acpSessionId,\n prompt: [{ type: 'text', text: promptText }]\n }\n };\n\n case 'resources/list':\n sendMCP({ jsonrpc: '2.0', id, result: { resources: [] } });\n pendingRequests.delete(id);\n return null;\n\n case 'resources/templates/list':\n sendMCP({ jsonrpc: '2.0', id, result: { resourceTemplates: [] } });\n pendingRequests.delete(id);\n return null;\n\n case 'prompts/list':\n sendMCP({ jsonrpc: '2.0', id, result: { prompts: [] } });\n pendingRequests.delete(id);\n return null;\n\n default:\n sendMCP({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown method: ${method}` } });\n pendingRequests.delete(id);\n return null;\n }\n}\n\nfunction convertACPtoMCP(acpResp) {\n const { id, result, error } = acpResp;\n\n const pending = pendingRequests.get(id);\n if (!pending) {\n console.error(`[MCP-APC][proxy] ERROR: No pending request for id=${id}`);\n return null;\n }\n\n console.error(`[MCP-APC][proxy] Converting ACP->MCP for method: ${pending.method}`);\n pendingRequests.delete(id);\n\n if (error) {\n // For session/prompt errors: if we already accumulated text from streaming,\n // return the accumulated text as a successful response instead of the error.\n // This handles the case where the agent streams the full response via\n // session/update notifications but then fails to serialize the final response.\n if (pending.method === 'session/prompt') {\n const text = accumulatedText.get(id) || '';\n accumulatedText.delete(id);\n if (text.length > 0) {\n console.error(`[MCP-APC][proxy] Agent error after streaming, returning accumulated text (${text.length} chars) instead of error`);\n return {\n jsonrpc: '2.0',\n id,\n result: {\n content: [{ type: 'text', text }]\n }\n };\n }\n }\n accumulatedText.delete(id);\n return {\n jsonrpc: '2.0',\n id,\n error: { code: error.code || -32603, message: error.message || 'ACP error' }\n };\n }\n\n switch (pending.method) {\n case 'initialize':\n return {\n jsonrpc: '2.0',\n id,\n result: {\n protocolVersion: '2024-11-05',\n capabilities: { tools: {}, resources: {} },\n serverInfo: result?.agentInfo || { name: 'acp-agent', version: '1.0.0' }\n }\n };\n\n case 'session/new':\n acpSessionId = result?.sessionId;\n console.error(`[MCP-APC][proxy] ACP session: ${acpSessionId}`);\n\n if (pending.originalId && pending.promptText) {\n // Send queued prompt\n const promptReq = {\n jsonrpc: '2.0',\n id: pending.originalId,\n method: 'session/prompt',\n agentId: AGENT_ID,\n sessionId: proxySessionId,\n params: {\n sessionId: acpSessionId,\n prompt: [{ type: 'text', text: pending.promptText }]\n }\n };\n\n pendingRequests.set(pending.originalId, { method: 'session/prompt' });\n\n console.error(`[MCP-APC][proxy] \u2192 ACP: ${JSON.stringify(promptReq)}`);\n if (acpConnected) {\n acpSocket.write(JSON.stringify(promptReq) + '\\n');\n }\n }\n return null;\n\n case 'session/prompt':\n const text = accumulatedText.get(id) || '';\n accumulatedText.delete(id);\n console.error(`[MCP-APC][proxy] Returning accumulated text (${text.length} chars): \"${text.substring(0, 50)}...\"`);\n return {\n jsonrpc: '2.0',\n id,\n result: {\n content: [{ type: 'text', text: text || 'No response' }]\n }\n };\n\n default:\n console.error(`[MCP-APC][proxy] WARNING: Unhandled method ${pending.method}, returning raw result`);\n return { jsonrpc: '2.0', id, result: result || {} };\n }\n}\n\nfunction sendMCP(msg) {\n console.error(`[MCP-APC][proxy] \u2192 MCP: ${JSON.stringify(msg)}`);\n process.stdout.write(JSON.stringify(msg) + '\\n');\n}\n\nprocess.on('SIGTERM', () => {\n acpSocket.end();\n process.exit(0);\n});\n\nprocess.on('SIGINT', () => {\n acpSocket.end();\n process.exit(0);\n});\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -71,7 +71,7 @@ export interface SessionState {
71
71
  /**
72
72
  * MCP JSON-RPC request message.
73
73
  *
74
- * Represents a request from an MCP client (like Kiro IDE) to the proxy.
74
+ * Represents a request from an MCP client (like IDE) to the proxy.
75
75
  * Uses JSON-RPC 2.0 format.
76
76
  */
77
77
  export type MCPRequest = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stdiobus/workers-registry",
3
- "version": "1.5.2",
3
+ "version": "1.5.4",
4
4
  "description": "Worker implementations for stdio Bus kernel - ACP, MCP, and protocol bridges",
5
5
  "type": "module",
6
6
  "main": "./out/dist/workers-registry/acp-registry/index.js",
@@ -73,7 +73,9 @@
73
73
  "test:unit": "node --experimental-vm-modules node_modules/jest/bin/jest.js tests/unit",
74
74
  "test:property": "node --experimental-vm-modules node_modules/jest/bin/jest.js tests/property",
75
75
  "test:integration": "node --experimental-vm-modules node_modules/jest/bin/jest.js tests/integration",
76
- "sync-acp": "node scripts/sync-acp.js"
76
+ "sync-acp": "node scripts/sync-acp.js",
77
+ "badges": "node scripts/readme/generate.js",
78
+ "badges:check": "node scripts/readme/generate.js --check"
77
79
  },
78
80
  "keywords": [
79
81
  "acp",