aicodeman 0.2.8 → 0.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.
- package/README.md +91 -0
- package/dist/ai-idle-checker.d.ts.map +1 -1
- package/dist/ai-idle-checker.js +3 -2
- package/dist/ai-idle-checker.js.map +1 -1
- package/dist/ai-plan-checker.d.ts.map +1 -1
- package/dist/ai-plan-checker.js +3 -2
- package/dist/ai-plan-checker.js.map +1 -1
- package/dist/bash-tool-parser.d.ts +2 -3
- package/dist/bash-tool-parser.d.ts.map +1 -1
- package/dist/bash-tool-parser.js +14 -31
- package/dist/bash-tool-parser.js.map +1 -1
- package/dist/config/ai-defaults.d.ts +16 -0
- package/dist/config/ai-defaults.d.ts.map +1 -0
- package/dist/config/ai-defaults.js +16 -0
- package/dist/config/ai-defaults.js.map +1 -0
- package/dist/config/auth-config.d.ts +19 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +28 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/exec-timeout.d.ts +10 -0
- package/dist/config/exec-timeout.d.ts.map +1 -0
- package/dist/config/exec-timeout.js +10 -0
- package/dist/config/exec-timeout.js.map +1 -0
- package/dist/config/map-limits.d.ts +4 -0
- package/dist/config/map-limits.d.ts.map +1 -1
- package/dist/config/map-limits.js +7 -0
- package/dist/config/map-limits.js.map +1 -1
- package/dist/config/server-timing.d.ts +36 -0
- package/dist/config/server-timing.d.ts.map +1 -0
- package/dist/config/server-timing.js +51 -0
- package/dist/config/server-timing.js.map +1 -0
- package/dist/config/team-config.d.ts +16 -0
- package/dist/config/team-config.d.ts.map +1 -0
- package/dist/config/team-config.js +16 -0
- package/dist/config/team-config.js.map +1 -0
- package/dist/config/terminal-limits.d.ts +18 -0
- package/dist/config/terminal-limits.d.ts.map +1 -0
- package/dist/config/terminal-limits.js +18 -0
- package/dist/config/terminal-limits.js.map +1 -0
- package/dist/config/tunnel-config.d.ts +27 -0
- package/dist/config/tunnel-config.d.ts.map +1 -0
- package/dist/config/tunnel-config.js +36 -0
- package/dist/config/tunnel-config.js.map +1 -0
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +7 -6
- package/dist/hooks-config.js.map +1 -1
- package/dist/image-watcher.d.ts +4 -4
- package/dist/image-watcher.d.ts.map +1 -1
- package/dist/image-watcher.js +17 -30
- package/dist/image-watcher.js.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/plan-orchestrator.d.ts +2 -24
- package/dist/plan-orchestrator.d.ts.map +1 -1
- package/dist/plan-orchestrator.js.map +1 -1
- package/dist/push-store.d.ts +1 -1
- package/dist/push-store.d.ts.map +1 -1
- package/dist/push-store.js +4 -12
- package/dist/push-store.js.map +1 -1
- package/dist/ralph-fix-plan-watcher.d.ts +91 -0
- package/dist/ralph-fix-plan-watcher.d.ts.map +1 -0
- package/dist/ralph-fix-plan-watcher.js +326 -0
- package/dist/ralph-fix-plan-watcher.js.map +1 -0
- package/dist/ralph-plan-tracker.d.ts +201 -0
- package/dist/ralph-plan-tracker.d.ts.map +1 -0
- package/dist/ralph-plan-tracker.js +325 -0
- package/dist/ralph-plan-tracker.js.map +1 -0
- package/dist/ralph-stall-detector.d.ts +84 -0
- package/dist/ralph-stall-detector.d.ts.map +1 -0
- package/dist/ralph-stall-detector.js +139 -0
- package/dist/ralph-stall-detector.js.map +1 -0
- package/dist/ralph-status-parser.d.ts +141 -0
- package/dist/ralph-status-parser.d.ts.map +1 -0
- package/dist/ralph-status-parser.js +478 -0
- package/dist/ralph-status-parser.js.map +1 -0
- package/dist/ralph-tracker.d.ts +194 -685
- package/dist/ralph-tracker.d.ts.map +1 -1
- package/dist/ralph-tracker.js +349 -1713
- package/dist/ralph-tracker.js.map +1 -1
- package/dist/respawn-adaptive-timing.d.ts +61 -0
- package/dist/respawn-adaptive-timing.d.ts.map +1 -0
- package/dist/respawn-adaptive-timing.js +105 -0
- package/dist/respawn-adaptive-timing.js.map +1 -0
- package/dist/respawn-controller.d.ts +14 -101
- package/dist/respawn-controller.d.ts.map +1 -1
- package/dist/respawn-controller.js +155 -594
- package/dist/respawn-controller.js.map +1 -1
- package/dist/respawn-health.d.ts +54 -0
- package/dist/respawn-health.d.ts.map +1 -0
- package/dist/respawn-health.js +183 -0
- package/dist/respawn-health.js.map +1 -0
- package/dist/respawn-metrics.d.ts +81 -0
- package/dist/respawn-metrics.d.ts.map +1 -0
- package/dist/respawn-metrics.js +198 -0
- package/dist/respawn-metrics.js.map +1 -0
- package/dist/respawn-patterns.d.ts +45 -0
- package/dist/respawn-patterns.d.ts.map +1 -0
- package/dist/respawn-patterns.js +125 -0
- package/dist/respawn-patterns.js.map +1 -0
- package/dist/session-auto-ops.d.ts +89 -0
- package/dist/session-auto-ops.d.ts.map +1 -0
- package/dist/session-auto-ops.js +224 -0
- package/dist/session-auto-ops.js.map +1 -0
- package/dist/session-cli-builder.d.ts +62 -0
- package/dist/session-cli-builder.d.ts.map +1 -0
- package/dist/session-cli-builder.js +121 -0
- package/dist/session-cli-builder.js.map +1 -0
- package/dist/session-task-cache.d.ts +52 -0
- package/dist/session-task-cache.d.ts.map +1 -0
- package/dist/session-task-cache.js +90 -0
- package/dist/session-task-cache.js.map +1 -0
- package/dist/session.d.ts +2 -33
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +58 -309
- package/dist/session.js.map +1 -1
- package/dist/state-store.d.ts +9 -2
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js +112 -39
- package/dist/state-store.js.map +1 -1
- package/dist/subagent-watcher.d.ts +16 -9
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +126 -147
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/team-watcher.d.ts +3 -0
- package/dist/team-watcher.d.ts.map +1 -1
- package/dist/team-watcher.js +54 -5
- package/dist/team-watcher.js.map +1 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +1 -2
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tunnel-manager.d.ts +26 -0
- package/dist/tunnel-manager.d.ts.map +1 -1
- package/dist/tunnel-manager.js +127 -7
- package/dist/tunnel-manager.js.map +1 -1
- package/dist/types/api.d.ts +93 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +83 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/app-state.d.ts +100 -0
- package/dist/types/app-state.d.ts.map +1 -0
- package/dist/types/app-state.js +59 -0
- package/dist/types/app-state.js.map +1 -0
- package/dist/types/common.d.ts +70 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +8 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lifecycle.d.ts +17 -0
- package/dist/types/lifecycle.d.ts.map +1 -0
- package/dist/types/lifecycle.js +5 -0
- package/dist/types/lifecycle.js.map +1 -0
- package/dist/types/plan.d.ts +32 -0
- package/dist/types/plan.d.ts.map +1 -0
- package/dist/types/plan.js +5 -0
- package/dist/types/plan.js.map +1 -0
- package/dist/types/push.d.ts +23 -0
- package/dist/types/push.d.ts.map +1 -0
- package/dist/types/push.js +5 -0
- package/dist/types/push.js.map +1 -0
- package/dist/types/ralph.d.ts +241 -0
- package/dist/types/ralph.d.ts.map +1 -0
- package/dist/types/ralph.js +49 -0
- package/dist/types/ralph.js.map +1 -0
- package/dist/types/respawn.d.ts +250 -0
- package/dist/types/respawn.d.ts.map +1 -0
- package/dist/types/respawn.js +5 -0
- package/dist/types/respawn.js.map +1 -0
- package/dist/types/run-summary.d.ts +81 -0
- package/dist/types/run-summary.d.ts.map +1 -0
- package/dist/types/run-summary.js +22 -0
- package/dist/types/run-summary.js.map +1 -0
- package/dist/types/session.d.ts +130 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +5 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/task.d.ts +58 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/teams.d.ts +55 -0
- package/dist/types/teams.d.ts.map +1 -0
- package/dist/types/teams.js +5 -0
- package/dist/types/teams.js.map +1 -0
- package/dist/types/tools.d.ts +46 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +5 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types.d.ts +1 -1138
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -214
- package/dist/types.js.map +1 -1
- package/dist/utils/claude-cli-resolver.d.ts.map +1 -1
- package/dist/utils/claude-cli-resolver.js +1 -2
- package/dist/utils/claude-cli-resolver.js.map +1 -1
- package/dist/utils/debouncer.d.ts +111 -0
- package/dist/utils/debouncer.d.ts.map +1 -0
- package/dist/utils/debouncer.js +162 -0
- package/dist/utils/debouncer.js.map +1 -0
- package/dist/utils/index.d.ts +3 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/opencode-cli-resolver.d.ts.map +1 -1
- package/dist/utils/opencode-cli-resolver.js +1 -2
- package/dist/utils/opencode-cli-resolver.js.map +1 -1
- package/dist/utils/string-similarity.d.ts +0 -57
- package/dist/utils/string-similarity.d.ts.map +1 -1
- package/dist/utils/string-similarity.js +3 -18
- package/dist/utils/string-similarity.js.map +1 -1
- package/dist/web/middleware/auth.d.ts +31 -0
- package/dist/web/middleware/auth.d.ts.map +1 -0
- package/dist/web/middleware/auth.js +154 -0
- package/dist/web/middleware/auth.js.map +1 -0
- package/dist/web/ports/auth-port.d.ts +18 -0
- package/dist/web/ports/auth-port.d.ts.map +1 -0
- package/dist/web/ports/auth-port.js +6 -0
- package/dist/web/ports/auth-port.js.map +1 -0
- package/dist/web/ports/config-port.d.ts +28 -0
- package/dist/web/ports/config-port.d.ts.map +1 -0
- package/dist/web/ports/config-port.js +6 -0
- package/dist/web/ports/config-port.js.map +1 -0
- package/dist/web/ports/event-port.d.ts +13 -0
- package/dist/web/ports/event-port.d.ts.map +1 -0
- package/dist/web/ports/event-port.js +6 -0
- package/dist/web/ports/event-port.js.map +1 -0
- package/dist/web/ports/index.d.ts +14 -0
- package/dist/web/ports/index.d.ts.map +1 -0
- package/dist/web/ports/index.js +9 -0
- package/dist/web/ports/index.js.map +1 -0
- package/dist/web/ports/infra-port.d.ts +36 -0
- package/dist/web/ports/infra-port.d.ts.map +1 -0
- package/dist/web/ports/infra-port.js +6 -0
- package/dist/web/ports/infra-port.js.map +1 -0
- package/dist/web/ports/respawn-port.d.ts +20 -0
- package/dist/web/ports/respawn-port.d.ts.map +1 -0
- package/dist/web/ports/respawn-port.js +6 -0
- package/dist/web/ports/respawn-port.js.map +1 -0
- package/dist/web/ports/session-port.d.ts +15 -0
- package/dist/web/ports/session-port.d.ts.map +1 -0
- package/dist/web/ports/session-port.js +6 -0
- package/dist/web/ports/session-port.js.map +1 -0
- package/dist/web/public/api-client.js +70 -0
- package/dist/web/public/api-client.js.br +0 -0
- package/dist/web/public/api-client.js.gz +0 -0
- package/dist/web/public/app.js +152 -236
- package/dist/web/public/app.js.br +0 -0
- package/dist/web/public/app.js.gz +0 -0
- package/dist/web/public/constants.js +238 -0
- package/dist/web/public/constants.js.br +0 -0
- package/dist/web/public/constants.js.gz +0 -0
- package/dist/web/public/index.html +11 -3
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/keyboard-accessory.js +279 -0
- package/dist/web/public/keyboard-accessory.js.br +0 -0
- package/dist/web/public/keyboard-accessory.js.gz +0 -0
- package/dist/web/public/mobile-handlers.js +467 -0
- package/dist/web/public/mobile-handlers.js.br +0 -0
- package/dist/web/public/mobile-handlers.js.gz +0 -0
- package/dist/web/public/mobile.css.gz +0 -0
- package/dist/web/public/notification-manager.js +445 -0
- package/dist/web/public/notification-manager.js.br +0 -0
- package/dist/web/public/notification-manager.js.gz +0 -0
- package/dist/web/public/ralph-wizard.js +3 -3
- package/dist/web/public/ralph-wizard.js.br +0 -0
- package/dist/web/public/ralph-wizard.js.gz +0 -0
- package/dist/web/public/styles.css.gz +0 -0
- package/dist/web/public/subagent-windows.js +1115 -0
- package/dist/web/public/subagent-windows.js.br +0 -0
- package/dist/web/public/subagent-windows.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.js +858 -0
- package/dist/web/public/voice-input.js.br +0 -0
- package/dist/web/public/voice-input.js.gz +0 -0
- package/dist/web/route-helpers.d.ts +38 -0
- package/dist/web/route-helpers.d.ts.map +1 -0
- package/dist/web/route-helpers.js +143 -0
- package/dist/web/route-helpers.js.map +1 -0
- package/dist/web/routes/case-routes.d.ts +9 -0
- package/dist/web/routes/case-routes.d.ts.map +1 -0
- package/dist/web/routes/case-routes.js +419 -0
- package/dist/web/routes/case-routes.js.map +1 -0
- package/dist/web/routes/file-routes.d.ts +8 -0
- package/dist/web/routes/file-routes.d.ts.map +1 -0
- package/dist/web/routes/file-routes.js +337 -0
- package/dist/web/routes/file-routes.js.map +1 -0
- package/dist/web/routes/hook-event-routes.d.ts +9 -0
- package/dist/web/routes/hook-event-routes.d.ts.map +1 -0
- package/dist/web/routes/hook-event-routes.js +57 -0
- package/dist/web/routes/hook-event-routes.js.map +1 -0
- package/dist/web/routes/index.d.ts +16 -0
- package/dist/web/routes/index.d.ts.map +1 -0
- package/dist/web/routes/index.js +16 -0
- package/dist/web/routes/index.js.map +1 -0
- package/dist/web/routes/mux-routes.d.ts +8 -0
- package/dist/web/routes/mux-routes.d.ts.map +1 -0
- package/dist/web/routes/mux-routes.js +32 -0
- package/dist/web/routes/mux-routes.js.map +1 -0
- package/dist/web/routes/plan-routes.d.ts +9 -0
- package/dist/web/routes/plan-routes.d.ts.map +1 -0
- package/dist/web/routes/plan-routes.js +381 -0
- package/dist/web/routes/plan-routes.js.map +1 -0
- package/dist/web/routes/push-routes.d.ts +8 -0
- package/dist/web/routes/push-routes.d.ts.map +1 -0
- package/dist/web/routes/push-routes.js +49 -0
- package/dist/web/routes/push-routes.js.map +1 -0
- package/dist/web/routes/ralph-routes.d.ts +9 -0
- package/dist/web/routes/ralph-routes.d.ts.map +1 -0
- package/dist/web/routes/ralph-routes.js +475 -0
- package/dist/web/routes/ralph-routes.js.map +1 -0
- package/dist/web/routes/respawn-routes.d.ts +8 -0
- package/dist/web/routes/respawn-routes.d.ts.map +1 -0
- package/dist/web/routes/respawn-routes.js +260 -0
- package/dist/web/routes/respawn-routes.js.map +1 -0
- package/dist/web/routes/scheduled-routes.d.ts +8 -0
- package/dist/web/routes/scheduled-routes.d.ts.map +1 -0
- package/dist/web/routes/scheduled-routes.js +51 -0
- package/dist/web/routes/scheduled-routes.js.map +1 -0
- package/dist/web/routes/session-routes.d.ts +9 -0
- package/dist/web/routes/session-routes.d.ts.map +1 -0
- package/dist/web/routes/session-routes.js +729 -0
- package/dist/web/routes/session-routes.js.map +1 -0
- package/dist/web/routes/system-routes.d.ts +9 -0
- package/dist/web/routes/system-routes.d.ts.map +1 -0
- package/dist/web/routes/system-routes.js +678 -0
- package/dist/web/routes/system-routes.js.map +1 -0
- package/dist/web/routes/team-routes.d.ts +8 -0
- package/dist/web/routes/team-routes.d.ts.map +1 -0
- package/dist/web/routes/team-routes.js +14 -0
- package/dist/web/routes/team-routes.js.map +1 -0
- package/dist/web/schemas.d.ts +43 -3
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +6 -2
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +10 -9
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +342 -3829
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
package/dist/tunnel-manager.d.ts
CHANGED
|
@@ -28,6 +28,15 @@ export declare class TunnelManager extends EventEmitter {
|
|
|
28
28
|
private stopped;
|
|
29
29
|
private localPort;
|
|
30
30
|
private useHttps;
|
|
31
|
+
/** Map-based lookup: shortCode → QrTokenRecord (hash-based, timing-safe) */
|
|
32
|
+
private qrTokensByCode;
|
|
33
|
+
private currentShortCode;
|
|
34
|
+
private rotationTimer;
|
|
35
|
+
/** SVG cache — regenerated only on token rotation, not per request */
|
|
36
|
+
private cachedQrSvg;
|
|
37
|
+
/** Global rate limit counter (separate from Basic Auth rate limiting) */
|
|
38
|
+
private qrAttemptCount;
|
|
39
|
+
private qrRateLimitResetTimer;
|
|
31
40
|
/**
|
|
32
41
|
* Resolve cloudflared binary path.
|
|
33
42
|
* Checks ~/.local/bin first, then falls back to PATH.
|
|
@@ -47,6 +56,23 @@ export declare class TunnelManager extends EventEmitter {
|
|
|
47
56
|
* Stop the cloudflared tunnel process. Safe to call from any state.
|
|
48
57
|
*/
|
|
49
58
|
stop(): void;
|
|
59
|
+
/** Start token rotation — called after tunnel URL is acquired */
|
|
60
|
+
startTokenRotation(): void;
|
|
61
|
+
/** Stop token rotation and clear all tokens */
|
|
62
|
+
stopTokenRotation(): void;
|
|
63
|
+
/** Create a new token, evict expired/consumed ones, emit rotation event */
|
|
64
|
+
private rotateToken;
|
|
65
|
+
/** Get the current (newest) token's short code for QR URL */
|
|
66
|
+
getCurrentShortCode(): string | undefined;
|
|
67
|
+
/** Get cached QR SVG, regenerating only if the short code changed */
|
|
68
|
+
getQrSvg(tunnelUrl: string): Promise<string>;
|
|
69
|
+
/**
|
|
70
|
+
* Validate and atomically consume a token by short code.
|
|
71
|
+
* Map.get() is hash-based — no timing side-channel from string comparison.
|
|
72
|
+
*/
|
|
73
|
+
consumeToken(shortCode: string): boolean;
|
|
74
|
+
/** Force-regenerate (manual revocation via API) */
|
|
75
|
+
regenerateQrToken(): void;
|
|
50
76
|
isRunning(): boolean;
|
|
51
77
|
getUrl(): string | null;
|
|
52
78
|
getStatus(): TunnelStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-manager.d.ts","sourceRoot":"","sources":["../src/tunnel-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel-manager.d.ts","sourceRoot":"","sources":["../src/tunnel-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmB3C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AA2BD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAA+B;IACrD,6EAA6E;IAC7E,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAS;IAGzB,4EAA4E;IAC5E,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAA+C;IACpE,sEAAsE;IACtE,OAAO,CAAC,WAAW,CAAmD;IACtE,yEAAyE;IACzE,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,qBAAqB,CAA+C;IAE5E;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAsB1B,+BAA+B;IAC/B,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAgI9C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,IAAI,IAAI,IAAI;IA2BZ,iEAAiE;IACjE,kBAAkB,IAAI,IAAI;IAS1B,+CAA+C;IAC/C,iBAAiB,IAAI,IAAI;IAezB,2EAA2E;IAC3E,OAAO,CAAC,WAAW;IAsBnB,6DAA6D;IAC7D,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC,qEAAqE;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBlD;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAoBxC,mDAAmD;IACnD,iBAAiB,IAAI,IAAI;IAOzB,SAAS,IAAI,OAAO;IAIpB,MAAM,IAAI,MAAM,GAAG,IAAI;IAIvB,SAAS,IAAI,YAAY;CAM1B"}
|
package/dist/tunnel-manager.js
CHANGED
|
@@ -17,15 +17,23 @@ import { spawn } from 'node:child_process';
|
|
|
17
17
|
import { existsSync } from 'node:fs';
|
|
18
18
|
import { join } from 'node:path';
|
|
19
19
|
import { homedir } from 'node:os';
|
|
20
|
-
|
|
20
|
+
import { randomBytes } from 'node:crypto';
|
|
21
|
+
import { QR_TOKEN_TTL_MS, QR_TOKEN_GRACE_MS, SHORT_CODE_LENGTH, QR_RATE_LIMIT_MAX, QR_RATE_LIMIT_WINDOW_MS, URL_TIMEOUT_MS, RESTART_DELAY_MS, FORCE_KILL_MS, } from './config/tunnel-config.js';
|
|
22
|
+
/** Rejection-sampled base62 short code — no modulo bias */
|
|
23
|
+
function generateShortCode() {
|
|
24
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
25
|
+
const maxUnbiased = 248; // largest multiple of 62 that fits in a byte (248 = 62 * 4)
|
|
26
|
+
const result = [];
|
|
27
|
+
while (result.length < SHORT_CODE_LENGTH) {
|
|
28
|
+
const [byte] = randomBytes(1);
|
|
29
|
+
if (byte < maxUnbiased)
|
|
30
|
+
result.push(chars[byte % 62]);
|
|
31
|
+
// else: discard and re-draw (rejection sampling)
|
|
32
|
+
}
|
|
33
|
+
return result.join('');
|
|
34
|
+
}
|
|
21
35
|
/** Regex to extract the trycloudflare.com URL from cloudflared output */
|
|
22
36
|
const TUNNEL_URL_REGEX = /https:\/\/[a-z0-9-]+\.trycloudflare\.com/;
|
|
23
|
-
/** Max time to wait for URL before considering it a timeout (ms) */
|
|
24
|
-
const URL_TIMEOUT_MS = 30_000;
|
|
25
|
-
/** Restart delay after unexpected exit (ms) */
|
|
26
|
-
const RESTART_DELAY_MS = 5_000;
|
|
27
|
-
/** Force-kill timeout after SIGTERM (ms) */
|
|
28
|
-
const FORCE_KILL_MS = 5_000;
|
|
29
37
|
// ========== TunnelManager Class ==========
|
|
30
38
|
export class TunnelManager extends EventEmitter {
|
|
31
39
|
process = null;
|
|
@@ -38,6 +46,16 @@ export class TunnelManager extends EventEmitter {
|
|
|
38
46
|
stopped = true;
|
|
39
47
|
localPort = 3000;
|
|
40
48
|
useHttps = false;
|
|
49
|
+
// ========== QR Token State ==========
|
|
50
|
+
/** Map-based lookup: shortCode → QrTokenRecord (hash-based, timing-safe) */
|
|
51
|
+
qrTokensByCode = new Map();
|
|
52
|
+
currentShortCode = null;
|
|
53
|
+
rotationTimer = null;
|
|
54
|
+
/** SVG cache — regenerated only on token rotation, not per request */
|
|
55
|
+
cachedQrSvg = null;
|
|
56
|
+
/** Global rate limit counter (separate from Basic Auth rate limiting) */
|
|
57
|
+
qrAttemptCount = 0;
|
|
58
|
+
qrRateLimitResetTimer = null;
|
|
41
59
|
/**
|
|
42
60
|
* Resolve cloudflared binary path.
|
|
43
61
|
* Checks ~/.local/bin first, then falls back to PATH.
|
|
@@ -144,6 +162,10 @@ export class TunnelManager extends EventEmitter {
|
|
|
144
162
|
// Detach listeners — no need to parse further output
|
|
145
163
|
this.process?.stdout?.off('data', handleOutput);
|
|
146
164
|
this.process?.stderr?.off('data', handleOutput);
|
|
165
|
+
// Start QR token rotation when tunnel URL is acquired (only if auth enabled)
|
|
166
|
+
if (process.env.CODEMAN_PASSWORD) {
|
|
167
|
+
this.startTokenRotation();
|
|
168
|
+
}
|
|
147
169
|
this.emit('started', { url: this.url });
|
|
148
170
|
}
|
|
149
171
|
};
|
|
@@ -213,6 +235,7 @@ export class TunnelManager extends EventEmitter {
|
|
|
213
235
|
stop() {
|
|
214
236
|
this.stopped = true;
|
|
215
237
|
this.clearTimers();
|
|
238
|
+
this.stopTokenRotation();
|
|
216
239
|
if (this.process) {
|
|
217
240
|
const pid = this.process.pid;
|
|
218
241
|
console.log(`[TunnelManager] Stopping tunnel (PID ${pid})`);
|
|
@@ -235,6 +258,103 @@ export class TunnelManager extends EventEmitter {
|
|
|
235
258
|
this.emit('stopped', {});
|
|
236
259
|
}
|
|
237
260
|
}
|
|
261
|
+
// ========== QR Token Management ==========
|
|
262
|
+
/** Start token rotation — called after tunnel URL is acquired */
|
|
263
|
+
startTokenRotation() {
|
|
264
|
+
this.stopTokenRotation();
|
|
265
|
+
this.rotateToken();
|
|
266
|
+
this.rotationTimer = setInterval(() => this.rotateToken(), QR_TOKEN_TTL_MS);
|
|
267
|
+
this.qrRateLimitResetTimer = setInterval(() => {
|
|
268
|
+
this.qrAttemptCount = 0;
|
|
269
|
+
}, QR_RATE_LIMIT_WINDOW_MS);
|
|
270
|
+
}
|
|
271
|
+
/** Stop token rotation and clear all tokens */
|
|
272
|
+
stopTokenRotation() {
|
|
273
|
+
if (this.rotationTimer) {
|
|
274
|
+
clearInterval(this.rotationTimer);
|
|
275
|
+
this.rotationTimer = null;
|
|
276
|
+
}
|
|
277
|
+
if (this.qrRateLimitResetTimer) {
|
|
278
|
+
clearInterval(this.qrRateLimitResetTimer);
|
|
279
|
+
this.qrRateLimitResetTimer = null;
|
|
280
|
+
}
|
|
281
|
+
this.qrTokensByCode.clear();
|
|
282
|
+
this.currentShortCode = null;
|
|
283
|
+
this.cachedQrSvg = null;
|
|
284
|
+
this.qrAttemptCount = 0;
|
|
285
|
+
}
|
|
286
|
+
/** Create a new token, evict expired/consumed ones, emit rotation event */
|
|
287
|
+
rotateToken() {
|
|
288
|
+
const record = {
|
|
289
|
+
token: randomBytes(32).toString('hex'),
|
|
290
|
+
shortCode: generateShortCode(),
|
|
291
|
+
createdAt: Date.now(),
|
|
292
|
+
consumed: false,
|
|
293
|
+
};
|
|
294
|
+
// Evict expired or consumed tokens
|
|
295
|
+
const now = Date.now();
|
|
296
|
+
for (const [code, rec] of this.qrTokensByCode) {
|
|
297
|
+
if (now - rec.createdAt > QR_TOKEN_GRACE_MS || rec.consumed) {
|
|
298
|
+
this.qrTokensByCode.delete(code);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
this.qrTokensByCode.set(record.shortCode, record);
|
|
302
|
+
this.currentShortCode = record.shortCode;
|
|
303
|
+
this.cachedQrSvg = null; // invalidate SVG cache
|
|
304
|
+
this.emit('qrTokenRotated');
|
|
305
|
+
}
|
|
306
|
+
/** Get the current (newest) token's short code for QR URL */
|
|
307
|
+
getCurrentShortCode() {
|
|
308
|
+
return this.currentShortCode ?? undefined;
|
|
309
|
+
}
|
|
310
|
+
/** Get cached QR SVG, regenerating only if the short code changed */
|
|
311
|
+
async getQrSvg(tunnelUrl) {
|
|
312
|
+
const code = this.currentShortCode;
|
|
313
|
+
if (!code)
|
|
314
|
+
throw new Error('No QR token available');
|
|
315
|
+
if (this.cachedQrSvg?.shortCode === code)
|
|
316
|
+
return this.cachedQrSvg.svg;
|
|
317
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- dynamic optional dependency
|
|
318
|
+
const QRCode = require('qrcode');
|
|
319
|
+
const svg = await QRCode.toString(`${tunnelUrl}/q/${code}`, {
|
|
320
|
+
type: 'svg',
|
|
321
|
+
margin: 2,
|
|
322
|
+
width: 256,
|
|
323
|
+
});
|
|
324
|
+
this.cachedQrSvg = { shortCode: code, svg };
|
|
325
|
+
return svg;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Validate and atomically consume a token by short code.
|
|
329
|
+
* Map.get() is hash-based — no timing side-channel from string comparison.
|
|
330
|
+
*/
|
|
331
|
+
consumeToken(shortCode) {
|
|
332
|
+
// Global rate limit (across all IPs)
|
|
333
|
+
if (this.qrAttemptCount >= QR_RATE_LIMIT_MAX)
|
|
334
|
+
return false;
|
|
335
|
+
this.qrAttemptCount++;
|
|
336
|
+
const record = this.qrTokensByCode.get(shortCode);
|
|
337
|
+
if (!record)
|
|
338
|
+
return false;
|
|
339
|
+
if (record.consumed)
|
|
340
|
+
return false;
|
|
341
|
+
const now = Date.now();
|
|
342
|
+
if (now - record.createdAt > QR_TOKEN_GRACE_MS)
|
|
343
|
+
return false;
|
|
344
|
+
// Atomic consume (single-threaded JS = no race)
|
|
345
|
+
record.consumed = true;
|
|
346
|
+
// Immediately rotate so desktop gets a fresh QR
|
|
347
|
+
this.rotateToken();
|
|
348
|
+
this.emit('qrTokenRegenerated');
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
/** Force-regenerate (manual revocation via API) */
|
|
352
|
+
regenerateQrToken() {
|
|
353
|
+
this.qrTokensByCode.clear();
|
|
354
|
+
this.currentShortCode = null;
|
|
355
|
+
this.rotateToken();
|
|
356
|
+
this.emit('qrTokenRegenerated');
|
|
357
|
+
}
|
|
238
358
|
isRunning() {
|
|
239
359
|
return this.process !== null || this.restartTimer !== null;
|
|
240
360
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-manager.js","sourceRoot":"","sources":["../src/tunnel-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tunnel-manager.js","sourceRoot":"","sources":["../src/tunnel-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview API types and error handling
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Standard error codes for API responses
|
|
6
|
+
*/
|
|
7
|
+
export declare enum ApiErrorCode {
|
|
8
|
+
/** Resource not found */
|
|
9
|
+
NOT_FOUND = "NOT_FOUND",
|
|
10
|
+
/** Invalid input provided */
|
|
11
|
+
INVALID_INPUT = "INVALID_INPUT",
|
|
12
|
+
/** Session is currently busy */
|
|
13
|
+
SESSION_BUSY = "SESSION_BUSY",
|
|
14
|
+
/** Operation failed */
|
|
15
|
+
OPERATION_FAILED = "OPERATION_FAILED",
|
|
16
|
+
/** Resource already exists */
|
|
17
|
+
ALREADY_EXISTS = "ALREADY_EXISTS",
|
|
18
|
+
/** Internal server error */
|
|
19
|
+
INTERNAL_ERROR = "INTERNAL_ERROR"
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Hook event types triggered by Claude Code's hooks system
|
|
23
|
+
*/
|
|
24
|
+
export type HookEventType = 'idle_prompt' | 'permission_prompt' | 'elicitation_dialog' | 'stop' | 'teammate_idle' | 'task_completed';
|
|
25
|
+
/**
|
|
26
|
+
* Standard API response wrapper (discriminated union for type safety)
|
|
27
|
+
* @template T Type of the data payload
|
|
28
|
+
*/
|
|
29
|
+
export type ApiResponse<T = unknown> = {
|
|
30
|
+
success: true;
|
|
31
|
+
data?: T;
|
|
32
|
+
} | {
|
|
33
|
+
success: false;
|
|
34
|
+
error: string;
|
|
35
|
+
errorCode: ApiErrorCode;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Creates a standardized error response
|
|
39
|
+
* @param code Error code
|
|
40
|
+
* @param details Optional detailed error message
|
|
41
|
+
* @returns Formatted error response
|
|
42
|
+
*/
|
|
43
|
+
export declare function createErrorResponse(code: ApiErrorCode, details?: string): ApiResponse<never>;
|
|
44
|
+
/**
|
|
45
|
+
* Response for quick start operation
|
|
46
|
+
*/
|
|
47
|
+
export interface QuickStartResponse {
|
|
48
|
+
/** Whether the request succeeded */
|
|
49
|
+
success: boolean;
|
|
50
|
+
/** Created session ID */
|
|
51
|
+
sessionId?: string;
|
|
52
|
+
/** Path to case folder */
|
|
53
|
+
casePath?: string;
|
|
54
|
+
/** Case name */
|
|
55
|
+
caseName?: string;
|
|
56
|
+
/** Error message if failed */
|
|
57
|
+
error?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Information about a case folder
|
|
61
|
+
*/
|
|
62
|
+
export interface CaseInfo {
|
|
63
|
+
/** Case name */
|
|
64
|
+
name: string;
|
|
65
|
+
/** Full path to case folder */
|
|
66
|
+
path: string;
|
|
67
|
+
/** Whether CLAUDE.md exists */
|
|
68
|
+
hasClaudeMd?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Type guard to check if a value is an Error instance
|
|
72
|
+
* @param value The value to check
|
|
73
|
+
* @returns True if the value is an Error instance
|
|
74
|
+
*/
|
|
75
|
+
export declare function isError(value: unknown): value is Error;
|
|
76
|
+
/**
|
|
77
|
+
* Safely extracts an error message from an unknown caught value.
|
|
78
|
+
* Handles the TypeScript 4.4+ unknown error type in catch blocks.
|
|
79
|
+
*
|
|
80
|
+
* @param error The caught error (type unknown in strict mode)
|
|
81
|
+
* @returns A string error message
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* try {
|
|
86
|
+
* await riskyOperation();
|
|
87
|
+
* } catch (err) {
|
|
88
|
+
* console.error('Failed:', getErrorMessage(err));
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
93
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,oBAAY,YAAY;IACtB,yBAAyB;IACzB,SAAS,cAAc;IACvB,6BAA6B;IAC7B,aAAa,kBAAkB;IAC/B,gCAAgC;IAChC,YAAY,iBAAiB;IAC7B,uBAAuB;IACvB,gBAAgB,qBAAqB;IACrC,8BAA8B;IAC9B,cAAc,mBAAmB;IACjC,4BAA4B;IAC5B,cAAc,mBAAmB;CAClC;AAcD;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,mBAAmB,GACnB,oBAAoB,GACpB,MAAM,GACN,eAAe,GACf,gBAAgB,CAAC;AAIrB;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAC/B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAM5F;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAID;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWtD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview API types and error handling
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Standard error codes for API responses
|
|
6
|
+
*/
|
|
7
|
+
export var ApiErrorCode;
|
|
8
|
+
(function (ApiErrorCode) {
|
|
9
|
+
/** Resource not found */
|
|
10
|
+
ApiErrorCode["NOT_FOUND"] = "NOT_FOUND";
|
|
11
|
+
/** Invalid input provided */
|
|
12
|
+
ApiErrorCode["INVALID_INPUT"] = "INVALID_INPUT";
|
|
13
|
+
/** Session is currently busy */
|
|
14
|
+
ApiErrorCode["SESSION_BUSY"] = "SESSION_BUSY";
|
|
15
|
+
/** Operation failed */
|
|
16
|
+
ApiErrorCode["OPERATION_FAILED"] = "OPERATION_FAILED";
|
|
17
|
+
/** Resource already exists */
|
|
18
|
+
ApiErrorCode["ALREADY_EXISTS"] = "ALREADY_EXISTS";
|
|
19
|
+
/** Internal server error */
|
|
20
|
+
ApiErrorCode["INTERNAL_ERROR"] = "INTERNAL_ERROR";
|
|
21
|
+
})(ApiErrorCode || (ApiErrorCode = {}));
|
|
22
|
+
/**
|
|
23
|
+
* User-friendly error messages for each error code
|
|
24
|
+
*/
|
|
25
|
+
const ErrorMessages = {
|
|
26
|
+
[ApiErrorCode.NOT_FOUND]: 'The requested resource was not found',
|
|
27
|
+
[ApiErrorCode.INVALID_INPUT]: 'Invalid input provided',
|
|
28
|
+
[ApiErrorCode.SESSION_BUSY]: 'Session is currently busy',
|
|
29
|
+
[ApiErrorCode.OPERATION_FAILED]: 'The operation failed',
|
|
30
|
+
[ApiErrorCode.ALREADY_EXISTS]: 'Resource already exists',
|
|
31
|
+
[ApiErrorCode.INTERNAL_ERROR]: 'An internal error occurred',
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Creates a standardized error response
|
|
35
|
+
* @param code Error code
|
|
36
|
+
* @param details Optional detailed error message
|
|
37
|
+
* @returns Formatted error response
|
|
38
|
+
*/
|
|
39
|
+
export function createErrorResponse(code, details) {
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: details || ErrorMessages[code],
|
|
43
|
+
errorCode: code,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// ========== Error Handling Utilities ==========
|
|
47
|
+
/**
|
|
48
|
+
* Type guard to check if a value is an Error instance
|
|
49
|
+
* @param value The value to check
|
|
50
|
+
* @returns True if the value is an Error instance
|
|
51
|
+
*/
|
|
52
|
+
export function isError(value) {
|
|
53
|
+
return value instanceof Error;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Safely extracts an error message from an unknown caught value.
|
|
57
|
+
* Handles the TypeScript 4.4+ unknown error type in catch blocks.
|
|
58
|
+
*
|
|
59
|
+
* @param error The caught error (type unknown in strict mode)
|
|
60
|
+
* @returns A string error message
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* try {
|
|
65
|
+
* await riskyOperation();
|
|
66
|
+
* } catch (err) {
|
|
67
|
+
* console.error('Failed:', getErrorMessage(err));
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export function getErrorMessage(error) {
|
|
72
|
+
if (isError(error)) {
|
|
73
|
+
return error.message;
|
|
74
|
+
}
|
|
75
|
+
if (typeof error === 'string') {
|
|
76
|
+
return error;
|
|
77
|
+
}
|
|
78
|
+
if (error && typeof error === 'object' && 'message' in error) {
|
|
79
|
+
return String(error.message);
|
|
80
|
+
}
|
|
81
|
+
return 'An unknown error occurred';
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,YAaX;AAbD,WAAY,YAAY;IACtB,yBAAyB;IACzB,uCAAuB,CAAA;IACvB,6BAA6B;IAC7B,+CAA+B,CAAA;IAC/B,gCAAgC;IAChC,6CAA6B,CAAA;IAC7B,uBAAuB;IACvB,qDAAqC,CAAA;IACrC,8BAA8B;IAC9B,iDAAiC,CAAA;IACjC,4BAA4B;IAC5B,iDAAiC,CAAA;AACnC,CAAC,EAbW,YAAY,KAAZ,YAAY,QAavB;AAED;;GAEG;AACH,MAAM,aAAa,GAAiC;IAClD,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,sCAAsC;IAChE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,wBAAwB;IACtD,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,2BAA2B;IACxD,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,sBAAsB;IACvD,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,yBAAyB;IACxD,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,4BAA4B;CAC5D,CAAC;AAuBF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAkB,EAAE,OAAgB;IACtE,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC;QACrC,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AA8BD,iDAAiD;AAEjD;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Application state type definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { SessionState } from './session.js';
|
|
5
|
+
import type { TaskState } from './task.js';
|
|
6
|
+
import type { RalphLoopState } from './ralph.js';
|
|
7
|
+
import type { RespawnConfig } from './respawn.js';
|
|
8
|
+
/**
|
|
9
|
+
* Global statistics across all sessions (including deleted ones).
|
|
10
|
+
* Persisted to track cumulative usage over time.
|
|
11
|
+
*/
|
|
12
|
+
export interface GlobalStats {
|
|
13
|
+
/** Total input tokens used across all sessions */
|
|
14
|
+
totalInputTokens: number;
|
|
15
|
+
/** Total output tokens used across all sessions */
|
|
16
|
+
totalOutputTokens: number;
|
|
17
|
+
/** Total cost in USD across all sessions */
|
|
18
|
+
totalCost: number;
|
|
19
|
+
/** Total number of sessions created (lifetime) */
|
|
20
|
+
totalSessionsCreated: number;
|
|
21
|
+
/** Timestamp when stats were first recorded */
|
|
22
|
+
firstRecordedAt: number;
|
|
23
|
+
/** Timestamp of last update */
|
|
24
|
+
lastUpdatedAt: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Daily token usage entry for historical tracking.
|
|
28
|
+
*/
|
|
29
|
+
export interface TokenUsageEntry {
|
|
30
|
+
/** Date in YYYY-MM-DD format */
|
|
31
|
+
date: string;
|
|
32
|
+
/** Input tokens used on this day */
|
|
33
|
+
inputTokens: number;
|
|
34
|
+
/** Output tokens used on this day */
|
|
35
|
+
outputTokens: number;
|
|
36
|
+
/** Estimated cost in USD */
|
|
37
|
+
estimatedCost: number;
|
|
38
|
+
/** Number of sessions that contributed to this day's usage */
|
|
39
|
+
sessions: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Token usage statistics with daily tracking.
|
|
43
|
+
*/
|
|
44
|
+
export interface TokenStats {
|
|
45
|
+
/** Daily usage entries (most recent first) */
|
|
46
|
+
daily: TokenUsageEntry[];
|
|
47
|
+
/** Timestamp of last update */
|
|
48
|
+
lastUpdated: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Application configuration
|
|
52
|
+
*/
|
|
53
|
+
export interface AppConfig {
|
|
54
|
+
/** Interval for polling session status (ms) */
|
|
55
|
+
pollIntervalMs: number;
|
|
56
|
+
/** Default timeout for tasks (ms) */
|
|
57
|
+
defaultTimeoutMs: number;
|
|
58
|
+
/** Maximum concurrent sessions allowed */
|
|
59
|
+
maxConcurrentSessions: number;
|
|
60
|
+
/** Path to state file */
|
|
61
|
+
stateFilePath: string;
|
|
62
|
+
/** Respawn controller configuration */
|
|
63
|
+
respawn: RespawnConfig;
|
|
64
|
+
/** Last used case name (for default selection) */
|
|
65
|
+
lastUsedCase: string | null;
|
|
66
|
+
/** Whether Ralph/Todo tracker is globally enabled for all new sessions */
|
|
67
|
+
ralphEnabled: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Complete application state
|
|
71
|
+
*/
|
|
72
|
+
export interface AppState {
|
|
73
|
+
/** Map of session ID to session state */
|
|
74
|
+
sessions: Record<string, SessionState>;
|
|
75
|
+
/** Map of task ID to task state */
|
|
76
|
+
tasks: Record<string, TaskState>;
|
|
77
|
+
/** Ralph Loop controller state */
|
|
78
|
+
ralphLoop: RalphLoopState;
|
|
79
|
+
/** Application configuration */
|
|
80
|
+
config: AppConfig;
|
|
81
|
+
/** Global statistics (cumulative across all sessions) */
|
|
82
|
+
globalStats?: GlobalStats;
|
|
83
|
+
/** Daily token usage statistics */
|
|
84
|
+
tokenStats?: TokenStats;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Default application configuration values
|
|
88
|
+
*/
|
|
89
|
+
export declare const DEFAULT_CONFIG: AppConfig;
|
|
90
|
+
/**
|
|
91
|
+
* Creates initial application state
|
|
92
|
+
* @returns Fresh application state with defaults
|
|
93
|
+
*/
|
|
94
|
+
export declare function createInitialState(): AppState;
|
|
95
|
+
/**
|
|
96
|
+
* Creates initial global stats object
|
|
97
|
+
* @returns Fresh global stats with zero values
|
|
98
|
+
*/
|
|
99
|
+
export declare function createInitialGlobalStats(): GlobalStats;
|
|
100
|
+
//# sourceMappingURL=app-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-state.d.ts","sourceRoot":"","sources":["../../src/types/app-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,OAAO,EAAE,aAAa,CAAC;IACvB,kDAAkD;IAClD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0EAA0E;IAC1E,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,kCAAkC;IAClC,SAAS,EAAE,cAAc,CAAC;IAC1B,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,yDAAyD;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mCAAmC;IACnC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAID;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAe5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAe7C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,WAAW,CAUtD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Application state type definitions
|
|
3
|
+
*/
|
|
4
|
+
// ========== Default Configuration ==========
|
|
5
|
+
/**
|
|
6
|
+
* Default application configuration values
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_CONFIG = {
|
|
9
|
+
pollIntervalMs: 1000,
|
|
10
|
+
defaultTimeoutMs: 300000, // 5 minutes
|
|
11
|
+
maxConcurrentSessions: 5,
|
|
12
|
+
stateFilePath: '',
|
|
13
|
+
respawn: {
|
|
14
|
+
idleTimeoutMs: 5000, // 5 seconds of no activity after prompt
|
|
15
|
+
updatePrompt: 'update all the docs and CLAUDE.md',
|
|
16
|
+
interStepDelayMs: 1000, // 1 second between steps
|
|
17
|
+
enabled: false, // disabled by default
|
|
18
|
+
sendClear: true, // send /clear after update prompt
|
|
19
|
+
sendInit: true, // send /init after /clear
|
|
20
|
+
},
|
|
21
|
+
lastUsedCase: null,
|
|
22
|
+
ralphEnabled: false,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Creates initial application state
|
|
26
|
+
* @returns Fresh application state with defaults
|
|
27
|
+
*/
|
|
28
|
+
export function createInitialState() {
|
|
29
|
+
return {
|
|
30
|
+
sessions: {},
|
|
31
|
+
tasks: {},
|
|
32
|
+
ralphLoop: {
|
|
33
|
+
status: 'stopped',
|
|
34
|
+
startedAt: null,
|
|
35
|
+
minDurationMs: null,
|
|
36
|
+
tasksCompleted: 0,
|
|
37
|
+
tasksGenerated: 0,
|
|
38
|
+
lastCheckAt: null,
|
|
39
|
+
},
|
|
40
|
+
config: { ...DEFAULT_CONFIG },
|
|
41
|
+
globalStats: createInitialGlobalStats(),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates initial global stats object
|
|
46
|
+
* @returns Fresh global stats with zero values
|
|
47
|
+
*/
|
|
48
|
+
export function createInitialGlobalStats() {
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
return {
|
|
51
|
+
totalInputTokens: 0,
|
|
52
|
+
totalOutputTokens: 0,
|
|
53
|
+
totalCost: 0,
|
|
54
|
+
totalSessionsCreated: 0,
|
|
55
|
+
firstRecordedAt: now,
|
|
56
|
+
lastUpdatedAt: now,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=app-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-state.js","sourceRoot":"","sources":["../../src/types/app-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8FH,8CAA8C;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,MAAM,EAAE,YAAY;IACtC,qBAAqB,EAAE,CAAC;IACxB,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE;QACP,aAAa,EAAE,IAAI,EAAE,wCAAwC;QAC7D,YAAY,EAAE,mCAAmC;QACjD,gBAAgB,EAAE,IAAI,EAAE,yBAAyB;QACjD,OAAO,EAAE,KAAK,EAAE,sBAAsB;QACtC,SAAS,EAAE,IAAI,EAAE,kCAAkC;QACnD,QAAQ,EAAE,IAAI,EAAE,0BAA0B;KAC3C;IACD,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,KAAK;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE;YACT,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,IAAI;SAClB;QACD,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;QAC7B,WAAW,EAAE,wBAAwB,EAAE;KACxC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO;QACL,gBAAgB,EAAE,CAAC;QACnB,iBAAiB,EAAE,CAAC;QACpB,SAAS,EAAE,CAAC;QACZ,oBAAoB,EAAE,CAAC;QACvB,eAAe,EAAE,GAAG;QACpB,aAAa,EAAE,GAAG;KACnB,CAAC;AACJ,CAAC"}
|