@openvole/paw-sdk 1.0.0 → 1.0.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/dist/index.d.ts CHANGED
@@ -115,7 +115,7 @@ interface PawDefinition {
115
115
  declare function definePaw(definition: PawDefinition): PawDefinition;
116
116
 
117
117
  type RequestHandler = (params: unknown) => Promise<unknown>;
118
- /** Create an IPC transport for Node.js Paw subprocesses */
118
+ /** Create an IPC transport for Node.js Paw subprocesses (singleton — reuses the same instance) */
119
119
  declare function createIpcTransport(): {
120
120
  /** Register a handler for a method called by the core */
121
121
  onRequest(method: string, handler: RequestHandler): void;
package/dist/index.js CHANGED
@@ -1,5 +1,11 @@
1
1
  // src/transport.ts
2
+ var ipcSingleton;
2
3
  function createIpcTransport() {
4
+ if (ipcSingleton) return ipcSingleton;
5
+ ipcSingleton = _createIpcTransport();
6
+ return ipcSingleton;
7
+ }
8
+ function _createIpcTransport() {
3
9
  const handlers = /* @__PURE__ */ new Map();
4
10
  process.setMaxListeners(Math.max(process.getMaxListeners(), 25));
5
11
  process.on("message", async (msg) => {
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// 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":"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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\nlet ipcSingleton: ReturnType<typeof _createIpcTransport> | undefined\n\n/** Create an IPC transport for Node.js Paw subprocesses (singleton — reuses the same instance) */\nexport function createIpcTransport() {\n\tif (ipcSingleton) return ipcSingleton\n\tipcSingleton = _createIpcTransport()\n\treturn ipcSingleton\n}\n\nfunction _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":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openvole/paw-sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "SDK for building OpenVole Paws — tool providers for the agent loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",