@elizaos/plugin-facewear 2.0.3-beta.6 → 2.0.3-beta.7

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 (191) hide show
  1. package/dist/actions/display-text.d.ts +4 -0
  2. package/dist/actions/display-text.d.ts.map +1 -0
  3. package/dist/actions/display-text.js +90 -0
  4. package/dist/actions/display-text.js.map +1 -0
  5. package/dist/actions/facewear-connect.d.ts +3 -0
  6. package/dist/actions/facewear-connect.d.ts.map +1 -0
  7. package/dist/actions/facewear-connect.js +70 -0
  8. package/dist/actions/facewear-connect.js.map +1 -0
  9. package/dist/actions/facewear-control.d.ts +4 -0
  10. package/dist/actions/facewear-control.d.ts.map +1 -0
  11. package/dist/actions/facewear-control.js +627 -0
  12. package/dist/actions/facewear-control.js.map +1 -0
  13. package/dist/actions/facewear-debug.d.ts +3 -0
  14. package/dist/actions/facewear-debug.d.ts.map +1 -0
  15. package/dist/actions/facewear-debug.js +62 -0
  16. package/dist/actions/facewear-debug.js.map +1 -0
  17. package/dist/actions/facewear-status.d.ts +4 -0
  18. package/dist/actions/facewear-status.d.ts.map +1 -0
  19. package/dist/actions/facewear-status.js +66 -0
  20. package/dist/actions/facewear-status.js.map +1 -0
  21. package/dist/actions/microphone.d.ts +4 -0
  22. package/dist/actions/microphone.d.ts.map +1 -0
  23. package/dist/actions/microphone.js +63 -0
  24. package/dist/actions/microphone.js.map +1 -0
  25. package/dist/actions/view-actions.d.ts +23 -0
  26. package/dist/actions/view-actions.d.ts.map +1 -0
  27. package/dist/actions/view-actions.js +314 -0
  28. package/dist/actions/view-actions.js.map +1 -0
  29. package/dist/actions/vision-query.d.ts +4 -0
  30. package/dist/actions/vision-query.d.ts.map +1 -0
  31. package/dist/actions/vision-query.js +41 -0
  32. package/dist/actions/vision-query.js.map +1 -0
  33. package/dist/actions/xr-view-actions.d.ts +14 -0
  34. package/dist/actions/xr-view-actions.d.ts.map +1 -0
  35. package/dist/actions/xr-view-actions.js +29 -0
  36. package/dist/actions/xr-view-actions.js.map +1 -0
  37. package/dist/components/FacewearSpatialView.d.ts +50 -0
  38. package/dist/components/FacewearSpatialView.d.ts.map +1 -0
  39. package/dist/components/FacewearSpatialView.js +129 -0
  40. package/dist/components/FacewearSpatialView.js.map +1 -0
  41. package/dist/components/FacewearView.d.ts +17 -0
  42. package/dist/components/FacewearView.d.ts.map +1 -0
  43. package/dist/components/FacewearView.js +88 -0
  44. package/dist/components/FacewearView.js.map +1 -0
  45. package/dist/components/SmartglassesPanelView.d.ts +22 -0
  46. package/dist/components/SmartglassesPanelView.d.ts.map +1 -0
  47. package/dist/components/SmartglassesPanelView.js +140 -0
  48. package/dist/components/SmartglassesPanelView.js.map +1 -0
  49. package/dist/components/SmartglassesSpatialView.d.ts +46 -0
  50. package/dist/components/SmartglassesSpatialView.d.ts.map +1 -0
  51. package/dist/components/SmartglassesSpatialView.js +240 -0
  52. package/dist/components/SmartglassesSpatialView.js.map +1 -0
  53. package/dist/components/facewear-profiles.d.ts +27 -0
  54. package/dist/components/facewear-profiles.d.ts.map +1 -0
  55. package/dist/components/facewear-profiles.js +40 -0
  56. package/dist/components/facewear-profiles.js.map +1 -0
  57. package/dist/devices/apple-vision-pro.d.ts +7 -0
  58. package/dist/devices/apple-vision-pro.d.ts.map +1 -0
  59. package/dist/devices/apple-vision-pro.js +21 -0
  60. package/dist/devices/apple-vision-pro.js.map +1 -0
  61. package/dist/devices/even-realities.d.ts +7 -0
  62. package/dist/devices/even-realities.d.ts.map +1 -0
  63. package/dist/devices/even-realities.js +13 -0
  64. package/dist/devices/even-realities.js.map +1 -0
  65. package/dist/devices/meta-quest.d.ts +5 -0
  66. package/dist/devices/meta-quest.d.ts.map +1 -0
  67. package/dist/devices/meta-quest.js +21 -0
  68. package/dist/devices/meta-quest.js.map +1 -0
  69. package/dist/devices/registry.d.ts +19 -0
  70. package/dist/devices/registry.d.ts.map +1 -0
  71. package/dist/devices/registry.js +96 -0
  72. package/dist/devices/registry.js.map +1 -0
  73. package/dist/devices/xreal.d.ts +7 -0
  74. package/dist/devices/xreal.d.ts.map +1 -0
  75. package/dist/devices/xreal.js +19 -0
  76. package/dist/devices/xreal.js.map +1 -0
  77. package/dist/index.d.ts +28 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +260 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/protocol/smartglasses.d.ts +306 -0
  82. package/dist/protocol/smartglasses.d.ts.map +1 -0
  83. package/dist/protocol/smartglasses.js +1485 -0
  84. package/dist/protocol/smartglasses.js.map +1 -0
  85. package/dist/protocol/xr.d.ts +137 -0
  86. package/dist/protocol/xr.d.ts.map +1 -0
  87. package/dist/protocol/xr.js +18 -0
  88. package/dist/protocol/xr.js.map +1 -0
  89. package/dist/providers/facewear-context.d.ts +3 -0
  90. package/dist/providers/facewear-context.d.ts.map +1 -0
  91. package/dist/providers/facewear-context.js +59 -0
  92. package/dist/providers/facewear-context.js.map +1 -0
  93. package/dist/providers/smartglasses-status.d.ts +3 -0
  94. package/dist/providers/smartglasses-status.d.ts.map +1 -0
  95. package/dist/providers/smartglasses-status.js +33 -0
  96. package/dist/providers/smartglasses-status.js.map +1 -0
  97. package/dist/register-terminal-view.d.ts +21 -0
  98. package/dist/register-terminal-view.d.ts.map +1 -0
  99. package/dist/register-terminal-view.js +70 -0
  100. package/dist/register-terminal-view.js.map +1 -0
  101. package/dist/register.d.ts +8 -0
  102. package/dist/register.d.ts.map +1 -0
  103. package/dist/register.js +116 -0
  104. package/dist/register.js.map +1 -0
  105. package/dist/routes/connect.d.ts +3 -0
  106. package/dist/routes/connect.d.ts.map +1 -0
  107. package/dist/routes/connect.js +86 -0
  108. package/dist/routes/connect.js.map +1 -0
  109. package/dist/routes/device-config.d.ts +5 -0
  110. package/dist/routes/device-config.d.ts.map +1 -0
  111. package/dist/routes/device-config.js +56 -0
  112. package/dist/routes/device-config.js.map +1 -0
  113. package/dist/routes/simulator-route.d.ts +8 -0
  114. package/dist/routes/simulator-route.d.ts.map +1 -0
  115. package/dist/routes/simulator-route.js +32 -0
  116. package/dist/routes/simulator-route.js.map +1 -0
  117. package/dist/routes/status.d.ts +3 -0
  118. package/dist/routes/status.d.ts.map +1 -0
  119. package/dist/routes/status.js +34 -0
  120. package/dist/routes/status.js.map +1 -0
  121. package/dist/routes/view-host.d.ts +24 -0
  122. package/dist/routes/view-host.d.ts.map +1 -0
  123. package/dist/routes/view-host.js +339 -0
  124. package/dist/routes/view-host.js.map +1 -0
  125. package/dist/routes/views.d.ts +8 -0
  126. package/dist/routes/views.d.ts.map +1 -0
  127. package/dist/routes/views.js +31 -0
  128. package/dist/routes/views.js.map +1 -0
  129. package/dist/services/audio-pipeline.d.ts +20 -0
  130. package/dist/services/audio-pipeline.d.ts.map +1 -0
  131. package/dist/services/audio-pipeline.js +87 -0
  132. package/dist/services/audio-pipeline.js.map +1 -0
  133. package/dist/services/facewear-service.d.ts +26 -0
  134. package/dist/services/facewear-service.d.ts.map +1 -0
  135. package/dist/services/facewear-service.js +45 -0
  136. package/dist/services/facewear-service.js.map +1 -0
  137. package/dist/services/smartglasses-service.d.ts +244 -0
  138. package/dist/services/smartglasses-service.d.ts.map +1 -0
  139. package/dist/services/smartglasses-service.js +821 -0
  140. package/dist/services/smartglasses-service.js.map +1 -0
  141. package/dist/services/vision-pipeline.d.ts +16 -0
  142. package/dist/services/vision-pipeline.d.ts.map +1 -0
  143. package/dist/services/vision-pipeline.js +39 -0
  144. package/dist/services/vision-pipeline.js.map +1 -0
  145. package/dist/services/xr-session-service.d.ts +54 -0
  146. package/dist/services/xr-session-service.d.ts.map +1 -0
  147. package/dist/services/xr-session-service.js +345 -0
  148. package/dist/services/xr-session-service.js.map +1 -0
  149. package/dist/status-format.d.ts +15 -0
  150. package/dist/status-format.d.ts.map +1 -0
  151. package/dist/status-format.js +89 -0
  152. package/dist/status-format.js.map +1 -0
  153. package/dist/transport/even-bridge.d.ts +69 -0
  154. package/dist/transport/even-bridge.d.ts.map +1 -0
  155. package/dist/transport/even-bridge.js +510 -0
  156. package/dist/transport/even-bridge.js.map +1 -0
  157. package/dist/transport/mock.d.ts +42 -0
  158. package/dist/transport/mock.d.ts.map +1 -0
  159. package/dist/transport/mock.js +124 -0
  160. package/dist/transport/mock.js.map +1 -0
  161. package/dist/transport/noble.d.ts +62 -0
  162. package/dist/transport/noble.d.ts.map +1 -0
  163. package/dist/transport/noble.js +256 -0
  164. package/dist/transport/noble.js.map +1 -0
  165. package/dist/transport/types.d.ts +36 -0
  166. package/dist/transport/types.d.ts.map +1 -0
  167. package/dist/transport/types.js +1 -0
  168. package/dist/transport/types.js.map +1 -0
  169. package/dist/transport/web-bluetooth.d.ts +58 -0
  170. package/dist/transport/web-bluetooth.d.ts.map +1 -0
  171. package/dist/transport/web-bluetooth.js +164 -0
  172. package/dist/transport/web-bluetooth.js.map +1 -0
  173. package/dist/ui/FacewearAppView.d.ts +4 -0
  174. package/dist/ui/FacewearAppView.d.ts.map +1 -0
  175. package/dist/ui/FacewearAppView.js +257 -0
  176. package/dist/ui/FacewearAppView.js.map +1 -0
  177. package/dist/ui/SmartglassesView.d.ts +10 -0
  178. package/dist/ui/SmartglassesView.d.ts.map +1 -0
  179. package/dist/ui/SmartglassesView.helpers.d.ts +104 -0
  180. package/dist/ui/SmartglassesView.helpers.d.ts.map +1 -0
  181. package/dist/ui/SmartglassesView.helpers.js +261 -0
  182. package/dist/ui/SmartglassesView.helpers.js.map +1 -0
  183. package/dist/ui/SmartglassesView.js +1189 -0
  184. package/dist/ui/SmartglassesView.js.map +1 -0
  185. package/dist/ui/facewear-view-bundle.d.ts +5 -0
  186. package/dist/ui/facewear-view-bundle.d.ts.map +1 -0
  187. package/dist/ui/facewear-view-bundle.js +17 -0
  188. package/dist/ui/facewear-view-bundle.js.map +1 -0
  189. package/dist/views/bundle.js +2950 -0
  190. package/dist/views/bundle.js.map +1 -0
  191. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/facewear-control.ts"],"sourcesContent":["import {\n type Action,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n type Memory,\n parseJSONObjectFromText,\n type State,\n} from \"@elizaos/core\";\nimport {\n type G1ConnectionReadyMode,\n G1DashboardLayout,\n G1SubCommand,\n G1TemperatureUnit,\n G1TimeFormat,\n} from \"../protocol/smartglasses.js\";\nimport {\n getSmartglassesService,\n type SmartglassesStatus,\n} from \"../services/smartglasses-service.js\";\nimport { setupSummaryForStatus } from \"../status-format.js\";\n\ntype SmartglassesControlOp =\n | \"connect\"\n | \"disconnect\"\n | \"clear\"\n | \"exit_dashboard\"\n | \"exit_function\"\n | \"start_ai\"\n | \"connection_ready\"\n | \"page_up\"\n | \"page_down\"\n | \"rsvp_text\"\n | \"heartbeat\"\n | \"heartbeat_start\"\n | \"heartbeat_stop\"\n | \"battery_status\"\n | \"raw\"\n | \"get_serial\"\n | \"app_whitelist\"\n | \"g1_setup\"\n | \"silent_mode\"\n | \"brightness\"\n | \"dashboard\"\n | \"dashboard_position\"\n | \"dashboard_layout\"\n | \"dashboard_calendar\"\n | \"dashboard_time_weather\"\n | \"headup_angle\"\n | \"wear_detection\"\n | \"wifi_scan\"\n | \"wifi_status\"\n | \"wifi_configure\"\n | \"wifi_setup\"\n | \"navigation_start\"\n | \"navigation_directions\"\n | \"navigation_primary_image\"\n | \"navigation_secondary_image\"\n | \"navigation_poller\"\n | \"navigation_end\"\n | \"translate_setup\"\n | \"translate_start\"\n | \"translate_languages\"\n | \"translate_original\"\n | \"translate_translated\"\n | \"note_add\"\n | \"note_delete\"\n | \"voice_note_list\"\n | \"voice_note_fetch\"\n | \"voice_note_delete\"\n | \"voice_note_delete_all\"\n | \"notification\"\n | \"bmp_image\";\n\nconst SUPPORTED_OPS: SmartglassesControlOp[] = [\n \"connect\",\n \"disconnect\",\n \"clear\",\n \"exit_dashboard\",\n \"exit_function\",\n \"start_ai\",\n \"connection_ready\",\n \"page_up\",\n \"page_down\",\n \"rsvp_text\",\n \"heartbeat\",\n \"heartbeat_start\",\n \"heartbeat_stop\",\n \"battery_status\",\n \"raw\",\n \"get_serial\",\n \"app_whitelist\",\n \"g1_setup\",\n \"silent_mode\",\n \"brightness\",\n \"dashboard\",\n \"dashboard_position\",\n \"dashboard_layout\",\n \"dashboard_calendar\",\n \"dashboard_time_weather\",\n \"headup_angle\",\n \"wear_detection\",\n \"wifi_scan\",\n \"wifi_status\",\n \"wifi_configure\",\n \"wifi_setup\",\n \"navigation_start\",\n \"navigation_directions\",\n \"navigation_primary_image\",\n \"navigation_secondary_image\",\n \"navigation_poller\",\n \"navigation_end\",\n \"translate_setup\",\n \"translate_start\",\n \"translate_languages\",\n \"translate_original\",\n \"translate_translated\",\n \"note_add\",\n \"note_delete\",\n \"voice_note_list\",\n \"voice_note_fetch\",\n \"voice_note_delete\",\n \"voice_note_delete_all\",\n \"notification\",\n \"bmp_image\",\n];\n\nconst OP_ALIASES = new Map<string, SmartglassesControlOp>([\n [\"pair\", \"connect\"],\n [\"pair_headset\", \"connect\"],\n [\"connect_headset\", \"connect\"],\n [\"reconnect\", \"connect\"],\n [\"unpair\", \"disconnect\"],\n [\"disconnect_headset\", \"disconnect\"],\n [\"exit\", \"exit_dashboard\"],\n [\"dashboard_exit\", \"exit_dashboard\"],\n [\"function_exit\", \"exit_function\"],\n [\"serial\", \"get_serial\"],\n [\"whitelist\", \"app_whitelist\"],\n [\"app_allowlist\", \"app_whitelist\"],\n [\"setup\", \"g1_setup\"],\n [\"app_setup\", \"g1_setup\"],\n [\"dashboard_calendar_item\", \"dashboard_calendar\"],\n [\"set_dashboard_position\", \"dashboard_position\"],\n [\"dashboard_height_depth\", \"dashboard_position\"],\n [\"dashboard_depth\", \"dashboard_position\"],\n [\"time_weather\", \"dashboard_time_weather\"],\n [\"navigation_init\", \"navigation_start\"],\n [\"navigation_direction\", \"navigation_directions\"],\n [\"navigation_primary\", \"navigation_primary_image\"],\n [\"navigation_secondary\", \"navigation_secondary_image\"],\n [\"navigation_stop\", \"navigation_end\"],\n [\"translate\", \"translate_setup\"],\n [\"translation_setup\", \"translate_setup\"],\n [\"translate_text\", \"translate_translated\"],\n [\"start_even_ai\", \"start_ai\"],\n [\"init\", \"connection_ready\"],\n [\"initialize\", \"connection_ready\"],\n [\"connection_init\", \"connection_ready\"],\n [\"ready\", \"connection_ready\"],\n [\"previous_page\", \"page_up\"],\n [\"prev_page\", \"page_up\"],\n [\"next_page\", \"page_down\"],\n [\"start_heartbeat\", \"heartbeat_start\"],\n [\"heartbeat_loop\", \"heartbeat_start\"],\n [\"stop_heartbeat\", \"heartbeat_stop\"],\n [\"battery\", \"battery_status\"],\n [\"get_battery\", \"battery_status\"],\n [\"request_battery\", \"battery_status\"],\n [\"battery_request\", \"battery_status\"],\n [\"rsvp\", \"rsvp_text\"],\n [\"rsvp_display\", \"rsvp_text\"],\n [\"bmp\", \"bmp_image\"],\n [\"image\", \"bmp_image\"],\n [\"quick_note_fetch\", \"voice_note_fetch\"],\n [\"quick_note_list\", \"voice_note_list\"],\n [\"quick_note_info\", \"voice_note_list\"],\n [\"voice_note_info\", \"voice_note_list\"],\n [\"voice_notes\", \"voice_note_list\"],\n [\"quick_note_delete\", \"voice_note_delete\"],\n [\"quick_note_delete_all\", \"voice_note_delete_all\"],\n [\"delete_all_voice_notes\", \"voice_note_delete_all\"],\n [\"voice_notes_delete_all\", \"voice_note_delete_all\"],\n [\"clear_voice_notes\", \"voice_note_delete_all\"],\n [\"voice_note_audio\", \"voice_note_fetch\"],\n [\"scan_wifi\", \"wifi_scan\"],\n [\"wifi_networks\", \"wifi_scan\"],\n [\"wifi\", \"wifi_status\"],\n [\"wifi_connect\", \"wifi_configure\"],\n [\"configure_wifi\", \"wifi_configure\"],\n [\"set_wifi\", \"wifi_configure\"],\n [\"wifi_prompt\", \"wifi_setup\"],\n [\"wifi_setup_request\", \"wifi_setup\"],\n [\"request_wifi_setup\", \"wifi_setup\"],\n]);\n\nfunction parseParams(message: Memory): Record<string, unknown> {\n const text = (message.content as { text?: string } | undefined)?.text ?? \"\";\n return (\n (parseJSONObjectFromText(text) as Record<string, unknown> | null) ?? {\n op: text.trim(),\n }\n );\n}\n\nfunction requireOp(value: unknown): SmartglassesControlOp | null {\n if (typeof value !== \"string\") return null;\n const normalized = value\n .trim()\n .replace(/[\\s-]+/g, \"_\")\n .toLowerCase();\n const alias = OP_ALIASES.get(normalized);\n if (alias) return alias;\n return SUPPORTED_OPS.includes(normalized as SmartglassesControlOp)\n ? (normalized as SmartglassesControlOp)\n : null;\n}\n\nfunction numberParam(params: Record<string, unknown>, name: string): number {\n const value = params[name];\n const parsed = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(parsed))\n throw new Error(`Missing numeric parameter: ${name}`);\n return parsed;\n}\n\nfunction stringParam(params: Record<string, unknown>, name: string): string {\n const value = params[name];\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`Missing string parameter: ${name}`);\n }\n return value;\n}\n\nfunction boolParam(\n params: Record<string, unknown>,\n name: string,\n fallback = false,\n): boolean {\n const value = params[name];\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\")\n return /^(true|1|yes|on|enable|enabled)$/i.test(value);\n return fallback;\n}\n\nfunction sideParam(\n params: Record<string, unknown>,\n fallback: \"left\" | \"right\" | \"both\" = \"both\",\n): \"left\" | \"right\" | \"both\" {\n const value = params.side ?? params.target;\n if (value === undefined) return fallback;\n if (value === \"left\" || value === \"right\" || value === \"both\") return value;\n throw new Error(\"side must be left, right, or both\");\n}\n\nfunction connectionReadyModeParam(\n params: Record<string, unknown>,\n): G1ConnectionReadyMode {\n const value = String(params.initMode ?? params.mode ?? params.variant ?? \"\")\n .trim()\n .toLowerCase();\n if (\n value === \"official\" ||\n value === \"official-app\" ||\n value === \"even-demo-app\" ||\n value === \"same-init\"\n )\n return \"official\";\n if (\n value === \"android-f4\" ||\n value === \"android\" ||\n value === \"even-demo-android\" ||\n value === \"f4\"\n )\n return \"android-f4\";\n return \"lens-specific\";\n}\n\nfunction singleSideParam(\n params: Record<string, unknown>,\n fallback: \"left\" | \"right\" = \"right\",\n): \"left\" | \"right\" {\n const side = sideParam(params, fallback);\n return side === \"both\" ? fallback : side;\n}\n\nfunction whitelistParam(\n params: Record<string, unknown>,\n): string | Record<string, unknown> | unknown[] {\n const value =\n params.whitelist ?? params.allowlist ?? params.json ?? params.data;\n if (typeof value === \"string\" || Array.isArray(value)) return value;\n if (value && typeof value === \"object\")\n return value as Record<string, unknown>;\n throw new Error(\n \"Missing whitelist payload: whitelist, allowlist, json, or data\",\n );\n}\n\nfunction startAiSubcommand(value: unknown): G1SubCommand {\n if (typeof value === \"number\") return value as G1SubCommand;\n if (typeof value !== \"string\") return G1SubCommand.Start;\n const normalized = value\n .trim()\n .replace(/[\\s-]+/g, \"_\")\n .toLowerCase();\n if (normalized === \"exit\" || normalized === \"exit_dashboard\")\n return G1SubCommand.Exit;\n if (normalized === \"stop\" || normalized === \"clear\") return G1SubCommand.Stop;\n return G1SubCommand.Start;\n}\n\nfunction bytesParam(params: Record<string, unknown>): Uint8Array {\n const value = params.data ?? params.bytes ?? params.hex ?? params.base64;\n if (value instanceof Uint8Array) return value;\n if (Array.isArray(value) && value.every((item) => Number.isInteger(item))) {\n return Uint8Array.from(value as number[]);\n }\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(\"Missing byte payload: data, bytes, hex, or base64\");\n }\n const text = value.trim();\n if (\n /^(?:0x)?[0-9a-f]+$/i.test(text) &&\n text.replace(/^0x/i, \"\").length % 2 === 0\n ) {\n const hex = text.replace(/^0x/i, \"\");\n return Uint8Array.from(\n hex.match(/../g)?.map((byte) => Number.parseInt(byte, 16)) ?? [],\n );\n }\n if (typeof Buffer !== \"undefined\")\n return Uint8Array.from(Buffer.from(text, \"base64\"));\n if (typeof atob !== \"undefined\") {\n return Uint8Array.from(atob(text), (char) => char.charCodeAt(0));\n }\n throw new Error(\"Base64 payload decoding is not available\");\n}\n\nfunction pixelBytesParam(params: Record<string, unknown>): Uint8Array {\n const value = params.pixels ?? params.pixelData ?? params.data;\n return bytesParam({ data: value });\n}\n\nfunction numberArrayParam(\n params: Record<string, unknown>,\n name: string,\n): number[] {\n const value = params[name];\n if (Array.isArray(value) && value.every((item) => Number.isInteger(item))) {\n return value.map(Number);\n }\n return Array.from(bytesParam({ data: value }));\n}\n\nfunction bitPlaneParam(\n params: Record<string, unknown>,\n name: string,\n expectedLength: number,\n fallbackBit?: 0 | 1,\n): number[] {\n const value = params[name];\n if (value === undefined && fallbackBit !== undefined) {\n return Array.from({ length: expectedLength }, () => fallbackBit);\n }\n const bits = numberArrayParam(params, name);\n if (bits.length !== expectedLength) {\n throw new Error(`${name} must contain ${expectedLength} bit values`);\n }\n return bits;\n}\n\nfunction dashboardLayoutParam(\n params: Record<string, unknown>,\n): G1DashboardLayout {\n const value = String(params.layout ?? \"full\").toLowerCase();\n if (value === \"full\") return G1DashboardLayout.Full;\n if (value === \"dual\") return G1DashboardLayout.Dual;\n if (value === \"minimal\") return G1DashboardLayout.Minimal;\n throw new Error(\"layout must be full, dual, or minimal\");\n}\n\nfunction temperatureUnitParam(value: unknown): G1TemperatureUnit | undefined {\n if (value === undefined) return undefined;\n const normalized = String(value).toLowerCase();\n if (normalized === \"f\" || normalized === \"fahrenheit\")\n return G1TemperatureUnit.Fahrenheit;\n if (normalized === \"c\" || normalized === \"celsius\")\n return G1TemperatureUnit.Celsius;\n throw new Error(\"temperatureUnit must be celsius or fahrenheit\");\n}\n\nfunction timeFormatParam(value: unknown): G1TimeFormat | undefined {\n if (value === undefined) return undefined;\n const normalized = String(value).toLowerCase();\n if (normalized === \"12\" || normalized === \"12h\")\n return G1TimeFormat.TwelveHour;\n if (normalized === \"24\" || normalized === \"24h\")\n return G1TimeFormat.TwentyFourHour;\n throw new Error(\"timeFormat must be 12h or 24h\");\n}\n\nfunction wifiActionValue(result: {\n available: boolean;\n status: string;\n networks: string[];\n}): Record<string, unknown> {\n return {\n available: result.available,\n status: result.status,\n networks: result.networks,\n };\n}\n\nfunction statusActionValue(\n status: SmartglassesStatus,\n): Record<string, unknown> {\n return {\n ...status,\n setup: setupSummaryForStatus(status),\n };\n}\n\nfunction actionErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport const smartglassesControlAction: Action = {\n name: \"SMARTGLASSES_CONTROL\",\n similes: [\n \"EVEN_GLASSES_CONTROL\",\n \"SMARTGLASSES_SETTINGS\",\n \"SMARTGLASSES_NOTIFICATION\",\n \"SMARTGLASSES_NOTE\",\n ],\n description:\n \"Run Even Realities G1 control operations: whole-headset connect/disconnect, clear/exit/start AI, connection-ready init including official iOS same-init and Android F4 same-init modes, RSVP display, heartbeat loop, battery status request, raw packets, serial request, app whitelist/setup, silent mode, brightness, bridge Wi-Fi scan/status/configure, dashboard position/content, navigation, translation overlays, head-up angle, wear detection, notes, voice-note list/fetch/delete/delete-all, notifications, and BMP images. Provide JSON with op and parameters.\",\n descriptionCompressed:\n \"smartglasses-control: connect, display session, raw packets, settings, Wi-Fi, dashboard, navigation, translate, notes, notifications, BMP\",\n contexts: [\"smartglasses\", \"wearable\", \"operations\"],\n validate: async (runtime: IAgentRuntime) =>\n Boolean(getSmartglassesService(runtime)),\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = getSmartglassesService(runtime);\n if (!service)\n return { success: false, text: \"Smartglasses service not loaded\" };\n\n const params = parseParams(message);\n const op = requireOp(params.op);\n if (!op) {\n return {\n success: false,\n text: \"Provide a supported smartglasses op.\",\n values: {\n supportedOps: SUPPORTED_OPS.join(\",\"),\n },\n };\n }\n\n let operationResult: Record<string, unknown> | undefined;\n try {\n switch (op) {\n case \"connect\":\n await service.connect();\n if (boolParam(params, \"init\", true)) {\n await service.sendConnectionReady(\n sideParam(params),\n connectionReadyModeParam(params),\n );\n }\n operationResult = statusActionValue(service.getStatus());\n break;\n case \"disconnect\":\n await service.disconnect();\n operationResult = statusActionValue(service.getStatus());\n break;\n case \"clear\":\n await service.clearDisplay();\n break;\n case \"exit_dashboard\":\n await service.exitToDashboard();\n break;\n case \"exit_function\":\n await service.exitFunction();\n break;\n case \"start_ai\":\n await service.sendStartAi(\n startAiSubcommand(params.subcommand),\n params.param === undefined\n ? new Uint8Array()\n : bytesParam({ data: params.param }),\n );\n break;\n case \"connection_ready\":\n await service.sendConnectionReady(\n sideParam(params),\n connectionReadyModeParam(params),\n );\n break;\n case \"page_up\":\n await service.pageUp();\n break;\n case \"page_down\":\n await service.pageDown();\n break;\n case \"rsvp_text\":\n await service.displayRsvpText(stringParam(params, \"text\"), {\n wordsPerGroup:\n params.wordsPerGroup === undefined\n ? undefined\n : numberParam(params, \"wordsPerGroup\"),\n wpm:\n params.wpm === undefined ? undefined : numberParam(params, \"wpm\"),\n paddingChar:\n typeof params.paddingChar === \"string\"\n ? params.paddingChar\n : undefined,\n mode:\n params.mode === \"text\" || params.mode === \"ai\"\n ? params.mode\n : undefined,\n skipDelay: boolParam(params, \"skipDelay\", false),\n });\n break;\n case \"heartbeat\":\n await service.sendHeartbeat(\n params.seq === undefined ? undefined : numberParam(params, \"seq\"),\n );\n break;\n case \"heartbeat_start\":\n service.startHeartbeatLoop({\n intervalMs:\n params.intervalMs === undefined\n ? undefined\n : numberParam(params, \"intervalMs\"),\n immediate: boolParam(params, \"immediate\", true),\n });\n break;\n case \"heartbeat_stop\":\n service.stopHeartbeatLoop();\n break;\n case \"battery_status\":\n await service.requestBatteryStatus(sideParam(params));\n break;\n case \"raw\":\n await service.sendRaw(bytesParam(params), sideParam(params));\n break;\n case \"get_serial\":\n await service.requestSerial(sideParam(params));\n break;\n case \"app_whitelist\":\n operationResult = await service.sendAppWhitelist(\n whitelistParam(params),\n sideParam(params, \"left\"),\n );\n break;\n case \"g1_setup\":\n operationResult = await service.sendG1Setup(\n whitelistParam(params),\n sideParam(params, \"left\"),\n );\n break;\n case \"silent_mode\":\n await service.setSilentMode(boolParam(params, \"enabled\", true));\n break;\n case \"brightness\":\n await service.setBrightness(\n numberParam(params, \"level\"),\n boolParam(params, \"auto\", false),\n );\n break;\n case \"dashboard\":\n await service.setDashboard(\n boolParam(params, \"enabled\", true),\n params.position === undefined ? 0 : numberParam(params, \"position\"),\n );\n break;\n case \"dashboard_position\":\n await service.setDashboardPosition(\n numberParam(params, \"height\"),\n numberParam(params, \"depth\"),\n );\n break;\n case \"dashboard_layout\":\n await service.setDashboardLayout(dashboardLayoutParam(params));\n break;\n case \"dashboard_calendar\":\n await service.sendDashboardCalendarItem({\n name: stringParam(params, \"name\"),\n time: stringParam(params, \"time\"),\n location: stringParam(params, \"location\"),\n });\n break;\n case \"dashboard_time_weather\":\n await service.sendDashboardTimeWeather({\n seqId:\n params.seqId === undefined\n ? undefined\n : numberParam(params, \"seqId\"),\n timestampMs:\n params.timestampMs === undefined\n ? undefined\n : numberParam(params, \"timestampMs\"),\n timezoneOffsetSeconds:\n params.timezoneOffsetSeconds === undefined\n ? undefined\n : numberParam(params, \"timezoneOffsetSeconds\"),\n temperatureInCelsius: numberParam(params, \"temperatureInCelsius\"),\n weatherIcon:\n params.weatherIcon === undefined\n ? undefined\n : numberParam(params, \"weatherIcon\"),\n temperatureUnit: temperatureUnitParam(params.temperatureUnit),\n timeFormat: timeFormatParam(params.timeFormat),\n });\n break;\n case \"headup_angle\":\n await service.setHeadUpAngle(numberParam(params, \"angle\"));\n break;\n case \"wear_detection\":\n await service.setGlassesWearDetection(\n boolParam(params, \"enabled\", true),\n );\n break;\n case \"wifi_scan\":\n operationResult = wifiActionValue(await service.scanWifi());\n break;\n case \"wifi_status\":\n operationResult = wifiActionValue(await service.getWifiStatus());\n break;\n case \"wifi_configure\":\n operationResult = wifiActionValue(\n await service.configureWifi(\n stringParam(params, \"ssid\"),\n typeof params.password === \"string\" ? params.password : \"\",\n ),\n );\n break;\n case \"wifi_setup\":\n operationResult = wifiActionValue(\n await service.requestWifiSetup(\n typeof params.reason === \"string\" ? params.reason : undefined,\n ),\n );\n break;\n case \"navigation_start\":\n await service.startNavigation();\n break;\n case \"navigation_directions\":\n await service.sendNavigationDirections({\n seqId:\n params.seqId === undefined\n ? undefined\n : numberParam(params, \"seqId\"),\n totalDuration: stringParam(params, \"totalDuration\"),\n totalDistance: stringParam(params, \"totalDistance\"),\n direction: stringParam(params, \"direction\"),\n distance: stringParam(params, \"distance\"),\n speed: stringParam(params, \"speed\"),\n directionTurn: numberParam(params, \"directionTurn\"),\n customX: Array.isArray(params.customX)\n ? (params.customX as number[])\n : undefined,\n customY:\n params.customY === undefined\n ? undefined\n : numberParam(params, \"customY\"),\n });\n break;\n case \"navigation_primary_image\":\n operationResult = await service.sendNavigationPrimaryImage(\n bitPlaneParam(params, \"image\", 136 * 136),\n bitPlaneParam(params, \"overlay\", 136 * 136, 0),\n );\n break;\n case \"navigation_secondary_image\":\n operationResult = await service.sendNavigationSecondaryImage(\n bitPlaneParam(params, \"image\", 488 * 136),\n bitPlaneParam(params, \"overlay\", 488 * 136, 0),\n );\n break;\n case \"navigation_poller\":\n await service.sendNavigationPoller();\n break;\n case \"navigation_end\":\n await service.endNavigation();\n break;\n case \"translate_setup\":\n await service.sendTranslateSetup();\n break;\n case \"translate_start\":\n await service.startTranslate();\n break;\n case \"translate_languages\":\n await service.setTranslateLanguages(\n numberParam(params, \"fromLanguage\"),\n numberParam(params, \"toLanguage\"),\n );\n break;\n case \"translate_original\":\n await service.sendTranslateText(\n \"original\",\n stringParam(params, \"text\"),\n params.syncId === undefined\n ? undefined\n : numberParam(params, \"syncId\"),\n );\n break;\n case \"translate_translated\":\n await service.sendTranslateText(\n \"translated\",\n stringParam(params, \"text\"),\n params.syncId === undefined\n ? undefined\n : numberParam(params, \"syncId\"),\n );\n break;\n case \"note_add\":\n await service.addOrUpdateNote(\n numberParam(params, \"noteNumber\"),\n stringParam(params, \"title\"),\n stringParam(params, \"text\"),\n );\n break;\n case \"note_delete\":\n await service.deleteNote(numberParam(params, \"noteNumber\"));\n break;\n case \"voice_note_list\":\n operationResult = await service.requestVoiceNoteList({\n syncId:\n params.syncId === undefined\n ? undefined\n : numberParam(params, \"syncId\"),\n side: singleSideParam(params, \"right\"),\n });\n break;\n case \"voice_note_fetch\":\n operationResult = await service.requestVoiceNoteAudio(\n numberParam(params, \"noteIndex\"),\n {\n syncId:\n params.syncId === undefined\n ? undefined\n : numberParam(params, \"syncId\"),\n side: singleSideParam(params, \"right\"),\n },\n );\n break;\n case \"voice_note_delete\":\n operationResult = await service.deleteVoiceNoteAudio(\n numberParam(params, \"noteIndex\"),\n {\n syncId:\n params.syncId === undefined\n ? undefined\n : numberParam(params, \"syncId\"),\n side: singleSideParam(params, \"right\"),\n },\n );\n break;\n case \"voice_note_delete_all\":\n operationResult = await service.deleteAllVoiceNoteAudio({\n syncId:\n params.syncId === undefined\n ? undefined\n : numberParam(params, \"syncId\"),\n side: singleSideParam(params, \"right\"),\n });\n break;\n case \"notification\":\n operationResult = await service.sendNotification({\n msgId:\n params.msgId === undefined\n ? undefined\n : numberParam(params, \"msgId\"),\n type:\n params.type === undefined\n ? undefined\n : numberParam(params, \"type\"),\n appIdentifier: stringParam(params, \"appIdentifier\"),\n title: stringParam(params, \"title\"),\n subtitle:\n typeof params.subtitle === \"string\" ? params.subtitle : undefined,\n message: stringParam(params, \"message\"),\n timeS:\n params.timeS === undefined\n ? undefined\n : numberParam(params, \"timeS\"),\n date: typeof params.date === \"string\" ? params.date : undefined,\n displayName:\n typeof params.displayName === \"string\"\n ? params.displayName\n : undefined,\n });\n break;\n case \"bmp_image\":\n if (params.pixels !== undefined || params.pixelData !== undefined) {\n operationResult = await service.sendMonochromeBmpImage(\n pixelBytesParam(params),\n {\n width:\n params.width === undefined\n ? undefined\n : numberParam(params, \"width\"),\n height:\n params.height === undefined\n ? undefined\n : numberParam(params, \"height\"),\n threshold:\n params.threshold === undefined\n ? undefined\n : numberParam(params, \"threshold\"),\n },\n );\n } else {\n operationResult = await service.sendBmpImage(bytesParam(params));\n }\n break;\n }\n } catch (error) {\n const text = `Smartglasses ${op} command failed: ${actionErrorMessage(error)}`;\n await callback?.({ text });\n return {\n success: false,\n text,\n values: {\n op,\n error: actionErrorMessage(error),\n },\n };\n }\n\n const response = `Smartglasses ${op} command sent.`;\n await callback?.({ text: response });\n return { success: true, text: response, values: { op, operationResult } };\n },\n examples: [],\n};\n\n// Alias for facewear plugin consumers\nexport const facewearControlAction = smartglassesControlAction;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { Action } from "@elizaos/core";
2
+ export declare const facewearDebugAction: Action;
3
+ //# sourceMappingURL=facewear-debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facewear-debug.d.ts","sourceRoot":"","sources":["../../src/actions/facewear-debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,eAAe,CAAC;AAWvB,eAAO,MAAM,mBAAmB,EAAE,MA4DjC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import {
2
+ FACEWEAR_SERVICE_TYPE
3
+ } from "../services/facewear-service.js";
4
+ import { SMARTGLASSES_SERVICE_NAME } from "../services/smartglasses-service.js";
5
+ import {
6
+ XR_SERVICE_TYPE
7
+ } from "../services/xr-session-service.js";
8
+ const facewearDebugAction = {
9
+ name: "FACEWEAR_DEBUG",
10
+ description: "Show diagnostics for all connected facewear devices.",
11
+ similes: [
12
+ "DEBUG_GLASSES",
13
+ "DIAGNOSE_HEADSET",
14
+ "FACEWEAR_DIAGNOSTICS",
15
+ "CHECK_XR"
16
+ ],
17
+ examples: [
18
+ [
19
+ { name: "{{user1}}", content: { text: "Debug my XR connection" } },
20
+ {
21
+ name: "{{user2}}",
22
+ content: {
23
+ text: "XR session service is running. No active connections."
24
+ }
25
+ }
26
+ ]
27
+ ],
28
+ validate: async (_runtime, _message) => true,
29
+ handler: async (runtime, _message, _state, _options, callback) => {
30
+ const lines = ["**Facewear Diagnostics**\n"];
31
+ const xrSvc = runtime.getService(XR_SERVICE_TYPE);
32
+ if (xrSvc) {
33
+ const conns = xrSvc.getConnections();
34
+ lines.push(`**XR Session Service:** running`);
35
+ lines.push(`**XR Connections:** ${conns.length}`);
36
+ for (const c of conns) {
37
+ lines.push(
38
+ ` - ${c.id}: ${c.deviceType} (connected ${c.connectedAt.toISOString()})`
39
+ );
40
+ }
41
+ } else {
42
+ lines.push("**XR Session Service:** not running");
43
+ }
44
+ const sgSvc = runtime.getService(SMARTGLASSES_SERVICE_NAME);
45
+ if (sgSvc) {
46
+ lines.push(`**Smartglasses Service:** running`);
47
+ } else {
48
+ lines.push("**Smartglasses Service:** not running");
49
+ }
50
+ const fwSvc = runtime.getService(FACEWEAR_SERVICE_TYPE);
51
+ if (fwSvc) {
52
+ const devices = fwSvc.getConnectedDevices();
53
+ lines.push(`**Active Devices:** ${devices.length}`);
54
+ }
55
+ await callback?.({ text: lines.join("\n") });
56
+ return { success: true };
57
+ }
58
+ };
59
+ export {
60
+ facewearDebugAction
61
+ };
62
+ //# sourceMappingURL=facewear-debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/facewear-debug.ts"],"sourcesContent":["import type {\n Action,\n HandlerCallback,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport {\n FACEWEAR_SERVICE_TYPE,\n type FacewearService,\n} from \"../services/facewear-service.js\";\nimport { SMARTGLASSES_SERVICE_NAME } from \"../services/smartglasses-service.js\";\nimport {\n XR_SERVICE_TYPE,\n type XRSessionService,\n} from \"../services/xr-session-service.js\";\n\nexport const facewearDebugAction: Action = {\n name: \"FACEWEAR_DEBUG\",\n description: \"Show diagnostics for all connected facewear devices.\",\n similes: [\n \"DEBUG_GLASSES\",\n \"DIAGNOSE_HEADSET\",\n \"FACEWEAR_DIAGNOSTICS\",\n \"CHECK_XR\",\n ],\n examples: [\n [\n { name: \"{{user1}}\", content: { text: \"Debug my XR connection\" } },\n {\n name: \"{{user2}}\",\n content: {\n text: \"XR session service is running. No active connections.\",\n },\n },\n ],\n ],\n validate: async (_runtime: IAgentRuntime, _message: Memory) => true,\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state: State | undefined,\n _options: Record<string, unknown> | undefined,\n callback?: HandlerCallback,\n ) => {\n const lines: string[] = [\"**Facewear Diagnostics**\\n\"];\n\n const xrSvc = runtime.getService<XRSessionService>(XR_SERVICE_TYPE);\n if (xrSvc) {\n const conns = xrSvc.getConnections();\n lines.push(`**XR Session Service:** running`);\n lines.push(`**XR Connections:** ${conns.length}`);\n for (const c of conns) {\n lines.push(\n ` - ${c.id}: ${c.deviceType} (connected ${c.connectedAt.toISOString()})`,\n );\n }\n } else {\n lines.push(\"**XR Session Service:** not running\");\n }\n\n const sgSvc = runtime.getService(SMARTGLASSES_SERVICE_NAME);\n if (sgSvc) {\n lines.push(`**Smartglasses Service:** running`);\n } else {\n lines.push(\"**Smartglasses Service:** not running\");\n }\n\n const fwSvc = runtime.getService<FacewearService>(FACEWEAR_SERVICE_TYPE);\n if (fwSvc) {\n const devices = fwSvc.getConnectedDevices();\n lines.push(`**Active Devices:** ${devices.length}`);\n }\n\n await callback?.({ text: lines.join(\"\\n\") });\n return { success: true };\n },\n};\n"],"mappings":"AAOA;AAAA,EACE;AAAA,OAEK;AACP,SAAS,iCAAiC;AAC1C;AAAA,EACE;AAAA,OAEK;AAEA,MAAM,sBAA8B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,MACE,EAAE,MAAM,aAAa,SAAS,EAAE,MAAM,yBAAyB,EAAE;AAAA,MACjE;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,OAAO,UAAyB,aAAqB;AAAA,EAC/D,SAAS,OACP,SACA,UACA,QACA,UACA,aACG;AACH,UAAM,QAAkB,CAAC,4BAA4B;AAErD,UAAM,QAAQ,QAAQ,WAA6B,eAAe;AAClE,QAAI,OAAO;AACT,YAAM,QAAQ,MAAM,eAAe;AACnC,YAAM,KAAK,iCAAiC;AAC5C,YAAM,KAAK,uBAAuB,MAAM,MAAM,EAAE;AAChD,iBAAW,KAAK,OAAO;AACrB,cAAM;AAAA,UACJ,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,eAAe,EAAE,YAAY,YAAY,CAAC;AAAA,QACxE;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,KAAK,qCAAqC;AAAA,IAClD;AAEA,UAAM,QAAQ,QAAQ,WAAW,yBAAyB;AAC1D,QAAI,OAAO;AACT,YAAM,KAAK,mCAAmC;AAAA,IAChD,OAAO;AACL,YAAM,KAAK,uCAAuC;AAAA,IACpD;AAEA,UAAM,QAAQ,QAAQ,WAA4B,qBAAqB;AACvE,QAAI,OAAO;AACT,YAAM,UAAU,MAAM,oBAAoB;AAC1C,YAAM,KAAK,uBAAuB,QAAQ,MAAM,EAAE;AAAA,IACpD;AAEA,UAAM,WAAW,EAAE,MAAM,MAAM,KAAK,IAAI,EAAE,CAAC;AAC3C,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,4 @@
1
+ import type { Action } from "@elizaos/core";
2
+ export declare const smartglassesStatusAction: Action;
3
+ export declare const facewearStatusAction: Action;
4
+ //# sourceMappingURL=facewear-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facewear-status.d.ts","sourceRoot":"","sources":["../../src/actions/facewear-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAA+B,MAAM,eAAe,CAAC;AAOzE,eAAO,MAAM,wBAAwB,EAAE,MA0DtC,CAAC;AAGF,eAAO,MAAM,oBAAoB,QAA2B,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { getSmartglassesService } from "../services/smartglasses-service.js";
2
+ import {
3
+ formatConnectedLensesForAction,
4
+ setupSummaryForStatus
5
+ } from "../status-format.js";
6
+ const smartglassesStatusAction = {
7
+ name: "SMARTGLASSES_STATUS",
8
+ similes: ["EVEN_GLASSES_STATUS", "GLASSES_STATUS"],
9
+ description: "Report smartglasses connection, transport, microphone, Wi-Fi bridge capability/status, latest event, and audio streaming status.",
10
+ descriptionCompressed: "smartglasses-status: connection, mic, Wi-Fi, last event, audio chunks",
11
+ contexts: ["smartglasses", "debug", "operations"],
12
+ validate: async () => true,
13
+ handler: async (runtime) => {
14
+ const service = getSmartglassesService(runtime);
15
+ if (!service) {
16
+ return {
17
+ success: false,
18
+ text: "Smartglasses service not loaded",
19
+ values: { available: false }
20
+ };
21
+ }
22
+ const status = service.getStatus();
23
+ const setup = setupSummaryForStatus(status);
24
+ const lines = [
25
+ `available: ${status.available}`,
26
+ `connected: ${status.connected}`,
27
+ `transport: ${status.transport ?? "(none)"}`,
28
+ `connectedLenses: ${formatConnectedLensesForAction(
29
+ status.connectedLenses
30
+ )}`,
31
+ `microphoneEnabled: ${status.microphoneEnabled}`,
32
+ `heartbeatRunning: ${status.heartbeatRunning}`,
33
+ `heartbeatIntervalMs: ${status.heartbeatIntervalMs ?? "(none)"}`,
34
+ `lastHeartbeatAt: ${status.lastHeartbeatAt ?? "(none)"}`,
35
+ `audioChunksReceived: ${status.audioChunksReceived}`,
36
+ `lastAudioEncoding: ${status.lastAudioEncoding ?? "(none)"}`,
37
+ `lastAudioSequence: ${status.lastAudioSequence ?? "(none)"}`,
38
+ `audioSequenceGaps: ${status.audioSequenceGaps}`,
39
+ `lastTranscript: ${status.lastTranscript ?? "(none)"}`,
40
+ `physicalState: ${status.physicalState ?? "(none)"}`,
41
+ `batteryState: ${status.batteryState ?? "(none)"}`,
42
+ `deviceState: ${status.deviceState ?? "(none)"}`,
43
+ `setupHint: ${setup.setupHint ?? "(none)"}`,
44
+ `wholeHeadsetConnected: ${setup.wholeHeadsetConnected}`,
45
+ `wearingReady: ${setup.wearingReady}`,
46
+ `physicalBlocker: ${setup.physicalBlocker ?? "(none)"}`,
47
+ `lastSerialNumber: ${status.lastSerialNumber ?? "(none)"}`,
48
+ `wifiAvailable: ${status.wifiAvailable}`,
49
+ `lastWifiStatus: ${status.lastWifiStatus?.status ?? "(none)"}`,
50
+ `lastWifiNetworks: ${status.lastWifiStatus?.networks.join(", ") || "(none)"}`,
51
+ `lastEvent: ${status.lastEvent?.label ?? "(none)"}`
52
+ ];
53
+ return {
54
+ success: true,
55
+ text: lines.join("\n"),
56
+ values: { ...status, setup }
57
+ };
58
+ },
59
+ examples: []
60
+ };
61
+ const facewearStatusAction = smartglassesStatusAction;
62
+ export {
63
+ facewearStatusAction,
64
+ smartglassesStatusAction
65
+ };
66
+ //# sourceMappingURL=facewear-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/facewear-status.ts"],"sourcesContent":["import type { Action, ActionResult, IAgentRuntime } from \"@elizaos/core\";\nimport { getSmartglassesService } from \"../services/smartglasses-service.js\";\nimport {\n formatConnectedLensesForAction,\n setupSummaryForStatus,\n} from \"../status-format.js\";\n\nexport const smartglassesStatusAction: Action = {\n name: \"SMARTGLASSES_STATUS\",\n similes: [\"EVEN_GLASSES_STATUS\", \"GLASSES_STATUS\"],\n description:\n \"Report smartglasses connection, transport, microphone, Wi-Fi bridge capability/status, latest event, and audio streaming status.\",\n descriptionCompressed:\n \"smartglasses-status: connection, mic, Wi-Fi, last event, audio chunks\",\n contexts: [\"smartglasses\", \"debug\", \"operations\"],\n validate: async () => true,\n handler: async (runtime: IAgentRuntime): Promise<ActionResult> => {\n const service = getSmartglassesService(runtime);\n if (!service) {\n return {\n success: false,\n text: \"Smartglasses service not loaded\",\n values: { available: false },\n };\n }\n const status = service.getStatus();\n const setup = setupSummaryForStatus(status);\n const lines = [\n `available: ${status.available}`,\n `connected: ${status.connected}`,\n `transport: ${status.transport ?? \"(none)\"}`,\n `connectedLenses: ${formatConnectedLensesForAction(\n status.connectedLenses,\n )}`,\n `microphoneEnabled: ${status.microphoneEnabled}`,\n `heartbeatRunning: ${status.heartbeatRunning}`,\n `heartbeatIntervalMs: ${status.heartbeatIntervalMs ?? \"(none)\"}`,\n `lastHeartbeatAt: ${status.lastHeartbeatAt ?? \"(none)\"}`,\n `audioChunksReceived: ${status.audioChunksReceived}`,\n `lastAudioEncoding: ${status.lastAudioEncoding ?? \"(none)\"}`,\n `lastAudioSequence: ${status.lastAudioSequence ?? \"(none)\"}`,\n `audioSequenceGaps: ${status.audioSequenceGaps}`,\n `lastTranscript: ${status.lastTranscript ?? \"(none)\"}`,\n `physicalState: ${status.physicalState ?? \"(none)\"}`,\n `batteryState: ${status.batteryState ?? \"(none)\"}`,\n `deviceState: ${status.deviceState ?? \"(none)\"}`,\n `setupHint: ${setup.setupHint ?? \"(none)\"}`,\n `wholeHeadsetConnected: ${setup.wholeHeadsetConnected}`,\n `wearingReady: ${setup.wearingReady}`,\n `physicalBlocker: ${setup.physicalBlocker ?? \"(none)\"}`,\n `lastSerialNumber: ${status.lastSerialNumber ?? \"(none)\"}`,\n `wifiAvailable: ${status.wifiAvailable}`,\n `lastWifiStatus: ${status.lastWifiStatus?.status ?? \"(none)\"}`,\n `lastWifiNetworks: ${\n status.lastWifiStatus?.networks.join(\", \") || \"(none)\"\n }`,\n `lastEvent: ${status.lastEvent?.label ?? \"(none)\"}`,\n ];\n return {\n success: true,\n text: lines.join(\"\\n\"),\n values: { ...status, setup },\n };\n },\n examples: [],\n};\n\n// Alias for facewear plugin consumers\nexport const facewearStatusAction = smartglassesStatusAction;\n"],"mappings":"AACA,SAAS,8BAA8B;AACvC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEA,MAAM,2BAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,SAAS,CAAC,uBAAuB,gBAAgB;AAAA,EACjD,aACE;AAAA,EACF,uBACE;AAAA,EACF,UAAU,CAAC,gBAAgB,SAAS,YAAY;AAAA,EAChD,UAAU,YAAY;AAAA,EACtB,SAAS,OAAO,YAAkD;AAChE,UAAM,UAAU,uBAAuB,OAAO;AAC9C,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ,EAAE,WAAW,MAAM;AAAA,MAC7B;AAAA,IACF;AACA,UAAM,SAAS,QAAQ,UAAU;AACjC,UAAM,QAAQ,sBAAsB,MAAM;AAC1C,UAAM,QAAQ;AAAA,MACZ,cAAc,OAAO,SAAS;AAAA,MAC9B,cAAc,OAAO,SAAS;AAAA,MAC9B,cAAc,OAAO,aAAa,QAAQ;AAAA,MAC1C,oBAAoB;AAAA,QAClB,OAAO;AAAA,MACT,CAAC;AAAA,MACD,sBAAsB,OAAO,iBAAiB;AAAA,MAC9C,qBAAqB,OAAO,gBAAgB;AAAA,MAC5C,wBAAwB,OAAO,uBAAuB,QAAQ;AAAA,MAC9D,oBAAoB,OAAO,mBAAmB,QAAQ;AAAA,MACtD,wBAAwB,OAAO,mBAAmB;AAAA,MAClD,sBAAsB,OAAO,qBAAqB,QAAQ;AAAA,MAC1D,sBAAsB,OAAO,qBAAqB,QAAQ;AAAA,MAC1D,sBAAsB,OAAO,iBAAiB;AAAA,MAC9C,mBAAmB,OAAO,kBAAkB,QAAQ;AAAA,MACpD,kBAAkB,OAAO,iBAAiB,QAAQ;AAAA,MAClD,iBAAiB,OAAO,gBAAgB,QAAQ;AAAA,MAChD,gBAAgB,OAAO,eAAe,QAAQ;AAAA,MAC9C,cAAc,MAAM,aAAa,QAAQ;AAAA,MACzC,0BAA0B,MAAM,qBAAqB;AAAA,MACrD,iBAAiB,MAAM,YAAY;AAAA,MACnC,oBAAoB,MAAM,mBAAmB,QAAQ;AAAA,MACrD,qBAAqB,OAAO,oBAAoB,QAAQ;AAAA,MACxD,kBAAkB,OAAO,aAAa;AAAA,MACtC,mBAAmB,OAAO,gBAAgB,UAAU,QAAQ;AAAA,MAC5D,qBACE,OAAO,gBAAgB,SAAS,KAAK,IAAI,KAAK,QAChD;AAAA,MACA,cAAc,OAAO,WAAW,SAAS,QAAQ;AAAA,IACnD;AACA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB,QAAQ,EAAE,GAAG,QAAQ,MAAM;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,UAAU,CAAC;AACb;AAGO,MAAM,uBAAuB;","names":[]}
@@ -0,0 +1,4 @@
1
+ import { type Action } from "@elizaos/core";
2
+ export declare const smartglassesMicrophoneAction: Action;
3
+ export declare const facewearMicrophoneAction: Action;
4
+ //# sourceMappingURL=microphone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microphone.d.ts","sourceRoot":"","sources":["../../src/actions/microphone.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAQZ,MAAM,eAAe,CAAC;AAqBvB,eAAO,MAAM,4BAA4B,EAAE,MAkD1C,CAAC;AAGF,eAAO,MAAM,wBAAwB,QAA+B,CAAC"}
@@ -0,0 +1,63 @@
1
+ import {
2
+ parseJSONObjectFromText
3
+ } from "@elizaos/core";
4
+ import { getSmartglassesService } from "../services/smartglasses-service.js";
5
+ function enabledFromMessage(message) {
6
+ const text = (message.content?.text ?? "").toLowerCase();
7
+ const parsed = parseJSONObjectFromText(text);
8
+ if (typeof parsed?.enabled === "boolean") return parsed.enabled;
9
+ if (/\b(disable|stop|close|off|mute)\b/.test(text)) return false;
10
+ if (/\b(enable|start|open|on|unmute|listen)\b/.test(text)) return true;
11
+ return null;
12
+ }
13
+ function actionErrorMessage(error) {
14
+ return error instanceof Error ? error.message : String(error);
15
+ }
16
+ const smartglassesMicrophoneAction = {
17
+ name: "SMARTGLASSES_MICROPHONE",
18
+ similes: [
19
+ "EVEN_MICROPHONE",
20
+ "OPEN_GLASSES_MIC",
21
+ "CLOSE_GLASSES_MIC",
22
+ "TOGGLE_GLASSES_MIC"
23
+ ],
24
+ description: "Enable or disable microphone capture on Even Realities smartglasses. Long press / Even AI start and single tap enable, while double tap / recording stop disable automatically when events arrive.",
25
+ descriptionCompressed: "smartglasses-microphone: enable, disable, or toggle Even G1/G2 microphone",
26
+ contexts: ["smartglasses", "wearable", "microphone"],
27
+ validate: async (runtime) => Boolean(getSmartglassesService(runtime)),
28
+ handler: async (runtime, message, _state, _options, callback) => {
29
+ const service = getSmartglassesService(runtime);
30
+ if (!service)
31
+ return { success: false, text: "Smartglasses service not loaded" };
32
+ const requested = enabledFromMessage(message);
33
+ const enabled = requested ?? !service.getStatus().microphoneEnabled;
34
+ try {
35
+ await service.setMicrophoneEnabled(enabled);
36
+ } catch (error) {
37
+ const response2 = `Smartglasses microphone command failed: ${actionErrorMessage(error)}`;
38
+ await callback?.({ text: response2 });
39
+ return {
40
+ success: false,
41
+ text: response2,
42
+ values: {
43
+ microphoneEnabled: enabled,
44
+ error: actionErrorMessage(error)
45
+ }
46
+ };
47
+ }
48
+ const response = `Smartglasses microphone ${enabled ? "enabled" : "disabled"}.`;
49
+ await callback?.({ text: response });
50
+ return {
51
+ success: true,
52
+ text: response,
53
+ values: { microphoneEnabled: enabled }
54
+ };
55
+ },
56
+ examples: []
57
+ };
58
+ const facewearMicrophoneAction = smartglassesMicrophoneAction;
59
+ export {
60
+ facewearMicrophoneAction,
61
+ smartglassesMicrophoneAction
62
+ };
63
+ //# sourceMappingURL=microphone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/microphone.ts"],"sourcesContent":["import {\n type Action,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n type Memory,\n parseJSONObjectFromText,\n type State,\n} from \"@elizaos/core\";\nimport { getSmartglassesService } from \"../services/smartglasses-service.js\";\n\nfunction enabledFromMessage(message: Memory): boolean | null {\n const text = (\n (message.content as { text?: string } | undefined)?.text ?? \"\"\n ).toLowerCase();\n const parsed = parseJSONObjectFromText(text) as Record<\n string,\n unknown\n > | null;\n if (typeof parsed?.enabled === \"boolean\") return parsed.enabled;\n if (/\\b(disable|stop|close|off|mute)\\b/.test(text)) return false;\n if (/\\b(enable|start|open|on|unmute|listen)\\b/.test(text)) return true;\n return null;\n}\n\nfunction actionErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport const smartglassesMicrophoneAction: Action = {\n name: \"SMARTGLASSES_MICROPHONE\",\n similes: [\n \"EVEN_MICROPHONE\",\n \"OPEN_GLASSES_MIC\",\n \"CLOSE_GLASSES_MIC\",\n \"TOGGLE_GLASSES_MIC\",\n ],\n description:\n \"Enable or disable microphone capture on Even Realities smartglasses. Long press / Even AI start and single tap enable, while double tap / recording stop disable automatically when events arrive.\",\n descriptionCompressed:\n \"smartglasses-microphone: enable, disable, or toggle Even G1/G2 microphone\",\n contexts: [\"smartglasses\", \"wearable\", \"microphone\"],\n validate: async (runtime: IAgentRuntime) =>\n Boolean(getSmartglassesService(runtime)),\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = getSmartglassesService(runtime);\n if (!service)\n return { success: false, text: \"Smartglasses service not loaded\" };\n const requested = enabledFromMessage(message);\n const enabled = requested ?? !service.getStatus().microphoneEnabled;\n try {\n await service.setMicrophoneEnabled(enabled);\n } catch (error) {\n const response = `Smartglasses microphone command failed: ${actionErrorMessage(error)}`;\n await callback?.({ text: response });\n return {\n success: false,\n text: response,\n values: {\n microphoneEnabled: enabled,\n error: actionErrorMessage(error),\n },\n };\n }\n const response = `Smartglasses microphone ${enabled ? \"enabled\" : \"disabled\"}.`;\n await callback?.({ text: response });\n return {\n success: true,\n text: response,\n values: { microphoneEnabled: enabled },\n };\n },\n examples: [],\n};\n\n// Alias for facewear plugin consumers\nexport const facewearMicrophoneAction = smartglassesMicrophoneAction;\n"],"mappings":"AAAA;AAAA,EAOE;AAAA,OAEK;AACP,SAAS,8BAA8B;AAEvC,SAAS,mBAAmB,SAAiC;AAC3D,QAAM,QACH,QAAQ,SAA2C,QAAQ,IAC5D,YAAY;AACd,QAAM,SAAS,wBAAwB,IAAI;AAI3C,MAAI,OAAO,QAAQ,YAAY,UAAW,QAAO,OAAO;AACxD,MAAI,oCAAoC,KAAK,IAAI,EAAG,QAAO;AAC3D,MAAI,2CAA2C,KAAK,IAAI,EAAG,QAAO;AAClE,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAwB;AAClD,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;AAEO,MAAM,+BAAuC;AAAA,EAClD,MAAM;AAAA,EACN,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aACE;AAAA,EACF,uBACE;AAAA,EACF,UAAU,CAAC,gBAAgB,YAAY,YAAY;AAAA,EACnD,UAAU,OAAO,YACf,QAAQ,uBAAuB,OAAO,CAAC;AAAA,EACzC,SAAS,OACP,SACA,SACA,QACA,UACA,aAC0B;AAC1B,UAAM,UAAU,uBAAuB,OAAO;AAC9C,QAAI,CAAC;AACH,aAAO,EAAE,SAAS,OAAO,MAAM,kCAAkC;AACnE,UAAM,YAAY,mBAAmB,OAAO;AAC5C,UAAM,UAAU,aAAa,CAAC,QAAQ,UAAU,EAAE;AAClD,QAAI;AACF,YAAM,QAAQ,qBAAqB,OAAO;AAAA,IAC5C,SAAS,OAAO;AACd,YAAMA,YAAW,2CAA2C,mBAAmB,KAAK,CAAC;AACrF,YAAM,WAAW,EAAE,MAAMA,UAAS,CAAC;AACnC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAMA;AAAA,QACN,QAAQ;AAAA,UACN,mBAAmB;AAAA,UACnB,OAAO,mBAAmB,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AACA,UAAM,WAAW,2BAA2B,UAAU,YAAY,UAAU;AAC5E,UAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AACnC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ,EAAE,mBAAmB,QAAQ;AAAA,IACvC;AAAA,EACF;AAAA,EACA,UAAU,CAAC;AACb;AAGO,MAAM,2BAA2B;","names":["response"]}
@@ -0,0 +1,23 @@
1
+ import type { Action } from "@elizaos/core";
2
+ export declare const xrOpenViewAction: Action;
3
+ export declare const xrCloseViewAction: Action;
4
+ export declare const xrSwitchViewAction: Action;
5
+ export declare const xrListViewsAction: Action;
6
+ export declare const xrResizeViewAction: Action;
7
+ export declare const facewearOpenViewAction: Action;
8
+ export declare const facewearCloseViewAction: Action;
9
+ export declare const facewearSwitchViewAction: Action;
10
+ export declare const facewearListViewsAction: Action;
11
+ export declare const facewearResizeViewAction: Action;
12
+ /** Extract a likely view id from natural language */
13
+ export declare function extractViewId(text: string): string;
14
+ type XRViewSummary = {
15
+ id: string;
16
+ label: string;
17
+ icon?: string;
18
+ description?: string;
19
+ };
20
+ /** Collect all XR-typed views from registered plugins */
21
+ export declare function collectXRViews(): XRViewSummary[];
22
+ export {};
23
+ //# sourceMappingURL=view-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-actions.d.ts","sourceRoot":"","sources":["../../src/actions/view-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,eAAe,CAAC;AA4BvB,eAAO,MAAM,gBAAgB,EAAE,MAoE9B,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,MAqD/B,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,MA4ChC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,MAkD/B,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,MA6EhC,CAAC;AAIF,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AACvD,eAAO,MAAM,uBAAuB,QAAoB,CAAC;AACzD,eAAO,MAAM,wBAAwB,QAAqB,CAAC;AAC3D,eAAO,MAAM,uBAAuB,QAAoB,CAAC;AACzD,eAAO,MAAM,wBAAwB,QAAqB,CAAC;AAI3D,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAalD;AAED,KAAK,aAAa,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,cAAc,IAAI,aAAa,EAAE,CAchD"}