{"version":3,"sources":["../../src/bridges/ggboss.ts"],"sourcesContent":["import type { JsonObject, VoiceBridgeCommand, VoiceBridgeEvent, VoiceTool } from \"../types.js\";\n\nexport interface GGBossPromptTarget {\n  enqueueUserMessage(text: string): Promise<void> | void;\n}\n\nexport interface GGBossBridge {\n  send(command: VoiceBridgeCommand, signal?: AbortSignal): Promise<VoiceBridgeEvent>;\n  toTool(): VoiceTool;\n}\n\nexport function createGGBossBridge(target: GGBossPromptTarget): GGBossBridge {\n  return {\n    async send(command, signal): Promise<VoiceBridgeEvent> {\n      throwIfAborted(signal);\n      if (command.type !== \"prompt\") {\n        return {\n          type: \"error\",\n          error: `Unsupported GGBoss bridge command: ${command.type}`,\n        };\n      }\n      await target.enqueueUserMessage(command.text);\n      return { type: \"task_dispatch\", text: command.text };\n    },\n    toTool(): VoiceTool {\n      return createSendToGGBossTool(this);\n    },\n  };\n}\n\nexport function createRelayGGBossTool(\n  send: (command: VoiceBridgeCommand) => Promise<JsonObject>,\n): VoiceTool {\n  return {\n    name: \"send_to_ggboss\",\n    description: \"Send a prompt to a GG Boss orchestrator relay.\",\n    parameters: {\n      type: \"object\",\n      properties: {\n        text: { type: \"string\", description: \"Prompt text to send to GG Boss.\" },\n      },\n      required: [\"text\"],\n    },\n    async execute(args) {\n      const text = typeof args.text === \"string\" ? args.text : \"\";\n      if (!text) {\n        return { error: \"text is required\" };\n      }\n      return send({ type: \"prompt\", text });\n    },\n  };\n}\n\nfunction createSendToGGBossTool(bridge: GGBossBridge): VoiceTool {\n  return {\n    name: \"send_to_ggboss\",\n    description: \"Send a prompt to an in-process GG Boss orchestrator.\",\n    parameters: {\n      type: \"object\",\n      properties: {\n        text: { type: \"string\", description: \"Prompt text to send to GG Boss.\" },\n      },\n      required: [\"text\"],\n    },\n    async execute(args, context) {\n      const text = typeof args.text === \"string\" ? args.text : \"\";\n      if (!text) {\n        return { error: \"text is required\" };\n      }\n      const event = await bridge.send({ type: \"prompt\", text }, context.signal);\n      return event;\n    },\n  };\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n  if (signal?.aborted) {\n    throw new Error(\"GGBoss bridge command aborted\");\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,SAAS,mBAAmB,QAA0C;AAC3E,SAAO;AAAA,IACL,MAAM,KAAK,SAAS,QAAmC;AACrD,qBAAe,MAAM;AACrB,UAAI,QAAQ,SAAS,UAAU;AAC7B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO,sCAAsC,QAAQ,IAAI;AAAA,QAC3D;AAAA,MACF;AACA,YAAM,OAAO,mBAAmB,QAAQ,IAAI;AAC5C,aAAO,EAAE,MAAM,iBAAiB,MAAM,QAAQ,KAAK;AAAA,IACrD;AAAA,IACA,SAAoB;AAClB,aAAO,uBAAuB,IAAI;AAAA,IACpC;AAAA,EACF;AACF;AAEO,SAAS,sBACd,MACW;AACX,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,UAAU,aAAa,kCAAkC;AAAA,MACzE;AAAA,MACA,UAAU,CAAC,MAAM;AAAA,IACnB;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,YAAM,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AACzD,UAAI,CAAC,MAAM;AACT,eAAO,EAAE,OAAO,mBAAmB;AAAA,MACrC;AACA,aAAO,KAAK,EAAE,MAAM,UAAU,KAAK,CAAC;AAAA,IACtC;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,QAAiC;AAC/D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,UAAU,aAAa,kCAAkC;AAAA,MACzE;AAAA,MACA,UAAU,CAAC,MAAM;AAAA,IACnB;AAAA,IACA,MAAM,QAAQ,MAAM,SAAS;AAC3B,YAAM,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AACzD,UAAI,CAAC,MAAM;AACT,eAAO,EAAE,OAAO,mBAAmB;AAAA,MACrC;AACA,YAAM,QAAQ,MAAM,OAAO,KAAK,EAAE,MAAM,UAAU,KAAK,GAAG,QAAQ,MAAM;AACxE,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,eAAe,QAAuC;AAC7D,MAAI,QAAQ,SAAS;AACnB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACF;","names":[]}