@pennyfarthing/core 10.2.0 → 10.3.0

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 (268) hide show
  1. package/README.md +11 -8
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/commands/e2e-fresh-install.test.js +1 -1
  4. package/packages/core/dist/cli/commands/e2e-fresh-install.test.js.map +1 -1
  5. package/packages/core/dist/cli/commands/e2e-upgrade.test.js +1 -1
  6. package/packages/core/dist/cli/commands/e2e-upgrade.test.js.map +1 -1
  7. package/packages/core/dist/cli/commands/theme.js +1 -1
  8. package/packages/core/dist/cli/commands/theme.js.map +1 -1
  9. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
  10. package/packages/core/dist/cli/utils/themes.js +3 -2
  11. package/packages/core/dist/cli/utils/themes.js.map +1 -1
  12. package/packages/core/dist/scripts/add-ocean-profiles.js +1 -1
  13. package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -1
  14. package/packages/core/dist/scripts/generate-all-spiders.js +2 -0
  15. package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -1
  16. package/packages/core/dist/scripts/generate-report.d.ts.map +1 -1
  17. package/packages/core/dist/scripts/generate-report.js +2 -0
  18. package/packages/core/dist/scripts/generate-report.js.map +1 -1
  19. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
  20. package/packages/core/dist/scripts/generate-spider.js +2 -0
  21. package/packages/core/dist/scripts/generate-spider.js.map +1 -1
  22. package/packages/core/dist/scripts/validate-ocean-profiles.js +1 -1
  23. package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -1
  24. package/packages/core/dist/workflow/file-watch.test.js.map +1 -1
  25. package/packages/core/dist/workflow/output-path-normalizer.d.ts +47 -0
  26. package/packages/core/dist/workflow/output-path-normalizer.d.ts.map +1 -0
  27. package/packages/core/dist/workflow/output-path-normalizer.js +79 -0
  28. package/packages/core/dist/workflow/output-path-normalizer.js.map +1 -0
  29. package/packages/core/dist/workflow/output-path-normalizer.test.d.ts +16 -0
  30. package/packages/core/dist/workflow/output-path-normalizer.test.d.ts.map +1 -0
  31. package/packages/core/dist/workflow/output-path-normalizer.test.js +157 -0
  32. package/packages/core/dist/workflow/output-path-normalizer.test.js.map +1 -0
  33. package/packages/core/dist/workflow/tool-watch.test.js +1 -2
  34. package/packages/core/dist/workflow/tool-watch.test.js.map +1 -1
  35. package/packages/core/dist/workflow/variable-resolver.js +1 -1
  36. package/packages/core/dist/workflow/variable-resolver.js.map +1 -1
  37. package/pennyfarthing-dist/agents/README.md +3 -1
  38. package/pennyfarthing-dist/agents/ba.md +165 -0
  39. package/pennyfarthing-dist/commands/ba.md +17 -0
  40. package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
  41. package/pennyfarthing-dist/personas/themes/a-team.yaml +30 -0
  42. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +30 -0
  43. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +30 -0
  44. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +30 -0
  45. package/pennyfarthing-dist/personas/themes/catch-22.yaml +30 -0
  46. package/pennyfarthing-dist/personas/themes/control.yaml +30 -0
  47. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +31 -0
  48. package/pennyfarthing-dist/personas/themes/discworld.yaml +31 -0
  49. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +31 -0
  50. package/pennyfarthing-dist/personas/themes/dune.yaml +32 -0
  51. package/pennyfarthing-dist/personas/themes/fifth-element.yaml +32 -0
  52. package/pennyfarthing-dist/personas/themes/firefly.yaml +31 -0
  53. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +30 -0
  54. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +30 -0
  55. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +30 -0
  56. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +30 -0
  57. package/pennyfarthing-dist/personas/themes/mad-max.yaml +30 -0
  58. package/pennyfarthing-dist/personas/themes/mash.yaml +33 -0
  59. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +34 -0
  60. package/pennyfarthing-dist/personas/themes/sandman.yaml +33 -0
  61. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +34 -0
  62. package/pennyfarthing-dist/personas/themes/star-wars.yaml +33 -0
  63. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +30 -0
  64. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +30 -0
  65. package/pennyfarthing-dist/personas/themes/watchmen.yaml +30 -0
  66. package/pennyfarthing-dist/personas/themes/west-wing.yaml +30 -0
  67. package/pennyfarthing-dist/personas/themes/x-files.yaml +30 -0
  68. package/pennyfarthing-dist/scripts/core/agent-session.sh +1 -1
  69. package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
  70. package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +2 -2
  71. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +1 -0
  72. package/pennyfarthing-dist/skills/theme/skill.md +1 -1
  73. package/pennyfarthing-dist/workflows/architecture/workflow.yaml +2 -2
  74. package/pennyfarthing-dist/workflows/architecture.yaml +2 -2
  75. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +2 -2
  76. package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +2 -2
  77. package/pennyfarthing-dist/workflows/prd/workflow.yaml +2 -2
  78. package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +2 -2
  79. package/pennyfarthing-dist/workflows/project-context/workflow.yaml +2 -2
  80. package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +2 -2
  81. package/pennyfarthing-dist/workflows/research/workflow.yaml +2 -2
  82. package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +1 -1
  83. package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +3 -3
  84. package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +2 -2
  85. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  86. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  87. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  88. package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
  89. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  90. package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
  91. package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  92. package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  93. package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
  94. package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  95. package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
  96. package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
  97. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  98. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  99. package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
  100. package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
  101. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  102. package/pennyfarthing_scripts/bellmode_hook.py +1 -1
  103. package/pennyfarthing_scripts/bikerack/__init__.py +36 -0
  104. package/pennyfarthing_scripts/bikerack/__main__.py +5 -0
  105. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  106. package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  107. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  108. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  109. package/pennyfarthing_scripts/bikerack/cli.py +148 -0
  110. package/pennyfarthing_scripts/bikerack/launcher.py +181 -0
  111. package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  112. package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  113. package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  114. package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  115. package/pennyfarthing_scripts/cli.py +5 -0
  116. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  117. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  118. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  119. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  120. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  121. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  122. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
  123. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  124. package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
  125. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  126. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  127. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  128. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  129. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  130. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  131. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  132. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  133. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  134. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  135. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  136. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  137. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  138. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  139. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  140. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  141. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  142. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  143. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  144. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  145. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  146. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  147. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  148. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  149. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  150. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  151. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  152. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  153. package/pennyfarthing_scripts/healthscore/analyze.py +2 -1
  154. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  155. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  156. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  157. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  158. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  159. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  160. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  161. package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  162. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  163. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
  164. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  165. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  166. package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
  167. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  168. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
  169. package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
  170. package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
  171. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  172. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
  179. package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
  180. package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
  181. package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
  182. package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  183. package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  184. package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  186. package/pennyfarthing_scripts/prime/__init__.py +2 -0
  187. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  188. package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
  191. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  192. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  193. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  194. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/prime/cli.py +13 -0
  197. package/pennyfarthing_scripts/prime/loader.py +70 -0
  198. package/pennyfarthing_scripts/prime/persona.py +2 -1
  199. package/pennyfarthing_scripts/prime/tiers.py +13 -0
  200. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  201. package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  202. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  210. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  211. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  212. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  213. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  214. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  215. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  216. package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
  217. package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
  218. package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
  221. package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
  222. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  224. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  225. package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  226. package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  227. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  228. package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  229. package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  230. package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  231. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  232. package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  233. package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  234. package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  235. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  236. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  237. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  238. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  239. package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  240. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  241. package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  242. package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  243. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  244. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  245. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  246. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  247. package/pennyfarthing_scripts/tests/test_bikerack.py +785 -0
  248. package/pennyfarthing_scripts/tests/test_topology_loader.py +620 -0
  249. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  259. package/pennyfarthing_scripts/validate/adapters/skill_command.py +0 -1
  260. package/packages/core/dist/workflow/context-watch.d.ts +0 -80
  261. package/packages/core/dist/workflow/context-watch.d.ts.map +0 -1
  262. package/packages/core/dist/workflow/context-watch.js +0 -235
  263. package/packages/core/dist/workflow/context-watch.js.map +0 -1
  264. package/packages/core/dist/workflow/context-watch.test.d.ts +0 -1
  265. package/packages/core/dist/workflow/context-watch.test.d.ts.map +0 -1
  266. package/packages/core/dist/workflow/context-watch.test.js +0 -746
  267. package/packages/core/dist/workflow/context-watch.test.js.map +0 -1
  268. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
@@ -236,3 +236,73 @@ def load_domain_docs(project_root: Path | None = None) -> list[tuple[str, str]]:
236
236
  docs.append((doc_file.name, doc_file.read_text()))
237
237
 
238
238
  return docs
239
+
240
+
241
+ def load_repos_topology(project_root: Path | None = None) -> str | None:
242
+ """Load repos.yaml topology as formatted context for agents.
243
+
244
+ Reads .pennyfarthing/repos.yaml and formats the topology fields
245
+ (owns, never_edit, symlinks, ui_layer, components_path) as a
246
+ readable manifest for agent spatial awareness.
247
+
248
+ Args:
249
+ project_root: Project root path (auto-detected if not provided)
250
+
251
+ Returns:
252
+ Formatted topology context string, or None if unavailable
253
+ """
254
+ import yaml
255
+
256
+ root = project_root or get_project_root()
257
+ repos_file = root / ".pennyfarthing" / "repos.yaml"
258
+
259
+ if not repos_file.exists():
260
+ return None
261
+
262
+ try:
263
+ data = yaml.safe_load(repos_file.read_text())
264
+ except Exception:
265
+ return None
266
+
267
+ if not isinstance(data, dict) or "repos" not in data:
268
+ return None
269
+
270
+ repos = data["repos"]
271
+ if not repos:
272
+ return None
273
+
274
+ lines: list[str] = []
275
+ for name, config in repos.items():
276
+ lines.append(f"## {name}")
277
+ if config.get("path"):
278
+ lines.append(f"Path: {config['path']}")
279
+ if config.get("type"):
280
+ lines.append(f"Type: {config['type']}")
281
+ if config.get("description"):
282
+ lines.append(f"Description: {config['description']}")
283
+
284
+ owns = config.get("owns", [])
285
+ if owns:
286
+ lines.append(f"Owns: {', '.join(owns)}")
287
+
288
+ never_edit = config.get("never_edit", [])
289
+ if never_edit:
290
+ lines.append(f"Never Edit: {', '.join(never_edit)}")
291
+
292
+ symlinks = config.get("symlinks", {})
293
+ if symlinks:
294
+ lines.append("Symlinks:")
295
+ for src, dest in symlinks.items():
296
+ lines.append(f" {src} → {dest}")
297
+
298
+ ui_layer = config.get("ui_layer")
299
+ if ui_layer:
300
+ lines.append(f"UI Layer: {ui_layer}")
301
+
302
+ components_path = config.get("components_path")
303
+ if components_path:
304
+ lines.append(f"Components: {components_path}")
305
+
306
+ lines.append("")
307
+
308
+ return "\n".join(lines).strip() if lines else None
@@ -24,6 +24,7 @@ from pennyfarthing_scripts.prime.models import CrewMember, Persona
24
24
  AGENT_ROLES = [
25
25
  "sm", "tea", "dev", "reviewer", "architect",
26
26
  "pm", "tech-writer", "ux-designer", "devops", "orchestrator",
27
+ "ba",
27
28
  ]
28
29
 
29
30
 
@@ -129,7 +130,7 @@ def get_crew_manifest(project_root: Path | None = None) -> list[CrewMember]:
129
130
  project_root: Project root path (auto-detected if not provided)
130
131
 
131
132
  Returns:
132
- List of CrewMember objects for all 10 standard roles
133
+ List of CrewMember objects for all 11 standard roles
133
134
  """
134
135
  root = project_root or get_project_root()
135
136
  theme = get_current_theme(root)
@@ -38,6 +38,7 @@ def estimate_tokens(text: str) -> int:
38
38
  from pennyfarthing_scripts.prime.loader import ( # noqa: E402
39
39
  load_agent_definition,
40
40
  load_behavior_guide,
41
+ load_repos_topology,
41
42
  load_session_context,
42
43
  load_sidecars,
43
44
  load_sprint_context,
@@ -134,6 +135,10 @@ def load_tier_components(
134
135
  if sprint_content:
135
136
  add_component("sprint_context", sprint_content)
136
137
 
138
+ topology_content = load_repos_topology(project_root)
139
+ if topology_content:
140
+ add_component("repos_topology", topology_content)
141
+
137
142
  session_result = load_session_context(project_root)
138
143
  if session_result:
139
144
  filename, header, _ = session_result
@@ -156,6 +161,10 @@ def load_tier_components(
156
161
  compressed = format_persona_compressed(persona, theme, agent_name)
157
162
  add_component("persona_compressed", compressed)
158
163
 
164
+ topology_content = load_repos_topology(project_root)
165
+ if topology_content:
166
+ add_component("repos_topology", topology_content)
167
+
159
168
  components["token_counts"] = token_counts
160
169
  components["total_tokens"] = sum(token_counts.values())
161
170
  return components
@@ -185,6 +194,10 @@ def load_tier_components(
185
194
  if sprint_content:
186
195
  add_component("sprint_context", sprint_content)
187
196
 
197
+ topology_content = load_repos_topology(project_root)
198
+ if topology_content:
199
+ add_component("repos_topology", topology_content)
200
+
188
201
  session_result = load_session_context(project_root)
189
202
  if session_result:
190
203
  filename, header, assessment = session_result