borisxdave 0.3.1__py3-none-any.whl → 0.3.3__py3-none-any.whl

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.
boris.py CHANGED
@@ -973,17 +973,20 @@ def main():
973
973
  print_banner()
974
974
  logger.info("Starting Boris for task: %s", args.task[:200])
975
975
 
976
- # Create plan (retry once on timeout)
976
+ # Create plan (retry on transient errors: timeouts and API 500s)
977
977
  print("[Boris] Creating plan...", flush=True)
978
978
  plan = None
979
- for attempt in range(2):
979
+ max_plan_attempts = 3
980
+ for attempt in range(max_plan_attempts):
980
981
  try:
981
982
  plan = prompts.create_plan(args.task, project_dir, turbo=args.turbo)
982
983
  break
983
984
  except RuntimeError as e:
984
- if attempt == 0 and "timed out" in str(e).lower():
985
- print(f" [Boris] Plan generation timed out. Retrying...", flush=True)
986
- logger.warning("Plan timed out, retrying (attempt %d)", attempt + 2)
985
+ err_msg = str(e).lower()
986
+ is_retryable = "timed out" in err_msg or "500" in err_msg or "internal server error" in err_msg
987
+ if attempt < max_plan_attempts - 1 and is_retryable:
988
+ print(f" [Boris] Plan generation failed (transient error). Retrying ({attempt + 2}/{max_plan_attempts})...", flush=True)
989
+ logger.warning("Plan failed (transient), retrying (attempt %d): %s", attempt + 2, e)
987
990
  else:
988
991
  print(f"[Boris] Error creating plan: {e}", flush=True)
989
992
  logger.error("Plan creation failed: %s", e)
@@ -1,4 +1,6 @@
1
- # Boris - Project Manager Orchestrator
1
+ """Boris prompt embedded as a Python string for reliable pip installation."""
2
+
3
+ BORIS_PROMPT = r"""# Boris - Project Manager Orchestrator
2
4
 
3
5
  Boris is a **project manager**, He plans, delegates, and verifies. DaveLoop is the builder.
4
6
 
@@ -10,7 +12,7 @@ Boris is a **project manager**, He plans, delegates, and verifies. DaveLoop is t
10
12
  2. **Craft** - Write precise, context-rich prompts for each milestone
11
13
  3. **Delegate** - Spawn DaveLoop with the crafted prompt
12
14
  4. **Verify** - Check DaveLoop's output against acceptance criteria
13
- 5. **Manage Git** - init git add and stage then commit when user request fully built
15
+ 5. **Manage Git** - init git add and stage then commit when user request fully built
14
16
  6. **Repeat** - Move to next milestone until project is done
15
17
 
16
18
  ---
@@ -189,3 +191,4 @@ Boris is methodical, relentless, and focused:
189
191
  - He does not get stuck. He moves forward.
190
192
  - He trusts DaveLoop to build. He verifies the results.
191
193
  - He keeps perfect records (state, logs, plan markdown, summary report).
194
+ """
@@ -1,6 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: borisxdave
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Boris - Autonomous Project Orchestrator
5
5
  Requires-Python: >=3.8
6
-
6
+ Dynamic: requires-python
7
+ Dynamic: summary
@@ -0,0 +1,14 @@
1
+ boris.py,sha256=W5k3eNJzhHSKIAtzvwmTYHX7PBCaxxLwRzdAize6Xy8,63235
2
+ boris_prompt_data.py,sha256=ZBvWMrQOBrl07cNFzgeGumJ54cYg0Be9RSSnK6a3YQY,7940
3
+ config.py,sha256=KfFKyCGasdm1yBvIRFv-ykzA_oRo-zu1Euu9YC7V1Cg,324
4
+ engine.py,sha256=Pdu0i4XrNxiU246EV8MjXvYp9CBvuJWGLA18QMIYvFM,37468
5
+ file_lock.py,sha256=1YriAAayVy8YFe7JFuGIloiJWWvN2FSY0Ry1sB043Sc,4823
6
+ git_manager.py,sha256=BuuTT4naPb5-jLhOik1xHM2ztzuKvJ_bnecZmlYgwFs,8493
7
+ planner.py,sha256=UrU--kBvzvyD1gOVxIn-kdbJiu8tt4rcowsln66WkGw,5670
8
+ prompts.py,sha256=-eSwZ-oTBR12Wx4Md57sVF816T9vHEFlMsvT4zMkwOg,35187
9
+ state.py,sha256=2DCPlcM7SBlCkwWvcnIabltcduv74W46FZ7DxKurWkw,5752
10
+ borisxdave-0.3.3.dist-info/METADATA,sha256=Awy6EzOF8grNKUtr8SUaQLrG0IowEIQzf6Y1tdMku0E,175
11
+ borisxdave-0.3.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
+ borisxdave-0.3.3.dist-info/entry_points.txt,sha256=a6FLWgxiQjGMJIRSV5sDxaaaaQchunm04ZuzX8N7-6I,61
13
+ borisxdave-0.3.3.dist-info/top_level.txt,sha256=C3fTm1vt0QEQyJtvSZiFiOvmR4d0hWmmr6hujJqFrQE,82
14
+ borisxdave-0.3.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.46.3)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,4 +1,5 @@
1
1
  boris
2
+ boris_prompt_data
2
3
  config
3
4
  engine
4
5
  file_lock
prompts.py CHANGED
@@ -53,6 +53,15 @@ def _load_boris_prompt() -> str:
53
53
  except (FileNotFoundError, OSError, TypeError):
54
54
  continue
55
55
 
56
+ # Fallback: use embedded prompt from boris_prompt_data.py (always available after pip install)
57
+ try:
58
+ from boris_prompt_data import BORIS_PROMPT
59
+ _boris_prompt_cache = BORIS_PROMPT.strip()
60
+ logger.debug("Loaded Boris prompt from embedded boris_prompt_data.py (%d chars)", len(_boris_prompt_cache))
61
+ return _boris_prompt_cache
62
+ except ImportError:
63
+ pass
64
+
56
65
  logger.warning("boris_prompt.md not found in any search path: %s", search_paths)
57
66
  _boris_prompt_cache = ""
58
67
  return _boris_prompt_cache
@@ -1,14 +0,0 @@
1
- boris.py,sha256=VwVjetw6Tfs397btdCDRuM_iRlPI5XSzqfalqlwSLlA,62940
2
- config.py,sha256=KfFKyCGasdm1yBvIRFv-ykzA_oRo-zu1Euu9YC7V1Cg,324
3
- engine.py,sha256=Pdu0i4XrNxiU246EV8MjXvYp9CBvuJWGLA18QMIYvFM,37468
4
- file_lock.py,sha256=1YriAAayVy8YFe7JFuGIloiJWWvN2FSY0Ry1sB043Sc,4823
5
- git_manager.py,sha256=BuuTT4naPb5-jLhOik1xHM2ztzuKvJ_bnecZmlYgwFs,8493
6
- planner.py,sha256=UrU--kBvzvyD1gOVxIn-kdbJiu8tt4rcowsln66WkGw,5670
7
- prompts.py,sha256=Sln8ukCby2gWcs_U3ru4YSXCTWI5MgkI4WB4ONLIyWk,34779
8
- state.py,sha256=2DCPlcM7SBlCkwWvcnIabltcduv74W46FZ7DxKurWkw,5752
9
- Users/david/AppData/Local/Programs/Python/Python313/Lib/site-packages/boris_prompt.md,sha256=W8bQP4c-iLLtxSsscIxbjXI2PlWTNbOrq05UGp9mLWs,7839
10
- borisxdave-0.3.1.dist-info/METADATA,sha256=1Q8uBCfA2BpHdmgK-6kwR58ESpChi2JcTsRoLbz2MoU,133
11
- borisxdave-0.3.1.dist-info/WHEEL,sha256=hPN0AlP2dZM_3ZJZWP4WooepkmU9wzjGgCLCeFjkHLA,92
12
- borisxdave-0.3.1.dist-info/entry_points.txt,sha256=a6FLWgxiQjGMJIRSV5sDxaaaaQchunm04ZuzX8N7-6I,61
13
- borisxdave-0.3.1.dist-info/top_level.txt,sha256=GSKxzJ_M15C-hpRGaC1C5pusFxA1JIaxaSHYaLg4rQc,64
14
- borisxdave-0.3.1.dist-info/RECORD,,