-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
421 lines (406 loc) · 20.9 KB
/
Copy path.env.example
File metadata and controls
421 lines (406 loc) · 20.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
# Required for Docker build. Use the local BT Ops checkout next to this repository.
BTOPS_LOCAL_CONTEXT=../btops_ws
BTOPS_REF=cda8abb706d1c5c4132f7661d83a33c4c5b65e9c
AUTO_APMS_REPO_URL=https://github.com/AutoAPMS/auto-apms.git
AUTO_APMS_REF=19ac8d558e35f657b8464694c5ddc524c6c31861
# ROS runtime defaults
ROS_DOMAIN_ID=0
ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST
RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# Base/dev stays LOCALHOST and does not load a deployment-specific NIC profile.
# External mode env files enable the reviewed wired profile explicitly.
CYCLONEDDS_URI=
# Docker services must never inherit a host-only file:// path. Mode env files
# set this to the path as mounted inside /workspaces/taskplanner_ws.
TASKPLANNER_CONTAINER_CYCLONEDDS_URI=
# Image and Shadow launch compatibility marker. Set BUILD_SHA to the source
# revision used for a reproducible image.
TASKPLANNER_BUILD_VERSION=0.1.0-dev
TASKPLANNER_BUILD_SHA=unknown
TASKPLANNER_SHADOW_CONTRACT_VERSION=shadow-rfdetr-preflight-v1
# Deployment-owned paths. Keep datasets, model weights, caches, and run output
# outside the Git checkout so the application image can be distributed alone.
SHADOW_DATASET_ROOT=${HOME}/.local/share/taskplanner/datasets/shadow
RFDETR_MODEL_ROOT=${HOME}/.local/share/taskplanner/models/rfdetr
HF_CACHE_DIR=${HOME}/.cache/huggingface
VLLM_CACHE_DIR=${HOME}/.cache/vllm
TASKPLANNER_RUN_ROOT=${HOME}/.local/share/taskplanner/runs
TASKPLANNER_UID=1000
TASKPLANNER_GID=1000
TASKPLANNER_COMPOSE_WAIT_SEC=300
# Fast startup defaults: reuse repository build/install and the persistent
# webapp node_modules volume. Set true explicitly, or use launcher --build.
TASKPLANNER_REBUILD_ON_START=false
WEBAPP_INSTALL_ON_START=false
# Input boundary. External mode receives complete sentence text and never starts
# mock robot Action servers.
INPUT_PROFILE=simulation
EXECUTION_BACKEND=mock
TASKPLANNER_DEFAULT_BUNDLE=thyroidectomy
SPEECH_INPUT_MODE=utterance
SENTENCE_INPUT_TOPIC=/sensors/surgeon/sentence
SPEECH_MIN_CONFIDENCE=0.55
SPEECH_MAX_AGE_SEC=3.0
SPEECH_SOURCE_TIMEOUT_SEC=5.0
# VIPLab external camera contract. Live/LLM dashboards subscribe to these
# source topics directly; Shadow mode keeps the internal replay topics.
VITE_EXTERNAL_CAM1_TOPIC=/synced/cam_1/color/image_raw/compressed
VITE_EXTERNAL_CAM2_TOPIC=/synced/cam_2/color/image_raw/compressed
VITE_EXTERNAL_CAM3_TOPIC=/synced/cam_3/color/image_raw/compressed
VITE_EXTERNAL_CAM4_TOPIC=/synced/cam_4/color/image_raw/compressed
VITE_EXTERNAL_FLIR_TOPIC=/synced/flir/color/image_raw/compressed
# VLM defaults. Video/live frames advance independently of inference. The VLM
# runs one request at a time and retains only the newest pending frame, so the
# next request starts immediately after the previous response without backlog.
# real automatically falls back to explicit voice commands while VLM is unhealthy.
# Use voice_only to avoid launching a VLM node at all.
VLM_MODE=real
VLM_PROVIDER_ID=vllm
VLM_BASE_URL=http://127.0.0.1:8001
VLM_API_KEY=
VLM_MODEL_ID=unsloth/gemma-4-E4B-it-NVFP4
VLM_API_MODE=openai_compat
VLM_PUBLISH_PERIOD_SEC=1.0
VLM_IMAGE_STALE_SEC=3.0
VLM_MAX_OUTPUT_TOKENS=320
VLM_GENERATION_SEED=0
VLM_RESPONSE_FORMAT=json_schema
VLM_REASONING_EFFORT=none
VLM_CONTEXT_MODE=actor_log
# Closed six-command retractor text interpreter. Empty overrides use each
# runtime profile's reviewed default: Live follows its configured VLM, while
# standalone Debug uses the managed text-capable NInfer worker.
RETRACTOR_VOICE_INTERPRETER_MODE=vlm_with_fallback
RETRACTOR_VOICE_VLM_BASE_URL=
RETRACTOR_VOICE_VLM_MODEL_ID=
RETRACTOR_VOICE_VLM_API_KEY=
RETRACTOR_VOICE_VLM_TIMEOUT_SEC=2.0
# LLM surgeon actor defaults.
SURGEON_ACTOR_MODE=llm
ACTOR_PROVIDER_ID=auto
ACTOR_BASE_URL=http://127.0.0.1:1234
ACTOR_API_KEY=
ACTOR_MODEL_ID=google/gemma-4-12b-qat
ACTOR_RESPONSE_FORMAT=json_schema
ACTOR_REASONING_EFFORT=none
ENABLE_NO_IMAGE_CAMERA=true
ENABLE_SYNTHETIC_SCENE_CAMERA=false
# Local OpenAI-compatible model providers. LM Studio uses its native catalog
# first so loaded/unloaded state is visible, then falls back to /v1/models.
# Provider API keys stay in the ROS runtime and are never returned to the browser.
MODEL_PROVIDER_DISCOVERY_TIMEOUT_SEC=2.5
MODEL_PROVIDER_RUNTIME_TIMEOUT_SEC=900
LMSTUDIO_BASE_URL=http://127.0.0.1:1234
LMSTUDIO_API_KEY=
LMSTUDIO_PROVIDER_ENABLED=true
LMSTUDIO_PROVIDER_MANAGED=true
UNSLOTH_BASE_URL=http://127.0.0.1:8888
# When empty, Compose reuses VLM_API_KEY for Unsloth Studio.
UNSLOTH_API_KEY=
UNSLOTH_PROVIDER_ENABLED=true
UNSLOTH_PROVIDER_MANAGED=true
VLLM_BASE_URL=http://127.0.0.1:8001
VLLM_API_KEY=
VLLM_PROVIDER_ENABLED=true
VLLM_PROVIDER_MANAGED=true
NINFER_BASE_URL=http://127.0.0.1:8080
NINFER_API_KEY=
NINFER_PROVIDER_ENABLED=true
NINFER_PROVIDER_MANAGED=true
NINFER_MANAGER_ENABLED=true
# Keep the NInfer source build and .ninfer artifacts outside this repository.
# Compose mounts these read-only into the NInfer control-plane container. The
# manager starts unloaded and exposes only artifact files that are present.
NINFER_RUNTIME_ROOT=
NINFER_CUDA_ROOT=/usr/local/cuda-13.1
NINFER_35B_ARTIFACT_REL=models/qwen3_6_35b_a3b.ninfer
NINFER_35B_MAX_CONTEXT=8192
# Legacy host-manager catalogs are no longer required for Compose startup.
# This is retained only for direct use of scripts/ninfer_runtime_manager.py.
NINFER_MODEL_CATALOG_PATH=
NINFER_MANAGER_HOST=127.0.0.1
NINFER_MANAGER_PORT=8080
NINFER_MANAGER_WORKER_HOST=127.0.0.1
NINFER_MANAGER_WORKER_PORT=8082
NINFER_MANAGER_STARTUP_TIMEOUT_SEC=600
NINFER_MANAGER_SHUTDOWN_TIMEOUT_SEC=45
# Perception input mode (Live versus Replay), implementation, and worker location
# are independent. Empty new-axis values intentionally preserve the legacy
# PERCEPTION_BACKEND/RFDETR_SERVICE_URL mapping below.
ENABLE_RFDETR_PERCEPTION=true
PERCEPTION_PROVIDER=
PERCEPTION_LOCATION=
PERCEPTION_ENDPOINT=
# Legacy aliases: local => builtin_rfdetr/local, external =>
# pnu_hand_blood/remote, disabled => disabled/local. Prefer the explicit axes;
# the PNU adapter is identical for a local loopback or authenticated LAN worker.
PERCEPTION_BACKEND=local
REQUIRE_PERCEPTION_ON_START=false
RFDETR_SERVICE_URL=http://127.0.0.1:8010
RFDETR_PREFLIGHT_TIMEOUT_SEC=2.0
# Opt-in image compatibility spike. Defaults preserve the deployed RF-DETR
# image; select Dockerfile.unified and a distinct tag only for reviewed tests.
PERCEPTION_DOCKERFILE=docker/rfdetr-perception/Dockerfile
PERCEPTION_IMAGE=taskplanner-rfdetr-perception:0.1.0
RFDETR_BASE_IMAGE=pytorch/pytorch:2.8.0-cuda12.9-cudnn9-runtime@sha256:e05438443ae3c407e8d04447091a959dbb6757b6290b128770c3c787d4bd442b
RFDETR_BIND_HOST=127.0.0.1
RFDETR_PORT=8010
RFDETR_FRAME_RATE=15.0
RFDETR_JPEG_QUALITY=90
# PNU Hand/Tool/Blood worker. The source checkout and model assets are mounted
# read-only and remain outside this repository. Local selection derives
# http://127.0.0.1:8020 when both endpoint aliases are empty. Remote selection
# must set PERCEPTION_ENDPOINT to a non-loopback HTTPS origin by default.
PNU_SERVICE_URL=
PNU_DOCKERFILE=docker/pnu-perception/Dockerfile
PNU_IMAGE=taskplanner-pnu-perception:0.1.0
PNU_BASE_IMAGE=taskplanner-rfdetr-perception:unified-compat
PNU_UPSTREAM_ROOT=${HOME}/.local/share/taskplanner/models/pnu_hand_blood/upstream/hand-blood-tools-0f9e93115b8c
PNU_EXPECTED_UPSTREAM_COMMIT=0f9e93115b8cc1d470398c92e010e3fc6ef1de5d
PNU_MODEL_ROOT=${HOME}/.local/share/taskplanner/models/pnu_hand_blood
PNU_TOOL_CHECKPOINT_REL=cam4_rfdetr_seg_small_regular_resume_e13_best.pth
PNU_BLOOD_CHECKPOINT_REL=blood_detection.pth
PNU_HAND_MODEL_REL=hand_landmarker.task
PNU_EXPECTED_MODEL_DIGESTS_JSON={"tool":"253617aa5337fec219d694ca50537e4867fb8c403ce60f3a6945bbe15fecf430","blood":"f4967b2b8c7ab63921f8aa9b2ea0a4e3324243a9b98253da3ea4b9ecd6df6f75"}
# Standalone Debug can run the ROS adapter without a planner. Keep it disabled
# in the base environment so Live/LLM Debug sidecars never duplicate the
# operational perception bridge; docker/orchestration/debug.env enables it.
ENABLE_PNU_DEBUG_PERCEPTION=false
PNU_DEBUG_REQUESTED_ALGORITHMS=tool,blood
PNU_WORKER_REQUIRED_ALGORITHMS=tool,blood
PNU_DEBUG_MAX_RATE_HZ=5.0
# Read-only transparent overlays are kept separate so operators can toggle
# instance evidence and validated pose axes independently in Debug.
CAM4_OVERLAY_TOPIC=/surgery/images/cam4/detection_overlay/compressed
CAM4_POSE_OVERLAY_TOPIC=/surgery/images/cam4/pose_overlay/compressed
# Depth Units must be read from the active RealSense sensor. Keep validation
# false for an unknown camera/replay. The reviewed VIPLab CAM4 Live profile
# pins its current D455 reading (0.001 m per integer depth unit).
PNU_DEPTH_SCALE_M_PER_UNIT=0.0
PNU_DEPTH_SCALE_VALIDATED=false
# Registration is a separate claim from metric units. Enable it only when the
# configured input is librealsense depth-to-color output and the bridge's
# frame, dimensions, CameraInfo, timestamp, and scale checks all pass.
PNU_DEPTH_ALIGNMENT_VALIDATED=false
PNU_DEPTH_ALIGNMENT_ID=
# When perception startup itself is required, optionally reject semantic-only
# readiness until the bridge has a validated RGB-grid metric-depth frame.
PNU_REQUIRE_METRIC_3D_ON_START=false
PNU_BIND_HOST=127.0.0.1
PNU_PORT=8020
PNU_DEVICE_POLICY=cuda_required
PNU_OPTIMIZE_RFDETR=true
PNU_TOOL_THRESHOLD=0.30
PNU_BLOOD_THRESHOLD=0.50
PNU_MAX_HANDS=2
PNU_MAX_TOTAL_RLE_COUNTS=1000000
PNU_MAX_RESPONSE_JSON_BYTES=16777216
PNU_MAX_INGRESS_READ_SEC=1.0
# Reviewed CAM4 blue-tray plane. The worker still revalidates the read-only
# artifact, camera provenance, expiry, and current-frame drift before exposing
# planar orientation; any mismatch degrades to position-only.
PNU_TOOL_SUPPORT_PLANE_NORMAL=0.046450707785,0.055576411879,-0.997373347443
PNU_TOOL_SUPPORT_PLANE_OFFSET_M=0.797796943113
PNU_TOOL_SUPPORT_PLANE_CONFIG_VERSION=viplab_cam4_146222251000_support_plane_v1_sha256_b683ecd5a5382a4f
PNU_TOOL_SUPPORT_PLANE_INLIER_RATIO=0.854928571429
PNU_TOOL_SUPPORT_PLANE_RESIDUAL_P95_M=0.014164174501
PNU_TOOL_SUPPORT_PLANE_VALIDATED=true
PNU_TOOL_SUPPORT_PLANE_ARTIFACT=/config/pnu_perception/cam4_support_plane_20260821.json
PNU_TOOL_SUPPORT_PLANE_ARTIFACT_SHA256=859fac1b528976a10ec9dbd67aa1baa979635d31dd944057e6e0c9594d9e68a2
PNU_TOOL_SUPPORT_PLANE_CAMERA_SERIAL=146222251000
PNU_TOOL_SUPPORT_PLANE_CAMERA_PROFILE='RGB 1280x720x15; depth 1280x720x15'
PNU_TOOL_SUPPORT_PLANE_FIRMWARE_VERSION=5.15.0.2
PNU_TOOL_SUPPORT_PLANE_MAX_AGE_DAYS=30
PNU_EXPECTED_TOOL_SUPPORT_PLANE_CONFIG_VERSION=viplab_cam4_146222251000_support_plane_v1_sha256_b683ecd5a5382a4f
# For a remote worker, put one token in PNU_SECRET_ROOT/token, set both paths
# below to /run/taskplanner/perception/token, bind the remote worker on its LAN
# interface, and firewall TCP/8020 to the Taskplanner host. Remote endpoints
# require HTTPS by default. Plain HTTP is only an explicit, isolated trusted-LAN
# development exception; it does not disable the separate bearer-token policy.
# URL credentials are rejected and token values are never included in diagnostics.
PNU_SECRET_ROOT=${HOME}/.config/taskplanner/perception
PNU_CLIENT_API_TOKEN_FILE=
PNU_WORKER_API_TOKEN_FILE=
PNU_ALLOW_INSECURE_REMOTE_HTTP=false
PNU_ALLOW_UNAUTHENTICATED_REMOTE=false
# Read-only public state and stable camera aliases are available by default so
# external UI teams can join before a scenario starts. Set either false only
# for an intentionally isolated deployment.
PUBLISH_SHARED_STATE=true
PUBLISH_CAMERA_ALIASES=true
# Keep camera imagery gated by an active procedure unless a reviewed demo
# profile explicitly opts in to the read-only FLIR-only idle preview.
PUBLISH_FLIR_WHILE_IDLE=false
# ASR transcripts and VLM summaries are free-form and may contain PHI. The
# typed public topics remain available with those fields redacted unless an
# integration deployment explicitly opts in after its privacy review.
PUBLISH_SHARED_FREE_TEXT=false
# Optional comma-separated exact browser Origins, for example
# http://192.168.1.4:4173,https://partner-ui.example. Empty still permits only
# localhost/private-IPv4 Origins; the TCP proxy separately enforces wired LAN.
PUBLIC_ROSBRIDGE_ALLOWED_ORIGINS=
PUBLIC_ROSBRIDGE_PORT=9092
ENABLE_PUBLIC_ROSBRIDGE=true
FLIR_INPUT_TOPIC=/synced/flir/color/image_raw/compressed
CAM3_INPUT_TOPIC=/synced/cam_3/color/image_raw/compressed
CAM4_INPUT_TOPIC=/synced/cam_4/color/image_raw/compressed
CAM3_TOOL_OBSERVATIONS_TOPIC=/perception/cam_3/tool/observations
CAM4_TOOL_OBSERVATIONS_TOPIC=/perception/cam_4/tool/observations
# Optional exact pins. Empty keeps model_version observable without coupling
# planner admission to a producer-owned checkpoint rollout.
CAM3_TOOL_OBSERVATIONS_EXPECTED_MODEL_VERSION=
CAM4_TOOL_OBSERVATIONS_EXPECTED_MODEL_VERSION=
# Pending CV-team interface. CAM4 RGB and the /surgery alias are one physical
# source; tray means the tool-handover tray, not Mayo. Leave timing, TF,
# calibration and ontology policy unresolved until supplied by the owner.
CV_CONTRACT_STATUS_TOPIC=/integration/cv_contract/status
CV_CAM4_RGB_TOPIC=/synced/cam_4/color/image_raw/compressed
CV_CAM4_RGB_ALIAS_TOPIC=/surgery/images/cam4/compressed
CV_CAM4_CAMERA_INFO_TOPIC=/synced/cam_4/color/camera_info
# VIPLab native depth transport is retained for diagnostics. The PNU 3D path
# consumes the separately advertised depth-to-color-aligned compressedDepth
# stream and its matching CameraInfo; neither may be fabricated for RGB-only
# Replay.
CV_CAM4_NATIVE_DEPTH_COMPRESSED_TOPIC=/synced/cam_4/depth/image_rect_raw/compressedDepth
CV_CAM4_DEPTH_CAMERA_INFO_TOPIC=/synced/cam_4/depth/camera_info
CV_CAM4_DEPTH_TO_COLOR_EXTRINSICS_TOPIC=/synced/cam_4/extrinsics/depth_to_color
CV_CAM4_ALIGNED_DEPTH_COMPRESSED_TOPIC=/synced/cam_4/aligned_depth_to_color/image_raw/compressedDepth
CV_CAM4_ALIGNED_DEPTH_CAMERA_INFO_TOPIC=/synced/cam_4/aligned_depth_to_color/camera_info
CV_HANDOVER_TRAY_RGB_TOPIC=/surgery/images/tray/compressed
CV_HANDOVER_TRAY_CAMERA_INFO_TOPIC=/surgery/cameras/tray/color/camera_info
CV_HANDOVER_TRAY_ALIGNED_DEPTH_TOPIC=/surgery/cameras/tray/aligned_depth
RFDETR_FLIR_CHECKPOINT_REL=flir/checkpoint_best_total.pth
RFDETR_CAM4_CHECKPOINT_REL=mayo_bbox_3class_strong_inventory6_20260824/checkpoint_best_regular.pth
RFDETR_CAM3_CHECKPOINT_REL=mayo_bbox_3class_strong_inventory6_20260824/checkpoint_best_regular.pth
# The vLLM manager is part of the common control plane. Its catalog remains
# queryable while the heavyweight worker is unloaded. Mode files force
# AUTO_START=false; model loading is an explicit dashboard/API action.
VLLM_IMAGE=vllm/vllm-openai:v0.26.0@sha256:ffb2d59b1c059a5bd8d781320c9f5189de8293693b7d95da54befddaa54abf52
VLLM_MANAGER_BIND_HOST=127.0.0.1
VLLM_MANAGER_PORT=8001
VLLM_MANAGER_WORKER_HOST=127.0.0.1
VLLM_MANAGER_WORKER_PORT=8002
# The bundled catalog advertises locally cached VLMs and preserves a separate
# launch profile for each model. MODEL_ID chooses the initial/default entry.
VLLM_MANAGER_CATALOG_PATH=/opt/taskplanner-vllm-manager/models.json
VLLM_MANAGER_HF_CACHE_ROOT=/root/.cache/huggingface
VLLM_MANAGER_MODEL_ID=unsloth/gemma-4-E4B-it-NVFP4
# The settings below are used only for a custom model absent from the catalog.
VLLM_MANAGER_SERVED_MODEL_NAME=
VLLM_MANAGER_MAX_MODEL_LEN=8192
VLLM_MANAGER_MAX_NUM_SEQS=1
VLLM_MANAGER_GPU_MEMORY_UTILIZATION=0.80
VLLM_MANAGER_GENERATION_CONFIG=vllm
VLLM_MANAGER_REASONING_PARSER=gemma4
VLLM_MANAGER_SLEEP_ENABLED=true
VLLM_MANAGER_AUTO_START=false
VLLM_MANAGER_STARTUP_TIMEOUT_SEC=600
VLLM_MANAGER_SHUTDOWN_TIMEOUT_SEC=45
VLLM_MANAGER_REQUEST_TIMEOUT_SEC=600
# Used only for a custom model absent from models.json. Catalog models keep
# their own optimized extra arguments.
VLLM_MANAGER_EXTRA_ARGS=
# Replay defaults. Each case is expected at
# ${SHADOW_DATASET_ROOT}/${SHADOW_CASE_ID}/metadata.yaml. Replay remains an
# isolated D71/LOCALHOST graph and intentionally does not inherit the wired
# Cyclone profile used by live, ASR, public bridge, and integration Debug.
TASKPLANNER_ANNOTATION_ROOT=./annotations/observable_tool_events
SHADOW_ROS_DOMAIN_ID=71
SHADOW_CASE_ID=0704_6
SHADOW_BUNDLE_ID=thyroidectomy_demo
SHADOW_REQUIRE_VLM=false
SHADOW_REPLAY_MODE=elastic_demo
SHADOW_REPLAY_RATE=1.0
# Optional Isaac/host camera bridge. Leave blank for the built-in no-image camera.
FIELD_SNAPSHOT_URL=
# Web / rosbridge ports
WEBAPP_PORT=4173
# Keep Vite on loopback and expose only this reviewed wired-LAN address and
# directly connected client subnet through the auto-restarting sidecar.
TASKPLANNER_WEBAPP_LAN_ADDRESS=192.168.1.4
TASKPLANNER_WEBAPP_LAN_NETWORK=192.168.1.0/24
ROSBRIDGE_PORT=9090
ROSBRIDGE_ADDRESS=127.0.0.1
# Leave blank to use the hostname that opened the dashboard, including a
# Tailscale IPv4 address or MagicDNS name.
VITE_ROSBRIDGE_URL=
# A browser with no active runtime status begins on the actual external
# integration surface. Mode-specific orchestration files still override this
# value for LLM Surgeon, Replay, and standalone Debug.
VITE_DEFAULT_RUNTIME_MODE=live
# Per-mode endpoints. Leave URLs blank to use the browser hostname with the
# corresponding port, which also works through Tailscale.
VITE_ROSBRIDGE_LIVE_URL=
ROSBRIDGE_LIVE_PORT=9090
VITE_ROSBRIDGE_LLM_URL=
ROSBRIDGE_LLM_PORT=9090
VITE_ROSBRIDGE_SHADOW_URL=
ROSBRIDGE_SHADOW_PORT=9099
# Debug Mode uses a separate bridge so switching the current GUI never attaches
# mission subscriptions to the scenario-free runtime.
VITE_ROSBRIDGE_DEBUG_URL=
ROSBRIDGE_DEBUG_PORT=9091
# Optional interface shown as the Debug Mode LAN endpoint. The Debug profile's
# LAN proxy also binds only this interface and accepts its directly connected
# IPv4 subnet; Wi-Fi and Tailscale are not used as fallback addresses.
TASKPLANNER_DEBUG_NETWORK_INTERFACE=
# Operational launchers force this true so saved standalone Domain/discovery
# values cannot move the sidecar away from the runtime it must monitor.
TASKPLANNER_DEBUG_LOCK_TO_RUNTIME_NETWORK=false
# Production and demonstration launchers force false. Manual Debug writes are
# allowed only after the full runtime is stopped.
TASKPLANNER_DEBUG_ALLOW_PLANNER_COEXISTENCE=false
# Debug USB microphone access follows Ubuntu's current PipeWire input. The
# launcher derives this from XDG_RUNTIME_DIR. The live-only taskplanner-asr
# sidecar uses the same socket and the same host-selected logical input.
TASKPLANNER_PIPEWIRE_SOCKET=/run/user/1000/pipewire-0
# Live humanoid speech is a separate fail-closed sidecar. The model is mounted
# read-only; only the SQLite idempotency ledger and deterministic WAV cache are
# writable. An empty output target follows Ubuntu/PipeWire's current default.
TASKPLANNER_TTS_MODEL_DIR=../supertonic_taskplanner_benchmark/model-sdk-1.3.1
TASKPLANNER_TTS_MODEL_IDENTITY=supertonic-3:model-sdk-1.3.1:724fb5abbf5502583fb520898d45929e62f02c0b
TASKPLANNER_TTS_STATE_DIR=${HOME}/.local/state/taskplanner/tts_runtime
# Host directory for execution-admission ledgers. Direct-hand dispatch and ODT
# voice-intent receipts use separate SQLite files under this private mount.
TASKPLANNER_EXECUTION_STATE_DIR=${HOME}/.local/state/taskplanner/execution
TASKPLANNER_TTS_CACHE_DIR=${HOME}/.cache/taskplanner/tts_runtime
TASKPLANNER_TTS_VOICE_ID=F1
TASKPLANNER_TTS_LANGUAGE=ko
TASKPLANNER_TTS_STEPS=8
TASKPLANNER_TTS_SPEED=1.05
TASKPLANNER_TTS_SILENCE_DURATION=0.3
TASKPLANNER_TTS_OUTPUT_TARGET=
TASKPLANNER_TTS_SYNTHESIS_TIMEOUT_SEC=120.0
TASKPLANNER_TTS_WAIT_TIMEOUT_SEC=120.0
TASKPLANNER_TTS_GATEWAY_INFO_TIMEOUT_SEC=3.0
TTS_ECHO_TAIL_SEC=0.8
TTS_ECHO_SIMILARITY_THRESHOLD=0.88
# Both the operational and Debug ASR runtimes use this shared advisory lock so
# only one process can own the microphone. This is the in-container run mount.
TASKPLANNER_ASR_CAPTURE_LOCK=/taskplanner-runs/asr/microphone.lock
# Canonical 0704_6-0704_17 UTF-8 TXT handoff package, mounted read-only only
# into integration-debug. The API key stays in a mode-0600 host secret file,
# mounted read-only into the backend and never sent to the browser/status topic.
TASKPLANNER_SURGERY_RECORD_SOURCE_DIR=../taskplanner_ws/reports/surgery_records/0704_6_17_clinical_prompt_v1
PUZZLE_SURGERY_RECORD_API_KEY_FILE=/home/arl/.config/taskplanner/secrets/puzzle-surgery-record-api-key
# Choose the reviewed Live/standalone-Debug ASR transport before starting ASR:
# cloud = Puzzle worker-02 over TLS; lan = the Puzzle ASR WebSocket on the
# wired 192.168.1.5 host. The URL fields customize only their named route.
PUZZLE_ASR_ENDPOINT=cloud
PUZZLE_ASR_URL=wss://arpa.worker-02.puzzle-ai.com
PUZZLE_ASR_LAN_URL=ws://192.168.1.5:1196/
# Live-only route policy: leave blank to follow PUZZLE_ASR_ENDPOINT, or use
# cloud / lan / auto. auto uses a non-audio background WebSocket handshake
# cache, prefers LAN when recent, and falls back to cloud before ASR starts.
PUZZLE_ASR_ROUTE_POLICY=
PUZZLE_ASR_LAN_HEALTH_INTERVAL_SEC=1.0
PUZZLE_ASR_LAN_HEALTH_FAILURE_INTERVAL_SEC=0.5
PUZZLE_ASR_LAN_HEALTH_TIMEOUT_SEC=0.5
PUZZLE_ASR_LAN_HEALTH_STALE_AFTER_SEC=2.0
PUZZLE_SURGERY_RECORD_ENDPOINT=https://dev.puzzle-ai.com:6627/api/v1/surgery/img_texts
# Live-only: after a reviewed voice end phrase successfully pauses the run,
# save the accumulated timeline locally and submit it once. Debug defaults to
# false. roomName must match the deployment site before enabling this.
TASKPLANNER_SURGERY_RECORD_AUTO_POST=false
PUZZLE_SURGERY_RECORD_ROOM_NAME=Preclinical Center
TASKPLANNER_SURGERY_RECORD_PROCEDURES=thyroidectomy,thyroidectomy_demo