@ray-js/robot-map-sdk 0.0.15-beta.8 → 0.0.15

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.
Files changed (61) hide show
  1. package/bin/mcp-server.js +1 -1
  2. package/dist/constant/methods.js +1 -1
  3. package/dist/index.d.ts +44 -4
  4. package/dist/index.rjs.js +1 -1
  5. package/dist-app/assets/index-DMEnUYiD.js +1 -0
  6. package/dist-app/index.html +1 -2
  7. package/dist-docs/404.html +2 -2
  8. package/dist-docs/agents/domain.html +39 -0
  9. package/dist-docs/agents/issue-tracker.html +25 -0
  10. package/dist-docs/agents/triage-labels.html +25 -0
  11. package/dist-docs/assets/agents_domain.md.CYB9yWEy.js +15 -0
  12. package/dist-docs/assets/agents_domain.md.CYB9yWEy.lean.js +1 -0
  13. package/dist-docs/assets/agents_issue-tracker.md.CrjzmXmc.js +1 -0
  14. package/dist-docs/assets/agents_issue-tracker.md.CrjzmXmc.lean.js +1 -0
  15. package/dist-docs/assets/agents_triage-labels.md.Cmw0b5xB.js +1 -0
  16. package/dist-docs/assets/agents_triage-labels.md.Cmw0b5xB.lean.js +1 -0
  17. package/dist-docs/assets/{app.qpayiG6C.js → app.BXGPC0v4.js} +1 -1
  18. package/dist-docs/assets/chunks/@localSearchIndexroot.D-feMZmG.js +1 -0
  19. package/dist-docs/assets/chunks/{BitmapFont.C7oZeIsf.js → BitmapFont.DzUyMNlJ.js} +1 -1
  20. package/dist-docs/assets/chunks/{BufferResource.DlhatX3V.js → BufferResource.Drg97r2Z.js} +1 -1
  21. package/dist-docs/assets/chunks/{CanvasRenderer.qtwtojUj.js → CanvasRenderer.vfz9sPE6.js} +1 -1
  22. package/dist-docs/assets/chunks/{RenderTargetSystem.h1UtLLl-.js → RenderTargetSystem.Bkr0oS6j.js} +1 -1
  23. package/dist-docs/assets/chunks/{VPLocalSearchBox.VGFbBqUp.js → VPLocalSearchBox.C7HJ4UkB.js} +1 -1
  24. package/dist-docs/assets/chunks/{WebGLRenderer.CTrQ5cex.js → WebGLRenderer.D4Dgosvx.js} +1 -1
  25. package/dist-docs/assets/chunks/{WebGPURenderer.CbssqhSN.js → WebGPURenderer.CT3AUgw3.js} +1 -1
  26. package/dist-docs/assets/chunks/{browserAll.C-8Fex_M.js → browserAll.NKEQOzVE.js} +1 -1
  27. package/dist-docs/assets/chunks/index.CvitVYBK.js +744 -0
  28. package/dist-docs/assets/chunks/theme.DUpgtHaE.js +4 -0
  29. package/dist-docs/assets/chunks/{webworkerAll.BzbTMnqm.js → webworkerAll.JQUyAE7k.js} +1 -1
  30. package/dist-docs/assets/{guide_getting-started.md.CmPlW_Cy.js → guide_getting-started.md.s0ecK_5b.js} +1 -1
  31. package/dist-docs/assets/{reference_config.md.DJr6BhNY.js → reference_config.md.B45KsJB6.js} +3 -3
  32. package/dist-docs/assets/{reference_config.md.DJr6BhNY.lean.js → reference_config.md.B45KsJB6.lean.js} +1 -1
  33. package/dist-docs/guide/advanced-usage.html +3 -3
  34. package/dist-docs/guide/concepts.html +3 -3
  35. package/dist-docs/guide/getting-started.html +5 -5
  36. package/dist-docs/guide/mcp.html +3 -3
  37. package/dist-docs/hashmap.json +1 -1
  38. package/dist-docs/index.html +3 -3
  39. package/dist-docs/plans/2026-03-04-detected-objects-visibility-design.html +3 -3
  40. package/dist-docs/plans/2026-03-04-show-detected-objects-implementation-plan.html +3 -3
  41. package/dist-docs/plans/2026-03-10-simulator-debug-design.html +3 -3
  42. package/dist-docs/plans/2026-03-10-simulator-events-console-design.html +3 -3
  43. package/dist-docs/plans/2026-03-10-simulator-events-console-implementation-plan.html +3 -3
  44. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-design.html +3 -3
  45. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-implementation-plan.html +3 -3
  46. package/dist-docs/plans/2026-03-10-testing-rollout-next-steps-plan.html +3 -3
  47. package/dist-docs/plans/2026-03-11-simulator-logger-dump-implementation-plan.html +3 -3
  48. package/dist-docs/reference/callbacks.html +3 -3
  49. package/dist-docs/reference/config.html +6 -6
  50. package/dist-docs/reference/data.html +3 -3
  51. package/dist-docs/reference/methods.html +3 -3
  52. package/dist-docs/reference/runtime.html +3 -3
  53. package/dist-docs/reference/types.html +3 -3
  54. package/dist-docs/reference/utils.html +3 -3
  55. package/dist-docs/simulator/index.html +3 -3
  56. package/package.json +2 -1
  57. package/dist-app/assets/index-CV-5yK7G.js +0 -1
  58. package/dist-docs/assets/chunks/@localSearchIndexroot.momHo4OR.js +0 -1
  59. package/dist-docs/assets/chunks/index.BVy8BWUZ.js +0 -744
  60. package/dist-docs/assets/chunks/theme.sPi1G3ho.js +0 -4
  61. /package/dist-docs/assets/{guide_getting-started.md.CmPlW_Cy.lean.js → guide_getting-started.md.s0ecK_5b.lean.js} +0 -0
package/bin/mcp-server.js CHANGED
@@ -51,7 +51,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
51
51
  `:`[${o[u]}\r
52
52
  ]`;continue}r+=o[u],o[u]==="\\"?i=!0:a&&o[u]==="]"?a=!1:!a&&o[u]==="["&&(a=!0)}try{new RegExp(r)}catch{return console.warn(`Could not convert regex pattern at ${t.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),e.source}return r}function Nl(e,t){var o,r,i,a,s,c;if(t.target==="openAi"&&console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead."),t.target==="openApi3"&&((o=e.keyType)==null?void 0:o._def.typeName)===E.ZodEnum)return{type:"object",required:e.keyType._def.values,properties:e.keyType._def.values.reduce((u,l)=>({...u,[l]:K(e.valueType._def,{...t,currentPath:[...t.currentPath,"properties",l]})??Re(t)}),{}),additionalProperties:t.rejectedAdditionalProperties};let n={type:"object",additionalProperties:K(e.valueType._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]})??t.allowedAdditionalProperties};if(t.target==="openApi3")return n;if(((r=e.keyType)==null?void 0:r._def.typeName)===E.ZodString&&((i=e.keyType._def.checks)!=null&&i.length)){let{type:u,...l}=jl(e.keyType._def,t);return{...n,propertyNames:l}}else{if(((a=e.keyType)==null?void 0:a._def.typeName)===E.ZodEnum)return{...n,propertyNames:{enum:e.keyType._def.values}};if(((s=e.keyType)==null?void 0:s._def.typeName)===E.ZodBranded&&e.keyType._def.type._def.typeName===E.ZodString&&((c=e.keyType._def.type._def.checks)!=null&&c.length)){let{type:u,...l}=Rl(e.keyType._def,t);return{...n,propertyNames:l}}}return n}function Bx(e,t){if(t.mapStrategy==="record")return Nl(e,t);let n=K(e.keyType._def,{...t,currentPath:[...t.currentPath,"items","items","0"]})||Re(t),o=K(e.valueType._def,{...t,currentPath:[...t.currentPath,"items","items","1"]})||Re(t);return{type:"array",maxItems:125,items:{type:"array",items:[n,o],minItems:2,maxItems:2}}}p();function Jx(e){let t=e.values,o=Object.keys(e.values).filter(i=>typeof t[t[i]]!="number").map(i=>t[i]),r=Array.from(new Set(o.map(i=>typeof i)));return{type:r.length===1?r[0]==="string"?"string":"number":["string","number"],enum:o}}p();function Wx(e){return e.target==="openAi"?void 0:{not:Re({...e,currentPath:[...e.currentPath,"not"]})}}p();function Kx(e){return e.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}p();p();var Sa={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function Xx(e,t){if(t.target==="openApi3")return Gx(e,t);let n=e.options instanceof Map?Array.from(e.options.values()):e.options;if(n.every(o=>o._def.typeName in Sa&&(!o._def.checks||!o._def.checks.length))){let o=n.reduce((r,i)=>{let a=Sa[i._def.typeName];return a&&!r.includes(a)?[...r,a]:r},[]);return{type:o.length>1?o:o[0]}}else if(n.every(o=>o._def.typeName==="ZodLiteral"&&!o.description)){let o=n.reduce((r,i)=>{let a=typeof i._def.value;switch(a){case"string":case"number":case"boolean":return[...r,a];case"bigint":return[...r,"integer"];case"object":if(i._def.value===null)return[...r,"null"];default:return r}},[]);if(o.length===n.length){let r=o.filter((i,a,s)=>s.indexOf(i)===a);return{type:r.length>1?r:r[0],enum:n.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(n.every(o=>o._def.typeName==="ZodEnum"))return{type:"string",enum:n.reduce((o,r)=>[...o,...r._def.values.filter(i=>!o.includes(i))],[])};return Gx(e,t)}var Gx=(e,t)=>{let n=(e.options instanceof Map?Array.from(e.options.values()):e.options).map((o,r)=>K(o._def,{...t,currentPath:[...t.currentPath,"anyOf",`${r}`]})).filter(o=>!!o&&(!t.strictUnions||typeof o=="object"&&Object.keys(o).length>0));return n.length?{anyOf:n}:void 0};function Yx(e,t){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(e.innerType._def.typeName)&&(!e.innerType._def.checks||!e.innerType._def.checks.length))return t.target==="openApi3"?{type:Sa[e.innerType._def.typeName],nullable:!0}:{type:[Sa[e.innerType._def.typeName],"null"]};if(t.target==="openApi3"){let o=K(e.innerType._def,{...t,currentPath:[...t.currentPath]});return o&&"$ref"in o?{allOf:[o],nullable:!0}:o&&{...o,nullable:!0}}let n=K(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","0"]});return n&&{anyOf:[n,{type:"null"}]}}p();function Qx(e,t){let n={type:"number"};if(!e.checks)return n;for(let o of e.checks)switch(o.kind){case"int":n.type="integer",eh(n,"type",o.message,t);break;case"min":t.target==="jsonSchema7"?o.inclusive?le(n,"minimum",o.value,o.message,t):le(n,"exclusiveMinimum",o.value,o.message,t):(o.inclusive||(n.exclusiveMinimum=!0),le(n,"minimum",o.value,o.message,t));break;case"max":t.target==="jsonSchema7"?o.inclusive?le(n,"maximum",o.value,o.message,t):le(n,"exclusiveMaximum",o.value,o.message,t):(o.inclusive||(n.exclusiveMaximum=!0),le(n,"maximum",o.value,o.message,t));break;case"multipleOf":le(n,"multipleOf",o.value,o.message,t);break}return n}p();function e$(e,t){let n=t.target==="openAi",o={type:"object",properties:{}},r=[],i=e.shape();for(let s in i){let c=i[s];if(c===void 0||c._def===void 0)continue;let u=VP(c);u&&n&&(c._def.typeName==="ZodOptional"&&(c=c._def.innerType),c.isNullable()||(c=c.nullable()),u=!1);let l=K(c._def,{...t,currentPath:[...t.currentPath,"properties",s],propertyPath:[...t.currentPath,"properties",s]});l!==void 0&&(o.properties[s]=l,u||r.push(s))}r.length&&(o.required=r);let a=LP(e,t);return a!==void 0&&(o.additionalProperties=a),o}function LP(e,t){if(e.catchall._def.typeName!=="ZodNever")return K(e.catchall._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]});switch(e.unknownKeys){case"passthrough":return t.allowedAdditionalProperties;case"strict":return t.rejectedAdditionalProperties;case"strip":return t.removeAdditionalStrategy==="strict"?t.allowedAdditionalProperties:t.rejectedAdditionalProperties}}function VP(e){try{return e.isOptional()}catch{return!0}}p();var t$=(e,t)=>{var o;if(t.currentPath.toString()===((o=t.propertyPath)==null?void 0:o.toString()))return K(e.innerType._def,t);let n=K(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","1"]});return n?{anyOf:[{not:Re(t)},n]}:Re(t)};p();var r$=(e,t)=>{if(t.pipeStrategy==="input")return K(e.in._def,t);if(t.pipeStrategy==="output")return K(e.out._def,t);let n=K(e.in._def,{...t,currentPath:[...t.currentPath,"allOf","0"]}),o=K(e.out._def,{...t,currentPath:[...t.currentPath,"allOf",n?"1":"0"]});return{allOf:[n,o].filter(r=>r!==void 0)}};p();function n$(e,t){return K(e.type._def,t)}p();function o$(e,t){let o={type:"array",uniqueItems:!0,items:K(e.valueType._def,{...t,currentPath:[...t.currentPath,"items"]})};return e.minSize&&le(o,"minItems",e.minSize.value,e.minSize.message,t),e.maxSize&&le(o,"maxItems",e.maxSize.value,e.maxSize.message,t),o}p();function i$(e,t){return e.rest?{type:"array",minItems:e.items.length,items:e.items.map((n,o)=>K(n._def,{...t,currentPath:[...t.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[]),additionalItems:K(e.rest._def,{...t,currentPath:[...t.currentPath,"additionalItems"]})}:{type:"array",minItems:e.items.length,maxItems:e.items.length,items:e.items.map((n,o)=>K(n._def,{...t,currentPath:[...t.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[])}}p();function a$(e){return{not:Re(e)}}p();function s$(e){return Re(e)}p();var c$=(e,t)=>K(e.innerType._def,t);var u$=(e,t,n)=>{switch(t){case E.ZodString:return jl(e,n);case E.ZodNumber:return Qx(e,n);case E.ZodObject:return e$(e,n);case E.ZodBigInt:return Ax(e,n);case E.ZodBoolean:return Cx();case E.ZodDate:return th(e,n);case E.ZodUndefined:return a$(n);case E.ZodNull:return Kx(n);case E.ZodArray:return Mx(e,n);case E.ZodUnion:case E.ZodDiscriminatedUnion:return Xx(e,n);case E.ZodIntersection:return qx(e,n);case E.ZodTuple:return i$(e,n);case E.ZodRecord:return Nl(e,n);case E.ZodLiteral:return Fx(e,n);case E.ZodEnum:return Vx(e);case E.ZodNativeEnum:return Jx(e);case E.ZodNullable:return Yx(e,n);case E.ZodOptional:return t$(e,n);case E.ZodMap:return Bx(e,n);case E.ZodSet:return o$(e,n);case E.ZodLazy:return()=>e.getter()._def;case E.ZodPromise:return n$(e,n);case E.ZodNaN:case E.ZodNever:return Wx(n);case E.ZodEffects:return Lx(e,n);case E.ZodAny:return Re(n);case E.ZodUnknown:return s$(n);case E.ZodDefault:return Ux(e,n);case E.ZodBranded:return Rl(e,n);case E.ZodReadonly:return c$(e,n);case E.ZodCatch:return Zx(e,n);case E.ZodPipeline:return r$(e,n);case E.ZodFunction:case E.ZodVoid:case E.ZodSymbol:return;default:return(o=>{})(t)}};function K(e,t,n=!1){var s;let o=t.seen.get(e);if(t.override){let c=(s=t.override)==null?void 0:s.call(t,e,t,o,n);if(c!==jx)return c}if(o&&!n){let c=qP(o,t);if(c!==void 0)return c}let r={def:e,path:t.currentPath,jsonSchema:void 0};t.seen.set(e,r);let i=u$(e,e.typeName,t),a=typeof i=="function"?K(i(),t):i;if(a&&FP(e,t,a),t.postProcess){let c=t.postProcess(a,e,t);return r.jsonSchema=a,c}return r.jsonSchema=a,a}var qP=(e,t)=>{switch(t.$refStrategy){case"root":return{$ref:e.path.join("/")};case"relative":return{$ref:Ol(t.currentPath,e.path)};case"none":case"seen":return e.path.length<t.currentPath.length&&e.path.every((n,o)=>t.currentPath[o]===n)?(console.warn(`Recursive reference detected at ${t.currentPath.join("/")}! Defaulting to any`),Re(t)):t.$refStrategy==="seen"?Re(t):void 0}},FP=(e,t,n)=>(e.description&&(n.description=e.description,t.markdownDescription&&(n.markdownDescription=e.description)),n);p();p();var oh=(e,t)=>{let n=Dx(t),o=typeof t=="object"&&t.definitions?Object.entries(t.definitions).reduce((c,[u,l])=>({...c,[u]:K(l._def,{...n,currentPath:[...n.basePath,n.definitionPath,u]},!0)??Re(n)}),{}):void 0,r=typeof t=="string"?t:(t==null?void 0:t.nameStrategy)==="title"||t==null?void 0:t.name,i=K(e._def,r===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,r]},!1)??Re(n),a=typeof t=="object"&&t.name!==void 0&&t.nameStrategy==="title"?t.name:void 0;a!==void 0&&(i.title=a),n.flags.hasReferencedOpenAiAnyType&&(o||(o={}),o[n.openAiAnyTypeName]||(o[n.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:n.$refStrategy==="relative"?"1":[...n.basePath,n.definitionPath,n.openAiAnyTypeName].join("/")}}));let s=r===void 0?o?{...i,[n.definitionPath]:o}:i:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,r].join("/"),[n.definitionPath]:{...o,[r]:i}};return n.target==="jsonSchema7"?s.$schema="http://json-schema.org/draft-07/schema#":(n.target==="jsonSchema2019-09"||n.target==="openAi")&&(s.$schema="https://json-schema.org/draft/2019-09/schema#"),n.target==="openAi"&&("anyOf"in s||"oneOf"in s||"allOf"in s||"type"in s&&Array.isArray(s.type))&&console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property."),s};function HP(e){return!e||e==="jsonSchema7"||e==="draft-7"?"draft-7":e==="jsonSchema2019-09"||e==="draft-2020-12"?"draft-2020-12":"draft-7"}function ih(e,t){return jt(e)?wn(e,{target:HP(t==null?void 0:t.target),io:(t==null?void 0:t.pipeStrategy)??"input"}):oh(e,{strictUnions:(t==null?void 0:t.strictUnions)??!0,pipeStrategy:(t==null?void 0:t.pipeStrategy)??"input"})}function ah(e){let t=qr(e),n=t==null?void 0:t.method;if(!n)throw new Error("Schema is missing a method literal");let o=Ru(n);if(typeof o!="string")throw new Error("Schema method literal must be a string");return o}function sh(e,t){let n=Vr(e,t);if(!n.success)throw n.error;return n.data}var BP=6e4,Dl=class{constructor(t){this._options=t,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(ml,n=>{this._oncancel(n)}),this.setNotificationHandler(hl,n=>{this._onprogress(n)}),this.setRequestHandler(fl,n=>({})),this._taskStore=t==null?void 0:t.taskStore,this._taskMessageQueue=t==null?void 0:t.taskMessageQueue,this._taskStore&&(this.setRequestHandler(gl,async(n,o)=>{let r=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!r)throw new F(B.InvalidParams,"Failed to retrieve task: Task not found");return{...r}}),this.setRequestHandler(vl,async(n,o)=>{let r=async()=>{var s;let i=n.params.taskId;if(this._taskMessageQueue){let c;for(;c=await this._taskMessageQueue.dequeue(i,o.sessionId);){if(c.type==="response"||c.type==="error"){let u=c.message,l=u.id,d=this._requestResolvers.get(l);if(d)if(this._requestResolvers.delete(l),c.type==="response")d(u);else{let m=u,f=new F(m.error.code,m.error.message,m.error.data);d(f)}else{let m=c.type==="response"?"Response":"Error";this._onerror(new Error(`${m} handler missing for request ${l}`))}continue}await((s=this._transport)==null?void 0:s.send(c.message,{relatedRequestId:o.requestId}))}}let a=await this._taskStore.getTask(i,o.sessionId);if(!a)throw new F(B.InvalidParams,`Task not found: ${i}`);if(!Br(a.status))return await this._waitForTaskUpdate(i,o.signal),await r();if(Br(a.status)){let c=await this._taskStore.getTaskResult(i,o.sessionId);return this._clearTaskQueue(i),{...c,_meta:{...c._meta,[Hr]:{taskId:i}}}}return await r()};return await r()}),this.setRequestHandler(_l,async(n,o)=>{var r;try{let{tasks:i,nextCursor:a}=await this._taskStore.listTasks((r=n.params)==null?void 0:r.cursor,o.sessionId);return{tasks:i,nextCursor:a,_meta:{}}}catch(i){throw new F(B.InvalidParams,`Failed to list tasks: ${i instanceof Error?i.message:String(i)}`)}}),this.setRequestHandler($l,async(n,o)=>{try{let r=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!r)throw new F(B.InvalidParams,`Task not found: ${n.params.taskId}`);if(Br(r.status))throw new F(B.InvalidParams,`Cannot cancel task in terminal status: ${r.status}`);await this._taskStore.updateTaskStatus(n.params.taskId,"cancelled","Client cancelled task execution.",o.sessionId),this._clearTaskQueue(n.params.taskId);let i=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!i)throw new F(B.InvalidParams,`Task not found after cancellation: ${n.params.taskId}`);return{_meta:{},...i}}catch(r){throw r instanceof F?r:new F(B.InvalidRequest,`Failed to cancel task: ${r instanceof Error?r.message:String(r)}`)}}))}async _oncancel(t){if(!t.params.requestId)return;let n=this._requestHandlerAbortControllers.get(t.params.requestId);n==null||n.abort(t.params.reason)}_setupTimeout(t,n,o,r,i=!1){this._timeoutInfo.set(t,{timeoutId:setTimeout(r,n),startTime:Date.now(),timeout:n,maxTotalTimeout:o,resetTimeoutOnProgress:i,onTimeout:r})}_resetTimeout(t){let n=this._timeoutInfo.get(t);if(!n)return!1;let o=Date.now()-n.startTime;if(n.maxTotalTimeout&&o>=n.maxTotalTimeout)throw this._timeoutInfo.delete(t),F.fromError(B.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:n.maxTotalTimeout,totalElapsed:o});return clearTimeout(n.timeoutId),n.timeoutId=setTimeout(n.onTimeout,n.timeout),!0}_cleanupTimeout(t){let n=this._timeoutInfo.get(t);n&&(clearTimeout(n.timeoutId),this._timeoutInfo.delete(t))}async connect(t){var i,a,s;if(this._transport)throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=t;let n=(i=this.transport)==null?void 0:i.onclose;this._transport.onclose=()=>{n==null||n(),this._onclose()};let o=(a=this.transport)==null?void 0:a.onerror;this._transport.onerror=c=>{o==null||o(c),this._onerror(c)};let r=(s=this._transport)==null?void 0:s.onmessage;this._transport.onmessage=(c,u)=>{r==null||r(c,u),ha(c)||$x(c)?this._onresponse(c):Zf(c)?this._onrequest(c,u):xx(c)?this._onnotification(c):this._onerror(new Error(`Unknown message type: ${JSON.stringify(c)}`))},await this._transport.start()}_onclose(){var o;let t=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let r of this._requestHandlerAbortControllers.values())r.abort();this._requestHandlerAbortControllers.clear();let n=F.fromError(B.ConnectionClosed,"Connection closed");this._transport=void 0,(o=this.onclose)==null||o.call(this);for(let r of t.values())r(n)}_onerror(t){var n;(n=this.onerror)==null||n.call(this,t)}_onnotification(t){let n=this._notificationHandlers.get(t.method)??this.fallbackNotificationHandler;n!==void 0&&Promise.resolve().then(()=>n(t)).catch(o=>this._onerror(new Error(`Uncaught error in notification handler: ${o}`)))}_onrequest(t,n){var l,d,m,f;let o=this._requestHandlers.get(t.method)??this.fallbackRequestHandler,r=this._transport,i=(m=(d=(l=t.params)==null?void 0:l._meta)==null?void 0:d[Hr])==null?void 0:m.taskId;if(o===void 0){let v={jsonrpc:"2.0",id:t.id,error:{code:B.MethodNotFound,message:"Method not found"}};i&&this._taskMessageQueue?this._enqueueTaskMessage(i,{type:"error",message:v,timestamp:Date.now()},r==null?void 0:r.sessionId).catch(h=>this._onerror(new Error(`Failed to enqueue error response: ${h}`))):r==null||r.send(v).catch(h=>this._onerror(new Error(`Failed to send an error response: ${h}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(t.id,a);let s=yx(t.params)?t.params.task:void 0,c=this._taskStore?this.requestTaskStore(t,r==null?void 0:r.sessionId):void 0,u={signal:a.signal,sessionId:r==null?void 0:r.sessionId,_meta:(f=t.params)==null?void 0:f._meta,sendNotification:async v=>{if(a.signal.aborted)return;let h={relatedRequestId:t.id};i&&(h.relatedTask={taskId:i}),await this.notification(v,h)},sendRequest:async(v,h,_)=>{var R;if(a.signal.aborted)throw new F(B.ConnectionClosed,"Request was cancelled");let $={..._,relatedRequestId:t.id};i&&!$.relatedTask&&($.relatedTask={taskId:i});let w=((R=$.relatedTask)==null?void 0:R.taskId)??i;return w&&c&&await c.updateTaskStatus(w,"input_required"),await this.request(v,h,$)},authInfo:n==null?void 0:n.authInfo,requestId:t.id,requestInfo:n==null?void 0:n.requestInfo,taskId:i,taskStore:c,taskRequestedTtl:s==null?void 0:s.ttl,closeSSEStream:n==null?void 0:n.closeSSEStream,closeStandaloneSSEStream:n==null?void 0:n.closeStandaloneSSEStream};Promise.resolve().then(()=>{s&&this.assertTaskHandlerCapability(t.method)}).then(()=>o(t,u)).then(async v=>{if(a.signal.aborted)return;let h={result:v,jsonrpc:"2.0",id:t.id};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"response",message:h,timestamp:Date.now()},r==null?void 0:r.sessionId):await(r==null?void 0:r.send(h))},async v=>{if(a.signal.aborted)return;let h={jsonrpc:"2.0",id:t.id,error:{code:Number.isSafeInteger(v.code)?v.code:B.InternalError,message:v.message??"Internal error",...v.data!==void 0&&{data:v.data}}};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"error",message:h,timestamp:Date.now()},r==null?void 0:r.sessionId):await(r==null?void 0:r.send(h))}).catch(v=>this._onerror(new Error(`Failed to send response: ${v}`))).finally(()=>{this._requestHandlerAbortControllers.delete(t.id)})}_onprogress(t){let{progressToken:n,...o}=t.params,r=Number(n),i=this._progressHandlers.get(r);if(!i){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(t)}`));return}let a=this._responseHandlers.get(r),s=this._timeoutInfo.get(r);if(s&&a&&s.resetTimeoutOnProgress)try{this._resetTimeout(r)}catch(c){this._responseHandlers.delete(r),this._progressHandlers.delete(r),this._cleanupTimeout(r),a(c);return}i(o)}_onresponse(t){let n=Number(t.id),o=this._requestResolvers.get(n);if(o){if(this._requestResolvers.delete(n),ha(t))o(t);else{let a=new F(t.error.code,t.error.message,t.error.data);o(a)}return}let r=this._responseHandlers.get(n);if(r===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(t)}`));return}this._responseHandlers.delete(n),this._cleanupTimeout(n);let i=!1;if(ha(t)&&t.result&&typeof t.result=="object"){let a=t.result;if(a.task&&typeof a.task=="object"){let s=a.task;typeof s.taskId=="string"&&(i=!0,this._taskProgressTokens.set(s.taskId,n))}}if(i||this._progressHandlers.delete(n),ha(t))r(t);else{let a=F.fromError(t.error.code,t.error.message,t.error.data);r(a)}}get transport(){return this._transport}async close(){var t;await((t=this._transport)==null?void 0:t.close())}async*requestStream(t,n,o){var a,s;let{task:r}=o??{};if(!r){try{yield{type:"result",result:await this.request(t,n,o)}}catch(c){yield{type:"error",error:c instanceof F?c:new F(B.InternalError,String(c))}}return}let i;try{let c=await this.request(t,Oo,o);if(c.task)i=c.task.taskId,yield{type:"taskCreated",task:c.task};else throw new F(B.InternalError,"Task creation did not return a task");for(;;){let u=await this.getTask({taskId:i},o);if(yield{type:"taskStatus",task:u},Br(u.status)){u.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:i},n,o)}:u.status==="failed"?yield{type:"error",error:new F(B.InternalError,`Task ${i} failed`)}:u.status==="cancelled"&&(yield{type:"error",error:new F(B.InternalError,`Task ${i} was cancelled`)});return}if(u.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:i},n,o)};return}let l=u.pollInterval??((a=this._options)==null?void 0:a.defaultTaskPollInterval)??1e3;await new Promise(d=>setTimeout(d,l)),(s=o==null?void 0:o.signal)==null||s.throwIfAborted()}}catch(c){yield{type:"error",error:c instanceof F?c:new F(B.InternalError,String(c))}}}request(t,n,o){let{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a,task:s,relatedTask:c}=o??{};return new Promise((u,l)=>{var w,R,j,k,U;let d=N=>{l(N)};if(!this._transport){d(new Error("Not connected"));return}if(((w=this._options)==null?void 0:w.enforceStrictCapabilities)===!0)try{this.assertCapabilityForMethod(t.method),s&&this.assertTaskCapability(t.method)}catch(N){d(N);return}(R=o==null?void 0:o.signal)==null||R.throwIfAborted();let m=this._requestMessageId++,f={...t,jsonrpc:"2.0",id:m};o!=null&&o.onprogress&&(this._progressHandlers.set(m,o.onprogress),f.params={...t.params,_meta:{...((j=t.params)==null?void 0:j._meta)||{},progressToken:m}}),s&&(f.params={...f.params,task:s}),c&&(f.params={...f.params,_meta:{...((k=f.params)==null?void 0:k._meta)||{},[Hr]:c}});let v=N=>{var J;this._responseHandlers.delete(m),this._progressHandlers.delete(m),this._cleanupTimeout(m),(J=this._transport)==null||J.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:m,reason:String(N)}},{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(Y=>this._onerror(new Error(`Failed to send cancellation: ${Y}`)));let oe=N instanceof F?N:new F(B.RequestTimeout,String(N));l(oe)};this._responseHandlers.set(m,N=>{var oe;if(!((oe=o==null?void 0:o.signal)!=null&&oe.aborted)){if(N instanceof Error)return l(N);try{let J=Vr(n,N.result);J.success?u(J.data):l(J.error)}catch(J){l(J)}}}),(U=o==null?void 0:o.signal)==null||U.addEventListener("abort",()=>{var N;v((N=o==null?void 0:o.signal)==null?void 0:N.reason)});let h=(o==null?void 0:o.timeout)??BP,_=()=>v(F.fromError(B.RequestTimeout,"Request timed out",{timeout:h}));this._setupTimeout(m,h,o==null?void 0:o.maxTotalTimeout,_,(o==null?void 0:o.resetTimeoutOnProgress)??!1);let $=c==null?void 0:c.taskId;if($){let N=oe=>{let J=this._responseHandlers.get(m);J?J(oe):this._onerror(new Error(`Response handler missing for side-channeled request ${m}`))};this._requestResolvers.set(m,N),this._enqueueTaskMessage($,{type:"request",message:f,timestamp:Date.now()}).catch(oe=>{this._cleanupTimeout(m),l(oe)})}else this._transport.send(f,{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(N=>{this._cleanupTimeout(m),l(N)})})}async getTask(t,n){return this.request({method:"tasks/get",params:t},yl,n)}async getTaskResult(t,n,o){return this.request({method:"tasks/result",params:t},n,o)}async listTasks(t,n){return this.request({method:"tasks/list",params:t},xl,n)}async cancelTask(t,n){return this.request({method:"tasks/cancel",params:t},kx,n)}async notification(t,n){var s,c,u,l;if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(t.method);let o=(s=n==null?void 0:n.relatedTask)==null?void 0:s.taskId;if(o){let d={...t,jsonrpc:"2.0",params:{...t.params,_meta:{...((c=t.params)==null?void 0:c._meta)||{},[Hr]:n.relatedTask}}};await this._enqueueTaskMessage(o,{type:"notification",message:d,timestamp:Date.now()});return}if((((u=this._options)==null?void 0:u.debouncedNotificationMethods)??[]).includes(t.method)&&!t.params&&!(n!=null&&n.relatedRequestId)&&!(n!=null&&n.relatedTask)){if(this._pendingDebouncedNotifications.has(t.method))return;this._pendingDebouncedNotifications.add(t.method),Promise.resolve().then(()=>{var m,f;if(this._pendingDebouncedNotifications.delete(t.method),!this._transport)return;let d={...t,jsonrpc:"2.0"};n!=null&&n.relatedTask&&(d={...d,params:{...d.params,_meta:{...((m=d.params)==null?void 0:m._meta)||{},[Hr]:n.relatedTask}}}),(f=this._transport)==null||f.send(d,n).catch(v=>this._onerror(v))});return}let a={...t,jsonrpc:"2.0"};n!=null&&n.relatedTask&&(a={...a,params:{...a.params,_meta:{...((l=a.params)==null?void 0:l._meta)||{},[Hr]:n.relatedTask}}}),await this._transport.send(a,n)}setRequestHandler(t,n){let o=ah(t);this.assertRequestHandlerCapability(o),this._requestHandlers.set(o,(r,i)=>{let a=sh(t,r);return Promise.resolve(n(a,i))})}removeRequestHandler(t){this._requestHandlers.delete(t)}assertCanSetRequestHandler(t){if(this._requestHandlers.has(t))throw new Error(`A request handler for ${t} already exists, which would be overridden`)}setNotificationHandler(t,n){let o=ah(t);this._notificationHandlers.set(o,r=>{let i=sh(t,r);return Promise.resolve(n(i))})}removeNotificationHandler(t){this._notificationHandlers.delete(t)}_cleanupTaskProgressHandler(t){let n=this._taskProgressTokens.get(t);n!==void 0&&(this._progressHandlers.delete(n),this._taskProgressTokens.delete(t))}async _enqueueTaskMessage(t,n,o){var i;if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let r=(i=this._options)==null?void 0:i.maxTaskQueueSize;await this._taskMessageQueue.enqueue(t,n,o,r)}async _clearTaskQueue(t,n){if(this._taskMessageQueue){let o=await this._taskMessageQueue.dequeueAll(t,n);for(let r of o)if(r.type==="request"&&Zf(r.message)){let i=r.message.id,a=this._requestResolvers.get(i);a?(a(new F(B.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(i)):this._onerror(new Error(`Resolver missing for request ${i} during task ${t} cleanup`))}}}async _waitForTaskUpdate(t,n){var r,i;let o=((r=this._options)==null?void 0:r.defaultTaskPollInterval)??1e3;try{let a=await((i=this._taskStore)==null?void 0:i.getTask(t));a!=null&&a.pollInterval&&(o=a.pollInterval)}catch{}return new Promise((a,s)=>{if(n.aborted){s(new F(B.InvalidRequest,"Request cancelled"));return}let c=setTimeout(a,o);n.addEventListener("abort",()=>{clearTimeout(c),s(new F(B.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(t,n){let o=this._taskStore;if(!o)throw new Error("No task store configured");return{createTask:async r=>{if(!t)throw new Error("No request provided");return await o.createTask(r,t.id,{method:t.method,params:t.params},n)},getTask:async r=>{let i=await o.getTask(r,n);if(!i)throw new F(B.InvalidParams,"Failed to retrieve task: Task not found");return i},storeTaskResult:async(r,i,a)=>{await o.storeTaskResult(r,i,a,n);let s=await o.getTask(r,n);if(s){let c=xa.parse({method:"notifications/tasks/status",params:s});await this.notification(c),Br(s.status)&&this._cleanupTaskProgressHandler(r)}},getTaskResult:r=>o.getTaskResult(r,n),updateTaskStatus:async(r,i,a)=>{let s=await o.getTask(r,n);if(!s)throw new F(B.InvalidParams,`Task "${r}" not found - it may have been cleaned up`);if(Br(s.status))throw new F(B.InvalidParams,`Cannot update task "${r}" from terminal status "${s.status}" to "${i}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await o.updateTaskStatus(r,i,a,n);let c=await o.getTask(r,n);if(c){let u=xa.parse({method:"notifications/tasks/status",params:c});await this.notification(u),Br(c.status)&&this._cleanupTaskProgressHandler(r)}},listTasks:r=>o.listTasks(r,n)}}};function l$(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function d$(e,t){let n={...e};for(let o in t){let r=o,i=t[r];if(i===void 0)continue;let a=n[r];l$(a)&&l$(i)?n[r]={...a,...i}:n[r]=i}return n}p();var X0=sy(Bg(),1),Y0=sy(G0(),1);function Mj(){let e=new X0.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,Y0.default)(e),e}var vd=class{constructor(t){this._ajv=t??Mj()}getValidator(t){let n="$id"in t&&typeof t.$id=="string"?this._ajv.getSchema(t.$id)??this._ajv.compile(t):this._ajv.compile(t);return o=>n(o)?{valid:!0,data:o,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(n.errors)}}};p();var _d=class{constructor(t){this._server=t}requestStream(t,n,o){return this._server.requestStream(t,n,o)}async getTask(t,n){return this._server.getTask({taskId:t},n)}async getTaskResult(t,n,o){return this._server.getTaskResult({taskId:t},n,o)}async listTasks(t,n){return this._server.listTasks(t?{cursor:t}:void 0,n)}async cancelTask(t,n){return this._server.cancelTask({taskId:t},n)}};p();function Q0(e,t,n){var o;if(!e)throw new Error(`${n} does not support task creation (required for ${t})`);switch(t){case"tools/call":if(!((o=e.tools)!=null&&o.call))throw new Error(`${n} does not support task creation for tools/call (required for ${t})`);break;default:break}}function eS(e,t,n){var o,r;if(!e)throw new Error(`${n} does not support task creation (required for ${t})`);switch(t){case"sampling/createMessage":if(!((o=e.sampling)!=null&&o.createMessage))throw new Error(`${n} does not support task creation for sampling/createMessage (required for ${t})`);break;case"elicitation/create":if(!((r=e.elicitation)!=null&&r.create))throw new Error(`${n} does not support task creation for elicitation/create (required for ${t})`);break;default:break}}var xd=class extends Dl{constructor(t,n){super(n),this._serverInfo=t,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(ba.options.map((o,r)=>[o,r])),this.isMessageIgnored=(o,r)=>{let i=this._loggingLevels.get(r);return i?this.LOG_LEVEL_SEVERITY.get(o)<this.LOG_LEVEL_SEVERITY.get(i):!1},this._capabilities=(n==null?void 0:n.capabilities)??{},this._instructions=n==null?void 0:n.instructions,this._jsonSchemaValidator=(n==null?void 0:n.jsonSchemaValidator)??new vd,this.setRequestHandler(Vf,o=>this._oninitialize(o)),this.setNotificationHandler(qf,()=>{var o;return(o=this.oninitialized)==null?void 0:o.call(this)}),this._capabilities.logging&&this.setRequestHandler(Gf,async(o,r)=>{var c;let i=r.sessionId||((c=r.requestInfo)==null?void 0:c.headers["mcp-session-id"])||void 0,{level:a}=o.params,s=ba.safeParse(a);return s.success&&this._loggingLevels.set(i,s.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new _d(this)}),this._experimental}registerCapabilities(t){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=d$(this._capabilities,t)}setRequestHandler(t,n){var s;let o=qr(t),r=o==null?void 0:o.method;if(!r)throw new Error("Schema is missing a method literal");let i;if(jt(r)){let c=r,u=(s=c._zod)==null?void 0:s.def;i=(u==null?void 0:u.value)??c.value}else{let c=r,u=c._def;i=(u==null?void 0:u.value)??c.value}if(typeof i!="string")throw new Error("Schema method literal must be a string");if(i==="tools/call"){let c=async(u,l)=>{let d=Vr(jo,u);if(!d.success){let h=d.error instanceof Error?d.error.message:String(d.error);throw new F(B.InvalidParams,`Invalid tools/call request: ${h}`)}let{params:m}=d.data,f=await Promise.resolve(n(u,l));if(m.task){let h=Vr(Oo,f);if(!h.success){let _=h.error instanceof Error?h.error.message:String(h.error);throw new F(B.InvalidParams,`Invalid task creation result: ${_}`)}return h.data}let v=Vr(Pl,f);if(!v.success){let h=v.error instanceof Error?v.error.message:String(v.error);throw new F(B.InvalidParams,`Invalid tools/call result: ${h}`)}return v.data};return super.setRequestHandler(t,c)}return super.setRequestHandler(t,n)}assertCapabilityForMethod(t){var n,o,r;switch(t){case"sampling/createMessage":if(!((n=this._clientCapabilities)!=null&&n.sampling))throw new Error(`Client does not support sampling (required for ${t})`);break;case"elicitation/create":if(!((o=this._clientCapabilities)!=null&&o.elicitation))throw new Error(`Client does not support elicitation (required for ${t})`);break;case"roots/list":if(!((r=this._clientCapabilities)!=null&&r.roots))throw new Error(`Client does not support listing roots (required for ${t})`);break;case"ping":break}}assertNotificationCapability(t){var n,o;switch(t){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${t})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${t})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${t})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${t})`);break;case"notifications/elicitation/complete":if(!((o=(n=this._clientCapabilities)==null?void 0:n.elicitation)!=null&&o.url))throw new Error(`Client does not support URL elicitation (required for ${t})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(t){if(this._capabilities)switch(t){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${t})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${t})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${t})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${t})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${t})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${t})`);break;case"ping":case"initialize":break}}assertTaskCapability(t){var n,o;eS((o=(n=this._clientCapabilities)==null?void 0:n.tasks)==null?void 0:o.requests,t,"Client")}assertTaskHandlerCapability(t){var n;this._capabilities&&Q0((n=this._capabilities.tasks)==null?void 0:n.requests,t,"Server")}async _oninitialize(t){let n=t.params.protocolVersion;return this._clientCapabilities=t.params.capabilities,this._clientVersion=t.params.clientInfo,{protocolVersion:fx.includes(n)?n:Af,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},pl)}async createMessage(t,n){var o,r;if((t.tools||t.toolChoice)&&!((r=(o=this._clientCapabilities)==null?void 0:o.sampling)!=null&&r.tools))throw new Error("Client does not support sampling tools capability.");if(t.messages.length>0){let i=t.messages[t.messages.length-1],a=Array.isArray(i.content)?i.content:[i.content],s=a.some(d=>d.type==="tool_result"),c=t.messages.length>1?t.messages[t.messages.length-2]:void 0,u=c?Array.isArray(c.content)?c.content:[c.content]:[],l=u.some(d=>d.type==="tool_use");if(s){if(a.some(d=>d.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!l)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(l){let d=new Set(u.filter(f=>f.type==="tool_use").map(f=>f.id)),m=new Set(a.filter(f=>f.type==="tool_result").map(f=>f.toolUseId));if(d.size!==m.size||![...d].every(f=>m.has(f)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return t.tools?this.request({method:"sampling/createMessage",params:t},Yf,n):this.request({method:"sampling/createMessage",params:t},Xf,n)}async elicitInput(t,n){var r,i,a,s;switch(t.mode??"form"){case"url":{if(!((i=(r=this._clientCapabilities)==null?void 0:r.elicitation)!=null&&i.url))throw new Error("Client does not support url elicitation.");let c=t;return this.request({method:"elicitation/create",params:c},Tl,n)}case"form":{if(!((s=(a=this._clientCapabilities)==null?void 0:a.elicitation)!=null&&s.form))throw new Error("Client does not support form elicitation.");let c=t.mode==="form"?t:{...t,mode:"form"},u=await this.request({method:"elicitation/create",params:c},Tl,n);if(u.action==="accept"&&u.content&&c.requestedSchema)try{let d=this._jsonSchemaValidator.getValidator(c.requestedSchema)(u.content);if(!d.valid)throw new F(B.InvalidParams,`Elicitation response content does not match requested schema: ${d.errorMessage}`)}catch(l){throw l instanceof F?l:new F(B.InternalError,`Error validating elicitation response: ${l instanceof Error?l.message:String(l)}`)}return u}}}createElicitationCompletionNotifier(t,n){var o,r;if(!((r=(o=this._clientCapabilities)==null?void 0:o.elicitation)!=null&&r.url))throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:t}},n)}async listRoots(t,n){return this.request({method:"roots/list",params:t},Qf,n)}async sendLoggingMessage(t,n){if(this._capabilities.logging&&!this.isMessageIgnored(t.level,n))return this.notification({method:"notifications/message",params:t})}async sendResourceUpdated(t){return this.notification({method:"notifications/resources/updated",params:t})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};p();var rS=Symbol.for("mcp.completable");function ey(e){return!!e&&typeof e=="object"&&rS in e}function nS(e){let t=e[rS];return t==null?void 0:t.complete}var tS;(function(e){e.Completable="McpCompletable"})(tS||(tS={}));p();p();var Aj=/^[A-Za-z0-9._-]{1,128}$/;function Cj(e){let t=[];if(e.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(" ")&&t.push("Tool name contains spaces, which may cause parsing issues"),e.includes(",")&&t.push("Tool name contains commas, which may cause parsing issues"),(e.startsWith("-")||e.endsWith("-"))&&t.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(e.startsWith(".")||e.endsWith("."))&&t.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!Aj.test(e)){let n=e.split("").filter(o=>!/[A-Za-z0-9._-]/.test(o)).filter((o,r,i)=>i.indexOf(o)===r);return t.push(`Tool name contains invalid characters: ${n.map(o=>`"${o}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}function Zj(e,t){if(t.length>0){console.warn(`Tool name validation warning for "${e}":`);for(let n of t)console.warn(` - ${n}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function ty(e){let t=Cj(e);return Zj(e,t.warnings),t.isValid}p();var $d=class{constructor(t){this._mcpServer=t}registerToolTask(t,n,o){let r={taskSupport:"required",...n.execution};if(r.taskSupport==="forbidden")throw new Error(`Cannot register task-based tool '${t}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(t,n.title,n.description,n.inputSchema,n.outputSchema,n.annotations,r,n._meta,o)}};p();var bd=class{constructor(t,n){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new xd(t,n)}get experimental(){return this._experimental||(this._experimental={tasks:new $d(this)}),this._experimental}async connect(t){return await this.server.connect(t)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(tn(zl)),this.server.assertCanSetRequestHandler(tn(jo)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(zl,()=>({tools:Object.entries(this._registeredTools).filter(([,t])=>t.enabled).map(([t,n])=>{let o={name:t,title:n.title,description:n.description,inputSchema:(()=>{let r=xo(n.inputSchema);return r?ih(r,{strictUnions:!0,pipeStrategy:"input"}):Uj})(),annotations:n.annotations,execution:n.execution,_meta:n._meta};if(n.outputSchema){let r=xo(n.outputSchema);r&&(o.outputSchema=ih(r,{strictUnions:!0,pipeStrategy:"output"}))}return o})})),this.server.setRequestHandler(jo,async(t,n)=>{var o;try{let r=this._registeredTools[t.params.name];if(!r)throw new F(B.InvalidParams,`Tool ${t.params.name} not found`);if(!r.enabled)throw new F(B.InvalidParams,`Tool ${t.params.name} disabled`);let i=!!t.params.task,a=(o=r.execution)==null?void 0:o.taskSupport,s="createTask"in r.handler;if((a==="required"||a==="optional")&&!s)throw new F(B.InternalError,`Tool ${t.params.name} has taskSupport '${a}' but was not registered with registerToolTask`);if(a==="required"&&!i)throw new F(B.MethodNotFound,`Tool ${t.params.name} requires task augmentation (taskSupport: 'required')`);if(a==="optional"&&!i&&s)return await this.handleAutomaticTaskPolling(r,t,n);let c=await this.validateToolInput(r,t.params.arguments,t.params.name),u=await this.executeToolHandler(r,c,n);return i||await this.validateToolOutput(r,u,t.params.name),u}catch(r){if(r instanceof F&&r.code===B.UrlElicitationRequired)throw r;return this.createToolError(r instanceof Error?r.message:String(r))}}),this._toolHandlersInitialized=!0)}createToolError(t){return{content:[{type:"text",text:t}],isError:!0}}async validateToolInput(t,n,o){if(!t.inputSchema)return;let i=xo(t.inputSchema)??t.inputSchema,a=await Eu(i,n);if(!a.success){let s="error"in a?a.error:"Unknown error",c=Ou(s);throw new F(B.InvalidParams,`Input validation error: Invalid arguments for tool ${o}: ${c}`)}return a.data}async validateToolOutput(t,n,o){if(!t.outputSchema||!("content"in n)||n.isError)return;if(!n.structuredContent)throw new F(B.InvalidParams,`Output validation error: Tool ${o} has an output schema but no structured content was provided`);let r=xo(t.outputSchema),i=await Eu(r,n.structuredContent);if(!i.success){let a="error"in i?i.error:"Unknown error",s=Ou(a);throw new F(B.InvalidParams,`Output validation error: Invalid structured content for tool ${o}: ${s}`)}}async executeToolHandler(t,n,o){let r=t.handler;if("createTask"in r){if(!o.taskStore)throw new Error("No task store provided.");let a={...o,taskStore:o.taskStore};if(t.inputSchema){let s=r;return await Promise.resolve(s.createTask(n,a))}else{let s=r;return await Promise.resolve(s.createTask(a))}}if(t.inputSchema){let a=r;return await Promise.resolve(a(n,o))}else{let a=r;return await Promise.resolve(a(o))}}async handleAutomaticTaskPolling(t,n,o){if(!o.taskStore)throw new Error("No task store provided for task-capable tool.");let r=await this.validateToolInput(t,n.params.arguments,n.params.name),i=t.handler,a={...o,taskStore:o.taskStore},s=r?await Promise.resolve(i.createTask(r,a)):await Promise.resolve(i.createTask(a)),c=s.task.taskId,u=s.task,l=u.pollInterval??5e3;for(;u.status!=="completed"&&u.status!=="failed"&&u.status!=="cancelled";){await new Promise(m=>setTimeout(m,l));let d=await o.taskStore.getTask(c);if(!d)throw new F(B.InternalError,`Task ${c} not found during polling`);u=d}return await o.taskStore.getTaskResult(c)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(tn(El)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(El,async t=>{switch(t.params.ref.type){case"ref/prompt":return Ex(t),this.handlePromptCompletion(t,t.params.ref);case"ref/resource":return Ox(t),this.handleResourceCompletion(t,t.params.ref);default:throw new F(B.InvalidParams,`Invalid completion reference: ${t.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(t,n){let o=this._registeredPrompts[n.name];if(!o)throw new F(B.InvalidParams,`Prompt ${n.name} not found`);if(!o.enabled)throw new F(B.InvalidParams,`Prompt ${n.name} disabled`);if(!o.argsSchema)return Qa;let r=qr(o.argsSchema),i=r==null?void 0:r[t.params.argument.name];if(!ey(i))return Qa;let a=nS(i);if(!a)return Qa;let s=await a(t.params.argument.value,t.params.context);return iS(s)}async handleResourceCompletion(t,n){let o=Object.values(this._registeredResourceTemplates).find(a=>a.resourceTemplate.uriTemplate.toString()===n.uri);if(!o){if(this._registeredResources[n.uri])return Qa;throw new F(B.InvalidParams,`Resource template ${t.params.ref.uri} not found`)}let r=o.resourceTemplate.completeCallback(t.params.argument.name);if(!r)return Qa;let i=await r(t.params.argument.value,t.params.context);return iS(i)}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(tn(bl)),this.server.assertCanSetRequestHandler(tn(Sl)),this.server.assertCanSetRequestHandler(tn(kl)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(bl,async(t,n)=>{let o=Object.entries(this._registeredResources).filter(([i,a])=>a.enabled).map(([i,a])=>({uri:i,name:a.name,...a.metadata})),r=[];for(let i of Object.values(this._registeredResourceTemplates)){if(!i.resourceTemplate.listCallback)continue;let a=await i.resourceTemplate.listCallback(n);for(let s of a.resources)r.push({...i.metadata,...s})}return{resources:[...o,...r]}}),this.server.setRequestHandler(Sl,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([n,o])=>({name:n,uriTemplate:o.resourceTemplate.uriTemplate.toString(),...o.metadata}))})),this.server.setRequestHandler(kl,async(t,n)=>{let o=new URL(t.params.uri),r=this._registeredResources[o.toString()];if(r){if(!r.enabled)throw new F(B.InvalidParams,`Resource ${o} disabled`);return r.readCallback(o,n)}for(let i of Object.values(this._registeredResourceTemplates)){let a=i.resourceTemplate.uriTemplate.match(o.toString());if(a)return i.readCallback(o,a,n)}throw new F(B.InvalidParams,`Resource ${o} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(tn(wl)),this.server.assertCanSetRequestHandler(tn(Il)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(wl,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,t])=>t.enabled).map(([t,n])=>({name:t,title:n.title,description:n.description,arguments:n.argsSchema?Vj(n.argsSchema):void 0}))})),this.server.setRequestHandler(Il,async(t,n)=>{let o=this._registeredPrompts[t.params.name];if(!o)throw new F(B.InvalidParams,`Prompt ${t.params.name} not found`);if(!o.enabled)throw new F(B.InvalidParams,`Prompt ${t.params.name} disabled`);if(o.argsSchema){let r=xo(o.argsSchema),i=await Eu(r,t.params.arguments);if(!i.success){let c="error"in i?i.error:"Unknown error",u=Ou(c);throw new F(B.InvalidParams,`Invalid arguments for prompt ${t.params.name}: ${u}`)}let a=i.data,s=o.callback;return await Promise.resolve(s(a,n))}else{let r=o.callback;return await Promise.resolve(r(n))}}),this._promptHandlersInitialized=!0)}resource(t,n,...o){let r;typeof o[0]=="object"&&(r=o.shift());let i=o[0];if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let a=this._createRegisteredResource(t,void 0,n,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}else{if(this._registeredResourceTemplates[t])throw new Error(`Resource template ${t} is already registered`);let a=this._createRegisteredResourceTemplate(t,void 0,n,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}}registerResource(t,n,o,r){if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let i=this._createRegisteredResource(t,o.title,n,o,r);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}else{if(this._registeredResourceTemplates[t])throw new Error(`Resource template ${t} is already registered`);let i=this._createRegisteredResourceTemplate(t,o.title,n,o,r);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}}_createRegisteredResource(t,n,o,r,i){let a={name:t,title:n,metadata:r,readCallback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({uri:null}),update:s=>{typeof s.uri<"u"&&s.uri!==o&&(delete this._registeredResources[o],s.uri&&(this._registeredResources[s.uri]=a)),typeof s.name<"u"&&(a.name=s.name),typeof s.title<"u"&&(a.title=s.title),typeof s.metadata<"u"&&(a.metadata=s.metadata),typeof s.callback<"u"&&(a.readCallback=s.callback),typeof s.enabled<"u"&&(a.enabled=s.enabled),this.sendResourceListChanged()}};return this._registeredResources[o]=a,a}_createRegisteredResourceTemplate(t,n,o,r,i){let a={resourceTemplate:o,title:n,metadata:r,readCallback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({name:null}),update:u=>{typeof u.name<"u"&&u.name!==t&&(delete this._registeredResourceTemplates[t],u.name&&(this._registeredResourceTemplates[u.name]=a)),typeof u.title<"u"&&(a.title=u.title),typeof u.template<"u"&&(a.resourceTemplate=u.template),typeof u.metadata<"u"&&(a.metadata=u.metadata),typeof u.callback<"u"&&(a.readCallback=u.callback),typeof u.enabled<"u"&&(a.enabled=u.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[t]=a;let s=o.uriTemplate.variableNames;return Array.isArray(s)&&s.some(u=>!!o.completeCallback(u))&&this.setCompletionRequestHandler(),a}_createRegisteredPrompt(t,n,o,r,i){let a={title:n,description:o,argsSchema:r===void 0?void 0:In(r),callback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({name:null}),update:s=>{typeof s.name<"u"&&s.name!==t&&(delete this._registeredPrompts[t],s.name&&(this._registeredPrompts[s.name]=a)),typeof s.title<"u"&&(a.title=s.title),typeof s.description<"u"&&(a.description=s.description),typeof s.argsSchema<"u"&&(a.argsSchema=In(s.argsSchema)),typeof s.callback<"u"&&(a.callback=s.callback),typeof s.enabled<"u"&&(a.enabled=s.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[t]=a,r&&Object.values(r).some(c=>{var l;let u=c instanceof To?(l=c._def)==null?void 0:l.innerType:c;return ey(u)})&&this.setCompletionRequestHandler(),a}_createRegisteredTool(t,n,o,r,i,a,s,c,u){ty(t);let l={title:n,description:o,inputSchema:oS(r),outputSchema:oS(i),annotations:a,execution:s,_meta:c,handler:u,enabled:!0,disable:()=>l.update({enabled:!1}),enable:()=>l.update({enabled:!0}),remove:()=>l.update({name:null}),update:d=>{typeof d.name<"u"&&d.name!==t&&(typeof d.name=="string"&&ty(d.name),delete this._registeredTools[t],d.name&&(this._registeredTools[d.name]=l)),typeof d.title<"u"&&(l.title=d.title),typeof d.description<"u"&&(l.description=d.description),typeof d.paramsSchema<"u"&&(l.inputSchema=In(d.paramsSchema)),typeof d.outputSchema<"u"&&(l.outputSchema=In(d.outputSchema)),typeof d.callback<"u"&&(l.handler=d.callback),typeof d.annotations<"u"&&(l.annotations=d.annotations),typeof d._meta<"u"&&(l._meta=d._meta),typeof d.enabled<"u"&&(l.enabled=d.enabled),this.sendToolListChanged()}};return this._registeredTools[t]=l,this.setToolRequestHandlers(),this.sendToolListChanged(),l}tool(t,...n){if(this._registeredTools[t])throw new Error(`Tool ${t} is already registered`);let o,r,i,a;if(typeof n[0]=="string"&&(o=n.shift()),n.length>1){let c=n[0];ry(c)?(r=n.shift(),n.length>1&&typeof n[0]=="object"&&n[0]!==null&&!ry(n[0])&&(a=n.shift())):typeof c=="object"&&c!==null&&(a=n.shift())}let s=n[0];return this._createRegisteredTool(t,void 0,o,r,i,a,{taskSupport:"forbidden"},void 0,s)}registerTool(t,n,o){if(this._registeredTools[t])throw new Error(`Tool ${t} is already registered`);let{title:r,description:i,inputSchema:a,outputSchema:s,annotations:c,_meta:u}=n;return this._createRegisteredTool(t,r,i,a,s,c,{taskSupport:"forbidden"},u,o)}prompt(t,...n){if(this._registeredPrompts[t])throw new Error(`Prompt ${t} is already registered`);let o;typeof n[0]=="string"&&(o=n.shift());let r;n.length>1&&(r=n.shift());let i=n[0],a=this._createRegisteredPrompt(t,void 0,o,r,i);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),a}registerPrompt(t,n,o){if(this._registeredPrompts[t])throw new Error(`Prompt ${t} is already registered`);let{title:r,description:i,argsSchema:a}=n,s=this._createRegisteredPrompt(t,r,i,a,o);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),s}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(t,n){return this.server.sendLoggingMessage(t,n)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};var Uj={type:"object",properties:{}};function aS(e){return e!==null&&typeof e=="object"&&"parse"in e&&typeof e.parse=="function"&&"safeParse"in e&&typeof e.safeParse=="function"}function Lj(e){return"_def"in e||"_zod"in e||aS(e)}function ry(e){return typeof e!="object"||e===null||Lj(e)?!1:Object.keys(e).length===0?!0:Object.values(e).some(aS)}function oS(e){if(e)return ry(e)?In(e):e}function Vj(e){let t=qr(e);return t?Object.entries(t).map(([n,o])=>{let r=t_(o),i=r_(o);return{name:n,description:r,required:!i}}):[]}function tn(e){let t=qr(e),n=t==null?void 0:t.method;if(!n)throw new Error("Schema is missing a method literal");let o=Ru(n);if(typeof o=="string")return o;throw new Error("Schema method literal must be a string")}function iS(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}var Qa={completion:{values:[],hasMore:!1}};p();import cS from"process";p();var Sd=class{append(t){this._buffer=this._buffer?Buffer.concat([this._buffer,t]):t}readMessage(){if(!this._buffer)return null;let t=this._buffer.indexOf(`
53
53
  `);if(t===-1)return null;let n=this._buffer.toString("utf8",0,t).replace(/\r$/,"");return this._buffer=this._buffer.subarray(t+1),qj(n)}clear(){this._buffer=void 0}};function qj(e){return bx.parse(JSON.parse(e))}function sS(e){return JSON.stringify(e)+`
54
- `}var kd=class{constructor(t=cS.stdin,n=cS.stdout){this._stdin=t,this._stdout=n,this._readBuffer=new Sd,this._started=!1,this._ondata=o=>{this._readBuffer.append(o),this.processReadBuffer()},this._onerror=o=>{var r;(r=this.onerror)==null||r.call(this,o)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){var t,n;for(;;)try{let o=this._readBuffer.readMessage();if(o===null)break;(t=this.onmessage)==null||t.call(this,o)}catch(o){(n=this.onerror)==null||n.call(this,o)}}async close(){var n;this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),(n=this.onclose)==null||n.call(this)}send(t){return new Promise(n=>{let o=sS(t);this._stdout.write(o)?n():this._stdout.once("drain",n)})}};p();p();p();var Fj=e=>e===null,Hj=e=>e===void 0,Bj=(e,t,n=" ")=>{let o=String(e);if(o.length>=t)return o;let r=t-o.length;return n.repeat(Math.ceil(r/n.length)).slice(0,r)+o},Jj=(e,t)=>{if(!Array.isArray(e)||t<1)return[];let n=[];for(let o=0;o<e.length;o+=t)n.push(e.slice(o,o+t));return n},Wj=65535,Kj=32767,Gj=(e,t)=>{if(Hj(e)||Fj(e))return"";let n=Number(e).toString(2)+t,o=parseInt(n,2);return Bj(o.toString(16),2,"0")};var gS=(e,t=1)=>{let n=t===1?ny.sweep:oy.sweep;return Gj(e,n)};var Go=(e,t)=>Number((t/10**e).toFixed(e)),Xj=e=>e>Kj?e-Wj:e,uS=(e,t)=>t+(e<<8),ur=(e,t)=>Go(e,Xj(t));var Yj=e=>e.map(t=>{let n=(t>>>4).toString(16),o=(t&15).toString(16);return`${n}${o}`}).join(""),yS=e=>{try{let t=e.match(/.{1,2}/g);if(!t||t.length===0)return"";let n=new Uint8Array(t.length),o=0;for(let i=0;i<t.length;i++){let a=parseInt(t[i],16);a>31&&a!==127&&(n[o++]=a)}let r=n.slice(0,o);return Array.from(r).map(i=>String.fromCharCode(i)).join("")}catch(t){return console.error(t),""}},Qj=e=>{if(!e)return"";try{let t=e.match(/.{1,2}/g);if(!t)return"";let n=t.filter(o=>{let r=parseInt(o,16);return r>31&&r!==127});return n.length===0?"":decodeURIComponent("%"+n.join("%"))}catch{return console.error("\u4F20\u5165\u7684\u623F\u95F4\u540D\u79F0\u6570\u636E\u6709\u8BEF",e),""}};var vS=e=>{let t=e.length,n=new Uint8Array(t/2);for(let o=0;o<t;o+=2)n[o>>1]=parseInt(e.slice(o,o+2),16);return n},lS=(e,t=1)=>{let n=[];for(let o=0;o<e.length;o+=t*2){let r=e.slice(o,o+t*2),i=parseInt(r,16);n.push(i)}return n},e4=({chargeX:e,chargeY:t},{originX:n,originY:o})=>{if(e<=0&&t<=0)return null;let r=e-n,i=t-o;return{x:r,y:i}},t4=(e,t)=>{let n=e+t;return parseInt(n.slice(-8),2).toString(16).padStart(2,"0")};var Ce=e=>{let t=parseInt(e.slice(0,2),16),n=e.slice(0,t===3?52:48),o=2,r=parseInt(n.slice(o,o+4),16);o+=4;let i=parseInt(n.slice(o,o+2),16)===1;o+=2;let a=parseInt(n.slice(o,o+4),16);o+=4;let s=parseInt(n.slice(o,o+4),16);o+=4;let c=Go(1,parseInt(n.slice(o,o+4),16));o+=4;let u=Go(1,parseInt(n.slice(o,o+4),16));o+=4;let l=Go(2,parseInt(n.slice(o,o+4),16));o+=4;let d=Go(1,parseInt(n.slice(o,o+4),16));o+=4;let m=Go(1,parseInt(n.slice(o,o+4),16)),f;t===3&&(o+=4,f=parseInt(n.slice(o,o+4),16)),o+=4;let v=parseInt(n.slice(o,o+8),16);o+=8;let h=parseInt(n.slice(o,o+4),16),_=e4({chargeX:d,chargeY:m},{originX:c,originY:u});return{mapHeaderStr:n,version:t,id:r,mapStable:i,mapWidth:a,mapHeight:s,originX:c,originY:u,mapResolution:l,chargeX:d,chargeY:m,chargeDirection:f,chargePositionTransformed:_,dataLengthBeforeCompress:v,dataLengthAfterCompress:h}};var r4={"00":"00","01":"f1",10:"f2",11:"ff"},ny={sweep:"00",barrier:"01",battery:"10",unknown:"11"},oy={sweep:"111",barrier:"001",carpet:"010",unknown:"000"},n4={0:{typeMap:ny},1:{typeMap:ny},2:{typeMap:oy},3:{typeMap:oy}};var Ut={NO_ROOM_DATA:"NO_ROOM_DATA",ROOM_GAP:"ROOM_GAP",OBSTACLE_ROOM:"OBSTACLE_ROOM",UNKNOWN_ROOM:"UNKNOWN_ROOM",VERSION0_ROOM:"VERSION0_ROOM"};Math.imul||(Math.imul=function(e,t){let n=e>>>16,o=e&65535,r=t>>>16,i=t&65535;return o*i+(n*i+o*r<<16)|0});var o4=function(e,t,n,o){n=n||0,o=o||e.length-n;for(var r=n,i=o,a=0;r<i;){let u=e[r++],l=u>>4;if(l>0){for(var s=l+240;s===255;)s=e[r++],l+=s;for(var c=r+l;r<c;)t[a++]=e[r++];if(r===i)return a}let d=e[r++]|e[r++]<<8;if(d===0||d>a)return-(r-2);let m=u&15;for(var s=m+240;s===255;)s=e[r++],m+=s;let f=a-d;for(var c=a+m+4;a<c;)t[a++]=t[f++]}return a},_S=(e,t=1024*1024)=>{let n=e instanceof Uint8Array?e:new Uint8Array(e),o=1073741824,r=t;if(t>o)return r=o,console.warn("uncompress\u6240\u9700\u7A7A\u95F4\u8FC7\u5927\uFF0C\u5F3A\u5236\u8BBE\u5B9A\u4E3A1G",t),null;let i=new Uint8Array(r),a=o4(n,i);return i.subarray(0,a)},dS="0123456789abcdef";function wd(e){return dS[e>>4]+dS[e&15]}function pS(e,t){let n=e>>t&3;return r4[n.toString(2).padStart(2,"0")]}var mS=(e,t=1)=>{if(!e||typeof e=="string"&&!e)return[];let n=typeof e=="string"?vS(e):e;if(n.length<2)return[];let o=n[1],r=2,i=[];for(let a=0;a<o&&!(r+26+20+1>n.length);a++){let s=n[r]<<8|n[r+1],c=n[r+2]<<8|n[r+3],u=n[r+4]<<8|n[r+5],l=n[r+6]<<8|n[r+7],d=n[r+8],m=n[r+9]===1,f=n[r+10]===1,v=n[r+11],h=n[r+12],_=n[r+13]===1,$=n[r+14],w=n.subarray(r+15,r+26),R="";for(let ve=0;ve<w.length;ve++)R+=wd(w[ve]);let j=n[r+26],k=r+26+1,U="";if(j>0&&k+j<=n.length){let ve=n.subarray(k,k+j),Tt="";for(let St=0;St<ve.length;St++)Tt+=wd(ve[St]);U=Qj(Tt)}let N=r+26+20,oe=n[N],J=47+oe*4,Y=47,ge=n.subarray(r,r+Y),Ne="";for(let ve=0;ve<ge.length;ve++)Ne+=wd(ge[ve]);let at=t4(s.toString(2),n4[t].typeMap.sweep);i.push({roomId:s,pointHex:at,name:U,order:c,suction:v,cistern:h,colorOrder:d,sweepTimes:u,mopTimes:l,sweepForbidden:m,mopForbidden:f,yMop:_,floorMaterial:$,originStr:Ne,reservedStr:R}),r+=J}return i};function fS(e,t,n,o){let r=e&3,i=e>>2&63;if(r===1&&n.push(t),r===0){let a=i;i===60?a=Ut.NO_ROOM_DATA:i===61?a=Ut.ROOM_GAP:i===62?a=Ut.OBSTACLE_ROOM:i===63&&(a=Ut.UNKNOWN_ROOM),o.has(a)||o.set(a,[]),o.get(a).push(t)}}function i4(e){switch(e){case 28:return Ut.NO_ROOM_DATA;case 29:return Ut.ROOM_GAP;case 30:return Ut.OBSTACLE_ROOM;case 31:return Ut.UNKNOWN_ROOM;default:return}}function hS(e,t,n,o,r){let i=e&7,a=e>>3&31;if(i===1?n.push(t):i===2&&o.push(t),i===2||i===7){let s=i4(a)??a;r.has(s)||r.set(s,[]),r.get(s).push(t)}}var Ze=(e,t,n={})=>{let{mapWidth:o,mapHeight:r,dataLengthAfterCompress:i,dataLengthBeforeCompress:a,mapHeaderStr:s,version:c}=t,u=s.length,{pointsStructured:l=!1}=n,d=!l,m=l,f="",v="",h=o*r,_=m?[]:[],$=m?[]:[],w=m?new Map:new Map,R=null;if(i>0){let U=Math.max(1048576,h*10),N=a;a>U&&(console.warn(`<ray-robot-protocol> abnormal dataLengthBeforeCompress: ${a}, capping for safety`),N=U);let oe=N*4,J=vS(e.slice(u,u+i*2)),Y=_S(J,oe);if(!Y)return{mapRooms:[],mapPointsStr:"",parsed:{obstacles:new Uint32Array,carpet:new Uint32Array,rooms:new Map,width:o,height:r,totalPixels:h}};let ge=Y;if(c===0){let Ne=d?[]:[];m&&w.set(Ut.VERSION0_ROOM,[]);let at=m?w.get(Ut.VERSION0_ROOM):null;for(let ve=0;ve<ge.length;ve++){let Tt=ge[ve];for(let St=0;St<4;St++){let me=6-St*2,Ve=ve*4+St;if(Ve>=h)break;let Zn=Tt>>me&3;if(d&&Ne.push(pS(Tt,me)),m)switch(Zn){case 0:at.push(Ve);break;case 1:_.push(Ve);break}}}d&&(f=Ne.join("").slice(0,h*2)),v=""}else{let Ne=ge.subarray(0,h),at=d?[]:[];for(let me=0;me<Ne.length;me++){let Ve=Ne[me];d&&at.push(wd(Ve)),m&&(c===1?fS(Ve,me,_,w):hS(Ve,me,_,$,w))}d&&(f=at.join(""));let ve=ge.subarray(h),Tt=100*1024,St=ve.length>Tt?ve.subarray(0,Tt):ve;R=mS(St,c)}}else if(c===0){let U=e.slice(u),N=d?[]:[],oe=U.match(/.{2}/g)||[];m&&w.set(Ut.VERSION0_ROOM,[]);let J=m?w.get(Ut.VERSION0_ROOM):null;for(let Y=0;Y<oe.length;Y++){let ge=parseInt(oe[Y],16);for(let Ne=0;Ne<4;Ne++){let at=6-Ne*2,ve=Y*4+Ne;if(ve>=h)break;let Tt=ge>>at&3;if(d&&N.push(pS(ge,at)),m)switch(Tt){case 0:J.push(ve);break;case 1:_.push(ve);break}}}d&&(f=N.join("")),v=""}else{let U=e.slice(u,u+h*2),N=d?[]:[];for(let oe=0;oe<h;oe++){let J=U.slice(oe*2,oe*2+2);if(d&&N.push(J),m){let Y=parseInt(J,16);c===1?fS(Y,oe,_,w):hS(Y,oe,_,$,w)}}d&&(f=N.join("")),v=e.slice(u+h*2)}d&&(f=f.toLowerCase(),o*r*2>f.length&&(f=f.padStart(o*r*2,"f")),o*r*2<f.length&&(f=f.slice(f.length-o*r*2)));let j=R||mS(v,c),k=new Map;return m&&w.forEach((U,N)=>{U.length>0&&k.set(N,new Uint32Array(U))}),{mapRooms:j,mapPointsStr:f,parsed:{obstacles:m?new Uint32Array(_):new Uint32Array,carpet:m?new Uint32Array($):new Uint32Array,rooms:k,width:o,height:r,totalPixels:h}}},Ue=e=>{try{return JSON.parse(yS(e))}catch(t){return console.error(t),{}}};var iy=13,a4={"00":"common",10:"charge","01":"transitions",11:"mop"},rn=e=>{let t=e.slice(0,iy*2),n=parseInt(t.slice(0,2),16),o=parseInt(t.slice(2,6),16),r=parseInt(t.slice(6,8),16),i=parseInt(t.slice(8,10),16),a=parseInt(t.slice(10,18),16),s=parseInt(t.slice(18,22),16),c=parseInt(t.slice(22,26),16);return{version:n,pathId:o,initFlag:r,type:i,count:a,direction:s,dataLengthAfterCompress:c}},nn=(e,t)=>{let{dataLengthAfterCompress:n,count:o}=t,r=[];if(n>0){let a=o*4,s=lS(e.slice(iy*2)),c=_S(s,a);if(!c)return[];let u=Array.from(c);for(let l=0;l<u.length;l+=4){let d=uS(u[l],u[l+1]),m=uS(u[l+2],u[l+3]);r.push([d,m])}}else r=Jj(lS(e.slice(iy*2),2),2);let i=[];for(let a=0;a<r.length;a++){let[s,c]=r[a],u=`${s&1}${c&1}`;i.push({x:ur(1,s&-2),y:-ur(1,c&-2),type:a4[u]})}return i};var xS="13";var $S="49";var bS="1b";var SS="39";var s4="15";var c4="57";var kS="27";var u4="17";var l4="3f";var d4="1d";var p4="1f";var wS="23";var IS="59";var m4="25";var f4="29";var h4="3b";var g4="33";var y4="41";var v4="31";var _4="3d";var x4="43";var $4="2b";var b4="2d";var S4="2f";var k4="35",bF={[xS]:"decodeVirtualWall0x13",[$S]:"decodeVirtualWall0x49",[bS]:"decodeVirtualArea0x1b",[SS]:"decodeVirtualArea0x39",[s4]:"decodeRoomClean0x15",[c4]:"decodeRoomClean0x57",[u4]:"decodeSpotClean0x17",[l4]:"decodeSpotClean0x3f",[f4]:"decodeZoneClean0x29",[h4]:"decodeZoneClean0x3b",[d4]:"decodePartitionDivision0x1d",[p4]:"decodePartitionMerge0x1f",[wS]:"decodeSetRoomProperty0x23",[IS]:"decodeSetRoomProperty0x59",[m4]:"decodeSetRoomName0x25",[$4]:"decodeSaveMap0x2b",[b4]:"decodeDeleteMap0x2d",[S4]:"decodeUseMap0x2f",[kS]:"decodeRoomOrder0x27",[g4]:"decodeDoNotDisturb0x33",[y4]:"decodeDoNotDisturb0x41",[_4]:"decodeQuickMap0x3d",[x4]:"decodeResetMap0x43",[v4]:"decodeDeviceTimer0x31",[k4]:"decodeVoice0x35"};var Cn=(e,t,n="1")=>{let o=w4(e,n);if(o!==t)return console.warn("<ray-robot-protocol>: \u4F20\u5165\u7684\u6570\u636E\u4E0E\u9700\u8981\u89E3\u6790\u7684\u6307\u4EE4\u4E0D\u5339\u914D"),{valid:!1};let r=n==="1"?e.slice(4,12):e.slice(4,6),i=parseInt(r,16),a=n==="1"?e.slice(14,14+(i-1)*2):e.slice(8,8+(i-1)*2);return a.length!==(i-1)*2?(console.warn("<ray-robot-protocol>: \u6570\u636E\u957F\u5EA6\u5B57\u6BB5\u4E0E\u5B9E\u9645\u7684\u6570\u636E\u957F\u5EA6\u4E0D\u5339\u914D"),{valid:!1}):{dataLength:i,cmdStr:o,dataStr:a,valid:!0}};var w4=(e,t="1")=>t==="1"||e.startsWith("ab")?e.slice(12,14):e.slice(6,8);var Xo=e=>{var a;let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,xS,o);return i?((a=r.slice(2).match(/.{16}/g))==null?void 0:a.map(s=>s.match(/.{8}/g).map(c=>{let u=ur(n,parseInt(c.slice(0,4),16)),l=-ur(n,parseInt(c.slice(4),16));return{x:u,y:l}})))??[]:null};var Yo=e=>{var c;let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,$S,o);if(!i)return null;let a=parseInt(r.slice(0,2),16),s=((c=r.slice(4).match(/.{18}/g))==null?void 0:c.map(u=>{let l=parseInt(u.slice(0,2),16),d=u.slice(2).match(/.{8}/g);return{mode:l,points:d.map(m=>{let f=ur(n,parseInt(m.slice(0,4),16)),v=-ur(n,parseInt(m.slice(4),16));return{x:f,y:v}})}}))??[];return{protocolVersion:a,walls:s}};var zS=e=>{let{command:t,version:n="1"}=e,{dataStr:o,valid:r}=Cn(t,kS,n);return r?o.match(/\w{2}/g).slice(1).map(i=>parseInt(i,16)):null};var PS=e=>{let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,bS,o);if(!i)return null;let a=[],s=r.slice(2),c=0;for(;c<s.length-1;){let u=parseInt(s.slice(c,c+2),16);c+=2;let l=parseInt(s.slice(c,c+2),16);c+=2;let d=s.slice(c,c+8*l).match(/.{8}/g),m=[];d.forEach(f=>{let v=ur(n,parseInt(f.slice(0,4),16)),h=-ur(n,parseInt(f.slice(4),16));m.push({x:v,y:h})}),c+=8*l,a.push({mode:u,points:m})}return a};var TS=e=>{let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,SS,o);if(!i)return null;let a=parseInt(r.slice(0,2),16),s=[],c=r.slice(4),u=0;for(;u<c.length-1;){let l=parseInt(c.slice(u,u+2),16);u+=2,a===2&&(u+=2);let d=parseInt(c.slice(u,u+2),16);u+=2;let m=c.slice(u,u+8*d).match(/.{8}/g),f=[];m.forEach(h=>{let _=ur(n,parseInt(h.slice(0,4),16)),$=-ur(n,parseInt(h.slice(4),16));f.push({x:_,y:$})}),u+=8*d,u+=2;let v=yS(Yj(c.slice(u,u+38).match(/.{2}/g).map(h=>parseInt(h,16))))||"";u+=38,s.push({mode:l,points:f,name:v})}return{protocolVersion:a,virtualAreas:s}};var ES=e=>{let{command:t,mapVersion:n=2,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,wS,o);if(!i)return null;let a=[];return r.slice(2).match(/.{10}/g).forEach(s=>{let c=parseInt(s.slice(0,2),16),u=gS(c,n),l=parseInt(s.slice(2,4),16),d=parseInt(s.slice(4,6),16),m=parseInt(s.slice(6,8),16),f=parseInt(s.slice(8,10),16);a.push({roomHexId:u,roomId:c,suction:l,cistern:d,yMop:m,cleanTimes:f})}),a};var OS=e=>{let{command:t,mapVersion:n=2,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,IS,o);if(!i)return null;let a=[];return r.slice(2).match(/.{12}/g).forEach(s=>{let c=parseInt(s.slice(0,2),16),u=gS(c,n),l=parseInt(s.slice(2,4),16),d=parseInt(s.slice(4,6),16),m=parseInt(s.slice(6,8),16),f=parseInt(s.slice(8,10),16),v=parseInt(s.slice(10,12),16);a.push({roomHexId:u,roomId:c,cleanMode:l,suction:d,cistern:m,yMop:f,cleanTimes:v})}),a};p();import ZS from"fs";p();p();var I4="ray-robot-map-sdk",RS=["warn","error"],Id="%c[ray-2d-laser-map-sdk]%c ",z4="%c[ray-2d-laser-map-sdk:DEBUG]%c ",P4="background: #2196F3; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",T4="color: #2196F3;",E4="background: #FF9800; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",O4="color: #FF9800;",R4="background: #F44336; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",j4="color: #F44336;",N4="background: #9C27B0; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",D4="color: #9C27B0;",M4="background: #4CAF50; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",A4="color: #4CAF50;",Sr={},jS=!1;function on(e){if(e)try{return e()}catch{return}}function C4(){let e=on(Sr.getLoggerConfig);if(typeof(e==null?void 0:e.enabled)=="boolean")return e.enabled;let t=on(Sr.isEnabled);if(typeof t=="boolean")return t;let n=on(Sr.getLegacyEnabled);return typeof n=="boolean"?n:import.meta.env.DEV}function Z4(){let e=on(Sr.getLoggerConfig);if(typeof(e==null?void 0:e.tag)=="string"&&e.tag.length>0)return e.tag;let t=on(Sr.getTag);return typeof t=="string"&&t.length>0?t:I4}function zd(e,t,n){return{level:e,message:t,data:n,tag:Z4(),ts:Date.now()}}function U4(e){let t=on(Sr.getLoggerConfig);return typeof(t==null?void 0:t.hostSinkEnabled)=="boolean"?t.hostSinkEnabled?(t.hostLevels??RS).includes(e):!1:on(Sr.isHostSinkEnabled)?(on(Sr.getHostLevels)??RS).includes(e):!1}function Pd(e){if(!U4(e.level))return;let{hostSink:t}=Sr;if(typeof t=="function")try{t(e)}catch(n){if(jS)return;jS=!0,console.warn("[ray-robot-map-sdk] host logger bridge failed",n)}}function es(e,t,n,o,r,i){C4()&&console[e](`${t}${r}`,n,o,...i)}var NS={log(e,...t){let n=zd("info",e,t);es("log",Id,P4,T4,e,t),Pd(n)},warn(e,...t){let n=zd("warn",e,t);es("warn",Id,E4,O4,e,t),Pd(n)},error(e,...t){let n=zd("error",e,t);es("error",Id,R4,j4,e,t),Pd(n)},debug(e,...t){let n=zd("debug",e,t);es("log",z4,N4,D4,e,t),Pd(n)},success(e,...t){es("log",Id,M4,A4,e,t)}};var MS=(e,t)=>{let n=[],o=Math.abs(t.x-e.x),r=Math.abs(t.y-e.y),i=e.x<t.x?1:-1,a=e.y<t.y?1:-1,s=o-r,c=e.x,u=e.y;for(;n.push({x:c,y:u}),!(c===t.x&&u===t.y);){let l=2*s;l>-r&&(s-=r,c+=i),l<o&&(s+=o,u+=a)}return n},Ed=(e,t)=>{let n=0,o=e.length-1;for(;n<=o;){let r=Math.floor((n+o)/2),i=e[r];if(i===t)return!0;i<t?n=r+1:o=r-1}return!1};var AS=e=>{if(e=e.replace(/\s/g,""),!/^[0-9a-fA-F]+$/.test(e))throw new Error("Invalid hex string");let t=e.substring(0,8),n=parseInt(t,16),o=[],r=new Set,i=8;for(let a=0;a<n&&i+10<=e.length;a++){let s=e.substring(i,i+2),c=parseInt(s,16);i+=2;let u=e.substring(i,i+4),l=parseInt(u,16);l>32767&&(l=l-65536),i+=4;let d=e.substring(i,i+4),m=parseInt(d,16);m>32767&&(m=m-65536),i+=4,l=l&-2,m=m&-2;let f=Number((l/10).toFixed(1)),v=Number((-m/10).toFixed(1)),h=`${f},${v}`;r.has(h)||(r.add(h),o.push({signal:c,x:f,y:v}))}return o.length<n&&NS.debug(`Info: Filtered ${n-o.length} duplicate points. Original: ${n}, Unique: ${o.length}`),o};var ay=(e,t,n)=>{let o=(t.x-n.x)**2+(t.y-n.y)**2;if(o===0)return Td(e,t);let r=Math.max(0,Math.min(1,((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o)),i=t.x+r*(n.x-t.x),a=t.y+r*(n.y-t.y);return Td(e,{x:i,y:a})},an=(e,t,n=!1)=>{if(t.length<3)return!1;if(n&&L4(e,t))return!0;let o=!1;for(let r=0,i=t.length-1;r<t.length;i=r++){let a=t[r].x,s=t[r].y,c=t[i].x,u=t[i].y;s>e.y!=u>e.y&&e.x<(c-a)*(e.y-s)/(u-s)+a&&(o=!o)}return o},L4=(e,t)=>{if(t.length<2)return!1;for(let n=0;n<t.length;n++){let o=(n+1)%t.length;if(V4(e,t[n],t[o]))return!0}return!1},V4=(e,t,n,o=.5)=>{if(ay(e,t,n)>o)return!1;let i=Math.min(t.x,n.x)-o,a=Math.max(t.x,n.x)+o,s=Math.min(t.y,n.y)-o,c=Math.max(t.y,n.y)+o;return e.x>=i&&e.x<=a&&e.y>=s&&e.y<=c},DS=e=>{if(e.length===0)return{minX:0,minY:0,maxX:0,maxY:0};let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of e)t=Math.min(t,i.x),n=Math.min(n,i.y),o=Math.max(o,i.x),r=Math.max(r,i.y);return{minX:t,minY:n,maxX:o,maxY:r}};var Td=(e,t)=>{let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)};var CS=(e,t,n,o)=>{let r=(e.x-n.x)*(t.y-n.y)-(e.y-n.y)*(t.x-n.x),i=(e.x-o.x)*(t.y-o.y)-(e.y-o.y)*(t.x-o.x);if(r*i>=0)return null;let a=(n.x-e.x)*(o.y-e.y)-(n.y-e.y)*(o.x-e.x),s=a+r-i;if(a*s>=0)return null;let c=a/(i-r),u=c*(t.x-e.x),l=c*(t.y-e.y);return{x:e.x+u,y:e.y+l}};var Qo=(e,t,n)=>{let o=DS(e),r=DS(t),i=Math.max(0,Math.max(o.minX,r.minX)-Math.min(o.maxX,r.maxX)),a=Math.max(0,Math.max(o.minY,r.minY)-Math.min(o.maxY,r.maxY));if(i>n||a>n)return!1;let[s,c]=[e,t];t.length>e.length&&([s,c]=[t,e]);let u=Math.max(1,Math.floor(n)),l=new Map;for(let m of s){let f=Math.floor(m.x/u),v=Math.floor(m.y/u),h=`${f},${v}`;l.has(h)||l.set(h,[]),l.get(h).push(m)}let d=n*n;for(let m of c){let f=Math.floor(m.x/u),v=Math.floor(m.y/u);for(let h=-1;h<=1;h++)for(let _=-1;_<=1;_++){let $=`${f+h},${v+_}`,w=l.get($);if(w)for(let R of w){let j=m.x-R.x,k=m.y-R.y;if(j*j+k*k<=d)return!0}}}return!1},ei=(e,t,n,o)=>{let[r,i]=[e,t];t.length>e.length&&([r,i]=[t,e]);let a=new Set(r),s=o*o;for(let c=0;c<i.length;c++){let u=i[c],l=u%n,d=Math.floor(u/n);for(let m=-o;m<=o;m++)for(let f=-o;f<=o;f++){let v=l+m,_=(d+f)*n+v;if(a.has(_)&&m*m+f*f<=s)return!0}}return!1};function Le(e){return e.toLowerCase().startsWith("7b22")}function ot(e){let t=[];for(let n=0;n<e.length;n+=2)t.push({x:e[n],y:e[n+1]});return t}function kr(e,t){let n=e.rooms;if(!n)return null;if(Array.isArray(n)){let r=n.find(i=>String(i.id)===String(t));return r&&r.coordinates?ot(r.coordinates):null}let o=n[String(t)];return o?Array.isArray(o)?typeof o[0]=="number"?ot(o):o:o.coordinates?ot(o.coordinates):null:null}function Ie(e,t){return{x:e.x+t.x,y:e.y+t.y}}function $t(e,t,n){let o=e.rooms;if(!o)return null;let r=i=>{if(!i.coordinates)return!1;let a=ot(i.coordinates);return an({x:t,y:n},a)};if(Array.isArray(o)){let i=o.find(r);return i?i.id:null}for(let[i,a]of Object.entries(o)){let s=[];if(Array.isArray(a)?s=typeof a[0]=="number"?ot(a):a:a.coordinates&&(s=ot(a.coordinates)),s.length>0&&an({x:t,y:n},s))return i}return null}function bt(e,t,n,o){var c;let r=Math.round(n),i=Math.round(o);if(r<0||r>=t.mapWidth||i<0||i>=t.mapHeight)return null;let a=i*t.mapWidth+r,s=(c=e==null?void 0:e.parsed)==null?void 0:c.rooms;if(!s)return null;for(let[u,l]of s.entries())if(Ed(l,a))return u;return null}function je(e,t){if(e)return e.trim();if(t){if(ZS.existsSync(t))return ZS.readFileSync(t,"utf8").trim();throw new Error(`File not found: ${t}`)}throw new Error('Either "hex" or "path" parameter must be provided')}var it={hex:L.string().nullish().describe("Raw map Hex string."),path:L.string().nullish().describe("Absolute path to a local file containing the map Hex. (Recommended for large data to avoid token overflow)")};function US(e){e.registerTool("get_map_header",{description:"Parse raw map Hex to extract metadata (supports hex string or file path).",inputSchema:L.object(it)},async({hex:t,path:n})=>{try{let o=je(t,n);if(Le(o)){let s=Ue(o),c=s.rooms||{},u=Array.isArray(c)?c.length:Object.keys(c).length,l={format:"structured",version:s.version,id:s.id,size:s.size,origin:s.origin,resolution:s.resolution,roomCount:u};return{content:[{type:"text",text:`Structured Map Detected (JSON):
54
+ `}var kd=class{constructor(t=cS.stdin,n=cS.stdout){this._stdin=t,this._stdout=n,this._readBuffer=new Sd,this._started=!1,this._ondata=o=>{this._readBuffer.append(o),this.processReadBuffer()},this._onerror=o=>{var r;(r=this.onerror)==null||r.call(this,o)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){var t,n;for(;;)try{let o=this._readBuffer.readMessage();if(o===null)break;(t=this.onmessage)==null||t.call(this,o)}catch(o){(n=this.onerror)==null||n.call(this,o)}}async close(){var n;this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),(n=this.onclose)==null||n.call(this)}send(t){return new Promise(n=>{let o=sS(t);this._stdout.write(o)?n():this._stdout.once("drain",n)})}};p();p();p();var Fj=e=>e===null,Hj=e=>e===void 0,Bj=(e,t,n=" ")=>{let o=String(e);if(o.length>=t)return o;let r=t-o.length;return n.repeat(Math.ceil(r/n.length)).slice(0,r)+o},Jj=(e,t)=>{if(!Array.isArray(e)||t<1)return[];let n=[];for(let o=0;o<e.length;o+=t)n.push(e.slice(o,o+t));return n},Wj=65535,Kj=32767,Gj=(e,t)=>{if(Hj(e)||Fj(e))return"";let n=Number(e).toString(2)+t,o=parseInt(n,2);return Bj(o.toString(16),2,"0")};var gS=(e,t=1)=>{let n=t===1?ny.sweep:oy.sweep;return Gj(e,n)};var Go=(e,t)=>Number((t/10**e).toFixed(e)),Xj=e=>e>Kj?e-Wj:e,uS=(e,t)=>t+(e<<8),ur=(e,t)=>Go(e,Xj(t));var Yj=e=>e.map(t=>{let n=(t>>>4).toString(16),o=(t&15).toString(16);return`${n}${o}`}).join(""),yS=e=>{try{let t=e.match(/.{1,2}/g);if(!t||t.length===0)return"";let n=new Uint8Array(t.length),o=0;for(let i=0;i<t.length;i++){let a=parseInt(t[i],16);a>31&&a!==127&&(n[o++]=a)}let r=n.slice(0,o);return Array.from(r).map(i=>String.fromCharCode(i)).join("")}catch(t){return console.error(t),""}},Qj=e=>{if(!e)return"";try{let t=e.match(/.{1,2}/g);if(!t)return"";let n=t.filter(o=>{let r=parseInt(o,16);return r>31&&r!==127});return n.length===0?"":decodeURIComponent("%"+n.join("%"))}catch{return console.error("\u4F20\u5165\u7684\u623F\u95F4\u540D\u79F0\u6570\u636E\u6709\u8BEF",e),""}};var vS=e=>{let t=e.length,n=new Uint8Array(t/2);for(let o=0;o<t;o+=2)n[o>>1]=parseInt(e.slice(o,o+2),16);return n},lS=(e,t=1)=>{let n=[];for(let o=0;o<e.length;o+=t*2){let r=e.slice(o,o+t*2),i=parseInt(r,16);n.push(i)}return n},e4=({chargeX:e,chargeY:t},{originX:n,originY:o})=>{if(e<=0&&t<=0)return null;let r=e-n,i=t-o;return{x:r,y:i}},t4=(e,t)=>{let n=e+t;return parseInt(n.slice(-8),2).toString(16).padStart(2,"0")};var Ce=e=>{let t=parseInt(e.slice(0,2),16),n=e.slice(0,t===3?52:48),o=2,r=parseInt(n.slice(o,o+4),16);o+=4;let i=parseInt(n.slice(o,o+2),16)===1;o+=2;let a=parseInt(n.slice(o,o+4),16);o+=4;let s=parseInt(n.slice(o,o+4),16);o+=4;let c=Go(1,parseInt(n.slice(o,o+4),16));o+=4;let u=Go(1,parseInt(n.slice(o,o+4),16));o+=4;let l=Go(2,parseInt(n.slice(o,o+4),16));o+=4;let d=Go(1,parseInt(n.slice(o,o+4),16));o+=4;let m=Go(1,parseInt(n.slice(o,o+4),16)),f;t===3&&(o+=4,f=parseInt(n.slice(o,o+4),16)),o+=4;let v=parseInt(n.slice(o,o+8),16);o+=8;let h=parseInt(n.slice(o,o+4),16),_=e4({chargeX:d,chargeY:m},{originX:c,originY:u});return{mapHeaderStr:n,version:t,id:r,mapStable:i,mapWidth:a,mapHeight:s,originX:c,originY:u,mapResolution:l,chargeX:d,chargeY:m,chargeDirection:f,chargePositionTransformed:_,dataLengthBeforeCompress:v,dataLengthAfterCompress:h}};var r4={"00":"00","01":"f1",10:"f2",11:"ff"},ny={sweep:"00",barrier:"01",battery:"10",unknown:"11"},oy={sweep:"111",barrier:"001",carpet:"010",unknown:"000"},n4={0:{typeMap:ny},1:{typeMap:ny},2:{typeMap:oy},3:{typeMap:oy}};var Ut={NO_ROOM_DATA:"NO_ROOM_DATA",ROOM_GAP:"ROOM_GAP",OBSTACLE_ROOM:"OBSTACLE_ROOM",UNKNOWN_ROOM:"UNKNOWN_ROOM",VERSION0_ROOM:"VERSION0_ROOM"};Math.imul||(Math.imul=function(e,t){let n=e>>>16,o=e&65535,r=t>>>16,i=t&65535;return o*i+(n*i+o*r<<16)|0});var o4=function(e,t,n,o){n=n||0,o=o||e.length-n;for(var r=n,i=o,a=0;r<i;){let u=e[r++],l=u>>4;if(l>0){for(var s=l+240;s===255;)s=e[r++],l+=s;for(var c=r+l;r<c;)t[a++]=e[r++];if(r===i)return a}let d=e[r++]|e[r++]<<8;if(d===0||d>a)return-(r-2);let m=u&15;for(var s=m+240;s===255;)s=e[r++],m+=s;let f=a-d;for(var c=a+m+4;a<c;)t[a++]=t[f++]}return a},_S=(e,t=1024*1024)=>{let n=e instanceof Uint8Array?e:new Uint8Array(e),o=1073741824,r=t;if(t>o)return r=o,console.warn("uncompress\u6240\u9700\u7A7A\u95F4\u8FC7\u5927\uFF0C\u5F3A\u5236\u8BBE\u5B9A\u4E3A1G",t),null;let i=new Uint8Array(r),a=o4(n,i);return i.subarray(0,a)},dS="0123456789abcdef";function wd(e){return dS[e>>4]+dS[e&15]}function pS(e,t){let n=e>>t&3;return r4[n.toString(2).padStart(2,"0")]}var mS=(e,t=1)=>{if(!e||typeof e=="string"&&!e)return[];let n=typeof e=="string"?vS(e):e;if(n.length<2)return[];let o=n[1],r=2,i=[];for(let a=0;a<o&&!(r+26+20+1>n.length);a++){let s=n[r]<<8|n[r+1],c=n[r+2]<<8|n[r+3],u=n[r+4]<<8|n[r+5],l=n[r+6]<<8|n[r+7],d=n[r+8],m=n[r+9]===1,f=n[r+10]===1,v=n[r+11],h=n[r+12],_=n[r+13]===1,$=n[r+14],w=n.subarray(r+15,r+26),R="";for(let ve=0;ve<w.length;ve++)R+=wd(w[ve]);let j=n[r+26],k=r+26+1,U="";if(j>0&&k+j<=n.length){let ve=n.subarray(k,k+j),Tt="";for(let St=0;St<ve.length;St++)Tt+=wd(ve[St]);U=Qj(Tt)}let N=r+26+20,oe=n[N],J=47+oe*4,Y=47,ge=n.subarray(r,r+Y),Ne="";for(let ve=0;ve<ge.length;ve++)Ne+=wd(ge[ve]);let at=t4(s.toString(2),n4[t].typeMap.sweep);i.push({roomId:s,pointHex:at,name:U,order:c,suction:v,cistern:h,colorOrder:d,sweepTimes:u,mopTimes:l,sweepForbidden:m,mopForbidden:f,yMop:_,floorMaterial:$,originStr:Ne,reservedStr:R}),r+=J}return i};function fS(e,t,n,o){let r=e&3,i=e>>2&63;if(r===1&&n.push(t),r===0){let a=i;i===60?a=Ut.NO_ROOM_DATA:i===61?a=Ut.ROOM_GAP:i===62?a=Ut.OBSTACLE_ROOM:i===63&&(a=Ut.UNKNOWN_ROOM),o.has(a)||o.set(a,[]),o.get(a).push(t)}}function i4(e){switch(e){case 28:return Ut.NO_ROOM_DATA;case 29:return Ut.ROOM_GAP;case 30:return Ut.OBSTACLE_ROOM;case 31:return Ut.UNKNOWN_ROOM;default:return}}function hS(e,t,n,o,r){let i=e&7,a=e>>3&31;if(i===1?n.push(t):i===2&&o.push(t),i===2||i===7){let s=i4(a)??a;r.has(s)||r.set(s,[]),r.get(s).push(t)}}var Ze=(e,t,n={})=>{let{mapWidth:o,mapHeight:r,dataLengthAfterCompress:i,dataLengthBeforeCompress:a,mapHeaderStr:s,version:c}=t,u=s.length,{pointsStructured:l=!1}=n,d=!l,m=l,f="",v="",h=o*r,_=m?[]:[],$=m?[]:[],w=m?new Map:new Map,R=null;if(i>0){let U=Math.max(1048576,h*10),N=a;a>U&&(console.warn(`<ray-robot-protocol> abnormal dataLengthBeforeCompress: ${a}, capping for safety`),N=U);let oe=N*4,J=vS(e.slice(u,u+i*2)),Y=_S(J,oe);if(!Y)return{mapRooms:[],mapPointsStr:"",parsed:{obstacles:new Uint32Array,carpet:new Uint32Array,rooms:new Map,width:o,height:r,totalPixels:h}};let ge=Y;if(c===0){let Ne=d?[]:[];m&&w.set(Ut.VERSION0_ROOM,[]);let at=m?w.get(Ut.VERSION0_ROOM):null;for(let ve=0;ve<ge.length;ve++){let Tt=ge[ve];for(let St=0;St<4;St++){let me=6-St*2,Ve=ve*4+St;if(Ve>=h)break;let Zn=Tt>>me&3;if(d&&Ne.push(pS(Tt,me)),m)switch(Zn){case 0:at.push(Ve);break;case 1:_.push(Ve);break}}}d&&(f=Ne.join("").slice(0,h*2)),v=""}else{let Ne=ge.subarray(0,h),at=d?[]:[];for(let me=0;me<Ne.length;me++){let Ve=Ne[me];d&&at.push(wd(Ve)),m&&(c===1?fS(Ve,me,_,w):hS(Ve,me,_,$,w))}d&&(f=at.join(""));let ve=ge.subarray(h),Tt=100*1024,St=ve.length>Tt?ve.subarray(0,Tt):ve;R=mS(St,c)}}else if(c===0){let U=e.slice(u),N=d?[]:[],oe=U.match(/.{2}/g)||[];m&&w.set(Ut.VERSION0_ROOM,[]);let J=m?w.get(Ut.VERSION0_ROOM):null;for(let Y=0;Y<oe.length;Y++){let ge=parseInt(oe[Y],16);for(let Ne=0;Ne<4;Ne++){let at=6-Ne*2,ve=Y*4+Ne;if(ve>=h)break;let Tt=ge>>at&3;if(d&&N.push(pS(ge,at)),m)switch(Tt){case 0:J.push(ve);break;case 1:_.push(ve);break}}}d&&(f=N.join("")),v=""}else{let U=e.slice(u,u+h*2),N=d?[]:[];for(let oe=0;oe<h;oe++){let J=U.slice(oe*2,oe*2+2);if(d&&N.push(J),m){let Y=parseInt(J,16);c===1?fS(Y,oe,_,w):hS(Y,oe,_,$,w)}}d&&(f=N.join("")),v=e.slice(u+h*2)}d&&(f=f.toLowerCase(),o*r*2>f.length&&(f=f.padStart(o*r*2,"f")),o*r*2<f.length&&(f=f.slice(f.length-o*r*2)));let j=R||mS(v,c),k=new Map;return m&&w.forEach((U,N)=>{U.length>0&&k.set(N,new Uint32Array(U))}),{mapRooms:j,mapPointsStr:f,parsed:{obstacles:m?new Uint32Array(_):new Uint32Array,carpet:m?new Uint32Array($):new Uint32Array,rooms:k,width:o,height:r,totalPixels:h}}},Ue=e=>{try{return JSON.parse(yS(e))}catch(t){return console.error(t),{}}};var iy=13,a4={"00":"common",10:"charge","01":"transitions",11:"mop"},rn=e=>{let t=e.slice(0,iy*2),n=parseInt(t.slice(0,2),16),o=parseInt(t.slice(2,6),16),r=parseInt(t.slice(6,8),16),i=parseInt(t.slice(8,10),16),a=parseInt(t.slice(10,18),16),s=parseInt(t.slice(18,22),16),c=parseInt(t.slice(22,26),16);return{version:n,pathId:o,initFlag:r,type:i,count:a,direction:s,dataLengthAfterCompress:c}},nn=(e,t)=>{let{dataLengthAfterCompress:n,count:o}=t,r=[];if(n>0){let a=o*4,s=lS(e.slice(iy*2)),c=_S(s,a);if(!c)return[];let u=Array.from(c);for(let l=0;l<u.length;l+=4){let d=uS(u[l],u[l+1]),m=uS(u[l+2],u[l+3]);r.push([d,m])}}else r=Jj(lS(e.slice(iy*2),2),2);let i=[];for(let a=0;a<r.length;a++){let[s,c]=r[a],u=`${s&1}${c&1}`;i.push({x:ur(1,s&-2),y:-ur(1,c&-2),type:a4[u]})}return i};var xS="13";var $S="49";var bS="1b";var SS="39";var s4="15";var c4="57";var kS="27";var u4="17";var l4="3f";var d4="1d";var p4="1f";var wS="23";var IS="59";var m4="25";var f4="29";var h4="3b";var g4="33";var y4="41";var v4="31";var _4="3d";var x4="43";var $4="2b";var b4="2d";var S4="2f";var k4="35",bF={[xS]:"decodeVirtualWall0x13",[$S]:"decodeVirtualWall0x49",[bS]:"decodeVirtualArea0x1b",[SS]:"decodeVirtualArea0x39",[s4]:"decodeRoomClean0x15",[c4]:"decodeRoomClean0x57",[u4]:"decodeSpotClean0x17",[l4]:"decodeSpotClean0x3f",[f4]:"decodeZoneClean0x29",[h4]:"decodeZoneClean0x3b",[d4]:"decodePartitionDivision0x1d",[p4]:"decodePartitionMerge0x1f",[wS]:"decodeSetRoomProperty0x23",[IS]:"decodeSetRoomProperty0x59",[m4]:"decodeSetRoomName0x25",[$4]:"decodeSaveMap0x2b",[b4]:"decodeDeleteMap0x2d",[S4]:"decodeUseMap0x2f",[kS]:"decodeRoomOrder0x27",[g4]:"decodeDoNotDisturb0x33",[y4]:"decodeDoNotDisturb0x41",[_4]:"decodeQuickMap0x3d",[x4]:"decodeResetMap0x43",[v4]:"decodeDeviceTimer0x31",[k4]:"decodeVoice0x35"};var Cn=(e,t,n="1")=>{let o=w4(e,n);if(o!==t)return console.warn("<ray-robot-protocol>: \u4F20\u5165\u7684\u6570\u636E\u4E0E\u9700\u8981\u89E3\u6790\u7684\u6307\u4EE4\u4E0D\u5339\u914D"),{valid:!1};let r=n==="1"?e.slice(4,12):e.slice(4,6),i=parseInt(r,16),a=n==="1"?e.slice(14,14+(i-1)*2):e.slice(8,8+(i-1)*2);return a.length!==(i-1)*2?(console.warn("<ray-robot-protocol>: \u6570\u636E\u957F\u5EA6\u5B57\u6BB5\u4E0E\u5B9E\u9645\u7684\u6570\u636E\u957F\u5EA6\u4E0D\u5339\u914D"),{valid:!1}):{dataLength:i,cmdStr:o,dataStr:a,valid:!0}};var w4=(e,t="1")=>t==="1"||e.startsWith("ab")?e.slice(12,14):e.slice(6,8);var Xo=e=>{var a;let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,xS,o);return i?((a=r.slice(2).match(/.{16}/g))==null?void 0:a.map(s=>s.match(/.{8}/g).map(c=>{let u=ur(n,parseInt(c.slice(0,4),16)),l=-ur(n,parseInt(c.slice(4),16));return{x:u,y:l}})))??[]:null};var Yo=e=>{var c;let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,$S,o);if(!i)return null;let a=parseInt(r.slice(0,2),16),s=((c=r.slice(4).match(/.{18}/g))==null?void 0:c.map(u=>{let l=parseInt(u.slice(0,2),16),d=u.slice(2).match(/.{8}/g);return{mode:l,points:d.map(m=>{let f=ur(n,parseInt(m.slice(0,4),16)),v=-ur(n,parseInt(m.slice(4),16));return{x:f,y:v}})}}))??[];return{protocolVersion:a,walls:s}};var zS=e=>{let{command:t,version:n="1"}=e,{dataStr:o,valid:r}=Cn(t,kS,n);return r?o.match(/\w{2}/g).slice(1).map(i=>parseInt(i,16)):null};var PS=e=>{let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,bS,o);if(!i)return null;let a=[],s=r.slice(2),c=0;for(;c<s.length-1;){let u=parseInt(s.slice(c,c+2),16);c+=2;let l=parseInt(s.slice(c,c+2),16);c+=2;let d=s.slice(c,c+8*l).match(/.{8}/g),m=[];d.forEach(f=>{let v=ur(n,parseInt(f.slice(0,4),16)),h=-ur(n,parseInt(f.slice(4),16));m.push({x:v,y:h})}),c+=8*l,a.push({mode:u,points:m})}return a};var TS=e=>{let{command:t,mapScale:n=1,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,SS,o);if(!i)return null;let a=parseInt(r.slice(0,2),16),s=[],c=r.slice(4),u=0;for(;u<c.length-1;){let l=parseInt(c.slice(u,u+2),16);u+=2,a===2&&(u+=2);let d=parseInt(c.slice(u,u+2),16);u+=2;let m=c.slice(u,u+8*d).match(/.{8}/g),f=[];m.forEach(h=>{let _=ur(n,parseInt(h.slice(0,4),16)),$=-ur(n,parseInt(h.slice(4),16));f.push({x:_,y:$})}),u+=8*d,u+=2;let v=yS(Yj(c.slice(u,u+38).match(/.{2}/g).map(h=>parseInt(h,16))))||"";u+=38,s.push({mode:l,points:f,name:v})}return{protocolVersion:a,virtualAreas:s}};var ES=e=>{let{command:t,mapVersion:n=2,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,wS,o);if(!i)return null;let a=[];return r.slice(2).match(/.{10}/g).forEach(s=>{let c=parseInt(s.slice(0,2),16),u=gS(c,n),l=parseInt(s.slice(2,4),16),d=parseInt(s.slice(4,6),16),m=parseInt(s.slice(6,8),16),f=parseInt(s.slice(8,10),16);a.push({roomHexId:u,roomId:c,suction:l,cistern:d,yMop:m,cleanTimes:f})}),a};var OS=e=>{let{command:t,mapVersion:n=2,version:o="1"}=e,{dataStr:r,valid:i}=Cn(t,IS,o);if(!i)return null;let a=[];return r.slice(2).match(/.{12}/g).forEach(s=>{let c=parseInt(s.slice(0,2),16),u=gS(c,n),l=parseInt(s.slice(2,4),16),d=parseInt(s.slice(4,6),16),m=parseInt(s.slice(6,8),16),f=parseInt(s.slice(8,10),16),v=parseInt(s.slice(10,12),16);a.push({roomHexId:u,roomId:c,cleanMode:l,suction:d,cistern:m,yMop:f,cleanTimes:v})}),a};p();import ZS from"fs";p();p();var I4="ray-robot-map-sdk",RS=["warn","error"],Id="%c[ray-2d-laser-map-sdk]%c ",z4="%c[ray-2d-laser-map-sdk:DEBUG]%c ",P4="background: #2196F3; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",T4="color: #2196F3;",E4="background: #FF9800; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",O4="color: #FF9800;",R4="background: #F44336; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",j4="color: #F44336;",N4="background: #9C27B0; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",D4="color: #9C27B0;",M4="background: #4CAF50; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",A4="color: #4CAF50;",Sr={},jS=!1;function on(e){if(e)try{return e()}catch{return}}function C4(){let e=on(Sr.getLoggerConfig);if(typeof(e==null?void 0:e.enabled)=="boolean")return e.enabled;let t=on(Sr.isEnabled);if(typeof t=="boolean")return t;let n=on(Sr.getLegacyEnabled);return typeof n=="boolean"?n:import.meta.env.DEV}function Z4(){let e=on(Sr.getLoggerConfig);if(typeof(e==null?void 0:e.tag)=="string"&&e.tag.length>0)return e.tag;let t=on(Sr.getTag);return typeof t=="string"&&t.length>0?t:I4}function zd(e,t,n){return{level:e,message:t,data:n,tag:Z4(),ts:Date.now()}}function U4(e){let t=on(Sr.getLoggerConfig);return typeof(t==null?void 0:t.appLogEnabled)=="boolean"?t.appLogEnabled?(t.appLogLevels??RS).includes(e):!1:on(Sr.isAppLogEnabled)?(on(Sr.getAppLogLevels)??RS).includes(e):!1}function Pd(e){if(!U4(e.level))return;let{appLogSink:t}=Sr;if(typeof t=="function")try{t(e)}catch(n){if(jS)return;jS=!0,console.warn("[ray-robot-map-sdk] app logger bridge failed",n)}}function es(e,t,n,o,r,i){C4()&&console[e](`${t}${r}`,n,o,...i)}var NS={log(e,...t){let n=zd("info",e,t);es("log",Id,P4,T4,e,t),Pd(n)},warn(e,...t){let n=zd("warn",e,t);es("warn",Id,E4,O4,e,t),Pd(n)},error(e,...t){let n=zd("error",e,t);es("error",Id,R4,j4,e,t),Pd(n)},debug(e,...t){let n=zd("debug",e,t);es("log",z4,N4,D4,e,t),Pd(n)},success(e,...t){es("log",Id,M4,A4,e,t)}};var MS=(e,t)=>{let n=[],o=Math.abs(t.x-e.x),r=Math.abs(t.y-e.y),i=e.x<t.x?1:-1,a=e.y<t.y?1:-1,s=o-r,c=e.x,u=e.y;for(;n.push({x:c,y:u}),!(c===t.x&&u===t.y);){let l=2*s;l>-r&&(s-=r,c+=i),l<o&&(s+=o,u+=a)}return n},Ed=(e,t)=>{let n=0,o=e.length-1;for(;n<=o;){let r=Math.floor((n+o)/2),i=e[r];if(i===t)return!0;i<t?n=r+1:o=r-1}return!1};var AS=e=>{if(e=e.replace(/\s/g,""),!/^[0-9a-fA-F]+$/.test(e))throw new Error("Invalid hex string");let t=e.substring(0,8),n=parseInt(t,16),o=[],r=new Set,i=8;for(let a=0;a<n&&i+10<=e.length;a++){let s=e.substring(i,i+2),c=parseInt(s,16);i+=2;let u=e.substring(i,i+4),l=parseInt(u,16);l>32767&&(l=l-65536),i+=4;let d=e.substring(i,i+4),m=parseInt(d,16);m>32767&&(m=m-65536),i+=4,l=l&-2,m=m&-2;let f=Number((l/10).toFixed(1)),v=Number((-m/10).toFixed(1)),h=`${f},${v}`;r.has(h)||(r.add(h),o.push({signal:c,x:f,y:v}))}return o.length<n&&NS.debug(`Info: Filtered ${n-o.length} duplicate points. Original: ${n}, Unique: ${o.length}`),o};var ay=(e,t,n)=>{let o=(t.x-n.x)**2+(t.y-n.y)**2;if(o===0)return Td(e,t);let r=Math.max(0,Math.min(1,((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o)),i=t.x+r*(n.x-t.x),a=t.y+r*(n.y-t.y);return Td(e,{x:i,y:a})},an=(e,t,n=!1)=>{if(t.length<3)return!1;if(n&&L4(e,t))return!0;let o=!1;for(let r=0,i=t.length-1;r<t.length;i=r++){let a=t[r].x,s=t[r].y,c=t[i].x,u=t[i].y;s>e.y!=u>e.y&&e.x<(c-a)*(e.y-s)/(u-s)+a&&(o=!o)}return o},L4=(e,t)=>{if(t.length<2)return!1;for(let n=0;n<t.length;n++){let o=(n+1)%t.length;if(V4(e,t[n],t[o]))return!0}return!1},V4=(e,t,n,o=.5)=>{if(ay(e,t,n)>o)return!1;let i=Math.min(t.x,n.x)-o,a=Math.max(t.x,n.x)+o,s=Math.min(t.y,n.y)-o,c=Math.max(t.y,n.y)+o;return e.x>=i&&e.x<=a&&e.y>=s&&e.y<=c},DS=e=>{if(e.length===0)return{minX:0,minY:0,maxX:0,maxY:0};let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of e)t=Math.min(t,i.x),n=Math.min(n,i.y),o=Math.max(o,i.x),r=Math.max(r,i.y);return{minX:t,minY:n,maxX:o,maxY:r}};var Td=(e,t)=>{let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)};var CS=(e,t,n,o)=>{let r=(e.x-n.x)*(t.y-n.y)-(e.y-n.y)*(t.x-n.x),i=(e.x-o.x)*(t.y-o.y)-(e.y-o.y)*(t.x-o.x);if(r*i>=0)return null;let a=(n.x-e.x)*(o.y-e.y)-(n.y-e.y)*(o.x-e.x),s=a+r-i;if(a*s>=0)return null;let c=a/(i-r),u=c*(t.x-e.x),l=c*(t.y-e.y);return{x:e.x+u,y:e.y+l}};var Qo=(e,t,n)=>{let o=DS(e),r=DS(t),i=Math.max(0,Math.max(o.minX,r.minX)-Math.min(o.maxX,r.maxX)),a=Math.max(0,Math.max(o.minY,r.minY)-Math.min(o.maxY,r.maxY));if(i>n||a>n)return!1;let[s,c]=[e,t];t.length>e.length&&([s,c]=[t,e]);let u=Math.max(1,Math.floor(n)),l=new Map;for(let m of s){let f=Math.floor(m.x/u),v=Math.floor(m.y/u),h=`${f},${v}`;l.has(h)||l.set(h,[]),l.get(h).push(m)}let d=n*n;for(let m of c){let f=Math.floor(m.x/u),v=Math.floor(m.y/u);for(let h=-1;h<=1;h++)for(let _=-1;_<=1;_++){let $=`${f+h},${v+_}`,w=l.get($);if(w)for(let R of w){let j=m.x-R.x,k=m.y-R.y;if(j*j+k*k<=d)return!0}}}return!1},ei=(e,t,n,o)=>{let[r,i]=[e,t];t.length>e.length&&([r,i]=[t,e]);let a=new Set(r),s=o*o;for(let c=0;c<i.length;c++){let u=i[c],l=u%n,d=Math.floor(u/n);for(let m=-o;m<=o;m++)for(let f=-o;f<=o;f++){let v=l+m,_=(d+f)*n+v;if(a.has(_)&&m*m+f*f<=s)return!0}}return!1};function Le(e){return e.toLowerCase().startsWith("7b22")}function ot(e){let t=[];for(let n=0;n<e.length;n+=2)t.push({x:e[n],y:e[n+1]});return t}function kr(e,t){let n=e.rooms;if(!n)return null;if(Array.isArray(n)){let r=n.find(i=>String(i.id)===String(t));return r&&r.coordinates?ot(r.coordinates):null}let o=n[String(t)];return o?Array.isArray(o)?typeof o[0]=="number"?ot(o):o:o.coordinates?ot(o.coordinates):null:null}function Ie(e,t){return{x:e.x+t.x,y:e.y+t.y}}function $t(e,t,n){let o=e.rooms;if(!o)return null;let r=i=>{if(!i.coordinates)return!1;let a=ot(i.coordinates);return an({x:t,y:n},a)};if(Array.isArray(o)){let i=o.find(r);return i?i.id:null}for(let[i,a]of Object.entries(o)){let s=[];if(Array.isArray(a)?s=typeof a[0]=="number"?ot(a):a:a.coordinates&&(s=ot(a.coordinates)),s.length>0&&an({x:t,y:n},s))return i}return null}function bt(e,t,n,o){var c;let r=Math.round(n),i=Math.round(o);if(r<0||r>=t.mapWidth||i<0||i>=t.mapHeight)return null;let a=i*t.mapWidth+r,s=(c=e==null?void 0:e.parsed)==null?void 0:c.rooms;if(!s)return null;for(let[u,l]of s.entries())if(Ed(l,a))return u;return null}function je(e,t){if(e)return e.trim();if(t){if(ZS.existsSync(t))return ZS.readFileSync(t,"utf8").trim();throw new Error(`File not found: ${t}`)}throw new Error('Either "hex" or "path" parameter must be provided')}var it={hex:L.string().nullish().describe("Raw map Hex string."),path:L.string().nullish().describe("Absolute path to a local file containing the map Hex. (Recommended for large data to avoid token overflow)")};function US(e){e.registerTool("get_map_header",{description:"Parse raw map Hex to extract metadata (supports hex string or file path).",inputSchema:L.object(it)},async({hex:t,path:n})=>{try{let o=je(t,n);if(Le(o)){let s=Ue(o),c=s.rooms||{},u=Array.isArray(c)?c.length:Object.keys(c).length,l={format:"structured",version:s.version,id:s.id,size:s.size,origin:s.origin,resolution:s.resolution,roomCount:u};return{content:[{type:"text",text:`Structured Map Detected (JSON):
55
55
  ${JSON.stringify(l,null,2)}`}],structuredData:l}}let r=Ce(o),i=Ze(o,r,{pointsStructured:!1}),a={format:"raster",...r,roomMetadataCount:i.mapRooms.length};return{content:[{type:"text",text:`Raster Map Detected (Binary):
56
56
  ${JSON.stringify(a,null,2)}`}],structuredData:a}}catch(o){return{isError:!0,content:[{type:"text",text:`Failed to decode map header: ${o instanceof Error?o.message:String(o)}`}]}}})}p();function LS(e){e.registerTool("analyze_points",{description:"Extract raw coordinate points from the map (supports hex string or file path).",inputSchema:L.object({...it,feature:L.enum(["obstacles","carpet","room","free"]).describe("The type of feature to analyze."),roomId:L.union([L.number(),L.string()]).optional().describe("Required if feature is 'room'.")})},async({hex:t,path:n,feature:o,roomId:r})=>{var i,a,s;try{let c=je(t,n);if(Le(c)){let _=Ue(c),$=null,w=o;if(o==="obstacles")$=Array.isArray((i=_.obstacles)==null?void 0:i[0])?_.obstacles:_.obstacles?ot(_.obstacles):null;else if(o==="carpet")$=Array.isArray((a=_.carpet)==null?void 0:a[0])?_.carpet:_.carpet?ot(_.carpet):null;else if(o==="free")$=Array.isArray((s=_.free)==null?void 0:s[0])?_.free:_.free?ot(_.free):null;else if(o==="room"){if(r===void 0)throw new Error("roomId is required for structured room analysis");$=kr(_,r),w=`Room ${r}`}if(!$)return{content:[{type:"text",text:`No ${w} data found in this structured map.`}]};let R=$.map(k=>`(${k.x},${k.y})`).join(",");return{content:[{type:"text",text:`Structured ${w} Data (Total: ${$.length} vertices):
57
57
  ${R}`}],structuredData:{total:$.length,points:$}}}let u=Ce(c),l=Ze(c,u,{pointsStructured:!0}),{parsed:d}=l,m,f=o;if(o==="obstacles")m=d.obstacles;else if(o==="carpet")m=d.carpet;else if(o==="free")m=new Uint32Array(0);else if(o==="room"){if(r===void 0)throw new Error("roomId is required for feature 'room'");let _,$=String(r).toUpperCase();["UNKNOWN_ROOM","ROOM_GAP","NO_ROOM_DATA","OBSTACLE_ROOM"].includes($)?_=$:_=Number(r),m=d.rooms.get(_),f=`Room ${r}`}if(!m||m.length===0)return{content:[{type:"text",text:`No ${f} points found.`}]};let v={};m.forEach(_=>{let $=_%u.mapWidth,w=Math.floor(_/u.mapWidth);v[w]||(v[w]=[]),v[w].push($)});let h=Object.entries(v).sort(([_],[$])=>Number(_)-Number($)).map(([_,$])=>`${_}:${$.sort((w,R)=>w-R).join(",")}`).join("|");return{content:[{type:"text",text:`Raster ${f} (Total: ${m.length}):
@@ -1 +1 @@
1
- const e=["areRoomsAdjacent","getForbiddenSweepZones","getForbiddenMopZones","getCleanZones","getVirtualWalls","getSpots","getWayPoints","getViewportCenterPoint","getMapCenterPoint","getWallPointsByViewportCenter","getForbiddenSweepZonePointsByViewportCenter","getForbiddenMopZonePointsByViewportCenter","getCleanZonePointsByViewportCenter","getSpotPointByViewportCenter","getEffectiveDividerPoints","getDividerEndPoints","isNearChargerOrRobot","isPointInAnyRoom","isWallIntersectsAnyRoom","isZoneIntersectsAnyRoom","resetPanZoom","snapshot","snapshotByData","getCustomCarpets","forceEndGesture","getFurniturePointsByViewportCenter","getCustomCarpetPointsByViewportCenter","getRectPointsByCenter","getFurnitures","drawCustomZones","getCustomZones","clearCustomZones","setEditingCustomZones"],o=["onMapFirstDrawed","onMapDrawed","onPathDrawed","onRoomPropertiesDrawed","onClickRoom","onClickRoomProperties","onRemoveForbiddenSweepZone","onRemoveForbiddenMopZone","onRemoveCleanZone","onRemoveVirtualWall","onUpdateForbiddenSweepZone","onUpdateForbiddenMopZone","onUpdateCleanZone","onUpdateVirtualWall","onUpdateSpot","onUpdateWayPoint","onUpdateDivider","onClickForbiddenSweepZone","onClickForbiddenMopZone","onClickCleanZone","onClickVirtualWall","onClickSpot","onClickWayPoint","onClickDetectedObject","onClickCustomElement","onClickMap","onClickCarpet","onDeleteCarpet","onUpdateCustomCarpet","onDeleteCustomCarpet","onGestureStart","onGestureEnd","onClickRobot","onClickChargingStation","onRemoveFurniture","onUpdateFurniture","onClickFurniture","onRemoveCustomZone","onUpdateCustomZone","onClickCustomZone"];export{e as MAP_API_METHODS,o as MAP_CALLBACK_METHODS};
1
+ const e=["areRoomsAdjacent","getForbiddenSweepZones","getForbiddenMopZones","getCleanZones","getVirtualWalls","getSpots","getWayPoints","getViewportCenterPoint","getMapCenterPoint","getWallPointsByViewportCenter","getForbiddenSweepZonePointsByViewportCenter","getForbiddenMopZonePointsByViewportCenter","getCleanZonePointsByViewportCenter","getSpotPointByViewportCenter","getEffectiveDividerPoints","getDividerEndPoints","isNearChargerOrRobot","isPointInAnyRoom","isWallIntersectsAnyRoom","isZoneIntersectsAnyRoom","resetPanZoom","snapshot","snapshotByData","getCustomCarpets","forceEndGesture","getFurniturePointsByViewportCenter","getCustomCarpetPointsByViewportCenter","getRectPointsByCenter","getFurnitures","drawCustomZones","getCustomZones","clearCustomZones","setEditingCustomZones"],o=["onMapFirstDrawed","onMapDrawed","onPathDrawed","onRoomPropertiesDrawed","onRoomsDrawed","onClickRoom","onClickRoomProperties","onRemoveForbiddenSweepZone","onRemoveForbiddenMopZone","onRemoveCleanZone","onRemoveVirtualWall","onUpdateForbiddenSweepZone","onUpdateForbiddenMopZone","onUpdateCleanZone","onUpdateVirtualWall","onUpdateSpot","onUpdateWayPoint","onUpdateDivider","onClickForbiddenSweepZone","onClickForbiddenMopZone","onClickCleanZone","onClickVirtualWall","onClickSpot","onClickWayPoint","onClickDetectedObject","onClickCustomElement","onClickMap","onClickCarpet","onDeleteCarpet","onUpdateCustomCarpet","onDeleteCustomCarpet","onGestureStart","onGestureEnd","onClickRobot","onClickChargingStation","onRemoveFurniture","onUpdateFurniture","onClickFurniture","onRemoveCustomZone","onUpdateCustomZone","onClickCustomZone"];export{e as MAP_API_METHODS,o as MAP_CALLBACK_METHODS};
package/dist/index.d.ts CHANGED
@@ -1024,8 +1024,10 @@ export declare type ImageCustomElementParam = BaseCustomElementParam & {
1024
1024
 
1025
1025
  export declare type LoggerConfig = {
1026
1026
  enabled: boolean
1027
- hostSinkEnabled: boolean
1028
- hostLevels: LoggerLevel[]
1027
+ /** 是否启用 App 原生日志通道(ty.getLogManager),独立于 console 与 host 桥 */
1028
+ appLogEnabled: boolean
1029
+ /** 转发到 App 原生日志的级别 */
1030
+ appLogLevels: LoggerLevel[]
1029
1031
  tag: string
1030
1032
  }
1031
1033
 
@@ -1041,7 +1043,7 @@ export declare type LoggerPayload = {
1041
1043
 
1042
1044
  export declare const MAP_API_METHODS: readonly ["areRoomsAdjacent", "getForbiddenSweepZones", "getForbiddenMopZones", "getCleanZones", "getVirtualWalls", "getSpots", "getWayPoints", "getViewportCenterPoint", "getMapCenterPoint", "getWallPointsByViewportCenter", "getForbiddenSweepZonePointsByViewportCenter", "getForbiddenMopZonePointsByViewportCenter", "getCleanZonePointsByViewportCenter", "getSpotPointByViewportCenter", "getEffectiveDividerPoints", "getDividerEndPoints", "isNearChargerOrRobot", "isPointInAnyRoom", "isWallIntersectsAnyRoom", "isZoneIntersectsAnyRoom", "resetPanZoom", "snapshot", "snapshotByData", "getCustomCarpets", "forceEndGesture", "getFurniturePointsByViewportCenter", "getCustomCarpetPointsByViewportCenter", "getRectPointsByCenter", "getFurnitures", "drawCustomZones", "getCustomZones", "clearCustomZones", "setEditingCustomZones"];
1043
1045
 
1044
- export declare const MAP_CALLBACK_METHODS: readonly ["onMapFirstDrawed", "onMapDrawed", "onPathDrawed", "onRoomPropertiesDrawed", "onClickRoom", "onClickRoomProperties", "onRemoveForbiddenSweepZone", "onRemoveForbiddenMopZone", "onRemoveCleanZone", "onRemoveVirtualWall", "onUpdateForbiddenSweepZone", "onUpdateForbiddenMopZone", "onUpdateCleanZone", "onUpdateVirtualWall", "onUpdateSpot", "onUpdateWayPoint", "onUpdateDivider", "onClickForbiddenSweepZone", "onClickForbiddenMopZone", "onClickCleanZone", "onClickVirtualWall", "onClickSpot", "onClickWayPoint", "onClickDetectedObject", "onClickCustomElement", "onClickMap", "onClickCarpet", "onDeleteCarpet", "onUpdateCustomCarpet", "onDeleteCustomCarpet", "onGestureStart", "onGestureEnd", "onClickRobot", "onClickChargingStation", "onRemoveFurniture", "onUpdateFurniture", "onClickFurniture", "onRemoveCustomZone", "onUpdateCustomZone", "onClickCustomZone"];
1046
+ export declare const MAP_CALLBACK_METHODS: readonly ["onMapFirstDrawed", "onMapDrawed", "onPathDrawed", "onRoomPropertiesDrawed", "onRoomsDrawed", "onClickRoom", "onClickRoomProperties", "onRemoveForbiddenSweepZone", "onRemoveForbiddenMopZone", "onRemoveCleanZone", "onRemoveVirtualWall", "onUpdateForbiddenSweepZone", "onUpdateForbiddenMopZone", "onUpdateCleanZone", "onUpdateVirtualWall", "onUpdateSpot", "onUpdateWayPoint", "onUpdateDivider", "onClickForbiddenSweepZone", "onClickForbiddenMopZone", "onClickCleanZone", "onClickVirtualWall", "onClickSpot", "onClickWayPoint", "onClickDetectedObject", "onClickCustomElement", "onClickMap", "onClickCarpet", "onDeleteCarpet", "onUpdateCustomCarpet", "onDeleteCustomCarpet", "onGestureStart", "onGestureEnd", "onClickRobot", "onClickChargingStation", "onRemoveFurniture", "onUpdateFurniture", "onClickFurniture", "onRemoveCustomZone", "onUpdateCustomZone", "onClickCustomZone"];
1045
1047
 
1046
1048
  /**
1047
1049
  * 地图 API 接口定义
@@ -1540,6 +1542,21 @@ export declare interface MapCallbacks {
1540
1542
  * @param.en rooms - Array of room property information
1541
1543
  */
1542
1544
  onRoomPropertiesDrawed?: (rooms: RoomProperty[]) => void;
1545
+ /**
1546
+ * @description.zh 房间中心点绘制完成回调
1547
+ * @description.en Callback when room center points are drawn
1548
+ * @description.zh 由地图几何驱动,每次 drawMap / drawRasterMap 绘制完成后触发,
1549
+ * 抛出当前所有房间的中心点(同时提供地图坐标系与机器坐标系两种表达)。
1550
+ * 与属性驱动、仅在 drawRoomProperty 时触发的 onRoomPropertiesDrawed 不同;
1551
+ * 地图被清空时以空数组触发。
1552
+ * @description.en Triggered after every drawMap / drawRasterMap completes, driven by
1553
+ * map geometry. Emits the center points of all current rooms (in both map and robot
1554
+ * coordinate systems). Unlike onRoomPropertiesDrawed, which is property-driven and only
1555
+ * fires on drawRoomProperty. Fires with an empty array when the map is cleared.
1556
+ * @param.zh rooms - 房间中心点信息数组
1557
+ * @param.en rooms - Array of room center point information
1558
+ */
1559
+ onRoomsDrawed?: (rooms: RoomCenterInfo[]) => void;
1543
1560
  /**
1544
1561
  * @description.zh 点击房间回调
1545
1562
  * @description.en Callback when clicking on a room
@@ -2098,13 +2115,36 @@ export declare type Room = {
2098
2115
  colorIndex?: number
2099
2116
  }
2100
2117
 
2118
+ /**
2119
+ * 房间中心点信息
2120
+ *
2121
+ * 由地图几何驱动,随 onRoomsDrawed 回调抛出。同时提供两种坐标表达,
2122
+ * 消费方按需取用,无需自行处理 origin 偏移。
2123
+ */
2124
+ export declare type RoomCenterInfo = {
2125
+ /** 房间ID */
2126
+ id: number
2127
+ /** 中心点(地图坐标系,绝对坐标) */
2128
+ centerPoint: Point
2129
+ /** 中心点(机器坐标系,相对于 origin,与 Zone / VirtualWall 一致) */
2130
+ relativeCenterPoint: Point
2131
+ }
2132
+
2101
2133
  /**
2102
2134
  * 房间显示数据
2103
2135
  * 扩展房间属性,包含显示相关的信息
2104
2136
  */
2105
2137
  export declare type RoomData = RoomProperty & {
2106
- /** 可选的中心点,用于显示房间名称 */
2138
+ /** 可选的中心点(地图坐标系,绝对坐标),用于显示房间名称 */
2107
2139
  centerPoint: Point | null
2140
+ /**
2141
+ * 房间中心点(机器坐标系,相对于 origin)
2142
+ *
2143
+ * 与 Zone / VirtualWall / isPointInAnyRoom / getMapCenterPoint 使用同一坐标系,
2144
+ * 可直接用于下发指令或 drawCustomElements 等以机器坐标系为入参的 API。
2145
+ * 当房间属性匹配不到几何数据时为 null。
2146
+ */
2147
+ relativeCenterPoint: Point | null
2108
2148
  /** 索引 */
2109
2149
  index: number
2110
2150
  /** 颜色索引(用于四色算法) */