lobes-cli 0.84.3__tar.gz → 0.85.0__tar.gz

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 (1076) hide show
  1. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/CHANGELOG.md +11 -0
  2. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/PKG-INFO +1 -1
  3. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/hebrew-realtime.md +20 -0
  4. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/listen_server_whisper.py +232 -52
  5. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/pyproject.toml +1 -1
  6. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_listen_server_whisper.py +140 -3
  7. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/uv.lock +1 -1
  8. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.agex/data/pr/events.jsonl +0 -0
  9. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/ask-colleague/SKILL.md +0 -0
  10. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  11. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  12. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  13. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  14. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  15. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  16. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/challenge/SKILL.md +0 -0
  17. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/cicd/SKILL.md +0 -0
  18. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  19. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  20. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  21. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  22. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  23. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/communicate/SKILL.md +0 -0
  24. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  25. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  26. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  27. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  28. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  29. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/deviate/SKILL.md +0 -0
  30. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  31. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  32. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/lobes-deploy/SKILL.md +0 -0
  33. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/lobes-deploy/scripts/lobes-compose.sh +0 -0
  34. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/model-runner/SKILL.md +0 -0
  35. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/model-runner/scripts/model-runner.sh +0 -0
  36. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/recall/SKILL.md +0 -0
  37. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/recall/scripts/recall.sh +0 -0
  38. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/remember/SKILL.md +0 -0
  39. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/remember/scripts/remember.sh +0 -0
  40. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/run-tests/SKILL.md +0 -0
  41. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
  42. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/scope/SKILL.md +0 -0
  43. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
  44. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  45. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  46. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  47. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  48. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/think/SKILL.md +0 -0
  49. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/think/scripts/think.sh +0 -0
  50. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/validate-delivery/SKILL.md +0 -0
  51. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/version-bump/SKILL.md +0 -0
  52. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
  53. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.claude/skills.local.yaml.example +0 -0
  54. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/current +0 -0
  55. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/current_plan +0 -0
  56. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/capacity-relative-pool-routing.json +0 -0
  57. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/cortex-replica-pool-199.json +0 -0
  58. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/deployment-lock-per-box.json +0 -0
  59. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/dspark-speculation-on-the-spark-cortex.json +0 -0
  60. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  61. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/flash-next-worker-on-thor.json +0 -0
  62. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/hand-lobe-lfm2-5-1-2b.json +0 -0
  63. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/hebrew-realtime.json +0 -0
  64. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/innereye-lobes-hosts-comfyui.json +0 -0
  65. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/lightning-on-orin.json +0 -0
  66. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  67. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/mesh-boot-window-and-capabilities-advert.json +0 -0
  68. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/mesh-brain-join.json +0 -0
  69. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/mesh-pool-load-sharing.json +0 -0
  70. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/nemotron-lightning-worker.json +0 -0
  71. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/orin-associate-at-1m.json +0 -0
  72. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/orin-embedding-specialist.json +0 -0
  73. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/qwen3-8-gguf-llamacpp.json +0 -0
  74. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  75. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/reranker-calibration-227.json +0 -0
  76. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/thor-cortex-speculation.json +0 -0
  77. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/thor-worker-arm-qwen3-6-35b-a3b-recipes.json +0 -0
  78. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/deliveries/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  79. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/capacity-relative-pool-routing.json +0 -0
  80. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/chatterbox-on-thor-sm-110.json +0 -0
  81. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/compose-chain-unification-init-repair-doctor-stale.json +0 -0
  82. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/cortex-replica-pool-199.json +0 -0
  83. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/deployment-lock-per-box.json +0 -0
  84. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/dspark-speculation-on-the-spark-cortex.json +0 -0
  85. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  86. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/flash-next-on-vllm.json +0 -0
  87. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/flash-next-worker-on-thor.json +0 -0
  88. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/hand-lobe-lfm2-5-1-2b.json +0 -0
  89. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/hebrew-realtime.json +0 -0
  90. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/innereye-lobes-hosts-comfyui.json +0 -0
  91. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lightning-on-orin.json +0 -0
  92. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lightning-on-thor.json +0 -0
  93. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  94. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  95. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  96. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  97. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  98. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  99. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  100. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  101. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  102. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  103. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  104. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  105. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  106. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  107. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  108. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  109. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/mesh-boot-window-and-capabilities-advert.json +0 -0
  110. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/mesh-brain-join.json +0 -0
  111. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/mesh-pool-load-sharing.json +0 -0
  112. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  113. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe.json +0 -0
  114. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  115. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/nemotron-lightning-worker.json +0 -0
  116. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/orin-associate-at-1m.json +0 -0
  117. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/orin-embedding-specialist.json +0 -0
  118. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/peer-only-replica-pools.json +0 -0
  119. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/proxy-lobes-pairwise-auth.json +0 -0
  120. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/public-lobes-and-hebrew-site.json +0 -0
  121. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/quick-wins-finish-the-rename.json +0 -0
  122. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/qwen3-8-27b-gguf-on-the-spark.json +0 -0
  123. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/qwen3-8-cortex-upgrade.json +0 -0
  124. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/qwen3-8-flash-next-gguf-candidate.json +0 -0
  125. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/qwen3-8-flash-next-on-thor.json +0 -0
  126. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/qwen3-8-gguf-llamacpp.json +0 -0
  127. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  128. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/realtime-ws-server-vad-149.json +0 -0
  129. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/reranker-calibration-227.json +0 -0
  130. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/stt-readiness-truth-155.json +0 -0
  131. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/targeted-ops-and-honest-streams.json +0 -0
  132. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  133. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/thor-cortex-speculation.json +0 -0
  134. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/thor-worker-arm-qwen3-6-35b-a3b-recipes.json +0 -0
  135. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
  136. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  137. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/frames/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  138. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/capacity-relative-pool-routing.json +0 -0
  139. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/compose-chain-unification-init-repair-doctor-stale.json +0 -0
  140. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/cortex-replica-pool-199.json +0 -0
  141. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/deployment-lock-per-box.json +0 -0
  142. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/dspark-speculation-on-the-spark-cortex.json +0 -0
  143. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  144. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/flash-next-worker-on-thor.json +0 -0
  145. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/hand-lobe-lfm2-5-1-2b.json +0 -0
  146. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/hebrew-realtime.json +0 -0
  147. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/innereye-lobes-hosts-comfyui.json +0 -0
  148. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lightning-on-orin.json +0 -0
  149. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  150. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  151. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  152. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  153. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  154. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  155. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  156. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  157. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  158. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  159. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  160. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  161. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  162. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  163. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  164. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  165. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/mesh-boot-window-and-capabilities-advert.json +0 -0
  166. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/mesh-brain-join.json +0 -0
  167. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/mesh-pool-load-sharing.json +0 -0
  168. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  169. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  170. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/nemotron-lightning-worker.json +0 -0
  171. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/orin-associate-at-1m.json +0 -0
  172. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/orin-embedding-specialist.json +0 -0
  173. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/peer-only-replica-pools.json +0 -0
  174. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/proxy-lobes-pairwise-auth.json +0 -0
  175. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/quick-wins-finish-the-rename.json +0 -0
  176. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/qwen3-8-cortex-upgrade.json +0 -0
  177. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/qwen3-8-flash-next-gguf-candidate.json +0 -0
  178. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/qwen3-8-gguf-llamacpp.json +0 -0
  179. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  180. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/realtime-ws-server-vad-149.json +0 -0
  181. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/reranker-calibration-227.json +0 -0
  182. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/stt-readiness-truth-155.json +0 -0
  183. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  184. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/thor-cortex-speculation.json +0 -0
  185. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/thor-worker-arm-qwen3-6-35b-a3b-recipes.json +0 -0
  186. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
  187. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  188. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.devague/plans/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  189. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.eidetic/memory/colleague__public.jsonl +0 -0
  190. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.eidetic/memory/default__public.jsonl +0 -0
  191. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.eidetic/memory/lobes__public.jsonl +0 -0
  192. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.flake8 +0 -0
  193. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.github/workflows/publish.yml +0 -0
  194. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.github/workflows/tests.yml +0 -0
  195. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.gitignore +0 -0
  196. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/.markdownlint-cli2.yaml +0 -0
  197. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/AGENTS.md +0 -0
  198. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/CLAUDE.md +0 -0
  199. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/LICENSE +0 -0
  200. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/QWEN.md +0 -0
  201. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/README.md +0 -0
  202. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/culture.yaml +0 -0
  203. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/README.md +0 -0
  204. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/VARIATION.template.md +0 -0
  205. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/Dockerfile.embed-st +0 -0
  206. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/Dockerfile.gateway +0 -0
  207. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/VARIATION.md +0 -0
  208. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/deployment.lock.toml +0 -0
  209. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.embed.yml +0 -0
  210. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.gpu.yml +0 -0
  211. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.override.yml +0 -0
  212. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.shape.yml +0 -0
  213. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.yml +0 -0
  214. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/mg-logwrap.sh +0 -0
  215. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/qwen3_reranker.jinja +0 -0
  216. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-orin__orin-embed/qwen3_thinking_tool_parser.py +0 -0
  217. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/Dockerfile.gateway +0 -0
  218. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/Dockerfile.vllm-gemma4 +0 -0
  219. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/VARIATION.md +0 -0
  220. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/deployment.lock.toml +0 -0
  221. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/docker-compose.override.yml +0 -0
  222. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/docker-compose.shape.yml +0 -0
  223. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/docker-compose.yml +0 -0
  224. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/mg-logwrap.sh +0 -0
  225. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/qwen3_reranker.jinja +0 -0
  226. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/deployments/jetson-agx-thor__thor-worker/qwen3_thinking_tool_parser.py +0 -0
  227. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/chatterbox-tts.md +0 -0
  228. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/colleague-stack.md +0 -0
  229. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/comfyui-innereye.md +0 -0
  230. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/contracts/README.md +0 -0
  231. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/contracts/realtime-tool-calling.md +0 -0
  232. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  233. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  234. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  235. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
  236. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-20-nemotron-lightning-worker.md +0 -0
  237. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  238. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-23-qwen3-8-gguf-llamacpp-deviation-ledger.md +0 -0
  239. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  240. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-25-cortex-replica-pool-199.md +0 -0
  241. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-25-lightning-on-orin.md +0 -0
  242. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-25-thor-cortex-speculation.md +0 -0
  243. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-29-deployment-lock-per-box.md +0 -0
  244. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-30-peer-only-replica-pools.md +0 -0
  245. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-08-31-quick-wins-finish-the-rename.md +0 -0
  246. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes.md +0 -0
  247. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-09-11-mesh-brain-join.md +0 -0
  248. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-09-12-mesh-boot-window-and-capabilities-advert.md +0 -0
  249. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-09-13-orin-associate-at-1m.md +0 -0
  250. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-09-16-innereye-lobes-hosts-comfyui.md +0 -0
  251. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-09-18-hebrew-realtime.md +0 -0
  252. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-10-06-mesh-pool-load-sharing.md +0 -0
  253. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deliveries/2026-10-07-orin-embedding-specialist.md +0 -0
  254. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deployment-lock.md +0 -0
  255. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/deployment-shapes.md +0 -0
  256. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/dspark-speculation.md +0 -0
  257. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/durable-logs.md +0 -0
  258. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/embeddinggemma-2.md +0 -0
  259. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-14-accept-referral-thor.txt +0 -0
  260. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-14-accept-spark-lobe-gb10.txt +0 -0
  261. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-14-accept-thor-lobe-live-referral-thor.txt +0 -0
  262. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-14-accept-thor-lobe-thor.txt +0 -0
  263. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-14-strict-tools-spark-lobe-spark.txt +0 -0
  264. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-16-proxy-lobes-live-spark-thor.txt +0 -0
  265. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-17-accept-muse-tool-calling-thor.txt +0 -0
  266. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-20-accept-embed-deep-gb10.txt +0 -0
  267. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-21-accept-realtime-spark.txt +0 -0
  268. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-21-accept-voice-loop-spark.txt +0 -0
  269. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-22-accept-realtime-voice-to-voice-spark.txt +0 -0
  270. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-25-accept-by-proxy-spark-f8a9.txt +0 -0
  271. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-31-accept-multimodal-cortex-spark.txt +0 -0
  272. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-31-accept-worker-proxy-spark.txt +0 -0
  273. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-07-31-accept-worker-thor.txt +0 -0
  274. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-04-accept-senses-unsloth-orin.txt +0 -0
  275. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-10-hand-lobe-budget-derivation.txt +0 -0
  276. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-10-partial-hand-orin.txt +0 -0
  277. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-10-partial-hand-spark.txt +0 -0
  278. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-19-accept-qwen38-1m-spark.txt +0 -0
  279. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-19-baseline-qwen3.6-cortex-spark.txt +0 -0
  280. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-19-spike-qwen3.8-official-nightly-spark.txt +0 -0
  281. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-accept-cortex-local-thor.txt +0 -0
  282. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-accept-cortex-repoint-orin.txt +0 -0
  283. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-accept-cortex-repoint-thor.txt +0 -0
  284. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-accept-dual-cortex-mesh.txt +0 -0
  285. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-accept-hand-spark.txt +0 -0
  286. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-accept-worker-hand-spark.txt +0 -0
  287. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-baseline-worker-qwen35b-thor.txt +0 -0
  288. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-hand-thor-blocked-reattributed.txt +0 -0
  289. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-spike-lightning-thor-no-go.txt +0 -0
  290. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-20-spike-nightly-sm110-thor.txt +0 -0
  291. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-21-measure-reasoning-effort-cortex-spark.txt +0 -0
  292. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-23-spike-qwen38-gguf-llamacpp-orin.txt +0 -0
  293. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-24-spike-dspark-cortex-spark.txt +0 -0
  294. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-accept-cortex-replica-pool-spark-thor.txt +0 -0
  295. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-accept-spark-lobe-dspark-render.txt +0 -0
  296. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-baseline-cortex-single-owner.txt +0 -0
  297. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-measure-associate-budget-orin.txt +0 -0
  298. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-orin-board-state-lightning-spikes.txt +0 -0
  299. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-spike-lightning-llamacpp-orin.txt +0 -0
  300. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-spike-lightning-vllm-orin.txt +0 -0
  301. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-25-spike-thor-cortex-speculation.txt +0 -0
  302. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-26-accept-orin-associate.txt +0 -0
  303. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-26-associate-gateway-auth-front.txt +0 -0
  304. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-28-accept-capacity-relative-pool-thor-spark.txt +0 -0
  305. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-30-accept-peer-only-pool-orin.txt +0 -0
  306. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-30-accept-reranker-template-spark.txt +0 -0
  307. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-30-baseline-orin-cortex-pinned.txt +0 -0
  308. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-08-30-baseline-reranker-untemplated-spark.txt +0 -0
  309. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-10-accept-nvidia-35b-a3b-thor.txt +0 -0
  310. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-10-accept-thor-worker-flip.txt +0 -0
  311. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-10-baseline-thor-cortex-pre-244.txt +0 -0
  312. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-10-spike-nvidia-35b-a3b-preboot-thor.txt +0 -0
  313. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-10-sweep-mtp-depth-nvidia-35b-a3b-thor.txt +0 -0
  314. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-10-thor-backup-and-rollback-dryrun-244.txt +0 -0
  315. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-10-thor-pressure-floor-244.txt +0 -0
  316. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-11-accept-thor-reranker-template-senses-unproxy.txt +0 -0
  317. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-11-accept-worker-proxy-spark-thor.txt +0 -0
  318. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-12-accept-mesh-boot-window-fleet.txt +0 -0
  319. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-12-accept-mesh-brain-join-fleet.txt +0 -0
  320. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-12-baseline-mesh-cutover.txt +0 -0
  321. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-13-accept-orin-associate-1m.txt +0 -0
  322. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-13-measure-associate-budget-orin-1m.txt +0 -0
  323. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-13-spike-lightning-thor-v029.txt +0 -0
  324. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-16-accept-innereye-spark.txt +0 -0
  325. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-16-baseline-comfyui-venv-spark.txt +0 -0
  326. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-16-innereye-render-via-thor.png +0 -0
  327. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-16-t2-comfyui-container-spark.txt +0 -0
  328. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-19-accept-multimodal-gemma26b-native-context-spark.txt +0 -0
  329. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-23-spike-flash-next-worker-thor.txt +0 -0
  330. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-realtime-audio-hardware-spark.txt +0 -0
  331. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-realtime-first-loop-spark.txt +0 -0
  332. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-realtime-spike-spark.txt +0 -0
  333. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-realtime-streaming-bluetts-spark.txt +0 -0
  334. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-realtime-vad-ab-spark.txt +0 -0
  335. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-stt-spike-spark.txt +0 -0
  336. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-tts-ab-spark.txt +0 -0
  337. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-09-hebrew-voice-lane-senses12b-spark.txt +0 -0
  338. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-06-accept-mesh-member-lanes.txt +0 -0
  339. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-accept-innereye-replace-spark.txt +0 -0
  340. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-accept-orin-embed.txt +0 -0
  341. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-h2h/run1.json +0 -0
  342. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-h2h/run1.table.txt +0 -0
  343. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-h2h/run2-nomic.json +0 -0
  344. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-h2h/run2-nomic.table.txt +0 -0
  345. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-h2h/run3-qwen3vl.json +0 -0
  346. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-h2h/run3-qwen3vl.table.txt +0 -0
  347. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-h2h-code-retrieval-orin.txt +0 -0
  348. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-rollback-orin-embed-to-orin-associate.txt +0 -0
  349. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-spike-embeddinggemma2-sidecar-orin.txt +0 -0
  350. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/2026-10-07-spike-orin-embed-vllm-8b.txt +0 -0
  351. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/README-dspark-arms.md +0 -0
  352. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/README-realtime-acceptance.md +0 -0
  353. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-a16-dspark-262k.json +0 -0
  354. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-a16-none-262k.json +0 -0
  355. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-dspark-262k.json +0 -0
  356. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-dspark-768k.json +0 -0
  357. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-mtp-n2-262k.json +0 -0
  358. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-mtp-n2-768k.json +0 -0
  359. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-mtp-n2.json +0 -0
  360. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-none-262k.json +0 -0
  361. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/evidence/arm-none-768k.json +0 -0
  362. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/experiments/README.md +0 -0
  363. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/experiments/qwen3.8-flash-next-gguf-llamacpp-vllm.md +0 -0
  364. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/experiments/qwen3.8-flash-next-nvfp4-thor-reference.md +0 -0
  365. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/gateway-fleet.md +0 -0
  366. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/gemma-4-12b-nvfp4.md +0 -0
  367. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/gemma-4-12b-qat-w4a16.md +0 -0
  368. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/gemma-4-31b-nvfp4.md +0 -0
  369. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/gemma4-mtp-draft.md +0 -0
  370. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/image-ledger.md +0 -0
  371. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/lfm2.5-1.2b-hand.md +0 -0
  372. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/machine-profiles.md +0 -0
  373. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/measuring-lane-performance.md +0 -0
  374. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/mistral-small-3.2-24b-nvfp4.md +0 -0
  375. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/model-switch-playbook.md +0 -0
  376. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/nemotron-3-embed-8b.md +0 -0
  377. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/nemotron-3.5-lightning-30b-a3b-nvfp4.md +0 -0
  378. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/nomic-embed-code.md +0 -0
  379. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/nvidia-qwen3.6-35b-a3b-nvfp4.md +0 -0
  380. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/openai-api.md +0 -0
  381. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/operating-a-deployment.md +0 -0
  382. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/orin-associate-deployment.md +0 -0
  383. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/orin-embed-deployment.md +0 -0
  384. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/orin-profiles.md +0 -0
  385. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/parakeet-stt.md +0 -0
  386. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  387. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  388. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  389. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  390. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  391. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  392. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  393. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  394. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  395. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  396. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  397. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  398. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  399. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  400. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  401. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  402. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  403. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  404. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  405. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  406. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
  407. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  408. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-21-realtime-ws-server-vad-149.md +0 -0
  409. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-24-stt-readiness-truth-155.md +0 -0
  410. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
  411. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
  412. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
  413. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  414. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
  415. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
  416. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-20-nemotron-lightning-worker.md +0 -0
  417. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  418. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  419. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-25-cortex-replica-pool-199.md +0 -0
  420. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-25-lightning-on-orin.md +0 -0
  421. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-25-thor-cortex-speculation.md +0 -0
  422. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-27-capacity-relative-pool-routing.md +0 -0
  423. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-29-deployment-lock-per-box.md +0 -0
  424. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-30-peer-only-replica-pools.md +0 -0
  425. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-30-reranker-calibration-227.md +0 -0
  426. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-08-31-quick-wins-finish-the-rename.md +0 -0
  427. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes-split.md +0 -0
  428. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes.md +0 -0
  429. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-11-mesh-brain-join-split.md +0 -0
  430. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-11-mesh-brain-join.md +0 -0
  431. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-12-mesh-boot-window-and-capabilities-advert-split.md +0 -0
  432. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-12-mesh-boot-window-and-capabilities-advert.md +0 -0
  433. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-13-orin-associate-at-1m-split.md +0 -0
  434. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-13-orin-associate-at-1m.md +0 -0
  435. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-16-innereye-lobes-hosts-comfyui-split.md +0 -0
  436. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-16-innereye-lobes-hosts-comfyui.md +0 -0
  437. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-18-hebrew-realtime-HANDOFF.md +0 -0
  438. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-18-hebrew-realtime-split.md +0 -0
  439. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-18-hebrew-realtime.md +0 -0
  440. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-09-23-flash-next-worker-on-thor.md +0 -0
  441. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-10-06-mesh-pool-load-sharing-split.md +0 -0
  442. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-10-06-mesh-pool-load-sharing.md +0 -0
  443. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-10-07-orin-embedding-specialist-split.md +0 -0
  444. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/plans/2026-10-07-orin-embedding-specialist.md +0 -0
  445. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3-14b-nvfp4.md +0 -0
  446. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3-32b-nvfp4.md +0 -0
  447. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3-embedding-0.6b.md +0 -0
  448. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3-embedding-4b.md +0 -0
  449. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3-reranker-0.6b.md +0 -0
  450. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3-vl-embedding-8b.md +0 -0
  451. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3-vl-reranker-8b.md +0 -0
  452. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3.5-4b-minor.md +0 -0
  453. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3.6-27b-nvfp4-multimodal.md +0 -0
  454. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3.6-27b-nvfp4.md +0 -0
  455. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3.6-27b-text-nvfp4-mtp.md +0 -0
  456. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3.6-35b-a3b-nvfp4.md +0 -0
  457. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3.8-27b-gguf-llamacpp.md +0 -0
  458. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen3.8-27b-nvfp4.md +0 -0
  459. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/qwen38-rollout-notes.md +0 -0
  460. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/realtime-pipeline.md +0 -0
  461. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/secret-rotation.md +0 -0
  462. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/skill-sources.md +0 -0
  463. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  464. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  465. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  466. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  467. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  468. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  469. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  470. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  471. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  472. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  473. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  474. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  475. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  476. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  477. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  478. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  479. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  480. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  481. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  482. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  483. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
  484. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  485. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-21-realtime-ws-server-vad-149.md +0 -0
  486. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-24-stt-readiness-truth-155.md +0 -0
  487. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
  488. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
  489. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
  490. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  491. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-09-hand-lobe-lfm2-5-1-2b.md +0 -0
  492. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
  493. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-20-nemotron-lightning-worker.md +0 -0
  494. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  495. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  496. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-25-cortex-replica-pool-199.md +0 -0
  497. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-25-lightning-on-orin.md +0 -0
  498. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-25-thor-cortex-speculation.md +0 -0
  499. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-27-capacity-relative-pool-routing.md +0 -0
  500. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-27-flash-next-on-vllm.md +0 -0
  501. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-27-qwen3-8-flash-next-gguf-candidate.md +0 -0
  502. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-29-deployment-lock-per-box.md +0 -0
  503. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-30-peer-only-replica-pools.md +0 -0
  504. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-30-reranker-calibration-227.md +0 -0
  505. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-08-31-quick-wins-finish-the-rename.md +0 -0
  506. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes.md +0 -0
  507. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-09-11-mesh-brain-join.md +0 -0
  508. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-09-12-mesh-boot-window-and-capabilities-advert.md +0 -0
  509. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-09-13-orin-associate-at-1m.md +0 -0
  510. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-09-16-innereye-lobes-hosts-comfyui.md +0 -0
  511. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-09-18-hebrew-realtime.md +0 -0
  512. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-09-23-flash-next-worker-on-thor.md +0 -0
  513. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-10-06-mesh-pool-load-sharing.md +0 -0
  514. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/specs/2026-10-07-orin-embedding-specialist.md +0 -0
  515. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/superpowers/plans/2026-05-22-scaffold-cli-sibling.md +0 -0
  516. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/superpowers/specs/2026-05-22-scaffold-cli-sibling-design.md +0 -0
  517. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/tensorrt-llm-investigation.md +0 -0
  518. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/thor-worker-flip-rollout-notes.md +0 -0
  519. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/tuning-profiles.md +0 -0
  520. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/validate-tiers.md +0 -0
  521. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/vllm-nightly-migration.md +0 -0
  522. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/docs/worker-lightning-rollout-notes.md +0 -0
  523. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/examples/minor-evals/smoke.jsonl +0 -0
  524. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/__init__.py +0 -0
  525. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/__main__.py +0 -0
  526. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/_metrics.py +0 -0
  527. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/assess.py +0 -0
  528. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/bench/__init__.py +0 -0
  529. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/bench/cat_probe.py +0 -0
  530. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/bench/cat_score.py +0 -0
  531. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/bench/compare.py +0 -0
  532. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/bench/report.py +0 -0
  533. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/catalog.py +0 -0
  534. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/__init__.py +0 -0
  535. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/__init__.py +0 -0
  536. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/_role_probe.py +0 -0
  537. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/assess.py +0 -0
  538. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/benchmark.py +0 -0
  539. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/calibrate.py +0 -0
  540. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/capabilities.py +0 -0
  541. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/cli.py +0 -0
  542. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/doctor.py +0 -0
  543. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/eval.py +0 -0
  544. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/explain.py +0 -0
  545. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/fleet.py +0 -0
  546. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/init.py +0 -0
  547. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/learn.py +0 -0
  548. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/logs.py +0 -0
  549. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/measure.py +0 -0
  550. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/mesh.py +0 -0
  551. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/overview.py +0 -0
  552. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/route.py +0 -0
  553. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/run.py +0 -0
  554. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/serve.py +0 -0
  555. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/status.py +0 -0
  556. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/stop.py +0 -0
  557. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/switch.py +0 -0
  558. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/tunnel.py +0 -0
  559. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/up.py +0 -0
  560. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_commands/whoami.py +0 -0
  561. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_errors.py +0 -0
  562. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_live.py +0 -0
  563. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_output.py +0 -0
  564. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_role_swap.py +0 -0
  565. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/cli/_runtime_ops.py +0 -0
  566. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/embed_lanes.py +0 -0
  567. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/embed_sidecar/__init__.py +0 -0
  568. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/embed_sidecar/server.py +0 -0
  569. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/explain/__init__.py +0 -0
  570. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/explain/catalog.py +0 -0
  571. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/__init__.py +0 -0
  572. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/__main__.py +0 -0
  573. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_authlog.py +0 -0
  574. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_config.py +0 -0
  575. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_mesh_config.py +0 -0
  576. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_mesh_roster.py +0 -0
  577. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_mesh_routes.py +0 -0
  578. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_mesh_routing.py +0 -0
  579. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_mesh_wire.py +0 -0
  580. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_pressure_policy.py +0 -0
  581. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_readiness.py +0 -0
  582. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_realtime.py +0 -0
  583. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_replicas.py +0 -0
  584. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_routing.py +0 -0
  585. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_selection.py +0 -0
  586. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/_tier_request.py +0 -0
  587. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/gateway/server.py +0 -0
  588. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/lane_keys.py +0 -0
  589. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/__init__.py +0 -0
  590. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/_registry.py +0 -0
  591. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/_strategy.py +0 -0
  592. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/_traits.py +0 -0
  593. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/blackwell.py +0 -0
  594. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/generic.py +0 -0
  595. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/orin.py +0 -0
  596. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/spark.py +0 -0
  597. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/machines/thor.py +0 -0
  598. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/minor/__init__.py +0 -0
  599. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/minor/_client.py +0 -0
  600. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/minor/governance.py +0 -0
  601. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/__init__.py +0 -0
  602. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin/__init__.py +0 -0
  603. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin/base.toml +0 -0
  604. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin/orin.toml +0 -0
  605. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin/spark.toml +0 -0
  606. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin/thor.toml +0 -0
  607. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/__init__.py +0 -0
  608. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/gateway-only.toml +0 -0
  609. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/machine-as-brain.toml +0 -0
  610. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/orin-associate.toml +0 -0
  611. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/orin-cortex.toml +0 -0
  612. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/orin-embed.toml +0 -0
  613. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/orin-lobe.toml +0 -0
  614. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/orin-small.toml +0 -0
  615. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/spark-innereye.toml +0 -0
  616. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/spark-lobe.toml +0 -0
  617. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/thor-lobe.toml +0 -0
  618. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/thor-muse.toml +0 -0
  619. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/builtin_shapes/thor-worker.toml +0 -0
  620. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/loader.py +0 -0
  621. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/render.py +0 -0
  622. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/schema.py +0 -0
  623. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/shape_render.py +0 -0
  624. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/profiles/shapes.py +0 -0
  625. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/__init__.py +0 -0
  626. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/__main__.py +0 -0
  627. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_conversation.py +0 -0
  628. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_floor.py +0 -0
  629. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_pcm.py +0 -0
  630. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_readiness.py +0 -0
  631. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_segmenter.py +0 -0
  632. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_sentences.py +0 -0
  633. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_session.py +0 -0
  634. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_settings.py +0 -0
  635. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_speculation.py +0 -0
  636. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_timings.py +0 -0
  637. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_tts_text.py +0 -0
  638. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_turn.py +0 -0
  639. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_vocalize.py +0 -0
  640. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/_wire.py +0 -0
  641. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/app.py +0 -0
  642. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/audio_facade.py +0 -0
  643. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/bluetts_server.py +0 -0
  644. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/chatterbox_multilingual_server.py +0 -0
  645. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/chatterbox_server.py +0 -0
  646. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/protocol.py +0 -0
  647. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/realtime/tts_client.py +0 -0
  648. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/roles.py +0 -0
  649. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/roles_measure.py +0 -0
  650. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/__init__.py +0 -0
  651. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_buildability.py +0 -0
  652. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_compose.py +0 -0
  653. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_detect.py +0 -0
  654. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_env.py +0 -0
  655. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_health.py +0 -0
  656. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_lanes.py +0 -0
  657. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_lock.py +0 -0
  658. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_parser.py +0 -0
  659. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_pressure.py +0 -0
  660. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/runtime/_tunnel.py +0 -0
  661. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/__init__.py +0 -0
  662. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/cf-tunnel.env.example +0 -0
  663. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/docker-compose.yml +0 -0
  664. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/env.example +0 -0
  665. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.bluetts +0 -0
  666. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.chatterbox +0 -0
  667. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.chatterbox-ml +0 -0
  668. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.comfyui +0 -0
  669. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.embed-st +0 -0
  670. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.gateway +0 -0
  671. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.parakeet +0 -0
  672. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.realtime +0 -0
  673. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.vllm-gemma4 +0 -0
  674. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/Dockerfile.whisper-stt +0 -0
  675. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/__init__.py +0 -0
  676. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/_readiness.py +0 -0
  677. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/docker-compose.audio-he.yml +0 -0
  678. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/docker-compose.audio.yml +0 -0
  679. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/docker-compose.embed.yml +0 -0
  680. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/docker-compose.yml +0 -0
  681. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/env.audio-he.example +0 -0
  682. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/env.audio.example +0 -0
  683. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/env.example +0 -0
  684. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/listen_server.py +0 -0
  685. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/fleet/qwen3_reranker.jinja +0 -0
  686. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/templates/mg-logwrap.sh +0 -0
  687. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/variation.py +0 -0
  688. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/variation_catalog.py +0 -0
  689. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/vllm_plugins/__init__.py +0 -0
  690. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/lobes/vllm_plugins/qwen3_thinking_tool_parser.py +0 -0
  691. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/packaging/model-gear/README.md +0 -0
  692. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/packaging/model-gear/pyproject.toml +0 -0
  693. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/accept-by-proxy.sh +0 -0
  694. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/accept-shape.sh +0 -0
  695. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/audio-smoke.py +0 -0
  696. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/concurrency-probe.py +0 -0
  697. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/embed_h2h/README.md +0 -0
  698. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/embed_h2h/build_corpus.py +0 -0
  699. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/embed_h2h/build_queries.py +0 -0
  700. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/embed_h2h/corpus.jsonl +0 -0
  701. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/embed_h2h/h2h.py +0 -0
  702. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/embed_h2h/prompts.json +0 -0
  703. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/embed_h2h/queries.jsonl +0 -0
  704. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/gen-api-key.py +0 -0
  705. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/live-check.sh +0 -0
  706. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/prefill-depth-curve.py +0 -0
  707. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/probe_reranker_calibration.py +0 -0
  708. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/realtime-he-accept.py +0 -0
  709. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/realtime-smoke.py +0 -0
  710. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/realtime-voice-loop.py +0 -0
  711. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/scan_deployment_secrets.py +0 -0
  712. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/spec-arms.py +0 -0
  713. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/spike-preflight.sh +0 -0
  714. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/stream-measure.py +0 -0
  715. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/scripts/validate-tiers.sh +0 -0
  716. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/.env.example +0 -0
  717. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/.gitignore +0 -0
  718. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/.nvmrc +0 -0
  719. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/README.md +0 -0
  720. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/astro.config.mjs +0 -0
  721. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/package-lock.json +0 -0
  722. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/package.json +0 -0
  723. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/proxy/gateway-proxy.mjs +0 -0
  724. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/public/favicon.svg +0 -0
  725. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/public/worklets/pcm-capture-processor.js +0 -0
  726. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/components/ConnectionPanel.astro +0 -0
  727. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/components/ConversationView.astro +0 -0
  728. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/components/EventStream.astro +0 -0
  729. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/components/Footer.astro +0 -0
  730. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/components/Header.astro +0 -0
  731. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/components/MicIsland.astro +0 -0
  732. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/components/SignalMesh.astro +0 -0
  733. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/layouts/Layout.astro +0 -0
  734. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/pages/dev-connection.astro +0 -0
  735. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/pages/dev-events.astro +0 -0
  736. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/pages/dev-mic.astro +0 -0
  737. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/pages/index.astro +0 -0
  738. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/audio-graph.ts +0 -0
  739. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/audio-playback.test.ts +0 -0
  740. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/audio-playback.ts +0 -0
  741. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/audio-test-doubles.ts +0 -0
  742. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/connection-panel.ts +0 -0
  743. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/conversation-view.ts +0 -0
  744. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/demo-tools.ts +0 -0
  745. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/dev-mic-harness.ts +0 -0
  746. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/event-fixtures.ts +0 -0
  747. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/event-icons.ts +0 -0
  748. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/event-log.test.ts +0 -0
  749. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/event-log.ts +0 -0
  750. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/mic-capture.test.ts +0 -0
  751. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/mic-capture.ts +0 -0
  752. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/mic-island.test.ts +0 -0
  753. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/mic-island.ts +0 -0
  754. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/no-mic-mute.test.ts +0 -0
  755. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/pcm-wire.test.ts +0 -0
  756. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/pcm-wire.ts +0 -0
  757. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/realtime-connection.ts +0 -0
  758. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/scripts/realtime-events.ts +0 -0
  759. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/src/styles/global.css +0 -0
  760. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/test/connection-panel.test.ts +0 -0
  761. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/test/conversation-view.test.ts +0 -0
  762. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/test/demo-tools.test.ts +0 -0
  763. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/test/gateway-proxy.test.ts +0 -0
  764. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/test/realtime-connection.test.ts +0 -0
  765. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/tsconfig.json +0 -0
  766. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/site/vitest.config.ts +0 -0
  767. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/sonar-project.properties +0 -0
  768. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/__init__.py +0 -0
  769. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/conftest.py +0 -0
  770. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card/Dockerfile.gateway +0 -0
  771. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card/VARIATION.md +0 -0
  772. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card/deployment.lock.toml +0 -0
  773. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card/docker-compose.override.yml +0 -0
  774. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card/docker-compose.yml +0 -0
  775. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card__fixture-shape/VARIATION.md +0 -0
  776. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card__fixture-shape/deployment.lock.toml +0 -0
  777. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.override.yml +0 -0
  778. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.shape.yml +0 -0
  779. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.yml +0 -0
  780. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/upgrade_compat/README.md +0 -0
  781. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/upgrade_compat/fleet/docker-compose.yml +0 -0
  782. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/upgrade_compat/fleet/env.example +0 -0
  783. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/upgrade_compat/single/docker-compose.yml +0 -0
  784. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/fixtures/upgrade_compat/single/env.example +0 -0
  785. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/README.md +0 -0
  786. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/__init__.py +0 -0
  787. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/base.env +0 -0
  788. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/no-pool-gateway.json +0 -0
  789. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/orin.env +0 -0
  790. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/overlays/audio-he-defaults.env +0 -0
  791. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/regen.py +0 -0
  792. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/gateway-only__base.env +0 -0
  793. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/gateway-only__orin.env +0 -0
  794. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/gateway-only__spark.env +0 -0
  795. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/gateway-only__thor.env +0 -0
  796. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-associate__base.env +0 -0
  797. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-associate__orin.env +0 -0
  798. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-associate__spark.env +0 -0
  799. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-associate__thor.env +0 -0
  800. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-cortex__base.env +0 -0
  801. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-cortex__orin.env +0 -0
  802. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-cortex__spark.env +0 -0
  803. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-cortex__thor.env +0 -0
  804. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-embed__base.env +0 -0
  805. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-embed__orin.env +0 -0
  806. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-embed__spark.env +0 -0
  807. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-embed__thor.env +0 -0
  808. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-lobe__base.env +0 -0
  809. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-lobe__orin.env +0 -0
  810. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-lobe__spark.env +0 -0
  811. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-lobe__thor.env +0 -0
  812. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-small__base.env +0 -0
  813. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-small__orin.env +0 -0
  814. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-small__spark.env +0 -0
  815. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/orin-small__thor.env +0 -0
  816. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-innereye__base.env +0 -0
  817. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-innereye__orin.env +0 -0
  818. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-innereye__spark.env +0 -0
  819. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-innereye__thor.env +0 -0
  820. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-lobe__base.env +0 -0
  821. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-lobe__orin.env +0 -0
  822. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-lobe__spark.env +0 -0
  823. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/spark-lobe__thor.env +0 -0
  824. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-lobe__base.env +0 -0
  825. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-lobe__orin.env +0 -0
  826. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-lobe__spark.env +0 -0
  827. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-lobe__thor.env +0 -0
  828. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-muse__base.env +0 -0
  829. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-muse__orin.env +0 -0
  830. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-muse__spark.env +0 -0
  831. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-muse__thor.env +0 -0
  832. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-worker__base.env +0 -0
  833. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-worker__orin.env +0 -0
  834. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-worker__spark.env +0 -0
  835. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/shapes/thor-worker__thor.env +0 -0
  836. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/spark.env +0 -0
  837. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/switch-plans.txt +0 -0
  838. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/template-defaults.env +0 -0
  839. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/goldens/thor.env +0 -0
  840. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_assess.py +0 -0
  841. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_assess_perf.py +0 -0
  842. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_associate_compose.py +0 -0
  843. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_associate_exposure.py +0 -0
  844. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_associate_gateway_boundaries.py +0 -0
  845. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_associate_role.py +0 -0
  846. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_audio_he_compose_chain.py +0 -0
  847. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_audio_he_goldens.py +0 -0
  848. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_audio_he_stt_compose.py +0 -0
  849. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_audio_he_tts_compose.py +0 -0
  850. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_bench_compare.py +0 -0
  851. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_bench_report.py +0 -0
  852. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_benchmark_all_lobes.py +0 -0
  853. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_bluetts_dockerfile.py +0 -0
  854. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_bluetts_server.py +0 -0
  855. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_boundary_serves_only.py +0 -0
  856. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_buildability_guard.py +0 -0
  857. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_calibration_knee.py +0 -0
  858. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_capabilities_member_lanes.py +0 -0
  859. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cat_probe.py +0 -0
  860. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cat_score.py +0 -0
  861. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_catalog.py +0 -0
  862. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_catalog_embed_lanes.py +0 -0
  863. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_catalog_tiers.py +0 -0
  864. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_chatterbox_ml_dockerfile.py +0 -0
  865. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_chatterbox_multilingual_server.py +0 -0
  866. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_chatterbox_pcm16.py +0 -0
  867. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_chatterbox_readiness.py +0 -0
  868. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli.py +0 -0
  869. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_benchmark_profiles.py +0 -0
  870. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_calibrate.py +0 -0
  871. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_capabilities.py +0 -0
  872. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_capabilities_replicas.py +0 -0
  873. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_eval.py +0 -0
  874. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_eval_cat.py +0 -0
  875. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_fleet.py +0 -0
  876. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_gateway_auth.py +0 -0
  877. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_introspection.py +0 -0
  878. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_lanes.py +0 -0
  879. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_logs.py +0 -0
  880. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_measure.py +0 -0
  881. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_mesh.py +0 -0
  882. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_route.py +0 -0
  883. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_run.py +0 -0
  884. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_runtime.py +0 -0
  885. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_tunnel.py +0 -0
  886. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_up.py +0 -0
  887. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_up_replace.py +0 -0
  888. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_cli_wiring.py +0 -0
  889. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_client_reasoning_roundtrip.py +0 -0
  890. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_colleague_contract.py +0 -0
  891. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_comfyui_compose.py +0 -0
  892. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_comfyui_dockerfile.py +0 -0
  893. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_comfyui_volumes.py +0 -0
  894. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_compose_chain.py +0 -0
  895. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_deployment_lock.py +0 -0
  896. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_deployment_lock_doc.py +0 -0
  897. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_detect.py +0 -0
  898. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor.py +0 -0
  899. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_audio_he.py +0 -0
  900. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_fix.py +0 -0
  901. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_machine_profile.py +0 -0
  902. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_mesh_retirement.py +0 -0
  903. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_passthrough.py +0 -0
  904. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_repin_version.py +0 -0
  905. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_role_command.py +0 -0
  906. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_doctor_role_probe.py +0 -0
  907. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_dropped_lobe_honesty.py +0 -0
  908. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_embed_finetune.py +0 -0
  909. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_embed_h2h.py +0 -0
  910. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_embed_lanes.py +0 -0
  911. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_embed_lanes_import.py +0 -0
  912. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_embed_overlay.py +0 -0
  913. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_embed_sidecar.py +0 -0
  914. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_fleet_audio_vad_env.py +0 -0
  915. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_fleet_compose_mounts.py +0 -0
  916. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_fleet_minor.py +0 -0
  917. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_fleet_per_machine_knobs.py +0 -0
  918. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_fleet_secrets_env_file.py +0 -0
  919. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_fleet_template_gateway_env.py +0 -0
  920. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_audio_peer.py +0 -0
  921. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_audio_routing.py +0 -0
  922. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_auth.py +0 -0
  923. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_auth_rejection_log.py +0 -0
  924. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_busy_e2e.py +0 -0
  925. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_capabilities.py +0 -0
  926. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_config_proxy.py +0 -0
  927. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_config_replicas.py +0 -0
  928. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_config_wiring.py +0 -0
  929. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_embed_deep.py +0 -0
  930. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_embed_lanes.py +0 -0
  931. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_env_passthrough_guard.py +0 -0
  932. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_feasibility.py +0 -0
  933. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_fleet_doc.py +0 -0
  934. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_force_strict.py +0 -0
  935. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_get_relay.py +0 -0
  936. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_hand_adapters.py +0 -0
  937. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_member_lanes.py +0 -0
  938. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_no_lifecycle_actuator.py +0 -0
  939. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_peer_advert.py +0 -0
  940. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_peer_only_pool.py +0 -0
  941. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_pool.py +0 -0
  942. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_pool_capacity_wiring.py +0 -0
  943. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_pool_pressure.py +0 -0
  944. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_pool_saturation.py +0 -0
  945. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_proxy.py +0 -0
  946. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_readiness.py +0 -0
  947. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_realtime_ws.py +0 -0
  948. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_render_facade.py +0 -0
  949. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_replicas.py +0 -0
  950. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_routing.py +0 -0
  951. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_selection.py +0 -0
  952. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_serve_mesh_wiring.py +0 -0
  953. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_server.py +0 -0
  954. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_status.py +0 -0
  955. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_stream_termination.py +0 -0
  956. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gateway_tiers.py +0 -0
  957. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gemma4_compose.py +0 -0
  958. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gemma4_dockerfile.py +0 -0
  959. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gen_api_key.py +0 -0
  960. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_gitignore_convention.py +0 -0
  961. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_init.py +0 -0
  962. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_init_audio_he.py +0 -0
  963. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_init_coresidency.py +0 -0
  964. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_init_from_lock.py +0 -0
  965. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_init_gpu_access.py +0 -0
  966. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_init_profile.py +0 -0
  967. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_init_shape.py +0 -0
  968. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_innereye_ui_port.py +0 -0
  969. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_live_capabilities.py +0 -0
  970. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_lobes_compose_wrapper.py +0 -0
  971. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_lock_drift.py +0 -0
  972. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_machines.py +0 -0
  973. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_config.py +0 -0
  974. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_flap_per_name.py +0 -0
  975. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_heartbeat_live.py +0 -0
  976. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_lanes.py +0 -0
  977. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_member_lanes.py +0 -0
  978. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_naming.py +0 -0
  979. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_roster.py +0 -0
  980. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_routes.py +0 -0
  981. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_routing.py +0 -0
  982. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_routing_wiring.py +0 -0
  983. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_templates.py +0 -0
  984. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_verify_reason.py +0 -0
  985. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_mesh_wire.py +0 -0
  986. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_minor_client.py +0 -0
  987. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_minor_governance.py +0 -0
  988. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_minor_integration.py +0 -0
  989. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_minor_logprobs.py +0 -0
  990. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_nightly_migration_doc.py +0 -0
  991. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_no_config_byte_identity.py +0 -0
  992. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_orin_associate_boot_order.py +0 -0
  993. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_orin_associate_shape.py +0 -0
  994. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_orin_cortex_shape.py +0 -0
  995. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_orin_embed_shape.py +0 -0
  996. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_orin_gateway_read_timeout.py +0 -0
  997. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_orin_lobe_shape.py +0 -0
  998. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_overview_live.py +0 -0
  999. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_parser.py +0 -0
  1000. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_peer_referral.py +0 -0
  1001. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_preserve_thinking_diagnostic.py +0 -0
  1002. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_pressure.py +0 -0
  1003. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_pressure_policy.py +0 -0
  1004. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_profile_goldens.py +0 -0
  1005. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_profile_render.py +0 -0
  1006. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_profile_schema.py +0 -0
  1007. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_profiles.py +0 -0
  1008. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_proxy_integration.py +0 -0
  1009. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_readiness_peer_probe.py +0 -0
  1010. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_app_stream_structure.py +0 -0
  1011. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_audio_env_coverage.py +0 -0
  1012. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_audio_facade.py +0 -0
  1013. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_continuation.py +0 -0
  1014. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_conversation.py +0 -0
  1015. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_conversation_stream.py +0 -0
  1016. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_floor.py +0 -0
  1017. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_floor_segments.py +0 -0
  1018. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_generate_failure_surfacing.py +0 -0
  1019. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_generate_stream_settings.py +0 -0
  1020. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_he_accept_helpers.py +0 -0
  1021. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_imports.py +0 -0
  1022. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_parallel_tool_calls.py +0 -0
  1023. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_pcm.py +0 -0
  1024. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_protocol.py +0 -0
  1025. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_readiness.py +0 -0
  1026. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_segmenter.py +0 -0
  1027. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_segmenter_eager.py +0 -0
  1028. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_segmenter_level_gate.py +0 -0
  1029. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_sentences.py +0 -0
  1030. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_session.py +0 -0
  1031. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_settings.py +0 -0
  1032. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_smoke_helpers.py +0 -0
  1033. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_speculation.py +0 -0
  1034. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_stt_forward.py +0 -0
  1035. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_timings.py +0 -0
  1036. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_tts_gate.py +0 -0
  1037. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_tts_text.py +0 -0
  1038. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_turn.py +0 -0
  1039. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_turn_stream.py +0 -0
  1040. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_vocalize.py +0 -0
  1041. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_realtime_wire.py +0 -0
  1042. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_role_probes.py +0 -0
  1043. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_roles.py +0 -0
  1044. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_roles_audio_advert.py +0 -0
  1045. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_roles_audio_language.py +0 -0
  1046. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_roles_proxied.py +0 -0
  1047. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_roles_replicas.py +0 -0
  1048. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_routing_models_member_lanes.py +0 -0
  1049. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_scan_deployment_secrets.py +0 -0
  1050. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_senses_speculative_config.py +0 -0
  1051. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_shape_budgets.py +0 -0
  1052. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_shape_contract_matrix.py +0 -0
  1053. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_shape_gateway_only.py +0 -0
  1054. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_shape_goldens.py +0 -0
  1055. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_shapes.py +0 -0
  1056. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_smoke_duo.py +0 -0
  1057. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_spec_arms.py +0 -0
  1058. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_spike_preflight.py +0 -0
  1059. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_status_fleet.py +0 -0
  1060. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_status_pressure.py +0 -0
  1061. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_switch_bf16.py +0 -0
  1062. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_switch_plan_goldens.py +0 -0
  1063. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_templates_preserve_thinking.py +0 -0
  1064. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_tier_request.py +0 -0
  1065. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_tool_parser_plugin.py +0 -0
  1066. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_tts_client_hebrew_diacritizer.py +0 -0
  1067. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_tts_pause_and_truncation.py +0 -0
  1068. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_up_no_deps_isolation.py +0 -0
  1069. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_upgrade_compat.py +0 -0
  1070. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_variation.py +0 -0
  1071. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_variation_catalog.py +0 -0
  1072. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_vllm_plugin_thinking.py +0 -0
  1073. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_wheel_excludes_deployments.py +0 -0
  1074. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_whisper_stt_dockerfile.py +0 -0
  1075. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_worker_compose.py +0 -0
  1076. {lobes_cli-0.84.3 → lobes_cli-0.85.0}/tests/test_worker_recipe_knobs.py +0 -0
@@ -4,6 +4,17 @@ All notable changes to this project are documented here. The format is based on
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
5
5
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.85.0] - 2026-10-09
8
+
9
+ ### Added
10
+
11
+ - Hebrew STT (`listen_server_whisper.py`) accepts any ffmpeg-decodable upload — m4a, mp3, ogg/opus, webm, flac, non-16-bit WAV — instead of refusing everything but 16-bit PCM WAV with `invalid_wav`; an undecodable upload is a 400 `invalid_audio`.
12
+ - Hebrew STT chunks uploads longer than the 30 s Whisper window at the quietest point near each window end and joins the pieces, instead of refusing them; `STT_MAX_AUDIO_SECONDS` (default 600) caps the total.
13
+
14
+ ### Changed
15
+
16
+ - Hebrew STT decodes up to 440 new tokens per window (was 128), so a full 30 s window of dense speech is not truncated.
17
+
7
18
  ## [0.84.3] - 2026-10-07
8
19
 
9
20
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: lobes-cli
3
- Version: 0.84.3
3
+ Version: 0.85.0
4
4
  Summary: lobes — run, assess, and switch the local vLLM model.
5
5
  Project-URL: Homepage, https://github.com/agentculture/lobes-cli
6
6
  Project-URL: Issues, https://github.com/agentculture/lobes-cli/issues
@@ -42,6 +42,26 @@ Evidence: `docs/evidence/2026-09-hebrew-*.txt` (seven files) and
42
42
  - **An NVFP4A16 export of Gemma 4 12B damaged Hebrew** where bf16 and Google's
43
43
  QAT checkpoint did not. Check Hebrew output before promoting a quantization.
44
44
 
45
+ ### Batch transcription: formats and long clips
46
+
47
+ `POST /v1/audio/transcriptions` takes any format the image's ffmpeg decodes —
48
+ m4a/aac, mp3, ogg/opus, webm, flac, and WAV at any bit depth — not only 16-bit
49
+ PCM WAV. A 16-bit RIFF/WAVE upload (the realtime bridge's own turn audio) is
50
+ still read directly and never touches ffmpeg; anything else is transcoded to
51
+ 16 kHz mono PCM16 first, and an undecodable upload is a 400 `invalid_audio`.
52
+
53
+ An upload longer than Whisper's 30 s window is **chunked**, not refused: each
54
+ cut goes at the quietest 20 ms frame in the last 5 s of its window, every
55
+ window passes the `STT_MIN_AVG_LOGPROB` gate on its own, and the non-empty
56
+ pieces are joined with a space. `STT_MAX_AUDIO_SECONDS` (default 600) caps the
57
+ total; past it the reply is a 413 `clip_too_long`. The upload byte cap
58
+ (`STT_MAX_UPLOAD_BYTES`, 16 MiB) still applies first, so ten minutes of
59
+ uncompressed 16 kHz WAV (~19 MB) needs it raised; a compressed voice note does
60
+ not. MEASURED on the DGX Spark, 2026-10-09, with synthetic BlueTTS speech: an
61
+ 80 s m4a was transcribed in 3 windows in 3.9 s with every sentence intact at
62
+ the seams; mp3, ogg/opus, webm, 24-bit WAV and m4a single sentences each came
63
+ back verbatim. A real microphone recording is still UNVALIDATED (#108).
64
+
45
65
  ## Latency: what was built, and what it bought
46
66
 
47
67
  Measured live, a human on a reSpeaker XVF3800, from the moment the server
@@ -14,7 +14,8 @@ GiB peak CUDA, ~0.14s per 9.35s clip, transformers 5.12.1 / torch
14
14
  from ``Dockerfile.parakeet``.
15
15
 
16
16
  Endpoints:
17
- POST /v1/audio/transcriptions - Transcribe an uploaded WAV file
17
+ POST /v1/audio/transcriptions - Transcribe an uploaded audio file (WAV read
18
+ directly; m4a/mp3/ogg/webm/flac via ffmpeg)
18
19
  GET /v1/health/ready - Readiness (model loaded + CUDA live +
19
20
  a warm-up transcription succeeded)
20
21
 
@@ -53,14 +54,22 @@ logging.basicConfig(level=logging.INFO)
53
54
  logger = logging.getLogger(__name__)
54
55
 
55
56
  SAMPLE_RATE = 16000
56
- # Whisper's attention window is 30s; clips longer than that are REFUSED (a
57
- # clear 4xx) rather than chunked-and-joined. Two reasons: (1) chunk-joining
58
- # introduces boundary artifacts/duplicated words at the seam, and (2) the
59
- # realtime bridge's own VAD_MAX_TURN_MS defaults to exactly 30000ms
60
- # (CLAUDE.md's #151 material) — a well-behaved caller never sends a clip
61
- # longer than this window in the first place, so refusing costs nothing in
62
- # practice and avoids a whole class of hallucination risk at the seam.
57
+ # Whisper's attention window is 30s. A longer upload (a phone voice note, a
58
+ # recording) is CHUNKED into windows of at most this length and the pieces are
59
+ # joined. Each cut is placed at the quietest frame in the last
60
+ # CHUNK_SEARCH_SECONDS of its window (see plan_chunks), so a seam rarely lands
61
+ # mid-word — the boundary artefacts that made earlier versions refuse instead.
62
+ # The realtime bridge never sends more than one window (its VAD_MAX_TURN_MS
63
+ # defaults to 30000ms), so its turns still take the single-window path.
63
64
  MAX_CLIP_SECONDS = 30.0
65
+ CHUNK_SEARCH_SECONDS = 5.0
66
+ CHUNK_FRAME_MS = 20
67
+ # Total-length cap across all chunks (STT_MAX_AUDIO_SECONDS), so one upload
68
+ # cannot hold the GPU for an unbounded number of windows.
69
+ DEFAULT_MAX_AUDIO_SECONDS = 600.0
70
+ # Whisper's decoder holds 448 positions; the language/task prompt takes 4.
71
+ # A full 30s window of dense speech can exceed the old 128-token budget.
72
+ MAX_NEW_TOKENS = 440
64
73
  MODEL_NAME = os.environ.get("STT_MODEL", "ivrit-ai/whisper-large-v3-turbo")
65
74
  DEFAULT_LANGUAGE = "he"
66
75
 
@@ -233,21 +242,37 @@ def linear_resample(samples: Sequence[float], src_rate: int, dst_rate: int) -> l
233
242
  return out
234
243
 
235
244
 
245
+ def parse_max_audio_seconds(raw: str | None) -> float:
246
+ """``STT_MAX_AUDIO_SECONDS``: a positive number of seconds; empty/unset or
247
+ an unparseable/non-positive value falls back to the default (a typo must
248
+ not silently disable the cap)."""
249
+ if raw is None or not raw.strip():
250
+ return DEFAULT_MAX_AUDIO_SECONDS
251
+ try:
252
+ parsed = float(raw.strip())
253
+ except ValueError:
254
+ return DEFAULT_MAX_AUDIO_SECONDS
255
+ return parsed if parsed > 0 and math.isfinite(parsed) else DEFAULT_MAX_AUDIO_SECONDS
256
+
257
+
258
+ MAX_AUDIO_SECONDS = parse_max_audio_seconds(os.environ.get("STT_MAX_AUDIO_SECONDS"))
259
+
260
+
236
261
  def _clip_too_long_message(duration: float, max_seconds: float) -> str:
237
262
  """Shared wording for a refused clip, whichever check found it too long
238
263
  (the post-decode sample-count check, or the pre-decode WAV-header peek)."""
239
264
  return (
240
265
  f"clip too long: {duration:.1f}s exceeds the {max_seconds:.0f}s "
241
- "Whisper window (refused, not chunked — see MAX_CLIP_SECONDS)"
266
+ "total-audio cap (STT_MAX_AUDIO_SECONDS)"
242
267
  )
243
268
 
244
269
 
245
270
  def validate_clip_duration(
246
- num_samples: int, sample_rate: int, max_seconds: float = MAX_CLIP_SECONDS
271
+ num_samples: int, sample_rate: int, max_seconds: float = DEFAULT_MAX_AUDIO_SECONDS
247
272
  ) -> Optional[str]:
248
- """Return an error message iff the clip exceeds *max_seconds*, else
249
- ``None``. See the module docstring / ``MAX_CLIP_SECONDS`` comment for why
250
- this refuses instead of chunking."""
273
+ """Return an error message iff the clip exceeds *max_seconds* (the
274
+ total-audio cap — longer than one Whisper window is chunked, not refused),
275
+ else ``None``."""
251
276
  if sample_rate <= 0:
252
277
  return "invalid sample rate"
253
278
  duration = num_samples / sample_rate
@@ -316,6 +341,130 @@ def peek_wav_duration_seconds(raw_bytes: bytes) -> Optional[float]:
316
341
  return frames / rate
317
342
 
318
343
 
344
+ def is_riff_wave(raw_bytes: bytes) -> bool:
345
+ """True when *raw_bytes* carries a RIFF/WAVE header — the only container
346
+ :func:`decode_wav_pcm16` reads directly."""
347
+ return len(raw_bytes) >= 12 and raw_bytes[:4] == b"RIFF" and raw_bytes[8:12] == b"WAVE"
348
+
349
+
350
+ # Bounded so a pathological upload cannot hold a request thread forever.
351
+ FFMPEG_TIMEOUT_SECONDS = 60
352
+
353
+
354
+ def ffmpeg_transcode_command(src: str, dst: str, max_seconds: float) -> list[str]:
355
+ """The ffmpeg argv that turns any decodable audio (m4a/aac, mp3, ogg/opus,
356
+ webm, flac, a non-16-bit WAV, ...) into 16 kHz mono PCM16 WAV.
357
+
358
+ Input and output are both FILES, not pipes: an m4a whose ``moov`` atom
359
+ sits at the end (the usual phone voice-note layout) cannot be demuxed from
360
+ a non-seekable stdin, and a WAV written to a pipe carries a placeholder
361
+ frame count that :func:`peek_wav_duration_seconds` would misread. ``-t``
362
+ stops decoding one second past the clip cap, so an over-long upload is
363
+ still refused as ``clip_too_long`` without decoding all of it."""
364
+ return [
365
+ "ffmpeg",
366
+ "-nostdin",
367
+ "-hide_banner",
368
+ "-loglevel",
369
+ "error",
370
+ "-y",
371
+ "-i",
372
+ src,
373
+ "-t",
374
+ str(max_seconds + 1),
375
+ "-vn",
376
+ "-ac",
377
+ "1",
378
+ "-ar",
379
+ str(SAMPLE_RATE),
380
+ "-c:a",
381
+ "pcm_s16le",
382
+ "-f",
383
+ "wav",
384
+ dst,
385
+ ]
386
+
387
+
388
+ def transcode_to_wav(
389
+ raw_bytes: bytes, max_seconds: float = MAX_AUDIO_SECONDS, runner=None
390
+ ) -> bytes:
391
+ """Transcode a non-WAV upload to PCM16 WAV with the image's ffmpeg.
392
+
393
+ Raises :class:`ValueError` with ffmpeg's own message when the bytes are
394
+ not decodable audio. *runner* defaults to :func:`subprocess.run` and is
395
+ injectable so the offline suite needs no ffmpeg binary."""
396
+ import subprocess # nosec B404 - fixed argv, no shell
397
+ import tempfile
398
+
399
+ run = runner or subprocess.run
400
+ with tempfile.TemporaryDirectory(prefix="stt-") as tmp:
401
+ src = os.path.join(tmp, "in")
402
+ dst = os.path.join(tmp, "out.wav")
403
+ with open(src, "wb") as fh:
404
+ fh.write(raw_bytes)
405
+ try:
406
+ proc = run(
407
+ ffmpeg_transcode_command(src, dst, max_seconds),
408
+ capture_output=True,
409
+ timeout=FFMPEG_TIMEOUT_SECONDS,
410
+ check=False,
411
+ )
412
+ except FileNotFoundError as exc:
413
+ raise ValueError("audio is not WAV and ffmpeg is not installed") from exc
414
+ except subprocess.TimeoutExpired as exc:
415
+ raise ValueError(f"audio decode timed out after {FFMPEG_TIMEOUT_SECONDS}s") from exc
416
+ if proc.returncode != 0 or not os.path.exists(dst):
417
+ detail = (proc.stderr or b"").decode("utf-8", "replace").strip().splitlines()
418
+ reason = detail[-1] if detail else f"ffmpeg exited {proc.returncode}"
419
+ raise ValueError(f"could not decode audio: {reason}")
420
+ with open(dst, "rb") as fh:
421
+ return fh.read()
422
+
423
+
424
+ def _frame_energy(samples: Sequence[float], start: int, length: int) -> float:
425
+ return sum(x * x for x in samples[start : start + length])
426
+
427
+
428
+ def plan_chunks(
429
+ samples: Sequence[float],
430
+ sample_rate: int,
431
+ window_seconds: float = MAX_CLIP_SECONDS,
432
+ search_seconds: float = CHUNK_SEARCH_SECONDS,
433
+ frame_ms: int = CHUNK_FRAME_MS,
434
+ ) -> list[tuple[int, int]]:
435
+ """Split *samples* into contiguous ``(start, end)`` ranges no longer than
436
+ *window_seconds*, covering every sample exactly once.
437
+
438
+ A clip that fits one window is one range. Otherwise each cut goes at the
439
+ middle of the lowest-energy *frame_ms* frame in the last *search_seconds*
440
+ of the window — the likeliest pause — so a word is rarely split."""
441
+ n = len(samples)
442
+ window = max(1, int(window_seconds * sample_rate))
443
+ if n <= window:
444
+ return [(0, n)]
445
+ frame = max(1, int(sample_rate * frame_ms / 1000))
446
+ search = max(frame, min(window, int(search_seconds * sample_rate)))
447
+ chunks: list[tuple[int, int]] = []
448
+ start = 0
449
+ while n - start > window:
450
+ lo = start + window - search
451
+ best_at, best_energy = start + window, None
452
+ for f in range(lo, start + window - frame + 1, frame):
453
+ energy = _frame_energy(samples, f, frame)
454
+ if best_energy is None or energy < best_energy:
455
+ best_at, best_energy = f + frame // 2, energy
456
+ chunks.append((start, best_at))
457
+ start = best_at
458
+ chunks.append((start, n))
459
+ return chunks
460
+
461
+
462
+ def join_chunk_texts(texts: Sequence[str]) -> str:
463
+ """Join per-chunk transcripts, skipping the empty ones a chunk of silence
464
+ (or a dropped low-confidence chunk) leaves."""
465
+ return " ".join(t for t in (x.strip() for x in texts) if t)
466
+
467
+
319
468
  def build_success_response(text: str) -> dict:
320
469
  """Same top-level shape as ``listen_server.py``'s ``return {"text": text}``."""
321
470
  return {"text": text}
@@ -446,8 +595,9 @@ if _FASTAPI_AVAILABLE:
446
595
  file: UploadFile = File(...),
447
596
  language: str = Form(None),
448
597
  ):
449
- """Transcribe an uploaded WAV file (PCM16 mono/stereo 16kHz — the
450
- realtime bridge's own output shape). See the module docstring for the
598
+ """Transcribe an uploaded audio file. PCM16 WAV (the realtime bridge's
599
+ own output shape) is read directly; anything else is transcoded to
600
+ 16 kHz mono PCM16 by the image's ffmpeg first. See the module docstring for the
451
601
  channel/resample/duration-limit contract."""
452
602
  content = await file.read()
453
603
 
@@ -457,23 +607,43 @@ if _FASTAPI_AVAILABLE:
457
607
  status_code=413, content=build_error_body(size_error, "upload_too_large")
458
608
  )
459
609
 
610
+ if not is_riff_wave(content):
611
+ # m4a / mp3 / ogg / webm / flac: normalise to PCM16 WAV first.
612
+ import anyio
613
+
614
+ try:
615
+ content = await anyio.to_thread.run_sync(transcode_to_wav, content)
616
+ except ValueError as exc:
617
+ return JSONResponse(
618
+ status_code=400, content=build_error_body(str(exc), "invalid_audio")
619
+ )
620
+
460
621
  header_duration = peek_wav_duration_seconds(content)
461
- if header_duration is not None and header_duration > MAX_CLIP_SECONDS:
622
+ if header_duration is not None and header_duration > MAX_AUDIO_SECONDS:
462
623
  return JSONResponse(
463
624
  status_code=413,
464
625
  content=build_error_body(
465
- _clip_too_long_message(header_duration, MAX_CLIP_SECONDS), "clip_too_long"
626
+ _clip_too_long_message(header_duration, MAX_AUDIO_SECONDS), "clip_too_long"
466
627
  ),
467
628
  )
468
629
 
469
630
  try:
470
631
  samples, sample_rate, channels = decode_wav_pcm16(content)
471
- except (ValueError, wave.Error) as exc:
472
- return JSONResponse(status_code=400, content=build_error_body(str(exc), "invalid_wav"))
632
+ except (ValueError, wave.Error):
633
+ # A RIFF/WAVE the stdlib reader refuses (24-bit, float, ...): ffmpeg reads it.
634
+ import anyio
635
+
636
+ try:
637
+ content = await anyio.to_thread.run_sync(transcode_to_wav, content)
638
+ samples, sample_rate, channels = decode_wav_pcm16(content)
639
+ except (ValueError, wave.Error) as exc:
640
+ return JSONResponse(
641
+ status_code=400, content=build_error_body(str(exc), "invalid_wav")
642
+ )
473
643
 
474
644
  samples = first_channel(samples, channels)
475
645
 
476
- duration_error = validate_clip_duration(len(samples), sample_rate)
646
+ duration_error = validate_clip_duration(len(samples), sample_rate, MAX_AUDIO_SECONDS)
477
647
  if duration_error is not None:
478
648
  return JSONResponse(
479
649
  status_code=413, content=build_error_body(duration_error, "clip_too_long")
@@ -496,39 +666,49 @@ if _FASTAPI_AVAILABLE:
496
666
  lang = resolve_language(language, os.environ.get("STT_LANGUAGE"), DEFAULT_LANGUAGE)
497
667
 
498
668
  model, processor = get_model_and_processor()
499
- audio = np.array(floats, dtype=np.float32)
500
- inputs = processor(audio, sampling_rate=SAMPLE_RATE, return_tensors="pt")
501
- input_features = inputs.input_features.to("cuda", dtype=torch.float16)
502
- with torch.no_grad():
503
- out = model.generate(
504
- input_features,
505
- language=lang,
506
- task="transcribe",
507
- max_new_tokens=128,
508
- return_dict_in_generate=True,
509
- output_scores=True,
510
- )
511
- n_new = len(out.scores)
512
- new_ids = out.sequences[0][-n_new:] if n_new else out.sequences[0][:0]
513
669
  eot = processor.tokenizer.convert_tokens_to_ids("<|endoftext|>")
514
- token_logprobs = [
515
- torch.log_softmax(step[0].float(), dim=-1)[tok].item()
516
- for step, tok in zip(out.scores, new_ids)
517
- if tok.item() < eot # text tokens only — specials sit at/after <|endoftext|>
518
- ]
519
- text = processor.batch_decode(out.sequences, skip_special_tokens=True)[0]
520
- # Whisper's decode leaves a leading space (measured live: ' מה מזג ...');
521
- # listen_server.py's callers never see one, so strip before filtering.
522
- text = filter_non_speech_only(strip_bidi_controls(text).strip())
523
- confidence = average_logprob(token_logprobs)
524
- if text and is_low_confidence(confidence, MIN_AVG_LOGPROB):
525
- logger.info(
526
- "dropping low-confidence transcript (avg_logprob %.2f < %.2f): %r",
527
- confidence,
528
- MIN_AVG_LOGPROB,
529
- text,
530
- )
531
- text = ""
670
+
671
+ def transcribe_window(window: Sequence[float]) -> str:
672
+ audio = np.array(window, dtype=np.float32)
673
+ inputs = processor(audio, sampling_rate=SAMPLE_RATE, return_tensors="pt")
674
+ input_features = inputs.input_features.to("cuda", dtype=torch.float16)
675
+ with torch.no_grad():
676
+ out = model.generate(
677
+ input_features,
678
+ language=lang,
679
+ task="transcribe",
680
+ max_new_tokens=MAX_NEW_TOKENS,
681
+ return_dict_in_generate=True,
682
+ output_scores=True,
683
+ )
684
+ n_new = len(out.scores)
685
+ new_ids = out.sequences[0][-n_new:] if n_new else out.sequences[0][:0]
686
+ token_logprobs = [
687
+ torch.log_softmax(step[0].float(), dim=-1)[tok].item()
688
+ for step, tok in zip(out.scores, new_ids)
689
+ if tok.item() < eot # text tokens only — specials sit at/after <|endoftext|>
690
+ ]
691
+ text = processor.batch_decode(out.sequences, skip_special_tokens=True)[0]
692
+ # Whisper's decode leaves a leading space (measured live: ' מה מזג ...');
693
+ # listen_server.py's callers never see one, so strip before filtering.
694
+ text = filter_non_speech_only(strip_bidi_controls(text).strip())
695
+ confidence = average_logprob(token_logprobs)
696
+ # Gated per window: one hallucinated silent window is dropped on
697
+ # its own instead of poisoning (or rescuing) its neighbours.
698
+ if text and is_low_confidence(confidence, MIN_AVG_LOGPROB):
699
+ logger.info(
700
+ "dropping low-confidence transcript (avg_logprob %.2f < %.2f): %r",
701
+ confidence,
702
+ MIN_AVG_LOGPROB,
703
+ text,
704
+ )
705
+ text = ""
706
+ return text
707
+
708
+ chunks = plan_chunks(floats, SAMPLE_RATE)
709
+ if len(chunks) > 1:
710
+ logger.info("transcribing %.1fs in %d windows", len(floats) / SAMPLE_RATE, len(chunks))
711
+ text = join_chunk_texts([transcribe_window(floats[a:b]) for a, b in chunks])
532
712
 
533
713
  return build_success_response(text)
534
714
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lobes-cli"
3
- version = "0.84.3"
3
+ version = "0.85.0"
4
4
  description = "lobes — run, assess, and switch the local vLLM model."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -223,16 +223,21 @@ class TestLinearResample:
223
223
 
224
224
  class TestValidateClipDuration:
225
225
  def test_under_limit_is_ok(self, lsw) -> None:
226
- assert lsw.validate_clip_duration(16000 * 29, 16000) is None
226
+ assert lsw.validate_clip_duration(16000 * 29, 16000, 30) is None
227
227
 
228
228
  def test_exactly_at_limit_is_ok(self, lsw) -> None:
229
- assert lsw.validate_clip_duration(16000 * 30, 16000) is None
229
+ assert lsw.validate_clip_duration(16000 * 30, 16000, 30) is None
230
230
 
231
231
  def test_over_limit_is_refused(self, lsw) -> None:
232
- msg = lsw.validate_clip_duration(16000 * 31, 16000)
232
+ msg = lsw.validate_clip_duration(16000 * 31, 16000, 30)
233
233
  assert msg is not None
234
234
  assert "30" in msg
235
235
 
236
+ def test_longer_than_one_window_is_not_refused_by_default(self, lsw) -> None:
237
+ # Past one Whisper window is chunked now; only the total cap refuses.
238
+ assert lsw.validate_clip_duration(16000 * 31, 16000) is None
239
+ assert lsw.validate_clip_duration(16000 * 601, 16000) is not None
240
+
236
241
  def test_zero_sample_rate_is_refused(self, lsw) -> None:
237
242
  assert lsw.validate_clip_duration(100, 0) is not None
238
243
 
@@ -405,3 +410,135 @@ class TestConfidenceGate:
405
410
  assert lsw.parse_min_avg_logprob("-0,35") == lsw.DEFAULT_MIN_AVG_LOGPROB
406
411
  assert lsw.parse_min_avg_logprob(None) == lsw.DEFAULT_MIN_AVG_LOGPROB
407
412
  assert lsw.parse_min_avg_logprob("-0.5") == -0.5
413
+
414
+
415
+ # --------------------------------------------------------------------------
416
+ # Non-WAV uploads (m4a, mp3, ogg, webm, ...) are transcoded by the image's
417
+ # ffmpeg; a RIFF/WAVE upload never touches it.
418
+ # --------------------------------------------------------------------------
419
+
420
+
421
+ class TestIsRiffWave:
422
+ def test_wav_is_detected(self, lsw) -> None:
423
+ assert lsw.is_riff_wave(_make_wav_bytes([0, 1, 2]))
424
+
425
+ def test_m4a_is_not_wav(self, lsw) -> None:
426
+ assert not lsw.is_riff_wave(b"\x00\x00\x00\x20ftypM4A \x00\x00\x00\x00")
427
+
428
+ def test_short_or_empty_is_not_wav(self, lsw) -> None:
429
+ assert not lsw.is_riff_wave(b"")
430
+ assert not lsw.is_riff_wave(b"RIFF")
431
+
432
+
433
+ class TestFfmpegTranscodeCommand:
434
+ def test_targets_16k_mono_pcm16_wav_file(self, lsw) -> None:
435
+ cmd = lsw.ffmpeg_transcode_command("/t/in", "/t/out.wav", 600)
436
+ assert cmd[0] == "ffmpeg"
437
+ assert cmd[cmd.index("-i") + 1] == "/t/in"
438
+ assert cmd[cmd.index("-ac") + 1] == "1"
439
+ assert cmd[cmd.index("-ar") + 1] == "16000"
440
+ assert cmd[cmd.index("-c:a") + 1] == "pcm_s16le"
441
+ assert cmd[-1] == "/t/out.wav" # a seekable FILE, never pipe:1
442
+
443
+ def test_decode_stops_one_second_past_the_cap(self, lsw) -> None:
444
+ cmd = lsw.ffmpeg_transcode_command("/t/in", "/t/out.wav", 600)
445
+ assert float(cmd[cmd.index("-t") + 1]) == pytest.approx(601)
446
+
447
+
448
+ class _FakeProc:
449
+ def __init__(self, returncode: int, stderr: bytes = b"") -> None:
450
+ self.returncode = returncode
451
+ self.stderr = stderr
452
+
453
+
454
+ class TestTranscodeToWav:
455
+ def test_success_returns_ffmpegs_output_file(self, lsw) -> None:
456
+ wav = _make_wav_bytes([5, -5, 7])
457
+ seen = {}
458
+
459
+ def runner(cmd, **kwargs):
460
+ src, dst = cmd[cmd.index("-i") + 1], cmd[-1]
461
+ seen["input"] = Path(src).read_bytes()
462
+ seen["timeout"] = kwargs.get("timeout")
463
+ Path(dst).write_bytes(wav)
464
+ return _FakeProc(0)
465
+
466
+ assert lsw.transcode_to_wav(b"m4a-bytes", runner=runner) == wav
467
+ assert seen["input"] == b"m4a-bytes"
468
+ assert seen["timeout"] == lsw.FFMPEG_TIMEOUT_SECONDS
469
+
470
+ def test_ffmpeg_failure_raises_with_its_last_stderr_line(self, lsw) -> None:
471
+ def runner(cmd, **kwargs):
472
+ return _FakeProc(1, b"noise\nin: Invalid data found when processing input\n")
473
+
474
+ with pytest.raises(ValueError, match="Invalid data found"):
475
+ lsw.transcode_to_wav(b"garbage", runner=runner)
476
+
477
+ def test_missing_ffmpeg_is_a_value_error(self, lsw) -> None:
478
+ def runner(cmd, **kwargs):
479
+ raise FileNotFoundError("ffmpeg")
480
+
481
+ with pytest.raises(ValueError, match="ffmpeg is not installed"):
482
+ lsw.transcode_to_wav(b"x", runner=runner)
483
+
484
+ def test_zero_exit_without_output_is_a_failure(self, lsw) -> None:
485
+ with pytest.raises(ValueError, match="could not decode audio"):
486
+ lsw.transcode_to_wav(b"x", runner=lambda cmd, **kw: _FakeProc(0))
487
+
488
+
489
+ class TestParseMaxAudioSeconds:
490
+ def test_default_when_unset_empty_or_bad(self, lsw) -> None:
491
+ for raw in (None, "", " ", "ten", "0", "-5", "inf", "nan"):
492
+ assert lsw.parse_max_audio_seconds(raw) == lsw.DEFAULT_MAX_AUDIO_SECONDS
493
+
494
+ def test_positive_value_is_used(self, lsw) -> None:
495
+ assert lsw.parse_max_audio_seconds("120") == 120.0
496
+
497
+
498
+ # --------------------------------------------------------------------------
499
+ # Chunking: longer than one Whisper window is split at the quietest point
500
+ # near each window's end, never refused.
501
+ # --------------------------------------------------------------------------
502
+
503
+
504
+ class TestPlanChunks:
505
+ RATE = 100 # 100 Hz keeps the fixtures tiny; frame = 2 samples at 20 ms
506
+
507
+ def _check_cover(self, chunks, n, window) -> None:
508
+ assert chunks[0][0] == 0
509
+ assert chunks[-1][1] == n
510
+ for (a, b), (c, _) in zip(chunks, chunks[1:]):
511
+ assert b == c # contiguous, no overlap, no gap
512
+ for a, b in chunks:
513
+ assert 0 < b - a <= window
514
+
515
+ def test_one_window_is_one_chunk(self, lsw) -> None:
516
+ assert lsw.plan_chunks([1.0] * 2000, self.RATE, 30) == [(0, 2000)]
517
+
518
+ def test_exactly_one_window_is_one_chunk(self, lsw) -> None:
519
+ assert lsw.plan_chunks([1.0] * 3000, self.RATE, 30) == [(0, 3000)]
520
+
521
+ def test_cut_lands_in_the_pause(self, lsw) -> None:
522
+ samples = [1.0] * 4500
523
+ samples[2700:2720] = [0.0] * 20 # a 0.2 s pause 27 s in
524
+ chunks = lsw.plan_chunks(samples, self.RATE, 30, 5)
525
+ self._check_cover(chunks, 4500, 3000)
526
+ assert 2700 <= chunks[0][1] <= 2720
527
+
528
+ def test_long_clip_covers_every_sample_within_windows(self, lsw) -> None:
529
+ samples = [((i * 7919) % 13) / 13.0 for i in range(100 * 200)] # 200 s
530
+ chunks = lsw.plan_chunks(samples, self.RATE, 30, 5)
531
+ self._check_cover(chunks, len(samples), 3000)
532
+ assert len(chunks) >= 7
533
+
534
+ def test_no_pause_still_makes_progress(self, lsw) -> None:
535
+ chunks = lsw.plan_chunks([1.0] * 9000, self.RATE, 30, 5)
536
+ self._check_cover(chunks, 9000, 3000)
537
+
538
+
539
+ class TestJoinChunkTexts:
540
+ def test_skips_empty_windows(self, lsw) -> None:
541
+ assert lsw.join_chunk_texts(["שלום", "", " ", "עולם "]) == "שלום עולם"
542
+
543
+ def test_all_empty_is_empty(self, lsw) -> None:
544
+ assert lsw.join_chunk_texts(["", ""]) == ""
@@ -493,7 +493,7 @@ wheels = [
493
493
 
494
494
  [[package]]
495
495
  name = "lobes-cli"
496
- version = "0.84.3"
496
+ version = "0.85.0"
497
497
  source = { editable = "." }
498
498
 
499
499
  [package.optional-dependencies]