robopark 3.1.2 → 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 (101) hide show
  1. package/README.md +66 -95
  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 +4 -6
  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 -25
  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/{static → scheduler/static}/vendor/elevenlabs-client.iife.js +24199 -24199
  73. package/scheduler/static/voice-join.html +177 -0
  74. package/screen/screen_runtime.py +75 -75
  75. package/vision/app_pi_clean.py +297 -297
  76. package/vision/audio_server_pi.py +24 -24
  77. package/vision/install.sh +34 -34
  78. package/vision/motor_server.py +275 -275
  79. package/vision/requirements_camera.txt +6 -6
  80. package/vision/requirements_motor.txt +4 -4
  81. package/vision/requirements_pi_unified.txt +2 -2
  82. package/vision/requirements_vision_agent.txt +19 -19
  83. package/vision/run.sh +244 -244
  84. package/vision/services/services.sh +12 -12
  85. package/dist/kernel/types.js +0 -7
  86. package/dist/robopark/access.js +0 -99
  87. package/dist/robopark/control-center-html.js +0 -9191
  88. package/dist/robopark/control-server.js +0 -148
  89. package/dist/robopark/deployment-commands.js +0 -47
  90. package/dist/robopark/standalone.js +0 -562
  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
@@ -1,99 +0,0 @@
1
- import { createHash, timingSafeEqual } from 'node:crypto';
2
- import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs';
3
- import { homedir } from 'node:os';
4
- import { join, resolve } from 'node:path';
5
- const ACCESS_HASH = 'af6bf6bcf8f63360a09a15c211f0824b608d3ce462e8a53fc45dfc63b42e4751';
6
- const STATE_DIR = process.env.ROBOPARK_HOME
7
- ? resolve(process.env.ROBOPARK_HOME)
8
- : join(homedir(), '.robopark');
9
- const ACCESS_PATH = join(STATE_DIR, 'package-access.json');
10
- function digest(value) {
11
- return createHash('sha256').update(value, 'utf8').digest();
12
- }
13
- export function passwordMatches(value) {
14
- const expected = Buffer.from(ACCESS_HASH, 'hex');
15
- const actual = digest(value);
16
- return actual.length === expected.length && timingSafeEqual(actual, expected);
17
- }
18
- function jsonHas(path, keys) {
19
- if (!existsSync(path))
20
- return false;
21
- try {
22
- const value = JSON.parse(readFileSync(path, 'utf8'));
23
- return keys.every(key => typeof value[key] === 'string' && String(value[key]).trim().length > 0);
24
- }
25
- catch {
26
- return false;
27
- }
28
- }
29
- function validDeviceToken() {
30
- const path = join(STATE_DIR, 'device_token');
31
- if (!existsSync(path))
32
- return false;
33
- try {
34
- return readFileSync(path, 'utf8').trim().length >= 20;
35
- }
36
- catch {
37
- return false;
38
- }
39
- }
40
- function validSchedulerDatabase() {
41
- const path = join(STATE_DIR, 'scheduler', 'scheduler.db');
42
- if (!existsSync(path) || statSync(path).size < 100)
43
- return false;
44
- try {
45
- const header = readFileSync(path).subarray(0, 16).toString('utf8');
46
- return header === 'SQLite format 3\u0000';
47
- }
48
- catch {
49
- return false;
50
- }
51
- }
52
- /** Existing enrolled robots and gateways upgrade without an activation outage. */
53
- export function hasExistingRoboParkIdentity() {
54
- return validDeviceToken()
55
- || validSchedulerDatabase()
56
- || jsonHas(join(STATE_DIR, 'connection.json'), ['schedulerUrl', 'deviceId', 'deviceToken'])
57
- || jsonHas(join(STATE_DIR, 'preview_agent.json'), ['scheduler_url'])
58
- || jsonHas(join(STATE_DIR, 'hub-profile.json'), ['hubUrl']);
59
- }
60
- function activated() {
61
- if (!existsSync(ACCESS_PATH))
62
- return false;
63
- try {
64
- const record = JSON.parse(readFileSync(ACCESS_PATH, 'utf8'));
65
- return record.accessHash === ACCESS_HASH;
66
- }
67
- catch {
68
- return false;
69
- }
70
- }
71
- function writeActivation(source) {
72
- mkdirSync(STATE_DIR, { recursive: true });
73
- const temp = `${ACCESS_PATH}.${process.pid}.tmp`;
74
- writeFileSync(temp, `${JSON.stringify({
75
- version: 1,
76
- accessHash: ACCESS_HASH,
77
- source,
78
- activatedAt: new Date().toISOString(),
79
- }, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
80
- renameSync(temp, ACCESS_PATH);
81
- }
82
- export function activateFromPairing() {
83
- if (!activated())
84
- writeActivation('pairing');
85
- }
86
- export function requirePackageAccess(password) {
87
- if (activated())
88
- return;
89
- if (hasExistingRoboParkIdentity()) {
90
- writeActivation('existing-install');
91
- return;
92
- }
93
- const candidate = password?.trim() || process.env.ROBOPARK_PACKAGE_PASSWORD?.trim();
94
- if (candidate && passwordMatches(candidate)) {
95
- writeActivation('password');
96
- return;
97
- }
98
- throw new Error('RoboPark activation required. Set ROBOPARK_PACKAGE_PASSWORD or pass `robopark --password <password> ...` once.');
99
- }