@pennyfarthing/cyclist 10.4.0 → 11.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.
- package/dist/api/agent-load.d.ts +1 -2
- package/dist/api/agent-load.d.ts.map +1 -1
- package/dist/api/agent-load.js +2 -123
- package/dist/api/agent-load.js.map +1 -1
- package/dist/api/audit-log.d.ts +1 -17
- package/dist/api/audit-log.d.ts.map +1 -1
- package/dist/api/audit-log.js +2 -162
- package/dist/api/audit-log.js.map +1 -1
- package/dist/api/background-tasks.d.ts +1 -26
- package/dist/api/background-tasks.d.ts.map +1 -1
- package/dist/api/background-tasks.js +2 -55
- package/dist/api/background-tasks.js.map +1 -1
- package/dist/api/bell.d.ts +1 -18
- package/dist/api/bell.d.ts.map +1 -1
- package/dist/api/bell.js +2 -33
- package/dist/api/bell.js.map +1 -1
- package/dist/api/code-markers.d.ts +1 -8
- package/dist/api/code-markers.d.ts.map +1 -1
- package/dist/api/code-markers.js +2 -61
- package/dist/api/code-markers.js.map +1 -1
- package/dist/api/complexity.d.ts +1 -2
- package/dist/api/complexity.d.ts.map +1 -1
- package/dist/api/complexity.js +2 -46
- package/dist/api/complexity.js.map +1 -1
- package/dist/api/context.d.ts +1 -37
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -143
- package/dist/api/context.js.map +1 -1
- package/dist/api/dead-code.d.ts +1 -2
- package/dist/api/dead-code.d.ts.map +1 -1
- package/dist/api/dead-code.js +2 -69
- package/dist/api/dead-code.js.map +1 -1
- package/dist/api/dependencies.d.ts +1 -2
- package/dist/api/dependencies.d.ts.map +1 -1
- package/dist/api/dependencies.js +2 -42
- package/dist/api/dependencies.js.map +1 -1
- package/dist/api/evaluation.d.ts +1 -19
- package/dist/api/evaluation.d.ts.map +1 -1
- package/dist/api/evaluation.js +2 -127
- package/dist/api/evaluation.js.map +1 -1
- package/dist/api/file-browser.d.ts +1 -8
- package/dist/api/file-browser.d.ts.map +1 -1
- package/dist/api/file-browser.js +2 -114
- package/dist/api/file-browser.js.map +1 -1
- package/dist/api/git.d.ts +1 -46
- package/dist/api/git.d.ts.map +1 -1
- package/dist/api/git.js +2 -354
- package/dist/api/git.js.map +1 -1
- package/dist/api/health-score.d.ts +1 -2
- package/dist/api/health-score.d.ts.map +1 -1
- package/dist/api/health-score.js +2 -46
- package/dist/api/health-score.js.map +1 -1
- package/dist/api/hook-request.d.ts +1 -40
- package/dist/api/hook-request.d.ts.map +1 -1
- package/dist/api/hook-request.js +2 -277
- package/dist/api/hook-request.js.map +1 -1
- package/dist/api/hotspots.d.ts +1 -2
- package/dist/api/hotspots.d.ts.map +1 -1
- package/dist/api/hotspots.js +2 -61
- package/dist/api/hotspots.js.map +1 -1
- package/dist/api/identity.d.ts +1 -16
- package/dist/api/identity.d.ts.map +1 -1
- package/dist/api/identity.js +2 -78
- package/dist/api/identity.js.map +1 -1
- package/dist/api/index.d.ts +1 -34
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -44
- package/dist/api/index.js.map +1 -1
- package/dist/api/mode.d.ts +1 -22
- package/dist/api/mode.d.ts.map +1 -1
- package/dist/api/mode.js +2 -37
- package/dist/api/mode.js.map +1 -1
- package/dist/api/otlp.d.ts +1 -2
- package/dist/api/otlp.d.ts.map +1 -1
- package/dist/api/otlp.js +2 -46
- package/dist/api/otlp.js.map +1 -1
- package/dist/api/permissions.d.ts +1 -15
- package/dist/api/permissions.d.ts.map +1 -1
- package/dist/api/permissions.js +2 -66
- package/dist/api/permissions.js.map +1 -1
- package/dist/api/persona.d.ts +1 -8
- package/dist/api/persona.d.ts.map +1 -1
- package/dist/api/persona.js +2 -67
- package/dist/api/persona.js.map +1 -1
- package/dist/api/portrait.d.ts +1 -5
- package/dist/api/portrait.d.ts.map +1 -1
- package/dist/api/portrait.js +2 -27
- package/dist/api/portrait.js.map +1 -1
- package/dist/api/settings.d.ts +1 -53
- package/dist/api/settings.d.ts.map +1 -1
- package/dist/api/settings.js +2 -464
- package/dist/api/settings.js.map +1 -1
- package/dist/api/spans.d.ts +1 -16
- package/dist/api/spans.d.ts.map +1 -1
- package/dist/api/spans.js +2 -244
- package/dist/api/spans.js.map +1 -1
- package/dist/api/stats.d.ts +1 -12
- package/dist/api/stats.d.ts.map +1 -1
- package/dist/api/stats.js +2 -84
- package/dist/api/stats.js.map +1 -1
- package/dist/api/story.d.ts +1 -2
- package/dist/api/story.d.ts.map +1 -1
- package/dist/api/story.js +2 -14
- package/dist/api/story.js.map +1 -1
- package/dist/api/telemetry.d.ts +1 -18
- package/dist/api/telemetry.d.ts.map +1 -1
- package/dist/api/telemetry.js +2 -164
- package/dist/api/telemetry.js.map +1 -1
- package/dist/api/theme-agents.d.ts +1 -60
- package/dist/api/theme-agents.d.ts.map +1 -1
- package/dist/api/theme-agents.js +2 -213
- package/dist/api/theme-agents.js.map +1 -1
- package/dist/api/todos.d.ts +1 -32
- package/dist/api/todos.d.ts.map +1 -1
- package/dist/api/todos.js +2 -43
- package/dist/api/todos.js.map +1 -1
- package/dist/api/token-stats.d.ts +1 -7
- package/dist/api/token-stats.d.ts.map +1 -1
- package/dist/api/token-stats.js +2 -35
- package/dist/api/token-stats.js.map +1 -1
- package/dist/api/welcome.d.ts +1 -21
- package/dist/api/welcome.d.ts.map +1 -1
- package/dist/api/welcome.js +2 -34
- package/dist/api/welcome.js.map +1 -1
- package/dist/bikerack.js +2 -2
- package/dist/bikerack.js.map +1 -1
- package/dist/env.d.ts +6 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +10 -0
- package/dist/env.js.map +1 -0
- package/dist/focus.d.ts +53 -0
- package/dist/focus.d.ts.map +1 -0
- package/dist/focus.js +122 -0
- package/dist/focus.js.map +1 -0
- package/dist/git-cache.d.ts +1 -0
- package/dist/git-cache.d.ts.map +1 -1
- package/dist/git-cache.js +3 -1
- package/dist/git-cache.js.map +1 -1
- package/dist/menu-builder.d.ts.map +1 -1
- package/dist/menu-builder.js +0 -1
- package/dist/menu-builder.js.map +1 -1
- package/dist/prime.d.ts +3 -3
- package/dist/prime.d.ts.map +1 -1
- package/dist/prime.js +38 -14
- package/dist/prime.js.map +1 -1
- package/dist/public/css/react.css +1 -1
- package/dist/public/js/react/react.js +53 -61
- package/dist/server.d.ts +18 -85
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +105 -405
- package/dist/server.js.map +1 -1
- package/dist/sprint-data.d.ts +1 -1
- package/dist/sprint-data.d.ts.map +1 -1
- package/dist/sprint-data.js +2 -2
- package/dist/sprint-data.js.map +1 -1
- package/dist/theme-metadata.d.ts +3 -3
- package/dist/theme-metadata.d.ts.map +1 -1
- package/dist/theme-metadata.js +4 -4
- package/dist/theme-metadata.js.map +1 -1
- package/dist/websocket.d.ts +2 -0
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +53 -75
- package/dist/websocket.js.map +1 -1
- package/package.json +2 -6
- package/portraits/hogans-heroes/large/burkhalter-35312.png +0 -0
- package/portraits/hogans-heroes/large/carter-34352.png +0 -0
- package/portraits/hogans-heroes/large/hochstetter-45314.png +0 -0
- package/portraits/hogans-heroes/large/hogan-44541.png +0 -0
- package/portraits/hogans-heroes/large/kinch-35241.png +0 -0
- package/portraits/hogans-heroes/large/klink-23434.png +0 -0
- package/portraits/hogans-heroes/large/lebeau-45443.png +0 -0
- package/portraits/hogans-heroes/large/marya-53543.png +0 -0
- package/portraits/hogans-heroes/large/newkirk-54432.png +0 -0
- package/portraits/hogans-heroes/large/schultz-42453.png +0 -0
- package/portraits/hogans-heroes/large/underground-55131.png +0 -0
- package/portraits/hogans-heroes/medium/burkhalter-35312.png +0 -0
- package/portraits/hogans-heroes/medium/carter-34352.png +0 -0
- package/portraits/hogans-heroes/medium/hochstetter-45314.png +0 -0
- package/portraits/hogans-heroes/medium/hogan-44541.png +0 -0
- package/portraits/hogans-heroes/medium/kinch-35241.png +0 -0
- package/portraits/hogans-heroes/medium/klink-23434.png +0 -0
- package/portraits/hogans-heroes/medium/lebeau-45443.png +0 -0
- package/portraits/hogans-heroes/medium/marya-53543.png +0 -0
- package/portraits/hogans-heroes/medium/newkirk-54432.png +0 -0
- package/portraits/hogans-heroes/medium/schultz-42453.png +0 -0
- package/portraits/hogans-heroes/medium/underground-55131.png +0 -0
- package/portraits/monty-python/large/announcer-44441.png +0 -0
- package/portraits/monty-python/large/arguer-35412.png +0 -0
- package/portraits/monty-python/large/bicycle-repair-man-35241.png +0 -0
- package/portraits/monty-python/large/colonel-35423.png +0 -0
- package/portraits/monty-python/large/counsellor-45341.png +0 -0
- package/portraits/monty-python/large/gumbys-23524.png +0 -0
- package/portraits/monty-python/large/nudge-43533.png +0 -0
- package/portraits/monty-python/large/praline-45413.png +0 -0
- package/portraits/monty-python/large/silly-walks-55322.png +0 -0
- package/portraits/monty-python/large/wensleydale-54451.png +0 -0
- package/portraits/monty-python/large/xim-nez-43534.png +0 -0
- package/portraits/monty-python/medium/announcer-44441.png +0 -0
- package/portraits/monty-python/medium/arguer-35412.png +0 -0
- package/portraits/monty-python/medium/bicycle-repair-man-35241.png +0 -0
- package/portraits/monty-python/medium/colonel-35423.png +0 -0
- package/portraits/monty-python/medium/counsellor-45341.png +0 -0
- package/portraits/monty-python/medium/gumbys-23524.png +0 -0
- package/portraits/monty-python/medium/nudge-43533.png +0 -0
- package/portraits/monty-python/medium/praline-45413.png +0 -0
- package/portraits/monty-python/medium/silly-walks-55322.png +0 -0
- package/portraits/monty-python/medium/wensleydale-54451.png +0 -0
- package/portraits/monty-python/medium/xim-nez-43534.png +0 -0
- package/portraits/stephen-king/large/andy-55231.png +0 -0
- package/portraits/stephen-king/large/christine-25112.png +0 -0
- package/portraits/stephen-king/large/danny-53243.png +0 -0
- package/portraits/stephen-king/large/flagg-55311.png +0 -0
- package/portraits/stephen-king/large/gaunt-54421.png +0 -0
- package/portraits/stephen-king/large/jack-44224.png +0 -0
- package/portraits/stephen-king/large/johnny-44353.png +0 -0
- package/portraits/stephen-king/large/margaret-15415.png +0 -0
- package/portraits/stephen-king/large/paul-45233.png +0 -0
- package/portraits/stephen-king/large/pennywise-54411.png +0 -0
- package/portraits/stephen-king/large/roland-35121.png +0 -0
- package/portraits/stephen-king/medium/andy-55231.png +0 -0
- package/portraits/stephen-king/medium/christine-25112.png +0 -0
- package/portraits/stephen-king/medium/danny-53243.png +0 -0
- package/portraits/stephen-king/medium/flagg-55311.png +0 -0
- package/portraits/stephen-king/medium/gaunt-54421.png +0 -0
- package/portraits/stephen-king/medium/jack-44224.png +0 -0
- package/portraits/stephen-king/medium/johnny-44353.png +0 -0
- package/portraits/stephen-king/medium/margaret-15415.png +0 -0
- package/portraits/stephen-king/medium/paul-45233.png +0 -0
- package/portraits/stephen-king/medium/pennywise-54411.png +0 -0
- package/portraits/stephen-king/medium/roland-35121.png +0 -0
- package/portraits/star-trek-tng/large/beverly-44352.png +0 -0
- package/portraits/star-trek-tng/large/data-55241.png +0 -0
- package/portraits/star-trek-tng/large/deanna-43353.png +0 -0
- package/portraits/star-trek-tng/large/geordi-54342.png +0 -0
- package/portraits/star-trek-tng/large/jean-luc-45342.png +0 -0
- package/portraits/star-trek-tng/large/kathryn-45332.png +0 -0
- package/portraits/star-trek-tng/large/miles-35342.png +0 -0
- package/portraits/star-trek-tng/large/q-53521.png +0 -0
- package/portraits/star-trek-tng/large/spock-45231.png +0 -0
- package/portraits/star-trek-tng/large/troi-44352.png +0 -0
- package/portraits/star-trek-tng/medium/beverly-44352.png +0 -0
- package/portraits/star-trek-tng/medium/data-55241.png +0 -0
- package/portraits/star-trek-tng/medium/deanna-43353.png +0 -0
- package/portraits/star-trek-tng/medium/geordi-54342.png +0 -0
- package/portraits/star-trek-tng/medium/jean-luc-45342.png +0 -0
- package/portraits/star-trek-tng/medium/kathryn-45332.png +0 -0
- package/portraits/star-trek-tng/medium/miles-35342.png +0 -0
- package/portraits/star-trek-tng/medium/q-53521.png +0 -0
- package/portraits/star-trek-tng/medium/spock-45231.png +0 -0
- package/portraits/star-trek-tng/medium/troi-44352.png +0 -0
- package/src/public/App.tsx +0 -340
- package/src/public/components/AgentLoadDialog.tsx +0 -202
- package/src/public/components/AgentPopup.tsx +0 -308
- package/src/public/components/ApprovalModal/ApprovalModal.css +0 -35
- package/src/public/components/ApprovalModal/index.tsx +0 -632
- package/src/public/components/BikeRackIndex.tsx +0 -54
- package/src/public/components/BikeRackWorkspace.tsx +0 -142
- package/src/public/components/CommandPalette.tsx +0 -555
- package/src/public/components/ConfirmDialog.tsx +0 -168
- package/src/public/components/ContextIndicator/ContextIndicator.css +0 -85
- package/src/public/components/ContextIndicator/index.tsx +0 -330
- package/src/public/components/ContextSparkline.tsx +0 -56
- package/src/public/components/ControlBar.tsx +0 -636
- package/src/public/components/DeadCodeDialog.tsx +0 -169
- package/src/public/components/DiffViewer.tsx +0 -585
- package/src/public/components/DockviewWorkspace.tsx +0 -737
- package/src/public/components/Editor.tsx +0 -630
- package/src/public/components/ErrorBoundary.tsx +0 -67
- package/src/public/components/FileTree.tsx +0 -379
- package/src/public/components/FontPicker/FontPicker.css +0 -276
- package/src/public/components/FontPicker/index.tsx +0 -430
- package/src/public/components/FullFileTree.tsx +0 -237
- package/src/public/components/HealthGauge.tsx +0 -181
- package/src/public/components/Message.tsx +0 -225
- package/src/public/components/MessageList.tsx +0 -98
- package/src/public/components/MessageView.tsx +0 -400
- package/src/public/components/ModeSwitch/ModeSwitch.css +0 -165
- package/src/public/components/ModeSwitch/index.tsx +0 -372
- package/src/public/components/PersonaHeader.tsx +0 -240
- package/src/public/components/QuickActions.tsx +0 -267
- package/src/public/components/SpanTimeline.tsx +0 -352
- package/src/public/components/StandalonePanel.tsx +0 -84
- package/src/public/components/StatsStrip.tsx +0 -162
- package/src/public/components/StreamingContent.tsx +0 -77
- package/src/public/components/SubagentSpan.tsx +0 -180
- package/src/public/components/TandemPortrait.tsx +0 -72
- package/src/public/components/ThemePalette/ThemePalette.css +0 -179
- package/src/public/components/ThemePalette/index.tsx +0 -326
- package/src/public/components/ToolCallBlock.tsx +0 -252
- package/src/public/components/ToolStack.tsx +0 -209
- package/src/public/components/ToolStatus.tsx +0 -57
- package/src/public/components/dialogs/CodeMarkersDialog.tsx +0 -169
- package/src/public/components/dialogs/ComplexityDialog.tsx +0 -163
- package/src/public/components/dialogs/DependenciesDialog.tsx +0 -120
- package/src/public/components/dialogs/HotspotsDialog.tsx +0 -451
- package/src/public/components/dialogs/ToolDialog.tsx +0 -43
- package/src/public/components/panel-registry.ts +0 -11
- package/src/public/components/panels/ACPanel.tsx +0 -93
- package/src/public/components/panels/AcceptanceCriteriaPanel.tsx +0 -104
- package/src/public/components/panels/AuditLogPanel.tsx +0 -465
- package/src/public/components/panels/BackgroundPanel.tsx +0 -115
- package/src/public/components/panels/BikeLanePanel.tsx +0 -214
- package/src/public/components/panels/ChangedPanel.tsx +0 -65
- package/src/public/components/panels/DebugPanel.tsx +0 -344
- package/src/public/components/panels/DiffsPanel.tsx +0 -155
- package/src/public/components/panels/GitPanel.tsx +0 -216
- package/src/public/components/panels/HotspotsPanel.tsx +0 -365
- package/src/public/components/panels/MessagePanel.tsx +0 -497
- package/src/public/components/panels/SettingsPanel.tsx +0 -453
- package/src/public/components/panels/SprintPanel.tsx +0 -670
- package/src/public/components/panels/TTYPanel.tsx +0 -299
- package/src/public/components/panels/TodoPanel.tsx +0 -142
- package/src/public/components/panels/WorkflowPanel.tsx +0 -224
- package/src/public/components/panels/index.ts +0 -24
- package/src/public/components/ui/alert-dialog.tsx +0 -139
- package/src/public/components/ui/badge.tsx +0 -36
- package/src/public/components/ui/button.tsx +0 -57
- package/src/public/components/ui/checkbox.tsx +0 -28
- package/src/public/components/ui/collapsible.tsx +0 -9
- package/src/public/components/ui/command.tsx +0 -151
- package/src/public/components/ui/dialog.tsx +0 -120
- package/src/public/components/ui/popover.tsx +0 -31
- package/src/public/components/ui/progress.tsx +0 -28
- package/src/public/components/ui/scroll-area.tsx +0 -46
- package/src/public/components/ui/select.tsx +0 -157
- package/src/public/components/ui/separator.tsx +0 -29
- package/src/public/components/ui/skeleton.tsx +0 -15
- package/src/public/components/ui/switch.tsx +0 -27
- package/src/public/components/ui/toggle-group.tsx +0 -59
- package/src/public/components/ui/toggle.tsx +0 -43
- package/src/public/components/ui/tooltip.tsx +0 -30
- package/src/public/contexts/ClaudeContext.tsx +0 -311
- package/src/public/contexts/MessageQueueContext.tsx +0 -143
- package/src/public/css/theme-browser.css +0 -550
- package/src/public/css/theme-system.css +0 -630
- package/src/public/hooks/index.ts +0 -49
- package/src/public/hooks/useAgentLoad.ts +0 -105
- package/src/public/hooks/useBackgroundTasks.ts +0 -131
- package/src/public/hooks/useClaude.ts +0 -234
- package/src/public/hooks/useCodeMarkers.ts +0 -101
- package/src/public/hooks/useColorScheme.ts +0 -42
- package/src/public/hooks/useCommandHistory.ts +0 -99
- package/src/public/hooks/useComplexity.ts +0 -80
- package/src/public/hooks/useDeadCode.ts +0 -99
- package/src/public/hooks/useDependencies.ts +0 -82
- package/src/public/hooks/useDiffs.ts +0 -143
- package/src/public/hooks/useFileBrowser.ts +0 -71
- package/src/public/hooks/useGitStatus.ts +0 -233
- package/src/public/hooks/useHealthScore.ts +0 -69
- package/src/public/hooks/useHotspots.ts +0 -123
- package/src/public/hooks/useLayoutPersistence.ts +0 -138
- package/src/public/hooks/useMarkdownParser.ts +0 -36
- package/src/public/hooks/useMarkerActions.ts +0 -234
- package/src/public/hooks/useMessageQueue.ts +0 -380
- package/src/public/hooks/useMessageStream.ts +0 -131
- package/src/public/hooks/usePersona.ts +0 -112
- package/src/public/hooks/usePlanModeExit.ts +0 -105
- package/src/public/hooks/useResponsiveLayout.ts +0 -173
- package/src/public/hooks/useSprint.ts +0 -147
- package/src/public/hooks/useStatsStrip.ts +0 -204
- package/src/public/hooks/useStory.ts +0 -135
- package/src/public/hooks/useSubagentHelper.ts +0 -64
- package/src/public/hooks/useSyntaxHighlighter.ts +0 -52
- package/src/public/hooks/useTabCompletion.ts +0 -124
- package/src/public/hooks/useTodos.ts +0 -93
- package/src/public/hooks/useUserAvatar.ts +0 -54
- package/src/public/index.tsx +0 -10
- package/src/public/lib/utils.ts +0 -6
- package/src/public/styles/dockview-theme.css +0 -459
- package/src/public/styles/tailwind.css +0 -4396
- package/src/public/types/electron.d.ts +0 -18
- package/src/public/types/message.ts +0 -51
- package/src/public/utils/avatar-service.ts +0 -73
- package/src/public/utils/color-presets.ts +0 -940
- package/src/public/utils/font-presets.ts +0 -362
- package/src/public/utils/formatDuration.ts +0 -14
- package/src/public/utils/markdown.ts +0 -249
- package/src/public/utils/messageFilters.ts +0 -128
- package/src/public/utils/slash-commands.ts +0 -353
- package/src/public/utils/subagent-display.ts +0 -146
- package/src/public/utils/syntax.ts +0 -219
- package/src/public/utils/toolIntentSummarizer.ts +0 -199
- package/src/public/utils/toolStackGrouper.ts +0 -106
- package/src/public/utils/toolTypeColors.ts +0 -45
package/dist/api/settings.js
CHANGED
|
@@ -1,465 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Provides HTTP API endpoints for settings management:
|
|
5
|
-
* - GET /api/settings - Get current settings
|
|
6
|
-
* - PATCH /api/settings - Update partial settings
|
|
7
|
-
* - GET /api/settings/themes - Get available themes metadata
|
|
8
|
-
*/
|
|
9
|
-
import { Router } from 'express';
|
|
10
|
-
import fs from 'fs';
|
|
11
|
-
import path from 'path';
|
|
12
|
-
import { parse, stringify } from 'yaml';
|
|
13
|
-
import { getCurrentSettings, saveUserSettings } from '../settings.js';
|
|
14
|
-
import { getProjectDirectory } from '../paths.js';
|
|
15
|
-
import { setBellMode } from '../bell-mode.js';
|
|
16
|
-
import { isOtelDebugEnabled } from '../otlp-receiver.js';
|
|
17
|
-
/**
|
|
18
|
-
* Create a consistent error response object
|
|
19
|
-
* AC4: Helper for consistent error formatting
|
|
20
|
-
*/
|
|
21
|
-
export function createErrorResponse(code, message) {
|
|
22
|
-
return {
|
|
23
|
-
error: true,
|
|
24
|
-
code,
|
|
25
|
-
message,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get settings for WebSocket broadcast
|
|
30
|
-
* Used by websocket.ts for /ws/settings endpoint
|
|
31
|
-
*/
|
|
32
|
-
export async function getSettingsForWebSocket(projectDir) {
|
|
33
|
-
const settings = getCurrentSettings();
|
|
34
|
-
// Read config.local.yaml as single source of truth
|
|
35
|
-
let theme = 'alice-in-wonderland';
|
|
36
|
-
let handoffMode = 'manual';
|
|
37
|
-
let bellMode = false;
|
|
38
|
-
let display;
|
|
39
|
-
let notifications;
|
|
40
|
-
if (projectDir) {
|
|
41
|
-
try {
|
|
42
|
-
const configPath = path.join(projectDir, '.pennyfarthing', 'config.local.yaml');
|
|
43
|
-
if (fs.existsSync(configPath)) {
|
|
44
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
45
|
-
const parsed = parse(content);
|
|
46
|
-
if (parsed?.theme && typeof parsed.theme === 'string') {
|
|
47
|
-
theme = parsed.theme;
|
|
48
|
-
}
|
|
49
|
-
const workflow = parsed?.workflow;
|
|
50
|
-
if (workflow?.handoff_mode) {
|
|
51
|
-
handoffMode = workflow.handoff_mode;
|
|
52
|
-
}
|
|
53
|
-
if (workflow?.bell_mode !== undefined) {
|
|
54
|
-
bellMode = workflow.bell_mode;
|
|
55
|
-
}
|
|
56
|
-
if (parsed?.display && typeof parsed.display === 'object') {
|
|
57
|
-
display = parsed.display;
|
|
58
|
-
}
|
|
59
|
-
if (parsed?.notifications && typeof parsed.notifications === 'object') {
|
|
60
|
-
notifications = parsed.notifications;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// Ignore project config errors - use defaults
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
const response = {
|
|
69
|
-
...settings,
|
|
70
|
-
workflow: {
|
|
71
|
-
...settings.workflow,
|
|
72
|
-
handoff_mode: handoffMode,
|
|
73
|
-
bell_mode: bellMode,
|
|
74
|
-
},
|
|
75
|
-
pennyfarthing: { theme },
|
|
76
|
-
};
|
|
77
|
-
if (display)
|
|
78
|
-
response.display = display;
|
|
79
|
-
if (notifications)
|
|
80
|
-
response.notifications = notifications;
|
|
81
|
-
return response;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Create the settings router
|
|
85
|
-
*/
|
|
86
|
-
export function createSettingsRouter() {
|
|
87
|
-
const router = Router();
|
|
88
|
-
/**
|
|
89
|
-
* GET / - Get current settings
|
|
90
|
-
* AC4: Returns consistent error format
|
|
91
|
-
* Theme, handoff_mode, and bell_mode are all read from .pennyfarthing/config.local.yaml (single source of truth)
|
|
92
|
-
*/
|
|
93
|
-
router.get('/', async (_req, res) => {
|
|
94
|
-
try {
|
|
95
|
-
const settings = getCurrentSettings();
|
|
96
|
-
// Read config.local.yaml as single source of truth for all project settings
|
|
97
|
-
let theme = 'alice-in-wonderland';
|
|
98
|
-
let handoffMode = 'manual';
|
|
99
|
-
let bellMode = false;
|
|
100
|
-
let display;
|
|
101
|
-
let notifications;
|
|
102
|
-
const projectDir = getProjectDirectory();
|
|
103
|
-
if (projectDir) {
|
|
104
|
-
try {
|
|
105
|
-
const configPath = path.join(projectDir, '.pennyfarthing', 'config.local.yaml');
|
|
106
|
-
if (fs.existsSync(configPath)) {
|
|
107
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
108
|
-
const parsed = parse(content);
|
|
109
|
-
if (parsed?.theme && typeof parsed.theme === 'string') {
|
|
110
|
-
theme = parsed.theme;
|
|
111
|
-
}
|
|
112
|
-
const workflow = parsed?.workflow;
|
|
113
|
-
if (workflow?.handoff_mode) {
|
|
114
|
-
handoffMode = workflow.handoff_mode;
|
|
115
|
-
}
|
|
116
|
-
if (workflow?.bell_mode !== undefined) {
|
|
117
|
-
bellMode = workflow.bell_mode;
|
|
118
|
-
}
|
|
119
|
-
if (parsed?.display && typeof parsed.display === 'object') {
|
|
120
|
-
display = parsed.display;
|
|
121
|
-
}
|
|
122
|
-
if (parsed?.notifications && typeof parsed.notifications === 'object') {
|
|
123
|
-
notifications = parsed.notifications;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
// Ignore project config errors - use defaults
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
// Construct response with all persisted settings
|
|
132
|
-
const response = {
|
|
133
|
-
...settings,
|
|
134
|
-
workflow: {
|
|
135
|
-
...settings.workflow,
|
|
136
|
-
handoff_mode: handoffMode,
|
|
137
|
-
bell_mode: bellMode,
|
|
138
|
-
},
|
|
139
|
-
pennyfarthing: { theme },
|
|
140
|
-
};
|
|
141
|
-
if (display)
|
|
142
|
-
response.display = display;
|
|
143
|
-
if (notifications)
|
|
144
|
-
response.notifications = notifications;
|
|
145
|
-
res.json(response);
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
console.error('[Settings API] Failed to get settings:', error);
|
|
149
|
-
res.status(500).json(createErrorResponse('FILE_ERROR', 'Failed to load settings'));
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
/**
|
|
153
|
-
* PATCH / - Update partial settings
|
|
154
|
-
* Accepts a partial settings object and merges with current settings
|
|
155
|
-
* AC4: Returns consistent error format with user-friendly messages
|
|
156
|
-
*/
|
|
157
|
-
router.patch('/', async (req, res) => {
|
|
158
|
-
try {
|
|
159
|
-
const partialSettings = req.body;
|
|
160
|
-
if (!partialSettings || typeof partialSettings !== 'object') {
|
|
161
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Invalid settings object'));
|
|
162
|
-
}
|
|
163
|
-
// Validate theme is non-empty and matches slug pattern (prevent YAML injection)
|
|
164
|
-
if (partialSettings.pennyfarthing?.theme !== undefined) {
|
|
165
|
-
const theme = partialSettings.pennyfarthing.theme;
|
|
166
|
-
if (theme === '') {
|
|
167
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Theme must be a non-empty string'));
|
|
168
|
-
}
|
|
169
|
-
// Theme ID must be alphanumeric with hyphens only (slug format)
|
|
170
|
-
if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(theme)) {
|
|
171
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Theme must be a valid slug (lowercase alphanumeric with hyphens)'));
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
// Validate permission_mode enum (turbo removed in MSSCI-12395)
|
|
175
|
-
if (partialSettings.workflow?.permission_mode !== undefined) {
|
|
176
|
-
const mode = partialSettings.workflow.permission_mode;
|
|
177
|
-
const validModes = ['plan', 'manual', 'accept'];
|
|
178
|
-
if (!validModes.includes(mode)) {
|
|
179
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Permission mode must be "plan", "manual", or "accept". Use relay_mode for auto-handoff.'));
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
// Validate relay_mode is boolean if present (MSSCI-12395)
|
|
183
|
-
if (partialSettings.workflow?.relay_mode !== undefined) {
|
|
184
|
-
const relayMode = partialSettings.workflow.relay_mode;
|
|
185
|
-
if (typeof relayMode !== 'boolean') {
|
|
186
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Relay mode must be a boolean (true or false)'));
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
// Handle bell_mode toggle (MSSCI-12275) - stored in separate file
|
|
190
|
-
const bellModeValue = partialSettings.workflow?.bell_mode;
|
|
191
|
-
if (bellModeValue !== undefined) {
|
|
192
|
-
if (typeof bellModeValue !== 'boolean') {
|
|
193
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Bell mode must be a boolean'));
|
|
194
|
-
}
|
|
195
|
-
await setBellMode(bellModeValue);
|
|
196
|
-
}
|
|
197
|
-
// Extract theme - it goes to config.local.yaml, not to CyclistSettings
|
|
198
|
-
const theme = partialSettings.pennyfarthing?.theme;
|
|
199
|
-
// Strip pennyfarthing and bell_mode from settings to save (handled separately)
|
|
200
|
-
const { pennyfarthing: _pf, ...rest } = partialSettings;
|
|
201
|
-
const settingsToSave = { ...rest };
|
|
202
|
-
if (settingsToSave.workflow) {
|
|
203
|
-
const { bell_mode: _bm, ...workflowRest } = settingsToSave.workflow;
|
|
204
|
-
settingsToSave.workflow = workflowRest;
|
|
205
|
-
}
|
|
206
|
-
// Get project directory FIRST - needed for both settings save and theme update
|
|
207
|
-
const projectDir = getProjectDirectory();
|
|
208
|
-
// Save settings using the settings module (pass projectDir to avoid cwd fallback)
|
|
209
|
-
const success = saveUserSettings(settingsToSave, projectDir || undefined);
|
|
210
|
-
if (!success) {
|
|
211
|
-
return res.status(500).json(createErrorResponse('FILE_ERROR', 'Failed to save settings to file'));
|
|
212
|
-
}
|
|
213
|
-
// Update theme in .pennyfarthing/config.local.yaml using read-modify-write
|
|
214
|
-
// This preserves other settings (like handoff_mode) in the same file
|
|
215
|
-
let themeChanged = false;
|
|
216
|
-
if (theme && projectDir) {
|
|
217
|
-
try {
|
|
218
|
-
const pennyfarthingDir = path.join(projectDir, '.pennyfarthing');
|
|
219
|
-
const configPath = path.join(pennyfarthingDir, 'config.local.yaml');
|
|
220
|
-
// Create .pennyfarthing directory if it doesn't exist
|
|
221
|
-
if (!fs.existsSync(pennyfarthingDir)) {
|
|
222
|
-
fs.mkdirSync(pennyfarthingDir, { recursive: true });
|
|
223
|
-
}
|
|
224
|
-
// Read existing config to preserve other settings
|
|
225
|
-
let existingConfig = {};
|
|
226
|
-
if (fs.existsSync(configPath)) {
|
|
227
|
-
const existingContent = fs.readFileSync(configPath, 'utf-8');
|
|
228
|
-
const parsed = parse(existingContent);
|
|
229
|
-
if (parsed && typeof parsed === 'object') {
|
|
230
|
-
existingConfig = parsed;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
// Update only the theme, preserving everything else
|
|
234
|
-
existingConfig.theme = theme;
|
|
235
|
-
// Write back with theme first for consistent ordering
|
|
236
|
-
const { theme: themeValue, ...rest } = existingConfig;
|
|
237
|
-
const ordered = { theme: themeValue, ...rest };
|
|
238
|
-
fs.writeFileSync(configPath, stringify(ordered), 'utf-8');
|
|
239
|
-
themeChanged = true;
|
|
240
|
-
// Touch the agent session file to trigger watchAgentChanges
|
|
241
|
-
// This broadcasts the new persona to the Cyclist UI
|
|
242
|
-
const sessionId = process.env.CYCLIST_SESSION_ID;
|
|
243
|
-
if (sessionId) {
|
|
244
|
-
const agentFile = path.join(projectDir, '.session', 'agents', sessionId);
|
|
245
|
-
if (fs.existsSync(agentFile)) {
|
|
246
|
-
const now = new Date();
|
|
247
|
-
fs.utimesSync(agentFile, now, now);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
catch (err) {
|
|
252
|
-
console.error('[Settings API] Failed to write .pennyfarthing/config.local.yaml:', err);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// Return settings with theme_changed flag so frontend can prompt refresh
|
|
256
|
-
const responseSettings = getCurrentSettings();
|
|
257
|
-
res.json({ ...responseSettings, _themeChanged: themeChanged });
|
|
258
|
-
}
|
|
259
|
-
catch (error) {
|
|
260
|
-
console.error('[Settings API] Failed to save settings:', error);
|
|
261
|
-
res.status(500).json(createErrorResponse('UNKNOWN_ERROR', 'Failed to save settings'));
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
/**
|
|
265
|
-
* GET /themes - Get available themes metadata
|
|
266
|
-
* Story 35-8: Returns id, name, and tier for each theme
|
|
267
|
-
*/
|
|
268
|
-
router.get('/themes', async (_req, res) => {
|
|
269
|
-
try {
|
|
270
|
-
// Find themes directory - check bundled resources first, then project dir
|
|
271
|
-
let themesDir = null;
|
|
272
|
-
// 1. Packaged Electron app: Contents/Resources/pennyfarthing-dist/personas/themes
|
|
273
|
-
if (process.resourcesPath) {
|
|
274
|
-
const bundledThemes = path.join(process.resourcesPath, 'pennyfarthing-dist', 'personas', 'themes');
|
|
275
|
-
if (fs.existsSync(bundledThemes)) {
|
|
276
|
-
themesDir = bundledThemes;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
// 2. Runtime via symlinks: .pennyfarthing/personas/themes (orchestrator pattern)
|
|
280
|
-
if (!themesDir) {
|
|
281
|
-
const projectDir = getProjectDirectory();
|
|
282
|
-
if (projectDir) {
|
|
283
|
-
const runtimeThemes = path.join(projectDir, '.pennyfarthing', 'personas', 'themes');
|
|
284
|
-
if (fs.existsSync(runtimeThemes)) {
|
|
285
|
-
themesDir = runtimeThemes;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
// 3. Monorepo/dev: project dir pennyfarthing-dist
|
|
290
|
-
if (!themesDir) {
|
|
291
|
-
const projectDir = getProjectDirectory();
|
|
292
|
-
if (projectDir) {
|
|
293
|
-
const projectThemes = path.join(projectDir, 'pennyfarthing-dist', 'personas', 'themes');
|
|
294
|
-
if (fs.existsSync(projectThemes)) {
|
|
295
|
-
themesDir = projectThemes;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
if (isOtelDebugEnabled()) {
|
|
300
|
-
console.log('[Themes API] Final themesDir:', themesDir);
|
|
301
|
-
}
|
|
302
|
-
if (!themesDir) {
|
|
303
|
-
return res.json([]);
|
|
304
|
-
}
|
|
305
|
-
const files = fs.readdirSync(themesDir).filter(f => f.endsWith('.yaml')).sort();
|
|
306
|
-
if (isOtelDebugEnabled()) {
|
|
307
|
-
console.log('[Themes API] Found', files.length, 'theme files');
|
|
308
|
-
}
|
|
309
|
-
const themes = files.map(f => {
|
|
310
|
-
const id = f.replace('.yaml', '');
|
|
311
|
-
const name = id.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
|
|
312
|
-
// Try to read tier from theme file (nested under theme.tier)
|
|
313
|
-
let tier = ''; // Empty when no tier data (displayed as "Unranked" in UI)
|
|
314
|
-
try {
|
|
315
|
-
const themePath = path.join(themesDir, f);
|
|
316
|
-
const content = fs.readFileSync(themePath, 'utf-8');
|
|
317
|
-
const parsed = parse(content);
|
|
318
|
-
if (parsed.theme?.tier && typeof parsed.theme.tier === 'string') {
|
|
319
|
-
tier = parsed.theme.tier.toUpperCase();
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
catch {
|
|
323
|
-
// Ignore parse errors, use default tier
|
|
324
|
-
}
|
|
325
|
-
return { id, name, tier };
|
|
326
|
-
});
|
|
327
|
-
res.json(themes);
|
|
328
|
-
}
|
|
329
|
-
catch (error) {
|
|
330
|
-
console.error('[Settings API] Failed to load themes:', error);
|
|
331
|
-
res.status(500).json({ error: 'Failed to load themes' });
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
/**
|
|
335
|
-
* GET /collapsed - Get collapsed section states from config.local.yaml
|
|
336
|
-
* Returns { persona: boolean, git: boolean, ... }
|
|
337
|
-
*/
|
|
338
|
-
router.get('/collapsed', (_req, res) => {
|
|
339
|
-
try {
|
|
340
|
-
const projectDir = getProjectDirectory();
|
|
341
|
-
if (!projectDir) {
|
|
342
|
-
return res.json({});
|
|
343
|
-
}
|
|
344
|
-
const configPath = path.join(projectDir, '.pennyfarthing', 'config.local.yaml');
|
|
345
|
-
if (!fs.existsSync(configPath)) {
|
|
346
|
-
return res.json({});
|
|
347
|
-
}
|
|
348
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
349
|
-
const parsed = parse(content);
|
|
350
|
-
res.json(parsed?.display?.collapsed_sections || {});
|
|
351
|
-
}
|
|
352
|
-
catch (error) {
|
|
353
|
-
console.error('[Settings API] Failed to get collapsed sections:', error);
|
|
354
|
-
res.json({});
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
/**
|
|
358
|
-
* PATCH /collapsed - Update collapsed section states in config.local.yaml
|
|
359
|
-
* Body: { sectionId: boolean, ... }
|
|
360
|
-
*/
|
|
361
|
-
router.patch('/collapsed', (req, res) => {
|
|
362
|
-
try {
|
|
363
|
-
const updates = req.body;
|
|
364
|
-
if (!updates || typeof updates !== 'object') {
|
|
365
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Invalid collapsed sections object'));
|
|
366
|
-
}
|
|
367
|
-
const projectDir = getProjectDirectory();
|
|
368
|
-
if (!projectDir) {
|
|
369
|
-
return res.status(500).json(createErrorResponse('FILE_ERROR', 'Project directory not found'));
|
|
370
|
-
}
|
|
371
|
-
const pennyfarthingDir = path.join(projectDir, '.pennyfarthing');
|
|
372
|
-
const configPath = path.join(pennyfarthingDir, 'config.local.yaml');
|
|
373
|
-
// Create .pennyfarthing directory if needed
|
|
374
|
-
if (!fs.existsSync(pennyfarthingDir)) {
|
|
375
|
-
fs.mkdirSync(pennyfarthingDir, { recursive: true });
|
|
376
|
-
}
|
|
377
|
-
// Read existing config
|
|
378
|
-
let existingConfig = {};
|
|
379
|
-
if (fs.existsSync(configPath)) {
|
|
380
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
381
|
-
const parsed = parse(content);
|
|
382
|
-
if (parsed && typeof parsed === 'object') {
|
|
383
|
-
existingConfig = parsed;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
// Merge collapsed sections into display
|
|
387
|
-
const display = (existingConfig.display || {});
|
|
388
|
-
const existingCollapsed = (display.collapsed_sections || {});
|
|
389
|
-
display.collapsed_sections = { ...existingCollapsed, ...updates };
|
|
390
|
-
existingConfig.display = display;
|
|
391
|
-
// Write back
|
|
392
|
-
fs.writeFileSync(configPath, stringify(existingConfig), 'utf-8');
|
|
393
|
-
res.json(display.collapsed_sections);
|
|
394
|
-
}
|
|
395
|
-
catch (error) {
|
|
396
|
-
console.error('[Settings API] Failed to save collapsed sections:', error);
|
|
397
|
-
res.status(500).json(createErrorResponse('FILE_ERROR', 'Failed to save collapsed sections'));
|
|
398
|
-
}
|
|
399
|
-
});
|
|
400
|
-
/**
|
|
401
|
-
* GET /layout - Get layout from config.local.yaml
|
|
402
|
-
* Returns { layout: { leftSidebar: {...}, rightSidebar: {...} } } or null
|
|
403
|
-
*/
|
|
404
|
-
router.get('/layout', (_req, res) => {
|
|
405
|
-
try {
|
|
406
|
-
const projectDir = getProjectDirectory();
|
|
407
|
-
if (!projectDir) {
|
|
408
|
-
return res.json({ layout: null });
|
|
409
|
-
}
|
|
410
|
-
const configPath = path.join(projectDir, '.pennyfarthing', 'config.local.yaml');
|
|
411
|
-
if (!fs.existsSync(configPath)) {
|
|
412
|
-
return res.json({ layout: null });
|
|
413
|
-
}
|
|
414
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
415
|
-
const parsed = parse(content);
|
|
416
|
-
res.json({ layout: parsed?.layout || null });
|
|
417
|
-
}
|
|
418
|
-
catch (error) {
|
|
419
|
-
console.error('[Settings API] Failed to get layout:', error);
|
|
420
|
-
res.json({ layout: null });
|
|
421
|
-
}
|
|
422
|
-
});
|
|
423
|
-
/**
|
|
424
|
-
* PATCH /layout - Update layout in config.local.yaml
|
|
425
|
-
* Body: { leftSidebar: {...}, rightSidebar: {...} }
|
|
426
|
-
*/
|
|
427
|
-
router.patch('/layout', (req, res) => {
|
|
428
|
-
try {
|
|
429
|
-
const layout = req.body;
|
|
430
|
-
if (!layout || typeof layout !== 'object') {
|
|
431
|
-
return res.status(400).json(createErrorResponse('VALIDATION_ERROR', 'Invalid layout object'));
|
|
432
|
-
}
|
|
433
|
-
const projectDir = getProjectDirectory();
|
|
434
|
-
if (!projectDir) {
|
|
435
|
-
return res.status(500).json(createErrorResponse('FILE_ERROR', 'Project directory not found'));
|
|
436
|
-
}
|
|
437
|
-
const pennyfarthingDir = path.join(projectDir, '.pennyfarthing');
|
|
438
|
-
const configPath = path.join(pennyfarthingDir, 'config.local.yaml');
|
|
439
|
-
// Create .pennyfarthing directory if needed
|
|
440
|
-
if (!fs.existsSync(pennyfarthingDir)) {
|
|
441
|
-
fs.mkdirSync(pennyfarthingDir, { recursive: true });
|
|
442
|
-
}
|
|
443
|
-
// Read existing config
|
|
444
|
-
let existingConfig = {};
|
|
445
|
-
if (fs.existsSync(configPath)) {
|
|
446
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
447
|
-
const parsed = parse(content);
|
|
448
|
-
if (parsed && typeof parsed === 'object') {
|
|
449
|
-
existingConfig = parsed;
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
// Update layout
|
|
453
|
-
existingConfig.layout = layout;
|
|
454
|
-
// Write back
|
|
455
|
-
fs.writeFileSync(configPath, stringify(existingConfig), 'utf-8');
|
|
456
|
-
res.json({ success: true, layout });
|
|
457
|
-
}
|
|
458
|
-
catch (error) {
|
|
459
|
-
console.error('[Settings API] Failed to save layout:', error);
|
|
460
|
-
res.status(500).json(createErrorResponse('FILE_ERROR', 'Failed to save layout'));
|
|
461
|
-
}
|
|
462
|
-
});
|
|
463
|
-
return router;
|
|
464
|
-
}
|
|
1
|
+
// Re-export from @pennyfarthing/core (Story 98-17)
|
|
2
|
+
export * from '@pennyfarthing/core/dist/server/api/settings.js';
|
|
465
3
|
//# sourceMappingURL=settings.js.map
|
package/dist/api/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/api/settings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/api/settings.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,iDAAiD,CAAC"}
|
package/dist/api/spans.d.ts
CHANGED
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Spans API Router - Story MSSCI-11734
|
|
3
|
-
*
|
|
4
|
-
* REST API for enriched span data with filtering, pagination, and export.
|
|
5
|
-
*
|
|
6
|
-
* Endpoints:
|
|
7
|
-
* - GET /api/spans - List all enriched spans (with filtering and pagination)
|
|
8
|
-
* - GET /api/spans/export - Export spans as JSON with metadata
|
|
9
|
-
* - GET /api/spans/summary - Get span statistics
|
|
10
|
-
* - GET /api/spans/:spanId - Get single span details
|
|
11
|
-
*/
|
|
12
|
-
import { Router } from 'express';
|
|
13
|
-
/**
|
|
14
|
-
* Create spans API router
|
|
15
|
-
*/
|
|
16
|
-
export declare function createSpansRouter(): Router;
|
|
1
|
+
export * from '@pennyfarthing/core/dist/server/api/spans.js';
|
|
17
2
|
//# sourceMappingURL=spans.d.ts.map
|
package/dist/api/spans.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spans.d.ts","sourceRoot":"","sources":["../../src/api/spans.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spans.d.ts","sourceRoot":"","sources":["../../src/api/spans.ts"],"names":[],"mappings":"AACA,cAAc,8CAA8C,CAAC"}
|