orbi-cli 0.6.2__tar.gz → 0.6.3__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 (154) hide show
  1. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/PKG-INFO +1 -1
  2. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/pyproject.toml +1 -1
  3. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/__init__.py +1 -1
  4. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/pi_process.py +4 -0
  5. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi_cli.egg-info/PKG-INFO +1 -1
  6. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_bootstrap_runner.py +34 -0
  7. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/LICENSE +0 -0
  8. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/README.md +0 -0
  9. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/docs/licenses/sustainable-use-license.md +0 -0
  10. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/setup.cfg +0 -0
  11. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/branch_reclaim.py +0 -0
  12. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/checks.py +0 -0
  13. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/claim.py +0 -0
  14. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/clarify.py +0 -0
  15. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/cli.py +0 -0
  16. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/cli_source.py +0 -0
  17. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/config.py +0 -0
  18. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/delivery_labels.py +0 -0
  19. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/delivery_scene.py +0 -0
  20. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/engine_source.py +0 -0
  21. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/example_config.toml +0 -0
  22. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/failure.py +0 -0
  23. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/failure_report.py +0 -0
  24. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/git_identity.py +0 -0
  25. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/git_transport.py +0 -0
  26. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/github.py +0 -0
  27. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/gitops.py +0 -0
  28. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/human_review.py +0 -0
  29. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/journal.py +0 -0
  30. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/launchd_deploy.py +0 -0
  31. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/merge_gate.py +0 -0
  32. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/merge_handoff.py +0 -0
  33. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/milestone.py +0 -0
  34. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/milestone_command.py +0 -0
  35. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/pi_activity.py +0 -0
  36. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/pi_command.py +0 -0
  37. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/pi_recovery.py +0 -0
  38. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/pi_session.py +0 -0
  39. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/pilot_setup.py +0 -0
  40. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/pilot_slots.py +0 -0
  41. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/progress.py +0 -0
  42. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/release.py +0 -0
  43. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/release_git.py +0 -0
  44. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/release_notes.py +0 -0
  45. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/repo_config.py +0 -0
  46. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/runner.py +0 -0
  47. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/runner_health.py +0 -0
  48. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/scene.py +0 -0
  49. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/scheduler.py +0 -0
  50. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/scheduler_units.py +0 -0
  51. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/source_pool.py +0 -0
  52. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/systemd_deploy.py +0 -0
  53. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi/ticket_command.py +0 -0
  54. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi_cli.egg-info/SOURCES.txt +0 -0
  55. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi_cli.egg-info/dependency_links.txt +0 -0
  56. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi_cli.egg-info/entry_points.txt +0 -0
  57. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/src/orbi_cli.egg-info/top_level.txt +0 -0
  58. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_agents_md.py +0 -0
  59. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_apply_label_patch.py +0 -0
  60. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_branch_reclaim.py +0 -0
  61. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_ci_failure_issue_workflow.py +0 -0
  62. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_ci_failure_triage.py +0 -0
  63. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_ci_macos_workflow.py +0 -0
  64. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_ci_workflow.py +0 -0
  65. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_clarify.py +0 -0
  66. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_claude_plugin.py +0 -0
  67. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_cli_install.py +0 -0
  68. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_cli_milestone.py +0 -0
  69. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_cli_packaging.py +0 -0
  70. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_cli_source.py +0 -0
  71. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_comment_readers_contract.py +0 -0
  72. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_concurrency_e2e.py +0 -0
  73. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_constitution.py +0 -0
  74. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_coverage_gate.py +0 -0
  75. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_deliver_pr_fakes.py +0 -0
  76. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_delivery_branch_delete.py +0 -0
  77. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_delivery_labels.py +0 -0
  78. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_delivery_scene.py +0 -0
  79. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docker_docs.py +0 -0
  80. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docker_entrypoint.py +0 -0
  81. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docker_image_workflow.py +0 -0
  82. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docs_i18n.py +0 -0
  83. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docs_issue_shapes.py +0 -0
  84. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docs_labels.py +0 -0
  85. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docs_mermaid.py +0 -0
  86. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docs_releases.py +0 -0
  87. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docs_single_source.py +0 -0
  88. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_docs_site.py +0 -0
  89. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_engine_source.py +0 -0
  90. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_failure.py +0 -0
  91. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_failure_report.py +0 -0
  92. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_fix_needed_loop.py +0 -0
  93. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_gh_read_retry.py +0 -0
  94. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_git_base_smoke.py +0 -0
  95. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_git_merge_smoke.py +0 -0
  96. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_git_network_retry.py +0 -0
  97. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_git_transport.py +0 -0
  98. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_github.py +0 -0
  99. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_github_fakes.py +0 -0
  100. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_gitops.py +0 -0
  101. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_gitops_fakes.py +0 -0
  102. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_human_review.py +0 -0
  103. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_import_graph.py +0 -0
  104. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_install_sh.py +0 -0
  105. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_issue_1367.py +0 -0
  106. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_issue_461.py +0 -0
  107. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_issue_template_config.py +0 -0
  108. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_journal.py +0 -0
  109. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_journal_events.py +0 -0
  110. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_launchd_deploy.py +0 -0
  111. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_license.py +0 -0
  112. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_milestone_command.py +0 -0
  113. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_ops_e2e.py +0 -0
  114. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_orbi.py +0 -0
  115. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_orbi_dashboard.py +0 -0
  116. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_orbi_exporter.py +0 -0
  117. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_patch_ratchet.py +0 -0
  118. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pi_activity.py +0 -0
  119. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pi_command.py +0 -0
  120. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pi_extensions.py +0 -0
  121. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pi_provider_templates.py +0 -0
  122. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pi_recovery.py +0 -0
  123. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pi_session.py +0 -0
  124. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pilot_setup.py +0 -0
  125. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pilot_slots.py +0 -0
  126. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_pr_issue_link_workflow.py +0 -0
  127. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_prerequisite_check.py +0 -0
  128. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_progress.py +0 -0
  129. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_progress_wiring.py +0 -0
  130. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_prompt_contract.py +0 -0
  131. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_publish_workflow.py +0 -0
  132. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_release_docs_workflow.py +0 -0
  133. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_release_ticket_templates.py +0 -0
  134. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_repo_config.py +0 -0
  135. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_resume_continue_e2e.py +0 -0
  136. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_resume_e2e.py +0 -0
  137. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_resume_pr.py +0 -0
  138. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_review_merge.py +0 -0
  139. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_run_artifacts.py +0 -0
  140. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_run_id_e2e.py +0 -0
  141. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_runner_config.py +0 -0
  142. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_runner_health.py +0 -0
  143. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_runner_source_freshness.py +0 -0
  144. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_scene.py +0 -0
  145. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_scheduler.py +0 -0
  146. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_size_ratchet.py +0 -0
  147. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_src_layout.py +0 -0
  148. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_steering_review.py +0 -0
  149. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_suite_hygiene.py +0 -0
  150. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_systemd_deploy.py +0 -0
  151. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_systemd_timer.py +0 -0
  152. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_ticket_command.py +0 -0
  153. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_user_acceptance_contract.py +0 -0
  154. {orbi_cli-0.6.2 → orbi_cli-0.6.3}/tests/test_worktree_reclaim.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orbi-cli
3
- Version: 0.6.2
3
+ Version: 0.6.3
4
4
  Summary: Orbi — local AI development worker: claims GitHub Issues, runs Pi in isolated worktrees, and delivers PRs (GitHub Issues + labels are the only state store).
5
5
  Author: xqliu
6
6
  License-Expression: AGPL-3.0-only OR LicenseRef-Sustainable-Use-1.0
@@ -44,7 +44,7 @@ build-backend = "setuptools.build_meta"
44
44
 
45
45
  [project]
46
46
  name = "orbi-cli"
47
- version = "0.6.2"
47
+ version = "0.6.3"
48
48
  description = "Orbi — local AI development worker: claims GitHub Issues, runs Pi in isolated worktrees, and delivers PRs (GitHub Issues + labels are the only state store)."
49
49
  readme = "README.md"
50
50
  requires-python = ">=3.14"
@@ -18,4 +18,4 @@ the package would shadow the installed package for every process with
18
18
  the checkout root on sys.path. The direct-execution compatibility entry
19
19
  is `python3 -m orbi.cli` (development path only).
20
20
  """
21
- __version__ = "0.6.2"
21
+ __version__ = "0.6.3"
@@ -1258,6 +1258,10 @@ def _stream_pi_once(
1258
1258
  # inherits the Runner's environment unchanged (pre-#157 shape).
1259
1259
  process = subprocess.Popen(
1260
1260
  command, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
1261
+ # Pi's print mode reads piped stdin until it closes and prepends
1262
+ # it to the prompt (Issue #1562): the child must get /dev/null,
1263
+ # never the Runner's possibly-open stdin pipe.
1264
+ stdin=subprocess.DEVNULL,
1261
1265
  env=None if pi_env is None else {**os.environ, **pi_env},
1262
1266
  )
1263
1267
  # Track the live Pi child for the stop handler: a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orbi-cli
3
- Version: 0.6.2
3
+ Version: 0.6.3
4
4
  Summary: Orbi — local AI development worker: claims GitHub Issues, runs Pi in isolated worktrees, and delivers PRs (GitHub Issues + labels are the only state store).
5
5
  Author: xqliu
6
6
  License-Expression: AGPL-3.0-only OR LicenseRef-Sustainable-Use-1.0
@@ -9752,6 +9752,40 @@ def test_stream_pi_drains_pipe_data_written_after_exit(
9752
9752
  assert "stderr=late stderr data" in caplog.text
9753
9753
 
9754
9754
 
9755
+ def test_stream_pi_spawns_pi_with_stdin_devnull(
9756
+ monkeypatch, tmp_path,
9757
+ ):
9758
+ """Issue #1562: the Pi child must never inherit the Runner's stdin.
9759
+
9760
+ Pi's print/JSON mode reads piped stdin until it closes and prepends it
9761
+ to the prompt; started from an open pipe (ssh host orbi without -t,
9762
+ a shell pipeline into orbi, a wrapper that forgets stdin) an inherited
9763
+ stdin makes the session wait forever with no output, no error and no
9764
+ model request. The session Popen therefore has to pass
9765
+ stdin=subprocess.DEVNULL."""
9766
+ command = make_fake_pi(
9767
+ tmp_path, session_records=fake_session_records(),
9768
+ stdout="final answer",
9769
+ )
9770
+ captured: list[dict] = []
9771
+ real_popen = subprocess.Popen
9772
+
9773
+ def recording_popen(*args, **kwargs):
9774
+ captured.append(kwargs)
9775
+ return real_popen(*args, **kwargs)
9776
+
9777
+ monkeypatch.setattr(pi_process.subprocess, "Popen", recording_popen)
9778
+ result = pi_session.stream_pi(
9779
+ command,
9780
+ ctx=RunContext(run_id="deadbeef", issue=1562, branch="b",
9781
+ worktree=tmp_path, source_repo="xqliu/orbi"),
9782
+ watch=PiWatchOptions(poll_interval=0.1), cwd=tmp_path,
9783
+ )
9784
+ assert result == "final answer"
9785
+ assert captured, "stream_pi must start the Pi session through Popen"
9786
+ assert captured[0]["stdin"] is subprocess.DEVNULL
9787
+
9788
+
9755
9789
  def test_stream_pi_hung_model_request_killed_when_upstream_gone(
9756
9790
  tmp_path, caplog,
9757
9791
  ):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes