@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,3 +1,2 @@
1
- import { Router } from 'express';
2
- export declare function createAgentLoadRouter(getProjectDir: () => string): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/agent-load.js';
3
2
  //# sourceMappingURL=agent-load.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-load.d.ts","sourceRoot":"","sources":["../../src/api/agent-load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAqCjC,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,MAAM,CAyIzE"}
1
+ {"version":3,"file":"agent-load.d.ts","sourceRoot":"","sources":["../../src/api/agent-load.ts"],"names":[],"mappings":"AACA,cAAc,mDAAmD,CAAC"}
@@ -1,124 +1,3 @@
1
- import { Router } from 'express';
2
- import * as fs from 'node:fs';
3
- import { join } from 'node:path';
4
- import { getPrimeContextJson } from '../prime.js';
5
- const PRIMARY_AGENTS = [
6
- 'sm', 'tea', 'dev', 'reviewer', 'architect',
7
- 'pm', 'tech-writer', 'ux-designer', 'devops', 'orchestrator', 'ba',
8
- ];
9
- const VALID_SIDECAR_FILES = ['patterns.md', 'gotchas.md', 'decisions.md'];
10
- const CACHE_TTL_MS = 60_000;
11
- const UPPERCASE_SEGMENTS = new Set(['ux']);
12
- function formatAgentName(agent) {
13
- return agent.split('-').map((part) => UPPERCASE_SEGMENTS.has(part) ? part.toUpperCase() : part.charAt(0).toUpperCase() + part.slice(1)).join('-');
14
- }
15
- export function createAgentLoadRouter(getProjectDir) {
16
- const router = Router();
17
- let cache = null;
18
- let cachedAtMs = 0;
19
- router.get('/', async (_req, res) => {
20
- const now = Date.now();
21
- // Return cached if within TTL
22
- if (cache && (now - cachedAtMs) < CACHE_TTL_MS) {
23
- res.json(cache);
24
- return;
25
- }
26
- const projectDir = getProjectDir();
27
- // Run all agents in parallel
28
- const results = await Promise.all(PRIMARY_AGENTS.map(async (agent) => {
29
- try {
30
- const output = getPrimeContextJson(agent, projectDir, 'FULL');
31
- if (!output) {
32
- return {
33
- agent,
34
- totalTokens: null,
35
- error: `Failed to load context for agent "${agent}"`,
36
- };
37
- }
38
- // Strip context field — never expose full prompt text
39
- const { context: _context, ...safe } = output;
40
- return {
41
- agent,
42
- totalTokens: safe.totalTokens ?? 0,
43
- tokenCounts: safe.tokenCounts,
44
- components: safe.components,
45
- };
46
- }
47
- catch (err) {
48
- return {
49
- agent,
50
- totalTokens: null,
51
- error: err instanceof Error ? err.message : `Unknown error for agent "${agent}"`,
52
- };
53
- }
54
- }));
55
- // Check if ALL agents failed
56
- const allFailed = results.every((r) => r.totalTokens === null);
57
- if (allFailed) {
58
- res.status(500).json({
59
- error: 'Failed to load agent context',
60
- details: 'All agents returned null',
61
- });
62
- return;
63
- }
64
- const totalAcrossAllAgents = results.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
65
- const response = {
66
- agents: results,
67
- cachedAt: new Date(now).toISOString(),
68
- totalAcrossAllAgents,
69
- };
70
- // Store in cache
71
- cache = response;
72
- cachedAtMs = now;
73
- res.json(response);
74
- });
75
- router.post('/prune-sidecar', async (req, res) => {
76
- const { agent, file } = req.body;
77
- // Validate input
78
- if (!agent || !PRIMARY_AGENTS.includes(agent)) {
79
- res.status(400).json({
80
- success: false,
81
- error: `Invalid agent. Must be one of: ${PRIMARY_AGENTS.join(', ')}`,
82
- });
83
- return;
84
- }
85
- if (!file || !VALID_SIDECAR_FILES.includes(file)) {
86
- res.status(400).json({
87
- success: false,
88
- error: `Invalid sidecar file. Must be one of: ${VALID_SIDECAR_FILES.join(', ')}`,
89
- });
90
- return;
91
- }
92
- const projectDir = getProjectDir();
93
- const sidecarPath = join(projectDir, '.pennyfarthing', 'sidecars', agent, file);
94
- // Check sidecar exists
95
- if (!fs.existsSync(sidecarPath)) {
96
- res.status(404).json({
97
- success: false,
98
- error: `Sidecar file not found: .pennyfarthing/sidecars/${agent}/${file}`,
99
- });
100
- return;
101
- }
102
- // Read current sidecar content
103
- const oldContent = fs.readFileSync(sidecarPath, 'utf-8');
104
- // Read template and substitute agent name
105
- const templatePath = join(projectDir, 'pennyfarthing-dist', 'templates', 'sidecar', `${file}.template`);
106
- const template = fs.readFileSync(templatePath, 'utf-8');
107
- const agentName = formatAgentName(agent);
108
- const newContent = template.replace(/\$\{AGENT_NAME\}/g, agentName);
109
- // Write pruned content
110
- fs.writeFileSync(sidecarPath, newContent, 'utf-8');
111
- // Invalidate GET cache
112
- cache = null;
113
- cachedAtMs = 0;
114
- const tokensFreed = Math.floor((oldContent.length - newContent.length) / 4);
115
- res.json({
116
- success: true,
117
- tokensFreed,
118
- agent,
119
- file,
120
- });
121
- });
122
- return router;
123
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/agent-load.js';
124
3
  //# sourceMappingURL=agent-load.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-load.js","sourceRoot":"","sources":["../../src/api/agent-load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-load.js","sourceRoot":"","sources":["../../src/api/agent-load.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,mDAAmD,CAAC"}
@@ -1,18 +1,2 @@
1
- /**
2
- * Audit Log API Router
3
- *
4
- * REST API for tool execution audit log with filtering, stats, and export.
5
- *
6
- * Endpoints:
7
- * - GET /api/audit-log - List all tool events (with filtering and pagination)
8
- * - GET /api/audit-log/types - Get unique tool types
9
- * - GET /api/audit-log/stats - Get audit log statistics
10
- * - GET /api/audit-log/export - Export as JSON or CSV
11
- * - DELETE /api/audit-log - Clear the audit log
12
- */
13
- import { Router } from 'express';
14
- /**
15
- * Create audit log API router
16
- */
17
- export declare function createAuditLogRouter(): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/audit-log.js';
18
2
  //# sourceMappingURL=audit-log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/api/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAqBjC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAiJ7C"}
1
+ {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/api/audit-log.ts"],"names":[],"mappings":"AACA,cAAc,kDAAkD,CAAC"}
@@ -1,163 +1,3 @@
1
- /**
2
- * Audit Log API Router
3
- *
4
- * REST API for tool execution audit log with filtering, stats, and export.
5
- *
6
- * Endpoints:
7
- * - GET /api/audit-log - List all tool events (with filtering and pagination)
8
- * - GET /api/audit-log/types - Get unique tool types
9
- * - GET /api/audit-log/stats - Get audit log statistics
10
- * - GET /api/audit-log/export - Export as JSON or CSV
11
- * - DELETE /api/audit-log - Clear the audit log
12
- */
13
- import { Router } from 'express';
14
- import { getToolEventsFiltered, getToolTypes, getAuditLogStats, exportAuditLogAsJSON, exportAuditLogAsCSV, resetEventStore, } from '../otlp-receiver.js';
15
- // =============================================================================
16
- // Constants
17
- // =============================================================================
18
- const DEFAULT_LIMIT = 100;
19
- const MAX_LIMIT = 1000;
20
- // =============================================================================
21
- // Router Factory
22
- // =============================================================================
23
- /**
24
- * Create audit log API router
25
- */
26
- export function createAuditLogRouter() {
27
- const router = Router();
28
- /**
29
- * GET /api/audit-log
30
- *
31
- * Returns list of tool events with filtering and pagination.
32
- *
33
- * Query parameters:
34
- * - toolType: Filter by tool type (e.g., "Bash", "Read")
35
- * - status: Filter by status ("success" or "error")
36
- * - offset: Pagination offset (default: 0)
37
- * - limit: Pagination limit (default: 100, max: 1000)
38
- */
39
- router.get('/', (req, res) => {
40
- try {
41
- const toolType = req.query.toolType;
42
- const status = req.query.status;
43
- // Get events (optionally filtered by tool type)
44
- let events = getToolEventsFiltered(toolType);
45
- // Filter by status if specified
46
- if (status === 'success') {
47
- events = events.filter(e => e.success);
48
- }
49
- else if (status === 'error') {
50
- events = events.filter(e => !e.success);
51
- }
52
- // Parse pagination
53
- let offset = 0;
54
- let limit = DEFAULT_LIMIT;
55
- if (req.query.offset !== undefined) {
56
- offset = Math.max(0, Number(req.query.offset) || 0);
57
- }
58
- if (req.query.limit !== undefined) {
59
- limit = Math.min(MAX_LIMIT, Math.max(1, Number(req.query.limit) || DEFAULT_LIMIT));
60
- }
61
- // Apply pagination (newest first)
62
- const sorted = [...events].reverse();
63
- const paginated = sorted.slice(offset, offset + limit);
64
- res.json({
65
- entries: paginated,
66
- total: events.length,
67
- offset,
68
- limit,
69
- });
70
- }
71
- catch (error) {
72
- console.error('[AuditLog API] Error fetching entries:', error);
73
- res.status(500).json({ error: 'Internal server error' });
74
- }
75
- });
76
- /**
77
- * GET /api/audit-log/types
78
- *
79
- * Returns list of unique tool types in the audit log.
80
- */
81
- router.get('/types', (_req, res) => {
82
- try {
83
- const types = getToolTypes();
84
- res.json({ types });
85
- }
86
- catch (error) {
87
- console.error('[AuditLog API] Error fetching types:', error);
88
- res.status(500).json({ error: 'Internal server error' });
89
- }
90
- });
91
- /**
92
- * GET /api/audit-log/stats
93
- *
94
- * Returns summary statistics for the audit log.
95
- */
96
- router.get('/stats', (_req, res) => {
97
- try {
98
- const stats = getAuditLogStats();
99
- res.json(stats);
100
- }
101
- catch (error) {
102
- console.error('[AuditLog API] Error fetching stats:', error);
103
- res.status(500).json({ error: 'Internal server error' });
104
- }
105
- });
106
- /**
107
- * GET /api/audit-log/export
108
- *
109
- * Export audit log as JSON or CSV.
110
- *
111
- * Query parameters:
112
- * - format: "json" (default) or "csv"
113
- * - toolType: Optional filter by tool type
114
- * - download: If "true", sets Content-Disposition header
115
- */
116
- router.get('/export', (req, res) => {
117
- try {
118
- const format = req.query.format || 'json';
119
- const toolType = req.query.toolType;
120
- const download = req.query.download === 'true';
121
- let content;
122
- let contentType;
123
- let extension;
124
- if (format === 'csv') {
125
- content = exportAuditLogAsCSV(toolType);
126
- contentType = 'text/csv';
127
- extension = 'csv';
128
- }
129
- else {
130
- content = exportAuditLogAsJSON(toolType);
131
- contentType = 'application/json';
132
- extension = 'json';
133
- }
134
- if (download) {
135
- const filename = `cyclist-audit-log-${new Date().toISOString().replace(/[:.]/g, '-')}.${extension}`;
136
- res.setHeader('Content-Disposition', `attachment; filename="${filename}"`);
137
- }
138
- res.setHeader('Content-Type', contentType);
139
- res.send(content);
140
- }
141
- catch (error) {
142
- console.error('[AuditLog API] Error exporting:', error);
143
- res.status(500).json({ error: 'Internal server error' });
144
- }
145
- });
146
- /**
147
- * DELETE /api/audit-log
148
- *
149
- * Clear the audit log.
150
- */
151
- router.delete('/', (_req, res) => {
152
- try {
153
- resetEventStore();
154
- res.json({ success: true });
155
- }
156
- catch (error) {
157
- console.error('[AuditLog API] Error clearing:', error);
158
- res.status(500).json({ error: 'Internal server error' });
159
- }
160
- });
161
- return router;
162
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/audit-log.js';
163
3
  //# sourceMappingURL=audit-log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/api/audit-log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/api/audit-log.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,kDAAkD,CAAC"}
@@ -1,27 +1,2 @@
1
- /**
2
- * Background Tasks API (Story 35-16)
3
- *
4
- * REST endpoint for querying tracked background tasks.
5
- * Integrates with otlp-receiver's background task tracking.
6
- */
7
- import { Router } from 'express';
8
- import { WebSocket } from 'ws';
9
- import { BackgroundTask } from '../otlp-receiver.js';
10
- /**
11
- * Get background task WebSocket clients set
12
- */
13
- export declare function getBackgroundTaskClients(): Set<WebSocket>;
14
- /**
15
- * Broadcast task event to all connected WebSocket clients
16
- */
17
- export declare function broadcastBackgroundTaskEvent(type: 'task:started' | 'task:completed', task: BackgroundTask): void;
18
- /**
19
- * Initialize WebSocket broadcasts for background task events
20
- * Call this after setting up the WebSocket server
21
- */
22
- export declare function initBackgroundTaskBroadcast(): void;
23
- /**
24
- * Create Express router for background tasks API
25
- */
26
- export declare function createBackgroundTasksRouter(): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/background-tasks.js';
27
2
  //# sourceMappingURL=background-tasks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"background-tasks.d.ts","sourceRoot":"","sources":["../../src/api/background-tasks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAsB,cAAc,EAA6D,MAAM,qBAAqB,CAAC;AAKpI;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,GAAG,CAAC,SAAS,CAAC,CAEzD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAOhH;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAQlD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAapD"}
1
+ {"version":3,"file":"background-tasks.d.ts","sourceRoot":"","sources":["../../src/api/background-tasks.ts"],"names":[],"mappings":"AACA,cAAc,yDAAyD,CAAC"}
@@ -1,56 +1,3 @@
1
- /**
2
- * Background Tasks API (Story 35-16)
3
- *
4
- * REST endpoint for querying tracked background tasks.
5
- * Integrates with otlp-receiver's background task tracking.
6
- */
7
- import { Router } from 'express';
8
- import { WebSocket } from 'ws';
9
- import { getBackgroundTasks, setBackgroundTaskStartCallback, setBackgroundTaskCallback } from '../otlp-receiver.js';
10
- // WebSocket clients for real-time updates
11
- const backgroundTaskClients = new Set();
12
- /**
13
- * Get background task WebSocket clients set
14
- */
15
- export function getBackgroundTaskClients() {
16
- return backgroundTaskClients;
17
- }
18
- /**
19
- * Broadcast task event to all connected WebSocket clients
20
- */
21
- export function broadcastBackgroundTaskEvent(type, task) {
22
- const message = JSON.stringify({ type, task });
23
- for (const client of backgroundTaskClients) {
24
- if (client.readyState === WebSocket.OPEN) {
25
- client.send(message);
26
- }
27
- }
28
- }
29
- /**
30
- * Initialize WebSocket broadcasts for background task events
31
- * Call this after setting up the WebSocket server
32
- */
33
- export function initBackgroundTaskBroadcast() {
34
- setBackgroundTaskStartCallback((task) => {
35
- broadcastBackgroundTaskEvent('task:started', task);
36
- });
37
- setBackgroundTaskCallback((task) => {
38
- broadcastBackgroundTaskEvent('task:completed', task);
39
- });
40
- }
41
- /**
42
- * Create Express router for background tasks API
43
- */
44
- export function createBackgroundTasksRouter() {
45
- const router = Router();
46
- /**
47
- * GET /api/background-tasks
48
- * Returns list of all tracked background tasks
49
- */
50
- router.get('/', (_req, res) => {
51
- const tasks = getBackgroundTasks();
52
- res.json({ tasks });
53
- });
54
- return router;
55
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/background-tasks.js';
56
3
  //# sourceMappingURL=background-tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"background-tasks.js","sourceRoot":"","sources":["../../src/api/background-tasks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAkB,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEpI,0CAA0C;AAC1C,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAa,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAuC,EAAE,IAAoB;IACxG,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B;IACzC,8BAA8B,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,4BAA4B,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,yBAAyB,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,4BAA4B,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"background-tasks.js","sourceRoot":"","sources":["../../src/api/background-tasks.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,yDAAyD,CAAC"}
@@ -1,19 +1,2 @@
1
- /**
2
- * Bell Mode API - WebSocket broadcast for message consumption
3
- *
4
- * When the PostToolUse hook consumes a queued message, it calls /api/bell-consumed.
5
- * This module broadcasts to connected browsers so they can:
6
- * 1. Dequeue the message from in-memory queue
7
- * 2. Display the injected message in the conversation stream
8
- */
9
- import { WebSocket } from 'ws';
10
- /**
11
- * Get bell clients set (for WebSocket setup)
12
- */
13
- export declare function getBellClients(): Set<WebSocket>;
14
- /**
15
- * Broadcast bell consumed event to all connected browsers
16
- * @param text - The message text that was injected into Claude's context
17
- */
18
- export declare function broadcastBellConsumed(text: string): void;
1
+ export * from '@pennyfarthing/core/dist/server/api/bell.js';
19
2
  //# sourceMappingURL=bell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bell.d.ts","sourceRoot":"","sources":["../../src/api/bell.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAK/B;;GAEG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAAC,SAAS,CAAC,CAE/C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAYxD"}
1
+ {"version":3,"file":"bell.d.ts","sourceRoot":"","sources":["../../src/api/bell.ts"],"names":[],"mappings":"AACA,cAAc,6CAA6C,CAAC"}
package/dist/api/bell.js CHANGED
@@ -1,34 +1,3 @@
1
- /**
2
- * Bell Mode API - WebSocket broadcast for message consumption
3
- *
4
- * When the PostToolUse hook consumes a queued message, it calls /api/bell-consumed.
5
- * This module broadcasts to connected browsers so they can:
6
- * 1. Dequeue the message from in-memory queue
7
- * 2. Display the injected message in the conversation stream
8
- */
9
- import { WebSocket } from 'ws';
10
- // Bell WebSocket clients
11
- const bellClients = new Set();
12
- /**
13
- * Get bell clients set (for WebSocket setup)
14
- */
15
- export function getBellClients() {
16
- return bellClients;
17
- }
18
- /**
19
- * Broadcast bell consumed event to all connected browsers
20
- * @param text - The message text that was injected into Claude's context
21
- */
22
- export function broadcastBellConsumed(text) {
23
- const message = JSON.stringify({
24
- type: 'bell-consumed',
25
- text,
26
- timestamp: Date.now(),
27
- });
28
- for (const client of bellClients) {
29
- if (client.readyState === WebSocket.OPEN) {
30
- client.send(message);
31
- }
32
- }
33
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/bell.js';
34
3
  //# sourceMappingURL=bell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bell.js","sourceRoot":"","sources":["../../src/api/bell.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,yBAAyB;AACzB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,IAAI,EAAE,eAAe;QACrB,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"bell.js","sourceRoot":"","sources":["../../src/api/bell.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,6CAA6C,CAAC"}
@@ -1,9 +1,2 @@
1
- /**
2
- * Code Markers API route — Story 80-3 (MSSCI-14456)
3
- *
4
- * GET /api/code-markers?repo=pennyfarthing&days=90&type=all|stale|deprecated
5
- * Thin wrapper calling Python codemarkers module via execFile.
6
- */
7
- import { Router } from 'express';
8
- export declare function createCodeMarkersRouter(getProjectDir: () => string): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/code-markers.js';
9
2
  //# sourceMappingURL=code-markers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-markers.d.ts","sourceRoot":"","sources":["../../src/api/code-markers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,MAAM,CAyD3E"}
1
+ {"version":3,"file":"code-markers.d.ts","sourceRoot":"","sources":["../../src/api/code-markers.ts"],"names":[],"mappings":"AACA,cAAc,qDAAqD,CAAC"}
@@ -1,62 +1,3 @@
1
- /**
2
- * Code Markers API route — Story 80-3 (MSSCI-14456)
3
- *
4
- * GET /api/code-markers?repo=pennyfarthing&days=90&type=all|stale|deprecated
5
- * Thin wrapper calling Python codemarkers module via execFile.
6
- */
7
- import { Router } from 'express';
8
- import { execFile } from 'child_process';
9
- import { join } from 'path';
10
- export function createCodeMarkersRouter(getProjectDir) {
11
- const router = Router();
12
- router.get('/', (req, res) => {
13
- const projectDir = getProjectDir();
14
- const days = String(req.query.days || '90');
15
- const repo = req.query.repo;
16
- const type = req.query.type;
17
- const args = [
18
- '-m', 'pennyfarthing_scripts.codemarkers',
19
- 'analyze',
20
- '--format', 'json',
21
- '--days', days,
22
- ];
23
- if (repo) {
24
- args.push('--repo', repo);
25
- }
26
- else {
27
- args.push('--path', projectDir);
28
- }
29
- if (type) {
30
- args.push('--type', type);
31
- }
32
- const pythonPath = join(projectDir, 'pennyfarthing');
33
- execFile('python3', args, {
34
- cwd: pythonPath,
35
- env: { ...process.env, PYTHONPATH: pythonPath },
36
- timeout: 30000,
37
- maxBuffer: 10 * 1024 * 1024,
38
- }, (err, stdout, stderr) => {
39
- if (err) {
40
- console.error('[CodeMarkers] Analysis failed:', stderr || err.message);
41
- res.status(500).json({
42
- success: false,
43
- error: stderr || err.message,
44
- });
45
- return;
46
- }
47
- try {
48
- const data = JSON.parse(stdout);
49
- res.json(data);
50
- }
51
- catch (parseErr) {
52
- console.error('[CodeMarkers] JSON parse failed:', parseErr);
53
- res.status(500).json({
54
- success: false,
55
- error: 'Failed to parse code markers analysis output',
56
- });
57
- }
58
- });
59
- });
60
- return router;
61
- }
1
+ // Re-export from @pennyfarthing/core (Story 98-17)
2
+ export * from '@pennyfarthing/core/dist/server/api/code-markers.js';
62
3
  //# sourceMappingURL=code-markers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-markers.js","sourceRoot":"","sources":["../../src/api/code-markers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,uBAAuB,CAAC,aAA2B;IACjE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAA0B,CAAC;QAClD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAA0B,CAAC;QAElD,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,mCAAmC;YACzC,SAAS;YACT,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,IAAI;SACf,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAErD,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;YACxB,GAAG,EAAE,UAAU;YACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE;YAC/C,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACzB,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,MAAM,IAAI,GAAG,CAAC,OAAO;iBAC7B,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,QAAQ,CAAC,CAAC;gBAC5D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,8CAA8C;iBACtD,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"code-markers.js","sourceRoot":"","sources":["../../src/api/code-markers.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,qDAAqD,CAAC"}
@@ -1,3 +1,2 @@
1
- import { Router } from 'express';
2
- export declare function createComplexityRouter(getProjectDir: () => string): Router;
1
+ export * from '@pennyfarthing/core/dist/server/api/complexity.js';
3
2
  //# sourceMappingURL=complexity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"complexity.d.ts","sourceRoot":"","sources":["../../src/api/complexity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,MAAM,CAgD1E"}
1
+ {"version":3,"file":"complexity.d.ts","sourceRoot":"","sources":["../../src/api/complexity.ts"],"names":[],"mappings":"AACA,cAAc,mDAAmD,CAAC"}