lobes-cli 0.68.4__tar.gz → 0.69.2__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 (770) hide show
  1. lobes_cli-0.69.2/.devague/current +1 -0
  2. lobes_cli-0.69.2/.devague/frames/targeted-ops-and-honest-streams.json +276 -0
  3. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/CHANGELOG.md +25 -0
  4. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/CLAUDE.md +22 -3
  5. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/PKG-INFO +1 -1
  6. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/colleague-stack.md +39 -7
  7. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deployment-shapes.md +10 -4
  8. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/gateway-fleet.md +82 -9
  9. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/mistral-small-3.2-24b-nvfp4.md +4 -2
  10. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/openai-api.md +34 -0
  11. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/init.py +18 -16
  12. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/up.py +96 -20
  13. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/explain/catalog.py +4 -2
  14. lobes_cli-0.69.2/lobes/gateway/_authlog.py +177 -0
  15. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_readiness.py +193 -30
  16. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/server.py +207 -7
  17. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/roles.py +82 -31
  18. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_compose.py +39 -10
  19. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/docker-compose.yml +23 -10
  20. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/pyproject.toml +1 -1
  21. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_up.py +11 -9
  22. lobes_cli-0.69.2/tests/test_gateway_auth_rejection_log.py +299 -0
  23. lobes_cli-0.69.2/tests/test_gateway_peer_advert.py +269 -0
  24. lobes_cli-0.69.2/tests/test_gateway_stream_termination.py +191 -0
  25. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_init_shape.py +14 -8
  26. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_tool_parser_plugin.py +10 -1
  27. lobes_cli-0.69.2/tests/test_up_no_deps_isolation.py +149 -0
  28. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/uv.lock +1 -1
  29. lobes_cli-0.68.4/.devague/current +0 -1
  30. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.agex/data/pr/events.jsonl +0 -0
  31. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/ask-colleague/SKILL.md +0 -0
  32. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  33. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  34. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  35. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  36. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  37. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  38. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/challenge/SKILL.md +0 -0
  39. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/cicd/SKILL.md +0 -0
  40. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  41. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  42. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  43. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  44. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  45. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/communicate/SKILL.md +0 -0
  46. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  47. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  48. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  49. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  50. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  51. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/deviate/SKILL.md +0 -0
  52. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  53. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  54. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/model-runner/SKILL.md +0 -0
  55. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/model-runner/scripts/model-runner.sh +0 -0
  56. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/recall/SKILL.md +0 -0
  57. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/recall/scripts/recall.sh +0 -0
  58. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/remember/SKILL.md +0 -0
  59. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/remember/scripts/remember.sh +0 -0
  60. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/run-tests/SKILL.md +0 -0
  61. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
  62. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/scope/SKILL.md +0 -0
  63. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
  64. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  65. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  66. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  67. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  68. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/think/SKILL.md +0 -0
  69. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/think/scripts/think.sh +0 -0
  70. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/version-bump/SKILL.md +0 -0
  71. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
  72. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.claude/skills.local.yaml.example +0 -0
  73. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/current_plan +0 -0
  74. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/capacity-relative-pool-routing.json +0 -0
  75. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/cortex-replica-pool-199.json +0 -0
  76. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/deployment-lock-per-box.json +0 -0
  77. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/dspark-speculation-on-the-spark-cortex.json +0 -0
  78. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  79. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/hand-lobe-lfm2-5-1-2b.json +0 -0
  80. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/lightning-on-orin.json +0 -0
  81. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  82. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/nemotron-lightning-worker.json +0 -0
  83. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/qwen3-8-gguf-llamacpp.json +0 -0
  84. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  85. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/thor-cortex-speculation.json +0 -0
  86. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/deliveries/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  87. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/capacity-relative-pool-routing.json +0 -0
  88. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/chatterbox-on-thor-sm-110.json +0 -0
  89. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/compose-chain-unification-init-repair-doctor-stale.json +0 -0
  90. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/cortex-replica-pool-199.json +0 -0
  91. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/deployment-lock-per-box.json +0 -0
  92. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/dspark-speculation-on-the-spark-cortex.json +0 -0
  93. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  94. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/flash-next-on-vllm.json +0 -0
  95. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/hand-lobe-lfm2-5-1-2b.json +0 -0
  96. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lightning-on-orin.json +0 -0
  97. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  98. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  99. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  100. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  101. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  102. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  103. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  104. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  105. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  106. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  107. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  108. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  109. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  110. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  111. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  112. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  113. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  114. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe.json +0 -0
  115. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  116. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/nemotron-lightning-worker.json +0 -0
  117. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/proxy-lobes-pairwise-auth.json +0 -0
  118. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/qwen3-8-27b-gguf-on-the-spark.json +0 -0
  119. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/qwen3-8-cortex-upgrade.json +0 -0
  120. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/qwen3-8-flash-next-gguf-candidate.json +0 -0
  121. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/qwen3-8-gguf-llamacpp.json +0 -0
  122. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  123. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/realtime-ws-server-vad-149.json +0 -0
  124. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/stt-readiness-truth-155.json +0 -0
  125. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  126. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/thor-cortex-speculation.json +0 -0
  127. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
  128. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  129. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/frames/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  130. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/capacity-relative-pool-routing.json +0 -0
  131. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/compose-chain-unification-init-repair-doctor-stale.json +0 -0
  132. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/cortex-replica-pool-199.json +0 -0
  133. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/deployment-lock-per-box.json +0 -0
  134. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/dspark-speculation-on-the-spark-cortex.json +0 -0
  135. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  136. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/hand-lobe-lfm2-5-1-2b.json +0 -0
  137. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lightning-on-orin.json +0 -0
  138. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  139. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  140. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  141. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  142. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  143. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  144. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  145. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  146. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  147. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  148. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  149. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  150. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  151. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  152. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  153. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  154. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  155. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  156. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/nemotron-lightning-worker.json +0 -0
  157. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/proxy-lobes-pairwise-auth.json +0 -0
  158. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/qwen3-8-cortex-upgrade.json +0 -0
  159. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/qwen3-8-flash-next-gguf-candidate.json +0 -0
  160. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/qwen3-8-gguf-llamacpp.json +0 -0
  161. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  162. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/realtime-ws-server-vad-149.json +0 -0
  163. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/stt-readiness-truth-155.json +0 -0
  164. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  165. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/thor-cortex-speculation.json +0 -0
  166. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
  167. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  168. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.devague/plans/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  169. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.eidetic/memory/colleague__public.jsonl +0 -0
  170. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.eidetic/memory/default__public.jsonl +0 -0
  171. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.eidetic/memory/lobes__public.jsonl +0 -0
  172. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.flake8 +0 -0
  173. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.github/workflows/publish.yml +0 -0
  174. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.github/workflows/tests.yml +0 -0
  175. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.gitignore +0 -0
  176. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/.markdownlint-cli2.yaml +0 -0
  177. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/AGENTS.md +0 -0
  178. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/LICENSE +0 -0
  179. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/README.md +0 -0
  180. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/culture.yaml +0 -0
  181. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/deployments/README.md +0 -0
  182. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/deployments/VARIATION.template.md +0 -0
  183. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/chatterbox-tts.md +0 -0
  184. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  185. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  186. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  187. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
  188. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-20-nemotron-lightning-worker.md +0 -0
  189. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  190. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-23-qwen3-8-gguf-llamacpp-deviation-ledger.md +0 -0
  191. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  192. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-25-cortex-replica-pool-199.md +0 -0
  193. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-25-lightning-on-orin.md +0 -0
  194. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-25-thor-cortex-speculation.md +0 -0
  195. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deliveries/2026-08-29-deployment-lock-per-box.md +0 -0
  196. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/deployment-lock.md +0 -0
  197. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/dspark-speculation.md +0 -0
  198. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/durable-logs.md +0 -0
  199. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-14-accept-referral-thor.txt +0 -0
  200. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-14-accept-spark-lobe-gb10.txt +0 -0
  201. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-14-accept-thor-lobe-live-referral-thor.txt +0 -0
  202. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-14-accept-thor-lobe-thor.txt +0 -0
  203. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-14-strict-tools-spark-lobe-spark.txt +0 -0
  204. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-16-proxy-lobes-live-spark-thor.txt +0 -0
  205. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-17-accept-muse-tool-calling-thor.txt +0 -0
  206. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-20-accept-embed-deep-gb10.txt +0 -0
  207. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-21-accept-realtime-spark.txt +0 -0
  208. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-21-accept-voice-loop-spark.txt +0 -0
  209. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-22-accept-realtime-voice-to-voice-spark.txt +0 -0
  210. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-25-accept-by-proxy-spark-f8a9.txt +0 -0
  211. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-31-accept-multimodal-cortex-spark.txt +0 -0
  212. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-31-accept-worker-proxy-spark.txt +0 -0
  213. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-07-31-accept-worker-thor.txt +0 -0
  214. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-04-accept-senses-unsloth-orin.txt +0 -0
  215. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-10-hand-lobe-budget-derivation.txt +0 -0
  216. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-10-partial-hand-orin.txt +0 -0
  217. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-10-partial-hand-spark.txt +0 -0
  218. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-19-accept-qwen38-1m-spark.txt +0 -0
  219. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-19-baseline-qwen3.6-cortex-spark.txt +0 -0
  220. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-19-spike-qwen3.8-official-nightly-spark.txt +0 -0
  221. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-accept-cortex-local-thor.txt +0 -0
  222. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-accept-cortex-repoint-orin.txt +0 -0
  223. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-accept-cortex-repoint-thor.txt +0 -0
  224. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-accept-dual-cortex-mesh.txt +0 -0
  225. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-accept-hand-spark.txt +0 -0
  226. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-accept-worker-hand-spark.txt +0 -0
  227. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-baseline-worker-qwen35b-thor.txt +0 -0
  228. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-hand-thor-blocked-reattributed.txt +0 -0
  229. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-spike-lightning-thor-no-go.txt +0 -0
  230. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-20-spike-nightly-sm110-thor.txt +0 -0
  231. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-21-measure-reasoning-effort-cortex-spark.txt +0 -0
  232. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-23-spike-qwen38-gguf-llamacpp-orin.txt +0 -0
  233. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-24-spike-dspark-cortex-spark.txt +0 -0
  234. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-accept-cortex-replica-pool-spark-thor.txt +0 -0
  235. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-accept-spark-lobe-dspark-render.txt +0 -0
  236. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-baseline-cortex-single-owner.txt +0 -0
  237. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-measure-associate-budget-orin.txt +0 -0
  238. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-orin-board-state-lightning-spikes.txt +0 -0
  239. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-spike-lightning-llamacpp-orin.txt +0 -0
  240. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-spike-lightning-vllm-orin.txt +0 -0
  241. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-25-spike-thor-cortex-speculation.txt +0 -0
  242. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-26-accept-orin-associate.txt +0 -0
  243. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-26-associate-gateway-auth-front.txt +0 -0
  244. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/2026-08-28-accept-capacity-relative-pool-thor-spark.txt +0 -0
  245. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/README-dspark-arms.md +0 -0
  246. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/README-realtime-acceptance.md +0 -0
  247. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-a16-dspark-262k.json +0 -0
  248. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-a16-none-262k.json +0 -0
  249. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-dspark-262k.json +0 -0
  250. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-dspark-768k.json +0 -0
  251. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-mtp-n2-262k.json +0 -0
  252. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-mtp-n2-768k.json +0 -0
  253. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-mtp-n2.json +0 -0
  254. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-none-262k.json +0 -0
  255. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/evidence/arm-none-768k.json +0 -0
  256. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/experiments/README.md +0 -0
  257. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/experiments/qwen3.8-flash-next-gguf-llamacpp-vllm.md +0 -0
  258. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/gemma-4-12b-nvfp4.md +0 -0
  259. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/gemma-4-12b-qat-w4a16.md +0 -0
  260. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/gemma-4-31b-nvfp4.md +0 -0
  261. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/gemma4-mtp-draft.md +0 -0
  262. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/image-ledger.md +0 -0
  263. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/lfm2.5-1.2b-hand.md +0 -0
  264. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/machine-profiles.md +0 -0
  265. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/measuring-lane-performance.md +0 -0
  266. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/model-switch-playbook.md +0 -0
  267. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/nemotron-3.5-lightning-30b-a3b-nvfp4.md +0 -0
  268. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/orin-associate-deployment.md +0 -0
  269. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/orin-profiles.md +0 -0
  270. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/parakeet-stt.md +0 -0
  271. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  272. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  273. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  274. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  275. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  276. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  277. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  278. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  279. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  280. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  281. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  282. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  283. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  284. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  285. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  286. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  287. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  288. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  289. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  290. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  291. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
  292. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  293. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-21-realtime-ws-server-vad-149.md +0 -0
  294. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-24-stt-readiness-truth-155.md +0 -0
  295. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
  296. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
  297. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
  298. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  299. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
  300. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
  301. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-20-nemotron-lightning-worker.md +0 -0
  302. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  303. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  304. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-25-cortex-replica-pool-199.md +0 -0
  305. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-25-lightning-on-orin.md +0 -0
  306. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-25-thor-cortex-speculation.md +0 -0
  307. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-27-capacity-relative-pool-routing.md +0 -0
  308. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/plans/2026-08-29-deployment-lock-per-box.md +0 -0
  309. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3-14b-nvfp4.md +0 -0
  310. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3-32b-nvfp4.md +0 -0
  311. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3-embedding-0.6b.md +0 -0
  312. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3-embedding-4b.md +0 -0
  313. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3-reranker-0.6b.md +0 -0
  314. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3.5-4b-minor.md +0 -0
  315. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3.6-27b-nvfp4-multimodal.md +0 -0
  316. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3.6-27b-nvfp4.md +0 -0
  317. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3.6-27b-text-nvfp4-mtp.md +0 -0
  318. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3.6-35b-a3b-nvfp4.md +0 -0
  319. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3.8-27b-gguf-llamacpp.md +0 -0
  320. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen3.8-27b-nvfp4.md +0 -0
  321. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/qwen38-rollout-notes.md +0 -0
  322. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/realtime-pipeline.md +0 -0
  323. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/secret-rotation.md +0 -0
  324. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/skill-sources.md +0 -0
  325. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  326. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  327. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  328. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  329. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  330. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  331. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  332. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  333. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  334. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  335. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  336. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  337. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  338. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  339. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  340. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  341. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  342. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  343. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  344. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  345. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
  346. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  347. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-21-realtime-ws-server-vad-149.md +0 -0
  348. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-24-stt-readiness-truth-155.md +0 -0
  349. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
  350. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
  351. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
  352. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  353. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-09-hand-lobe-lfm2-5-1-2b.md +0 -0
  354. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
  355. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-20-nemotron-lightning-worker.md +0 -0
  356. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  357. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  358. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-25-cortex-replica-pool-199.md +0 -0
  359. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-25-lightning-on-orin.md +0 -0
  360. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-25-thor-cortex-speculation.md +0 -0
  361. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-27-capacity-relative-pool-routing.md +0 -0
  362. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-27-flash-next-on-vllm.md +0 -0
  363. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-27-qwen3-8-flash-next-gguf-candidate.md +0 -0
  364. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/specs/2026-08-29-deployment-lock-per-box.md +0 -0
  365. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/superpowers/plans/2026-05-22-scaffold-cli-sibling.md +0 -0
  366. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/superpowers/specs/2026-05-22-scaffold-cli-sibling-design.md +0 -0
  367. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/tensorrt-llm-investigation.md +0 -0
  368. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/tuning-profiles.md +0 -0
  369. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/validate-tiers.md +0 -0
  370. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/vllm-nightly-migration.md +0 -0
  371. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/docs/worker-lightning-rollout-notes.md +0 -0
  372. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/examples/minor-evals/smoke.jsonl +0 -0
  373. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/__init__.py +0 -0
  374. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/__main__.py +0 -0
  375. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/_metrics.py +0 -0
  376. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/assess.py +0 -0
  377. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/bench/__init__.py +0 -0
  378. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/bench/cat_probe.py +0 -0
  379. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/bench/cat_score.py +0 -0
  380. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/bench/compare.py +0 -0
  381. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/bench/report.py +0 -0
  382. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/catalog.py +0 -0
  383. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/__init__.py +0 -0
  384. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/__init__.py +0 -0
  385. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/assess.py +0 -0
  386. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/benchmark.py +0 -0
  387. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/calibrate.py +0 -0
  388. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/capabilities.py +0 -0
  389. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/cli.py +0 -0
  390. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/doctor.py +0 -0
  391. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/eval.py +0 -0
  392. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/explain.py +0 -0
  393. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/fleet.py +0 -0
  394. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/learn.py +0 -0
  395. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/logs.py +0 -0
  396. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/measure.py +0 -0
  397. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/overview.py +0 -0
  398. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/route.py +0 -0
  399. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/run.py +0 -0
  400. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/serve.py +0 -0
  401. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/status.py +0 -0
  402. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/stop.py +0 -0
  403. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/switch.py +0 -0
  404. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/tunnel.py +0 -0
  405. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_commands/whoami.py +0 -0
  406. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_errors.py +0 -0
  407. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_live.py +0 -0
  408. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_output.py +0 -0
  409. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/cli/_runtime_ops.py +0 -0
  410. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/explain/__init__.py +0 -0
  411. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/__init__.py +0 -0
  412. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/__main__.py +0 -0
  413. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_config.py +0 -0
  414. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_pressure_policy.py +0 -0
  415. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_realtime.py +0 -0
  416. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_replicas.py +0 -0
  417. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_routing.py +0 -0
  418. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_selection.py +0 -0
  419. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/gateway/_tier_request.py +0 -0
  420. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/__init__.py +0 -0
  421. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/_registry.py +0 -0
  422. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/_strategy.py +0 -0
  423. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/_traits.py +0 -0
  424. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/blackwell.py +0 -0
  425. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/generic.py +0 -0
  426. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/orin.py +0 -0
  427. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/spark.py +0 -0
  428. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/machines/thor.py +0 -0
  429. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/minor/__init__.py +0 -0
  430. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/minor/_client.py +0 -0
  431. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/minor/governance.py +0 -0
  432. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/__init__.py +0 -0
  433. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin/__init__.py +0 -0
  434. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin/base.toml +0 -0
  435. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin/orin.toml +0 -0
  436. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin/spark.toml +0 -0
  437. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin/thor.toml +0 -0
  438. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/__init__.py +0 -0
  439. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/machine-as-brain.toml +0 -0
  440. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/orin-associate.toml +0 -0
  441. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/orin-cortex.toml +0 -0
  442. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/orin-lobe.toml +0 -0
  443. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/orin-small.toml +0 -0
  444. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/spark-lobe.toml +0 -0
  445. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/thor-lobe.toml +0 -0
  446. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/thor-muse.toml +0 -0
  447. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/builtin_shapes/thor-worker.toml +0 -0
  448. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/loader.py +0 -0
  449. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/render.py +0 -0
  450. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/schema.py +0 -0
  451. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/shape_render.py +0 -0
  452. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/profiles/shapes.py +0 -0
  453. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/__init__.py +0 -0
  454. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/__main__.py +0 -0
  455. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_conversation.py +0 -0
  456. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_floor.py +0 -0
  457. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_pcm.py +0 -0
  458. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_readiness.py +0 -0
  459. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_segmenter.py +0 -0
  460. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_session.py +0 -0
  461. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_settings.py +0 -0
  462. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_turn.py +0 -0
  463. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/_wire.py +0 -0
  464. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/app.py +0 -0
  465. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/audio_facade.py +0 -0
  466. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/chatterbox_server.py +0 -0
  467. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/protocol.py +0 -0
  468. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/realtime/tts_client.py +0 -0
  469. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/roles_measure.py +0 -0
  470. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/__init__.py +0 -0
  471. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_buildability.py +0 -0
  472. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_detect.py +0 -0
  473. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_env.py +0 -0
  474. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_health.py +0 -0
  475. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_lock.py +0 -0
  476. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_parser.py +0 -0
  477. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_pressure.py +0 -0
  478. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/runtime/_tunnel.py +0 -0
  479. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/__init__.py +0 -0
  480. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/cf-tunnel.env.example +0 -0
  481. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/docker-compose.yml +0 -0
  482. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/env.example +0 -0
  483. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/Dockerfile.chatterbox +0 -0
  484. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/Dockerfile.gateway +0 -0
  485. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/Dockerfile.parakeet +0 -0
  486. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/Dockerfile.realtime +0 -0
  487. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/Dockerfile.vllm-gemma4 +0 -0
  488. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/__init__.py +0 -0
  489. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/_readiness.py +0 -0
  490. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/docker-compose.audio.yml +0 -0
  491. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/env.audio.example +0 -0
  492. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/env.example +0 -0
  493. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/fleet/listen_server.py +0 -0
  494. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/templates/mg-logwrap.sh +0 -0
  495. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/variation.py +0 -0
  496. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/variation_catalog.py +0 -0
  497. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/vllm_plugins/__init__.py +0 -0
  498. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/lobes/vllm_plugins/qwen3_thinking_tool_parser.py +0 -0
  499. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/packaging/model-gear/README.md +0 -0
  500. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/packaging/model-gear/pyproject.toml +0 -0
  501. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/accept-by-proxy.sh +0 -0
  502. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/accept-shape.sh +0 -0
  503. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/audio-smoke.py +0 -0
  504. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/gen-api-key.py +0 -0
  505. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/live-check.sh +0 -0
  506. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/prefill-depth-curve.py +0 -0
  507. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/realtime-smoke.py +0 -0
  508. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/realtime-voice-loop.py +0 -0
  509. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/scan_deployment_secrets.py +0 -0
  510. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/spec-arms.py +0 -0
  511. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/spike-preflight.sh +0 -0
  512. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/scripts/validate-tiers.sh +0 -0
  513. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/.env.example +0 -0
  514. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/.gitignore +0 -0
  515. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/.nvmrc +0 -0
  516. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/README.md +0 -0
  517. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/astro.config.mjs +0 -0
  518. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/package-lock.json +0 -0
  519. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/package.json +0 -0
  520. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/proxy/gateway-proxy.mjs +0 -0
  521. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/public/favicon.svg +0 -0
  522. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/public/worklets/pcm-capture-processor.js +0 -0
  523. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/components/ConnectionPanel.astro +0 -0
  524. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/components/EventStream.astro +0 -0
  525. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/components/Footer.astro +0 -0
  526. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/components/Header.astro +0 -0
  527. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/components/MicIsland.astro +0 -0
  528. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/components/SignalMesh.astro +0 -0
  529. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/layouts/Layout.astro +0 -0
  530. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/pages/dev-connection.astro +0 -0
  531. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/pages/dev-events.astro +0 -0
  532. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/pages/dev-mic.astro +0 -0
  533. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/pages/index.astro +0 -0
  534. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/audio-graph.ts +0 -0
  535. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/audio-playback.test.ts +0 -0
  536. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/audio-playback.ts +0 -0
  537. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/audio-test-doubles.ts +0 -0
  538. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/connection-panel.ts +0 -0
  539. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/dev-mic-harness.ts +0 -0
  540. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/event-fixtures.ts +0 -0
  541. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/event-icons.ts +0 -0
  542. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/event-log.test.ts +0 -0
  543. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/event-log.ts +0 -0
  544. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/mic-capture.test.ts +0 -0
  545. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/mic-capture.ts +0 -0
  546. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/mic-island.test.ts +0 -0
  547. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/mic-island.ts +0 -0
  548. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/no-mic-mute.test.ts +0 -0
  549. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/pcm-wire.test.ts +0 -0
  550. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/pcm-wire.ts +0 -0
  551. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/realtime-connection.ts +0 -0
  552. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/scripts/realtime-events.ts +0 -0
  553. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/src/styles/global.css +0 -0
  554. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/test/connection-panel.test.ts +0 -0
  555. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/test/gateway-proxy.test.ts +0 -0
  556. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/test/realtime-connection.test.ts +0 -0
  557. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/tsconfig.json +0 -0
  558. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/site/vitest.config.ts +0 -0
  559. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/sonar-project.properties +0 -0
  560. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/__init__.py +0 -0
  561. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/conftest.py +0 -0
  562. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card/Dockerfile.gateway +0 -0
  563. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card/VARIATION.md +0 -0
  564. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card/deployment.lock.toml +0 -0
  565. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card/docker-compose.override.yml +0 -0
  566. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card/docker-compose.yml +0 -0
  567. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card__fixture-shape/VARIATION.md +0 -0
  568. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card__fixture-shape/deployment.lock.toml +0 -0
  569. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.override.yml +0 -0
  570. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.shape.yml +0 -0
  571. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.yml +0 -0
  572. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/upgrade_compat/README.md +0 -0
  573. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/upgrade_compat/fleet/docker-compose.yml +0 -0
  574. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/upgrade_compat/fleet/env.example +0 -0
  575. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/upgrade_compat/single/docker-compose.yml +0 -0
  576. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/fixtures/upgrade_compat/single/env.example +0 -0
  577. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/README.md +0 -0
  578. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/__init__.py +0 -0
  579. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/base.env +0 -0
  580. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/no-pool-gateway.json +0 -0
  581. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/orin.env +0 -0
  582. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/regen.py +0 -0
  583. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-associate__base.env +0 -0
  584. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-associate__orin.env +0 -0
  585. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-associate__spark.env +0 -0
  586. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-associate__thor.env +0 -0
  587. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-cortex__base.env +0 -0
  588. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-cortex__orin.env +0 -0
  589. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-cortex__spark.env +0 -0
  590. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-cortex__thor.env +0 -0
  591. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-lobe__base.env +0 -0
  592. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-lobe__orin.env +0 -0
  593. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-lobe__spark.env +0 -0
  594. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-lobe__thor.env +0 -0
  595. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-small__base.env +0 -0
  596. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-small__orin.env +0 -0
  597. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-small__spark.env +0 -0
  598. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/orin-small__thor.env +0 -0
  599. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/spark-lobe__base.env +0 -0
  600. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/spark-lobe__orin.env +0 -0
  601. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/spark-lobe__spark.env +0 -0
  602. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/spark-lobe__thor.env +0 -0
  603. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-lobe__base.env +0 -0
  604. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-lobe__orin.env +0 -0
  605. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-lobe__spark.env +0 -0
  606. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-lobe__thor.env +0 -0
  607. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-muse__base.env +0 -0
  608. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-muse__orin.env +0 -0
  609. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-muse__spark.env +0 -0
  610. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-muse__thor.env +0 -0
  611. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-worker__base.env +0 -0
  612. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-worker__orin.env +0 -0
  613. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-worker__spark.env +0 -0
  614. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/shapes/thor-worker__thor.env +0 -0
  615. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/spark.env +0 -0
  616. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/switch-plans.txt +0 -0
  617. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/template-defaults.env +0 -0
  618. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/goldens/thor.env +0 -0
  619. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_assess.py +0 -0
  620. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_assess_perf.py +0 -0
  621. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_associate_compose.py +0 -0
  622. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_associate_exposure.py +0 -0
  623. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_associate_gateway_boundaries.py +0 -0
  624. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_associate_role.py +0 -0
  625. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_bench_compare.py +0 -0
  626. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_bench_report.py +0 -0
  627. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_benchmark_all_lobes.py +0 -0
  628. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_boundary_serves_only.py +0 -0
  629. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_buildability_guard.py +0 -0
  630. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_calibration_knee.py +0 -0
  631. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cat_probe.py +0 -0
  632. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cat_score.py +0 -0
  633. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_catalog.py +0 -0
  634. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_catalog_tiers.py +0 -0
  635. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_chatterbox_pcm16.py +0 -0
  636. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_chatterbox_readiness.py +0 -0
  637. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli.py +0 -0
  638. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_benchmark_profiles.py +0 -0
  639. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_calibrate.py +0 -0
  640. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_capabilities.py +0 -0
  641. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_capabilities_replicas.py +0 -0
  642. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_eval.py +0 -0
  643. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_eval_cat.py +0 -0
  644. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_fleet.py +0 -0
  645. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_gateway_auth.py +0 -0
  646. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_introspection.py +0 -0
  647. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_logs.py +0 -0
  648. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_measure.py +0 -0
  649. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_route.py +0 -0
  650. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_run.py +0 -0
  651. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_runtime.py +0 -0
  652. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_tunnel.py +0 -0
  653. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_cli_wiring.py +0 -0
  654. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_client_reasoning_roundtrip.py +0 -0
  655. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_colleague_contract.py +0 -0
  656. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_compose_chain.py +0 -0
  657. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_deployment_lock.py +0 -0
  658. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_deployment_lock_doc.py +0 -0
  659. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_detect.py +0 -0
  660. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_doctor.py +0 -0
  661. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_doctor_fix.py +0 -0
  662. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_doctor_machine_profile.py +0 -0
  663. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_doctor_passthrough.py +0 -0
  664. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_dropped_lobe_honesty.py +0 -0
  665. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_fleet_audio_vad_env.py +0 -0
  666. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_fleet_minor.py +0 -0
  667. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_fleet_per_machine_knobs.py +0 -0
  668. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_fleet_secrets_env_file.py +0 -0
  669. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_fleet_template_gateway_env.py +0 -0
  670. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_audio_peer.py +0 -0
  671. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_audio_routing.py +0 -0
  672. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_auth.py +0 -0
  673. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_busy_e2e.py +0 -0
  674. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_capabilities.py +0 -0
  675. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_config_proxy.py +0 -0
  676. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_config_replicas.py +0 -0
  677. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_config_wiring.py +0 -0
  678. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_embed_deep.py +0 -0
  679. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_env_passthrough_guard.py +0 -0
  680. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_feasibility.py +0 -0
  681. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_fleet_doc.py +0 -0
  682. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_force_strict.py +0 -0
  683. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_hand_adapters.py +0 -0
  684. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_pool.py +0 -0
  685. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_pool_capacity_wiring.py +0 -0
  686. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_pool_pressure.py +0 -0
  687. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_pool_saturation.py +0 -0
  688. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_proxy.py +0 -0
  689. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_readiness.py +0 -0
  690. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_realtime_ws.py +0 -0
  691. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_replicas.py +0 -0
  692. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_routing.py +0 -0
  693. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_selection.py +0 -0
  694. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_server.py +0 -0
  695. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_status.py +0 -0
  696. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gateway_tiers.py +0 -0
  697. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gemma4_compose.py +0 -0
  698. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gemma4_dockerfile.py +0 -0
  699. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gen_api_key.py +0 -0
  700. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_gitignore_convention.py +0 -0
  701. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_init.py +0 -0
  702. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_init_coresidency.py +0 -0
  703. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_init_from_lock.py +0 -0
  704. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_init_gpu_access.py +0 -0
  705. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_init_profile.py +0 -0
  706. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_live_capabilities.py +0 -0
  707. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_lock_drift.py +0 -0
  708. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_machines.py +0 -0
  709. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_minor_client.py +0 -0
  710. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_minor_governance.py +0 -0
  711. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_minor_integration.py +0 -0
  712. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_minor_logprobs.py +0 -0
  713. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_nightly_migration_doc.py +0 -0
  714. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_no_config_byte_identity.py +0 -0
  715. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_orin_associate_shape.py +0 -0
  716. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_orin_cortex_shape.py +0 -0
  717. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_orin_lobe_shape.py +0 -0
  718. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_overview_live.py +0 -0
  719. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_parser.py +0 -0
  720. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_peer_referral.py +0 -0
  721. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_preserve_thinking_diagnostic.py +0 -0
  722. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_pressure.py +0 -0
  723. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_pressure_policy.py +0 -0
  724. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_profile_goldens.py +0 -0
  725. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_profile_render.py +0 -0
  726. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_profile_schema.py +0 -0
  727. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_profiles.py +0 -0
  728. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_proxy_integration.py +0 -0
  729. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_readiness_peer_probe.py +0 -0
  730. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_audio_env_coverage.py +0 -0
  731. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_audio_facade.py +0 -0
  732. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_conversation.py +0 -0
  733. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_floor.py +0 -0
  734. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_imports.py +0 -0
  735. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_pcm.py +0 -0
  736. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_protocol.py +0 -0
  737. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_readiness.py +0 -0
  738. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_segmenter.py +0 -0
  739. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_session.py +0 -0
  740. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_settings.py +0 -0
  741. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_smoke_helpers.py +0 -0
  742. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_tts_gate.py +0 -0
  743. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_turn.py +0 -0
  744. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_realtime_wire.py +0 -0
  745. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_role_probes.py +0 -0
  746. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_roles.py +0 -0
  747. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_roles_proxied.py +0 -0
  748. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_roles_replicas.py +0 -0
  749. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_scan_deployment_secrets.py +0 -0
  750. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_senses_speculative_config.py +0 -0
  751. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_shape_budgets.py +0 -0
  752. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_shape_contract_matrix.py +0 -0
  753. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_shape_goldens.py +0 -0
  754. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_shapes.py +0 -0
  755. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_smoke_duo.py +0 -0
  756. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_spec_arms.py +0 -0
  757. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_spike_preflight.py +0 -0
  758. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_status_fleet.py +0 -0
  759. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_status_pressure.py +0 -0
  760. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_switch_bf16.py +0 -0
  761. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_switch_plan_goldens.py +0 -0
  762. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_templates_preserve_thinking.py +0 -0
  763. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_tier_request.py +0 -0
  764. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_tts_pause_and_truncation.py +0 -0
  765. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_upgrade_compat.py +0 -0
  766. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_variation.py +0 -0
  767. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_variation_catalog.py +0 -0
  768. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_vllm_plugin_thinking.py +0 -0
  769. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_wheel_excludes_deployments.py +0 -0
  770. {lobes_cli-0.68.4 → lobes_cli-0.69.2}/tests/test_worker_compose.py +0 -0
@@ -0,0 +1 @@
1
+ targeted-ops-and-honest-streams
@@ -0,0 +1,276 @@
1
+ {
2
+ "slug": "targeted-ops-and-honest-streams",
3
+ "title": "targeted ops and honest streams",
4
+ "schema_version": 5,
5
+ "status": "drafting",
6
+ "created": "2026-08-29T12:18:43Z",
7
+ "updated": "2026-08-29T12:19:55Z",
8
+ "claims": [
9
+ {
10
+ "id": "c1",
11
+ "kind": "announcement",
12
+ "text": "lobes keeps two promises it currently breaks: a targeted lobe operation touches only what it names, and a streamed or proxied answer is honest about what it is \u2014 every SSE relay ends with a terminal frame and a closed socket even when its upstream dies, and a proxied role advertises the hosting peer's own ready and context rather than a locally-guessed one.",
13
+ "origin": "user",
14
+ "status": "confirmed",
15
+ "honesty_conditions": [],
16
+ "hard_questions": [],
17
+ "links": [],
18
+ "instruction": "",
19
+ "revisions": []
20
+ },
21
+ {
22
+ "id": "c2",
23
+ "kind": "requirement",
24
+ "text": "compose_service_argv's up branch gains --no-deps: lobes/runtime/_compose.py:769-782 builds ['docker','compose',*files,'up','-d',*services] and its own docstring already promises 'only these are (re)started ... without disturbing the rest of the fleet' \u2014 grep for no-deps/no_deps across lobes/ returns nothing, so the docstring is the spec and the argv is the defect. lobes/cli/_commands/up.py:231 is the single caller and renders its dry-run PLAN from the same argv, so the printed plan becomes truthful in the same change.",
25
+ "origin": "llm",
26
+ "status": "proposed",
27
+ "honesty_conditions": [],
28
+ "hard_questions": [],
29
+ "links": [],
30
+ "instruction": "",
31
+ "revisions": []
32
+ },
33
+ {
34
+ "id": "c3",
35
+ "kind": "requirement",
36
+ "text": "the fleet template's gateway depends_on stops being an unconditional hard edge: lobes/templates/fleet/docker-compose.yml:1706-1710 lists vllm-primary/vllm-multimodal/vllm-embed/vllm-rerank, its own adjacent comment says 'Start order only \u2014 the gateway tolerates a backend still loading ... so it must not block on backend health', and lobes/cli/_commands/init.py:230 already !resets exactly this attribute for a role-dropping shape \u2014 so the edge is already known-droppable.",
37
+ "origin": "llm",
38
+ "status": "proposed",
39
+ "honesty_conditions": [],
40
+ "hard_questions": [],
41
+ "links": [],
42
+ "instruction": "",
43
+ "revisions": []
44
+ },
45
+ {
46
+ "id": "c4",
47
+ "kind": "requirement",
48
+ "text": "lobes gains a first-class gateway update path: lobes/cli/_commands/up.py:92 sets TARGETS = roles.ROLES + (colleague-stack,), so 'gateway' is not an addressable target and the operator need ('reinstall the gateway at a new MODEL_GEAR_VERSION, touch nothing else') has no verb \u2014 which is why issue 222 was hit through a hand-written docker compose up -d --build gateway.",
49
+ "origin": "llm",
50
+ "status": "proposed",
51
+ "honesty_conditions": [],
52
+ "hard_questions": [],
53
+ "links": [],
54
+ "instruction": "",
55
+ "revisions": []
56
+ },
57
+ {
58
+ "id": "c5",
59
+ "kind": "requirement",
60
+ "text": "_relay_streaming terminates the client stream on an upstream failure: lobes/gateway/server.py:3442-3457 loops resp.upstream.read(_CHUNK) -> wfile.write(frame_chunk(chunk)) with no try/except, so an exception from either side skips both CHUNK_TERMINATOR and any terminal SSE frame; _Upstream.read (server.py:482) is a bare http.client read1 that can raise OSError/HTTPException mid-stream.",
61
+ "origin": "llm",
62
+ "status": "proposed",
63
+ "honesty_conditions": [],
64
+ "hard_questions": [],
65
+ "links": [],
66
+ "instruction": "",
67
+ "revisions": []
68
+ },
69
+ {
70
+ "id": "c6",
71
+ "kind": "requirement",
72
+ "text": "a proxied role's advertised ready and context come from the hosting peer's own /capabilities, not from local data: lobes/roles.py:682-711 derives context from _served_context(role, env, native_context) over the LOCAL .env plus the catalog's native_max_model_len (1048576 for the Lightning entry), and lobes/gateway/_readiness.py:212-266 probe_peer_ready only checks that the peer's /v1/models lists served_name \u2014 which a box forwarding the alias (ASSOCIATE_SERVED_NAME) can never satisfy, yielding the reported ready:false/context:1048576 against the Orin's own ready:true/context:128000.",
73
+ "origin": "llm",
74
+ "status": "proposed",
75
+ "honesty_conditions": [],
76
+ "hard_questions": [],
77
+ "links": [],
78
+ "instruction": "",
79
+ "revisions": []
80
+ },
81
+ {
82
+ "id": "c7",
83
+ "kind": "assumption",
84
+ "text": "probe_audio_peer_ready (lobes/gateway/_readiness.py:322-341) is the existing precedent for reading a peer's GET /capabilities and trusting roles[role].ready \u2014 the core-role relay is that same shape widened to carry context, not a new mechanism.",
85
+ "origin": "llm",
86
+ "status": "proposed",
87
+ "honesty_conditions": [],
88
+ "hard_questions": [],
89
+ "links": [],
90
+ "instruction": "",
91
+ "revisions": []
92
+ },
93
+ {
94
+ "id": "c8",
95
+ "kind": "boundary",
96
+ "text": "the shape override contract is untouched: lobes/cli/_commands/init.py:187-231 renders docker-compose.shape.yml parking dropped services in the inert shape-dropped profile AND emitting 'depends_on: !reset null' on the gateway; tests/test_shape_goldens.py and tests/test_init_shape.py pin that text, so a base-template depends_on change must leave the override renderable and its goldens honest (a !reset of an absent attribute is legal but the comment prose around it would become false).",
97
+ "origin": "llm",
98
+ "status": "proposed",
99
+ "honesty_conditions": [],
100
+ "hard_questions": [],
101
+ "links": [],
102
+ "instruction": "",
103
+ "revisions": []
104
+ },
105
+ {
106
+ "id": "c9",
107
+ "kind": "boundary",
108
+ "text": "the stop branch of compose_service_argv stays as it is: docker compose stop does not walk depends_on, so --no-deps belongs on the up branch only \u2014 the issue itself names this asymmetry as why the defect went unnoticed.",
109
+ "origin": "llm",
110
+ "status": "proposed",
111
+ "honesty_conditions": [],
112
+ "hard_questions": [],
113
+ "links": [],
114
+ "instruction": "",
115
+ "revisions": []
116
+ },
117
+ {
118
+ "id": "c10",
119
+ "kind": "boundary",
120
+ "text": "the per-heavy-lobe depends_on edges are NOT in scope: vllm-muse (docker-compose.yml:1245), vllm-worker (:1354) and vllm-associate (:1602) each wait on vllm-embed/vllm-rerank service_healthy as a MEASURED mitigation for the Thor unified-memory first-boot race (2026-07-17, docs/machine-profiles.md) \u2014 only the gateway's edge is the defect.",
121
+ "origin": "llm",
122
+ "status": "proposed",
123
+ "honesty_conditions": [],
124
+ "hard_questions": [],
125
+ "links": [],
126
+ "instruction": "",
127
+ "revisions": []
128
+ },
129
+ {
130
+ "id": "c11",
131
+ "kind": "non_goal",
132
+ "text": "issue 220 part 4 (bursts of 29x POST /tokenize 401 every ~2 min) is not fixed here: the issue itself states the fix is on the resident side (an older spark-colleague mesh resident without the gateway key), and nothing under lobes/gateway/ is misbehaving \u2014 a 401 on an unauthenticated POST is the #127 inbound gate working.",
133
+ "origin": "llm",
134
+ "status": "proposed",
135
+ "honesty_conditions": [],
136
+ "hard_questions": [],
137
+ "links": [],
138
+ "instruction": "",
139
+ "revisions": []
140
+ },
141
+ {
142
+ "id": "c12",
143
+ "kind": "non_goal",
144
+ "text": "issue 220 part 3 (reranker calibration \u2014 distractors scoring 0.72-0.77, a NOTICE sentence out-ranking a toolbatch sentence) is not fixed here: it is a served-prompt-template/measurement investigation against Qwen3-Reranker-0.6B's model card, with no defect localised in lobes yet, and the reporter's own verdict is 'usable for top-k ordering, not thresholds'.",
145
+ "origin": "llm",
146
+ "status": "proposed",
147
+ "honesty_conditions": [],
148
+ "hard_questions": [],
149
+ "links": [],
150
+ "instruction": "",
151
+ "revisions": []
152
+ },
153
+ {
154
+ "id": "c13",
155
+ "kind": "boundary",
156
+ "text": "no live-box validation is claimed: the #108 rule in CLAUDE.md forbids doc, support-table or lobes capabilities output claiming validation without an acceptance transcript under docs/evidence/, and the boxes this was observed on (spark, the Thor peer, the Orin) are not being re-booted by this change \u2014 every claim here is offline-testable or stays UNVALIDATED.",
157
+ "origin": "llm",
158
+ "status": "proposed",
159
+ "honesty_conditions": [],
160
+ "hard_questions": [],
161
+ "links": [],
162
+ "instruction": "",
163
+ "revisions": []
164
+ }
165
+ ],
166
+ "open_vagueness": [
167
+ {
168
+ "id": "v1",
169
+ "text": "the reported symptom (client hangs, SSE socket ESTABLISHED, no terminal frame) is not fully explained by the traceback in the issue: a BrokenPipeError on wfile.write means the CLIENT already went away, yet the client reported still waiting \u2014 so there may be a second failure mode (the JSONDecodeError traceback, or a pre-relay path) that the _relay_streaming fix alone does not close.",
170
+ "kind": "unknown_nonblocking",
171
+ "claim_id": null,
172
+ "resolved": false,
173
+ "resolution": "",
174
+ "resolution_claim_id": null
175
+ },
176
+ {
177
+ "id": "v2",
178
+ "text": "whether an infeasible-but-PROXIED role should relay the peer's context verbatim or a min(local ceiling, peer context) \u2014 a caller that trusts a relayed 128000 is right today, but the value is the peer's, and this box cannot honour it if the proxy is later withdrawn.",
179
+ "kind": "unknown_nonblocking",
180
+ "claim_id": null,
181
+ "resolved": false,
182
+ "resolution": "",
183
+ "resolution_claim_id": null
184
+ }
185
+ ],
186
+ "scope_entries": [
187
+ {
188
+ "id": "s1",
189
+ "surface": "lobes/runtime/_compose.py:769-782 (compose_service_argv)",
190
+ "finding": "the up branch emits 'up -d <services>' with no --no-deps while its docstring promises fleet isolation; grep -rn 'no-deps|no_deps' lobes/ returns nothing",
191
+ "seeds": [
192
+ "c2",
193
+ "c9"
194
+ ]
195
+ },
196
+ {
197
+ "id": "s2",
198
+ "surface": "lobes/cli/_commands/up.py (TARGETS, ROLE_SERVICE, _resolve)",
199
+ "finding": "the single caller of compose_service_argv (line 231); TARGETS at line 92 is roles.ROLES + colleague-stack, so 'gateway' is not an addressable target; ROLE_SERVICE maps ten roles to services, gateway absent",
200
+ "seeds": [
201
+ "c2",
202
+ "c4"
203
+ ]
204
+ },
205
+ {
206
+ "id": "s3",
207
+ "surface": "lobes/templates/fleet/docker-compose.yml (gateway service, line ~1690-1712)",
208
+ "finding": "gateway depends_on lists all four default core lanes unconditionally, annotated 'Start order only \u2014 the gateway ... must not block on backend health'; the muse/worker/associate lanes at 1245/1354/1602 carry a DIFFERENT, measured depends_on on embed+rerank service_healthy",
209
+ "seeds": [
210
+ "c3",
211
+ "c10"
212
+ ]
213
+ },
214
+ {
215
+ "id": "s4",
216
+ "surface": "lobes/cli/_commands/init.py:143-231 (SHAPE_DROPPED_PROFILE, render_shape_override)",
217
+ "finding": "a role-dropping shape already parks dropped services in the inert 'shape-dropped' profile and emits 'depends_on: !reset null' on the gateway \u2014 so the base edge is known-droppable, and its prose/goldens are the constraint on changing the base",
218
+ "seeds": [
219
+ "c3",
220
+ "c8"
221
+ ]
222
+ },
223
+ {
224
+ "id": "s5",
225
+ "surface": "lobes/gateway/server.py:432-436, 482-495, 3442-3457 (_relay_streaming, _Upstream.read, frame_chunk)",
226
+ "finding": "the relay loop has no exception handling around either the upstream read1 or the client wfile.write, so a mid-stream failure skips CHUNK_TERMINATOR entirely and emits no terminal SSE frame",
227
+ "seeds": [
228
+ "c5"
229
+ ]
230
+ },
231
+ {
232
+ "id": "s6",
233
+ "surface": "lobes/roles.py:120-170 and 682-711 (ROLE_BACKEND/ROLE_ROLE_HINT, _core_role entry builder)",
234
+ "finding": "context comes from _served_context over the LOCAL .env plus the catalog native_max_model_len, and associate shares worker's role_hint (one checkpoint, two addresses) \u2014 which is also why the raw model id and 'worker' resolve to the local worker backend and 404 role_infeasible on the proxying box",
235
+ "seeds": [
236
+ "c6"
237
+ ]
238
+ },
239
+ {
240
+ "id": "s7",
241
+ "surface": "lobes/gateway/_readiness.py:212-266 (probe_peer_ready) and :322-341 (probe_audio_peer_ready)",
242
+ "finding": "the core-role peer probe asserts the peer's /v1/models lists served_name \u2014 unsatisfiable when the box forwards an alias \u2014 while the AUDIO peer probe already reads the peer's GET /capabilities and trusts roles[role].ready; the audio shape is the precedent to widen",
243
+ "seeds": [
244
+ "c6",
245
+ "c7"
246
+ ]
247
+ },
248
+ {
249
+ "id": "s8",
250
+ "surface": "issue 220 parts 3 and 4 as filed",
251
+ "finding": "part 4 names its own fix as resident-side (an old spark-colleague without the gateway key); part 3 has no defect localised in lobes and asks for a served-prompt-template check against the model card \u2014 neither is a lobes code change today",
252
+ "seeds": [
253
+ "c11",
254
+ "c12"
255
+ ]
256
+ },
257
+ {
258
+ "id": "s9",
259
+ "surface": "CLAUDE.md (#108 honesty rule) and docs/evidence/",
260
+ "finding": "no acceptance transcript may be claimed without a live boot; the boxes in both issue reports are not being re-booted here, so every claim must be offline-testable or explicitly stay UNVALIDATED",
261
+ "seeds": [
262
+ "c13"
263
+ ]
264
+ },
265
+ {
266
+ "id": "s10",
267
+ "surface": "tests/ (test_cli_up.py, test_compose_chain.py, test_shape_goldens.py, test_init_shape.py, test_gateway_readiness.py, test_gateway_capabilities.py, test_gateway_proxy.py)",
268
+ "finding": "existing offline suites already cover the argv, the compose chain, the shape override goldens, the peer probes and the capabilities payload \u2014 issue 222's requested guard tests (argv contains --no-deps; an infeasible role is never a started dependency) land in files that already exist",
269
+ "seeds": [
270
+ "c2",
271
+ "c3"
272
+ ]
273
+ }
274
+ ],
275
+ "lapses": []
276
+ }
@@ -4,6 +4,31 @@ 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.69.2] - 2026-08-29
8
+
9
+ ### Fixed
10
+
11
+ - An inbound auth rejection now logs its source and the reason it failed, and repeats from one source collapse to one line per 60s instead of flooding the log (issue #228). The 401 response is unchanged and still distinguishes nothing — the caller must not learn missing vs. malformed vs. wrong.
12
+
13
+ ## [0.69.1] - 2026-08-29
14
+
15
+ ### Fixed
16
+
17
+ - The streamed relay also treats a `ValueError` from the upstream read as an upstream failure, so a malformed chunked body cannot skip the terminal SSE frames (PR #229 review).
18
+ - `cmd_up` and `build_role_registry` were split into named helpers (`_audio_overlay_required`, `_resolve_build`, `_role_signals`) to stay under the cognitive-complexity gate.
19
+
20
+ ## [0.69.0] - 2026-08-29
21
+
22
+ ### Added
23
+
24
+ - `lobes up gateway` (and `--build`) — a first-class path to restart or re-image the gateway alone at a new `MODEL_GEAR_VERSION` (issue #222).
25
+
26
+ ### Fixed
27
+
28
+ - `lobes up <role>` now runs with `--no-deps` and the fleet gateway declares no `depends_on`, so a targeted start can no longer recreate the whole fleet or boot a lane the box declares infeasible (issue #222).
29
+ - A streamed `/v1/chat/completions` relay always terminates the client stream: an upstream that dies mid-stream now yields an SSE error event, `data: [DONE]` and the chunked terminator, and a client that hung up is logged instead of leaving a wedged socket (issue #220).
30
+ - A proxied role advertises the hosting peer's own `ready` and `context`, read from the peer's `GET /capabilities`, instead of a locally-guessed catalog ceiling and an unsatisfiable `/v1/models` check (issue #220).
31
+
7
32
  ## [0.68.4] - 2026-08-29
8
33
 
9
34
  ### Fixed
@@ -238,7 +238,14 @@ busy — the former degrade-to-`minor` substitution path was removed outright,
238
238
  so there is no cheaper-rung fallback for any of the four); an explicit
239
239
  `hand` request (or its `minor`/`cheap` spellings) is the servable floor and is
240
240
  always served regardless of pressure. `lobes status --pressure` shows the current busy/warm state.
241
- Start/stop one role at a time with `lobes up <role>` (or the
241
+ Start/stop one role at a time with `lobes up <role>` — which since issue #222
242
+ actually isolates: every `up` carries `--no-deps` and the base compose gives
243
+ the gateway no `depends_on` at all, because `docker compose up -d <service>`
244
+ walks that list and a gateway-only restart was therefore recreating every heavy
245
+ lane (measured live on the Thor 2026-08-28, including starting a lane the box
246
+ declares `MULTIMODAL_FEASIBLE=false`). `gateway` is now an `up` TARGET too (not
247
+ a role): `lobes up gateway --build --apply` re-images the front at a new
248
+ `MODEL_GEAR_VERSION` without touching the lobes behind it. Or the
242
249
  seven-default-role bundle, `lobes up colleague-stack` — `muse` and `worker` are
243
250
  deliberately excluded from the bundle, both being opt-in-hosted, while `hand`
244
251
  IS included, being default-hosted and un-gated; `lobes up muse` works on
@@ -704,8 +711,20 @@ stays byte-identical to the pre-proxy contract.
704
711
  **Live as of 2026-07-31:** the DGX Spark (`spark-lobe`) proxies TWO roles —
705
712
  `senses` → the AGX Orin and `worker` → the Jetson AGX Thor — so a caller
706
713
  addresses either on the Spark's own gateway and never dials the peer box.
707
- Both answer 200 with `X-Lobes-Proxied-By`, image input included. Note a proxied
708
- role reports `feasible: false` **by design** (it means "this box does not *host*
714
+ Both answer 200 with `X-Lobes-Proxied-By`, image input included. **A proxied
715
+ role's `ready` and `context` are the PEER's own advert (issue #220):** the
716
+ background probe reads the peer's `GET /capabilities` and relays that role
717
+ entry, falling back to the old `/v1/models` served-id check only for a peer
718
+ with no such entry. Both halves fixed a measured lie — on the Spark,
719
+ 2026-08-27, `associate` advertised `ready:false, context:1048576` against an
720
+ Orin reporting `ready:true, context:128000` — with two distinct causes: the
721
+ `/v1/models` check is unsatisfiable for a box forwarding an ALIAS (which
722
+ `associate` must do, sharing a checkpoint with `worker`), and a role this box
723
+ does not host has no `<PREFIX>_MAX_MODEL_LEN` to read, so context fell through
724
+ to the catalog's native ceiling. That collision is also why **role-name
725
+ addressing (`model=associate`) is the documented proxied path** — the raw
726
+ checkpoint id is ambiguous and resolves to the local `worker` lane. Note a
727
+ proxied role reports `feasible: false` **by design** (it means "this box does not *host*
709
728
  it", not "you cannot use it here"); `proxied: true` + `hosted_by` + `ready` are
710
729
  the fields that say it is usable, and `loaded` is a *wiring* fact, not a
711
730
  running one. See `docs/gateway-fleet.md#proxy-lobes-the-third-lobe-state-opt-in`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: lobes-cli
3
- Version: 0.68.4
3
+ Version: 0.69.2
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
@@ -661,19 +661,51 @@ carries `hosted_by` at most, never `proxied`).
661
661
  touching the rest of the fleet:
662
662
 
663
663
  ```bash
664
- lobes up cortex --apply # docker compose up -d vllm-primary
665
- lobes up senses --apply # docker compose up -d vllm-multimodal
666
- lobes up muse --apply # docker compose up -d vllm-muse (muse-hosting shape only — currently no box hosts one, see the dormant callout above)
667
- lobes up worker --apply # docker compose up -d vllm-worker (verb wired; live on the Spark since d1, errors helpfully off any other non-hosting box)
668
- lobes up embedder --apply # docker compose up -d vllm-embed
669
- lobes up reranker --apply # docker compose up -d vllm-rerank
664
+ lobes up cortex --apply # docker compose up -d --no-deps vllm-primary
665
+ lobes up senses --apply # docker compose up -d --no-deps vllm-multimodal
666
+ lobes up muse --apply # docker compose up -d --no-deps vllm-muse (muse-hosting shape only — currently no box hosts one, see the dormant callout above)
667
+ lobes up worker --apply # docker compose up -d --no-deps vllm-worker (verb wired; live on the Spark since d1, errors helpfully off any other non-hosting box)
668
+ lobes up embedder --apply # docker compose up -d --no-deps vllm-embed
669
+ lobes up reranker --apply # docker compose up -d --no-deps vllm-rerank
670
670
  lobes up stt --apply # requires the --audio overlay
671
671
  lobes up tts --apply # requires the --audio overlay
672
672
  lobes up colleague-stack --apply # the SEVEN default roles at once (requires --audio scaffolded)
673
+ lobes up gateway --apply # the gateway ALONE (not a role — see below)
674
+ lobes up gateway --build --apply # ...re-imaged at the current MODEL_GEAR_VERSION
673
675
  ```
674
676
 
675
677
  Dry-run by default (prints the exact `docker compose …` command); `--apply`
676
- commits. `colleague-stack` is a first-class bundle — the four default fleet
678
+ commits.
679
+
680
+ ### `--no-deps` is what makes "without touching the rest of the fleet" true
681
+
682
+ **Issue #222.** `docker compose up -d <service>` **walks `depends_on`** and
683
+ (re)creates every dependency, so before #222 this verb's isolation promise was
684
+ documentation only. Hit live on a Jetson AGX Thor 2026-08-28: a gateway-only
685
+ rebuild recreated the resident 27B cortex (a multi-minute reload) *and* started
686
+ `vllm-multimodal` on a box declaring `MULTIMODAL_FEASIBLE=false` with an active
687
+ proxy to a peer — burning the exact GPU budget that declaration exists to
688
+ reclaim, in a unified-memory race against the load it was meant to leave alone.
689
+
690
+ Every `up` now carries `--no-deps`, and the base compose no longer gives the
691
+ gateway a `depends_on` at all (belt and braces: the flag fixes this CLI, the
692
+ template fixes the hand-written `docker compose` command and every
693
+ lock-restored box). `--down` needs no equivalent — compose `stop` never walks
694
+ `depends_on`, which is exactly why the asymmetry went unnoticed. The dry-run
695
+ PLAN is rendered from the argv that later runs, so the printed command is the
696
+ executed one.
697
+
698
+ ### `gateway` is a target, not a role
699
+
700
+ `gateway` is deliberately **not** in `lobes.roles.ROLES`, not in the role→service
701
+ map, and not in the `colleague-stack` bundle — it is the stdlib reverse proxy
702
+ *fronting* the roles, not one of them. It is an `up` target because it is the
703
+ service an operator most often needs to touch alone: pure stdlib, rebuilds in
704
+ seconds, and it bakes `MODEL_GEAR_VERSION` into its image, while the lobes
705
+ behind it take minutes and hold tens of GiB. `lobes up gateway --build --apply`
706
+ is the "reinstall the gateway, touch nothing else" operation that had no verb
707
+ before #222 — which is why it was being done by hand, with the consequences
708
+ above. `colleague-stack` is a first-class bundle — the four default fleet
677
709
  roles **plus** the audio overlay's `stt`/`tts` — not a compose `profiles:`
678
710
  tag, because tagging the already-default-on services with a profile would
679
711
  demote them out of the default fleet (a regression). If the audio overlay
@@ -277,10 +277,16 @@ half-served, never silently rerouted:
277
277
  docker-compose.shape.yml`, which `lobes fleet up --apply` auto-includes
278
278
  when present). It parks each dropped core service in the inert
279
279
  `shape-dropped` compose profile — a profile **nothing** activates, so
280
- `docker compose up` skips it — and clears the gateway's `depends_on` with
281
- the compose `!reset` merge tag (list *replacement* is `!override`; `!reset`
282
- is what removes the now-dangling edge to a profile-disabled service).
283
- **Requires Docker Compose v2.24+** (the `!reset` tag). The resolved `-f`
280
+ `docker compose up` skips it. It used to *also* clear the gateway's
281
+ `depends_on` with the compose `!reset` merge tag, because the base template
282
+ listed every core lane there and a profile-disabled service left that edge
283
+ dangling; since **issue #222** the base template declares no gateway
284
+ `depends_on` at all, so the override no longer patches the gateway and no
285
+ longer needs Compose v2.24+. (The edge was never a correctness property —
286
+ the gateway routes and fails over per request — but it *was* a hazard: any
287
+ gateway start walked it and brought up every heavy lane, dropped or not.
288
+ Removing it in the base file also covers the hand-scaffolded and
289
+ lock-restored boxes no shape override reaches.) The resolved `-f`
284
290
  chain comes from one builder (#137) and is printable read-only via
285
291
  `lobes fleet files` — anything driving `docker compose` by hand (scripts,
286
292
  operators) should consume that instead of re-deriving the file list.
@@ -128,8 +128,8 @@ actually activates a template change on a running fleet.
128
128
  The gateway adds a second backend **only** when `FALLBACK_URL` or
129
129
  `FALLBACK_SERVED_NAME` is set. To add a warm fallback: define a `vllm-fallback`
130
130
  service in the fleet compose (mirror `vllm-primary` with the fallback's model /
131
- quantization / tokenizer / tool-parser), add it to the gateway's `depends_on`,
132
- set `FALLBACK_URL` + `FALLBACK_SERVED_NAME` on the gateway, and **drop both
131
+ quantization / tokenizer / tool-parser), set `FALLBACK_URL` +
132
+ `FALLBACK_SERVED_NAME` on the gateway, and **drop both
133
133
  `*_GPU_MEM_UTIL` values** so they sum well under 1.0. The archived dense Mistral
134
134
  fallback config is in git history and
135
135
  [`docs/mistral-small-3.2-24b-nvfp4.md`](mistral-small-3.2-24b-nvfp4.md).
@@ -512,6 +512,42 @@ The gate runs *before* the request body is read off the socket, before model
512
512
  resolution, and before any upstream connection, so a rejected request costs
513
513
  the fleet zero parsing and zero sockets.
514
514
 
515
+ **What the rejection LOGS (issue #228).** The response says as little as
516
+ possible; the log says as much as the operator needs, and the asymmetry is
517
+ deliberate — the caller must not learn whether its key was missing, malformed
518
+ or merely wrong (that would make a 401 a key-material oracle), while whoever
519
+ reads their own gateway's stderr needs exactly that to tell a misconfigured
520
+ client from someone guessing. A rejection logs:
521
+
522
+ ```text
523
+ [gateway] auth: rejected POST /tokenize from 172.21.0.1 (no Authorization header)
524
+ ```
525
+
526
+ — the method and path, the **socket peer** (never `X-Forwarded-For`: a
527
+ security log whose attribution field the caller can write is worse than one
528
+ with none), and a reason from a fixed set (`no Authorization header` /
529
+ `not a Bearer credential` / `empty Bearer token` /
530
+ `Bearer token did not match this gateway's key`). No reason string is derived
531
+ from the presented credential or the configured key, so the classification
532
+ cannot leak what it classified.
533
+
534
+ Repeats from one source **collapse to one line per 60 s**, and the next line
535
+ after that window carries what was suppressed:
536
+
537
+ ```text
538
+ [gateway] auth: rejected POST /tokenize from 172.21.0.1 (no Authorization header) [+28 more from this source in the previous 123s]
539
+ ```
540
+
541
+ Both the diagnostic *and* the ordinary access line are suppressed for a
542
+ collapsed repeat — suppressing only one would leave the flood at its original
543
+ size. This is sized against the measured failure: a client with no key retried
544
+ in bursts of ~29 every ~2 minutes, putting **1190 identical, sourceless,
545
+ reasonless lines** into four hours of a DGX Spark's gateway log and burying
546
+ everything else it had to say. Sources collapse independently, so a second
547
+ address appearing is never hidden by a first one that is already flooding, and
548
+ the tracking table is capped (least-recently-seen evicted) because its keys are
549
+ attacker-chosen.
550
+
515
551
  **Hosting `associate` makes the key non-optional — enforced by `lobes
516
552
  doctor`.** The bearer gate above is opt-in fleet-wide, but the `associate`
517
553
  lane is the one role whose exposure has already gone wrong in practice. On
@@ -656,16 +692,53 @@ policy when the forward arrives. Shedding here too would gate the role a
656
692
  second time, against the wrong box's load.
657
693
 
658
694
  **`/v1/models` and `GET /capabilities` only advertise what the peer honestly
659
- serves.** A background thread probes the declared peer's own `GET
660
- /v1/models` (with the pairwise key, when declared) and lists the proxied id
661
- on *this* box's `/v1/models` only when the peer's own response actually
662
- lists it — issue #92 ("advertised implies reachable") extended across a box
663
- boundary. `GET /capabilities` mirrors this: a proxied role reports
664
- `"proxied": true` alongside `"hosted_by": "<peer origin>"`, and its `ready`
665
- reflects the same live peer-probe verdict, never a hardcoded `true`. See
695
+ serves.** A background thread probes the declared peer and lists the proxied
696
+ id on *this* box's `/v1/models` only when the peer honestly serves it —
697
+ issue #92 ("advertised implies reachable") extended across a box boundary. `GET
698
+ /capabilities` mirrors this: a proxied role reports `"proxied": true`
699
+ alongside `"hosted_by": "<peer origin>"`, and its `ready` reflects the live
700
+ peer-probe verdict, never a hardcoded `true`. See
666
701
  [`docs/colleague-stack.md`](colleague-stack.md#a-third-role-state-proxied)
667
702
  for the role-contract view.
668
703
 
704
+ **The advert is the PEER's, not a local guess (issue #220).** That background
705
+ probe reads the peer's own `GET /capabilities` and relays the role entry's
706
+ `ready` **and** `context`. Both halves fix a measured lie. On the DGX Spark,
707
+ 2026-08-27, `associate` advertised `ready:false, context:1048576` against an
708
+ Orin reporting `ready:true, context:128000` and serving the seat in 0.6 s:
709
+
710
+ - *`ready`* — the probe used to require the peer's `/v1/models` to list the
711
+ id this box forwards. That is unsatisfiable whenever the box forwards an
712
+ **alias** rather than a raw checkpoint id, which `associate` must do (see
713
+ below). The `/v1/models` check is **kept as a fallback** for a peer with no
714
+ `/capabilities` entry for the role — an older lobes gateway, or a bare vLLM
715
+ someone pointed a peer origin at — so no working deployment loses its
716
+ signal.
717
+ - *`context`* — a role this box does not host has no
718
+ `<PREFIX>_MAX_MODEL_LEN` in this box's `.env`, so the local computation fell
719
+ through to the **catalog's native ceiling**: the checkpoint's maximum, not
720
+ the window the peer chose to serve. A peer that reports no usable context
721
+ leaves the local answer exactly as it was.
722
+
723
+ Only a role in the peer-proxy set reads this channel; a role this box hosts
724
+ always computes its own context from its own `.env`.
725
+
726
+ **Address a proxied role by its ROLE NAME.** `model=<role>` — `associate`,
727
+ `senses`, `worker` — is the supported way to reach a proxied lane, and for
728
+ some lanes it is the *only* one. Two lanes can share a checkpoint (`worker`
729
+ and `associate` both serve
730
+ `nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4`, one checkpoint with two
731
+ public addresses of different authority), so the **raw model id is ambiguous**:
732
+ it resolves to whichever backend this box wires locally, which on a box that
733
+ hosts `worker` and proxies `associate` is the local `worker` — the proxied
734
+ role then 404s `role_infeasible` for the raw id and for the other role's name,
735
+ while `model=associate` routes correctly. This is why such a lane declares
736
+ `ASSOCIATE_SERVED_NAME=associate` (forwarding the alias, not the checkpoint
737
+ id), and in turn why the `/v1/models` readiness check above could never
738
+ succeed for it. Role-name addressing is the documented contract
739
+ ([`docs/colleague-stack.md`](colleague-stack.md)); a raw checkpoint id is a
740
+ convenience that only survives while it is unambiguous.
741
+
669
742
  **Default off, byte-identical.** With no `<PREFIX>_PEER_PROXY` set anywhere —
670
743
  every deployment that predates this feature, and every referral-only
671
744
  deployment today — this branch never fires: every response stays
@@ -45,8 +45,10 @@ two-part change (see
45
45
  [`docs/gateway-fleet.md` → Adding a fallback](gateway-fleet.md#adding-a-fallback)):
46
46
 
47
47
  1. **Add a `vllm-fallback` service** to the fleet `docker-compose.yml` (mirror
48
- `vllm-primary`) that serves Mistral with its own knobs, and add it to the
49
- `gateway` service's `depends_on`:
48
+ `vllm-primary`) that serves Mistral with its own knobs. Do **not** add it to
49
+ the `gateway` service's `depends_on` — the gateway deliberately declares
50
+ none (issue #222): `docker compose up -d gateway` walks `depends_on`, so an
51
+ edge there turns every gateway restart into a fleet-wide one.
50
52
 
51
53
  ```yaml
52
54
  command:
@@ -24,6 +24,15 @@ request's `model` field. Clients point at the same URL either way.
24
24
  | `/capabilities` | GET | gateway | the nine-role Colleague contract (`cortex`/`senses`/`muse`/`worker`/`embedder`/`reranker`/`stt`/`tts`) resolved to live endpoint + metadata — non-OpenAI, lobes-native |
25
25
  | `/health` | GET | gateway | liveness |
26
26
 
27
+ **Unlisted POST paths pass through.** The POST router is path-agnostic: it
28
+ resolves the model from the request body and forwards the *original* path to
29
+ that model's owning lane. So a vLLM-native route the table above does not
30
+ list — `/tokenize` is the one seen in practice — reaches the backend and works,
31
+ rather than 404ing. It is a passthrough, not a contract: nothing here promises
32
+ it, the fleet's non-vLLM lanes need not serve it, and it is subject to the same
33
+ inbound bearer gate as everything else (which is how issue #228's 1190
34
+ unauthenticated `POST /tokenize` rejections came about).
35
+
27
36
  Embeddings, rerank, score, and audio (including the `/v1/realtime` WebSocket
28
37
  session) require the **fleet overlay** — they are not available when running
29
38
  the raw vLLM container in single-model mode. The generate endpoints
@@ -146,6 +155,31 @@ tool-parser plugin this pairs with.
146
155
  `"stream": true` requests are relayed chunk-by-chunk with per-chunk flushing.
147
156
  Normal (non-streaming) responses are buffered with `Content-Length`.
148
157
 
158
+ **A streamed response always ends (issue #220).** Once the relay has started,
159
+ exactly one of three things happens, and the client can tell them apart:
160
+
161
+ | What happened | What the client receives |
162
+ |---|---|
163
+ | the backend finished | its own bytes (ending `data: [DONE]`), then the zero-length chunk that closes chunked framing |
164
+ | the backend died mid-stream | an SSE **error event** (`{"error": {"type": "upstream_error", …}}`), then `data: [DONE]`, then the terminator — and the connection is closed rather than kept alive |
165
+ | the client hung up | nothing (there is nowhere to write); the gateway logs the upstream status and attempt chain, and stops draining the backend |
166
+
167
+ Both frames are sent on the failure path deliberately: a caller that parses
168
+ error events learns *why*, and a caller that only watches for the `[DONE]`
169
+ sentinel still terminates.
170
+
171
+ Before #220 the failure paths sent **neither** — an exception unwound out of
172
+ the relay having written no terminal frame at all, leaving the client blocked
173
+ on a still-ESTABLISHED socket with no way to distinguish a dead upstream from
174
+ a slow one. Measured on the DGX Spark 2026-08-27/28: 5 of 15 streamed runs sat
175
+ 17–24 minutes against a vLLM reporting `num_requests_running 0` and a GPU at
176
+ 3–7 %, until cut by hand. A client-side stream-lifetime timeout is still worth
177
+ having (it bounds far more than this one failure), but it is no longer the
178
+ only thing that ends a dead stream.
179
+
180
+ The error event is generated by the gateway, and is never the upstream's own
181
+ error payload — by the time it fires the upstream has stopped producing bytes.
182
+
149
183
  ### Audio fan-out
150
184
 
151
185
  `/v1/audio/*` requests are forwarded by the gateway to the **realtime bridge**