beeos-claw 0.6.63-cloud.8 → 0.6.63-cloud.9
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 +1 @@
|
|
|
1
|
-
export const AROUTER_PROVIDER_ID="arouter";export const DEFAULT_AROUTER_IMAGE_MODEL="gemini-2.5-flash-image";export const DEFAULT_AROUTER_VIDEO_MODEL="seedance-2.0-fast";const FALLBACK_AROUTER_BASE_URL="https://api.arouter.ai/v1";function trimTrailingSlash(
|
|
1
|
+
export const AROUTER_PROVIDER_ID="arouter";export const DEFAULT_AROUTER_IMAGE_MODEL="gemini-2.5-flash-image";export const DEFAULT_AROUTER_VIDEO_MODEL="seedance-2.0-fast";const FALLBACK_AROUTER_BASE_URL="https://api.arouter.ai/v1";function trimTrailingSlash(r){return r.replace(/\/+$/u,"")}const PLACEHOLDER_API_KEY=/^\$\{[^}]+\}$/u;function providersOf(r){return r?.models?.providers??{}}function hasProvider(r,e){return Object.prototype.hasOwnProperty.call(r,e)&&null!=r[e]}function listedModelIds(r){if(!r||!Array.isArray(r.models))return[];const e=[];for(const o of r.models){if("string"==typeof o){const r=o.trim();r&&e.push(r);continue}if(o&&"string"==typeof o.id){const r=o.id.trim();r&&e.push(r)}}return e}function providerListingModel(r,e){const o=Object.entries(r).filter(([,r])=>listedModelIds(r).includes(e));return 1===o.length?o[0]?.[0]:void 0}function soleProviderId(r){const e=Object.keys(r).filter(e=>hasProvider(r,e));return 1===e.length?e[0]:void 0}function providerFromRef(r,e){const o=e.indexOf("/");if(o<=0||o>=e.length-1)return;const t=e.slice(0,o).trim(),i=e.slice(o+1).trim();return t&&i?hasProvider(r,t)?t:providerListingModel(r,e)??providerListingModel(r,i):void 0}function resolveModelPointer(r,e){const o=e.trim();if(o)return o.includes("/")?providerFromRef(r,o):hasProvider(r,o)?o:providerListingModel(r,o)}function readToolModelRef(r,e){const o=r?.agents?.defaults?.[e];if("string"==typeof o){return o.trim()||void 0}if(o&&"string"==typeof o.primary){return o.primary.trim()||void 0}}export function resolveToolModelProviderId(r,e){const o=providersOf(r),t=e?.model?.trim();if(t){const r=resolveModelPointer(o,t);if(r)return r}const i=e?.toolModelField?readToolModelRef(r,e.toolModelField):void 0;if(i){const r=resolveModelPointer(o,i);if(r)return r}const n=e?.capabilityProviderId?.trim();return n&&hasProvider(o,n)?n:soleProviderId(o)}function providerIdFromHint(r,e){const o=e.trim();if(o)return resolveModelPointer(providersOf(r),o)}function readProviderApiKey(r,e){if(!e)return;const o=providersOf(r);if(!hasProvider(o,e))return;const t=o[e]?.apiKey;if("string"!=typeof t)return;const i=t.trim();return i&&!PLACEHOLDER_API_KEY.test(i)?i:void 0}export function resolveArouterApiKey(r,e){return readProviderApiKey(r,"string"==typeof e?providerIdFromHint(r,e):resolveToolModelProviderId(r,e))}export function resolveArouterBaseUrl(r){const e=r?.models?.providers?.arouter?.baseUrl?.trim();if(e)return trimTrailingSlash(e);const o=process.env.AROUTER_BASE_URL?.trim();return o?`${trimTrailingSlash(o)}/v1`:FALLBACK_AROUTER_BASE_URL}export function arouterAuthHeaders(r){return{Authorization:`Bearer ${r}`,"Content-Type":"application/json"}}const DEFAULT_REQUEST_TIMEOUT_MS=6e4;export async function arouterFetch(r,e={}){const o=e.timeoutMs??6e4,t=void 0!==e.deadlineAt?Math.max(0,e.deadlineAt-Date.now()):o,i=Math.max(1,Math.min(o,t)),n={method:e.method??"GET",signal:AbortSignal.timeout(i)};return e.headers&&(n.headers=e.headers),void 0!==e.body&&(n.body=e.body),fetch(r,n)}export async function readErrorBody(r){try{return(await r.text()).slice(0,500)}catch{return""}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AROUTER_PROVIDER_ID,DEFAULT_AROUTER_IMAGE_MODEL,arouterAuthHeaders,arouterFetch,readErrorBody,resolveArouterApiKey,resolveArouterBaseUrl}from"./arouter-config.js";const IMAGE_MODELS=[DEFAULT_AROUTER_IMAGE_MODEL],DEFAULT_IMAGE_TIMEOUT_MS=12e4,SUPPORTED_ASPECT_RATIOS=["1:1","2:3","3:2","3:4","4:3","4:5","5:4","9:16","16:9","21:9"],SUPPORTED_RESOLUTIONS=["1K","2K","4K"];function isRecord(e){return Boolean(e&&"object"==typeof e&&!Array.isArray(e))}function inferImageMimeType(e){return e.length>=8&&137===e[0]&&80===e[1]?"image/png":e.length>=3&&255===e[0]&&216===e[1]&&255===e[2]?"image/jpeg":e.length>=12&&"RIFF"===e.toString("ascii",0,4)&&"WEBP"===e.toString("ascii",8,12)?"image/webp":"image/png"}function toImageDataUrl(e){return`data:${e.mimeType};base64,${e.buffer.toString("base64")}`}function isGeminiImageModel(e){return/gemini/i.test(e)}function buildMessageContent(e){const t=e.inputImages??[];return 0===t.length?e.prompt:[{type:"text",text:e.prompt},...t.map(e=>({type:"image_url",image_url:{url:toImageDataUrl(e)}}))]}function buildImageConfig(e,t){if(!isGeminiImageModel(t))return{};const r={},o=e.aspectRatio?.trim();o&&(r.aspect_ratio=o);const a=e.resolution?.trim();return a&&(r.image_size=a),r}function decodeDataUrl(e){const t=/^data:([^;,]+)?(;base64)?,([\s\S]*)$/u.exec(e);if(!t)return null;const r=t[1]?.trim()||"image/png",o=Boolean(t[2]),a=t[3]??"",
|
|
1
|
+
import{AROUTER_PROVIDER_ID,DEFAULT_AROUTER_IMAGE_MODEL,arouterAuthHeaders,arouterFetch,readErrorBody,resolveArouterApiKey,resolveArouterBaseUrl}from"./arouter-config.js";const IMAGE_MODELS=[DEFAULT_AROUTER_IMAGE_MODEL],DEFAULT_IMAGE_TIMEOUT_MS=12e4,SUPPORTED_ASPECT_RATIOS=["1:1","2:3","3:2","3:4","4:3","4:5","5:4","9:16","16:9","21:9"],SUPPORTED_RESOLUTIONS=["1K","2K","4K"];function isRecord(e){return Boolean(e&&"object"==typeof e&&!Array.isArray(e))}function inferImageMimeType(e){return e.length>=8&&137===e[0]&&80===e[1]?"image/png":e.length>=3&&255===e[0]&&216===e[1]&&255===e[2]?"image/jpeg":e.length>=12&&"RIFF"===e.toString("ascii",0,4)&&"WEBP"===e.toString("ascii",8,12)?"image/webp":"image/png"}function toImageDataUrl(e){return`data:${e.mimeType};base64,${e.buffer.toString("base64")}`}function isGeminiImageModel(e){return/gemini/i.test(e)}function buildMessageContent(e){const t=e.inputImages??[];return 0===t.length?e.prompt:[{type:"text",text:e.prompt},...t.map(e=>({type:"image_url",image_url:{url:toImageDataUrl(e)}}))]}function buildImageConfig(e,t){if(!isGeminiImageModel(t))return{};const r={},o=e.aspectRatio?.trim();o&&(r.aspect_ratio=o);const a=e.resolution?.trim();return a&&(r.image_size=a),r}function decodeDataUrl(e){const t=/^data:([^;,]+)?(;base64)?,([\s\S]*)$/u.exec(e);if(!t)return null;const r=t[1]?.trim()||"image/png",o=Boolean(t[2]),a=t[3]??"",i=o?Buffer.from(a,"base64"):Buffer.from(decodeURIComponent(a),"utf8");return 0===i.length?null:{buffer:i,mimeType:r}}function collectImageUrls(e){const t=[];for(const r of e.choices??[]){const e=r?.message;if(!e)continue;for(const r of e.images??[]){const e=(r.image_url??r.imageUrl)?.url;"string"==typeof e&&e.length>0&&t.push(e)}const o=e.content;if("string"==typeof o&&o.length>0){const e=/data:image\/[^;]+;base64,[A-Za-z0-9+/=]+/gu;for(const r of o.matchAll(e))t.push(r[0])}else if(Array.isArray(o))for(const e of o)if(isRecord(e)&&"image_url"===e.type&&isRecord(e.image_url)){const r=e.image_url.url;"string"==typeof r&&r.length>0&&t.push(r)}}return t}async function assetFromUrl(e,t,r){let o,a=null;if(e.startsWith("data:")){const t=decodeDataUrl(e);t&&(a=t.buffer,o=t.mimeType)}else{const t=await arouterFetch(e,{deadlineAt:r});if(!t.ok)throw new Error(`ARouter image download failed (${t.status}): ${await readErrorBody(t)}`);a=Buffer.from(await t.arrayBuffer())}if(!a||0===a.length)return null;const i=o??inferImageMimeType(a);return{buffer:a,mimeType:i,fileName:`image-${t+1}.${"image/jpeg"===i?"jpg":"image/webp"===i?"webp":"png"}`}}export function createArouterImageProvider(){return{id:AROUTER_PROVIDER_ID,label:"ARouter Image",defaultModel:DEFAULT_AROUTER_IMAGE_MODEL,defaultTimeoutMs:12e4,models:IMAGE_MODELS,capabilities:{generate:{maxCount:1,supportsSize:!1,supportsAspectRatio:!0,supportsResolution:!0},edit:{enabled:!1},geometry:{aspectRatios:[...SUPPORTED_ASPECT_RATIOS],resolutions:[...SUPPORTED_RESOLUTIONS]}},isConfigured:e=>Boolean(resolveArouterApiKey(e.cfg,{toolModelField:"imageGenerationModel"})),async generateImage(e){const t=resolveArouterApiKey(e.cfg,{model:e.model,capabilityProviderId:e.provider,toolModelField:"imageGenerationModel"});if(!t)throw new Error("ARouter image generation: provider apiKey is not configured.");const r=resolveArouterBaseUrl(e.cfg),o=e.model?.trim()||DEFAULT_AROUTER_IMAGE_MODEL,a=Date.now()+(e.timeoutMs??12e4),i=buildImageConfig(e,o),n={model:o,messages:[{role:"user",content:buildMessageContent(e)}],modalities:["image","text"]},s=e.count&&e.count>1?Math.floor(e.count):1;s>1&&(n.n=s),Object.keys(i).length>0&&(n.image_config=i);const l=await arouterFetch(`${r}/chat/completions`,{method:"POST",headers:arouterAuthHeaders(t),body:JSON.stringify(n),deadlineAt:a});if(!l.ok)throw new Error(`ARouter image generation failed (${l.status}): ${await readErrorBody(l)}`);const u=await l.json(),g=collectImageUrls(u),m=[];for(let e=0;e<g.length;e+=1){const t=await assetFromUrl(g[e],e,a);t&&m.push(t)}if(0===m.length)throw new Error("ARouter image generation response missing image data.");return{images:m,model:o,...u.usage?{metadata:{usage:u.usage}}:{}}}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AROUTER_PROVIDER_ID,DEFAULT_AROUTER_VIDEO_MODEL,arouterAuthHeaders,arouterFetch,readErrorBody,resolveArouterApiKey,resolveArouterBaseUrl}from"./arouter-config.js";const VIDEO_MODELS=[DEFAULT_AROUTER_VIDEO_MODEL],DEFAULT_VIDEO_TIMEOUT_MS=3e5;export const AROUTER_VIDEO_POLL_INTERVAL_MS=2500;function sleep(e){return new Promise(
|
|
1
|
+
import{AROUTER_PROVIDER_ID,DEFAULT_AROUTER_VIDEO_MODEL,arouterAuthHeaders,arouterFetch,readErrorBody,resolveArouterApiKey,resolveArouterBaseUrl}from"./arouter-config.js";const VIDEO_MODELS=[DEFAULT_AROUTER_VIDEO_MODEL],DEFAULT_VIDEO_TIMEOUT_MS=3e5;export const AROUTER_VIDEO_POLL_INTERVAL_MS=2500;function sleep(e){return new Promise(o=>setTimeout(o,e))}function errorMessage(e){return"string"==typeof e.error?e.error:e.error&&"object"==typeof e.error&&e.error.message?e.error.message:`status=${e.status??"unknown"}`}function buildSubmitBody(e,o){const r={model:o,prompt:e.prompt,generate_audio:e.audio??!1};"number"==typeof e.durationSeconds&&Number.isFinite(e.durationSeconds)&&(r.duration=Math.max(1,Math.round(e.durationSeconds))),e.resolution?.trim()&&(r.resolution=e.resolution.trim()),e.aspectRatio?.trim()&&(r.aspect_ratio=e.aspectRatio.trim()),e.size?.trim()&&(r.size=e.size.trim());const t=(e.inputImages??[]).map(e=>e.url?.trim()).filter(e=>Boolean(e));if(t.length>0&&(r.frame_images=t),e.providerOptions)for(const[o,t]of Object.entries(e.providerOptions))void 0===t||o in r||(r[o]=t);return r}export async function pollArouterVideoTask(e){const o=`${e.baseUrl}/videos/${encodeURIComponent(e.taskId)}`,r=e.pollIntervalMs??2500;for(;;){if(Date.now()>=e.deadlineAt)throw new Error(`ARouter video task ${e.taskId} did not finish before timeout.`);const t=await arouterFetch(o,{headers:e.headers,deadlineAt:e.deadlineAt});if(!t.ok)throw new Error(`ARouter video poll failed (${t.status}): ${await readErrorBody(t)}`);const i=await t.json(),a=i.status?.toString().toLowerCase();if("completed"===a)return i;if("failed"===a||"cancelled"===a||"expired"===a)throw new Error(`ARouter video task ${e.taskId} ${a}: ${errorMessage(i)}`);await sleep(r)}}export function createArouterVideoProvider(){return{id:AROUTER_PROVIDER_ID,label:"ARouter Video",defaultModel:DEFAULT_AROUTER_VIDEO_MODEL,defaultTimeoutMs:3e5,models:VIDEO_MODELS,capabilities:{generate:{maxVideos:1,maxDurationSeconds:12,supportsResolution:!0,supportsAspectRatio:!0,supportsAudio:!0},imageToVideo:{enabled:!0,maxVideos:1,maxInputImages:1,maxDurationSeconds:12}},isConfigured:e=>Boolean(resolveArouterApiKey(e.cfg,{toolModelField:"videoGenerationModel"})),async generateVideo(e){const o=resolveArouterApiKey(e.cfg,{model:e.model,capabilityProviderId:e.provider,toolModelField:"videoGenerationModel"});if(!o)throw new Error("ARouter video generation: provider apiKey is not configured.");const r=resolveArouterBaseUrl(e.cfg),t=e.model?.trim()||DEFAULT_AROUTER_VIDEO_MODEL,i=arouterAuthHeaders(o),a=Date.now()+(e.timeoutMs??3e5),s=await arouterFetch(`${r}/videos`,{method:"POST",headers:i,body:JSON.stringify(buildSubmitBody(e,t)),deadlineAt:a});if(!s.ok)throw new Error(`ARouter video submit failed (${s.status}): ${await readErrorBody(s)}`);const d=await s.json(),n=d.id?.trim();if(!n)throw new Error("ARouter video submit response missing task id.");const u=await pollArouterVideoTask({baseUrl:r,taskId:n,headers:i,deadlineAt:a}),l=`${r}/videos/${encodeURIComponent(n)}/content?index=0`,m=await arouterFetch(l,{headers:i,deadlineAt:a});if(!m.ok)throw new Error(`ARouter video download failed (${m.status}): ${await readErrorBody(m)}`);return{videos:[{buffer:Buffer.from(await m.arrayBuffer()),mimeType:m.headers.get("content-type")?.trim()||"video/mp4",fileName:"video-1.mp4"}],model:t,metadata:{taskId:n,status:u.status,...u.generation_id?{generationId:u.generation_id}:{},...u.usage?{usage:u.usage}:{}}}}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "beeos-claw",
|
|
3
|
-
"version": "0.6.63-cloud.
|
|
3
|
+
"version": "0.6.63-cloud.9",
|
|
4
4
|
"description": "OpenClaw plugin that bridges the BeeOS platform with the local OpenClaw Gateway, providing file transfer, ACP bridge, and observability.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "BeeOS <dev@beeos.ai>",
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"fast-uri": ">=3.1.4",
|
|
89
89
|
"brace-expansion": ">=5.0.9"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "abef564a1fbde449737ab7a814c7225146a88805"
|
|
92
92
|
}
|