@pennyfarthing/core 11.4.0 → 12.0.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 (1168) hide show
  1. package/README.md +9 -9
  2. package/package.json +3 -9
  3. package/packages/core/dist/cli/commands/command.js +9 -9
  4. package/packages/core/dist/cli/commands/command.js.map +1 -1
  5. package/packages/core/dist/cli/commands/cyclist.js +1 -1
  6. package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
  7. package/packages/core/dist/cli/commands/cyclist.test.js +4 -4
  8. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
  9. package/packages/core/dist/cli/commands/doctor-legacy.test.js +2 -1
  10. package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
  11. package/packages/core/dist/cli/commands/doctor-persona-config-false-negative.test.d.ts +22 -0
  12. package/packages/core/dist/cli/commands/doctor-persona-config-false-negative.test.d.ts.map +1 -0
  13. package/packages/core/dist/cli/commands/doctor-persona-config-false-negative.test.js +161 -0
  14. package/packages/core/dist/cli/commands/doctor-persona-config-false-negative.test.js.map +1 -0
  15. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  16. package/packages/core/dist/cli/commands/doctor.js +190 -34
  17. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  18. package/packages/core/dist/cli/commands/e2e-upgrade.test.js +1 -1
  19. package/packages/core/dist/cli/commands/e2e-upgrade.test.js.map +1 -1
  20. package/packages/core/dist/cli/commands/hook-chaining.test.js +1 -1
  21. package/packages/core/dist/cli/commands/hook-chaining.test.js.map +1 -1
  22. package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
  23. package/packages/core/dist/cli/commands/init.js +47 -18
  24. package/packages/core/dist/cli/commands/init.js.map +1 -1
  25. package/packages/core/dist/cli/commands/pyproject-install.test.js +1 -1
  26. package/packages/core/dist/cli/commands/pyproject-install.test.js.map +1 -1
  27. package/packages/core/dist/cli/commands/skill.js +9 -9
  28. package/packages/core/dist/cli/commands/skill.js.map +1 -1
  29. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts +17 -0
  30. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts.map +1 -0
  31. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js +470 -0
  32. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js.map +1 -0
  33. package/packages/core/dist/cli/commands/theme.js +3 -3
  34. package/packages/core/dist/cli/commands/theme.js.map +1 -1
  35. package/packages/core/dist/cli/commands/uninstall.js +1 -1
  36. package/packages/core/dist/cli/commands/uninstall.js.map +1 -1
  37. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  38. package/packages/core/dist/cli/commands/update.js +71 -20
  39. package/packages/core/dist/cli/commands/update.js.map +1 -1
  40. package/packages/core/dist/cli/commands/version.js +1 -1
  41. package/packages/core/dist/cli/commands/version.js.map +1 -1
  42. package/packages/core/dist/cli/index.js +2 -30
  43. package/packages/core/dist/cli/index.js.map +1 -1
  44. package/packages/core/dist/cli/utils/constants.d.ts +2 -2
  45. package/packages/core/dist/cli/utils/constants.js +1 -1
  46. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  47. package/packages/core/dist/cli/utils/files.d.ts +1 -1
  48. package/packages/core/dist/cli/utils/files.js +1 -1
  49. package/packages/core/dist/cli/utils/install-helpers.d.ts +25 -0
  50. package/packages/core/dist/cli/utils/install-helpers.d.ts.map +1 -0
  51. package/packages/core/dist/cli/utils/install-helpers.js +162 -0
  52. package/packages/core/dist/cli/utils/install-helpers.js.map +1 -0
  53. package/packages/core/dist/cli/utils/node-modules.d.ts +7 -0
  54. package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -1
  55. package/packages/core/dist/cli/utils/node-modules.js +39 -0
  56. package/packages/core/dist/cli/utils/node-modules.js.map +1 -1
  57. package/packages/core/dist/cli/utils/settings.d.ts +1 -1
  58. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  59. package/packages/core/dist/cli/utils/settings.js +40 -21
  60. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  61. package/packages/core/dist/cli/utils/stale-artifacts.d.ts +59 -0
  62. package/packages/core/dist/cli/utils/stale-artifacts.d.ts.map +1 -0
  63. package/packages/core/dist/cli/utils/stale-artifacts.js +163 -0
  64. package/packages/core/dist/cli/utils/stale-artifacts.js.map +1 -0
  65. package/packages/core/dist/cli/utils/symlinks.d.ts +4 -0
  66. package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -1
  67. package/packages/core/dist/cli/utils/symlinks.js +25 -2
  68. package/packages/core/dist/cli/utils/symlinks.js.map +1 -1
  69. package/packages/core/dist/cli/workspace.test.js +4 -37
  70. package/packages/core/dist/cli/workspace.test.js.map +1 -1
  71. package/packages/core/dist/data-source.d.ts +42 -0
  72. package/packages/core/dist/data-source.d.ts.map +1 -0
  73. package/packages/core/dist/data-source.js +12 -0
  74. package/packages/core/dist/data-source.js.map +1 -0
  75. package/packages/core/dist/data-source.test.d.ts +16 -0
  76. package/packages/core/dist/data-source.test.d.ts.map +1 -0
  77. package/packages/core/dist/data-source.test.js +206 -0
  78. package/packages/core/dist/data-source.test.js.map +1 -0
  79. package/packages/core/dist/index.d.ts +1 -0
  80. package/packages/core/dist/index.d.ts.map +1 -1
  81. package/packages/core/dist/index.js.map +1 -1
  82. package/packages/core/dist/public/css/react.css +1 -1
  83. package/packages/core/dist/public/js/react/react.js +39 -39
  84. package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
  85. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
  86. package/packages/core/dist/scripts/benchmark-integration.js +691 -0
  87. package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
  88. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
  89. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
  90. package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
  91. package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
  92. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +1 -0
  93. package/packages/core/dist/scripts/theme-detail.test.js.map +1 -0
  94. package/packages/core/dist/server/api/context.d.ts.map +1 -1
  95. package/packages/core/dist/server/api/context.js +23 -5
  96. package/packages/core/dist/server/api/context.js.map +1 -1
  97. package/packages/core/dist/server/api/index.d.ts +0 -1
  98. package/packages/core/dist/server/api/index.d.ts.map +1 -1
  99. package/packages/core/dist/server/api/index.js +0 -2
  100. package/packages/core/dist/server/api/index.js.map +1 -1
  101. package/packages/core/dist/server/api/settings.d.ts.map +1 -1
  102. package/packages/core/dist/server/api/settings.js +6 -0
  103. package/packages/core/dist/server/api/settings.js.map +1 -1
  104. package/packages/core/dist/server/otlp-receiver.d.ts +2 -4
  105. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  106. package/packages/core/dist/server/otlp-receiver.js +7 -18
  107. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  108. package/packages/core/dist/server/otlp-receiver.test.js +0 -27
  109. package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
  110. package/packages/core/dist/server/server.d.ts +2 -2
  111. package/packages/core/dist/server/server.d.ts.map +1 -1
  112. package/packages/core/dist/server/server.js +20 -5
  113. package/packages/core/dist/server/server.js.map +1 -1
  114. package/packages/core/dist/server/server.test.js +1 -1
  115. package/packages/core/dist/server/server.test.js.map +1 -1
  116. package/packages/core/dist/shared/generate-skill-docs.test.js +2 -2
  117. package/packages/core/dist/shared/skill-search.test.js +2 -2
  118. package/packages/core/dist/workflow/cross-entity-validation.d.ts.map +1 -1
  119. package/packages/core/dist/workflow/cross-entity-validation.js.map +1 -1
  120. package/packages/core/dist/workflow/tandem-workflow-templates.test.js +3 -3
  121. package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -1
  122. package/packages/core/dist/workflow/workflow-migration.test.js +8 -8
  123. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
  124. package/packages/core/dist/workflow/workflow-schema.js +1 -1
  125. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  126. package/packages/core/src/public/App.tsx +1 -4
  127. package/packages/core/src/public/components/DockviewWorkspace.tsx +0 -4
  128. package/packages/core/src/public/components/panels/SettingsPanel.tsx +83 -283
  129. package/packages/core/src/public/components/panels/SprintPanel.tsx +11 -1
  130. package/packages/core/src/public/components/panels/index.ts +0 -1
  131. package/packages/core/src/public/data-source.ts +117 -0
  132. package/packages/core/src/public/hooks/index.ts +0 -3
  133. package/packages/core/src/public/hooks/useAgentLoad.ts +1 -0
  134. package/packages/core/src/public/hooks/useCodeMarkers.ts +1 -0
  135. package/packages/core/src/public/hooks/useComplexity.ts +1 -0
  136. package/packages/core/src/public/hooks/useDataSource.ts +273 -0
  137. package/packages/core/src/public/hooks/useDeadCode.ts +1 -0
  138. package/packages/core/src/public/hooks/useDependencies.ts +1 -0
  139. package/packages/core/src/public/hooks/useDiffs.ts +46 -91
  140. package/packages/core/src/public/hooks/useGitStatus.ts +16 -77
  141. package/packages/core/src/public/hooks/useHealthScore.ts +1 -0
  142. package/packages/core/src/public/hooks/useHotspots.ts +1 -0
  143. package/packages/core/src/public/hooks/usePersona.ts +32 -67
  144. package/packages/core/src/public/hooks/useSprint.ts +23 -75
  145. package/packages/core/src/public/hooks/useStatsStrip.ts +47 -117
  146. package/packages/core/src/public/hooks/useStory.ts +11 -60
  147. package/packages/core/src/public/hooks/useTodos.ts +8 -61
  148. package/packages/core/src/public/images/cyclist-tandem-source.png +0 -0
  149. package/packages/core/src/public/index.ts +5 -0
  150. package/packages/core/src/public/styles/tailwind.css +15 -101
  151. package/packages/core/src/public/utils/slash-commands.ts +0 -4
  152. package/pennyfarthing-dist/agents/architect.md +8 -0
  153. package/pennyfarthing-dist/agents/ba.md +8 -0
  154. package/pennyfarthing-dist/agents/dev.md +10 -2
  155. package/pennyfarthing-dist/agents/devops.md +8 -0
  156. package/pennyfarthing-dist/agents/orchestrator.md +8 -0
  157. package/pennyfarthing-dist/agents/pm.md +8 -0
  158. package/pennyfarthing-dist/agents/reviewer.md +12 -4
  159. package/pennyfarthing-dist/agents/sm-setup.md +7 -7
  160. package/pennyfarthing-dist/agents/sm.md +20 -12
  161. package/pennyfarthing-dist/agents/tea.md +10 -2
  162. package/pennyfarthing-dist/agents/tech-writer.md +8 -0
  163. package/pennyfarthing-dist/agents/ux-designer.md +8 -0
  164. package/pennyfarthing-dist/commands/pf-architect.md +1 -1
  165. package/pennyfarthing-dist/commands/pf-ba.md +1 -1
  166. package/pennyfarthing-dist/commands/pf-dev.md +1 -1
  167. package/pennyfarthing-dist/commands/pf-devops.md +1 -1
  168. package/pennyfarthing-dist/commands/pf-health-check.md +1 -1
  169. package/pennyfarthing-dist/commands/pf-help.md +3 -2
  170. package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
  171. package/pennyfarthing-dist/commands/pf-pm.md +1 -1
  172. package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
  173. package/pennyfarthing-dist/commands/pf-setup.md +4 -4
  174. package/pennyfarthing-dist/commands/pf-sm.md +1 -1
  175. package/pennyfarthing-dist/commands/pf-standalone.md +60 -0
  176. package/pennyfarthing-dist/commands/pf-tea.md +1 -1
  177. package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
  178. package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
  179. package/pennyfarthing-dist/commands/pf-work.md +1 -1
  180. package/pennyfarthing-dist/guides/agent-behavior.md +11 -11
  181. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +2 -2
  182. package/pennyfarthing-dist/guides/bikelane.md +1 -8
  183. package/pennyfarthing-dist/guides/bikerack.md +94 -0
  184. package/pennyfarthing-dist/guides/hooks.md +1 -1
  185. package/pennyfarthing-dist/guides/what-is-pennyfarthing.md +91 -0
  186. package/pennyfarthing-dist/guides/xml-tags.md +2 -2
  187. package/pennyfarthing-dist/personas/themes/discworld.yaml +14 -12
  188. package/pennyfarthing-dist/personas/themes/firefly.yaml +12 -12
  189. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +14 -12
  190. package/pennyfarthing-dist/pyproject.toml +6 -2
  191. package/pennyfarthing-dist/scripts/core/agent-session.sh +4 -5
  192. package/pennyfarthing-dist/scripts/core/check-context.sh +10 -5
  193. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +1 -2
  194. package/pennyfarthing-dist/scripts/core/prime.sh +1 -2
  195. package/pennyfarthing-dist/scripts/git/changelog-links.sh +216 -0
  196. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +1 -2
  197. package/pennyfarthing-dist/scripts/git/git-status-all.sh +1 -2
  198. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +1 -2
  199. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +1 -2
  200. package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
  201. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +2 -3
  202. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +2 -3
  203. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +2 -3
  204. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +2 -3
  205. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +31 -1
  206. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +6 -4
  207. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +2 -3
  208. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +1 -1
  209. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +2 -3
  210. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +2 -3
  211. package/pennyfarthing-dist/scripts/hooks/session-start.sh +2 -3
  212. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +2 -3
  213. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +2 -3
  214. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +2 -3
  215. package/pennyfarthing-dist/scripts/lib/README.md +0 -1
  216. package/pennyfarthing-dist/scripts/misc/statusline.sh +2 -3
  217. package/pennyfarthing-dist/scripts/misc/uninstall.sh +1 -1
  218. package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +84 -8
  219. package/pennyfarthing-dist/scripts/portraits/generate-tandem-portraits.sh +7 -3
  220. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +2 -2
  221. package/pennyfarthing-dist/scripts/theme/list-themes.sh +2 -18
  222. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +1 -2
  223. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +1 -2
  224. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +1 -2
  225. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +1 -2
  226. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +1 -2
  227. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +1 -2
  228. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +1 -2
  229. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +1 -2
  230. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +1 -2
  231. package/pennyfarthing-dist/skills/pf-jira/usage.md +87 -145
  232. package/pennyfarthing-dist/skills/pf-settings/skill.md +41 -3
  233. package/pennyfarthing-dist/skills/pf-settings/usage.md +25 -0
  234. package/pennyfarthing-dist/skills/pf-sprint/skill.md +4 -0
  235. package/pennyfarthing-dist/skills/pf-sprint/usage.md +167 -173
  236. package/pennyfarthing-dist/skills/pf-theme/usage.md +17 -129
  237. package/pennyfarthing-dist/skills/pf-ux-tandem/SKILL.md +194 -0
  238. package/pennyfarthing-dist/skills/pf-workflow/usage.md +51 -128
  239. package/pennyfarthing-dist/skills/skill-registry.yaml +17 -21
  240. package/pennyfarthing-dist/src/pf/CLAUDE.md +213 -0
  241. package/pennyfarthing-dist/src/pf/__init__.py +17 -0
  242. package/pennyfarthing-dist/src/pf/__pycache__/__init__.cpython-311.pyc +0 -0
  243. package/pennyfarthing-dist/src/pf/__pycache__/__init__.cpython-314.pyc +0 -0
  244. package/pennyfarthing-dist/src/pf/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  245. package/pennyfarthing-dist/src/pf/__pycache__/cli.cpython-311.pyc +0 -0
  246. package/pennyfarthing-dist/src/pf/__pycache__/cli.cpython-314.pyc +0 -0
  247. package/pennyfarthing-dist/src/pf/__pycache__/config.cpython-314.pyc +0 -0
  248. package/pennyfarthing-dist/src/pf/__pycache__/config_migration.cpython-314.pyc +0 -0
  249. package/pennyfarthing-dist/src/pf/__pycache__/context.cpython-311.pyc +0 -0
  250. package/pennyfarthing-dist/src/pf/__pycache__/context.cpython-314.pyc +0 -0
  251. package/pennyfarthing-dist/src/pf/__pycache__/hooks.cpython-314.pyc +0 -0
  252. package/pennyfarthing-dist/src/pf/__pycache__/jira.cpython-314.pyc +0 -0
  253. package/pennyfarthing-dist/src/pf/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  254. package/pennyfarthing-dist/src/pf/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  255. package/pennyfarthing-dist/src/pf/__pycache__/jira_sync.cpython-314.pyc +0 -0
  256. package/pennyfarthing-dist/src/pf/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  257. package/pennyfarthing-dist/src/pf/__pycache__/output.cpython-314.pyc +0 -0
  258. package/pennyfarthing-dist/src/pf/__pycache__/patch_mode.cpython-314.pyc +0 -0
  259. package/pennyfarthing-dist/src/pf/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  260. package/pennyfarthing-dist/src/pf/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  261. package/pennyfarthing-dist/src/pf/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  262. package/pennyfarthing-dist/src/pf/__pycache__/sprint.cpython-314.pyc +0 -0
  263. package/pennyfarthing-dist/src/pf/__pycache__/workflow.cpython-311.pyc +0 -0
  264. package/pennyfarthing-dist/src/pf/__pycache__/workflow.cpython-314.pyc +0 -0
  265. package/pennyfarthing-dist/src/pf/bc/__pycache__/__init__.cpython-311.pyc +0 -0
  266. package/pennyfarthing-dist/src/pf/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  267. package/pennyfarthing-dist/src/pf/bc/__pycache__/cli.cpython-311.pyc +0 -0
  268. package/pennyfarthing-dist/src/pf/bc/__pycache__/cli.cpython-314.pyc +0 -0
  269. package/pennyfarthing-dist/src/pf/bc/__pycache__/focus.cpython-311.pyc +0 -0
  270. package/pennyfarthing-dist/src/pf/bc/__pycache__/focus.cpython-314.pyc +0 -0
  271. package/pennyfarthing-dist/src/pf/bc/__pycache__/split.cpython-314.pyc +0 -0
  272. package/pennyfarthing-dist/src/pf/bc/cli.py +240 -0
  273. package/pennyfarthing-dist/src/pf/bc/focus.py +332 -0
  274. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/__init__.cpython-311.pyc +0 -0
  275. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  276. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  277. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  278. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  279. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  280. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  281. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/cli.cpython-311.pyc +0 -0
  282. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  283. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  284. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  285. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  286. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  287. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  288. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/launcher.cpython-311.pyc +0 -0
  289. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  290. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/layout_order.cpython-314.pyc +0 -0
  291. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  292. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  293. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  294. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  295. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  296. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/story_detail_widget.cpython-314.pyc +0 -0
  297. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  298. package/pennyfarthing-dist/src/pf/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  299. package/pennyfarthing-dist/src/pf/bikerack/audit_log_panel.py +631 -0
  300. package/pennyfarthing-dist/src/pf/bikerack/base_panel.py +186 -0
  301. package/pennyfarthing-dist/src/pf/bikerack/context_meter_footer.py +266 -0
  302. package/pennyfarthing-dist/src/pf/bikerack/debug_panel.py +451 -0
  303. package/pennyfarthing-dist/src/pf/bikerack/launcher.py +239 -0
  304. package/pennyfarthing-dist/src/pf/bikerack/layout_order.py +84 -0
  305. package/pennyfarthing-dist/src/pf/bikerack/portrait_resolver.py +191 -0
  306. package/pennyfarthing-dist/src/pf/bikerack/progress_panel.py +564 -0
  307. package/pennyfarthing-dist/src/pf/bikerack/sprint_panel.py +645 -0
  308. package/pennyfarthing-dist/src/pf/bikerack/story_detail_data.py +329 -0
  309. package/pennyfarthing-dist/src/pf/bikerack/story_detail_screen.py +283 -0
  310. package/pennyfarthing-dist/src/pf/bikerack/story_detail_widget.py +167 -0
  311. package/pennyfarthing-dist/src/pf/bikerack/tui.py +1170 -0
  312. package/pennyfarthing-dist/src/pf/bikerack/ws_client.py +203 -0
  313. package/pennyfarthing-dist/src/pf/bmad/__pycache__/__init__.cpython-314.pyc +0 -0
  314. package/pennyfarthing-dist/src/pf/bmad/__pycache__/cli.cpython-314.pyc +0 -0
  315. package/pennyfarthing-dist/src/pf/bmad/cli.py +196 -0
  316. package/pennyfarthing-dist/src/pf/bmad/importer.py +199 -0
  317. package/pennyfarthing-dist/src/pf/bmad/parser.py +238 -0
  318. package/pennyfarthing-dist/src/pf/bmad/sync.py +462 -0
  319. package/pennyfarthing-dist/src/pf/bmad/test_parser.py +249 -0
  320. package/pennyfarthing-dist/src/pf/bmad/test_sync.py +220 -0
  321. package/pennyfarthing-dist/src/pf/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  322. package/pennyfarthing-dist/src/pf/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  323. package/pennyfarthing-dist/src/pf/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  324. package/pennyfarthing-dist/src/pf/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  325. package/pennyfarthing-dist/src/pf/brownfield/cli.py +130 -0
  326. package/pennyfarthing-dist/src/pf/cli.py +393 -0
  327. package/pennyfarthing-dist/src/pf/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  328. package/pennyfarthing-dist/src/pf/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  329. package/pennyfarthing-dist/src/pf/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  330. package/pennyfarthing-dist/src/pf/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  331. package/pennyfarthing-dist/src/pf/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  332. package/pennyfarthing-dist/src/pf/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  333. package/pennyfarthing-dist/src/pf/common/__init__.py +50 -0
  334. package/pennyfarthing-dist/src/pf/common/__pycache__/__init__.cpython-311.pyc +0 -0
  335. package/pennyfarthing-dist/src/pf/common/__pycache__/__init__.cpython-314.pyc +0 -0
  336. package/pennyfarthing-dist/src/pf/common/__pycache__/config.cpython-311.pyc +0 -0
  337. package/pennyfarthing-dist/src/pf/common/__pycache__/config.cpython-314.pyc +0 -0
  338. package/pennyfarthing-dist/src/pf/common/__pycache__/hooks.cpython-314.pyc +0 -0
  339. package/pennyfarthing-dist/src/pf/common/__pycache__/output.cpython-311.pyc +0 -0
  340. package/pennyfarthing-dist/src/pf/common/__pycache__/output.cpython-314.pyc +0 -0
  341. package/pennyfarthing-dist/src/pf/common/__pycache__/pr_config.cpython-314.pyc +0 -0
  342. package/pennyfarthing-dist/src/pf/common/__pycache__/themes.cpython-314.pyc +0 -0
  343. package/pennyfarthing-dist/src/pf/common/config.py +162 -0
  344. package/pennyfarthing-dist/src/pf/common/hooks.py +31 -0
  345. package/pennyfarthing-dist/src/pf/common/themes.py +354 -0
  346. package/pennyfarthing-dist/src/pf/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  347. package/pennyfarthing-dist/src/pf/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  348. package/pennyfarthing-dist/src/pf/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  349. package/pennyfarthing-dist/src/pf/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  350. package/pennyfarthing-dist/src/pf/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  351. package/pennyfarthing-dist/src/pf/complexity/__pycache__/models.cpython-314.pyc +0 -0
  352. package/pennyfarthing-dist/src/pf/config_migration.py +102 -0
  353. package/pennyfarthing-dist/src/pf/consultation/__pycache__/__init__.cpython-311.pyc +0 -0
  354. package/pennyfarthing-dist/src/pf/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  355. package/pennyfarthing-dist/src/pf/consultation/__pycache__/cli.cpython-311.pyc +0 -0
  356. package/pennyfarthing-dist/src/pf/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  357. package/pennyfarthing-dist/src/pf/consultation/__pycache__/dialogue_manager.cpython-314.pyc +0 -0
  358. package/pennyfarthing-dist/src/pf/context.py +413 -0
  359. package/pennyfarthing-dist/src/pf/core/__init__.py +6 -0
  360. package/pennyfarthing-dist/src/pf/core/__pycache__/__init__.cpython-314.pyc +0 -0
  361. package/pennyfarthing-dist/src/pf/core/__pycache__/models.cpython-314.pyc +0 -0
  362. package/pennyfarthing-dist/src/pf/core/__pycache__/resolver.cpython-314.pyc +0 -0
  363. package/pennyfarthing-dist/src/pf/core/models.py +30 -0
  364. package/pennyfarthing-dist/src/pf/core/resolver.py +137 -0
  365. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/__init__.cpython-311.pyc +0 -0
  366. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  367. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  368. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  369. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/cli.cpython-311.pyc +0 -0
  370. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  371. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  372. package/pennyfarthing-dist/src/pf/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  373. package/pennyfarthing-dist/src/pf/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  374. package/pennyfarthing-dist/src/pf/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  375. package/pennyfarthing-dist/src/pf/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  376. package/pennyfarthing-dist/src/pf/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  377. package/pennyfarthing-dist/src/pf/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  378. package/pennyfarthing-dist/src/pf/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  379. package/pennyfarthing-dist/src/pf/docs/__init__.py +1 -0
  380. package/pennyfarthing-dist/src/pf/docs/__pycache__/__init__.cpython-314.pyc +0 -0
  381. package/pennyfarthing-dist/src/pf/docs/__pycache__/cli.cpython-314.pyc +0 -0
  382. package/pennyfarthing-dist/src/pf/docs/__pycache__/sync_skills.cpython-314.pyc +0 -0
  383. package/pennyfarthing-dist/src/pf/docs/cli.py +51 -0
  384. package/pennyfarthing-dist/src/pf/docs/sync_skills.py +489 -0
  385. package/pennyfarthing-dist/src/pf/doctor/__init__.py +6 -0
  386. package/pennyfarthing-dist/src/pf/doctor/__pycache__/__init__.cpython-314.pyc +0 -0
  387. package/pennyfarthing-dist/src/pf/doctor/__pycache__/checks.cpython-314.pyc +0 -0
  388. package/pennyfarthing-dist/src/pf/doctor/__pycache__/cli.cpython-314.pyc +0 -0
  389. package/pennyfarthing-dist/src/pf/doctor/__pycache__/core.cpython-314.pyc +0 -0
  390. package/pennyfarthing-dist/src/pf/doctor/__pycache__/models.cpython-314.pyc +0 -0
  391. package/pennyfarthing-dist/src/pf/doctor/checks.py +180 -0
  392. package/pennyfarthing-dist/src/pf/doctor/cli.py +52 -0
  393. package/pennyfarthing-dist/src/pf/doctor/core.py +63 -0
  394. package/pennyfarthing-dist/src/pf/doctor/models.py +29 -0
  395. package/pennyfarthing-dist/src/pf/epic/__pycache__/__init__.cpython-311.pyc +0 -0
  396. package/pennyfarthing-dist/src/pf/epic/__pycache__/__init__.cpython-314.pyc +0 -0
  397. package/pennyfarthing-dist/src/pf/epic/__pycache__/cli.cpython-311.pyc +0 -0
  398. package/pennyfarthing-dist/src/pf/epic/__pycache__/cli.cpython-314.pyc +0 -0
  399. package/pennyfarthing-dist/src/pf/git/__pycache__/__init__.cpython-314.pyc +0 -0
  400. package/pennyfarthing-dist/src/pf/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  401. package/pennyfarthing-dist/src/pf/git/__pycache__/hooks_installer.cpython-314.pyc +0 -0
  402. package/pennyfarthing-dist/src/pf/git/__pycache__/repos.cpython-314.pyc +0 -0
  403. package/pennyfarthing-dist/src/pf/git/__pycache__/status_all.cpython-314.pyc +0 -0
  404. package/pennyfarthing-dist/src/pf/git/hooks_installer.py +152 -0
  405. package/pennyfarthing-dist/src/pf/git_group/__pycache__/__init__.cpython-311.pyc +0 -0
  406. package/pennyfarthing-dist/src/pf/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
  407. package/pennyfarthing-dist/src/pf/git_group/__pycache__/cli.cpython-311.pyc +0 -0
  408. package/pennyfarthing-dist/src/pf/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  409. package/pennyfarthing-dist/src/pf/handoff/__pycache__/__init__.cpython-311.pyc +0 -0
  410. package/pennyfarthing-dist/src/pf/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  411. package/pennyfarthing-dist/src/pf/handoff/__pycache__/cli.cpython-311.pyc +0 -0
  412. package/pennyfarthing-dist/src/pf/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  413. package/pennyfarthing-dist/src/pf/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  414. package/pennyfarthing-dist/src/pf/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
  415. package/pennyfarthing-dist/src/pf/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
  416. package/pennyfarthing-dist/src/pf/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  417. package/pennyfarthing-dist/src/pf/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  418. package/pennyfarthing-dist/src/pf/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  419. package/pennyfarthing-dist/src/pf/handoff/gate_file.py +109 -0
  420. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/__init__.cpython-311.pyc +0 -0
  421. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  422. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  423. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/analyze.cpython-311.pyc +0 -0
  424. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  425. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/cli.cpython-311.pyc +0 -0
  426. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  427. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  428. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/models.cpython-311.pyc +0 -0
  429. package/pennyfarthing-dist/src/pf/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  430. package/pennyfarthing-dist/src/pf/hooks/__init__.py +447 -0
  431. package/pennyfarthing-dist/src/pf/hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  432. package/pennyfarthing-dist/src/pf/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  433. package/pennyfarthing-dist/src/pf/hooks/__pycache__/bell_mode.cpython-311.pyc +0 -0
  434. package/pennyfarthing-dist/src/pf/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  435. package/pennyfarthing-dist/src/pf/hooks/__pycache__/cli.cpython-311.pyc +0 -0
  436. package/pennyfarthing-dist/src/pf/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  437. package/pennyfarthing-dist/src/pf/hooks/__pycache__/context_breaker.cpython-311.pyc +0 -0
  438. package/pennyfarthing-dist/src/pf/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  439. package/pennyfarthing-dist/src/pf/hooks/__pycache__/context_warning.cpython-311.pyc +0 -0
  440. package/pennyfarthing-dist/src/pf/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  441. package/pennyfarthing-dist/src/pf/hooks/__pycache__/cyclist_pretooluse.cpython-311.pyc +0 -0
  442. package/pennyfarthing-dist/src/pf/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  443. package/pennyfarthing-dist/src/pf/hooks/__pycache__/pre_edit_check.cpython-311.pyc +0 -0
  444. package/pennyfarthing-dist/src/pf/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  445. package/pennyfarthing-dist/src/pf/hooks/__pycache__/reflector_check.cpython-311.pyc +0 -0
  446. package/pennyfarthing-dist/src/pf/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  447. package/pennyfarthing-dist/src/pf/hooks/__pycache__/schema_validation.cpython-311.pyc +0 -0
  448. package/pennyfarthing-dist/src/pf/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  449. package/pennyfarthing-dist/src/pf/hooks/__pycache__/session_start.cpython-311.pyc +0 -0
  450. package/pennyfarthing-dist/src/pf/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  451. package/pennyfarthing-dist/src/pf/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  452. package/pennyfarthing-dist/src/pf/hooks/__pycache__/sprint_yaml_validation.cpython-311.pyc +0 -0
  453. package/pennyfarthing-dist/src/pf/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  454. package/pennyfarthing-dist/src/pf/hooks/__pycache__/statusline.cpython-311.pyc +0 -0
  455. package/pennyfarthing-dist/src/pf/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  456. package/pennyfarthing-dist/src/pf/hooks/cyclist_pretooluse.py +161 -0
  457. package/pennyfarthing-dist/src/pf/hooks/frontmatter.py +257 -0
  458. package/pennyfarthing-dist/src/pf/hooks/session_start.py +379 -0
  459. package/pennyfarthing-dist/src/pf/hooks/statusline.py +436 -0
  460. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/__init__.cpython-311.pyc +0 -0
  461. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  462. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  463. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/analyze.cpython-311.pyc +0 -0
  464. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  465. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/cli.cpython-311.pyc +0 -0
  466. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  467. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  468. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/models.cpython-311.pyc +0 -0
  469. package/pennyfarthing-dist/src/pf/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  470. package/pennyfarthing-dist/src/pf/init/__init__.py +1 -0
  471. package/pennyfarthing-dist/src/pf/init/__pycache__/__init__.cpython-314.pyc +0 -0
  472. package/pennyfarthing-dist/src/pf/init/__pycache__/cli.cpython-314.pyc +0 -0
  473. package/pennyfarthing-dist/src/pf/init/__pycache__/core.cpython-314.pyc +0 -0
  474. package/pennyfarthing-dist/src/pf/init/__pycache__/setup.cpython-314.pyc +0 -0
  475. package/pennyfarthing-dist/src/pf/init/cli.py +63 -0
  476. package/pennyfarthing-dist/src/pf/init/core.py +281 -0
  477. package/pennyfarthing-dist/src/pf/init/setup.py +474 -0
  478. package/pennyfarthing-dist/src/pf/jira/__init__.py +91 -0
  479. package/pennyfarthing-dist/src/pf/jira/__pycache__/__init__.cpython-311.pyc +0 -0
  480. package/pennyfarthing-dist/src/pf/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  481. package/pennyfarthing-dist/src/pf/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  482. package/pennyfarthing-dist/src/pf/jira/__pycache__/bidirectional.cpython-311.pyc +0 -0
  483. package/pennyfarthing-dist/src/pf/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  484. package/pennyfarthing-dist/src/pf/jira/__pycache__/claim.cpython-311.pyc +0 -0
  485. package/pennyfarthing-dist/src/pf/jira/__pycache__/claim.cpython-314.pyc +0 -0
  486. package/pennyfarthing-dist/src/pf/jira/__pycache__/cli.cpython-311.pyc +0 -0
  487. package/pennyfarthing-dist/src/pf/jira/__pycache__/cli.cpython-314.pyc +0 -0
  488. package/pennyfarthing-dist/src/pf/jira/__pycache__/client.cpython-311.pyc +0 -0
  489. package/pennyfarthing-dist/src/pf/jira/__pycache__/client.cpython-314.pyc +0 -0
  490. package/pennyfarthing-dist/src/pf/jira/__pycache__/compat.cpython-314.pyc +0 -0
  491. package/pennyfarthing-dist/src/pf/jira/__pycache__/create.cpython-311.pyc +0 -0
  492. package/pennyfarthing-dist/src/pf/jira/__pycache__/create.cpython-314.pyc +0 -0
  493. package/pennyfarthing-dist/src/pf/jira/__pycache__/epic.cpython-311.pyc +0 -0
  494. package/pennyfarthing-dist/src/pf/jira/__pycache__/epic.cpython-314.pyc +0 -0
  495. package/pennyfarthing-dist/src/pf/jira/__pycache__/mappings.cpython-314.pyc +0 -0
  496. package/pennyfarthing-dist/src/pf/jira/__pycache__/models.cpython-314.pyc +0 -0
  497. package/pennyfarthing-dist/src/pf/jira/__pycache__/operations.cpython-311.pyc +0 -0
  498. package/pennyfarthing-dist/src/pf/jira/__pycache__/operations.cpython-314.pyc +0 -0
  499. package/pennyfarthing-dist/src/pf/jira/__pycache__/reconcile.cpython-311.pyc +0 -0
  500. package/pennyfarthing-dist/src/pf/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  501. package/pennyfarthing-dist/src/pf/jira/__pycache__/story.cpython-311.pyc +0 -0
  502. package/pennyfarthing-dist/src/pf/jira/__pycache__/story.cpython-314.pyc +0 -0
  503. package/pennyfarthing-dist/src/pf/jira/__pycache__/sync.cpython-311.pyc +0 -0
  504. package/pennyfarthing-dist/src/pf/jira/__pycache__/sync.cpython-314.pyc +0 -0
  505. package/pennyfarthing-dist/src/pf/jira/claim.py +232 -0
  506. package/pennyfarthing-dist/src/pf/jira/cli.py +472 -0
  507. package/pennyfarthing-dist/src/pf/jira/client.py +766 -0
  508. package/pennyfarthing-dist/src/pf/jira/reconcile.py +260 -0
  509. package/pennyfarthing-dist/src/pf/jira/story.py +223 -0
  510. package/pennyfarthing-dist/src/pf/jira/sync.py +350 -0
  511. package/pennyfarthing-dist/src/pf/launch/__pycache__/__init__.cpython-311.pyc +0 -0
  512. package/pennyfarthing-dist/src/pf/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  513. package/pennyfarthing-dist/src/pf/launch/__pycache__/cli.cpython-311.pyc +0 -0
  514. package/pennyfarthing-dist/src/pf/launch/__pycache__/cli.cpython-314.pyc +0 -0
  515. package/pennyfarthing-dist/src/pf/migration/__init__.py +39 -0
  516. package/pennyfarthing-dist/src/pf/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  517. package/pennyfarthing-dist/src/pf/migration/__pycache__/__main__.cpython-314.pyc +0 -0
  518. package/pennyfarthing-dist/src/pf/migration/__pycache__/cli.cpython-314.pyc +0 -0
  519. package/pennyfarthing-dist/src/pf/migration/__pycache__/session.cpython-314.pyc +0 -0
  520. package/pennyfarthing-dist/src/pf/migration/__pycache__/skill.cpython-314.pyc +0 -0
  521. package/pennyfarthing-dist/src/pf/migration/__pycache__/step.cpython-314.pyc +0 -0
  522. package/pennyfarthing-dist/src/pf/migration/__pycache__/validate.cpython-314.pyc +0 -0
  523. package/pennyfarthing-dist/src/pf/migration/cli.py +303 -0
  524. package/pennyfarthing-dist/src/pf/package/__pycache__/__init__.cpython-314.pyc +0 -0
  525. package/pennyfarthing-dist/src/pf/package/__pycache__/cli.cpython-314.pyc +0 -0
  526. package/pennyfarthing-dist/src/pf/package/__pycache__/discovery.cpython-314.pyc +0 -0
  527. package/pennyfarthing-dist/src/pf/package/__pycache__/portraits.cpython-314.pyc +0 -0
  528. package/pennyfarthing-dist/src/pf/package/cli.py +186 -0
  529. package/pennyfarthing-dist/src/pf/package/discovery.py +130 -0
  530. package/pennyfarthing-dist/src/pf/package/portraits.py +243 -0
  531. package/pennyfarthing-dist/src/pf/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  532. package/pennyfarthing-dist/src/pf/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  533. package/pennyfarthing-dist/src/pf/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  534. package/pennyfarthing-dist/src/pf/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  535. package/pennyfarthing-dist/src/pf/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  536. package/pennyfarthing-dist/src/pf/prime/__pycache__/__main__.cpython-314.pyc +0 -0
  537. package/pennyfarthing-dist/src/pf/prime/__pycache__/cli.cpython-314.pyc +0 -0
  538. package/pennyfarthing-dist/src/pf/prime/__pycache__/loader.cpython-314.pyc +0 -0
  539. package/pennyfarthing-dist/src/pf/prime/__pycache__/models.cpython-314.pyc +0 -0
  540. package/pennyfarthing-dist/src/pf/prime/__pycache__/persona.cpython-314.pyc +0 -0
  541. package/pennyfarthing-dist/src/pf/prime/__pycache__/session.cpython-314.pyc +0 -0
  542. package/pennyfarthing-dist/src/pf/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  543. package/pennyfarthing-dist/src/pf/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
  544. package/pennyfarthing-dist/src/pf/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  545. package/pennyfarthing-dist/src/pf/prime/cli.py +721 -0
  546. package/pennyfarthing-dist/src/pf/prime/loader.py +322 -0
  547. package/pennyfarthing-dist/src/pf/prime/persona.py +305 -0
  548. package/pennyfarthing-dist/src/pf/prime/workflow.py +325 -0
  549. package/pennyfarthing-dist/src/pf/release/__pycache__/__init__.cpython-314.pyc +0 -0
  550. package/pennyfarthing-dist/src/pf/release/__pycache__/cli.cpython-314.pyc +0 -0
  551. package/pennyfarthing-dist/src/pf/release/__pycache__/deprecate.cpython-314.pyc +0 -0
  552. package/pennyfarthing-dist/src/pf/release/__pycache__/dry_run.cpython-314.pyc +0 -0
  553. package/pennyfarthing-dist/src/pf/release/cli.py +112 -0
  554. package/pennyfarthing-dist/src/pf/release/deprecate.py +187 -0
  555. package/pennyfarthing-dist/src/pf/release/dry_run.py +187 -0
  556. package/pennyfarthing-dist/src/pf/session/__pycache__/__init__.cpython-311.pyc +0 -0
  557. package/pennyfarthing-dist/src/pf/session/__pycache__/__init__.cpython-314.pyc +0 -0
  558. package/pennyfarthing-dist/src/pf/session/__pycache__/cli.cpython-311.pyc +0 -0
  559. package/pennyfarthing-dist/src/pf/session/__pycache__/cli.cpython-314.pyc +0 -0
  560. package/pennyfarthing-dist/src/pf/settings/__init__.py +0 -0
  561. package/pennyfarthing-dist/src/pf/settings/__pycache__/__init__.cpython-314.pyc +0 -0
  562. package/pennyfarthing-dist/src/pf/settings/__pycache__/cli.cpython-314.pyc +0 -0
  563. package/pennyfarthing-dist/src/pf/settings/__pycache__/settings.cpython-314.pyc +0 -0
  564. package/pennyfarthing-dist/src/pf/settings/settings.py +135 -0
  565. package/pennyfarthing-dist/src/pf/sprint/__pycache__/__init__.cpython-311.pyc +0 -0
  566. package/pennyfarthing-dist/src/pf/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  567. package/pennyfarthing-dist/src/pf/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  568. package/pennyfarthing-dist/src/pf/sprint/__pycache__/archive.cpython-311.pyc +0 -0
  569. package/pennyfarthing-dist/src/pf/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  570. package/pennyfarthing-dist/src/pf/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  571. package/pennyfarthing-dist/src/pf/sprint/__pycache__/cli.cpython-311.pyc +0 -0
  572. package/pennyfarthing-dist/src/pf/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  573. package/pennyfarthing-dist/src/pf/sprint/__pycache__/epic_add.cpython-311.pyc +0 -0
  574. package/pennyfarthing-dist/src/pf/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  575. package/pennyfarthing-dist/src/pf/sprint/__pycache__/epic_update.cpython-311.pyc +0 -0
  576. package/pennyfarthing-dist/src/pf/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  577. package/pennyfarthing-dist/src/pf/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  578. package/pennyfarthing-dist/src/pf/sprint/__pycache__/loader.cpython-311.pyc +0 -0
  579. package/pennyfarthing-dist/src/pf/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  580. package/pennyfarthing-dist/src/pf/sprint/__pycache__/shard_merge.cpython-314.pyc +0 -0
  581. package/pennyfarthing-dist/src/pf/sprint/__pycache__/standalone_add.cpython-314.pyc +0 -0
  582. package/pennyfarthing-dist/src/pf/sprint/__pycache__/status.cpython-311.pyc +0 -0
  583. package/pennyfarthing-dist/src/pf/sprint/__pycache__/status.cpython-314.pyc +0 -0
  584. package/pennyfarthing-dist/src/pf/sprint/__pycache__/story_add.cpython-311.pyc +0 -0
  585. package/pennyfarthing-dist/src/pf/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  586. package/pennyfarthing-dist/src/pf/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  587. package/pennyfarthing-dist/src/pf/sprint/__pycache__/story_transition.cpython-314.pyc +0 -0
  588. package/pennyfarthing-dist/src/pf/sprint/__pycache__/story_update.cpython-311.pyc +0 -0
  589. package/pennyfarthing-dist/src/pf/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  590. package/pennyfarthing-dist/src/pf/sprint/__pycache__/validate_cmd.cpython-311.pyc +0 -0
  591. package/pennyfarthing-dist/src/pf/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  592. package/pennyfarthing-dist/src/pf/sprint/__pycache__/validator.cpython-311.pyc +0 -0
  593. package/pennyfarthing-dist/src/pf/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  594. package/pennyfarthing-dist/src/pf/sprint/__pycache__/work.cpython-311.pyc +0 -0
  595. package/pennyfarthing-dist/src/pf/sprint/__pycache__/work.cpython-314.pyc +0 -0
  596. package/pennyfarthing-dist/src/pf/sprint/__pycache__/yaml_io.cpython-311.pyc +0 -0
  597. package/pennyfarthing-dist/src/pf/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  598. package/pennyfarthing-dist/src/pf/sprint/archive.py +164 -0
  599. package/pennyfarthing-dist/src/pf/sprint/cli.py +2206 -0
  600. package/pennyfarthing-dist/src/pf/sprint/loader.py +361 -0
  601. package/pennyfarthing-dist/src/pf/sprint/shard_merge.py +205 -0
  602. package/pennyfarthing-dist/src/pf/sprint/standalone_add.py +143 -0
  603. package/pennyfarthing-dist/src/pf/sprint/status.py +187 -0
  604. package/pennyfarthing-dist/src/pf/sprint/story_finish.py +229 -0
  605. package/pennyfarthing-dist/src/pf/sprint/story_transition.py +183 -0
  606. package/pennyfarthing-dist/src/pf/sprint/story_update.py +240 -0
  607. package/pennyfarthing-dist/src/pf/sprint/yaml_io.py +407 -0
  608. package/pennyfarthing-dist/src/pf/story/__pycache__/__init__.cpython-314.pyc +0 -0
  609. package/pennyfarthing-dist/src/pf/story/__pycache__/__main__.cpython-314.pyc +0 -0
  610. package/pennyfarthing-dist/src/pf/story/__pycache__/cli.cpython-314.pyc +0 -0
  611. package/pennyfarthing-dist/src/pf/story/__pycache__/create.cpython-314.pyc +0 -0
  612. package/pennyfarthing-dist/src/pf/story/__pycache__/size.cpython-314.pyc +0 -0
  613. package/pennyfarthing-dist/src/pf/story/__pycache__/template.cpython-314.pyc +0 -0
  614. package/pennyfarthing-dist/src/pf/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  615. package/pennyfarthing-dist/src/pf/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  616. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_108_1_gate_migration.cpython-314-pytest-9.0.2.pyc +0 -0
  617. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
  618. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
  619. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
  620. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  621. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  622. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  623. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
  624. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  625. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  626. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_confidence_sm_evaluation.cpython-314-pytest-9.0.2.pyc +0 -0
  627. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_confidence_sm_gate.cpython-314-pytest-9.0.2.pyc +0 -0
  628. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_config_consolidation.cpython-314-pytest-9.0.2.pyc +0 -0
  629. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_dialogue_manager.cpython-314-pytest-9.0.2.pyc +0 -0
  630. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_dist_root.cpython-314-pytest-9.0.2.pyc +0 -0
  631. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_doctor.cpython-314-pytest-9.0.2.pyc +0 -0
  632. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_e2e_install_lifecycle.cpython-314-pytest-9.0.2.pyc +0 -0
  633. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  634. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_event_driven_jira_sync.cpython-314-pytest-9.0.2.pyc +0 -0
  635. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
  636. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
  637. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  638. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  639. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
  640. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  641. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_init_auto_setup.cpython-314-pytest-9.0.2.pyc +0 -0
  642. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_init_auto_setup.cpython-314.pyc +0 -0
  643. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_init_command.cpython-314-pytest-9.0.2.pyc +0 -0
  644. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  645. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  646. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  647. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  648. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_pypi_packaging.cpython-314-pytest-9.0.2.pyc +0 -0
  649. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
  650. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  651. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
  652. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_sprint_panel_provenance.cpython-314-pytest-9.0.2.pyc +0 -0
  653. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  654. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  655. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  656. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_story_transition.cpython-314-pytest-9.0.2.pyc +0 -0
  657. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  658. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  659. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  660. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
  661. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  662. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  663. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_upgrade_cleanup.cpython-314-pytest-9.0.2.pyc +0 -0
  664. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  665. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
  666. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  667. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  668. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
  669. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_wrapper_removal.cpython-314-pytest-9.0.2.pyc +0 -0
  670. package/pennyfarthing-dist/src/pf/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  671. package/pennyfarthing-dist/src/pf/tests/conftest.py +109 -0
  672. package/pennyfarthing-dist/src/pf/tests/test_108_1_gate_migration.py +541 -0
  673. package/pennyfarthing-dist/src/pf/tests/test_108_2_remove_handoff_fallback.py +340 -0
  674. package/pennyfarthing-dist/src/pf/tests/test_cli_modules.py +137 -0
  675. package/pennyfarthing-dist/src/pf/tests/test_codemarkers.py +672 -0
  676. package/pennyfarthing-dist/src/pf/tests/test_confidence_sm_evaluation.py +252 -0
  677. package/pennyfarthing-dist/src/pf/tests/test_confidence_sm_gate.py +318 -0
  678. package/pennyfarthing-dist/src/pf/tests/test_config_consolidation.py +513 -0
  679. package/pennyfarthing-dist/src/pf/tests/test_dist_root.py +720 -0
  680. package/pennyfarthing-dist/src/pf/tests/test_doctor.py +457 -0
  681. package/pennyfarthing-dist/src/pf/tests/test_event_driven_jira_sync.py +588 -0
  682. package/pennyfarthing-dist/src/pf/tests/test_init_auto_setup.py +893 -0
  683. package/pennyfarthing-dist/src/pf/tests/test_init_command.py +814 -0
  684. package/pennyfarthing-dist/src/pf/tests/test_jira_package.py +331 -0
  685. package/pennyfarthing-dist/src/pf/tests/test_package_structure.py +314 -0
  686. package/pennyfarthing-dist/src/pf/tests/test_pypi_packaging.py +329 -0
  687. package/pennyfarthing-dist/src/pf/tests/test_resolve_gate_file_field.py +460 -0
  688. package/pennyfarthing-dist/src/pf/tests/test_sprint_panel.py +610 -0
  689. package/pennyfarthing-dist/src/pf/tests/test_sprint_panel_provenance.py +485 -0
  690. package/pennyfarthing-dist/src/pf/tests/test_story_transition.py +502 -0
  691. package/pennyfarthing-dist/src/pf/tests/test_upgrade_cleanup.py +251 -0
  692. package/pennyfarthing-dist/src/pf/tests/test_wrapper_removal.py +373 -0
  693. package/pennyfarthing-dist/src/pf/theme/__pycache__/__init__.cpython-311.pyc +0 -0
  694. package/pennyfarthing-dist/src/pf/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  695. package/pennyfarthing-dist/src/pf/theme/__pycache__/cli.cpython-311.pyc +0 -0
  696. package/pennyfarthing-dist/src/pf/theme/__pycache__/cli.cpython-314.pyc +0 -0
  697. package/pennyfarthing-dist/src/pf/theme/cli.py +321 -0
  698. package/pennyfarthing-dist/src/pf/upgrade/__init__.py +1 -0
  699. package/pennyfarthing-dist/src/pf/upgrade/__pycache__/__init__.cpython-314.pyc +0 -0
  700. package/pennyfarthing-dist/src/pf/upgrade/__pycache__/cli.cpython-314.pyc +0 -0
  701. package/pennyfarthing-dist/src/pf/upgrade/__pycache__/core.cpython-314.pyc +0 -0
  702. package/pennyfarthing-dist/src/pf/upgrade/cli.py +62 -0
  703. package/pennyfarthing-dist/src/pf/upgrade/core.py +483 -0
  704. package/pennyfarthing-dist/src/pf/validate/__pycache__/__init__.cpython-311.pyc +0 -0
  705. package/pennyfarthing-dist/src/pf/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  706. package/pennyfarthing-dist/src/pf/validate/__pycache__/cli.cpython-311.pyc +0 -0
  707. package/pennyfarthing-dist/src/pf/validate/__pycache__/cli.cpython-314.pyc +0 -0
  708. package/pennyfarthing-dist/src/pf/validate/adapters/__init__.py +0 -0
  709. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  710. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  711. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  712. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  713. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  714. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
  715. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
  716. package/pennyfarthing-dist/src/pf/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  717. package/pennyfarthing-dist/src/pf/validate/adapters/agent.py +261 -0
  718. package/pennyfarthing-dist/src/pf/validate/adapters/skill_command.py +502 -0
  719. package/pennyfarthing-dist/src/pf/validate/adapters/tandem_awareness.py +260 -0
  720. package/pennyfarthing-dist/src/pf/validate/adapters/team_mode.py +329 -0
  721. package/pennyfarthing-dist/src/pf/validate/adapters/workflow.py +413 -0
  722. package/pennyfarthing-dist/src/pf/workflow/__pycache__/__init__.cpython-311.pyc +0 -0
  723. package/pennyfarthing-dist/src/pf/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  724. package/pennyfarthing-dist/src/pf/workflow/__pycache__/cli.cpython-311.pyc +0 -0
  725. package/pennyfarthing-dist/src/pf/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  726. package/pennyfarthing-dist/src/pf/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  727. package/pennyfarthing-dist/src/pf/workflow/__pycache__/scale.cpython-311.pyc +0 -0
  728. package/pennyfarthing-dist/src/pf/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  729. package/pennyfarthing-dist/src/pf/workflow/__pycache__/state.cpython-311.pyc +0 -0
  730. package/pennyfarthing-dist/src/pf/workflow/__pycache__/state.cpython-314.pyc +0 -0
  731. package/pennyfarthing-dist/src/pf/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
  732. package/pennyfarthing-dist/src/pf/workflow/cli.py +1109 -0
  733. package/pennyfarthing-dist/templates/justfile.template +71 -0
  734. package/pennyfarthing-dist/templates/preferences.yaml.template +5 -8
  735. package/pennyfarthing-dist/templates/pyproject.toml +9 -1
  736. package/pennyfarthing-dist/templates/settings.local.json.template +20 -11
  737. package/pennyfarthing-dist/templates/tmux-dev.template +45 -0
  738. package/pennyfarthing-dist/templates/tmux.conf.template +91 -0
  739. package/pennyfarthing-dist/workflows/installation-check/steps/step-01-foundation.md +2 -2
  740. package/pennyfarthing-dist/workflows/installation-check/steps/step-05-layout.md +1 -1
  741. package/pennyfarthing-dist/workflows/installation-check/steps/step-07-tools.md +6 -5
  742. package/pennyfarthing-dist/workflows/patch.yaml +5 -6
  743. package/pennyfarthing-dist/workflows/project-setup/steps/step-04-claude-md.md +59 -1
  744. package/pennyfarthing-dist/workflows/release/steps/step-01-preflight.md +4 -0
  745. package/pennyfarthing-dist/workflows/release/steps/step-02-bump.md +19 -9
  746. package/pennyfarthing-dist/workflows/release/steps/step-10-publish.md +67 -21
  747. package/pennyfarthing-dist/workflows/release/steps/step-11-finalize.md +41 -30
  748. package/pennyfarthing-dist/workflows/tdd-tandem.yaml +28 -8
  749. package/packages/core/bin/pennyfarthing.js +0 -14
  750. package/packages/core/dist/workflow/team-lifecycle.d.ts +0 -169
  751. package/packages/core/dist/workflow/team-lifecycle.d.ts.map +0 -1
  752. package/packages/core/dist/workflow/team-lifecycle.js +0 -217
  753. package/packages/core/dist/workflow/team-lifecycle.js.map +0 -1
  754. package/packages/core/dist/workflow/team-lifecycle.test.d.ts +0 -20
  755. package/packages/core/dist/workflow/team-lifecycle.test.d.ts.map +0 -1
  756. package/packages/core/dist/workflow/team-lifecycle.test.js +0 -966
  757. package/packages/core/dist/workflow/team-lifecycle.test.js.map +0 -1
  758. package/packages/core/src/public/components/BikeRackIndex.tsx +0 -53
  759. package/packages/core/src/public/components/BikeRackWorkspace.tsx +0 -217
  760. package/packages/core/src/public/components/FontPicker/FontPicker.css +0 -276
  761. package/packages/core/src/public/components/FontPicker/index.tsx +0 -430
  762. package/packages/core/src/public/components/StandalonePanel.tsx +0 -82
  763. package/packages/core/src/public/components/ThemePalette/ThemePalette.css +0 -179
  764. package/packages/core/src/public/components/ThemePalette/index.tsx +0 -326
  765. package/packages/core/src/public/components/panels/BackgroundPanel.tsx +0 -115
  766. package/packages/core/src/public/components/ui/switch.tsx +0 -27
  767. package/packages/core/src/public/hooks/useBackgroundTasks.ts +0 -131
  768. package/pennyfarthing-dist/commands/pf-permissions.md +0 -193
  769. package/pennyfarthing-dist/guides/permission-protocol.md +0 -188
  770. package/pennyfarthing-dist/pf/CLAUDE.md +0 -213
  771. package/pennyfarthing-dist/pf/__init__.py +0 -17
  772. package/pennyfarthing-dist/pf/__pycache__/__init__.cpython-314.pyc +0 -0
  773. package/pennyfarthing-dist/pf/__pycache__/cli.cpython-314.pyc +0 -0
  774. package/pennyfarthing-dist/pf/__pycache__/context.cpython-314.pyc +0 -0
  775. package/pennyfarthing-dist/pf/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  776. package/pennyfarthing-dist/pf/bc/__pycache__/cli.cpython-314.pyc +0 -0
  777. package/pennyfarthing-dist/pf/bc/__pycache__/focus.cpython-314.pyc +0 -0
  778. package/pennyfarthing-dist/pf/bc/__pycache__/split.cpython-314.pyc +0 -0
  779. package/pennyfarthing-dist/pf/bc/cli.py +0 -241
  780. package/pennyfarthing-dist/pf/bc/focus.py +0 -333
  781. package/pennyfarthing-dist/pf/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  782. package/pennyfarthing-dist/pf/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  783. package/pennyfarthing-dist/pf/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  784. package/pennyfarthing-dist/pf/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  785. package/pennyfarthing-dist/pf/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  786. package/pennyfarthing-dist/pf/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  787. package/pennyfarthing-dist/pf/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  788. package/pennyfarthing-dist/pf/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  789. package/pennyfarthing-dist/pf/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  790. package/pennyfarthing-dist/pf/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  791. package/pennyfarthing-dist/pf/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  792. package/pennyfarthing-dist/pf/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  793. package/pennyfarthing-dist/pf/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  794. package/pennyfarthing-dist/pf/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  795. package/pennyfarthing-dist/pf/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  796. package/pennyfarthing-dist/pf/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  797. package/pennyfarthing-dist/pf/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  798. package/pennyfarthing-dist/pf/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  799. package/pennyfarthing-dist/pf/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  800. package/pennyfarthing-dist/pf/bikerack/audit_log_panel.py +0 -161
  801. package/pennyfarthing-dist/pf/bikerack/background_panel.py +0 -162
  802. package/pennyfarthing-dist/pf/bikerack/base_panel.py +0 -184
  803. package/pennyfarthing-dist/pf/bikerack/context_meter_footer.py +0 -138
  804. package/pennyfarthing-dist/pf/bikerack/debug_panel.py +0 -248
  805. package/pennyfarthing-dist/pf/bikerack/launcher.py +0 -240
  806. package/pennyfarthing-dist/pf/bikerack/portrait_resolver.py +0 -160
  807. package/pennyfarthing-dist/pf/bikerack/progress_panel.py +0 -314
  808. package/pennyfarthing-dist/pf/bikerack/sprint_panel.py +0 -492
  809. package/pennyfarthing-dist/pf/bikerack/story_detail_data.py +0 -247
  810. package/pennyfarthing-dist/pf/bikerack/story_detail_screen.py +0 -177
  811. package/pennyfarthing-dist/pf/bikerack/tui.py +0 -920
  812. package/pennyfarthing-dist/pf/bikerack/ws_client.py +0 -176
  813. package/pennyfarthing-dist/pf/bmad/__pycache__/__init__.cpython-314.pyc +0 -0
  814. package/pennyfarthing-dist/pf/bmad/__pycache__/cli.cpython-314.pyc +0 -0
  815. package/pennyfarthing-dist/pf/bmad/__pycache__/parser.cpython-314.pyc +0 -0
  816. package/pennyfarthing-dist/pf/bmad/cli.py +0 -197
  817. package/pennyfarthing-dist/pf/bmad/importer.py +0 -200
  818. package/pennyfarthing-dist/pf/bmad/parser.py +0 -239
  819. package/pennyfarthing-dist/pf/bmad/sync.py +0 -464
  820. package/pennyfarthing-dist/pf/bmad/test_parser.py +0 -253
  821. package/pennyfarthing-dist/pf/bmad/test_sync.py +0 -223
  822. package/pennyfarthing-dist/pf/brownfield/__main__.py +0 -8
  823. package/pennyfarthing-dist/pf/brownfield/cli.py +0 -130
  824. package/pennyfarthing-dist/pf/cli.py +0 -354
  825. package/pennyfarthing-dist/pf/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  826. package/pennyfarthing-dist/pf/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  827. package/pennyfarthing-dist/pf/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  828. package/pennyfarthing-dist/pf/common/__init__.py +0 -48
  829. package/pennyfarthing-dist/pf/common/__pycache__/__init__.cpython-314.pyc +0 -0
  830. package/pennyfarthing-dist/pf/common/__pycache__/config.cpython-314.pyc +0 -0
  831. package/pennyfarthing-dist/pf/common/__pycache__/output.cpython-314.pyc +0 -0
  832. package/pennyfarthing-dist/pf/common/__pycache__/pr_config.cpython-314.pyc +0 -0
  833. package/pennyfarthing-dist/pf/common/__pycache__/themes.cpython-314.pyc +0 -0
  834. package/pennyfarthing-dist/pf/common/config.py +0 -119
  835. package/pennyfarthing-dist/pf/common/themes.py +0 -253
  836. package/pennyfarthing-dist/pf/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  837. package/pennyfarthing-dist/pf/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  838. package/pennyfarthing-dist/pf/complexity/__pycache__/models.cpython-314.pyc +0 -0
  839. package/pennyfarthing-dist/pf/config.py +0 -21
  840. package/pennyfarthing-dist/pf/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  841. package/pennyfarthing-dist/pf/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  842. package/pennyfarthing-dist/pf/context.py +0 -413
  843. package/pennyfarthing-dist/pf/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  844. package/pennyfarthing-dist/pf/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  845. package/pennyfarthing-dist/pf/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  846. package/pennyfarthing-dist/pf/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  847. package/pennyfarthing-dist/pf/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  848. package/pennyfarthing-dist/pf/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  849. package/pennyfarthing-dist/pf/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  850. package/pennyfarthing-dist/pf/epic/__pycache__/__init__.cpython-314.pyc +0 -0
  851. package/pennyfarthing-dist/pf/epic/__pycache__/cli.cpython-314.pyc +0 -0
  852. package/pennyfarthing-dist/pf/git/hooks_installer.py +0 -151
  853. package/pennyfarthing-dist/pf/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
  854. package/pennyfarthing-dist/pf/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  855. package/pennyfarthing-dist/pf/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  856. package/pennyfarthing-dist/pf/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  857. package/pennyfarthing-dist/pf/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  858. package/pennyfarthing-dist/pf/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  859. package/pennyfarthing-dist/pf/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  860. package/pennyfarthing-dist/pf/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  861. package/pennyfarthing-dist/pf/handoff/gate_file.py +0 -105
  862. package/pennyfarthing-dist/pf/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  863. package/pennyfarthing-dist/pf/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  864. package/pennyfarthing-dist/pf/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  865. package/pennyfarthing-dist/pf/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  866. package/pennyfarthing-dist/pf/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  867. package/pennyfarthing-dist/pf/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  868. package/pennyfarthing-dist/pf/hooks/__init__.py +0 -442
  869. package/pennyfarthing-dist/pf/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  870. package/pennyfarthing-dist/pf/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  871. package/pennyfarthing-dist/pf/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  872. package/pennyfarthing-dist/pf/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  873. package/pennyfarthing-dist/pf/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  874. package/pennyfarthing-dist/pf/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  875. package/pennyfarthing-dist/pf/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  876. package/pennyfarthing-dist/pf/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  877. package/pennyfarthing-dist/pf/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  878. package/pennyfarthing-dist/pf/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  879. package/pennyfarthing-dist/pf/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  880. package/pennyfarthing-dist/pf/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  881. package/pennyfarthing-dist/pf/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  882. package/pennyfarthing-dist/pf/hooks/cyclist_pretooluse.py +0 -129
  883. package/pennyfarthing-dist/pf/hooks/session_start.py +0 -294
  884. package/pennyfarthing-dist/pf/hooks/statusline.py +0 -429
  885. package/pennyfarthing-dist/pf/hooks.py +0 -32
  886. package/pennyfarthing-dist/pf/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  887. package/pennyfarthing-dist/pf/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  888. package/pennyfarthing-dist/pf/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  889. package/pennyfarthing-dist/pf/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  890. package/pennyfarthing-dist/pf/jira/__init__.py +0 -97
  891. package/pennyfarthing-dist/pf/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  892. package/pennyfarthing-dist/pf/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  893. package/pennyfarthing-dist/pf/jira/__pycache__/claim.cpython-314.pyc +0 -0
  894. package/pennyfarthing-dist/pf/jira/__pycache__/cli.cpython-314.pyc +0 -0
  895. package/pennyfarthing-dist/pf/jira/__pycache__/client.cpython-314.pyc +0 -0
  896. package/pennyfarthing-dist/pf/jira/__pycache__/create.cpython-314.pyc +0 -0
  897. package/pennyfarthing-dist/pf/jira/__pycache__/epic.cpython-314.pyc +0 -0
  898. package/pennyfarthing-dist/pf/jira/__pycache__/operations.cpython-314.pyc +0 -0
  899. package/pennyfarthing-dist/pf/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  900. package/pennyfarthing-dist/pf/jira/__pycache__/story.cpython-314.pyc +0 -0
  901. package/pennyfarthing-dist/pf/jira/__pycache__/sync.cpython-314.pyc +0 -0
  902. package/pennyfarthing-dist/pf/jira/claim.py +0 -232
  903. package/pennyfarthing-dist/pf/jira/cli.py +0 -362
  904. package/pennyfarthing-dist/pf/jira/client.py +0 -802
  905. package/pennyfarthing-dist/pf/jira/reconcile.py +0 -276
  906. package/pennyfarthing-dist/pf/jira/story.py +0 -221
  907. package/pennyfarthing-dist/pf/jira/sync.py +0 -350
  908. package/pennyfarthing-dist/pf/jira_bidirectional_sync.py +0 -37
  909. package/pennyfarthing-dist/pf/jira_epic_creation.py +0 -30
  910. package/pennyfarthing-dist/pf/jira_sync.py +0 -36
  911. package/pennyfarthing-dist/pf/jira_sync_story.py +0 -30
  912. package/pennyfarthing-dist/pf/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  913. package/pennyfarthing-dist/pf/launch/__pycache__/cli.cpython-314.pyc +0 -0
  914. package/pennyfarthing-dist/pf/migration/__init__.py +0 -39
  915. package/pennyfarthing-dist/pf/migration/__main__.py +0 -10
  916. package/pennyfarthing-dist/pf/migration/cli.py +0 -304
  917. package/pennyfarthing-dist/pf/output.py +0 -37
  918. package/pennyfarthing-dist/pf/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  919. package/pennyfarthing-dist/pf/prime/__pycache__/cli.cpython-314.pyc +0 -0
  920. package/pennyfarthing-dist/pf/prime/__pycache__/loader.cpython-314.pyc +0 -0
  921. package/pennyfarthing-dist/pf/prime/__pycache__/models.cpython-314.pyc +0 -0
  922. package/pennyfarthing-dist/pf/prime/__pycache__/persona.cpython-314.pyc +0 -0
  923. package/pennyfarthing-dist/pf/prime/__pycache__/session.cpython-314.pyc +0 -0
  924. package/pennyfarthing-dist/pf/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  925. package/pennyfarthing-dist/pf/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  926. package/pennyfarthing-dist/pf/prime/cli.py +0 -662
  927. package/pennyfarthing-dist/pf/prime/loader.py +0 -308
  928. package/pennyfarthing-dist/pf/prime/persona.py +0 -311
  929. package/pennyfarthing-dist/pf/prime/workflow.py +0 -317
  930. package/pennyfarthing-dist/pf/session/__pycache__/__init__.cpython-314.pyc +0 -0
  931. package/pennyfarthing-dist/pf/session/__pycache__/cli.cpython-314.pyc +0 -0
  932. package/pennyfarthing-dist/pf/settings/__pycache__/__init__.cpython-314.pyc +0 -0
  933. package/pennyfarthing-dist/pf/settings/__pycache__/cli.cpython-314.pyc +0 -0
  934. package/pennyfarthing-dist/pf/settings/__pycache__/settings.cpython-314.pyc +0 -0
  935. package/pennyfarthing-dist/pf/settings/settings.py +0 -134
  936. package/pennyfarthing-dist/pf/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  937. package/pennyfarthing-dist/pf/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  938. package/pennyfarthing-dist/pf/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  939. package/pennyfarthing-dist/pf/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  940. package/pennyfarthing-dist/pf/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  941. package/pennyfarthing-dist/pf/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  942. package/pennyfarthing-dist/pf/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  943. package/pennyfarthing-dist/pf/sprint/__pycache__/status.cpython-314.pyc +0 -0
  944. package/pennyfarthing-dist/pf/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  945. package/pennyfarthing-dist/pf/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  946. package/pennyfarthing-dist/pf/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  947. package/pennyfarthing-dist/pf/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  948. package/pennyfarthing-dist/pf/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  949. package/pennyfarthing-dist/pf/sprint/__pycache__/work.cpython-314.pyc +0 -0
  950. package/pennyfarthing-dist/pf/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  951. package/pennyfarthing-dist/pf/sprint/archive.py +0 -164
  952. package/pennyfarthing-dist/pf/sprint/cli.py +0 -2021
  953. package/pennyfarthing-dist/pf/sprint/loader.py +0 -441
  954. package/pennyfarthing-dist/pf/sprint/status.py +0 -121
  955. package/pennyfarthing-dist/pf/sprint/story_finish.py +0 -239
  956. package/pennyfarthing-dist/pf/sprint/story_update.py +0 -222
  957. package/pennyfarthing-dist/pf/sprint/yaml_io.py +0 -433
  958. package/pennyfarthing-dist/pf/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  959. package/pennyfarthing-dist/pf/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  960. package/pennyfarthing-dist/pf/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  961. package/pennyfarthing-dist/pf/tests/conftest.py +0 -105
  962. package/pennyfarthing-dist/pf/tests/test_108_1_gate_migration.py +0 -540
  963. package/pennyfarthing-dist/pf/tests/test_108_2_remove_handoff_fallback.py +0 -339
  964. package/pennyfarthing-dist/pf/tests/test_cli_modules.py +0 -241
  965. package/pennyfarthing-dist/pf/tests/test_codemarkers.py +0 -687
  966. package/pennyfarthing-dist/pf/tests/test_confidence_sm_evaluation.py +0 -253
  967. package/pennyfarthing-dist/pf/tests/test_confidence_sm_gate.py +0 -316
  968. package/pennyfarthing-dist/pf/tests/test_jira_package.py +0 -331
  969. package/pennyfarthing-dist/pf/tests/test_package_structure.py +0 -359
  970. package/pennyfarthing-dist/pf/tests/test_resolve_gate_file_field.py +0 -460
  971. package/pennyfarthing-dist/pf/tests/test_sprint_panel.py +0 -610
  972. package/pennyfarthing-dist/pf/theme/__main__.py +0 -6
  973. package/pennyfarthing-dist/pf/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  974. package/pennyfarthing-dist/pf/theme/__pycache__/cli.cpython-314.pyc +0 -0
  975. package/pennyfarthing-dist/pf/theme/cli.py +0 -310
  976. package/pennyfarthing-dist/pf/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  977. package/pennyfarthing-dist/pf/validate/__pycache__/cli.cpython-314.pyc +0 -0
  978. package/pennyfarthing-dist/pf/validate/adapters/agent.py +0 -239
  979. package/pennyfarthing-dist/pf/validate/adapters/skill_command.py +0 -491
  980. package/pennyfarthing-dist/pf/validate/adapters/tandem_awareness.py +0 -254
  981. package/pennyfarthing-dist/pf/validate/adapters/team_mode.py +0 -323
  982. package/pennyfarthing-dist/pf/validate/adapters/workflow.py +0 -403
  983. package/pennyfarthing-dist/pf/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  984. package/pennyfarthing-dist/pf/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  985. package/pennyfarthing-dist/pf/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  986. package/pennyfarthing-dist/pf/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  987. package/pennyfarthing-dist/pf/workflow/__pycache__/state.cpython-314.pyc +0 -0
  988. package/pennyfarthing-dist/pf/workflow/cli.py +0 -1101
  989. package/pennyfarthing-dist/scripts/core/pf.sh +0 -5
  990. package/pennyfarthing-dist/scripts/lib/background-tasks.sh +0 -177
  991. package/pennyfarthing-dist/scripts/lib/run-pf.sh +0 -44
  992. package/pennyfarthing-dist/skills/pf-permissions/skill.md +0 -157
  993. package/pennyfarthing-dist/templates/persona-config.yaml.template +0 -22
  994. package/scripts/postinstall.cjs +0 -34
  995. /package/pennyfarthing-dist/{pf → src/pf}/README.md +0 -0
  996. /package/pennyfarthing-dist/{pf → src/pf}/bc/__init__.py +0 -0
  997. /package/pennyfarthing-dist/{pf → src/pf}/bc/split.py +0 -0
  998. /package/pennyfarthing-dist/{pf → src/pf}/bellmode_hook.py +0 -0
  999. /package/pennyfarthing-dist/{pf → src/pf}/bikerack/__init__.py +0 -0
  1000. /package/pennyfarthing-dist/{pf → src/pf}/bikerack/__main__.py +0 -0
  1001. /package/pennyfarthing-dist/{pf → src/pf}/bikerack/cli.py +0 -0
  1002. /package/pennyfarthing-dist/{pf → src/pf}/bikerack/diffs_panel.py +0 -0
  1003. /package/pennyfarthing-dist/{pf → src/pf}/bikerack/events.py +0 -0
  1004. /package/pennyfarthing-dist/{pf → src/pf}/bikerack/git_panel.py +0 -0
  1005. /package/pennyfarthing-dist/{pf → src/pf}/bmad/__init__.py +0 -0
  1006. /package/pennyfarthing-dist/{pf → src/pf}/brownfield/__init__.py +0 -0
  1007. /package/pennyfarthing-dist/{pf → src/pf}/brownfield/discover.py +0 -0
  1008. /package/pennyfarthing-dist/{pf → src/pf}/codemarkers/__init__.py +0 -0
  1009. /package/pennyfarthing-dist/{pf → src/pf}/codemarkers/__main__.py +0 -0
  1010. /package/pennyfarthing-dist/{pf → src/pf}/codemarkers/analyze.py +0 -0
  1011. /package/pennyfarthing-dist/{pf → src/pf}/codemarkers/cli.py +0 -0
  1012. /package/pennyfarthing-dist/{pf → src/pf}/codemarkers/formatters.py +0 -0
  1013. /package/pennyfarthing-dist/{pf → src/pf}/codemarkers/models.py +0 -0
  1014. /package/pennyfarthing-dist/{pf → src/pf}/common/output.py +0 -0
  1015. /package/pennyfarthing-dist/{pf → src/pf}/common/pr_config.py +0 -0
  1016. /package/pennyfarthing-dist/{pf → src/pf}/complexity/__init__.py +0 -0
  1017. /package/pennyfarthing-dist/{pf → src/pf}/complexity/__main__.py +0 -0
  1018. /package/pennyfarthing-dist/{pf → src/pf}/complexity/analyze.py +0 -0
  1019. /package/pennyfarthing-dist/{pf → src/pf}/complexity/cli.py +0 -0
  1020. /package/pennyfarthing-dist/{pf → src/pf}/complexity/formatters.py +0 -0
  1021. /package/pennyfarthing-dist/{pf → src/pf}/complexity/models.py +0 -0
  1022. /package/pennyfarthing-dist/{pf → src/pf}/consultation/__init__.py +0 -0
  1023. /package/pennyfarthing-dist/{pf → src/pf}/consultation/cli.py +0 -0
  1024. /package/pennyfarthing-dist/{pf → src/pf}/consultation/dialogue_manager.py +0 -0
  1025. /package/pennyfarthing-dist/{pf → src/pf}/deadcode/__init__.py +0 -0
  1026. /package/pennyfarthing-dist/{pf → src/pf}/deadcode/__main__.py +0 -0
  1027. /package/pennyfarthing-dist/{pf → src/pf}/deadcode/analyze.py +0 -0
  1028. /package/pennyfarthing-dist/{pf → src/pf}/deadcode/cli.py +0 -0
  1029. /package/pennyfarthing-dist/{pf → src/pf}/deadcode/formatters.py +0 -0
  1030. /package/pennyfarthing-dist/{pf → src/pf}/deadcode/models.py +0 -0
  1031. /package/pennyfarthing-dist/{pf → src/pf}/dependencies/__init__.py +0 -0
  1032. /package/pennyfarthing-dist/{pf → src/pf}/dependencies/__main__.py +0 -0
  1033. /package/pennyfarthing-dist/{pf → src/pf}/dependencies/analyze.py +0 -0
  1034. /package/pennyfarthing-dist/{pf → src/pf}/dependencies/cli.py +0 -0
  1035. /package/pennyfarthing-dist/{pf → src/pf}/dependencies/formatters.py +0 -0
  1036. /package/pennyfarthing-dist/{pf → src/pf}/dependencies/models.py +0 -0
  1037. /package/pennyfarthing-dist/{pf → src/pf}/epic/__init__.py +0 -0
  1038. /package/pennyfarthing-dist/{pf → src/pf}/epic/cli.py +0 -0
  1039. /package/pennyfarthing-dist/{pf → src/pf}/gate/__init__.py +0 -0
  1040. /package/pennyfarthing-dist/{pf → src/pf}/gate/cli.py +0 -0
  1041. /package/pennyfarthing-dist/{pf → src/pf}/gate/validate.py +0 -0
  1042. /package/pennyfarthing-dist/{pf → src/pf}/git/__init__.py +0 -0
  1043. /package/pennyfarthing-dist/{pf → src/pf}/git/create_branches.py +0 -0
  1044. /package/pennyfarthing-dist/{pf → src/pf}/git/repos.py +0 -0
  1045. /package/pennyfarthing-dist/{pf → src/pf}/git/status_all.py +0 -0
  1046. /package/pennyfarthing-dist/{pf → src/pf}/git/worktree.py +0 -0
  1047. /package/pennyfarthing-dist/{pf → src/pf}/git_group/__init__.py +0 -0
  1048. /package/pennyfarthing-dist/{pf → src/pf}/git_group/cli.py +0 -0
  1049. /package/pennyfarthing-dist/{pf → src/pf}/handoff/__init__.py +0 -0
  1050. /package/pennyfarthing-dist/{pf → src/pf}/handoff/cli.py +0 -0
  1051. /package/pennyfarthing-dist/{pf → src/pf}/handoff/complete_phase.py +0 -0
  1052. /package/pennyfarthing-dist/{pf → src/pf}/handoff/gate_runner.py +0 -0
  1053. /package/pennyfarthing-dist/{pf → src/pf}/handoff/marker.py +0 -0
  1054. /package/pennyfarthing-dist/{pf → src/pf}/handoff/phase_check.py +0 -0
  1055. /package/pennyfarthing-dist/{pf → src/pf}/handoff/resolve_gate.py +0 -0
  1056. /package/pennyfarthing-dist/{pf → src/pf}/healthscore/__init__.py +0 -0
  1057. /package/pennyfarthing-dist/{pf → src/pf}/healthscore/__main__.py +0 -0
  1058. /package/pennyfarthing-dist/{pf → src/pf}/healthscore/analyze.py +0 -0
  1059. /package/pennyfarthing-dist/{pf → src/pf}/healthscore/cli.py +0 -0
  1060. /package/pennyfarthing-dist/{pf → src/pf}/healthscore/formatters.py +0 -0
  1061. /package/pennyfarthing-dist/{pf → src/pf}/healthscore/models.py +0 -0
  1062. /package/pennyfarthing-dist/{pf → src/pf}/hooks/bell_mode.py +0 -0
  1063. /package/pennyfarthing-dist/{pf → src/pf}/hooks/cli.py +0 -0
  1064. /package/pennyfarthing-dist/{pf → src/pf}/hooks/context_breaker.py +0 -0
  1065. /package/pennyfarthing-dist/{pf → src/pf}/hooks/context_warning.py +0 -0
  1066. /package/pennyfarthing-dist/{pf → src/pf}/hooks/cyclist-pretooluse-hook.sh +0 -0
  1067. /package/pennyfarthing-dist/{pf → src/pf}/hooks/pre_edit_check.py +0 -0
  1068. /package/pennyfarthing-dist/{pf → src/pf}/hooks/reflector_check.py +0 -0
  1069. /package/pennyfarthing-dist/{pf → src/pf}/hooks/schema_validation.py +0 -0
  1070. /package/pennyfarthing-dist/{pf → src/pf}/hooks/session_stop.py +0 -0
  1071. /package/pennyfarthing-dist/{pf → src/pf}/hooks/sprint_yaml_validation.py +0 -0
  1072. /package/pennyfarthing-dist/{pf → src/pf}/hotspots/__init__.py +0 -0
  1073. /package/pennyfarthing-dist/{pf → src/pf}/hotspots/__main__.py +0 -0
  1074. /package/pennyfarthing-dist/{pf → src/pf}/hotspots/analyze.py +0 -0
  1075. /package/pennyfarthing-dist/{pf → src/pf}/hotspots/cli.py +0 -0
  1076. /package/pennyfarthing-dist/{pf → src/pf}/hotspots/formatters.py +0 -0
  1077. /package/pennyfarthing-dist/{pf → src/pf}/hotspots/models.py +0 -0
  1078. /package/pennyfarthing-dist/{pf → src/pf}/jira/__main__.py +0 -0
  1079. /package/pennyfarthing-dist/{pf → src/pf}/jira/bidirectional.py +0 -0
  1080. /package/pennyfarthing-dist/{pf → src/pf}/jira/create.py +0 -0
  1081. /package/pennyfarthing-dist/{pf → src/pf}/jira/epic.py +0 -0
  1082. /package/pennyfarthing-dist/{pf → src/pf}/jira/operations.py +0 -0
  1083. /package/pennyfarthing-dist/{pf → src/pf}/launch/__init__.py +0 -0
  1084. /package/pennyfarthing-dist/{pf → src/pf}/launch/cli.py +0 -0
  1085. /package/pennyfarthing-dist/{pf → src/pf}/migration/session.py +0 -0
  1086. /package/pennyfarthing-dist/{pf → src/pf}/migration/skill.py +0 -0
  1087. /package/pennyfarthing-dist/{pf → src/pf}/migration/step.py +0 -0
  1088. /package/pennyfarthing-dist/{pf → src/pf}/migration/validate.py +0 -0
  1089. /package/pennyfarthing-dist/{pf/session → src/pf/package}/__init__.py +0 -0
  1090. /package/pennyfarthing-dist/{pf → src/pf}/patch_mode.py +0 -0
  1091. /package/pennyfarthing-dist/{pf → src/pf}/preflight/__init__.py +0 -0
  1092. /package/pennyfarthing-dist/{pf → src/pf}/preflight/__main__.py +0 -0
  1093. /package/pennyfarthing-dist/{pf → src/pf}/preflight/cli.py +0 -0
  1094. /package/pennyfarthing-dist/{pf → src/pf}/preflight/finish.py +0 -0
  1095. /package/pennyfarthing-dist/{pf → src/pf}/pretooluse_hook.py +0 -0
  1096. /package/pennyfarthing-dist/{pf → src/pf}/prime/__init__.py +0 -0
  1097. /package/pennyfarthing-dist/{pf → src/pf}/prime/__main__.py +0 -0
  1098. /package/pennyfarthing-dist/{pf → src/pf}/prime/heatmap.py +0 -0
  1099. /package/pennyfarthing-dist/{pf → src/pf}/prime/models.py +0 -0
  1100. /package/pennyfarthing-dist/{pf → src/pf}/prime/session.py +0 -0
  1101. /package/pennyfarthing-dist/{pf → src/pf}/prime/tiers.py +0 -0
  1102. /package/pennyfarthing-dist/{pf → src/pf}/prime/version_sentinel.py +0 -0
  1103. /package/pennyfarthing-dist/{pf/settings → src/pf/release}/__init__.py +0 -0
  1104. /package/pennyfarthing-dist/{pf → src/pf}/schema_validation_hook.py +0 -0
  1105. /package/pennyfarthing-dist/{pf/validate/adapters → src/pf/session}/__init__.py +0 -0
  1106. /package/pennyfarthing-dist/{pf → src/pf}/session/cli.py +0 -0
  1107. /package/pennyfarthing-dist/{pf → src/pf}/session_start_hook.py +0 -0
  1108. /package/pennyfarthing-dist/{pf → src/pf}/settings/cli.py +0 -0
  1109. /package/pennyfarthing-dist/{pf → src/pf}/sprint/__init__.py +0 -0
  1110. /package/pennyfarthing-dist/{pf → src/pf}/sprint/__main__.py +0 -0
  1111. /package/pennyfarthing-dist/{pf → src/pf}/sprint/archive_epic.py +0 -0
  1112. /package/pennyfarthing-dist/{pf → src/pf}/sprint/epic_add.py +0 -0
  1113. /package/pennyfarthing-dist/{pf → src/pf}/sprint/epic_update.py +0 -0
  1114. /package/pennyfarthing-dist/{pf → src/pf}/sprint/import_epic.py +0 -0
  1115. /package/pennyfarthing-dist/{pf → src/pf}/sprint/story_add.py +0 -0
  1116. /package/pennyfarthing-dist/{pf → src/pf}/sprint/validate_cmd.py +0 -0
  1117. /package/pennyfarthing-dist/{pf → src/pf}/sprint/validator.py +0 -0
  1118. /package/pennyfarthing-dist/{pf → src/pf}/sprint/work.py +0 -0
  1119. /package/pennyfarthing-dist/{pf → src/pf}/story/__init__.py +0 -0
  1120. /package/pennyfarthing-dist/{pf → src/pf}/story/__main__.py +0 -0
  1121. /package/pennyfarthing-dist/{pf → src/pf}/story/cli.py +0 -0
  1122. /package/pennyfarthing-dist/{pf → src/pf}/story/create.py +0 -0
  1123. /package/pennyfarthing-dist/{pf → src/pf}/story/size.py +0 -0
  1124. /package/pennyfarthing-dist/{pf → src/pf}/story/template.py +0 -0
  1125. /package/pennyfarthing-dist/{pf → src/pf}/swebench.py +0 -0
  1126. /package/pennyfarthing-dist/{pf → src/pf}/tests/__init__.py +0 -0
  1127. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_archive_epic.py +0 -0
  1128. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_bc.py +0 -0
  1129. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_bikerack.py +0 -0
  1130. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_brownfield.py +0 -0
  1131. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_cli_normalization.py +0 -0
  1132. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_common.py +0 -0
  1133. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_dialogue_manager.py +0 -0
  1134. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_epic_shard_validation.py +0 -0
  1135. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_gate_file_resolution.py +0 -0
  1136. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_gate_runner.py +0 -0
  1137. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_git_utils.py +0 -0
  1138. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_handoff_cli.py +0 -0
  1139. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_handoff_e2e.py +0 -0
  1140. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_healthscore.py +0 -0
  1141. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_patch_mode.py +0 -0
  1142. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_prime.py +0 -0
  1143. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_sprint_package.py +0 -0
  1144. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_sprint_validator.py +0 -0
  1145. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_story_add.py +0 -0
  1146. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_story_package.py +0 -0
  1147. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_story_update.py +0 -0
  1148. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_tiers.py +0 -0
  1149. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_token_counting.py +0 -0
  1150. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_topology_loader.py +0 -0
  1151. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_tui_focus.py +0 -0
  1152. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_tui_panel_persistence.py +0 -0
  1153. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_validate_cmd.py +0 -0
  1154. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_version_sentinel.py +0 -0
  1155. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_workflow_check.py +0 -0
  1156. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_workflow_list_team.py +0 -0
  1157. /package/pennyfarthing-dist/{pf → src/pf}/tests/test_yaml_io.py +0 -0
  1158. /package/pennyfarthing-dist/{pf → src/pf}/theme/__init__.py +0 -0
  1159. /package/pennyfarthing-dist/{pf → src/pf}/validate/__init__.py +0 -0
  1160. /package/pennyfarthing-dist/{pf → src/pf}/validate/adapters/schema.py +0 -0
  1161. /package/pennyfarthing-dist/{pf → src/pf}/validate/adapters/sprint.py +0 -0
  1162. /package/pennyfarthing-dist/{pf → src/pf}/validate/cli.py +0 -0
  1163. /package/pennyfarthing-dist/{pf → src/pf}/welcome_hook.py +0 -0
  1164. /package/pennyfarthing-dist/{pf → src/pf}/workflow/__init__.py +0 -0
  1165. /package/pennyfarthing-dist/{pf → src/pf}/workflow/helpers.py +0 -0
  1166. /package/pennyfarthing-dist/{pf → src/pf}/workflow/scale.py +0 -0
  1167. /package/pennyfarthing-dist/{pf → src/pf}/workflow/state.py +0 -0
  1168. /package/pennyfarthing-dist/{pf → src/pf}/workflow/team_lifecycle.py +0 -0
@@ -1,326 +0,0 @@
1
- /**
2
- * ThemePalette Component
3
- *
4
- * A dropdown component for quick theme switching between color presets.
5
- * Story MSSCI-12768 - Color Palette System
6
- *
7
- * Features:
8
- * - Popover menu with presets grouped by variant (dark/light)
9
- * - Searchable preset list via Command input
10
- * - 4-swatch visual preview (bg, bgSecondary, text, accent)
11
- * - Keyboard navigation (handled by Popover + Command primitives)
12
- * - ARIA attributes for accessibility
13
- */
14
-
15
- import React, { useMemo, useState } from 'react';
16
- import { Check, ChevronsUpDown } from 'lucide-react';
17
- import { getPresetIds, getPreset } from '../../utils/color-presets';
18
- import { cn } from '@/lib/utils';
19
- import { Button } from '@/components/ui/button';
20
- import { Popover, PopoverTrigger, PopoverContent } from '@/components/ui/popover';
21
- import {
22
- Command,
23
- CommandInput,
24
- CommandList,
25
- CommandGroup,
26
- CommandItem,
27
- CommandEmpty,
28
- } from '@/components/ui/command';
29
- import './ThemePalette.css';
30
-
31
- // =============================================================================
32
- // Types
33
- // =============================================================================
34
-
35
- export interface ThemePaletteProps {
36
- currentPreset: string;
37
- onSelect?: (presetId: string) => void;
38
- className?: string;
39
- }
40
-
41
- export interface RenderThemePaletteOptions {
42
- currentPreset: string;
43
- onSelect?: (presetId: string) => void;
44
- }
45
-
46
- // =============================================================================
47
- // Helpers
48
- // =============================================================================
49
-
50
- interface GroupedPresets {
51
- dark: string[];
52
- light: string[];
53
- }
54
-
55
- function groupPresetsByVariant(): GroupedPresets {
56
- const ids = getPresetIds();
57
- const dark: string[] = [];
58
- const light: string[] = [];
59
-
60
- for (const id of ids) {
61
- const preset = getPreset(id);
62
- if (!preset) continue;
63
- if (preset.variant === 'light') {
64
- light.push(id);
65
- } else {
66
- dark.push(id);
67
- }
68
- }
69
-
70
- dark.sort((a, b) => (getPreset(a)?.name || '').localeCompare(getPreset(b)?.name || ''));
71
- light.sort((a, b) => (getPreset(a)?.name || '').localeCompare(getPreset(b)?.name || ''));
72
-
73
- return { dark, light };
74
- }
75
-
76
- // =============================================================================
77
- // Swatch rendering
78
- // =============================================================================
79
-
80
- function PresetSwatches({ presetId }: { presetId: string }) {
81
- const preset = getPreset(presetId);
82
- if (!preset) return null;
83
-
84
- return (
85
- <div className="preset-swatches">
86
- <span
87
- className="preset-swatch"
88
- style={{ backgroundColor: preset.colors.bgPrimary }}
89
- title="Background"
90
- />
91
- <span
92
- className="preset-swatch"
93
- style={{ backgroundColor: preset.colors.bgSecondary }}
94
- title="Surface"
95
- />
96
- <span
97
- className="preset-swatch"
98
- style={{ backgroundColor: preset.colors.textPrimary }}
99
- title="Text"
100
- />
101
- <span
102
- className="preset-swatch"
103
- style={{ backgroundColor: preset.colors.accent }}
104
- title="Accent"
105
- />
106
- </div>
107
- );
108
- }
109
-
110
- // =============================================================================
111
- // ThemePalette Component
112
- // =============================================================================
113
-
114
- export function ThemePalette({ currentPreset, onSelect, className = '' }: ThemePaletteProps) {
115
- const [open, setOpen] = useState(false);
116
- const grouped = useMemo(() => groupPresetsByVariant(), []);
117
- const currentPresetData = getPreset(currentPreset);
118
-
119
- const handleSelect = (presetId: string) => {
120
- onSelect?.(presetId);
121
- setOpen(false);
122
- };
123
-
124
- return (
125
- <Popover open={open} onOpenChange={setOpen}>
126
- <PopoverTrigger asChild>
127
- <Button
128
- variant="outline"
129
- className={cn('theme-palette-button', className)}
130
- aria-label={`Select theme, current: ${currentPresetData?.name || currentPreset}`}
131
- >
132
- <span className="theme-palette-current">
133
- {currentPresetData && (
134
- <span
135
- className="preset-swatch"
136
- style={{ backgroundColor: currentPresetData.colors.bgPrimary }}
137
- />
138
- )}
139
- <span className="theme-palette-name">
140
- {currentPresetData?.name || currentPreset}
141
- </span>
142
- </span>
143
- <ChevronsUpDown className="theme-palette-chevron" />
144
- </Button>
145
- </PopoverTrigger>
146
- <PopoverContent className="theme-palette-popover p-0" align="start">
147
- <Command>
148
- <CommandInput placeholder="Search themes..." />
149
- <CommandList>
150
- <CommandEmpty>No theme found.</CommandEmpty>
151
- <CommandGroup heading={`Dark (${grouped.dark.length})`}>
152
- {grouped.dark.map((id) => {
153
- const preset = getPreset(id);
154
- if (!preset) return null;
155
- const isActive = id === currentPreset;
156
- return (
157
- <CommandItem
158
- key={id}
159
- value={preset.name}
160
- onSelect={() => handleSelect(id)}
161
- data-preset-id={id}
162
- >
163
- <PresetSwatches presetId={id} />
164
- <span className="preset-name">{preset.name}</span>
165
- <Check
166
- className={cn(
167
- 'preset-check-icon ml-auto',
168
- isActive ? 'opacity-100' : 'opacity-0'
169
- )}
170
- />
171
- </CommandItem>
172
- );
173
- })}
174
- </CommandGroup>
175
- <CommandGroup heading={`Light (${grouped.light.length})`}>
176
- {grouped.light.map((id) => {
177
- const preset = getPreset(id);
178
- if (!preset) return null;
179
- const isActive = id === currentPreset;
180
- return (
181
- <CommandItem
182
- key={id}
183
- value={preset.name}
184
- onSelect={() => handleSelect(id)}
185
- data-preset-id={id}
186
- >
187
- <PresetSwatches presetId={id} />
188
- <span className="preset-name">{preset.name}</span>
189
- <Check
190
- className={cn(
191
- 'preset-check-icon ml-auto',
192
- isActive ? 'opacity-100' : 'opacity-0'
193
- )}
194
- />
195
- </CommandItem>
196
- );
197
- })}
198
- </CommandGroup>
199
- </CommandList>
200
- </Command>
201
- </PopoverContent>
202
- </Popover>
203
- );
204
- }
205
-
206
- // =============================================================================
207
- // Render Function (for vanilla JS usage)
208
- // =============================================================================
209
-
210
- export function renderThemePalette(
211
- container: HTMLElement,
212
- options: RenderThemePaletteOptions
213
- ): void {
214
- const { currentPreset, onSelect } = options;
215
-
216
- const wrapper = document.createElement('div');
217
- wrapper.className = 'theme-palette';
218
-
219
- const button = document.createElement('button');
220
- button.className = 'theme-palette-button';
221
- const preset = getPreset(currentPreset);
222
- button.setAttribute('aria-label', `Select theme, current: ${preset?.name || currentPreset}`);
223
- button.setAttribute('aria-expanded', 'false');
224
- button.setAttribute('aria-haspopup', 'listbox');
225
-
226
- button.innerHTML = `
227
- <span class="theme-palette-current">
228
- ${preset ? `<span class="preset-swatch" style="background-color: ${preset.colors.bgPrimary}"></span>` : ''}
229
- <span class="theme-palette-name">${preset?.name || currentPreset}</span>
230
- </span>
231
- <span class="theme-palette-chevron" aria-hidden="true">&#x25BC;</span>
232
- `;
233
-
234
- const menu = document.createElement('div');
235
- menu.className = 'theme-palette-menu';
236
- menu.setAttribute('role', 'listbox');
237
- menu.setAttribute('aria-label', 'Available themes');
238
-
239
- const grouped = groupPresetsByVariant();
240
-
241
- const renderGroup = (ids: string[], label: string) => {
242
- const header = document.createElement('div');
243
- header.className = 'preset-group-header';
244
- header.setAttribute('role', 'presentation');
245
- header.textContent = `${label} (${ids.length})`;
246
- menu.appendChild(header);
247
-
248
- ids.forEach((id) => {
249
- const p = getPreset(id);
250
- if (!p) return;
251
-
252
- const option = document.createElement('button');
253
- option.className = `theme-palette-option ${id === currentPreset ? 'active' : ''}`;
254
- option.setAttribute('role', 'option');
255
- option.setAttribute('aria-selected', id === currentPreset ? 'true' : 'false');
256
- option.setAttribute('data-preset-id', id);
257
- option.tabIndex = -1;
258
-
259
- option.innerHTML = `
260
- <div class="preset-swatches">
261
- <span class="preset-swatch" style="background-color: ${p.colors.bgPrimary}" title="Background"></span>
262
- <span class="preset-swatch" style="background-color: ${p.colors.bgSecondary}" title="Surface"></span>
263
- <span class="preset-swatch" style="background-color: ${p.colors.textPrimary}" title="Text"></span>
264
- <span class="preset-swatch" style="background-color: ${p.colors.accent}" title="Accent"></span>
265
- </div>
266
- <span class="preset-name">${p.name}</span>
267
- ${id === currentPreset ? '<span class="preset-check" aria-hidden="true">&#x2713;</span>' : ''}
268
- `;
269
-
270
- option.addEventListener('click', () => {
271
- onSelect?.(id);
272
- menu.classList.remove('open');
273
- button.setAttribute('aria-expanded', 'false');
274
- });
275
-
276
- menu.appendChild(option);
277
- });
278
- };
279
-
280
- renderGroup(grouped.dark, 'Dark');
281
- renderGroup(grouped.light, 'Light');
282
-
283
- // Toggle menu
284
- button.addEventListener('click', () => {
285
- const isOpen = menu.classList.toggle('open');
286
- button.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
287
- });
288
-
289
- // Close on click outside
290
- document.addEventListener('click', (e) => {
291
- if (!wrapper.contains(e.target as Node)) {
292
- menu.classList.remove('open');
293
- button.setAttribute('aria-expanded', 'false');
294
- }
295
- });
296
-
297
- // Close on escape
298
- document.addEventListener('keydown', (e) => {
299
- if (e.key === 'Escape' && menu.classList.contains('open')) {
300
- menu.classList.remove('open');
301
- button.setAttribute('aria-expanded', 'false');
302
- }
303
- });
304
-
305
- // Keyboard navigation
306
- menu.addEventListener('keydown', (e) => {
307
- const options = Array.from(menu.querySelectorAll('.theme-palette-option'));
308
- const focusedIdx = options.findIndex((el) => el === document.activeElement);
309
-
310
- if (e.key === 'ArrowDown') {
311
- e.preventDefault();
312
- const nextIndex = (focusedIdx + 1) % options.length;
313
- (options[nextIndex] as HTMLElement).focus();
314
- } else if (e.key === 'ArrowUp') {
315
- e.preventDefault();
316
- const prevIndex = (focusedIdx - 1 + options.length) % options.length;
317
- (options[prevIndex] as HTMLElement).focus();
318
- }
319
- });
320
-
321
- wrapper.appendChild(button);
322
- wrapper.appendChild(menu);
323
- container.appendChild(wrapper);
324
- }
325
-
326
- export default ThemePalette;
@@ -1,115 +0,0 @@
1
- /**
2
- * BackgroundPanel - Display background tasks
3
- *
4
- * Story MSSCI-12717 - React Migration
5
- * Story MSSCI-12784 - Timer updates in real-time with accurate completion times
6
- *
7
- * Timer strategy:
8
- * - On mount: fetch all tasks from backend (accurate snapshot)
9
- * - Pending tasks: estimate elapsed from startedAt, update via interval
10
- * - Completed tasks: use authoritative durationMs from backend
11
- * - IPC events provide real-time updates with accurate timing
12
- */
13
-
14
- import React, { useState, useEffect } from 'react';
15
- import { Button } from '@/components/ui/button';
16
- import { useBackgroundTasks, BackgroundTask } from '../../hooks/useBackgroundTasks';
17
-
18
- /**
19
- * Format milliseconds into human-readable duration
20
- */
21
- function formatDuration(ms: number): string {
22
- if (ms < 1000) return `${ms}ms`;
23
- if (ms < 60000) return `${Math.floor(ms / 1000)}s`;
24
- return `${Math.floor(ms / 60000)}m`;
25
- }
26
-
27
- function TaskItem({ task, tick }: { task: BackgroundTask; tick: number }): React.ReactElement {
28
- const isPending = task.status === 'pending';
29
- const statusIcon = isPending ? '...' : (task.success ? 'v' : 'x');
30
- const statusClass = `task-item task-${task.status}${task.success === false ? ' task-error' : ''}`;
31
-
32
- // For completed tasks, use authoritative durationMs from backend
33
- // For pending tasks, estimate from startedAt (tick triggers re-render)
34
- let elapsedStr: string;
35
- if (task.status === 'completed' && task.durationMs !== undefined) {
36
- // Completed: use accurate duration from backend
37
- elapsedStr = formatDuration(task.durationMs);
38
- } else {
39
- // Pending: estimate elapsed time (tick forces recalculation)
40
- void tick; // Intentionally used to trigger re-render
41
- elapsedStr = formatDuration(Date.now() - task.startedAt);
42
- }
43
-
44
- return (
45
- <div className={statusClass} data-testid={`task-${task.taskId}`}>
46
- <span className="task-status">{statusIcon}</span>
47
- <div className="task-content">
48
- <span className="task-description">{task.description}</span>
49
- <span className="task-type">{task.subagentType}</span>
50
- </div>
51
- <span className="task-elapsed">{elapsedStr}</span>
52
- </div>
53
- );
54
- }
55
-
56
- export function BackgroundPanel(): React.ReactElement {
57
- const { tasks, pendingCount, completedCount, clearCompleted } = useBackgroundTasks();
58
- const [tick, setTick] = useState(0);
59
-
60
- // Timer for live updates - only runs when there are pending tasks and panel is visible
61
- useEffect(() => {
62
- if (pendingCount === 0) return;
63
-
64
- const interval = setInterval(() => {
65
- setTick(t => t + 1);
66
- }, 1000);
67
-
68
- return () => clearInterval(interval);
69
- }, [pendingCount]);
70
-
71
- if (tasks.length === 0) {
72
- return (
73
- <div className="background-panel empty" data-testid="background-panel">
74
- <div className="placeholder">No subagent tasks</div>
75
- </div>
76
- );
77
- }
78
-
79
- // Sort: pending first, then by start time (newest first)
80
- const sortedTasks = [...tasks].sort((a, b) => {
81
- if (a.status === 'pending' && b.status !== 'pending') return -1;
82
- if (a.status !== 'pending' && b.status === 'pending') return 1;
83
- return b.startedAt - a.startedAt;
84
- });
85
-
86
- return (
87
- <div className="background-panel" data-testid="background-panel">
88
- <div className="panel-header">
89
- <span className="task-counts">
90
- {pendingCount > 0 && <span className="pending-count">{pendingCount} running</span>}
91
- {completedCount > 0 && <span className="completed-count">{completedCount} done</span>}
92
- </span>
93
- {completedCount > 0 && (
94
- <Button
95
- variant="ghost"
96
- size="sm"
97
- type="button"
98
- className="clear-button"
99
- onClick={clearCompleted}
100
- >
101
- Clear
102
- </Button>
103
- )}
104
- </div>
105
-
106
- <div className="task-list">
107
- {sortedTasks.map(task => (
108
- <TaskItem key={task.taskId} task={task} tick={tick} />
109
- ))}
110
- </div>
111
- </div>
112
- );
113
- }
114
-
115
- export default BackgroundPanel;
@@ -1,27 +0,0 @@
1
- import * as React from "react"
2
- import * as SwitchPrimitives from "@radix-ui/react-switch"
3
-
4
- import { cn } from "@/lib/utils"
5
-
6
- const Switch = React.forwardRef<
7
- React.ElementRef<typeof SwitchPrimitives.Root>,
8
- React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>
9
- >(({ className, ...props }, ref) => (
10
- <SwitchPrimitives.Root
11
- className={cn(
12
- "cyclist-switch peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
13
- className
14
- )}
15
- {...props}
16
- ref={ref}
17
- >
18
- <SwitchPrimitives.Thumb
19
- className={cn(
20
- "cyclist-switch-thumb pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
21
- )}
22
- />
23
- </SwitchPrimitives.Root>
24
- ))
25
- Switch.displayName = SwitchPrimitives.Root.displayName
26
-
27
- export { Switch }
@@ -1,131 +0,0 @@
1
- /**
2
- * useBackgroundTasks Hook
3
- *
4
- * React hook for subscribing to background task notifications.
5
- * Story MSSCI-12717 - React Migration
6
- * Story MSSCI-12784 - Timer accuracy: fetch on mount, IPC for updates
7
- * Story MSSCI-12860 - IPC to WebSocket Migration (Phase 1)
8
- *
9
- * Uses WebSocket /ws/background-tasks for real-time updates.
10
- */
11
-
12
- import { useState, useEffect, useCallback, useRef } from 'react';
13
-
14
- export interface BackgroundTask {
15
- taskId: string;
16
- description: string;
17
- subagentType: string;
18
- startedAt: number;
19
- completedAt?: number;
20
- durationMs?: number;
21
- status: 'pending' | 'completed';
22
- success?: boolean;
23
- output?: string;
24
- error?: string;
25
- isBackground?: boolean;
26
- }
27
-
28
- interface UseBackgroundTasksResult {
29
- tasks: BackgroundTask[];
30
- pendingCount: number;
31
- completedCount: number;
32
- clearCompleted: () => void;
33
- }
34
-
35
- /** WebSocket message format from /ws/background-tasks */
36
- interface BackgroundTaskMessage {
37
- type: 'init' | 'task:started' | 'task:completed';
38
- tasks?: BackgroundTask[];
39
- task?: BackgroundTask;
40
- }
41
-
42
- export function useBackgroundTasks(): UseBackgroundTasksResult {
43
- const [tasks, setTasks] = useState<BackgroundTask[]>([]);
44
- const wsRef = useRef<WebSocket | null>(null);
45
- const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout>>();
46
-
47
- useEffect(() => {
48
- const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
49
- const wsUrl = `${protocol}//${window.location.host}/ws/background-tasks`;
50
-
51
- const connect = () => {
52
- try {
53
- wsRef.current = new WebSocket(wsUrl);
54
-
55
- wsRef.current.onopen = () => {
56
- console.debug('[useBackgroundTasks] WebSocket connected');
57
- };
58
-
59
- wsRef.current.onmessage = (event) => {
60
- try {
61
- const msg = JSON.parse(event.data) as BackgroundTaskMessage;
62
-
63
- switch (msg.type) {
64
- case 'init':
65
- // Initial snapshot of all tasks
66
- if (msg.tasks) {
67
- setTasks(msg.tasks);
68
- }
69
- break;
70
-
71
- case 'task:started':
72
- // New task started
73
- if (msg.task) {
74
- setTasks(prev => {
75
- // Avoid duplicates
76
- if (prev.some(t => t.taskId === msg.task!.taskId)) {
77
- return prev;
78
- }
79
- return [...prev, msg.task!];
80
- });
81
- }
82
- break;
83
-
84
- case 'task:completed':
85
- // Task completed (includes accurate durationMs from backend)
86
- if (msg.task) {
87
- setTasks(prev => prev.map(t =>
88
- t.taskId === msg.task!.taskId ? { ...t, ...msg.task! } : t
89
- ));
90
- }
91
- break;
92
- }
93
- } catch (err) {
94
- console.error('[useBackgroundTasks] Failed to parse message:', err);
95
- }
96
- };
97
-
98
- wsRef.current.onclose = () => {
99
- console.debug('[useBackgroundTasks] WebSocket closed, reconnecting...');
100
- reconnectTimeoutRef.current = setTimeout(connect, 2000);
101
- };
102
-
103
- wsRef.current.onerror = (err) => {
104
- console.error('[useBackgroundTasks] WebSocket error:', err);
105
- };
106
- } catch (err) {
107
- console.error('[useBackgroundTasks] WebSocket init failed:', err);
108
- }
109
- };
110
-
111
- connect();
112
-
113
- return () => {
114
- if (reconnectTimeoutRef.current) {
115
- clearTimeout(reconnectTimeoutRef.current);
116
- }
117
- if (wsRef.current) {
118
- wsRef.current.close();
119
- }
120
- };
121
- }, []);
122
-
123
- const clearCompleted = useCallback(() => {
124
- setTasks(prev => prev.filter(t => t.status === 'pending'));
125
- }, []);
126
-
127
- const pendingCount = tasks.filter(t => t.status === 'pending').length;
128
- const completedCount = tasks.filter(t => t.status === 'completed').length;
129
-
130
- return { tasks, pendingCount, completedCount, clearCompleted };
131
- }