@openvole/paw-sdk 0.3.0 → 0.3.2

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/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // src/transport.ts
2
2
  function createIpcTransport() {
3
3
  const handlers = /* @__PURE__ */ new Map();
4
+ process.setMaxListeners(Math.max(process.getMaxListeners(), 25));
4
5
  process.on("message", async (msg) => {
5
6
  if (!msg.method) return;
6
7
  const handler = handlers.get(msg.method);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transport.ts","../src/define.ts","../src/index.ts"],"sourcesContent":["/** JSON-RPC 2.0 message */\ninterface IpcMessage {\n\tjsonrpc: '2.0'\n\tid?: string\n\tmethod?: string\n\tparams?: unknown\n\tresult?: unknown\n\terror?: { code: number; message: string; data?: unknown }\n}\n\ntype RequestHandler = (params: unknown) => Promise<unknown>\n\n/** Create an IPC transport for Node.js Paw subprocesses */\nexport function createIpcTransport() {\n\tconst handlers = new Map<string, RequestHandler>()\n\n\t// Listen for incoming messages from the core\n\tprocess.on('message', async (msg: IpcMessage) => {\n\t\tif (!msg.method) return\n\n\t\tconst handler = handlers.get(msg.method)\n\t\tif (handler) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(msg.params)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tprocess.send!({ jsonrpc: '2.0', id: msg.id, result })\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tprocess.send!({\n\t\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t\tid: msg.id,\n\t\t\t\t\t\terror: { code: -32603, message },\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\treturn {\n\t\t/** Register a handler for a method called by the core */\n\t\tonRequest(method: string, handler: RequestHandler): void {\n\t\t\thandlers.set(method, handler)\n\t\t},\n\n\t\t/** Send a notification to the core (no response expected) */\n\t\tsend(method: string, params?: unknown): void {\n\t\t\tprocess.send!({ jsonrpc: '2.0', method, params })\n\t\t},\n\n\t\t/** Send a request to the core and wait for a response */\n\t\tasync request(method: string, params?: unknown): Promise<unknown> {\n\t\t\tconst id = crypto.randomUUID()\n\t\t\tconst message: IpcMessage = { jsonrpc: '2.0', id, method, params }\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\treject(new Error(`Request \"${method}\" timed out`))\n\t\t\t\t}, 30_000)\n\n\t\t\t\tconst listener = (msg: IpcMessage) => {\n\t\t\t\t\tif (msg.id === id) {\n\t\t\t\t\t\tclearTimeout(timeout)\n\t\t\t\t\t\tprocess.off('message', listener)\n\t\t\t\t\t\tif (msg.error) {\n\t\t\t\t\t\t\treject(new Error(msg.error.message))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(msg.result)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprocess.on('message', listener)\n\t\t\t\tprocess.send!(message)\n\t\t\t})\n\t\t},\n\n\t\t/** Subscribe to bus events from the core */\n\t\tsubscribe(events: string[]): void {\n\t\t\tprocess.send!({ jsonrpc: '2.0', method: 'subscribe', params: { events } })\n\t\t},\n\n\t\t/** Query core state (tools, paws, skills, tasks) */\n\t\tasync query(type: 'tools' | 'paws' | 'skills' | 'tasks'): Promise<unknown> {\n\t\t\tconst id = crypto.randomUUID()\n\t\t\tconst message: IpcMessage = { jsonrpc: '2.0', id, method: 'query', params: { type } }\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\treject(new Error(`Query \"${type}\" timed out`))\n\t\t\t\t}, 10_000)\n\n\t\t\t\tconst listener = (msg: IpcMessage) => {\n\t\t\t\t\tif (msg.id === id) {\n\t\t\t\t\t\tclearTimeout(timeout)\n\t\t\t\t\t\tprocess.off('message', listener)\n\t\t\t\t\t\tif (msg.error) {\n\t\t\t\t\t\t\treject(new Error(msg.error.message))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(msg.result)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprocess.on('message', listener)\n\t\t\t\tprocess.send!(message)\n\t\t\t})\n\t\t},\n\n\t\t/** Register a handler for forwarded bus events */\n\t\tonBusEvent(handler: (event: string, data: unknown) => void): void {\n\t\t\thandlers.set('bus_event', async (params) => {\n\t\t\t\tconst { event, data } = params as { event: string; data: unknown }\n\t\t\t\thandler(event, data)\n\t\t\t\treturn { ok: true }\n\t\t\t})\n\t\t},\n\n\t\t/** Create a task in the core's task queue (for channel Paws that receive inbound messages) */\n\t\tasync createTask(input: string, metadata?: Record<string, unknown> & { sessionId?: string }): Promise<{ taskId: string }> {\n\t\t\tconst { sessionId, ...rest } = metadata ?? {}\n\t\t\tconst id = crypto.randomUUID()\n\t\t\tconst message: IpcMessage = {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tid,\n\t\t\t\tmethod: 'create_task',\n\t\t\t\tparams: { input, source: 'paw', sessionId, metadata: rest },\n\t\t\t}\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\treject(new Error('createTask timed out'))\n\t\t\t\t}, 10_000)\n\n\t\t\t\tconst listener = (msg: IpcMessage) => {\n\t\t\t\t\tif (msg.id === id) {\n\t\t\t\t\t\tclearTimeout(timeout)\n\t\t\t\t\t\tprocess.off('message', listener)\n\t\t\t\t\t\tif (msg.error) {\n\t\t\t\t\t\t\treject(new Error(msg.error.message))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(msg.result as { taskId: string })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprocess.on('message', listener)\n\t\t\t\tprocess.send!(message)\n\t\t\t})\n\t\t},\n\t}\n}\n\n/** Create a stdio transport for non-Node Paw processes (LSP-style framing) */\nexport function createStdioTransport() {\n\tconst handlers = new Map<string, RequestHandler>()\n\tlet buffer = ''\n\n\tprocess.stdin.setEncoding('utf-8')\n\tprocess.stdin.on('data', (chunk: string) => {\n\t\tbuffer += chunk\n\t\tprocessBuffer()\n\t})\n\n\tasync function processBuffer(): Promise<void> {\n\t\twhile (buffer.length > 0) {\n\t\t\tconst headerEnd = buffer.indexOf('\\r\\n\\r\\n')\n\t\t\tif (headerEnd === -1) break\n\n\t\t\tconst header = buffer.substring(0, headerEnd)\n\t\t\tconst match = header.match(/Content-Length:\\s*(\\d+)/i)\n\t\t\tif (!match) {\n\t\t\t\tbuffer = buffer.substring(headerEnd + 4)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst contentLength = Number.parseInt(match[1], 10)\n\t\t\tconst bodyStart = headerEnd + 4\n\t\t\tif (buffer.length < bodyStart + contentLength) break\n\n\t\t\tconst body = buffer.substring(bodyStart, bodyStart + contentLength)\n\t\t\tbuffer = buffer.substring(bodyStart + contentLength)\n\n\t\t\ttry {\n\t\t\t\tconst msg = JSON.parse(body) as IpcMessage\n\t\t\t\tawait handleMessage(msg)\n\t\t\t} catch {\n\t\t\t\t// Skip malformed messages\n\t\t\t}\n\t\t}\n\t}\n\n\tasync function handleMessage(msg: IpcMessage): Promise<void> {\n\t\tif (!msg.method) return\n\n\t\tconst handler = handlers.get(msg.method)\n\t\tif (handler) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(msg.params)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tsend({ jsonrpc: '2.0', id: msg.id, result })\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tsend({\n\t\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t\tid: msg.id,\n\t\t\t\t\t\terror: { code: -32603, message },\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction send(message: IpcMessage): void {\n\t\tconst json = JSON.stringify(message)\n\t\tconst header = `Content-Length: ${Buffer.byteLength(json)}\\r\\n\\r\\n`\n\t\tprocess.stdout.write(header + json)\n\t}\n\n\treturn {\n\t\tonRequest(method: string, handler: RequestHandler): void {\n\t\t\thandlers.set(method, handler)\n\t\t},\n\n\t\tsend(method: string, params?: unknown): void {\n\t\t\tsend({ jsonrpc: '2.0', method, params })\n\t\t},\n\t}\n}\n","import type { PawDefinition, AgentContext, ActionResult } from './types.js'\nimport { createIpcTransport } from './transport.js'\n\n/**\n * definePaw — the primary export for Paw developers.\n *\n * For in-process Paws, this simply returns the definition (loaded directly by core).\n * For subprocess Paws, this sets up the IPC transport and registers handlers.\n */\nexport function definePaw(definition: PawDefinition): PawDefinition {\n\t// If this module is being imported by the core (in-process), just return the definition\n\tif (definition.inProcess || !isSubprocess()) {\n\t\treturn definition\n\t}\n\n\t// Running as a subprocess — wire up IPC transport\n\tsetupSubprocessPaw(definition)\n\treturn definition\n}\n\n/** Check if we're running as a subprocess (have IPC channel) */\nfunction isSubprocess(): boolean {\n\treturn typeof process.send === 'function'\n}\n\n/** Set up IPC handlers for a subprocess Paw */\nfunction setupSubprocessPaw(definition: PawDefinition): void {\n\tconst transport = createIpcTransport()\n\n\t// Register with the core\n\ttransport.send('register', {\n\t\tname: definition.name,\n\t\tversion: definition.version,\n\t\tbrain: definition.brain ?? false,\n\t\ttools: (definition.tools ?? []).map((t) => ({\n\t\t\tname: t.name,\n\t\t\tdescription: t.description,\n\t\t})),\n\t\thooks: {\n\t\t\tbootstrap: !!definition.hooks?.onBootstrap,\n\t\t\tperceive: !!definition.hooks?.onPerceive,\n\t\t\tobserve: !!definition.hooks?.onObserve,\n\t\t\tcompact: !!definition.hooks?.onCompact,\n\t\t\tschedule: (definition.hooks?.onSchedule ?? []).map((s) => s.cron),\n\t\t},\n\t})\n\n\t// Handle bootstrap — called once at task start\n\tif (definition.hooks?.onBootstrap) {\n\t\ttransport.onRequest('bootstrap', async (params) => {\n\t\t\treturn definition.hooks!.onBootstrap!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle perceive\n\tif (definition.hooks?.onPerceive) {\n\t\ttransport.onRequest('perceive', async (params) => {\n\t\t\treturn definition.hooks!.onPerceive!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle think (Brain Paw)\n\tif (definition.think) {\n\t\ttransport.onRequest('think', async (params) => {\n\t\t\treturn definition.think!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle tool execution\n\tif (definition.tools && definition.tools.length > 0) {\n\t\tconst toolMap = new Map(definition.tools.map((t) => [t.name, t]))\n\n\t\ttransport.onRequest('execute_tool', async (params) => {\n\t\t\tconst { toolName, params: toolParams } = params as {\n\t\t\t\ttoolName: string\n\t\t\t\tparams: unknown\n\t\t\t}\n\n\t\t\tconst tool = toolMap.get(toolName)\n\t\t\tif (!tool) {\n\t\t\t\tthrow new Error(`Tool \"${toolName}\" not found in this Paw`)\n\t\t\t}\n\n\t\t\t// Validate parameters\n\t\t\tconst validated = tool.parameters.parse(toolParams)\n\t\t\treturn tool.execute(validated)\n\t\t})\n\t}\n\n\t// Handle observe\n\tif (definition.hooks?.onObserve) {\n\t\ttransport.onRequest('observe', async (params) => {\n\t\t\tawait definition.hooks!.onObserve!(params as ActionResult)\n\t\t\treturn { ok: true }\n\t\t})\n\t}\n\n\t// Handle compact — called when context exceeds threshold\n\tif (definition.hooks?.onCompact) {\n\t\ttransport.onRequest('compact', async (params) => {\n\t\t\treturn definition.hooks!.onCompact!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle shutdown\n\ttransport.onRequest('shutdown', async () => {\n\t\tif (definition.onUnload) {\n\t\t\tawait definition.onUnload()\n\t\t}\n\t\tprocess.exit(0)\n\t})\n\n\t// Run onLoad\n\tif (definition.onLoad) {\n\t\tdefinition.onLoad({}).catch((err) => {\n\t\t\tconsole.error(`[${definition.name}] onLoad failed:`, err)\n\t\t\tprocess.exit(1)\n\t\t})\n\t}\n}\n","export { definePaw } from './define.js'\nexport { createIpcTransport, createStdioTransport } from './transport.js'\nexport { z } from 'zod'\nexport type {\n\tPawDefinition,\n\tToolDefinition,\n\tAgentContext,\n\tAgentMessage,\n\tAgentPlan,\n\tPlannedAction,\n\tActionResult,\n\tActiveSkill,\n\tToolSummary,\n\tBootstrapHook,\n\tPerceiveHook,\n\tObserveHook,\n\tCompactHook,\n\tScheduleHook,\n\tVoleIO,\n} from './types.js'\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/transport.ts","../src/define.ts","../src/index.ts"],"sourcesContent":["/** JSON-RPC 2.0 message */\ninterface IpcMessage {\n\tjsonrpc: '2.0'\n\tid?: string\n\tmethod?: string\n\tparams?: unknown\n\tresult?: unknown\n\terror?: { code: number; message: string; data?: unknown }\n}\n\ntype RequestHandler = (params: unknown) => Promise<unknown>\n\n/** Create an IPC transport for Node.js Paw subprocesses */\nexport function createIpcTransport() {\n\tconst handlers = new Map<string, RequestHandler>()\n\n\t// Increase max listeners — concurrent query/request calls each add a temporary listener\n\tprocess.setMaxListeners(Math.max(process.getMaxListeners(), 25))\n\n\t// Listen for incoming messages from the core\n\tprocess.on('message', async (msg: IpcMessage) => {\n\t\tif (!msg.method) return\n\n\t\tconst handler = handlers.get(msg.method)\n\t\tif (handler) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(msg.params)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tprocess.send!({ jsonrpc: '2.0', id: msg.id, result })\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tprocess.send!({\n\t\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t\tid: msg.id,\n\t\t\t\t\t\terror: { code: -32603, message },\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\treturn {\n\t\t/** Register a handler for a method called by the core */\n\t\tonRequest(method: string, handler: RequestHandler): void {\n\t\t\thandlers.set(method, handler)\n\t\t},\n\n\t\t/** Send a notification to the core (no response expected) */\n\t\tsend(method: string, params?: unknown): void {\n\t\t\tprocess.send!({ jsonrpc: '2.0', method, params })\n\t\t},\n\n\t\t/** Send a request to the core and wait for a response */\n\t\tasync request(method: string, params?: unknown): Promise<unknown> {\n\t\t\tconst id = crypto.randomUUID()\n\t\t\tconst message: IpcMessage = { jsonrpc: '2.0', id, method, params }\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\treject(new Error(`Request \"${method}\" timed out`))\n\t\t\t\t}, 30_000)\n\n\t\t\t\tconst listener = (msg: IpcMessage) => {\n\t\t\t\t\tif (msg.id === id) {\n\t\t\t\t\t\tclearTimeout(timeout)\n\t\t\t\t\t\tprocess.off('message', listener)\n\t\t\t\t\t\tif (msg.error) {\n\t\t\t\t\t\t\treject(new Error(msg.error.message))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(msg.result)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprocess.on('message', listener)\n\t\t\t\tprocess.send!(message)\n\t\t\t})\n\t\t},\n\n\t\t/** Subscribe to bus events from the core */\n\t\tsubscribe(events: string[]): void {\n\t\t\tprocess.send!({ jsonrpc: '2.0', method: 'subscribe', params: { events } })\n\t\t},\n\n\t\t/** Query core state (tools, paws, skills, tasks) */\n\t\tasync query(type: 'tools' | 'paws' | 'skills' | 'tasks'): Promise<unknown> {\n\t\t\tconst id = crypto.randomUUID()\n\t\t\tconst message: IpcMessage = { jsonrpc: '2.0', id, method: 'query', params: { type } }\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\treject(new Error(`Query \"${type}\" timed out`))\n\t\t\t\t}, 10_000)\n\n\t\t\t\tconst listener = (msg: IpcMessage) => {\n\t\t\t\t\tif (msg.id === id) {\n\t\t\t\t\t\tclearTimeout(timeout)\n\t\t\t\t\t\tprocess.off('message', listener)\n\t\t\t\t\t\tif (msg.error) {\n\t\t\t\t\t\t\treject(new Error(msg.error.message))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(msg.result)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprocess.on('message', listener)\n\t\t\t\tprocess.send!(message)\n\t\t\t})\n\t\t},\n\n\t\t/** Register a handler for forwarded bus events */\n\t\tonBusEvent(handler: (event: string, data: unknown) => void): void {\n\t\t\thandlers.set('bus_event', async (params) => {\n\t\t\t\tconst { event, data } = params as { event: string; data: unknown }\n\t\t\t\thandler(event, data)\n\t\t\t\treturn { ok: true }\n\t\t\t})\n\t\t},\n\n\t\t/** Create a task in the core's task queue (for channel Paws that receive inbound messages) */\n\t\tasync createTask(input: string, metadata?: Record<string, unknown> & { sessionId?: string }): Promise<{ taskId: string }> {\n\t\t\tconst { sessionId, ...rest } = metadata ?? {}\n\t\t\tconst id = crypto.randomUUID()\n\t\t\tconst message: IpcMessage = {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tid,\n\t\t\t\tmethod: 'create_task',\n\t\t\t\tparams: { input, source: 'paw', sessionId, metadata: rest },\n\t\t\t}\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\treject(new Error('createTask timed out'))\n\t\t\t\t}, 10_000)\n\n\t\t\t\tconst listener = (msg: IpcMessage) => {\n\t\t\t\t\tif (msg.id === id) {\n\t\t\t\t\t\tclearTimeout(timeout)\n\t\t\t\t\t\tprocess.off('message', listener)\n\t\t\t\t\t\tif (msg.error) {\n\t\t\t\t\t\t\treject(new Error(msg.error.message))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(msg.result as { taskId: string })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprocess.on('message', listener)\n\t\t\t\tprocess.send!(message)\n\t\t\t})\n\t\t},\n\t}\n}\n\n/** Create a stdio transport for non-Node Paw processes (LSP-style framing) */\nexport function createStdioTransport() {\n\tconst handlers = new Map<string, RequestHandler>()\n\tlet buffer = ''\n\n\tprocess.stdin.setEncoding('utf-8')\n\tprocess.stdin.on('data', (chunk: string) => {\n\t\tbuffer += chunk\n\t\tprocessBuffer()\n\t})\n\n\tasync function processBuffer(): Promise<void> {\n\t\twhile (buffer.length > 0) {\n\t\t\tconst headerEnd = buffer.indexOf('\\r\\n\\r\\n')\n\t\t\tif (headerEnd === -1) break\n\n\t\t\tconst header = buffer.substring(0, headerEnd)\n\t\t\tconst match = header.match(/Content-Length:\\s*(\\d+)/i)\n\t\t\tif (!match) {\n\t\t\t\tbuffer = buffer.substring(headerEnd + 4)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst contentLength = Number.parseInt(match[1], 10)\n\t\t\tconst bodyStart = headerEnd + 4\n\t\t\tif (buffer.length < bodyStart + contentLength) break\n\n\t\t\tconst body = buffer.substring(bodyStart, bodyStart + contentLength)\n\t\t\tbuffer = buffer.substring(bodyStart + contentLength)\n\n\t\t\ttry {\n\t\t\t\tconst msg = JSON.parse(body) as IpcMessage\n\t\t\t\tawait handleMessage(msg)\n\t\t\t} catch {\n\t\t\t\t// Skip malformed messages\n\t\t\t}\n\t\t}\n\t}\n\n\tasync function handleMessage(msg: IpcMessage): Promise<void> {\n\t\tif (!msg.method) return\n\n\t\tconst handler = handlers.get(msg.method)\n\t\tif (handler) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(msg.params)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tsend({ jsonrpc: '2.0', id: msg.id, result })\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\t\tif (msg.id) {\n\t\t\t\t\tsend({\n\t\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t\tid: msg.id,\n\t\t\t\t\t\terror: { code: -32603, message },\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction send(message: IpcMessage): void {\n\t\tconst json = JSON.stringify(message)\n\t\tconst header = `Content-Length: ${Buffer.byteLength(json)}\\r\\n\\r\\n`\n\t\tprocess.stdout.write(header + json)\n\t}\n\n\treturn {\n\t\tonRequest(method: string, handler: RequestHandler): void {\n\t\t\thandlers.set(method, handler)\n\t\t},\n\n\t\tsend(method: string, params?: unknown): void {\n\t\t\tsend({ jsonrpc: '2.0', method, params })\n\t\t},\n\t}\n}\n","import type { PawDefinition, AgentContext, ActionResult } from './types.js'\nimport { createIpcTransport } from './transport.js'\n\n/**\n * definePaw — the primary export for Paw developers.\n *\n * For in-process Paws, this simply returns the definition (loaded directly by core).\n * For subprocess Paws, this sets up the IPC transport and registers handlers.\n */\nexport function definePaw(definition: PawDefinition): PawDefinition {\n\t// If this module is being imported by the core (in-process), just return the definition\n\tif (definition.inProcess || !isSubprocess()) {\n\t\treturn definition\n\t}\n\n\t// Running as a subprocess — wire up IPC transport\n\tsetupSubprocessPaw(definition)\n\treturn definition\n}\n\n/** Check if we're running as a subprocess (have IPC channel) */\nfunction isSubprocess(): boolean {\n\treturn typeof process.send === 'function'\n}\n\n/** Set up IPC handlers for a subprocess Paw */\nfunction setupSubprocessPaw(definition: PawDefinition): void {\n\tconst transport = createIpcTransport()\n\n\t// Register with the core\n\ttransport.send('register', {\n\t\tname: definition.name,\n\t\tversion: definition.version,\n\t\tbrain: definition.brain ?? false,\n\t\ttools: (definition.tools ?? []).map((t) => ({\n\t\t\tname: t.name,\n\t\t\tdescription: t.description,\n\t\t})),\n\t\thooks: {\n\t\t\tbootstrap: !!definition.hooks?.onBootstrap,\n\t\t\tperceive: !!definition.hooks?.onPerceive,\n\t\t\tobserve: !!definition.hooks?.onObserve,\n\t\t\tcompact: !!definition.hooks?.onCompact,\n\t\t\tschedule: (definition.hooks?.onSchedule ?? []).map((s) => s.cron),\n\t\t},\n\t})\n\n\t// Handle bootstrap — called once at task start\n\tif (definition.hooks?.onBootstrap) {\n\t\ttransport.onRequest('bootstrap', async (params) => {\n\t\t\treturn definition.hooks!.onBootstrap!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle perceive\n\tif (definition.hooks?.onPerceive) {\n\t\ttransport.onRequest('perceive', async (params) => {\n\t\t\treturn definition.hooks!.onPerceive!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle think (Brain Paw)\n\tif (definition.think) {\n\t\ttransport.onRequest('think', async (params) => {\n\t\t\treturn definition.think!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle tool execution\n\tif (definition.tools && definition.tools.length > 0) {\n\t\tconst toolMap = new Map(definition.tools.map((t) => [t.name, t]))\n\n\t\ttransport.onRequest('execute_tool', async (params) => {\n\t\t\tconst { toolName, params: toolParams } = params as {\n\t\t\t\ttoolName: string\n\t\t\t\tparams: unknown\n\t\t\t}\n\n\t\t\tconst tool = toolMap.get(toolName)\n\t\t\tif (!tool) {\n\t\t\t\tthrow new Error(`Tool \"${toolName}\" not found in this Paw`)\n\t\t\t}\n\n\t\t\t// Validate parameters\n\t\t\tconst validated = tool.parameters.parse(toolParams)\n\t\t\treturn tool.execute(validated)\n\t\t})\n\t}\n\n\t// Handle observe\n\tif (definition.hooks?.onObserve) {\n\t\ttransport.onRequest('observe', async (params) => {\n\t\t\tawait definition.hooks!.onObserve!(params as ActionResult)\n\t\t\treturn { ok: true }\n\t\t})\n\t}\n\n\t// Handle compact — called when context exceeds threshold\n\tif (definition.hooks?.onCompact) {\n\t\ttransport.onRequest('compact', async (params) => {\n\t\t\treturn definition.hooks!.onCompact!(params as AgentContext)\n\t\t})\n\t}\n\n\t// Handle shutdown\n\ttransport.onRequest('shutdown', async () => {\n\t\tif (definition.onUnload) {\n\t\t\tawait definition.onUnload()\n\t\t}\n\t\tprocess.exit(0)\n\t})\n\n\t// Run onLoad\n\tif (definition.onLoad) {\n\t\tdefinition.onLoad({}).catch((err) => {\n\t\t\tconsole.error(`[${definition.name}] onLoad failed:`, err)\n\t\t\tprocess.exit(1)\n\t\t})\n\t}\n}\n","export { definePaw } from './define.js'\nexport { createIpcTransport, createStdioTransport } from './transport.js'\nexport { z } from 'zod'\nexport type {\n\tPawDefinition,\n\tToolDefinition,\n\tAgentContext,\n\tAgentMessage,\n\tAgentPlan,\n\tPlannedAction,\n\tActionResult,\n\tActiveSkill,\n\tToolSummary,\n\tBootstrapHook,\n\tPerceiveHook,\n\tObserveHook,\n\tCompactHook,\n\tScheduleHook,\n\tVoleIO,\n} from './types.js'\n"],"mappings":";AAaO,SAAS,qBAAqB;AACpC,QAAM,WAAW,oBAAI,IAA4B;AAGjD,UAAQ,gBAAgB,KAAK,IAAI,QAAQ,gBAAgB,GAAG,EAAE,CAAC;AAG/D,UAAQ,GAAG,WAAW,OAAO,QAAoB;AAChD,QAAI,CAAC,IAAI,OAAQ;AAEjB,UAAM,UAAU,SAAS,IAAI,IAAI,MAAM;AACvC,QAAI,SAAS;AACZ,UAAI;AACH,cAAM,SAAS,MAAM,QAAQ,IAAI,MAAM;AACvC,YAAI,IAAI,IAAI;AACX,kBAAQ,KAAM,EAAE,SAAS,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC;AAAA,QACrD;AAAA,MACD,SAAS,KAAK;AACb,cAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,YAAI,IAAI,IAAI;AACX,kBAAQ,KAAM;AAAA,YACb,SAAS;AAAA,YACT,IAAI,IAAI;AAAA,YACR,OAAO,EAAE,MAAM,QAAQ,QAAQ;AAAA,UAChC,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AAED,SAAO;AAAA;AAAA,IAEN,UAAU,QAAgB,SAA+B;AACxD,eAAS,IAAI,QAAQ,OAAO;AAAA,IAC7B;AAAA;AAAA,IAGA,KAAK,QAAgB,QAAwB;AAC5C,cAAQ,KAAM,EAAE,SAAS,OAAO,QAAQ,OAAO,CAAC;AAAA,IACjD;AAAA;AAAA,IAGA,MAAM,QAAQ,QAAgB,QAAoC;AACjE,YAAM,KAAK,OAAO,WAAW;AAC7B,YAAM,UAAsB,EAAE,SAAS,OAAO,IAAI,QAAQ,OAAO;AAEjE,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvC,cAAM,UAAU,WAAW,MAAM;AAChC,iBAAO,IAAI,MAAM,YAAY,MAAM,aAAa,CAAC;AAAA,QAClD,GAAG,GAAM;AAET,cAAM,WAAW,CAAC,QAAoB;AACrC,cAAI,IAAI,OAAO,IAAI;AAClB,yBAAa,OAAO;AACpB,oBAAQ,IAAI,WAAW,QAAQ;AAC/B,gBAAI,IAAI,OAAO;AACd,qBAAO,IAAI,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,YACpC,OAAO;AACN,sBAAQ,IAAI,MAAM;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAEA,gBAAQ,GAAG,WAAW,QAAQ;AAC9B,gBAAQ,KAAM,OAAO;AAAA,MACtB,CAAC;AAAA,IACF;AAAA;AAAA,IAGA,UAAU,QAAwB;AACjC,cAAQ,KAAM,EAAE,SAAS,OAAO,QAAQ,aAAa,QAAQ,EAAE,OAAO,EAAE,CAAC;AAAA,IAC1E;AAAA;AAAA,IAGA,MAAM,MAAM,MAA+D;AAC1E,YAAM,KAAK,OAAO,WAAW;AAC7B,YAAM,UAAsB,EAAE,SAAS,OAAO,IAAI,QAAQ,SAAS,QAAQ,EAAE,KAAK,EAAE;AAEpF,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvC,cAAM,UAAU,WAAW,MAAM;AAChC,iBAAO,IAAI,MAAM,UAAU,IAAI,aAAa,CAAC;AAAA,QAC9C,GAAG,GAAM;AAET,cAAM,WAAW,CAAC,QAAoB;AACrC,cAAI,IAAI,OAAO,IAAI;AAClB,yBAAa,OAAO;AACpB,oBAAQ,IAAI,WAAW,QAAQ;AAC/B,gBAAI,IAAI,OAAO;AACd,qBAAO,IAAI,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,YACpC,OAAO;AACN,sBAAQ,IAAI,MAAM;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAEA,gBAAQ,GAAG,WAAW,QAAQ;AAC9B,gBAAQ,KAAM,OAAO;AAAA,MACtB,CAAC;AAAA,IACF;AAAA;AAAA,IAGA,WAAW,SAAuD;AACjE,eAAS,IAAI,aAAa,OAAO,WAAW;AAC3C,cAAM,EAAE,OAAO,KAAK,IAAI;AACxB,gBAAQ,OAAO,IAAI;AACnB,eAAO,EAAE,IAAI,KAAK;AAAA,MACnB,CAAC;AAAA,IACF;AAAA;AAAA,IAGA,MAAM,WAAW,OAAe,UAA0F;AACzH,YAAM,EAAE,WAAW,GAAG,KAAK,IAAI,YAAY,CAAC;AAC5C,YAAM,KAAK,OAAO,WAAW;AAC7B,YAAM,UAAsB;AAAA,QAC3B,SAAS;AAAA,QACT;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ,EAAE,OAAO,QAAQ,OAAO,WAAW,UAAU,KAAK;AAAA,MAC3D;AAEA,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvC,cAAM,UAAU,WAAW,MAAM;AAChC,iBAAO,IAAI,MAAM,sBAAsB,CAAC;AAAA,QACzC,GAAG,GAAM;AAET,cAAM,WAAW,CAAC,QAAoB;AACrC,cAAI,IAAI,OAAO,IAAI;AAClB,yBAAa,OAAO;AACpB,oBAAQ,IAAI,WAAW,QAAQ;AAC/B,gBAAI,IAAI,OAAO;AACd,qBAAO,IAAI,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,YACpC,OAAO;AACN,sBAAQ,IAAI,MAA4B;AAAA,YACzC;AAAA,UACD;AAAA,QACD;AAEA,gBAAQ,GAAG,WAAW,QAAQ;AAC9B,gBAAQ,KAAM,OAAO;AAAA,MACtB,CAAC;AAAA,IACF;AAAA,EACD;AACD;AAGO,SAAS,uBAAuB;AACtC,QAAM,WAAW,oBAAI,IAA4B;AACjD,MAAI,SAAS;AAEb,UAAQ,MAAM,YAAY,OAAO;AACjC,UAAQ,MAAM,GAAG,QAAQ,CAAC,UAAkB;AAC3C,cAAU;AACV,kBAAc;AAAA,EACf,CAAC;AAED,iBAAe,gBAA+B;AAC7C,WAAO,OAAO,SAAS,GAAG;AACzB,YAAM,YAAY,OAAO,QAAQ,UAAU;AAC3C,UAAI,cAAc,GAAI;AAEtB,YAAM,SAAS,OAAO,UAAU,GAAG,SAAS;AAC5C,YAAM,QAAQ,OAAO,MAAM,0BAA0B;AACrD,UAAI,CAAC,OAAO;AACX,iBAAS,OAAO,UAAU,YAAY,CAAC;AACvC;AAAA,MACD;AAEA,YAAM,gBAAgB,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClD,YAAM,YAAY,YAAY;AAC9B,UAAI,OAAO,SAAS,YAAY,cAAe;AAE/C,YAAM,OAAO,OAAO,UAAU,WAAW,YAAY,aAAa;AAClE,eAAS,OAAO,UAAU,YAAY,aAAa;AAEnD,UAAI;AACH,cAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,cAAM,cAAc,GAAG;AAAA,MACxB,QAAQ;AAAA,MAER;AAAA,IACD;AAAA,EACD;AAEA,iBAAe,cAAc,KAAgC;AAC5D,QAAI,CAAC,IAAI,OAAQ;AAEjB,UAAM,UAAU,SAAS,IAAI,IAAI,MAAM;AACvC,QAAI,SAAS;AACZ,UAAI;AACH,cAAM,SAAS,MAAM,QAAQ,IAAI,MAAM;AACvC,YAAI,IAAI,IAAI;AACX,eAAK,EAAE,SAAS,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC;AAAA,QAC5C;AAAA,MACD,SAAS,KAAK;AACb,cAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,YAAI,IAAI,IAAI;AACX,eAAK;AAAA,YACJ,SAAS;AAAA,YACT,IAAI,IAAI;AAAA,YACR,OAAO,EAAE,MAAM,QAAQ,QAAQ;AAAA,UAChC,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,WAAS,KAAK,SAA2B;AACxC,UAAM,OAAO,KAAK,UAAU,OAAO;AACnC,UAAM,SAAS,mBAAmB,OAAO,WAAW,IAAI,CAAC;AAAA;AAAA;AACzD,YAAQ,OAAO,MAAM,SAAS,IAAI;AAAA,EACnC;AAEA,SAAO;AAAA,IACN,UAAU,QAAgB,SAA+B;AACxD,eAAS,IAAI,QAAQ,OAAO;AAAA,IAC7B;AAAA,IAEA,KAAK,QAAgB,QAAwB;AAC5C,WAAK,EAAE,SAAS,OAAO,QAAQ,OAAO,CAAC;AAAA,IACxC;AAAA,EACD;AACD;;;ACjOO,SAAS,UAAU,YAA0C;AAEnE,MAAI,WAAW,aAAa,CAAC,aAAa,GAAG;AAC5C,WAAO;AAAA,EACR;AAGA,qBAAmB,UAAU;AAC7B,SAAO;AACR;AAGA,SAAS,eAAwB;AAChC,SAAO,OAAO,QAAQ,SAAS;AAChC;AAGA,SAAS,mBAAmB,YAAiC;AAC5D,QAAM,YAAY,mBAAmB;AAGrC,YAAU,KAAK,YAAY;AAAA,IAC1B,MAAM,WAAW;AAAA,IACjB,SAAS,WAAW;AAAA,IACpB,OAAO,WAAW,SAAS;AAAA,IAC3B,QAAQ,WAAW,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO;AAAA,MAC3C,MAAM,EAAE;AAAA,MACR,aAAa,EAAE;AAAA,IAChB,EAAE;AAAA,IACF,OAAO;AAAA,MACN,WAAW,CAAC,CAAC,WAAW,OAAO;AAAA,MAC/B,UAAU,CAAC,CAAC,WAAW,OAAO;AAAA,MAC9B,SAAS,CAAC,CAAC,WAAW,OAAO;AAAA,MAC7B,SAAS,CAAC,CAAC,WAAW,OAAO;AAAA,MAC7B,WAAW,WAAW,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IACjE;AAAA,EACD,CAAC;AAGD,MAAI,WAAW,OAAO,aAAa;AAClC,cAAU,UAAU,aAAa,OAAO,WAAW;AAClD,aAAO,WAAW,MAAO,YAAa,MAAsB;AAAA,IAC7D,CAAC;AAAA,EACF;AAGA,MAAI,WAAW,OAAO,YAAY;AACjC,cAAU,UAAU,YAAY,OAAO,WAAW;AACjD,aAAO,WAAW,MAAO,WAAY,MAAsB;AAAA,IAC5D,CAAC;AAAA,EACF;AAGA,MAAI,WAAW,OAAO;AACrB,cAAU,UAAU,SAAS,OAAO,WAAW;AAC9C,aAAO,WAAW,MAAO,MAAsB;AAAA,IAChD,CAAC;AAAA,EACF;AAGA,MAAI,WAAW,SAAS,WAAW,MAAM,SAAS,GAAG;AACpD,UAAM,UAAU,IAAI,IAAI,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhE,cAAU,UAAU,gBAAgB,OAAO,WAAW;AACrD,YAAM,EAAE,UAAU,QAAQ,WAAW,IAAI;AAKzC,YAAM,OAAO,QAAQ,IAAI,QAAQ;AACjC,UAAI,CAAC,MAAM;AACV,cAAM,IAAI,MAAM,SAAS,QAAQ,yBAAyB;AAAA,MAC3D;AAGA,YAAM,YAAY,KAAK,WAAW,MAAM,UAAU;AAClD,aAAO,KAAK,QAAQ,SAAS;AAAA,IAC9B,CAAC;AAAA,EACF;AAGA,MAAI,WAAW,OAAO,WAAW;AAChC,cAAU,UAAU,WAAW,OAAO,WAAW;AAChD,YAAM,WAAW,MAAO,UAAW,MAAsB;AACzD,aAAO,EAAE,IAAI,KAAK;AAAA,IACnB,CAAC;AAAA,EACF;AAGA,MAAI,WAAW,OAAO,WAAW;AAChC,cAAU,UAAU,WAAW,OAAO,WAAW;AAChD,aAAO,WAAW,MAAO,UAAW,MAAsB;AAAA,IAC3D,CAAC;AAAA,EACF;AAGA,YAAU,UAAU,YAAY,YAAY;AAC3C,QAAI,WAAW,UAAU;AACxB,YAAM,WAAW,SAAS;AAAA,IAC3B;AACA,YAAQ,KAAK,CAAC;AAAA,EACf,CAAC;AAGD,MAAI,WAAW,QAAQ;AACtB,eAAW,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ;AACpC,cAAQ,MAAM,IAAI,WAAW,IAAI,oBAAoB,GAAG;AACxD,cAAQ,KAAK,CAAC;AAAA,IACf,CAAC;AAAA,EACF;AACD;;;ACrHA,SAAS,SAAS;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openvole/paw-sdk",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "SDK for building OpenVole Paws — tool providers for the agent loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",