@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
@@ -1,23 +1,2 @@
1
- import { Router } from 'express';
2
- /**
3
- * Runtime mode information for Cyclist
4
- */
5
- export interface ModeInfo {
6
- mode: 'electron' | 'web' | 'unknown';
7
- version: string;
8
- nodeVersion: string;
9
- platform: string;
10
- arch: string;
11
- pid: number;
12
- uptime: number;
13
- startTime: string;
14
- }
15
- /**
16
- * Get current runtime mode information
17
- */
18
- export declare function getModeInfo(): ModeInfo;
19
- /**
20
- * Create mode API router
21
- */
22
- export declare function createModeRouter(): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/mode.js';
23
2
  //# sourceMappingURL=mode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/api/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAatC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAUzC"}
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/api/mode.ts"],"names":[],"mappings":"AACA,cAAc,6CAA6C,CAAC"}
package/dist/api/mode.js CHANGED
@@ -1,38 +1,3 @@
1
- import { Router } from 'express';
2
- // Track when the server started
3
- const startTime = new Date().toISOString();
4
- // Detect if running in Electron
5
- let electronVersion = null;
6
- const versions = process.versions;
7
- if (versions.electron) {
8
- electronVersion = versions.electron;
9
- }
10
- /**
11
- * Get current runtime mode information
12
- */
13
- export function getModeInfo() {
14
- const mode = electronVersion ? 'electron' : 'web';
15
- return {
16
- mode,
17
- version: electronVersion || 'N/A',
18
- nodeVersion: process.version,
19
- platform: process.platform,
20
- arch: process.arch,
21
- pid: process.pid,
22
- uptime: process.uptime(),
23
- startTime,
24
- };
25
- }
26
- /**
27
- * Create mode API router
28
- */
29
- export function createModeRouter() {
30
- const router = Router();
31
- // GET /api/mode - return runtime mode info
32
- router.get('/', (_req, res) => {
33
- const info = getModeInfo();
34
- res.json(info);
35
- });
36
- return router;
37
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/mode.js';
38
3
  //# sourceMappingURL=mode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/api/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAgBjC,gCAAgC;AAChC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAE3C,gCAAgC;AAChC,IAAI,eAAe,GAAkB,IAAI,CAAC;AAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAkC,CAAC;AAC5D,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACtB,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IAElD,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,eAAe,IAAI,KAAK;QACjC,WAAW,EAAE,OAAO,CAAC,OAAO;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QACxB,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,2CAA2C;IAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/api/mode.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,6CAA6C,CAAC"}
@@ -1,3 +1,2 @@
1
- import { Router } from 'express';
2
- export declare function createOTLPRouter(): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/otlp.js';
3
2
  //# sourceMappingURL=otlp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"otlp.d.ts","sourceRoot":"","sources":["../../src/api/otlp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUjC,wBAAgB,gBAAgB,IAAI,MAAM,CAgDzC"}
1
+ {"version":3,"file":"otlp.d.ts","sourceRoot":"","sources":["../../src/api/otlp.ts"],"names":[],"mappings":"AACA,cAAc,6CAA6C,CAAC"}
package/dist/api/otlp.js CHANGED
@@ -1,47 +1,3 @@
1
- import { Router } from 'express';
2
- import { parseOTLPMetrics, aggregateTokenStats, parseOTLPLogs, processLogEvents, isOtelDebugEnabled, } from '../otlp-receiver.js';
3
- // Create OTLP API router for OpenTelemetry metrics/logs
4
- export function createOTLPRouter() {
5
- const router = Router();
6
- // OTLP Metrics Receiver - POST endpoint for OpenTelemetry metrics
7
- router.post('/metrics', (req, res) => {
8
- try {
9
- const parsed = parseOTLPMetrics(req.body);
10
- aggregateTokenStats(parsed);
11
- // Log received metrics for debugging (AC5)
12
- if (isOtelDebugEnabled() && Object.keys(parsed).length > 0) {
13
- console.log('[OTLP] Received token metrics:', parsed);
14
- }
15
- res.status(200).send();
16
- }
17
- catch (error) {
18
- // Gracefully handle errors - still return 200 per OTLP spec
19
- console.error('[OTLP] Error processing metrics:', error);
20
- res.status(200).send();
21
- }
22
- });
23
- // OTLP Logs/Events Receiver - POST endpoint for OpenTelemetry events
24
- // Story 19-1: Parse tool and prompt events from Claude Code
25
- // Story 36-7: Made async to support span enrichment
26
- router.post('/logs', async (req, res) => {
27
- try {
28
- // Parse OTLP logs payload into raw events
29
- const rawEvents = parseOTLPLogs(req.body);
30
- // Process and store tool/prompt events (async for enrichment)
31
- if (rawEvents.length > 0) {
32
- await processLogEvents(rawEvents);
33
- if (isOtelDebugEnabled()) {
34
- console.log(`[OTLP] Processed ${rawEvents.length} log event(s)`);
35
- }
36
- }
37
- res.status(200).send();
38
- }
39
- catch (error) {
40
- // Gracefully handle errors - still return 200 per OTLP spec
41
- console.error('[OTLP] Error processing logs:', error);
42
- res.status(200).send();
43
- }
44
- });
45
- return router;
46
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/otlp.js';
47
3
  //# sourceMappingURL=otlp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"otlp.js","sourceRoot":"","sources":["../../src/api/otlp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,wDAAwD;AACxD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,kEAAkE;IAClE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1C,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAE5B,2CAA2C;YAC3C,IAAI,kBAAkB,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;YACxD,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4DAA4D;YAC5D,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,4DAA4D;IAC5D,oDAAoD;IACpD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAG1C,8DAA8D;YAC9D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAClC,IAAI,kBAAkB,EAAE,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,CAAC,MAAM,eAAe,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4DAA4D;YAC5D,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"otlp.js","sourceRoot":"","sources":["../../src/api/otlp.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,6CAA6C,CAAC"}
@@ -1,16 +1,2 @@
1
- /**
2
- * Permissions API Router
3
- *
4
- * Bridges the /permissions skill to settings-store.ts grant management.
5
- *
6
- * Story: MSSCI-14325 - Connect /permissions skill to grant store
7
- *
8
- * Routes:
9
- * - GET / List all active grants
10
- * - POST /grant Add a permission grant
11
- * - DELETE /revoke/:tool Revoke grants for a tool
12
- * - GET /show/:tool Show grants for a specific tool
13
- */
14
- import { Router } from 'express';
15
- export declare function createPermissionsRouter(): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/permissions.js';
16
2
  //# sourceMappingURL=permissions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAKpD,wBAAgB,uBAAuB,IAAI,MAAM,CAiEhD"}
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"AACA,cAAc,oDAAoD,CAAC"}
@@ -1,67 +1,3 @@
1
- /**
2
- * Permissions API Router
3
- *
4
- * Bridges the /permissions skill to settings-store.ts grant management.
5
- *
6
- * Story: MSSCI-14325 - Connect /permissions skill to grant store
7
- *
8
- * Routes:
9
- * - GET / List all active grants
10
- * - POST /grant Add a permission grant
11
- * - DELETE /revoke/:tool Revoke grants for a tool
12
- * - GET /show/:tool Show grants for a specific tool
13
- */
14
- import { Router } from 'express';
15
- import { getGrants, addGrant, removeGrant } from '../settings-store.js';
16
- const VALID_GRANT_TYPES = ['once', 'session', 'always'];
17
- export function createPermissionsRouter() {
18
- const router = Router();
19
- // GET / - List all active grants
20
- router.get('/', (_req, res) => {
21
- res.json({ grants: getGrants() });
22
- });
23
- // POST /grant - Add a permission grant
24
- router.post('/grant', (req, res) => {
25
- const { tool, scope, grant_type } = req.body;
26
- if (!tool || typeof tool !== 'string') {
27
- res.status(400).json({ error: 'Missing required field: tool' });
28
- return;
29
- }
30
- if (!scope || typeof scope !== 'string') {
31
- res.status(400).json({ error: 'Missing required field: scope' });
32
- return;
33
- }
34
- const grantType = grant_type || 'session';
35
- if (!VALID_GRANT_TYPES.includes(grantType)) {
36
- res.status(400).json({ error: `Invalid grant_type: ${grantType}. Must be one of: ${VALID_GRANT_TYPES.join(', ')}` });
37
- return;
38
- }
39
- const grant = {
40
- tool,
41
- scope,
42
- grant_type: grantType,
43
- granted_at: new Date().toISOString(),
44
- };
45
- addGrant(grant);
46
- res.status(201).json({ grant });
47
- });
48
- // DELETE /revoke/:tool - Revoke grants for a tool
49
- router.delete('/revoke/:tool', (req, res) => {
50
- const { tool } = req.params;
51
- const scopeFilter = req.query.scope;
52
- const allGrants = getGrants();
53
- const toRemove = allGrants.filter((g) => g.tool === tool && (!scopeFilter || g.scope === scopeFilter));
54
- for (const grant of toRemove) {
55
- removeGrant(grant);
56
- }
57
- res.json({ removed: toRemove.length });
58
- });
59
- // GET /show/:tool - Show grants for a specific tool
60
- router.get('/show/:tool', (req, res) => {
61
- const { tool } = req.params;
62
- const grants = getGrants().filter((g) => g.tool === tool);
63
- res.json({ grants });
64
- });
65
- return router;
66
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/permissions.js';
67
3
  //# sourceMappingURL=permissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,oDAAoD,CAAC"}
@@ -1,9 +1,2 @@
1
- import { Router } from 'express';
2
- import { WebSocket } from 'ws';
3
- import { Persona } from '../pennyfarthing.js';
4
- export declare function getPersonaClients(): Set<WebSocket>;
5
- export declare function getStreamingState(): boolean;
6
- export declare function broadcastPersona(persona: Persona): void;
7
- export declare function setStreamingState(streaming: boolean): void;
8
- export declare function createPersonaRouter(getProjectDir: () => string): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/persona.js';
9
2
  //# sourceMappingURL=persona.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../src/api/persona.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAwE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AASpH,wBAAgB,iBAAiB,mBAEhC;AAGD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAOvD;AAGD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAS1D;AAGD,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,MAAM,CAsCvE"}
1
+ {"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../src/api/persona.ts"],"names":[],"mappings":"AACA,cAAc,gDAAgD,CAAC"}
@@ -1,68 +1,3 @@
1
- import { Router } from 'express';
2
- import { WebSocket } from 'ws';
3
- import { detectPennyfarthingProject, getCurrentPersona, getFullPersonaDetails } from '../pennyfarthing.js';
4
- // Persona WebSocket clients (for real-time persona updates)
5
- const personaClients = new Set();
6
- // Track streaming state for persona broadcasts (Story 94-1: MSSCI-14660)
7
- let currentlyStreaming = false;
8
- // Get persona clients set (for WebSocket setup)
9
- export function getPersonaClients() {
10
- return personaClients;
11
- }
12
- // Get current streaming state (for initial persona payload on connection)
13
- export function getStreamingState() {
14
- return currentlyStreaming;
15
- }
16
- // Broadcast persona to all connected clients
17
- export function broadcastPersona(persona) {
18
- const message = JSON.stringify({ ...persona, isStreaming: currentlyStreaming });
19
- for (const client of personaClients) {
20
- if (client.readyState === WebSocket.OPEN) {
21
- client.send(message);
22
- }
23
- }
24
- }
25
- // Update streaming state and broadcast to persona clients (Story 94-1: MSSCI-14660)
26
- export function setStreamingState(streaming) {
27
- if (currentlyStreaming === streaming)
28
- return;
29
- currentlyStreaming = streaming;
30
- const message = JSON.stringify({ type: 'streaming', isStreaming: streaming });
31
- for (const client of personaClients) {
32
- if (client.readyState === WebSocket.OPEN) {
33
- client.send(message);
34
- }
35
- }
36
- }
37
- // Create persona API router
38
- export function createPersonaRouter(getProjectDir) {
39
- const router = Router();
40
- // Persona API - GET current persona
41
- router.get('/', (_req, res) => {
42
- const projectDir = getProjectDir();
43
- const sessionId = process.env.CYCLIST_SESSION_ID;
44
- if (!detectPennyfarthingProject(projectDir)) {
45
- return res.status(404).json({ error: 'Not a Pennyfarthing project' });
46
- }
47
- const persona = getCurrentPersona(projectDir, sessionId);
48
- if (!persona) {
49
- return res.status(404).json({ error: 'No active persona' });
50
- }
51
- res.json(persona);
52
- });
53
- // Full persona API - GET complete persona details for popup
54
- router.get('/full', (_req, res) => {
55
- const projectDir = getProjectDir();
56
- const sessionId = process.env.CYCLIST_SESSION_ID;
57
- if (!detectPennyfarthingProject(projectDir)) {
58
- return res.status(404).json({ error: 'Not a Pennyfarthing project' });
59
- }
60
- const fullPersona = getFullPersonaDetails(projectDir, sessionId);
61
- if (!fullPersona) {
62
- return res.status(404).json({ error: 'No active persona' });
63
- }
64
- res.json(fullPersona);
65
- });
66
- return router;
67
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/persona.js';
68
3
  //# sourceMappingURL=persona.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/api/persona.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/api/persona.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,gDAAgD,CAAC"}
@@ -1,6 +1,2 @@
1
- import { Router } from 'express';
2
- export declare function getCurrentPortrait(): {
3
- src: string;
4
- };
5
- export declare function createPortraitRouter(): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/portrait.js';
6
2
  //# sourceMappingURL=portrait.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"portrait.d.ts","sourceRoot":"","sources":["../../src/api/portrait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMjC,wBAAgB,kBAAkB;;EAEjC;AAGD,wBAAgB,oBAAoB,IAAI,MAAM,CAoB7C"}
1
+ {"version":3,"file":"portrait.d.ts","sourceRoot":"","sources":["../../src/api/portrait.ts"],"names":[],"mappings":"AACA,cAAc,iDAAiD,CAAC"}
@@ -1,28 +1,3 @@
1
- import { Router } from 'express';
2
- // Portrait state (in-memory for prototype)
3
- let currentPortrait = { src: '' };
4
- // Get current portrait state
5
- export function getCurrentPortrait() {
6
- return currentPortrait;
7
- }
8
- // Create portrait API router
9
- export function createPortraitRouter() {
10
- const router = Router();
11
- // Portrait API - GET current portrait
12
- router.get('/', (_req, res) => {
13
- res.json(currentPortrait);
14
- });
15
- // Portrait API - SET portrait
16
- router.post('/', (req, res) => {
17
- const { src } = req.body;
18
- if (src && typeof src === 'string') {
19
- currentPortrait = { src };
20
- res.json({ success: true, src });
21
- }
22
- else {
23
- res.status(400).json({ error: 'Invalid portrait src' });
24
- }
25
- });
26
- return router;
27
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/portrait.js';
28
3
  //# sourceMappingURL=portrait.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"portrait.js","sourceRoot":"","sources":["../../src/api/portrait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,2CAA2C;AAC3C,IAAI,eAAe,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAElC,6BAA6B;AAC7B,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,sCAAsC;IACtC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC5B,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,8BAA8B;IAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,eAAe,GAAG,EAAE,GAAG,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"portrait.js","sourceRoot":"","sources":["../../src/api/portrait.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,iDAAiD,CAAC"}
@@ -1,54 +1,2 @@
1
- /**
2
- * Settings API Router (Story 35-1)
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 { type CyclistSettings } from '../settings.js';
11
- /**
12
- * Extended settings response that includes theme and handoff_mode from config.local.yaml
13
- * These are NOT part of CyclistSettings - stored ONLY in .pennyfarthing/config.local.yaml
14
- *
15
- * Note: relay_mode is part of CyclistSettings.workflow since MSSCI-12395
16
- */
17
- export interface SettingsResponse extends Omit<CyclistSettings, 'workflow'> {
18
- workflow: CyclistSettings['workflow'] & {
19
- handoff_mode?: string;
20
- bell_mode?: boolean;
21
- relay_mode?: boolean;
22
- };
23
- pennyfarthing?: {
24
- theme: string;
25
- };
26
- }
27
- /**
28
- * Error codes for settings API responses
29
- */
30
- export type ErrorCode = 'VALIDATION_ERROR' | 'FILE_ERROR' | 'PERMISSION_ERROR' | 'UNKNOWN_ERROR';
31
- /**
32
- * Error response structure for consistent API error handling
33
- * AC4: Consistent error handling with user feedback
34
- */
35
- export interface ErrorResponse {
36
- error: boolean;
37
- code: ErrorCode;
38
- message: string;
39
- }
40
- /**
41
- * Create a consistent error response object
42
- * AC4: Helper for consistent error formatting
43
- */
44
- export declare function createErrorResponse(code: ErrorCode, message: string): ErrorResponse;
45
- /**
46
- * Get settings for WebSocket broadcast
47
- * Used by websocket.ts for /ws/settings endpoint
48
- */
49
- export declare function getSettingsForWebSocket(projectDir: string | null): Promise<Record<string, unknown>>;
50
- /**
51
- * Create the settings router
52
- */
53
- export declare function createSettingsRouter(): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/settings.js';
54
2
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/api/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,OAAO,EAAwC,KAAK,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AAShH;;;;;GAKG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;IACzE,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG;QACtC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,aAAa,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAMD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,kBAAkB,GAAG,YAAY,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAEjG;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAMnF;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmDzG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAob7C"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/api/settings.ts"],"names":[],"mappings":"AACA,cAAc,iDAAiD,CAAC"}