@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.
- 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/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/menu-builder.d.ts.map +1 -1
- package/dist/menu-builder.js +0 -1
- package/dist/menu-builder.js.map +1 -1
- package/dist/public/css/react.css +1 -1
- package/dist/public/js/react/react.js +51 -59
- package/dist/server.d.ts +16 -85
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +38 -409
- 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 +29 -8
- package/dist/sprint-data.js.map +1 -1
- package/dist/websocket.d.ts +2 -0
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +45 -78
- package/dist/websocket.js.map +1 -1
- package/package.json +33 -35
- 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/src/public/App.tsx +21 -5
- package/src/public/components/BikeRackIndex.tsx +0 -1
- package/src/public/components/BikeRackWorkspace.tsx +86 -11
- package/src/public/components/DockviewWorkspace.tsx +19 -8
- package/src/public/components/StandalonePanel.tsx +1 -3
- package/src/public/components/panel-registry.ts +3 -1
- package/src/public/components/panels/AuditLogPanel.tsx +28 -4
- package/src/public/components/panels/GitPanel.tsx +1 -20
- package/src/public/components/panels/SettingsPanel.tsx +0 -1
- package/src/public/components/panels/SprintPanel.tsx +32 -1
- package/src/public/components/panels/index.ts +0 -2
- package/src/public/hooks/useFocusPanel.ts +137 -0
- package/src/public/hooks/useLayoutPersistence.ts +8 -5
- package/src/public/styles/dockview-theme.css +1 -84
- package/src/public/styles/tailwind.css +27 -32
- package/src/public/utils/slash-commands.ts +122 -98
- package/LICENSE +0 -14
- package/dist/hooks/cyclist-pretooluse-hook.d.ts +0 -60
- package/dist/hooks/cyclist-pretooluse-hook.d.ts.map +0 -1
- package/dist/hooks/cyclist-pretooluse-hook.js +0 -57
- package/dist/hooks/cyclist-pretooluse-hook.js.map +0 -1
- package/dist/hooks/pretooluse-hook.d.ts +0 -89
- package/dist/hooks/pretooluse-hook.d.ts.map +0 -1
- package/dist/hooks/pretooluse-hook.js +0 -235
- package/dist/hooks/pretooluse-hook.js.map +0 -1
- package/dist/notification-sound.d.ts +0 -59
- package/dist/notification-sound.d.ts.map +0 -1
- package/dist/notification-sound.js +0 -219
- package/dist/notification-sound.js.map +0 -1
- package/dist/plugin-loader.test.d.ts +0 -17
- package/dist/plugin-loader.test.d.ts.map +0 -1
- package/dist/plugin-loader.test.js +0 -407
- package/dist/plugin-loader.test.js.map +0 -1
- 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/components/panels/TTYPanel.tsx +0 -299
- package/src/public/types/electron.d.ts +0 -18
package/dist/api/mode.d.ts
CHANGED
|
@@ -1,23 +1,2 @@
|
|
|
1
|
-
|
|
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
|
package/dist/api/mode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/api/mode.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
2
|
-
|
|
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
|
package/dist/api/mode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/api/mode.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/api/mode.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,6CAA6C,CAAC"}
|
package/dist/api/otlp.d.ts
CHANGED
package/dist/api/otlp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otlp.d.ts","sourceRoot":"","sources":["../../src/api/otlp.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
2
|
-
|
|
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
|
package/dist/api/otlp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otlp.js","sourceRoot":"","sources":["../../src/api/otlp.ts"],"names":[],"mappings":"AAAA,
|
|
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":"
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"AACA,cAAc,oDAAoD,CAAC"}
|
package/dist/api/permissions.js
CHANGED
|
@@ -1,67 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,oDAAoD,CAAC"}
|
package/dist/api/persona.d.ts
CHANGED
|
@@ -1,9 +1,2 @@
|
|
|
1
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../src/api/persona.ts"],"names":[],"mappings":"AACA,cAAc,gDAAgD,CAAC"}
|
package/dist/api/persona.js
CHANGED
|
@@ -1,68 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
package/dist/api/persona.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/api/persona.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/api/persona.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,gDAAgD,CAAC"}
|
package/dist/api/portrait.d.ts
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"portrait.d.ts","sourceRoot":"","sources":["../../src/api/portrait.ts"],"names":[],"mappings":"AACA,cAAc,iDAAiD,CAAC"}
|
package/dist/api/portrait.js
CHANGED
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
package/dist/api/portrait.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portrait.js","sourceRoot":"","sources":["../../src/api/portrait.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"portrait.js","sourceRoot":"","sources":["../../src/api/portrait.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,iDAAiD,CAAC"}
|
package/dist/api/settings.d.ts
CHANGED
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/api/settings.ts"],"names":[],"mappings":"AACA,cAAc,iDAAiD,CAAC"}
|