robopark 3.2.0 → 3.3.0

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 (408) hide show
  1. package/README.md +66 -105
  2. package/bin/robopark.js +9 -2
  3. package/conversation/elevenlabs_agent.py +1617 -1617
  4. package/conversation/supervisor_store.py +189 -189
  5. package/dist/{kernel/config-schema.js → config-schema.js} +1 -0
  6. package/dist/config-schema.js.map +1 -0
  7. package/dist/robopark/add-robot.js +1 -0
  8. package/dist/robopark/add-robot.js.map +1 -0
  9. package/dist/robopark/agent-ctl.js +1 -0
  10. package/dist/robopark/agent-ctl.js.map +1 -0
  11. package/dist/robopark/auto-start.js +51 -73
  12. package/dist/robopark/auto-start.js.map +1 -0
  13. package/dist/robopark/conversation.js +1 -0
  14. package/dist/robopark/conversation.js.map +1 -0
  15. package/dist/robopark/discovery.js +1 -0
  16. package/dist/robopark/discovery.js.map +1 -0
  17. package/dist/robopark/doctor.js +1 -0
  18. package/dist/robopark/doctor.js.map +1 -0
  19. package/dist/robopark/enroll.js +1 -0
  20. package/dist/robopark/enroll.js.map +1 -0
  21. package/dist/robopark/llm-set.js +1 -0
  22. package/dist/robopark/llm-set.js.map +1 -0
  23. package/dist/robopark/motor-control.js +1 -0
  24. package/dist/robopark/motor-control.js.map +1 -0
  25. package/dist/robopark/preview-agent-launcher.js +1 -0
  26. package/dist/robopark/preview-agent-launcher.js.map +1 -0
  27. package/dist/robopark/probe.js +16 -15
  28. package/dist/robopark/probe.js.map +1 -0
  29. package/dist/robopark/profile.js +1 -0
  30. package/dist/robopark/profile.js.map +1 -0
  31. package/dist/robopark/python-env.js +1 -7
  32. package/dist/robopark/python-env.js.map +1 -0
  33. package/dist/robopark/robot-runtime.js +1 -0
  34. package/dist/robopark/robot-runtime.js.map +1 -0
  35. package/dist/robopark/scan.js +1 -0
  36. package/dist/robopark/scan.js.map +1 -0
  37. package/dist/robopark/screen-control.js +1 -0
  38. package/dist/robopark/screen-control.js.map +1 -0
  39. package/dist/robopark/secrets.js +1 -0
  40. package/dist/robopark/secrets.js.map +1 -0
  41. package/dist/robopark/serve.js +6 -8
  42. package/dist/robopark/serve.js.map +1 -0
  43. package/dist/robopark/server-add.js +1 -0
  44. package/dist/robopark/server-add.js.map +1 -0
  45. package/dist/robopark/setup-livekit.js +53 -52
  46. package/dist/robopark/setup-livekit.js.map +1 -0
  47. package/dist/robopark/setup.js +1 -0
  48. package/dist/robopark/setup.js.map +1 -0
  49. package/dist/robopark/stop-all.js +1 -0
  50. package/dist/robopark/stop-all.js.map +1 -0
  51. package/dist/robopark/verify.js +1 -0
  52. package/dist/robopark/verify.js.map +1 -0
  53. package/dist/robopark/vision-agent-launcher.js +1 -0
  54. package/dist/robopark/vision-agent-launcher.js.map +1 -0
  55. package/dist/robopark/vision-control.js +1 -0
  56. package/dist/robopark/vision-control.js.map +1 -0
  57. package/dist/robopark-cli.js +7 -125
  58. package/dist/robopark-cli.js.map +1 -0
  59. package/package.json +16 -56
  60. package/pi-client/_install_steps.sh +29 -29
  61. package/pi-client/client.py +76 -76
  62. package/pi-client/install.sh +40 -40
  63. package/pi-client/join_convo.sh +54 -54
  64. package/pi-client/livekit_bridge.py +24 -24
  65. package/pi-client/motor_bridge.py +10 -10
  66. package/scheduler/__pycache__/main.cpython-312.pyc +0 -0
  67. package/scheduler/main.py +196 -17
  68. package/scheduler/media_lock.py +57 -57
  69. package/scheduler/preview_agent.py +1122 -1122
  70. package/scheduler/production_config.json +73 -113
  71. package/scheduler/scripts/install-robot-supervisor-linux.sh +33 -33
  72. package/{ui/standalone/public → scheduler/static}/voice-join.html +101 -13
  73. package/screen/screen_runtime.py +75 -75
  74. package/vision/app_pi_clean.py +297 -297
  75. package/vision/audio_server_pi.py +24 -24
  76. package/vision/install.sh +34 -34
  77. package/vision/motor_server.py +275 -275
  78. package/vision/requirements_camera.txt +6 -6
  79. package/vision/requirements_motor.txt +4 -4
  80. package/vision/requirements_pi_unified.txt +2 -2
  81. package/vision/requirements_vision_agent.txt +19 -19
  82. package/vision/run.sh +244 -244
  83. package/vision/services/services.sh +12 -12
  84. package/dist/kernel/types.js +0 -7
  85. package/dist/robopark/access.js +0 -99
  86. package/dist/robopark/control-center-html.js +0 -9191
  87. package/dist/robopark/control-server.js +0 -148
  88. package/dist/robopark/deployment-commands.js +0 -47
  89. package/dist/robopark/frontend-service.js +0 -80
  90. package/dist/robopark/standalone.js +0 -584
  91. package/dist/robopark/voice-join-html.js +0 -57
  92. package/scripts/windows-shim-fix.cjs +0 -58
  93. package/static/robopark/barracuda.png +0 -0
  94. package/static/robopark/bmw.png +0 -0
  95. package/static/robopark/jaguar.png +0 -0
  96. package/static/robopark/magnus.jpg +0 -0
  97. package/static/robopark/panda.png +0 -0
  98. package/static/robopark/tesla.png +0 -0
  99. package/static/robopark/titan.jpg +0 -0
  100. package/static/robopark/volt.png +0 -0
  101. package/static/vendor/elevenlabs-client.LICENSE +0 -21
  102. package/static/vendor/elevenlabs-client.iife.js +0 -24200
  103. package/ui/ROBOVOICE_BUILD.json +0 -9
  104. package/ui/standalone/.next/BUILD_ID +0 -1
  105. package/ui/standalone/.next/app-build-manifest.json +0 -391
  106. package/ui/standalone/.next/app-path-routes-manifest.json +0 -55
  107. package/ui/standalone/.next/build-manifest.json +0 -33
  108. package/ui/standalone/.next/package.json +0 -1
  109. package/ui/standalone/.next/prerender-manifest.json +0 -41
  110. package/ui/standalone/.next/react-loadable-manifest.json +0 -14
  111. package/ui/standalone/.next/required-server-files.json +0 -362
  112. package/ui/standalone/.next/routes-manifest.json +0 -246
  113. package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route.js +0 -1
  114. package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route.js.nft.json +0 -1
  115. package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route_client-reference-manifest.js +0 -1
  116. package/ui/standalone/.next/server/app/(app)/page.js +0 -2
  117. package/ui/standalone/.next/server/app/(app)/page.js.nft.json +0 -1
  118. package/ui/standalone/.next/server/app/(app)/page_client-reference-manifest.js +0 -1
  119. package/ui/standalone/.next/server/app/(app)/voice/page.js +0 -12
  120. package/ui/standalone/.next/server/app/(app)/voice/page.js.nft.json +0 -1
  121. package/ui/standalone/.next/server/app/(app)/voice/page_client-reference-manifest.js +0 -1
  122. package/ui/standalone/.next/server/app/_not-found/page.js +0 -12
  123. package/ui/standalone/.next/server/app/_not-found/page.js.nft.json +0 -1
  124. package/ui/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
  125. package/ui/standalone/.next/server/app/api/connection-details/route.js +0 -1
  126. package/ui/standalone/.next/server/app/api/connection-details/route.js.nft.json +0 -1
  127. package/ui/standalone/.next/server/app/api/connection-details/route_client-reference-manifest.js +0 -1
  128. package/ui/standalone/.next/server/app/api/device-character/route.js +0 -1
  129. package/ui/standalone/.next/server/app/api/device-character/route.js.nft.json +0 -1
  130. package/ui/standalone/.next/server/app/api/device-character/route_client-reference-manifest.js +0 -1
  131. package/ui/standalone/.next/server/app/api/download-piper-model/route.js +0 -1
  132. package/ui/standalone/.next/server/app/api/download-piper-model/route.js.nft.json +0 -1
  133. package/ui/standalone/.next/server/app/api/download-piper-model/route_client-reference-manifest.js +0 -1
  134. package/ui/standalone/.next/server/app/api/model-status/route.js +0 -1
  135. package/ui/standalone/.next/server/app/api/model-status/route.js.nft.json +0 -1
  136. package/ui/standalone/.next/server/app/api/model-status/route_client-reference-manifest.js +0 -1
  137. package/ui/standalone/.next/server/app/api/models/route.js +0 -1
  138. package/ui/standalone/.next/server/app/api/models/route.js.nft.json +0 -1
  139. package/ui/standalone/.next/server/app/api/models/route_client-reference-manifest.js +0 -1
  140. package/ui/standalone/.next/server/app/api/prewarm/route.js +0 -1
  141. package/ui/standalone/.next/server/app/api/prewarm/route.js.nft.json +0 -1
  142. package/ui/standalone/.next/server/app/api/prewarm/route_client-reference-manifest.js +0 -1
  143. package/ui/standalone/.next/server/app/api/prompt/route.js +0 -1
  144. package/ui/standalone/.next/server/app/api/prompt/route.js.nft.json +0 -1
  145. package/ui/standalone/.next/server/app/api/prompt/route_client-reference-manifest.js +0 -1
  146. package/ui/standalone/.next/server/app/api/reload-tools/route.js +0 -1
  147. package/ui/standalone/.next/server/app/api/reload-tools/route.js.nft.json +0 -1
  148. package/ui/standalone/.next/server/app/api/reload-tools/route_client-reference-manifest.js +0 -1
  149. package/ui/standalone/.next/server/app/api/robopark/camera-token/route.js +0 -1
  150. package/ui/standalone/.next/server/app/api/robopark/camera-token/route.js.nft.json +0 -1
  151. package/ui/standalone/.next/server/app/api/robopark/camera-token/route_client-reference-manifest.js +0 -1
  152. package/ui/standalone/.next/server/app/api/robopark/character-ai/route.js +0 -1
  153. package/ui/standalone/.next/server/app/api/robopark/character-ai/route.js.nft.json +0 -1
  154. package/ui/standalone/.next/server/app/api/robopark/character-ai/route_client-reference-manifest.js +0 -1
  155. package/ui/standalone/.next/server/app/api/robopark/device-access/route.js +0 -1
  156. package/ui/standalone/.next/server/app/api/robopark/device-access/route.js.nft.json +0 -1
  157. package/ui/standalone/.next/server/app/api/robopark/device-access/route_client-reference-manifest.js +0 -1
  158. package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route.js +0 -1
  159. package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route.js.nft.json +0 -1
  160. package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route_client-reference-manifest.js +0 -1
  161. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route.js +0 -1
  162. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route.js.nft.json +0 -1
  163. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route_client-reference-manifest.js +0 -1
  164. package/ui/standalone/.next/server/app/api/robopark/monitor-token/route.js +0 -1
  165. package/ui/standalone/.next/server/app/api/robopark/monitor-token/route.js.nft.json +0 -1
  166. package/ui/standalone/.next/server/app/api/robopark/monitor-token/route_client-reference-manifest.js +0 -1
  167. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route.js +0 -1
  168. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route.js.nft.json +0 -1
  169. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route_client-reference-manifest.js +0 -1
  170. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route.js +0 -1
  171. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route.js.nft.json +0 -1
  172. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route_client-reference-manifest.js +0 -1
  173. package/ui/standalone/.next/server/app/api/robopark/robots/route.js +0 -1
  174. package/ui/standalone/.next/server/app/api/robopark/robots/route.js.nft.json +0 -1
  175. package/ui/standalone/.next/server/app/api/robopark/robots/route_client-reference-manifest.js +0 -1
  176. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route.js +0 -1
  177. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route.js.nft.json +0 -1
  178. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route_client-reference-manifest.js +0 -1
  179. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route.js +0 -1
  180. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route.js.nft.json +0 -1
  181. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route_client-reference-manifest.js +0 -1
  182. package/ui/standalone/.next/server/app/api/robopark/servers/route.js +0 -1
  183. package/ui/standalone/.next/server/app/api/robopark/servers/route.js.nft.json +0 -1
  184. package/ui/standalone/.next/server/app/api/robopark/servers/route_client-reference-manifest.js +0 -1
  185. package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route.js +0 -1
  186. package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route.js.nft.json +0 -1
  187. package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route_client-reference-manifest.js +0 -1
  188. package/ui/standalone/.next/server/app/api/robopark/sessions/route.js +0 -1
  189. package/ui/standalone/.next/server/app/api/robopark/sessions/route.js.nft.json +0 -1
  190. package/ui/standalone/.next/server/app/api/robopark/sessions/route_client-reference-manifest.js +0 -1
  191. package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route.js +0 -1
  192. package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route.js.nft.json +0 -1
  193. package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route_client-reference-manifest.js +0 -1
  194. package/ui/standalone/.next/server/app/api/robopark/transcripts/route.js +0 -1
  195. package/ui/standalone/.next/server/app/api/robopark/transcripts/route.js.nft.json +0 -1
  196. package/ui/standalone/.next/server/app/api/robopark/transcripts/route_client-reference-manifest.js +0 -1
  197. package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route.js +0 -1
  198. package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route.js.nft.json +0 -1
  199. package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route_client-reference-manifest.js +0 -1
  200. package/ui/standalone/.next/server/app/api/settings/route.js +0 -1
  201. package/ui/standalone/.next/server/app/api/settings/route.js.nft.json +0 -1
  202. package/ui/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +0 -1
  203. package/ui/standalone/.next/server/app/api/setup/complete/route.js +0 -1
  204. package/ui/standalone/.next/server/app/api/setup/complete/route.js.nft.json +0 -1
  205. package/ui/standalone/.next/server/app/api/setup/complete/route_client-reference-manifest.js +0 -1
  206. package/ui/standalone/.next/server/app/api/setup/status/route.js +0 -1
  207. package/ui/standalone/.next/server/app/api/setup/status/route.js.nft.json +0 -1
  208. package/ui/standalone/.next/server/app/api/setup/status/route_client-reference-manifest.js +0 -1
  209. package/ui/standalone/.next/server/app/api/setup/test-groq/route.js +0 -1
  210. package/ui/standalone/.next/server/app/api/setup/test-groq/route.js.nft.json +0 -1
  211. package/ui/standalone/.next/server/app/api/setup/test-groq/route_client-reference-manifest.js +0 -1
  212. package/ui/standalone/.next/server/app/api/setup/test-hass/route.js +0 -1
  213. package/ui/standalone/.next/server/app/api/setup/test-hass/route.js.nft.json +0 -1
  214. package/ui/standalone/.next/server/app/api/setup/test-hass/route_client-reference-manifest.js +0 -1
  215. package/ui/standalone/.next/server/app/api/setup/test-n8n/route.js +0 -1
  216. package/ui/standalone/.next/server/app/api/setup/test-n8n/route.js.nft.json +0 -1
  217. package/ui/standalone/.next/server/app/api/setup/test-n8n/route_client-reference-manifest.js +0 -1
  218. package/ui/standalone/.next/server/app/api/setup/test-ollama/route.js +0 -1
  219. package/ui/standalone/.next/server/app/api/setup/test-ollama/route.js.nft.json +0 -1
  220. package/ui/standalone/.next/server/app/api/setup/test-ollama/route_client-reference-manifest.js +0 -1
  221. package/ui/standalone/.next/server/app/api/test-tts/route.js +0 -1
  222. package/ui/standalone/.next/server/app/api/test-tts/route.js.nft.json +0 -1
  223. package/ui/standalone/.next/server/app/api/test-tts/route_client-reference-manifest.js +0 -1
  224. package/ui/standalone/.next/server/app/api/turn-credentials/route.js +0 -1
  225. package/ui/standalone/.next/server/app/api/turn-credentials/route.js.nft.json +0 -1
  226. package/ui/standalone/.next/server/app/api/turn-credentials/route_client-reference-manifest.js +0 -1
  227. package/ui/standalone/.next/server/app/api/voices/route.js +0 -1
  228. package/ui/standalone/.next/server/app/api/voices/route.js.nft.json +0 -1
  229. package/ui/standalone/.next/server/app/api/voices/route_client-reference-manifest.js +0 -1
  230. package/ui/standalone/.next/server/app/api/wake/route.js +0 -1
  231. package/ui/standalone/.next/server/app/api/wake/route.js.nft.json +0 -1
  232. package/ui/standalone/.next/server/app/api/wake/route_client-reference-manifest.js +0 -1
  233. package/ui/standalone/.next/server/app/api/wake-word/models/route.js +0 -1
  234. package/ui/standalone/.next/server/app/api/wake-word/models/route.js.nft.json +0 -1
  235. package/ui/standalone/.next/server/app/api/wake-word/models/route_client-reference-manifest.js +0 -1
  236. package/ui/standalone/.next/server/app/api/wake-word/status/route.js +0 -1
  237. package/ui/standalone/.next/server/app/api/wake-word/status/route.js.nft.json +0 -1
  238. package/ui/standalone/.next/server/app/api/wake-word/status/route_client-reference-manifest.js +0 -1
  239. package/ui/standalone/.next/server/app/api/wake-word/upload/route.js +0 -1
  240. package/ui/standalone/.next/server/app/api/wake-word/upload/route.js.nft.json +0 -1
  241. package/ui/standalone/.next/server/app/api/wake-word/upload/route_client-reference-manifest.js +0 -1
  242. package/ui/standalone/.next/server/app/favicon.ico/route.js +0 -1
  243. package/ui/standalone/.next/server/app/favicon.ico/route.js.nft.json +0 -1
  244. package/ui/standalone/.next/server/app/favicon.ico.body +0 -0
  245. package/ui/standalone/.next/server/app/favicon.ico.meta +0 -1
  246. package/ui/standalone/.next/server/app/fed/[...path]/route.js +0 -4
  247. package/ui/standalone/.next/server/app/fed/[...path]/route.js.nft.json +0 -1
  248. package/ui/standalone/.next/server/app/fed/[...path]/route_client-reference-manifest.js +0 -1
  249. package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route.js +0 -1
  250. package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route.js.nft.json +0 -1
  251. package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route_client-reference-manifest.js +0 -1
  252. package/ui/standalone/.next/server/app/robopark/[...path]/route.js +0 -1
  253. package/ui/standalone/.next/server/app/robopark/[...path]/route.js.nft.json +0 -1
  254. package/ui/standalone/.next/server/app/robopark/[...path]/route_client-reference-manifest.js +0 -1
  255. package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js +0 -1
  256. package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js.nft.json +0 -1
  257. package/ui/standalone/.next/server/app/robopark/api/[...path]/route_client-reference-manifest.js +0 -1
  258. package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route.js +0 -1
  259. package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route.js.nft.json +0 -1
  260. package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route_client-reference-manifest.js +0 -1
  261. package/ui/standalone/.next/server/app/robopark/page.js +0 -2
  262. package/ui/standalone/.next/server/app/robopark/page.js.nft.json +0 -1
  263. package/ui/standalone/.next/server/app/robopark/page_client-reference-manifest.js +0 -1
  264. package/ui/standalone/.next/server/app/tailnet/route.js +0 -1
  265. package/ui/standalone/.next/server/app/tailnet/route.js.nft.json +0 -1
  266. package/ui/standalone/.next/server/app/tailnet/route_client-reference-manifest.js +0 -1
  267. package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route.js +0 -1
  268. package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route.js.nft.json +0 -1
  269. package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route_client-reference-manifest.js +0 -1
  270. package/ui/standalone/.next/server/app/voice-tester/page.js +0 -2
  271. package/ui/standalone/.next/server/app/voice-tester/page.js.nft.json +0 -1
  272. package/ui/standalone/.next/server/app/voice-tester/page_client-reference-manifest.js +0 -1
  273. package/ui/standalone/.next/server/app-paths-manifest.json +0 -55
  274. package/ui/standalone/.next/server/chunks/1428.js +0 -1
  275. package/ui/standalone/.next/server/chunks/1692.js +0 -1
  276. package/ui/standalone/.next/server/chunks/37.js +0 -1
  277. package/ui/standalone/.next/server/chunks/4876.js +0 -1
  278. package/ui/standalone/.next/server/chunks/5232.js +0 -9
  279. package/ui/standalone/.next/server/chunks/5455.js +0 -11
  280. package/ui/standalone/.next/server/chunks/5611.js +0 -6
  281. package/ui/standalone/.next/server/chunks/5873.js +0 -22
  282. package/ui/standalone/.next/server/chunks/6018.js +0 -1
  283. package/ui/standalone/.next/server/chunks/8755.js +0 -1
  284. package/ui/standalone/.next/server/chunks/9077.js +0 -11
  285. package/ui/standalone/.next/server/functions-config-manifest.json +0 -9
  286. package/ui/standalone/.next/server/middleware-build-manifest.js +0 -1
  287. package/ui/standalone/.next/server/middleware-manifest.json +0 -6
  288. package/ui/standalone/.next/server/middleware-react-loadable-manifest.js +0 -1
  289. package/ui/standalone/.next/server/next-font-manifest.js +0 -1
  290. package/ui/standalone/.next/server/next-font-manifest.json +0 -1
  291. package/ui/standalone/.next/server/pages/500.html +0 -1
  292. package/ui/standalone/.next/server/pages/_app.js +0 -1
  293. package/ui/standalone/.next/server/pages/_app.js.nft.json +0 -1
  294. package/ui/standalone/.next/server/pages/_document.js +0 -1
  295. package/ui/standalone/.next/server/pages/_document.js.nft.json +0 -1
  296. package/ui/standalone/.next/server/pages/_error.js +0 -19
  297. package/ui/standalone/.next/server/pages/_error.js.nft.json +0 -1
  298. package/ui/standalone/.next/server/pages-manifest.json +0 -5
  299. package/ui/standalone/.next/server/server-reference-manifest.js +0 -1
  300. package/ui/standalone/.next/server/server-reference-manifest.json +0 -1
  301. package/ui/standalone/.next/server/webpack-runtime.js +0 -1
  302. package/ui/standalone/.next/static/T3eGaQUuZNb6rhEStcouc/_buildManifest.js +0 -1
  303. package/ui/standalone/.next/static/T3eGaQUuZNb6rhEStcouc/_ssgManifest.js +0 -1
  304. package/ui/standalone/.next/static/chunks/1255-404bb8de49c90395.js +0 -1
  305. package/ui/standalone/.next/static/chunks/144d3bae-bd5d150c0cab972e.js +0 -1
  306. package/ui/standalone/.next/static/chunks/1646.9123ee47220ed70b.js +0 -1
  307. package/ui/standalone/.next/static/chunks/2333-43c39acb531f7d4e.js +0 -3
  308. package/ui/standalone/.next/static/chunks/4bd1b696-f785427dddbba9fb.js +0 -1
  309. package/ui/standalone/.next/static/chunks/5139.c5e46d26064a85db.js +0 -1
  310. package/ui/standalone/.next/static/chunks/76e8f37e-2ae0e3fe7b44d874.js +0 -1
  311. package/ui/standalone/.next/static/chunks/9880-53262785284464cc.js +0 -1
  312. package/ui/standalone/.next/static/chunks/adfb71a7-625c1b5ebd039b6a.js +0 -1
  313. package/ui/standalone/.next/static/chunks/app/(app)/layout-5f312b128a0caf75.js +0 -1
  314. package/ui/standalone/.next/static/chunks/app/(app)/opengraph-image-xg4ifa/route-5f312b128a0caf75.js +0 -1
  315. package/ui/standalone/.next/static/chunks/app/(app)/page-5f312b128a0caf75.js +0 -1
  316. package/ui/standalone/.next/static/chunks/app/(app)/voice/page-72d72d9a70d9c1d4.js +0 -1
  317. package/ui/standalone/.next/static/chunks/app/_not-found/page-cfd7daa82d71540c.js +0 -1
  318. package/ui/standalone/.next/static/chunks/app/api/connection-details/route-5f312b128a0caf75.js +0 -1
  319. package/ui/standalone/.next/static/chunks/app/api/device-character/route-5f312b128a0caf75.js +0 -1
  320. package/ui/standalone/.next/static/chunks/app/api/download-piper-model/route-5f312b128a0caf75.js +0 -1
  321. package/ui/standalone/.next/static/chunks/app/api/model-status/route-5f312b128a0caf75.js +0 -1
  322. package/ui/standalone/.next/static/chunks/app/api/models/route-5f312b128a0caf75.js +0 -1
  323. package/ui/standalone/.next/static/chunks/app/api/prewarm/route-5f312b128a0caf75.js +0 -1
  324. package/ui/standalone/.next/static/chunks/app/api/prompt/route-5f312b128a0caf75.js +0 -1
  325. package/ui/standalone/.next/static/chunks/app/api/reload-tools/route-5f312b128a0caf75.js +0 -1
  326. package/ui/standalone/.next/static/chunks/app/api/robopark/camera-token/route-5f312b128a0caf75.js +0 -1
  327. package/ui/standalone/.next/static/chunks/app/api/robopark/character-ai/route-5f312b128a0caf75.js +0 -1
  328. package/ui/standalone/.next/static/chunks/app/api/robopark/device-access/route-5f312b128a0caf75.js +0 -1
  329. package/ui/standalone/.next/static/chunks/app/api/robopark/devices/[deviceId]/control/route-5f312b128a0caf75.js +0 -1
  330. package/ui/standalone/.next/static/chunks/app/api/robopark/live-rooms/route-5f312b128a0caf75.js +0 -1
  331. package/ui/standalone/.next/static/chunks/app/api/robopark/monitor-token/route-5f312b128a0caf75.js +0 -1
  332. package/ui/standalone/.next/static/chunks/app/api/robopark/robots/[robotId]/operations/route-5f312b128a0caf75.js +0 -1
  333. package/ui/standalone/.next/static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-5f312b128a0caf75.js +0 -1
  334. package/ui/standalone/.next/static/chunks/app/api/robopark/robots/route-5f312b128a0caf75.js +0 -1
  335. package/ui/standalone/.next/static/chunks/app/api/robopark/servers/[serverId]/metrics/route-5f312b128a0caf75.js +0 -1
  336. package/ui/standalone/.next/static/chunks/app/api/robopark/servers/[serverId]/route-5f312b128a0caf75.js +0 -1
  337. package/ui/standalone/.next/static/chunks/app/api/robopark/servers/route-5f312b128a0caf75.js +0 -1
  338. package/ui/standalone/.next/static/chunks/app/api/robopark/sessions/[sessionId]/end/route-5f312b128a0caf75.js +0 -1
  339. package/ui/standalone/.next/static/chunks/app/api/robopark/sessions/route-5f312b128a0caf75.js +0 -1
  340. package/ui/standalone/.next/static/chunks/app/api/robopark/transcripts/[sessionId]/route-5f312b128a0caf75.js +0 -1
  341. package/ui/standalone/.next/static/chunks/app/api/robopark/transcripts/route-5f312b128a0caf75.js +0 -1
  342. package/ui/standalone/.next/static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-5f312b128a0caf75.js +0 -1
  343. package/ui/standalone/.next/static/chunks/app/api/settings/route-5f312b128a0caf75.js +0 -1
  344. package/ui/standalone/.next/static/chunks/app/api/setup/complete/route-5f312b128a0caf75.js +0 -1
  345. package/ui/standalone/.next/static/chunks/app/api/setup/status/route-5f312b128a0caf75.js +0 -1
  346. package/ui/standalone/.next/static/chunks/app/api/setup/test-groq/route-5f312b128a0caf75.js +0 -1
  347. package/ui/standalone/.next/static/chunks/app/api/setup/test-hass/route-5f312b128a0caf75.js +0 -1
  348. package/ui/standalone/.next/static/chunks/app/api/setup/test-n8n/route-5f312b128a0caf75.js +0 -1
  349. package/ui/standalone/.next/static/chunks/app/api/setup/test-ollama/route-5f312b128a0caf75.js +0 -1
  350. package/ui/standalone/.next/static/chunks/app/api/test-tts/route-5f312b128a0caf75.js +0 -1
  351. package/ui/standalone/.next/static/chunks/app/api/turn-credentials/route-5f312b128a0caf75.js +0 -1
  352. package/ui/standalone/.next/static/chunks/app/api/voices/route-5f312b128a0caf75.js +0 -1
  353. package/ui/standalone/.next/static/chunks/app/api/wake/route-5f312b128a0caf75.js +0 -1
  354. package/ui/standalone/.next/static/chunks/app/api/wake-word/models/route-5f312b128a0caf75.js +0 -1
  355. package/ui/standalone/.next/static/chunks/app/api/wake-word/status/route-5f312b128a0caf75.js +0 -1
  356. package/ui/standalone/.next/static/chunks/app/api/wake-word/upload/route-5f312b128a0caf75.js +0 -1
  357. package/ui/standalone/.next/static/chunks/app/fed/[...path]/route-5f312b128a0caf75.js +0 -1
  358. package/ui/standalone/.next/static/chunks/app/fed/media/robots/[robotId]/video_feed/route-5f312b128a0caf75.js +0 -1
  359. package/ui/standalone/.next/static/chunks/app/layout-fcce963da1d8220f.js +0 -1
  360. package/ui/standalone/.next/static/chunks/app/robopark/[...path]/route-5f312b128a0caf75.js +0 -1
  361. package/ui/standalone/.next/static/chunks/app/robopark/api/[...path]/route-5f312b128a0caf75.js +0 -1
  362. package/ui/standalone/.next/static/chunks/app/robopark/api/robots/[robotId]/stream/route-5f312b128a0caf75.js +0 -1
  363. package/ui/standalone/.next/static/chunks/app/robopark/page-5f312b128a0caf75.js +0 -1
  364. package/ui/standalone/.next/static/chunks/app/tailnet/route-5f312b128a0caf75.js +0 -1
  365. package/ui/standalone/.next/static/chunks/app/vendor/livekit-client.umd.js/route-5f312b128a0caf75.js +0 -1
  366. package/ui/standalone/.next/static/chunks/app/voice-tester/page-ae699e048e0eb834.js +0 -1
  367. package/ui/standalone/.next/static/chunks/framework-e60c938074ff7136.js +0 -1
  368. package/ui/standalone/.next/static/chunks/main-9e24e8708ff075fc.js +0 -1
  369. package/ui/standalone/.next/static/chunks/main-app-a1f59168303c7f84.js +0 -1
  370. package/ui/standalone/.next/static/chunks/pages/_app-131c90850aef965b.js +0 -1
  371. package/ui/standalone/.next/static/chunks/pages/_error-e4ba546eb376bdf4.js +0 -1
  372. package/ui/standalone/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  373. package/ui/standalone/.next/static/chunks/webpack-5252e5254da079b5.js +0 -1
  374. package/ui/standalone/.next/static/css/3f478a573f9be82e.css +0 -1
  375. package/ui/standalone/.next/static/css/51560c4af1d5a21f.css +0 -1
  376. package/ui/standalone/.next/static/media/27fe93087559d480-s.p.otf +0 -0
  377. package/ui/standalone/.next/static/media/4d3869dd8a56345a-s.p.otf +0 -0
  378. package/ui/standalone/.next/static/media/63f3bb9ce29e22d5-s.p.otf +0 -0
  379. package/ui/standalone/.next/static/media/79e1c5d0f2fe9f68-s.p.otf +0 -0
  380. package/ui/standalone/.next/static/media/8bf7b2ceda89477b-s.p.woff2 +0 -0
  381. package/ui/standalone/.next/static/media/98baa4a7809fbf72-s.woff2 +0 -0
  382. package/ui/standalone/.next/static/media/f7650dfaa438c37c-s.woff2 +0 -0
  383. package/ui/standalone/package.json +0 -57
  384. package/ui/standalone/public/caal-logo.svg +0 -3
  385. package/ui/standalone/public/commit-mono-400-regular.woff +0 -0
  386. package/ui/standalone/public/cwl-logo-round.png +0 -0
  387. package/ui/standalone/public/everett-light.woff +0 -0
  388. package/ui/standalone/public/hey_cal.ppn +0 -0
  389. package/ui/standalone/public/install-robot-kiosk.sh +0 -242
  390. package/ui/standalone/public/lk-logo-dark.svg +0 -18
  391. package/ui/standalone/public/lk-logo.svg +0 -18
  392. package/ui/standalone/public/lk-wordmark.svg +0 -12
  393. package/ui/standalone/public/opengraph-image-bg.png +0 -0
  394. package/ui/standalone/public/porcupine_params.pv +0 -0
  395. package/ui/standalone/public/robopark-control.html +0 -9200
  396. package/ui/standalone/public/static/robopark/barracuda.png +0 -0
  397. package/ui/standalone/public/static/robopark/bmw.png +0 -0
  398. package/ui/standalone/public/static/robopark/jaguar.png +0 -0
  399. package/ui/standalone/public/static/robopark/magnus.jpg +0 -0
  400. package/ui/standalone/public/static/robopark/panda.png +0 -0
  401. package/ui/standalone/public/static/robopark/tesla.png +0 -0
  402. package/ui/standalone/public/static/robopark/titan.jpg +0 -0
  403. package/ui/standalone/public/static/robopark/volt.png +0 -0
  404. package/ui/standalone/public/tailnet/index.html +0 -8995
  405. package/ui/standalone/public/transcript-analytics.html +0 -72
  406. package/ui/standalone/public/vendor/livekit-client.umd.js +0 -2
  407. package/ui/standalone/server.js +0 -38
  408. /package/{ui/standalone/public → scheduler/static}/vendor/elevenlabs-client.iife.js +0 -0
@@ -1,6 +1,6 @@
1
- # Camera-only dependencies used by `robopark conversation up`.
2
- # OpenCV is supplied by apt on Raspberry Pi through --system-site-packages.
3
- Flask==3.0.0
4
- Flask-CORS==4.0.0
5
- requests>=2.31
6
- numpy>=2.1; python_version >= '3.13'
1
+ # Camera-only dependencies used by `robopark conversation up`.
2
+ # OpenCV is supplied by apt on Raspberry Pi through --system-site-packages.
3
+ Flask==3.0.0
4
+ Flask-CORS==4.0.0
5
+ requests>=2.31
6
+ numpy>=2.1; python_version >= '3.13'
@@ -1,4 +1,4 @@
1
- fastapi>=0.115
2
- uvicorn>=0.30
3
- pydantic>=2.7
4
- lgpio==0.2.2.0; platform_system == 'Linux'
1
+ fastapi>=0.115
2
+ uvicorn>=0.30
3
+ pydantic>=2.7
4
+ lgpio==0.2.2.0; platform_system == 'Linux'
@@ -67,8 +67,8 @@ pydantic==2.5.0
67
67
  # NETWORKING & HTTP
68
68
  # ============================================================================
69
69
  # HTTP requests
70
- requests==2.31.0
71
- groq>=0.11
70
+ requests==2.31.0
71
+ groq>=0.11
72
72
 
73
73
  # CORS support
74
74
  python-multipart==0.0.6
@@ -1,19 +1,19 @@
1
- # Runtime requirements for the packaged RoboPark vision-agent.
2
- #
3
- # This intentionally excludes the legacy optional YOLO/GPIO stack from
4
- # requirements_pi_unified.txt. The packaged agent launches app_pi_clean.py and
5
- # audio_server_pi.py only. Raspberry Pi OpenCV/PyAudio/Picamera2 are supplied
6
- # by apt and exposed to ~/.robopark/venv through --system-site-packages.
7
- Flask==3.0.0
8
- Flask-CORS==4.0.0
9
- requests>=2.31
10
- fastapi>=0.115
11
- uvicorn[standard]>=0.30
12
- python-multipart>=0.0.12
13
- sounddevice>=0.4.6
14
- soundfile>=0.12.1
15
- groq>=0.11
16
- lgpio==0.2.2.0; platform_system == 'Linux'
17
- # Python 3.13 has no compatible NumPy 1.24 wheel. On older Pi images, use the
18
- # distro NumPy provided through system-site-packages instead.
19
- numpy>=2.1; python_version >= '3.13'
1
+ # Runtime requirements for the packaged RoboPark vision-agent.
2
+ #
3
+ # This intentionally excludes the legacy optional YOLO/GPIO stack from
4
+ # requirements_pi_unified.txt. The packaged agent launches app_pi_clean.py and
5
+ # audio_server_pi.py only. Raspberry Pi OpenCV/PyAudio/Picamera2 are supplied
6
+ # by apt and exposed to ~/.robopark/venv through --system-site-packages.
7
+ Flask==3.0.0
8
+ Flask-CORS==4.0.0
9
+ requests>=2.31
10
+ fastapi>=0.115
11
+ uvicorn[standard]>=0.30
12
+ python-multipart>=0.0.12
13
+ sounddevice>=0.4.6
14
+ soundfile>=0.12.1
15
+ groq>=0.11
16
+ lgpio==0.2.2.0; platform_system == 'Linux'
17
+ # Python 3.13 has no compatible NumPy 1.24 wheel. On older Pi images, use the
18
+ # distro NumPy provided through system-site-packages instead.
19
+ numpy>=2.1; python_version >= '3.13'
package/vision/run.sh CHANGED
@@ -1,244 +1,244 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
- STATE_DIR="$ROOT_DIR/.run"
6
- LOG_DIR="$STATE_DIR/logs"
7
- VENV_DIR="$ROOT_DIR/venv"
8
-
9
- mkdir -p "$LOG_DIR"
10
-
11
- if [ -f "$ROOT_DIR/.env" ]; then
12
- set -a
13
- source "$ROOT_DIR/.env"
14
- set +a
15
- fi
16
-
17
- source "$ROOT_DIR/services/services.sh"
18
-
19
- require_venv() {
20
- if [ ! -f "$VENV_DIR/bin/activate" ]; then
21
- echo "Missing venv. Run: ./install.sh"
22
- exit 1
23
- fi
24
- }
25
-
26
- is_running() {
27
- local name="$1"
28
- local pid_file="$STATE_DIR/$name.pid"
29
- if [ ! -f "$pid_file" ]; then
30
- return 1
31
- fi
32
- local pid
33
- pid="$(cat "$pid_file" 2>/dev/null || true)"
34
- if [ -z "$pid" ]; then
35
- return 1
36
- fi
37
- kill -0 "$pid" >/dev/null 2>&1
38
- }
39
-
40
- start_one() {
41
- local name="$1"
42
- local cmd_var="SERVICE_${name}_CMD"
43
- local cmd
44
- cmd="${!cmd_var}"
45
- if [ -z "$cmd" ]; then
46
- echo "Unknown service: $name"
47
- exit 1
48
- fi
49
-
50
- if is_running "$name"; then
51
- echo "$name already running"
52
- return 0
53
- fi
54
-
55
- require_venv
56
- source "$VENV_DIR/bin/activate"
57
-
58
- local log_file="$LOG_DIR/$name.log"
59
- local pid_file="$STATE_DIR/$name.pid"
60
-
61
- echo "Starting $name"
62
- nohup bash -lc "cd \"$ROOT_DIR\" && source \"$VENV_DIR/bin/activate\" && $cmd" >>"$log_file" 2>&1 &
63
- echo $! >"$pid_file"
64
- }
65
-
66
- detect_terminal() {
67
- if command -v lxterminal >/dev/null 2>&1; then
68
- echo "lxterminal"
69
- return 0
70
- fi
71
- if command -v gnome-terminal >/dev/null 2>&1; then
72
- echo "gnome-terminal"
73
- return 0
74
- fi
75
- if command -v xterm >/dev/null 2>&1; then
76
- echo "xterm"
77
- return 0
78
- fi
79
- return 1
80
- }
81
-
82
- start_one_term() {
83
- local name="$1"
84
- local cmd_var="SERVICE_${name}_CMD"
85
- local cmd
86
- cmd="${!cmd_var}"
87
- if [ -z "$cmd" ]; then
88
- echo "Unknown service: $name"
89
- exit 1
90
- fi
91
-
92
- if is_running "$name"; then
93
- echo "$name already running"
94
- return 0
95
- fi
96
-
97
- require_venv
98
-
99
- local term
100
- term="$(detect_terminal || true)"
101
- if [ -z "$term" ]; then
102
- echo "No supported terminal found (need lxterminal, gnome-terminal, or xterm)"
103
- exit 1
104
- fi
105
-
106
- local log_file="$LOG_DIR/$name.log"
107
- local pid_file="$STATE_DIR/$name.pid"
108
- local title="RoboVision:$name"
109
- local run_cmd
110
- run_cmd="cd \"$ROOT_DIR\" && source \"$VENV_DIR/bin/activate\" && exec $cmd"
111
-
112
- echo "Starting $name in terminal ($term)"
113
-
114
- if [ "$term" = "lxterminal" ]; then
115
- lxterminal --title="$title" --command="bash -lc '$run_cmd'" >>"$log_file" 2>&1 &
116
- echo $! >"$pid_file"
117
- return 0
118
- fi
119
-
120
- if [ "$term" = "gnome-terminal" ]; then
121
- gnome-terminal --title="$title" -- bash -lc "$run_cmd" >>"$log_file" 2>&1 &
122
- echo $! >"$pid_file"
123
- return 0
124
- fi
125
-
126
- if [ "$term" = "xterm" ]; then
127
- xterm -T "$title" -e bash -lc "$run_cmd" >>"$log_file" 2>&1 &
128
- echo $! >"$pid_file"
129
- return 0
130
- fi
131
- }
132
-
133
- stop_one() {
134
- local name="$1"
135
- local pid_file="$STATE_DIR/$name.pid"
136
-
137
- if ! is_running "$name"; then
138
- rm -f "$pid_file"
139
- echo "$name not running"
140
- return 0
141
- fi
142
-
143
- local pid
144
- pid="$(cat "$pid_file")"
145
- echo "Stopping $name (pid $pid)"
146
- kill "$pid" >/dev/null 2>&1 || true
147
-
148
- local i
149
- for i in $(seq 1 30); do
150
- if kill -0 "$pid" >/dev/null 2>&1; then
151
- sleep 0.2
152
- else
153
- break
154
- fi
155
- done
156
-
157
- if kill -0 "$pid" >/dev/null 2>&1; then
158
- kill -9 "$pid" >/dev/null 2>&1 || true
159
- fi
160
-
161
- rm -f "$pid_file"
162
- }
163
-
164
- status_one() {
165
- local name="$1"
166
- local port_var="SERVICE_${name}_PORT"
167
- local port
168
- port="${!port_var}"
169
-
170
- if is_running "$name"; then
171
- echo "$name: running (port ${port:-n/a})"
172
- else
173
- echo "$name: stopped"
174
- fi
175
- }
176
-
177
- tail_one() {
178
- local name="$1"
179
- local log_file="$LOG_DIR/$name.log"
180
- if [ ! -f "$log_file" ]; then
181
- echo "No log file: $log_file"
182
- exit 1
183
- fi
184
- tail -n 200 -f "$log_file"
185
- }
186
-
187
- usage() {
188
- echo "Usage: ./run.sh <start|start-term|stop|restart|status|logs> [service]"
189
- echo "Services: ${SERVICES[*]}"
190
- }
191
-
192
- ACTION="${1:-}"
193
- NAME="${2:-all}"
194
-
195
- case "$ACTION" in
196
- start)
197
- if [ "$NAME" = "all" ]; then
198
- for s in "${SERVICES[@]}"; do start_one "$s"; done
199
- else
200
- start_one "$NAME"
201
- fi
202
- ;;
203
- start-term)
204
- if [ "$NAME" = "all" ]; then
205
- for s in "${SERVICES[@]}"; do start_one_term "$s"; done
206
- else
207
- start_one_term "$NAME"
208
- fi
209
- ;;
210
- stop)
211
- if [ "$NAME" = "all" ]; then
212
- for s in "${SERVICES[@]}"; do stop_one "$s"; done
213
- else
214
- stop_one "$NAME"
215
- fi
216
- ;;
217
- restart)
218
- if [ "$NAME" = "all" ]; then
219
- for s in "${SERVICES[@]}"; do stop_one "$s"; done
220
- for s in "${SERVICES[@]}"; do start_one "$s"; done
221
- else
222
- stop_one "$NAME"
223
- start_one "$NAME"
224
- fi
225
- ;;
226
- status)
227
- if [ "$NAME" = "all" ]; then
228
- for s in "${SERVICES[@]}"; do status_one "$s"; done
229
- else
230
- status_one "$NAME"
231
- fi
232
- ;;
233
- logs)
234
- if [ "$NAME" = "all" ]; then
235
- echo "Specify a service for logs"
236
- exit 1
237
- fi
238
- tail_one "$NAME"
239
- ;;
240
- *)
241
- usage
242
- exit 1
243
- ;;
244
- esac
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ STATE_DIR="$ROOT_DIR/.run"
6
+ LOG_DIR="$STATE_DIR/logs"
7
+ VENV_DIR="$ROOT_DIR/venv"
8
+
9
+ mkdir -p "$LOG_DIR"
10
+
11
+ if [ -f "$ROOT_DIR/.env" ]; then
12
+ set -a
13
+ source "$ROOT_DIR/.env"
14
+ set +a
15
+ fi
16
+
17
+ source "$ROOT_DIR/services/services.sh"
18
+
19
+ require_venv() {
20
+ if [ ! -f "$VENV_DIR/bin/activate" ]; then
21
+ echo "Missing venv. Run: ./install.sh"
22
+ exit 1
23
+ fi
24
+ }
25
+
26
+ is_running() {
27
+ local name="$1"
28
+ local pid_file="$STATE_DIR/$name.pid"
29
+ if [ ! -f "$pid_file" ]; then
30
+ return 1
31
+ fi
32
+ local pid
33
+ pid="$(cat "$pid_file" 2>/dev/null || true)"
34
+ if [ -z "$pid" ]; then
35
+ return 1
36
+ fi
37
+ kill -0 "$pid" >/dev/null 2>&1
38
+ }
39
+
40
+ start_one() {
41
+ local name="$1"
42
+ local cmd_var="SERVICE_${name}_CMD"
43
+ local cmd
44
+ cmd="${!cmd_var}"
45
+ if [ -z "$cmd" ]; then
46
+ echo "Unknown service: $name"
47
+ exit 1
48
+ fi
49
+
50
+ if is_running "$name"; then
51
+ echo "$name already running"
52
+ return 0
53
+ fi
54
+
55
+ require_venv
56
+ source "$VENV_DIR/bin/activate"
57
+
58
+ local log_file="$LOG_DIR/$name.log"
59
+ local pid_file="$STATE_DIR/$name.pid"
60
+
61
+ echo "Starting $name"
62
+ nohup bash -lc "cd \"$ROOT_DIR\" && source \"$VENV_DIR/bin/activate\" && $cmd" >>"$log_file" 2>&1 &
63
+ echo $! >"$pid_file"
64
+ }
65
+
66
+ detect_terminal() {
67
+ if command -v lxterminal >/dev/null 2>&1; then
68
+ echo "lxterminal"
69
+ return 0
70
+ fi
71
+ if command -v gnome-terminal >/dev/null 2>&1; then
72
+ echo "gnome-terminal"
73
+ return 0
74
+ fi
75
+ if command -v xterm >/dev/null 2>&1; then
76
+ echo "xterm"
77
+ return 0
78
+ fi
79
+ return 1
80
+ }
81
+
82
+ start_one_term() {
83
+ local name="$1"
84
+ local cmd_var="SERVICE_${name}_CMD"
85
+ local cmd
86
+ cmd="${!cmd_var}"
87
+ if [ -z "$cmd" ]; then
88
+ echo "Unknown service: $name"
89
+ exit 1
90
+ fi
91
+
92
+ if is_running "$name"; then
93
+ echo "$name already running"
94
+ return 0
95
+ fi
96
+
97
+ require_venv
98
+
99
+ local term
100
+ term="$(detect_terminal || true)"
101
+ if [ -z "$term" ]; then
102
+ echo "No supported terminal found (need lxterminal, gnome-terminal, or xterm)"
103
+ exit 1
104
+ fi
105
+
106
+ local log_file="$LOG_DIR/$name.log"
107
+ local pid_file="$STATE_DIR/$name.pid"
108
+ local title="RoboVision:$name"
109
+ local run_cmd
110
+ run_cmd="cd \"$ROOT_DIR\" && source \"$VENV_DIR/bin/activate\" && exec $cmd"
111
+
112
+ echo "Starting $name in terminal ($term)"
113
+
114
+ if [ "$term" = "lxterminal" ]; then
115
+ lxterminal --title="$title" --command="bash -lc '$run_cmd'" >>"$log_file" 2>&1 &
116
+ echo $! >"$pid_file"
117
+ return 0
118
+ fi
119
+
120
+ if [ "$term" = "gnome-terminal" ]; then
121
+ gnome-terminal --title="$title" -- bash -lc "$run_cmd" >>"$log_file" 2>&1 &
122
+ echo $! >"$pid_file"
123
+ return 0
124
+ fi
125
+
126
+ if [ "$term" = "xterm" ]; then
127
+ xterm -T "$title" -e bash -lc "$run_cmd" >>"$log_file" 2>&1 &
128
+ echo $! >"$pid_file"
129
+ return 0
130
+ fi
131
+ }
132
+
133
+ stop_one() {
134
+ local name="$1"
135
+ local pid_file="$STATE_DIR/$name.pid"
136
+
137
+ if ! is_running "$name"; then
138
+ rm -f "$pid_file"
139
+ echo "$name not running"
140
+ return 0
141
+ fi
142
+
143
+ local pid
144
+ pid="$(cat "$pid_file")"
145
+ echo "Stopping $name (pid $pid)"
146
+ kill "$pid" >/dev/null 2>&1 || true
147
+
148
+ local i
149
+ for i in $(seq 1 30); do
150
+ if kill -0 "$pid" >/dev/null 2>&1; then
151
+ sleep 0.2
152
+ else
153
+ break
154
+ fi
155
+ done
156
+
157
+ if kill -0 "$pid" >/dev/null 2>&1; then
158
+ kill -9 "$pid" >/dev/null 2>&1 || true
159
+ fi
160
+
161
+ rm -f "$pid_file"
162
+ }
163
+
164
+ status_one() {
165
+ local name="$1"
166
+ local port_var="SERVICE_${name}_PORT"
167
+ local port
168
+ port="${!port_var}"
169
+
170
+ if is_running "$name"; then
171
+ echo "$name: running (port ${port:-n/a})"
172
+ else
173
+ echo "$name: stopped"
174
+ fi
175
+ }
176
+
177
+ tail_one() {
178
+ local name="$1"
179
+ local log_file="$LOG_DIR/$name.log"
180
+ if [ ! -f "$log_file" ]; then
181
+ echo "No log file: $log_file"
182
+ exit 1
183
+ fi
184
+ tail -n 200 -f "$log_file"
185
+ }
186
+
187
+ usage() {
188
+ echo "Usage: ./run.sh <start|start-term|stop|restart|status|logs> [service]"
189
+ echo "Services: ${SERVICES[*]}"
190
+ }
191
+
192
+ ACTION="${1:-}"
193
+ NAME="${2:-all}"
194
+
195
+ case "$ACTION" in
196
+ start)
197
+ if [ "$NAME" = "all" ]; then
198
+ for s in "${SERVICES[@]}"; do start_one "$s"; done
199
+ else
200
+ start_one "$NAME"
201
+ fi
202
+ ;;
203
+ start-term)
204
+ if [ "$NAME" = "all" ]; then
205
+ for s in "${SERVICES[@]}"; do start_one_term "$s"; done
206
+ else
207
+ start_one_term "$NAME"
208
+ fi
209
+ ;;
210
+ stop)
211
+ if [ "$NAME" = "all" ]; then
212
+ for s in "${SERVICES[@]}"; do stop_one "$s"; done
213
+ else
214
+ stop_one "$NAME"
215
+ fi
216
+ ;;
217
+ restart)
218
+ if [ "$NAME" = "all" ]; then
219
+ for s in "${SERVICES[@]}"; do stop_one "$s"; done
220
+ for s in "${SERVICES[@]}"; do start_one "$s"; done
221
+ else
222
+ stop_one "$NAME"
223
+ start_one "$NAME"
224
+ fi
225
+ ;;
226
+ status)
227
+ if [ "$NAME" = "all" ]; then
228
+ for s in "${SERVICES[@]}"; do status_one "$s"; done
229
+ else
230
+ status_one "$NAME"
231
+ fi
232
+ ;;
233
+ logs)
234
+ if [ "$NAME" = "all" ]; then
235
+ echo "Specify a service for logs"
236
+ exit 1
237
+ fi
238
+ tail_one "$NAME"
239
+ ;;
240
+ *)
241
+ usage
242
+ exit 1
243
+ ;;
244
+ esac
@@ -1,12 +1,12 @@
1
- #!/usr/bin/env bash
2
-
3
- SERVICES=("vision" "motor" "audio")
4
-
5
- SERVICE_vision_PORT=5000
6
- SERVICE_vision_CMD="python app_pi_clean.py"
7
-
8
- SERVICE_motor_PORT=8001
9
- SERVICE_motor_CMD="python motor_server.py"
10
-
11
- SERVICE_audio_PORT=8000
12
- SERVICE_audio_CMD="python audio_server_pi.py"
1
+ #!/usr/bin/env bash
2
+
3
+ SERVICES=("vision" "motor" "audio")
4
+
5
+ SERVICE_vision_PORT=5000
6
+ SERVICE_vision_CMD="python app_pi_clean.py"
7
+
8
+ SERVICE_motor_PORT=8001
9
+ SERVICE_motor_CMD="python motor_server.py"
10
+
11
+ SERVICE_audio_PORT=8000
12
+ SERVICE_audio_CMD="python audio_server_pi.py"
@@ -1,7 +0,0 @@
1
- /**
2
- * OpenKernel — Core Type Definitions
3
- *
4
- * Provider-agnostic AI execution kernel types.
5
- * Mission → Objectives → Tasks → Workers → Providers.
6
- */
7
- export {};