@pennyfarthing/cyclist 9.2.0 → 9.4.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 (58) hide show
  1. package/dist/api/hotspots.d.ts +3 -0
  2. package/dist/api/hotspots.d.ts.map +1 -0
  3. package/dist/api/hotspots.js +54 -0
  4. package/dist/api/hotspots.js.map +1 -0
  5. package/dist/api/index.d.ts +1 -0
  6. package/dist/api/index.d.ts.map +1 -1
  7. package/dist/api/index.js +1 -0
  8. package/dist/api/index.js.map +1 -1
  9. package/dist/api/settings.d.ts +1 -1
  10. package/dist/api/settings.d.ts.map +1 -1
  11. package/dist/api/settings.js +44 -17
  12. package/dist/api/settings.js.map +1 -1
  13. package/dist/main.d.ts +4 -0
  14. package/dist/main.d.ts.map +1 -1
  15. package/dist/main.js +7 -0
  16. package/dist/main.js.map +1 -1
  17. package/dist/public/css/react.css +1 -1
  18. package/dist/public/js/react/react.js +43 -39
  19. package/dist/server.d.ts.map +1 -1
  20. package/dist/server.js +3 -1
  21. package/dist/server.js.map +1 -1
  22. package/dist/story-parser.d.ts +17 -0
  23. package/dist/story-parser.d.ts.map +1 -1
  24. package/dist/story-parser.js +183 -13
  25. package/dist/story-parser.js.map +1 -1
  26. package/dist/websocket.d.ts.map +1 -1
  27. package/dist/websocket.js +5 -4
  28. package/dist/websocket.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/public/App.tsx +2 -0
  31. package/src/public/components/ControlBar.tsx +1 -1
  32. package/src/public/components/DockviewWorkspace.tsx +4 -0
  33. package/src/public/components/FontPicker/index.tsx +118 -33
  34. package/src/public/components/FullFileTree.tsx +223 -0
  35. package/src/public/components/Message.tsx +32 -10
  36. package/src/public/components/MessageView.tsx +176 -93
  37. package/src/public/components/PersonaHeader.tsx +45 -15
  38. package/src/public/components/SubagentSpan.tsx +15 -8
  39. package/src/public/components/ThemePalette/ThemePalette.css +2 -0
  40. package/src/public/components/ToolStack.tsx +23 -13
  41. package/src/public/components/panels/AuditLogPanel.tsx +140 -66
  42. package/src/public/components/panels/ChangedPanel.tsx +30 -44
  43. package/src/public/components/panels/HotspotsPanel.tsx +365 -0
  44. package/src/public/components/panels/MessagePanel.tsx +14 -2
  45. package/src/public/components/panels/SettingsPanel.tsx +10 -10
  46. package/src/public/components/panels/WorkflowPanel.tsx +85 -12
  47. package/src/public/components/panels/index.ts +1 -0
  48. package/src/public/components/ui/switch.tsx +2 -2
  49. package/src/public/css/theme-system.css +71 -43
  50. package/src/public/hooks/useFileBrowser.ts +71 -0
  51. package/src/public/hooks/useHotspots.ts +113 -0
  52. package/src/public/hooks/useStory.ts +12 -3
  53. package/src/public/images/cyclist-dark.png +0 -0
  54. package/src/public/images/cyclist-light.png +0 -0
  55. package/src/public/styles/tailwind.css +428 -69
  56. package/src/public/types/message.ts +4 -0
  57. package/src/public/utils/slash-commands.ts +1 -1
  58. package/src/public/utils/toolStackGrouper.ts +4 -5
@@ -38,8 +38,8 @@ interface Message {
38
38
  * Rules:
39
39
  * - tool_result messages do NOT break the stack (they're paired with tool_use elsewhere)
40
40
  * - assistant/user messages DO break the stack
41
- * - Single tool_use messages are NOT grouped (returns empty array for that sequence)
42
- * - Returns array of ToolStackData, each representing 2+ consecutive tools
41
+ * - Single tool_use messages ARE grouped (consistent rendering with multi-tool stacks)
42
+ * - Returns array of ToolStackData, each representing 1+ consecutive tools
43
43
  *
44
44
  * @param messages - Array of messages to process
45
45
  * @returns Array of tool stacks (only stacks with 2+ tools)
@@ -75,8 +75,8 @@ export function groupToolsIntoStacks(messages: Message[]): ToolStackData[] {
75
75
  continue;
76
76
  } else {
77
77
  // assistant, user, or other message types break the stack
78
- // Only create stack if 2+ tools (single tools in middle render normally)
79
- if (currentTools.length >= 2) {
78
+ // Create stack for any tools (single tools also get stacked for consistent rendering)
79
+ if (currentTools.length >= 1) {
80
80
  const lastTool = currentTools[currentTools.length - 1];
81
81
  stacks.push({
82
82
  stackId: generateStableStackId(currentTools),
@@ -91,7 +91,6 @@ export function groupToolsIntoStacks(messages: Message[]): ToolStackData[] {
91
91
  }
92
92
 
93
93
  // Handle remaining tools at end of messages
94
- // At end of array: create stack even for single tool (supports streaming/active state)
95
94
  if (currentTools.length >= 1) {
96
95
  const lastTool = currentTools[currentTools.length - 1];
97
96
  stacks.push({