@pennyfarthing/cyclist 10.3.1 → 11.0.0-alpha.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 (271) hide show
  1. package/dist/api/agent-load.d.ts +1 -2
  2. package/dist/api/agent-load.d.ts.map +1 -1
  3. package/dist/api/agent-load.js +2 -123
  4. package/dist/api/agent-load.js.map +1 -1
  5. package/dist/api/audit-log.d.ts +1 -17
  6. package/dist/api/audit-log.d.ts.map +1 -1
  7. package/dist/api/audit-log.js +2 -162
  8. package/dist/api/audit-log.js.map +1 -1
  9. package/dist/api/background-tasks.d.ts +1 -26
  10. package/dist/api/background-tasks.d.ts.map +1 -1
  11. package/dist/api/background-tasks.js +2 -55
  12. package/dist/api/background-tasks.js.map +1 -1
  13. package/dist/api/bell.d.ts +1 -18
  14. package/dist/api/bell.d.ts.map +1 -1
  15. package/dist/api/bell.js +2 -33
  16. package/dist/api/bell.js.map +1 -1
  17. package/dist/api/code-markers.d.ts +1 -8
  18. package/dist/api/code-markers.d.ts.map +1 -1
  19. package/dist/api/code-markers.js +2 -61
  20. package/dist/api/code-markers.js.map +1 -1
  21. package/dist/api/complexity.d.ts +1 -2
  22. package/dist/api/complexity.d.ts.map +1 -1
  23. package/dist/api/complexity.js +2 -46
  24. package/dist/api/complexity.js.map +1 -1
  25. package/dist/api/context.d.ts +1 -37
  26. package/dist/api/context.d.ts.map +1 -1
  27. package/dist/api/context.js +2 -143
  28. package/dist/api/context.js.map +1 -1
  29. package/dist/api/dead-code.d.ts +1 -2
  30. package/dist/api/dead-code.d.ts.map +1 -1
  31. package/dist/api/dead-code.js +2 -69
  32. package/dist/api/dead-code.js.map +1 -1
  33. package/dist/api/dependencies.d.ts +1 -2
  34. package/dist/api/dependencies.d.ts.map +1 -1
  35. package/dist/api/dependencies.js +2 -42
  36. package/dist/api/dependencies.js.map +1 -1
  37. package/dist/api/evaluation.d.ts +1 -19
  38. package/dist/api/evaluation.d.ts.map +1 -1
  39. package/dist/api/evaluation.js +2 -127
  40. package/dist/api/evaluation.js.map +1 -1
  41. package/dist/api/file-browser.d.ts +1 -8
  42. package/dist/api/file-browser.d.ts.map +1 -1
  43. package/dist/api/file-browser.js +2 -114
  44. package/dist/api/file-browser.js.map +1 -1
  45. package/dist/api/git.d.ts +1 -46
  46. package/dist/api/git.d.ts.map +1 -1
  47. package/dist/api/git.js +2 -354
  48. package/dist/api/git.js.map +1 -1
  49. package/dist/api/health-score.d.ts +1 -2
  50. package/dist/api/health-score.d.ts.map +1 -1
  51. package/dist/api/health-score.js +2 -46
  52. package/dist/api/health-score.js.map +1 -1
  53. package/dist/api/hook-request.d.ts +1 -40
  54. package/dist/api/hook-request.d.ts.map +1 -1
  55. package/dist/api/hook-request.js +2 -277
  56. package/dist/api/hook-request.js.map +1 -1
  57. package/dist/api/hotspots.d.ts +1 -2
  58. package/dist/api/hotspots.d.ts.map +1 -1
  59. package/dist/api/hotspots.js +2 -61
  60. package/dist/api/hotspots.js.map +1 -1
  61. package/dist/api/identity.d.ts +1 -16
  62. package/dist/api/identity.d.ts.map +1 -1
  63. package/dist/api/identity.js +2 -78
  64. package/dist/api/identity.js.map +1 -1
  65. package/dist/api/index.d.ts +1 -34
  66. package/dist/api/index.d.ts.map +1 -1
  67. package/dist/api/index.js +2 -44
  68. package/dist/api/index.js.map +1 -1
  69. package/dist/api/mode.d.ts +1 -22
  70. package/dist/api/mode.d.ts.map +1 -1
  71. package/dist/api/mode.js +2 -37
  72. package/dist/api/mode.js.map +1 -1
  73. package/dist/api/otlp.d.ts +1 -2
  74. package/dist/api/otlp.d.ts.map +1 -1
  75. package/dist/api/otlp.js +2 -46
  76. package/dist/api/otlp.js.map +1 -1
  77. package/dist/api/permissions.d.ts +1 -15
  78. package/dist/api/permissions.d.ts.map +1 -1
  79. package/dist/api/permissions.js +2 -66
  80. package/dist/api/permissions.js.map +1 -1
  81. package/dist/api/persona.d.ts +1 -8
  82. package/dist/api/persona.d.ts.map +1 -1
  83. package/dist/api/persona.js +2 -67
  84. package/dist/api/persona.js.map +1 -1
  85. package/dist/api/portrait.d.ts +1 -5
  86. package/dist/api/portrait.d.ts.map +1 -1
  87. package/dist/api/portrait.js +2 -27
  88. package/dist/api/portrait.js.map +1 -1
  89. package/dist/api/settings.d.ts +1 -53
  90. package/dist/api/settings.d.ts.map +1 -1
  91. package/dist/api/settings.js +2 -464
  92. package/dist/api/settings.js.map +1 -1
  93. package/dist/api/spans.d.ts +1 -16
  94. package/dist/api/spans.d.ts.map +1 -1
  95. package/dist/api/spans.js +2 -244
  96. package/dist/api/spans.js.map +1 -1
  97. package/dist/api/stats.d.ts +1 -12
  98. package/dist/api/stats.d.ts.map +1 -1
  99. package/dist/api/stats.js +2 -84
  100. package/dist/api/stats.js.map +1 -1
  101. package/dist/api/story.d.ts +1 -2
  102. package/dist/api/story.d.ts.map +1 -1
  103. package/dist/api/story.js +2 -14
  104. package/dist/api/story.js.map +1 -1
  105. package/dist/api/telemetry.d.ts +1 -18
  106. package/dist/api/telemetry.d.ts.map +1 -1
  107. package/dist/api/telemetry.js +2 -164
  108. package/dist/api/telemetry.js.map +1 -1
  109. package/dist/api/theme-agents.d.ts +1 -60
  110. package/dist/api/theme-agents.d.ts.map +1 -1
  111. package/dist/api/theme-agents.js +2 -213
  112. package/dist/api/theme-agents.js.map +1 -1
  113. package/dist/api/todos.d.ts +1 -32
  114. package/dist/api/todos.d.ts.map +1 -1
  115. package/dist/api/todos.js +2 -43
  116. package/dist/api/todos.js.map +1 -1
  117. package/dist/api/token-stats.d.ts +1 -7
  118. package/dist/api/token-stats.d.ts.map +1 -1
  119. package/dist/api/token-stats.js +2 -35
  120. package/dist/api/token-stats.js.map +1 -1
  121. package/dist/api/welcome.d.ts +1 -21
  122. package/dist/api/welcome.d.ts.map +1 -1
  123. package/dist/api/welcome.js +2 -34
  124. package/dist/api/welcome.js.map +1 -1
  125. package/dist/env.d.ts +6 -0
  126. package/dist/env.d.ts.map +1 -0
  127. package/dist/env.js +10 -0
  128. package/dist/env.js.map +1 -0
  129. package/dist/focus.d.ts +53 -0
  130. package/dist/focus.d.ts.map +1 -0
  131. package/dist/focus.js +122 -0
  132. package/dist/focus.js.map +1 -0
  133. package/dist/menu-builder.d.ts.map +1 -1
  134. package/dist/menu-builder.js +0 -1
  135. package/dist/menu-builder.js.map +1 -1
  136. package/dist/public/css/react.css +1 -1
  137. package/dist/public/js/react/react.js +51 -59
  138. package/dist/server.d.ts +16 -85
  139. package/dist/server.d.ts.map +1 -1
  140. package/dist/server.js +38 -409
  141. package/dist/server.js.map +1 -1
  142. package/dist/sprint-data.d.ts +1 -1
  143. package/dist/sprint-data.d.ts.map +1 -1
  144. package/dist/sprint-data.js +29 -8
  145. package/dist/sprint-data.js.map +1 -1
  146. package/dist/websocket.d.ts +2 -0
  147. package/dist/websocket.d.ts.map +1 -1
  148. package/dist/websocket.js +45 -78
  149. package/dist/websocket.js.map +1 -1
  150. package/package.json +33 -35
  151. package/portraits/hogans-heroes/large/burkhalter-35312.png +0 -0
  152. package/portraits/hogans-heroes/large/carter-34352.png +0 -0
  153. package/portraits/hogans-heroes/large/hochstetter-45314.png +0 -0
  154. package/portraits/hogans-heroes/large/hogan-44541.png +0 -0
  155. package/portraits/hogans-heroes/large/kinch-35241.png +0 -0
  156. package/portraits/hogans-heroes/large/klink-23434.png +0 -0
  157. package/portraits/hogans-heroes/large/lebeau-45443.png +0 -0
  158. package/portraits/hogans-heroes/large/marya-53543.png +0 -0
  159. package/portraits/hogans-heroes/large/newkirk-54432.png +0 -0
  160. package/portraits/hogans-heroes/large/schultz-42453.png +0 -0
  161. package/portraits/hogans-heroes/large/underground-55131.png +0 -0
  162. package/portraits/hogans-heroes/medium/burkhalter-35312.png +0 -0
  163. package/portraits/hogans-heroes/medium/carter-34352.png +0 -0
  164. package/portraits/hogans-heroes/medium/hochstetter-45314.png +0 -0
  165. package/portraits/hogans-heroes/medium/hogan-44541.png +0 -0
  166. package/portraits/hogans-heroes/medium/kinch-35241.png +0 -0
  167. package/portraits/hogans-heroes/medium/klink-23434.png +0 -0
  168. package/portraits/hogans-heroes/medium/lebeau-45443.png +0 -0
  169. package/portraits/hogans-heroes/medium/marya-53543.png +0 -0
  170. package/portraits/hogans-heroes/medium/newkirk-54432.png +0 -0
  171. package/portraits/hogans-heroes/medium/schultz-42453.png +0 -0
  172. package/portraits/hogans-heroes/medium/underground-55131.png +0 -0
  173. package/portraits/monty-python/large/announcer-44441.png +0 -0
  174. package/portraits/monty-python/large/arguer-35412.png +0 -0
  175. package/portraits/monty-python/large/bicycle-repair-man-35241.png +0 -0
  176. package/portraits/monty-python/large/colonel-35423.png +0 -0
  177. package/portraits/monty-python/large/counsellor-45341.png +0 -0
  178. package/portraits/monty-python/large/gumbys-23524.png +0 -0
  179. package/portraits/monty-python/large/nudge-43533.png +0 -0
  180. package/portraits/monty-python/large/praline-45413.png +0 -0
  181. package/portraits/monty-python/large/silly-walks-55322.png +0 -0
  182. package/portraits/monty-python/large/wensleydale-54451.png +0 -0
  183. package/portraits/monty-python/large/xim-nez-43534.png +0 -0
  184. package/portraits/monty-python/medium/announcer-44441.png +0 -0
  185. package/portraits/monty-python/medium/arguer-35412.png +0 -0
  186. package/portraits/monty-python/medium/bicycle-repair-man-35241.png +0 -0
  187. package/portraits/monty-python/medium/colonel-35423.png +0 -0
  188. package/portraits/monty-python/medium/counsellor-45341.png +0 -0
  189. package/portraits/monty-python/medium/gumbys-23524.png +0 -0
  190. package/portraits/monty-python/medium/nudge-43533.png +0 -0
  191. package/portraits/monty-python/medium/praline-45413.png +0 -0
  192. package/portraits/monty-python/medium/silly-walks-55322.png +0 -0
  193. package/portraits/monty-python/medium/wensleydale-54451.png +0 -0
  194. package/portraits/monty-python/medium/xim-nez-43534.png +0 -0
  195. package/portraits/stephen-king/large/andy-55231.png +0 -0
  196. package/portraits/stephen-king/large/christine-25112.png +0 -0
  197. package/portraits/stephen-king/large/danny-53243.png +0 -0
  198. package/portraits/stephen-king/large/flagg-55311.png +0 -0
  199. package/portraits/stephen-king/large/gaunt-54421.png +0 -0
  200. package/portraits/stephen-king/large/jack-44224.png +0 -0
  201. package/portraits/stephen-king/large/johnny-44353.png +0 -0
  202. package/portraits/stephen-king/large/margaret-15415.png +0 -0
  203. package/portraits/stephen-king/large/paul-45233.png +0 -0
  204. package/portraits/stephen-king/large/pennywise-54411.png +0 -0
  205. package/portraits/stephen-king/large/roland-35121.png +0 -0
  206. package/portraits/stephen-king/medium/andy-55231.png +0 -0
  207. package/portraits/stephen-king/medium/christine-25112.png +0 -0
  208. package/portraits/stephen-king/medium/danny-53243.png +0 -0
  209. package/portraits/stephen-king/medium/flagg-55311.png +0 -0
  210. package/portraits/stephen-king/medium/gaunt-54421.png +0 -0
  211. package/portraits/stephen-king/medium/jack-44224.png +0 -0
  212. package/portraits/stephen-king/medium/johnny-44353.png +0 -0
  213. package/portraits/stephen-king/medium/margaret-15415.png +0 -0
  214. package/portraits/stephen-king/medium/paul-45233.png +0 -0
  215. package/portraits/stephen-king/medium/pennywise-54411.png +0 -0
  216. package/portraits/stephen-king/medium/roland-35121.png +0 -0
  217. package/src/public/App.tsx +21 -5
  218. package/src/public/components/BikeRackIndex.tsx +0 -1
  219. package/src/public/components/BikeRackWorkspace.tsx +86 -11
  220. package/src/public/components/DockviewWorkspace.tsx +19 -8
  221. package/src/public/components/StandalonePanel.tsx +1 -3
  222. package/src/public/components/panel-registry.ts +3 -1
  223. package/src/public/components/panels/AuditLogPanel.tsx +28 -4
  224. package/src/public/components/panels/GitPanel.tsx +1 -20
  225. package/src/public/components/panels/SettingsPanel.tsx +0 -1
  226. package/src/public/components/panels/SprintPanel.tsx +32 -1
  227. package/src/public/components/panels/index.ts +0 -2
  228. package/src/public/hooks/useFocusPanel.ts +137 -0
  229. package/src/public/hooks/useLayoutPersistence.ts +8 -5
  230. package/src/public/styles/dockview-theme.css +1 -84
  231. package/src/public/styles/tailwind.css +27 -32
  232. package/src/public/utils/slash-commands.ts +122 -98
  233. package/LICENSE +0 -14
  234. package/dist/hooks/cyclist-pretooluse-hook.d.ts +0 -60
  235. package/dist/hooks/cyclist-pretooluse-hook.d.ts.map +0 -1
  236. package/dist/hooks/cyclist-pretooluse-hook.js +0 -57
  237. package/dist/hooks/cyclist-pretooluse-hook.js.map +0 -1
  238. package/dist/hooks/pretooluse-hook.d.ts +0 -89
  239. package/dist/hooks/pretooluse-hook.d.ts.map +0 -1
  240. package/dist/hooks/pretooluse-hook.js +0 -235
  241. package/dist/hooks/pretooluse-hook.js.map +0 -1
  242. package/dist/notification-sound.d.ts +0 -59
  243. package/dist/notification-sound.d.ts.map +0 -1
  244. package/dist/notification-sound.js +0 -219
  245. package/dist/notification-sound.js.map +0 -1
  246. package/dist/plugin-loader.test.d.ts +0 -17
  247. package/dist/plugin-loader.test.d.ts.map +0 -1
  248. package/dist/plugin-loader.test.js +0 -407
  249. package/dist/plugin-loader.test.js.map +0 -1
  250. package/portraits/star-trek-tng/large/beverly-44352.png +0 -0
  251. package/portraits/star-trek-tng/large/data-55241.png +0 -0
  252. package/portraits/star-trek-tng/large/deanna-43353.png +0 -0
  253. package/portraits/star-trek-tng/large/geordi-54342.png +0 -0
  254. package/portraits/star-trek-tng/large/jean-luc-45342.png +0 -0
  255. package/portraits/star-trek-tng/large/kathryn-45332.png +0 -0
  256. package/portraits/star-trek-tng/large/miles-35342.png +0 -0
  257. package/portraits/star-trek-tng/large/q-53521.png +0 -0
  258. package/portraits/star-trek-tng/large/spock-45231.png +0 -0
  259. package/portraits/star-trek-tng/large/troi-44352.png +0 -0
  260. package/portraits/star-trek-tng/medium/beverly-44352.png +0 -0
  261. package/portraits/star-trek-tng/medium/data-55241.png +0 -0
  262. package/portraits/star-trek-tng/medium/deanna-43353.png +0 -0
  263. package/portraits/star-trek-tng/medium/geordi-54342.png +0 -0
  264. package/portraits/star-trek-tng/medium/jean-luc-45342.png +0 -0
  265. package/portraits/star-trek-tng/medium/kathryn-45332.png +0 -0
  266. package/portraits/star-trek-tng/medium/miles-35342.png +0 -0
  267. package/portraits/star-trek-tng/medium/q-53521.png +0 -0
  268. package/portraits/star-trek-tng/medium/spock-45231.png +0 -0
  269. package/portraits/star-trek-tng/medium/troi-44352.png +0 -0
  270. package/src/public/components/panels/TTYPanel.tsx +0 -299
  271. package/src/public/types/electron.d.ts +0 -18
@@ -33,37 +33,21 @@ export const SLASH_COMMANDS: SlashCommand[] = [
33
33
  "description": "Add files to context"
34
34
  },
35
35
  {
36
- "name": "/architect",
37
- "description": "System Architect - Technical design and architecture"
38
- },
39
- {
40
- "name": "/ba",
41
- "description": "Business Analyst - Requirements discovery and stakeholder analysis"
36
+ "name": "/benchmark",
37
+ "description": "Compare an agent's performance against a stored baseline"
42
38
  },
43
39
  {
44
- "name": "/brainstorming",
45
- "description": "Structured problem-solving brainstorm session"
40
+ "name": "/benchmark-control",
41
+ "description": "Create control baseline for a scenario (shortcut for /benchmark control <agent>)"
46
42
  },
47
43
  {
48
44
  "name": "/bug",
49
45
  "description": "Report a bug"
50
46
  },
51
- {
52
- "name": "/check",
53
- "description": "Run quality gates (lint, type check, tests) before handoff"
54
- },
55
- {
56
- "name": "/chore",
57
- "description": "Quick commit for small changes without full git-cleanup ceremony"
58
- },
59
47
  {
60
48
  "name": "/clear",
61
49
  "description": "Clear conversation history"
62
50
  },
63
- {
64
- "name": "/close-epic",
65
- "description": "Close an epic - verify completion, update status, and archive context"
66
- },
67
51
  {
68
52
  "name": "/compact",
69
53
  "description": "Toggle compact mode"
@@ -72,42 +56,14 @@ export const SLASH_COMMANDS: SlashCommand[] = [
72
56
  "name": "/config",
73
57
  "description": "Show configuration"
74
58
  },
75
- {
76
- "name": "/continue-session",
77
- "description": "Resume work from a saved checkpoint after context circuit breaker"
78
- },
79
59
  {
80
60
  "name": "/cost",
81
61
  "description": "Show session cost"
82
62
  },
83
- {
84
- "name": "/create-branches-from-story",
85
- "description": "Create feature branches in both repos from a story"
86
- },
87
- {
88
- "name": "/dev",
89
- "description": "Developer - Feature implementation and coding"
90
- },
91
- {
92
- "name": "/devops",
93
- "description": "DevOps Engineer - Infrastructure and deployment automation"
94
- },
95
63
  {
96
64
  "name": "/doctor",
97
65
  "description": "Check system health"
98
66
  },
99
- {
100
- "name": "/fix-blocker",
101
- "description": "Quick alias for /patch - fix blocking issue during story work"
102
- },
103
- {
104
- "name": "/git-cleanup",
105
- "description": "Clean up git repos by organizing changes into proper commits/branches by initiative"
106
- },
107
- {
108
- "name": "/health-check",
109
- "description": "Check Pennyfarthing installation health and apply updates"
110
- },
111
67
  {
112
68
  "name": "/help",
113
69
  "description": "Show available commands"
@@ -116,6 +72,10 @@ export const SLASH_COMMANDS: SlashCommand[] = [
116
72
  "name": "/init",
117
73
  "description": "Initialize CLAUDE.md"
118
74
  },
75
+ {
76
+ "name": "/job-fair",
77
+ "description": "Discover which characters in a theme excel at each role"
78
+ },
119
79
  {
120
80
  "name": "/login",
121
81
  "description": "Authenticate with Anthropic"
@@ -133,136 +93,200 @@ export const SLASH_COMMANDS: SlashCommand[] = [
133
93
  "description": "Switch Claude model"
134
94
  },
135
95
  {
136
- "name": "/new-work",
96
+ "name": "/permissions",
97
+ "description": "View/edit permissions"
98
+ },
99
+ {
100
+ "name": "/pf-architect",
101
+ "description": "System Architect - Technical design and architecture"
102
+ },
103
+ {
104
+ "name": "/pf-ba",
105
+ "description": "Business Analyst - Requirements discovery and stakeholder analysis"
106
+ },
107
+ {
108
+ "name": "/pf-brainstorming",
109
+ "description": "Structured problem-solving brainstorm session"
110
+ },
111
+ {
112
+ "name": "/pf-check",
113
+ "description": "Run quality gates (lint, type check, tests) before handoff"
114
+ },
115
+ {
116
+ "name": "/pf-chore",
117
+ "description": "Quick commit for small changes without full git-cleanup ceremony"
118
+ },
119
+ {
120
+ "name": "/pf-close-epic",
121
+ "description": "Close an epic - verify completion, update status, and archive context"
122
+ },
123
+ {
124
+ "name": "/pf-continue-session",
125
+ "description": "Resume work from a saved checkpoint after context circuit breaker"
126
+ },
127
+ {
128
+ "name": "/pf-create-branches-from-story",
129
+ "description": "Create feature branches in both repos from a story"
130
+ },
131
+ {
132
+ "name": "/pf-dev",
133
+ "description": "Developer - Feature implementation and coding"
134
+ },
135
+ {
136
+ "name": "/pf-devops",
137
+ "description": "DevOps Engineer - Infrastructure and deployment automation"
138
+ },
139
+ {
140
+ "name": "/pf-fix-blocker",
141
+ "description": "Quick alias for /patch - fix blocking issue during story work"
142
+ },
143
+ {
144
+ "name": "/pf-git-cleanup",
145
+ "description": "Clean up git repos by organizing changes into proper commits/branches by initiative"
146
+ },
147
+ {
148
+ "name": "/pf-health-check",
149
+ "description": "Check Pennyfarthing installation health and apply updates"
150
+ },
151
+ {
152
+ "name": "/pf-help",
153
+ "description": "Context-aware help for Pennyfarthing commands, agents, and workflows"
154
+ },
155
+ {
156
+ "name": "/pf-new-work",
137
157
  "description": "Start the next available story from the sprint backlog"
138
158
  },
139
159
  {
140
- "name": "/orchestrator",
160
+ "name": "/pf-orchestrator",
141
161
  "description": "Orchestrator - Coordinator of all agents and meta operations"
142
162
  },
143
163
  {
144
- "name": "/parallel-work",
164
+ "name": "/pf-parallel-work",
145
165
  "description": "Start parallel work in a new worktree"
146
166
  },
147
167
  {
148
- "name": "/party-mode",
149
- "description": "Free-form creative brainstorming with all agents"
168
+ "name": "/pf-party-mode",
169
+ "description": "Creative brainstorming and multi-agent discussion"
150
170
  },
151
171
  {
152
- "name": "/patch",
172
+ "name": "/pf-patch",
153
173
  "description": "Interrupt-driven bug fix during active story work"
154
174
  },
155
175
  {
156
- "name": "/permissions",
157
- "description": "View/edit permissions"
176
+ "name": "/pf-permissions",
177
+ "description": "View and manage runtime permission grants - list, grant, revoke, or show details"
158
178
  },
159
179
  {
160
- "name": "/pm",
180
+ "name": "/pf-pm",
161
181
  "description": "Product Manager - Strategic planning and prioritization"
162
182
  },
163
183
  {
164
- "name": "/pr-comments",
165
- "description": "View PR comments"
166
- },
167
- {
168
- "name": "/prime",
184
+ "name": "/pf-prime",
169
185
  "description": "Load essential project context at agent activation"
170
186
  },
171
187
  {
172
- "name": "/release",
188
+ "name": "/pf-release",
173
189
  "description": "Interactive stepped release with verification gates"
174
190
  },
175
191
  {
176
- "name": "/repo-status",
192
+ "name": "/pf-repo-status",
177
193
  "description": "Check git status of all project repos"
178
194
  },
179
195
  {
180
- "name": "/retro",
196
+ "name": "/pf-retro",
181
197
  "description": "Facilitate a sprint retrospective"
182
198
  },
183
199
  {
184
- "name": "/review",
185
- "description": "Start code review"
186
- },
187
- {
188
- "name": "/reviewer",
200
+ "name": "/pf-reviewer",
189
201
  "description": "Code Reviewer - Critical code review and quality enforcement"
190
202
  },
191
203
  {
192
- "name": "/run-ci",
204
+ "name": "/pf-run-ci",
193
205
  "description": "Detect and run CI locally"
194
206
  },
195
207
  {
196
- "name": "/setup",
208
+ "name": "/pf-setup",
197
209
  "description": "/setup - Interactive Project Setup"
198
210
  },
199
211
  {
200
- "name": "/sm",
212
+ "name": "/pf-sm",
201
213
  "description": "Scrum Master - Story coordination and sprint management"
202
214
  },
203
215
  {
204
- "name": "/sprint",
216
+ "name": "/pf-sprint",
205
217
  "description": "Sprint status, backlog, and story management - check status, find work, archive completed stories"
206
218
  },
207
219
  {
208
- "name": "/sprint-planning",
220
+ "name": "/pf-sprint-planning",
209
221
  "description": "Facilitate sprint planning session"
210
222
  },
211
223
  {
212
- "name": "/standalone",
224
+ "name": "/pf-standalone",
213
225
  "description": "Wrap current changes into a standalone Jira story, branch, PR, and merge"
214
226
  },
215
227
  {
216
- "name": "/start-epic",
228
+ "name": "/pf-start-epic",
217
229
  "description": "Start an epic - move to current sprint and generate tech context"
218
230
  },
219
231
  {
220
- "name": "/status",
221
- "description": "Show session status"
222
- },
223
- {
224
- "name": "/sync-epic-to-jira",
232
+ "name": "/pf-sync-epic-to-jira",
225
233
  "description": "Sync Pennyfarthing epic to Jira MSSCI project using jira CLI"
226
234
  },
227
235
  {
228
- "name": "/sync-work-with-sprint",
236
+ "name": "/pf-sync-work-with-sprint",
229
237
  "description": "Sync Pennyfarthing work session with unified sprint status"
230
238
  },
231
239
  {
232
- "name": "/tea",
240
+ "name": "/pf-tea",
233
241
  "description": "Test Engineer/Architect - Test strategy and TDD"
234
242
  },
235
243
  {
236
- "name": "/tech-writer",
244
+ "name": "/pf-tech-writer",
237
245
  "description": "Technical Writer - Documentation creation and maintenance"
238
246
  },
239
247
  {
240
- "name": "/terminal-setup",
241
- "description": "Configure terminal"
242
- },
243
- {
244
- "name": "/theme",
248
+ "name": "/pf-theme",
245
249
  "description": "Manage persona themes - list, show, set, create, or interactive wizard"
246
250
  },
247
251
  {
248
- "name": "/update-domain-docs",
252
+ "name": "/pf-update-domain-docs",
249
253
  "description": "Update CLAUDE-*.md domain documentation files based on current codebase"
250
254
  },
251
255
  {
252
- "name": "/ux-designer",
256
+ "name": "/pf-ux-designer",
253
257
  "description": "UX Designer - User experience design and UI patterns"
254
258
  },
255
259
  {
256
- "name": "/vim",
257
- "description": "Toggle vim mode"
258
- },
259
- {
260
- "name": "/work",
260
+ "name": "/pf-work",
261
261
  "description": "Resume work or start new - smart entry point that picks up where you left off"
262
262
  },
263
263
  {
264
- "name": "/workflow",
264
+ "name": "/pf-workflow",
265
265
  "description": "List available workflows, show current workflow details, and switch workflows mid-session. Use when checking available workflow types (TDD, trivial, agent-docs), viewing current workflow phase, switching to a different workflow pattern, or managing BikeLane stepped workflows."
266
+ },
267
+ {
268
+ "name": "/pr-comments",
269
+ "description": "View PR comments"
270
+ },
271
+ {
272
+ "name": "/review",
273
+ "description": "Start code review"
274
+ },
275
+ {
276
+ "name": "/solo",
277
+ "description": "Run a single agent on a scenario with absolute rubric scoring"
278
+ },
279
+ {
280
+ "name": "/status",
281
+ "description": "Show session status"
282
+ },
283
+ {
284
+ "name": "/terminal-setup",
285
+ "description": "Configure terminal"
286
+ },
287
+ {
288
+ "name": "/vim",
289
+ "description": "Toggle vim mode"
266
290
  }
267
291
  ].sort((a, b) => a.name.localeCompare(b.name));
268
292
 
package/LICENSE DELETED
@@ -1,14 +0,0 @@
1
- Copyright (c) 2026 1898 & Co.
2
-
3
- All rights reserved.
4
-
5
- This software and associated documentation files (the "Software") are proprietary
6
- and confidential. No part of this Software may be reproduced, distributed, or
7
- transmitted in any form or by any means, including photocopying, recording, or
8
- other electronic or mechanical methods, without the prior written permission of
9
- the copyright holder.
10
-
11
- Unauthorized copying, modification, distribution, or use of this Software, via
12
- any medium, is strictly prohibited.
13
-
14
- For licensing inquiries, contact: 1898 & Co.
@@ -1,60 +0,0 @@
1
- /**
2
- * Cyclist PreToolUse Hook - Core Logic
3
- *
4
- * Testable module containing all hook logic. Invoked via cyclist-pretooluse-hook.sh
5
- * which calls `npx tsx` on this file, matching the .sh wrapper pattern used by
6
- * all other hooks in .claude/settings.local.json.
7
- *
8
- * Flow:
9
- * 1. Claude Code calls cyclist-pretooluse-hook.sh with tool info via stdin (JSON)
10
- * 2. Shell wrapper invokes this module via npx tsx
11
- * 3. Script reads port from .cyclist-port in project directory
12
- * 4. Script sends request to WheelHub's /api/hook-request endpoint
13
- * 5. WheelHub checks grants / shows approval modal, user decides
14
- * 6. Script receives response, outputs JSON decision to stdout
15
- * 7. Claude Code proceeds or blocks based on decision
16
- *
17
- * Per ADR-0004: All communication converges through WheelHub.
18
- *
19
- * Story: MSSCI-14320 - Update and register PreToolUse hook
20
- */
21
- export declare const DEFAULT_PORT = 7432;
22
- export declare const HOST = "127.0.0.1";
23
- export declare const TIMEOUT_MS = 120000;
24
- export declare const PORT_FILE = ".cyclist-port";
25
- export declare const LEGACY_PORT_FILE = ".cyclist-approval-port";
26
- export declare const ENDPOINT = "/api/hook-request";
27
- export interface ToolData {
28
- tool_name: string;
29
- tool_use_id: string;
30
- tool_input: Record<string, unknown>;
31
- session_id?: string;
32
- }
33
- export interface ApprovalRequest {
34
- toolName: string;
35
- toolId: string;
36
- input: Record<string, unknown>;
37
- sessionId?: string;
38
- }
39
- export interface ApprovalResponse {
40
- decision: 'allow' | 'deny' | 'ask';
41
- reason?: string;
42
- data?: Record<string, unknown>;
43
- }
44
- export interface HookOutput {
45
- hookSpecificOutput: {
46
- hookEventName: 'PreToolUse';
47
- permissionDecision: string;
48
- permissionDecisionReason: string;
49
- updatedInput?: Record<string, unknown>;
50
- };
51
- }
52
- export declare function findProjectRoot(startDir?: string): string | null;
53
- export declare function getPort(projectRoot?: string | null): number;
54
- export declare function readPortFile(filePath: string): number | null;
55
- export declare function readStdin(): Promise<ToolData>;
56
- export declare function requestApproval(toolData: ApprovalRequest, port?: number): Promise<ApprovalResponse>;
57
- export declare function buildOutput(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): HookOutput;
58
- export declare function outputDecision(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): void;
59
- export declare function main(): Promise<void>;
60
- //# sourceMappingURL=cyclist-pretooluse-hook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyclist-pretooluse-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/cyclist-pretooluse-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,IAAI,cAAc,CAAC;AAChC,eAAO,MAAM,UAAU,SAAU,CAAC;AAClC,eAAO,MAAM,SAAS,kBAAkB,CAAC;AACzC,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAM5C,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE;QAClB,aAAa,EAAE,YAAY,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,wBAAwB,EAAE,MAAM,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC;CACH;AAMD,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAED,wBAAgB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE3D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAEnD;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,UAAU,CAEZ;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,IAAI,CAEN;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C"}
@@ -1,57 +0,0 @@
1
- /**
2
- * Cyclist PreToolUse Hook - Core Logic
3
- *
4
- * Testable module containing all hook logic. Invoked via cyclist-pretooluse-hook.sh
5
- * which calls `npx tsx` on this file, matching the .sh wrapper pattern used by
6
- * all other hooks in .claude/settings.local.json.
7
- *
8
- * Flow:
9
- * 1. Claude Code calls cyclist-pretooluse-hook.sh with tool info via stdin (JSON)
10
- * 2. Shell wrapper invokes this module via npx tsx
11
- * 3. Script reads port from .cyclist-port in project directory
12
- * 4. Script sends request to WheelHub's /api/hook-request endpoint
13
- * 5. WheelHub checks grants / shows approval modal, user decides
14
- * 6. Script receives response, outputs JSON decision to stdout
15
- * 7. Claude Code proceeds or blocks based on decision
16
- *
17
- * Per ADR-0004: All communication converges through WheelHub.
18
- *
19
- * Story: MSSCI-14320 - Update and register PreToolUse hook
20
- */
21
- // =============================================================================
22
- // Constants
23
- // =============================================================================
24
- export const DEFAULT_PORT = 7432;
25
- export const HOST = '127.0.0.1';
26
- export const TIMEOUT_MS = 120_000; // 2 minutes for user to decide
27
- export const PORT_FILE = '.cyclist-port';
28
- export const LEGACY_PORT_FILE = '.cyclist-approval-port';
29
- export const ENDPOINT = '/api/hook-request';
30
- // =============================================================================
31
- // Stubs - Dev implements these to GREEN
32
- // =============================================================================
33
- export function findProjectRoot(startDir) {
34
- throw new Error('findProjectRoot not implemented');
35
- }
36
- export function getPort(projectRoot) {
37
- throw new Error('getPort not implemented');
38
- }
39
- export function readPortFile(filePath) {
40
- throw new Error('readPortFile not implemented');
41
- }
42
- export async function readStdin() {
43
- throw new Error('readStdin not implemented');
44
- }
45
- export async function requestApproval(toolData, port) {
46
- throw new Error('requestApproval not implemented');
47
- }
48
- export function buildOutput(decision, reason, updatedInput) {
49
- throw new Error('buildOutput not implemented');
50
- }
51
- export function outputDecision(decision, reason, updatedInput) {
52
- throw new Error('outputDecision not implemented');
53
- }
54
- export async function main() {
55
- throw new Error('main not implemented');
56
- }
57
- //# sourceMappingURL=cyclist-pretooluse-hook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyclist-pretooluse-hook.js","sourceRoot":"","sources":["../../src/hooks/cyclist-pretooluse-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,+BAA+B;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAmC5C,gFAAgF;AAChF,wCAAwC;AACxC,gFAAgF;AAEhF,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,WAA2B;IACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAyB,EACzB,IAAa;IAEb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,MAAc,EACd,YAA6C;IAE7C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,MAAc,EACd,YAA6C;IAE7C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,89 +0,0 @@
1
- /**
2
- * Cyclist PreToolUse Hook - Core Logic
3
- *
4
- * Testable module containing all hook logic. The companion runner script
5
- * (cyclist-pretooluse-hook.js) imports from the compiled output and invokes main().
6
- *
7
- * Flow:
8
- * 1. Claude Code calls the runner script with tool info via stdin (JSON)
9
- * 2. Script reads port from .cyclist-port in project directory
10
- * 3. Script sends request to WheelHub's /api/hook-request endpoint
11
- * 4. WheelHub checks grants / shows approval modal, user decides
12
- * 5. Script receives response, outputs JSON decision to stdout
13
- * 6. Claude Code proceeds or blocks based on decision
14
- *
15
- * Per ADR-0004: All communication converges through WheelHub.
16
- *
17
- * Story: MSSCI-14320 - Update and register PreToolUse hook
18
- */
19
- export declare const DEFAULT_PORT = 7432;
20
- export declare const HOST = "127.0.0.1";
21
- export declare const TIMEOUT_MS = 120000;
22
- export declare const PORT_FILE = ".cyclist-port";
23
- export declare const LEGACY_PORT_FILE = ".cyclist-approval-port";
24
- export declare const ENDPOINT = "/api/hook-request";
25
- export interface ToolData {
26
- tool_name: string;
27
- tool_use_id: string;
28
- tool_input: Record<string, unknown>;
29
- session_id?: string;
30
- }
31
- export interface ApprovalRequest {
32
- toolName: string;
33
- toolId: string;
34
- input: Record<string, unknown>;
35
- sessionId?: string;
36
- }
37
- export interface ApprovalResponse {
38
- decision: 'allow' | 'deny' | 'ask';
39
- reason?: string;
40
- data?: Record<string, unknown>;
41
- }
42
- export interface HookOutput {
43
- hookSpecificOutput: {
44
- hookEventName: 'PreToolUse';
45
- permissionDecision: string;
46
- permissionDecisionReason: string;
47
- updatedInput?: Record<string, unknown>;
48
- };
49
- }
50
- /**
51
- * Find the project root by looking for port files or .claude directory.
52
- * Walks up from startDir (defaults to cwd) until found or reaches filesystem root.
53
- */
54
- export declare function findProjectRoot(startDir?: string): string | null;
55
- /**
56
- * Read the WheelHub server port. Prefers .cyclist-port, falls back to
57
- * .cyclist-approval-port for migration compatibility, then default port.
58
- *
59
- * Mirrors hooks.py:get_cyclist_port() behavior.
60
- */
61
- export declare function getPort(projectRoot?: string | null): number;
62
- /**
63
- * Read a port number from a file. Returns null if file doesn't exist or is invalid.
64
- */
65
- export declare function readPortFile(filePath: string): number | null;
66
- /**
67
- * Read all stdin as JSON.
68
- */
69
- export declare function readStdin(): Promise<ToolData>;
70
- /**
71
- * Send approval request to WheelHub and wait for response.
72
- * Returns { decision: "ask" } when WheelHub is unreachable (ECONNREFUSED).
73
- */
74
- export declare function requestApproval(toolData: ApprovalRequest, port?: number): Promise<ApprovalResponse>;
75
- /**
76
- * Build the Claude Code hook output object.
77
- * MSSCI-11947: Supports updatedInput passthrough for interactive tools.
78
- */
79
- export declare function buildOutput(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): HookOutput;
80
- /**
81
- * Output decision to stdout in Claude Code hook format.
82
- */
83
- export declare function outputDecision(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): void;
84
- /**
85
- * Main hook logic. Reads stdin, sends to WheelHub, outputs decision.
86
- * MSSCI-11947: Handles data field passthrough for interactive tools.
87
- */
88
- export declare function main(): Promise<void>;
89
- //# sourceMappingURL=pretooluse-hook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pretooluse-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/pretooluse-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,IAAI,cAAc,CAAC;AAChC,eAAO,MAAM,UAAU,SAAU,CAAC;AAClC,eAAO,MAAM,SAAS,kBAAkB,CAAC;AACzC,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAM5C,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE;QAClB,aAAa,EAAE,YAAY,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,wBAAwB,EAAE,MAAM,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC;CACH;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBhE;AAMD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAmB3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB5D;AAMD;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAcnD;AAMD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CA6C3B;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,UAAU,CAcZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,IAAI,CAEN;AAMD;;;GAGG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B1C"}