@pennyfarthing/cyclist 10.2.0 → 10.3.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 (48) hide show
  1. package/dist/api/agent-load.js +1 -1
  2. package/dist/api/agent-load.js.map +1 -1
  3. package/dist/api/theme-agents.js +2 -2
  4. package/dist/api/theme-agents.js.map +1 -1
  5. package/dist/bikerack.d.ts +2 -0
  6. package/dist/bikerack.d.ts.map +1 -0
  7. package/dist/bikerack.js +43 -0
  8. package/dist/bikerack.js.map +1 -0
  9. package/dist/hooks/cyclist-pretooluse-hook.d.ts +60 -0
  10. package/dist/hooks/cyclist-pretooluse-hook.d.ts.map +1 -0
  11. package/dist/hooks/cyclist-pretooluse-hook.js +57 -0
  12. package/dist/hooks/cyclist-pretooluse-hook.js.map +1 -0
  13. package/dist/hooks/pretooluse-hook.d.ts +89 -0
  14. package/dist/hooks/pretooluse-hook.d.ts.map +1 -0
  15. package/dist/hooks/pretooluse-hook.js +235 -0
  16. package/dist/hooks/pretooluse-hook.js.map +1 -0
  17. package/dist/notification-sound.d.ts +59 -0
  18. package/dist/notification-sound.d.ts.map +1 -0
  19. package/dist/notification-sound.js +219 -0
  20. package/dist/notification-sound.js.map +1 -0
  21. package/dist/plugin-loader.test.d.ts +17 -0
  22. package/dist/plugin-loader.test.d.ts.map +1 -0
  23. package/dist/plugin-loader.test.js +407 -0
  24. package/dist/plugin-loader.test.js.map +1 -0
  25. package/dist/public/css/react.css +1 -1
  26. package/dist/public/js/react/react.js +32 -32
  27. package/dist/server.d.ts +1 -0
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js +9 -0
  30. package/dist/server.js.map +1 -1
  31. package/dist/sprint-data.d.ts +21 -0
  32. package/dist/sprint-data.d.ts.map +1 -1
  33. package/dist/sprint-data.js +26 -1
  34. package/dist/sprint-data.js.map +1 -1
  35. package/dist/theme-metadata.js +1 -1
  36. package/dist/theme-metadata.js.map +1 -1
  37. package/dist/websocket.js +2 -2
  38. package/dist/websocket.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/public/App.tsx +34 -0
  41. package/src/public/components/BikeRackIndex.tsx +54 -0
  42. package/src/public/components/BikeRackWorkspace.tsx +140 -0
  43. package/src/public/components/DockviewWorkspace.tsx +5 -6
  44. package/src/public/components/StandalonePanel.tsx +84 -0
  45. package/src/public/components/panel-registry.ts +11 -0
  46. package/src/public/styles/dockview-theme.css +1 -1
  47. package/src/public/types/electron.d.ts +18 -0
  48. package/src/public/utils/slash-commands.ts +4 -0
@@ -4,7 +4,7 @@ import { join } from 'node:path';
4
4
  import { getPrimeContextJson } from '../prime.js';
5
5
  const PRIMARY_AGENTS = [
6
6
  'sm', 'tea', 'dev', 'reviewer', 'architect',
7
- 'pm', 'tech-writer', 'ux-designer', 'devops', 'orchestrator',
7
+ 'pm', 'tech-writer', 'ux-designer', 'devops', 'orchestrator', 'ba',
8
8
  ];
9
9
  const VALID_SIDECAR_FILES = ['patterns.md', 'gotchas.md', 'decisions.md'];
10
10
  const CACHE_TTL_MS = 60_000;
@@ -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,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW;IAC3C,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI;CAC1D,CAAC;AAEX,MAAM,mBAAmB,GAAG,CAAC,aAAa,EAAE,YAAY,EAAE,cAAc,CAAU,CAAC;AAEnF,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE3C,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACjG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAgBD,MAAM,UAAU,qBAAqB,CAAC,aAA2B;IAC/D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,IAAI,KAAK,GAA6B,IAAI,CAAC;IAC3C,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,8BAA8B;QAC9B,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,YAAY,EAAE,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QAEnC,6BAA6B;QAC7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAA2B,EAAE;YAC1D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAuB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;gBAElF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;wBACL,KAAK;wBACL,WAAW,EAAE,IAAI;wBACjB,KAAK,EAAE,qCAAqC,KAAK,GAAG;qBACrD,CAAC;gBACJ,CAAC;gBAED,sDAAsD;gBACtD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;gBAE9C,OAAO;oBACL,KAAK;oBACL,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;oBAClC,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,KAAK;oBACL,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,KAAK,GAAG;iBACjF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,6BAA6B;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;QAC/D,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,8BAA8B;gBACrC,OAAO,EAAE,0BAA0B;aACpC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,EACtC,CAAC,CACF,CAAC;QAEF,MAAM,QAAQ,GAAsB;YAClC,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YACrC,oBAAoB;SACrB,CAAC;QAEF,iBAAiB;QACjB,KAAK,GAAG,QAAQ,CAAC;QACjB,UAAU,GAAG,GAAG,CAAC;QAEjB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAyC,CAAC;QAEtE,iBAAiB;QACjB,IAAI,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAsC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kCAAkC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACrE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAA0C,CAAC,EAAE,CAAC;YACvF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,yCAAyC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACjF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAEhF,uBAAuB;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,mDAAmD,KAAK,IAAI,IAAI,EAAE;aAC1E,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAEzD,0CAA0C;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAEpE,uBAAuB;QACvB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAEnD,uBAAuB;QACvB,KAAK,GAAG,IAAI,CAAC;QACb,UAAU,GAAG,CAAC,CAAC;QAEf,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5E,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,WAAW;YACX,KAAK;YACL,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -166,8 +166,8 @@ export function getEnhancedThemeData(projectDir) {
166
166
  helper,
167
167
  });
168
168
  }
169
- // Sort agents by a consistent order (orchestrator, sm, tea, dev, reviewer, architect, pm, tech-writer, ux-designer, devops)
170
- const roleOrder = ['orchestrator', 'sm', 'tea', 'dev', 'reviewer', 'architect', 'pm', 'tech-writer', 'ux-designer', 'devops'];
169
+ // Sort agents by a consistent order (orchestrator, sm, tea, dev, reviewer, architect, pm, tech-writer, ux-designer, devops, ba)
170
+ const roleOrder = ['orchestrator', 'sm', 'tea', 'dev', 'reviewer', 'architect', 'pm', 'tech-writer', 'ux-designer', 'devops', 'ba'];
171
171
  enhancedAgents.sort((a, b) => {
172
172
  const aIndex = roleOrder.indexOf(a.role);
173
173
  const bIndex = roleOrder.indexOf(b.role);
@@ -1 +1 @@
1
- {"version":3,"file":"theme-agents.js","sourceRoot":"","sources":["../../src/api/theme-agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-agents.js","sourceRoot":"","sources":["../../src/api/theme-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bikerack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bikerack.d.ts","sourceRoot":"","sources":["../src/bikerack.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ // BikeRack mode entry point (ADR-0024, Rule 9)
2
+ // Sets IS_BIKERACK=1 BEFORE any imports that check it
3
+ process.env.IS_BIKERACK = '1';
4
+ import { createTerminalServer, findAvailablePort } from './server.js';
5
+ import { writeFileSync, unlinkSync, existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ const BIKERACK_PORT_FILE = '.bikerack-port';
8
+ const DEFAULT_PORT = 2898;
9
+ function getProjectDir() {
10
+ return process.cwd();
11
+ }
12
+ function writePortFile(projectDir, port) {
13
+ writeFileSync(join(projectDir, BIKERACK_PORT_FILE), String(port));
14
+ }
15
+ function cleanupPortFile(projectDir) {
16
+ const portFilePath = join(projectDir, BIKERACK_PORT_FILE);
17
+ if (existsSync(portFilePath)) {
18
+ unlinkSync(portFilePath);
19
+ }
20
+ }
21
+ (async () => {
22
+ const server = createTerminalServer();
23
+ const projectDir = getProjectDir();
24
+ const actualPort = await findAvailablePort(DEFAULT_PORT);
25
+ if (actualPort !== DEFAULT_PORT) {
26
+ console.log(`Port ${DEFAULT_PORT} in use, using ${actualPort} instead`);
27
+ }
28
+ server.listen(actualPort, () => {
29
+ console.log(`BikeRack running at http://localhost:${actualPort}`);
30
+ // Write port file AFTER listen() callback (CE-3)
31
+ writePortFile(projectDir, actualPort);
32
+ console.log(`[BikeRack] Wrote .bikerack-port to ${projectDir}`);
33
+ });
34
+ process.on('SIGINT', () => {
35
+ cleanupPortFile(projectDir);
36
+ process.exit(0);
37
+ });
38
+ process.on('SIGTERM', () => {
39
+ cleanupPortFile(projectDir);
40
+ process.exit(0);
41
+ });
42
+ })();
43
+ //# sourceMappingURL=bikerack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bikerack.js","sourceRoot":"","sources":["../src/bikerack.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,sDAAsD;AACtD,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAC5C,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB,EAAE,IAAY;IACrD,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,UAAU,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEzD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,YAAY,kBAAkB,UAAU,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,wCAAwC,UAAU,EAAE,CAAC,CAAC;QAClE,iDAAiD;QACjD,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,eAAe,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,eAAe,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Cyclist PreToolUse Hook - Core Logic
3
+ *
4
+ * Testable module containing all hook logic. Invoked via cyclist-pretooluse-hook.sh
5
+ * which calls `npx tsx` on this file, matching the .sh wrapper pattern used by
6
+ * all other hooks in .claude/settings.local.json.
7
+ *
8
+ * Flow:
9
+ * 1. Claude Code calls cyclist-pretooluse-hook.sh with tool info via stdin (JSON)
10
+ * 2. Shell wrapper invokes this module via npx tsx
11
+ * 3. Script reads port from .cyclist-port in project directory
12
+ * 4. Script sends request to WheelHub's /api/hook-request endpoint
13
+ * 5. WheelHub checks grants / shows approval modal, user decides
14
+ * 6. Script receives response, outputs JSON decision to stdout
15
+ * 7. Claude Code proceeds or blocks based on decision
16
+ *
17
+ * Per ADR-0004: All communication converges through WheelHub.
18
+ *
19
+ * Story: MSSCI-14320 - Update and register PreToolUse hook
20
+ */
21
+ export declare const DEFAULT_PORT = 7432;
22
+ export declare const HOST = "127.0.0.1";
23
+ export declare const TIMEOUT_MS = 120000;
24
+ export declare const PORT_FILE = ".cyclist-port";
25
+ export declare const LEGACY_PORT_FILE = ".cyclist-approval-port";
26
+ export declare const ENDPOINT = "/api/hook-request";
27
+ export interface ToolData {
28
+ tool_name: string;
29
+ tool_use_id: string;
30
+ tool_input: Record<string, unknown>;
31
+ session_id?: string;
32
+ }
33
+ export interface ApprovalRequest {
34
+ toolName: string;
35
+ toolId: string;
36
+ input: Record<string, unknown>;
37
+ sessionId?: string;
38
+ }
39
+ export interface ApprovalResponse {
40
+ decision: 'allow' | 'deny' | 'ask';
41
+ reason?: string;
42
+ data?: Record<string, unknown>;
43
+ }
44
+ export interface HookOutput {
45
+ hookSpecificOutput: {
46
+ hookEventName: 'PreToolUse';
47
+ permissionDecision: string;
48
+ permissionDecisionReason: string;
49
+ updatedInput?: Record<string, unknown>;
50
+ };
51
+ }
52
+ export declare function findProjectRoot(startDir?: string): string | null;
53
+ export declare function getPort(projectRoot?: string | null): number;
54
+ export declare function readPortFile(filePath: string): number | null;
55
+ export declare function readStdin(): Promise<ToolData>;
56
+ export declare function requestApproval(toolData: ApprovalRequest, port?: number): Promise<ApprovalResponse>;
57
+ export declare function buildOutput(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): HookOutput;
58
+ export declare function outputDecision(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): void;
59
+ export declare function main(): Promise<void>;
60
+ //# sourceMappingURL=cyclist-pretooluse-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cyclist-pretooluse-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/cyclist-pretooluse-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,IAAI,cAAc,CAAC;AAChC,eAAO,MAAM,UAAU,SAAU,CAAC;AAClC,eAAO,MAAM,SAAS,kBAAkB,CAAC;AACzC,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAM5C,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE;QAClB,aAAa,EAAE,YAAY,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,wBAAwB,EAAE,MAAM,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC;CACH;AAMD,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAED,wBAAgB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE3D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAEnD;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,UAAU,CAEZ;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,IAAI,CAEN;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Cyclist PreToolUse Hook - Core Logic
3
+ *
4
+ * Testable module containing all hook logic. Invoked via cyclist-pretooluse-hook.sh
5
+ * which calls `npx tsx` on this file, matching the .sh wrapper pattern used by
6
+ * all other hooks in .claude/settings.local.json.
7
+ *
8
+ * Flow:
9
+ * 1. Claude Code calls cyclist-pretooluse-hook.sh with tool info via stdin (JSON)
10
+ * 2. Shell wrapper invokes this module via npx tsx
11
+ * 3. Script reads port from .cyclist-port in project directory
12
+ * 4. Script sends request to WheelHub's /api/hook-request endpoint
13
+ * 5. WheelHub checks grants / shows approval modal, user decides
14
+ * 6. Script receives response, outputs JSON decision to stdout
15
+ * 7. Claude Code proceeds or blocks based on decision
16
+ *
17
+ * Per ADR-0004: All communication converges through WheelHub.
18
+ *
19
+ * Story: MSSCI-14320 - Update and register PreToolUse hook
20
+ */
21
+ // =============================================================================
22
+ // Constants
23
+ // =============================================================================
24
+ export const DEFAULT_PORT = 7432;
25
+ export const HOST = '127.0.0.1';
26
+ export const TIMEOUT_MS = 120_000; // 2 minutes for user to decide
27
+ export const PORT_FILE = '.cyclist-port';
28
+ export const LEGACY_PORT_FILE = '.cyclist-approval-port';
29
+ export const ENDPOINT = '/api/hook-request';
30
+ // =============================================================================
31
+ // Stubs - Dev implements these to GREEN
32
+ // =============================================================================
33
+ export function findProjectRoot(startDir) {
34
+ throw new Error('findProjectRoot not implemented');
35
+ }
36
+ export function getPort(projectRoot) {
37
+ throw new Error('getPort not implemented');
38
+ }
39
+ export function readPortFile(filePath) {
40
+ throw new Error('readPortFile not implemented');
41
+ }
42
+ export async function readStdin() {
43
+ throw new Error('readStdin not implemented');
44
+ }
45
+ export async function requestApproval(toolData, port) {
46
+ throw new Error('requestApproval not implemented');
47
+ }
48
+ export function buildOutput(decision, reason, updatedInput) {
49
+ throw new Error('buildOutput not implemented');
50
+ }
51
+ export function outputDecision(decision, reason, updatedInput) {
52
+ throw new Error('outputDecision not implemented');
53
+ }
54
+ export async function main() {
55
+ throw new Error('main not implemented');
56
+ }
57
+ //# sourceMappingURL=cyclist-pretooluse-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cyclist-pretooluse-hook.js","sourceRoot":"","sources":["../../src/hooks/cyclist-pretooluse-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,+BAA+B;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAmC5C,gFAAgF;AAChF,wCAAwC;AACxC,gFAAgF;AAEhF,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,WAA2B;IACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAyB,EACzB,IAAa;IAEb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,MAAc,EACd,YAA6C;IAE7C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,MAAc,EACd,YAA6C;IAE7C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Cyclist PreToolUse Hook - Core Logic
3
+ *
4
+ * Testable module containing all hook logic. The companion runner script
5
+ * (cyclist-pretooluse-hook.js) imports from the compiled output and invokes main().
6
+ *
7
+ * Flow:
8
+ * 1. Claude Code calls the runner script with tool info via stdin (JSON)
9
+ * 2. Script reads port from .cyclist-port in project directory
10
+ * 3. Script sends request to WheelHub's /api/hook-request endpoint
11
+ * 4. WheelHub checks grants / shows approval modal, user decides
12
+ * 5. Script receives response, outputs JSON decision to stdout
13
+ * 6. Claude Code proceeds or blocks based on decision
14
+ *
15
+ * Per ADR-0004: All communication converges through WheelHub.
16
+ *
17
+ * Story: MSSCI-14320 - Update and register PreToolUse hook
18
+ */
19
+ export declare const DEFAULT_PORT = 7432;
20
+ export declare const HOST = "127.0.0.1";
21
+ export declare const TIMEOUT_MS = 120000;
22
+ export declare const PORT_FILE = ".cyclist-port";
23
+ export declare const LEGACY_PORT_FILE = ".cyclist-approval-port";
24
+ export declare const ENDPOINT = "/api/hook-request";
25
+ export interface ToolData {
26
+ tool_name: string;
27
+ tool_use_id: string;
28
+ tool_input: Record<string, unknown>;
29
+ session_id?: string;
30
+ }
31
+ export interface ApprovalRequest {
32
+ toolName: string;
33
+ toolId: string;
34
+ input: Record<string, unknown>;
35
+ sessionId?: string;
36
+ }
37
+ export interface ApprovalResponse {
38
+ decision: 'allow' | 'deny' | 'ask';
39
+ reason?: string;
40
+ data?: Record<string, unknown>;
41
+ }
42
+ export interface HookOutput {
43
+ hookSpecificOutput: {
44
+ hookEventName: 'PreToolUse';
45
+ permissionDecision: string;
46
+ permissionDecisionReason: string;
47
+ updatedInput?: Record<string, unknown>;
48
+ };
49
+ }
50
+ /**
51
+ * Find the project root by looking for port files or .claude directory.
52
+ * Walks up from startDir (defaults to cwd) until found or reaches filesystem root.
53
+ */
54
+ export declare function findProjectRoot(startDir?: string): string | null;
55
+ /**
56
+ * Read the WheelHub server port. Prefers .cyclist-port, falls back to
57
+ * .cyclist-approval-port for migration compatibility, then default port.
58
+ *
59
+ * Mirrors hooks.py:get_cyclist_port() behavior.
60
+ */
61
+ export declare function getPort(projectRoot?: string | null): number;
62
+ /**
63
+ * Read a port number from a file. Returns null if file doesn't exist or is invalid.
64
+ */
65
+ export declare function readPortFile(filePath: string): number | null;
66
+ /**
67
+ * Read all stdin as JSON.
68
+ */
69
+ export declare function readStdin(): Promise<ToolData>;
70
+ /**
71
+ * Send approval request to WheelHub and wait for response.
72
+ * Returns { decision: "ask" } when WheelHub is unreachable (ECONNREFUSED).
73
+ */
74
+ export declare function requestApproval(toolData: ApprovalRequest, port?: number): Promise<ApprovalResponse>;
75
+ /**
76
+ * Build the Claude Code hook output object.
77
+ * MSSCI-11947: Supports updatedInput passthrough for interactive tools.
78
+ */
79
+ export declare function buildOutput(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): HookOutput;
80
+ /**
81
+ * Output decision to stdout in Claude Code hook format.
82
+ */
83
+ export declare function outputDecision(decision: string, reason: string, updatedInput?: Record<string, unknown> | null): void;
84
+ /**
85
+ * Main hook logic. Reads stdin, sends to WheelHub, outputs decision.
86
+ * MSSCI-11947: Handles data field passthrough for interactive tools.
87
+ */
88
+ export declare function main(): Promise<void>;
89
+ //# sourceMappingURL=pretooluse-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretooluse-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/pretooluse-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,IAAI,cAAc,CAAC;AAChC,eAAO,MAAM,UAAU,SAAU,CAAC;AAClC,eAAO,MAAM,SAAS,kBAAkB,CAAC;AACzC,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAM5C,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE;QAClB,aAAa,EAAE,YAAY,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,wBAAwB,EAAE,MAAM,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC;CACH;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBhE;AAMD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAmB3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB5D;AAMD;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAcnD;AAMD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CA6C3B;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,UAAU,CAcZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5C,IAAI,CAEN;AAMD;;;GAGG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B1C"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Cyclist PreToolUse Hook - Core Logic
3
+ *
4
+ * Testable module containing all hook logic. The companion runner script
5
+ * (cyclist-pretooluse-hook.js) imports from the compiled output and invokes main().
6
+ *
7
+ * Flow:
8
+ * 1. Claude Code calls the runner script with tool info via stdin (JSON)
9
+ * 2. Script reads port from .cyclist-port in project directory
10
+ * 3. Script sends request to WheelHub's /api/hook-request endpoint
11
+ * 4. WheelHub checks grants / shows approval modal, user decides
12
+ * 5. Script receives response, outputs JSON decision to stdout
13
+ * 6. Claude Code proceeds or blocks based on decision
14
+ *
15
+ * Per ADR-0004: All communication converges through WheelHub.
16
+ *
17
+ * Story: MSSCI-14320 - Update and register PreToolUse hook
18
+ */
19
+ import http from 'node:http';
20
+ import fs from 'node:fs';
21
+ import path from 'node:path';
22
+ // =============================================================================
23
+ // Constants
24
+ // =============================================================================
25
+ export const DEFAULT_PORT = 7432;
26
+ export const HOST = '127.0.0.1';
27
+ export const TIMEOUT_MS = 120_000; // 2 minutes for user to decide
28
+ export const PORT_FILE = '.cyclist-port';
29
+ export const LEGACY_PORT_FILE = '.cyclist-approval-port';
30
+ export const ENDPOINT = '/api/hook-request';
31
+ // =============================================================================
32
+ // Project Root Detection
33
+ // =============================================================================
34
+ /**
35
+ * Find the project root by looking for port files or .claude directory.
36
+ * Walks up from startDir (defaults to cwd) until found or reaches filesystem root.
37
+ */
38
+ export function findProjectRoot(startDir) {
39
+ let dir = startDir ?? process.cwd();
40
+ const root = path.parse(dir).root;
41
+ while (dir !== root) {
42
+ if (fs.existsSync(path.join(dir, PORT_FILE))) {
43
+ return dir;
44
+ }
45
+ if (fs.existsSync(path.join(dir, LEGACY_PORT_FILE))) {
46
+ return dir;
47
+ }
48
+ if (fs.existsSync(path.join(dir, '.claude'))) {
49
+ return dir;
50
+ }
51
+ dir = path.dirname(dir);
52
+ }
53
+ return null;
54
+ }
55
+ // =============================================================================
56
+ // Port Discovery
57
+ // =============================================================================
58
+ /**
59
+ * Read the WheelHub server port. Prefers .cyclist-port, falls back to
60
+ * .cyclist-approval-port for migration compatibility, then default port.
61
+ *
62
+ * Mirrors hooks.py:get_cyclist_port() behavior.
63
+ */
64
+ export function getPort(projectRoot) {
65
+ const root = projectRoot ?? findProjectRoot();
66
+ if (!root) {
67
+ return DEFAULT_PORT;
68
+ }
69
+ // Try canonical port file first
70
+ const port = readPortFile(path.join(root, PORT_FILE));
71
+ if (port !== null) {
72
+ return port;
73
+ }
74
+ // Fall back to legacy port file
75
+ const legacyPort = readPortFile(path.join(root, LEGACY_PORT_FILE));
76
+ if (legacyPort !== null) {
77
+ return legacyPort;
78
+ }
79
+ return DEFAULT_PORT;
80
+ }
81
+ /**
82
+ * Read a port number from a file. Returns null if file doesn't exist or is invalid.
83
+ */
84
+ export function readPortFile(filePath) {
85
+ if (!fs.existsSync(filePath)) {
86
+ return null;
87
+ }
88
+ try {
89
+ const content = fs.readFileSync(filePath, 'utf-8').trim();
90
+ const port = parseInt(content, 10);
91
+ if (!isNaN(port) && port > 0 && port < 65536) {
92
+ return port;
93
+ }
94
+ }
95
+ catch {
96
+ // Fall through
97
+ }
98
+ return null;
99
+ }
100
+ // =============================================================================
101
+ // Stdin Reading
102
+ // =============================================================================
103
+ /**
104
+ * Read all stdin as JSON.
105
+ */
106
+ export async function readStdin() {
107
+ return new Promise((resolve, reject) => {
108
+ let data = '';
109
+ process.stdin.setEncoding('utf8');
110
+ process.stdin.on('data', (chunk) => { data += chunk; });
111
+ process.stdin.on('end', () => {
112
+ try {
113
+ resolve(JSON.parse(data));
114
+ }
115
+ catch (e) {
116
+ reject(new Error(`Invalid JSON input: ${e.message}`));
117
+ }
118
+ });
119
+ process.stdin.on('error', reject);
120
+ });
121
+ }
122
+ // =============================================================================
123
+ // HTTP Request
124
+ // =============================================================================
125
+ /**
126
+ * Send approval request to WheelHub and wait for response.
127
+ * Returns { decision: "ask" } when WheelHub is unreachable (ECONNREFUSED).
128
+ */
129
+ export async function requestApproval(toolData, port) {
130
+ const resolvedPort = port ?? getPort();
131
+ const postData = JSON.stringify(toolData);
132
+ return new Promise((resolve, reject) => {
133
+ const options = {
134
+ hostname: HOST,
135
+ port: resolvedPort,
136
+ path: ENDPOINT,
137
+ method: 'POST',
138
+ headers: {
139
+ 'Content-Type': 'application/json',
140
+ 'Content-Length': Buffer.byteLength(postData),
141
+ },
142
+ timeout: TIMEOUT_MS,
143
+ };
144
+ const req = http.request(options, (res) => {
145
+ let data = '';
146
+ res.on('data', (chunk) => { data += chunk; });
147
+ res.on('end', () => {
148
+ try {
149
+ resolve(JSON.parse(data));
150
+ }
151
+ catch (e) {
152
+ reject(new Error(`Invalid response from WheelHub: ${e.message}`));
153
+ }
154
+ });
155
+ });
156
+ req.on('error', (e) => {
157
+ if (e.code === 'ECONNREFUSED') {
158
+ resolve({ decision: 'ask', reason: 'WheelHub not running, deferring to Claude Code' });
159
+ }
160
+ else {
161
+ reject(e);
162
+ }
163
+ });
164
+ req.on('timeout', () => {
165
+ req.destroy();
166
+ reject(new Error('Approval request timed out'));
167
+ });
168
+ req.write(postData);
169
+ req.end();
170
+ });
171
+ }
172
+ // =============================================================================
173
+ // Output Formatting
174
+ // =============================================================================
175
+ /**
176
+ * Build the Claude Code hook output object.
177
+ * MSSCI-11947: Supports updatedInput passthrough for interactive tools.
178
+ */
179
+ export function buildOutput(decision, reason, updatedInput) {
180
+ const output = {
181
+ hookSpecificOutput: {
182
+ hookEventName: 'PreToolUse',
183
+ permissionDecision: decision,
184
+ permissionDecisionReason: reason,
185
+ },
186
+ };
187
+ if (updatedInput) {
188
+ output.hookSpecificOutput.updatedInput = updatedInput;
189
+ }
190
+ return output;
191
+ }
192
+ /**
193
+ * Output decision to stdout in Claude Code hook format.
194
+ */
195
+ export function outputDecision(decision, reason, updatedInput) {
196
+ console.log(JSON.stringify(buildOutput(decision, reason, updatedInput)));
197
+ }
198
+ // =============================================================================
199
+ // Main Entry Point
200
+ // =============================================================================
201
+ /**
202
+ * Main hook logic. Reads stdin, sends to WheelHub, outputs decision.
203
+ * MSSCI-11947: Handles data field passthrough for interactive tools.
204
+ */
205
+ export async function main() {
206
+ try {
207
+ const toolData = await readStdin();
208
+ const { tool_name, tool_input, tool_use_id, session_id } = toolData;
209
+ const response = await requestApproval({
210
+ toolName: tool_name,
211
+ toolId: tool_use_id,
212
+ input: tool_input,
213
+ sessionId: session_id,
214
+ });
215
+ if (response.decision === 'allow') {
216
+ outputDecision('allow', response.reason || 'Approved by user', response.data || null);
217
+ }
218
+ else if (response.decision === 'deny') {
219
+ outputDecision('deny', response.reason || 'Rejected by user', response.data || null);
220
+ }
221
+ else if (response.decision === 'ask') {
222
+ outputDecision('ask', response.reason || 'Deferred to Claude Code');
223
+ }
224
+ else {
225
+ // Unknown decision - defer to Claude Code rather than silently allowing
226
+ outputDecision('ask', 'Unknown response from WheelHub');
227
+ }
228
+ }
229
+ catch (error) {
230
+ console.error(`[cyclist-hook] Error: ${error.message}`);
231
+ // Output ask so Claude Code shows its built-in dialog, don't silently allow
232
+ outputDecision('ask', 'Hook error, deferring to Claude Code');
233
+ }
234
+ }
235
+ //# sourceMappingURL=pretooluse-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretooluse-hook.js","sourceRoot":"","sources":["../../src/hooks/pretooluse-hook.ts"],"names":[],"mappings":"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"}