flaio-cli 0.3.1
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/LICENSE +21 -0
- package/README.md +461 -0
- package/dist/agents/agent-detector.d.ts +21 -0
- package/dist/agents/agent-detector.d.ts.map +1 -0
- package/dist/agents/agent-detector.js +109 -0
- package/dist/agents/agent-detector.js.map +1 -0
- package/dist/agents/agent-registry.d.ts +6 -0
- package/dist/agents/agent-registry.d.ts.map +1 -0
- package/dist/agents/agent-registry.js +25 -0
- package/dist/agents/agent-registry.js.map +1 -0
- package/dist/agents/agent-session.d.ts +60 -0
- package/dist/agents/agent-session.d.ts.map +1 -0
- package/dist/agents/agent-session.js +251 -0
- package/dist/agents/agent-session.js.map +1 -0
- package/dist/agents/drivers/base-driver.d.ts +37 -0
- package/dist/agents/drivers/base-driver.d.ts.map +1 -0
- package/dist/agents/drivers/base-driver.js +18 -0
- package/dist/agents/drivers/base-driver.js.map +1 -0
- package/dist/agents/drivers/claude-driver.d.ts +23 -0
- package/dist/agents/drivers/claude-driver.d.ts.map +1 -0
- package/dist/agents/drivers/claude-driver.js +61 -0
- package/dist/agents/drivers/claude-driver.js.map +1 -0
- package/dist/agents/drivers/gemini-driver.d.ts +23 -0
- package/dist/agents/drivers/gemini-driver.d.ts.map +1 -0
- package/dist/agents/drivers/gemini-driver.js +60 -0
- package/dist/agents/drivers/gemini-driver.js.map +1 -0
- package/dist/agents/session-metadata.d.ts +33 -0
- package/dist/agents/session-metadata.d.ts.map +1 -0
- package/dist/agents/session-metadata.js +34 -0
- package/dist/agents/session-metadata.js.map +1 -0
- package/dist/agents/sideband/hook-scripts.d.ts +29 -0
- package/dist/agents/sideband/hook-scripts.d.ts.map +1 -0
- package/dist/agents/sideband/hook-scripts.js +259 -0
- package/dist/agents/sideband/hook-scripts.js.map +1 -0
- package/dist/agents/sideband/sideband-receiver.d.ts +37 -0
- package/dist/agents/sideband/sideband-receiver.d.ts.map +1 -0
- package/dist/agents/sideband/sideband-receiver.js +203 -0
- package/dist/agents/sideband/sideband-receiver.js.map +1 -0
- package/dist/agents/sideband/status-resolver.d.ts +55 -0
- package/dist/agents/sideband/status-resolver.d.ts.map +1 -0
- package/dist/agents/sideband/status-resolver.js +194 -0
- package/dist/agents/sideband/status-resolver.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +94 -0
- package/dist/app.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +188 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/config.d.ts +341 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +94 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +33 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +33 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/connectors/adapters/discord-adapter.d.ts +25 -0
- package/dist/connectors/adapters/discord-adapter.d.ts.map +1 -0
- package/dist/connectors/adapters/discord-adapter.js +154 -0
- package/dist/connectors/adapters/discord-adapter.js.map +1 -0
- package/dist/connectors/adapters/slack-adapter.d.ts +38 -0
- package/dist/connectors/adapters/slack-adapter.d.ts.map +1 -0
- package/dist/connectors/adapters/slack-adapter.js +502 -0
- package/dist/connectors/adapters/slack-adapter.js.map +1 -0
- package/dist/connectors/adapters/telegram-adapter.d.ts +25 -0
- package/dist/connectors/adapters/telegram-adapter.d.ts.map +1 -0
- package/dist/connectors/adapters/telegram-adapter.js +164 -0
- package/dist/connectors/adapters/telegram-adapter.js.map +1 -0
- package/dist/connectors/connector-interface.d.ts +41 -0
- package/dist/connectors/connector-interface.d.ts.map +1 -0
- package/dist/connectors/connector-interface.js +2 -0
- package/dist/connectors/connector-interface.js.map +1 -0
- package/dist/connectors/connector-manager.d.ts +24 -0
- package/dist/connectors/connector-manager.d.ts.map +1 -0
- package/dist/connectors/connector-manager.js +82 -0
- package/dist/connectors/connector-manager.js.map +1 -0
- package/dist/connectors/debug.d.ts +3 -0
- package/dist/connectors/debug.d.ts.map +1 -0
- package/dist/connectors/debug.js +16 -0
- package/dist/connectors/debug.js.map +1 -0
- package/dist/hooks/hook-server.d.ts +27 -0
- package/dist/hooks/hook-server.d.ts.map +1 -0
- package/dist/hooks/hook-server.js +149 -0
- package/dist/hooks/hook-server.js.map +1 -0
- package/dist/hooks/hook.d.ts +10 -0
- package/dist/hooks/hook.d.ts.map +1 -0
- package/dist/hooks/hook.js +58 -0
- package/dist/hooks/hook.js.map +1 -0
- package/dist/hooks/install.d.ts +8 -0
- package/dist/hooks/install.d.ts.map +1 -0
- package/dist/hooks/install.js +160 -0
- package/dist/hooks/install.js.map +1 -0
- package/dist/hooks/notification-hook.d.ts +9 -0
- package/dist/hooks/notification-hook.d.ts.map +1 -0
- package/dist/hooks/notification-hook.js +38 -0
- package/dist/hooks/notification-hook.js.map +1 -0
- package/dist/hooks/post-tool-hook.d.ts +9 -0
- package/dist/hooks/post-tool-hook.d.ts.map +1 -0
- package/dist/hooks/post-tool-hook.js +39 -0
- package/dist/hooks/post-tool-hook.js.map +1 -0
- package/dist/hooks/stop-hook.d.ts +9 -0
- package/dist/hooks/stop-hook.d.ts.map +1 -0
- package/dist/hooks/stop-hook.js +37 -0
- package/dist/hooks/stop-hook.js.map +1 -0
- package/dist/portal/ansi-renderer.d.ts +15 -0
- package/dist/portal/ansi-renderer.d.ts.map +1 -0
- package/dist/portal/ansi-renderer.js +75 -0
- package/dist/portal/ansi-renderer.js.map +1 -0
- package/dist/portal/portal-client.d.ts +18 -0
- package/dist/portal/portal-client.d.ts.map +1 -0
- package/dist/portal/portal-client.js +335 -0
- package/dist/portal/portal-client.js.map +1 -0
- package/dist/portal/portal-picker.d.ts +8 -0
- package/dist/portal/portal-picker.d.ts.map +1 -0
- package/dist/portal/portal-picker.js +145 -0
- package/dist/portal/portal-picker.js.map +1 -0
- package/dist/portal/portal-server.d.ts +24 -0
- package/dist/portal/portal-server.d.ts.map +1 -0
- package/dist/portal/portal-server.js +330 -0
- package/dist/portal/portal-server.js.map +1 -0
- package/dist/portal/shared.d.ts +79 -0
- package/dist/portal/shared.d.ts.map +1 -0
- package/dist/portal/shared.js +5 -0
- package/dist/portal/shared.js.map +1 -0
- package/dist/relay/rate-limiter.d.ts +16 -0
- package/dist/relay/rate-limiter.d.ts.map +1 -0
- package/dist/relay/rate-limiter.js +37 -0
- package/dist/relay/rate-limiter.js.map +1 -0
- package/dist/relay/relay-auth.d.ts +29 -0
- package/dist/relay/relay-auth.d.ts.map +1 -0
- package/dist/relay/relay-auth.js +129 -0
- package/dist/relay/relay-auth.js.map +1 -0
- package/dist/relay/relay-client.d.ts +52 -0
- package/dist/relay/relay-client.d.ts.map +1 -0
- package/dist/relay/relay-client.js +1102 -0
- package/dist/relay/relay-client.js.map +1 -0
- package/dist/relay/relay-crypto.d.ts +29 -0
- package/dist/relay/relay-crypto.d.ts.map +1 -0
- package/dist/relay/relay-crypto.js +100 -0
- package/dist/relay/relay-crypto.js.map +1 -0
- package/dist/relay/relay-message-schemas.d.ts +276 -0
- package/dist/relay/relay-message-schemas.d.ts.map +1 -0
- package/dist/relay/relay-message-schemas.js +137 -0
- package/dist/relay/relay-message-schemas.js.map +1 -0
- package/dist/relay/relay-protocol.d.ts +444 -0
- package/dist/relay/relay-protocol.d.ts.map +1 -0
- package/dist/relay/relay-protocol.js +15 -0
- package/dist/relay/relay-protocol.js.map +1 -0
- package/dist/relay/relay-store.d.ts +23 -0
- package/dist/relay/relay-store.d.ts.map +1 -0
- package/dist/relay/relay-store.js +54 -0
- package/dist/relay/relay-store.js.map +1 -0
- package/dist/relay/ticket-tracker.d.ts +18 -0
- package/dist/relay/ticket-tracker.d.ts.map +1 -0
- package/dist/relay/ticket-tracker.js +58 -0
- package/dist/relay/ticket-tracker.js.map +1 -0
- package/dist/store/app-store.d.ts +66 -0
- package/dist/store/app-store.d.ts.map +1 -0
- package/dist/store/app-store.js +227 -0
- package/dist/store/app-store.js.map +1 -0
- package/dist/store/connector-store.d.ts +21 -0
- package/dist/store/connector-store.d.ts.map +1 -0
- package/dist/store/connector-store.js +591 -0
- package/dist/store/connector-store.js.map +1 -0
- package/dist/store/portal-store.d.ts +5 -0
- package/dist/store/portal-store.d.ts.map +1 -0
- package/dist/store/portal-store.js +5 -0
- package/dist/store/portal-store.js.map +1 -0
- package/dist/store/settings-store.d.ts +13 -0
- package/dist/store/settings-store.d.ts.map +1 -0
- package/dist/store/settings-store.js +59 -0
- package/dist/store/settings-store.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +19 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -0
- package/dist/terminal/pty-manager.js +58 -0
- package/dist/terminal/pty-manager.js.map +1 -0
- package/dist/terminal/screen-buffer.d.ts +36 -0
- package/dist/terminal/screen-buffer.d.ts.map +1 -0
- package/dist/terminal/screen-buffer.js +109 -0
- package/dist/terminal/screen-buffer.js.map +1 -0
- package/dist/terminal/xterm-bridge.d.ts +32 -0
- package/dist/terminal/xterm-bridge.d.ts.map +1 -0
- package/dist/terminal/xterm-bridge.js +168 -0
- package/dist/terminal/xterm-bridge.js.map +1 -0
- package/dist/ui/components/adopt-agent-dialog.d.ts +10 -0
- package/dist/ui/components/adopt-agent-dialog.d.ts.map +1 -0
- package/dist/ui/components/adopt-agent-dialog.js +31 -0
- package/dist/ui/components/adopt-agent-dialog.js.map +1 -0
- package/dist/ui/components/agent-tab.d.ts +17 -0
- package/dist/ui/components/agent-tab.d.ts.map +1 -0
- package/dist/ui/components/agent-tab.js +33 -0
- package/dist/ui/components/agent-tab.js.map +1 -0
- package/dist/ui/components/agents-settings-content.d.ts +7 -0
- package/dist/ui/components/agents-settings-content.d.ts.map +1 -0
- package/dist/ui/components/agents-settings-content.js +238 -0
- package/dist/ui/components/agents-settings-content.js.map +1 -0
- package/dist/ui/components/help-modal.d.ts +7 -0
- package/dist/ui/components/help-modal.d.ts.map +1 -0
- package/dist/ui/components/help-modal.js +29 -0
- package/dist/ui/components/help-modal.js.map +1 -0
- package/dist/ui/components/new-session-dialog.d.ts +8 -0
- package/dist/ui/components/new-session-dialog.d.ts.map +1 -0
- package/dist/ui/components/new-session-dialog.js +84 -0
- package/dist/ui/components/new-session-dialog.js.map +1 -0
- package/dist/ui/components/path-input.d.ts +8 -0
- package/dist/ui/components/path-input.d.ts.map +1 -0
- package/dist/ui/components/path-input.js +151 -0
- package/dist/ui/components/path-input.js.map +1 -0
- package/dist/ui/components/settings-panel.d.ts +7 -0
- package/dist/ui/components/settings-panel.d.ts.map +1 -0
- package/dist/ui/components/settings-panel.js +134 -0
- package/dist/ui/components/settings-panel.js.map +1 -0
- package/dist/ui/components/standalone-agents.d.ts +9 -0
- package/dist/ui/components/standalone-agents.d.ts.map +1 -0
- package/dist/ui/components/standalone-agents.js +28 -0
- package/dist/ui/components/standalone-agents.js.map +1 -0
- package/dist/ui/components/terminal-view.d.ts +12 -0
- package/dist/ui/components/terminal-view.d.ts.map +1 -0
- package/dist/ui/components/terminal-view.js +53 -0
- package/dist/ui/components/terminal-view.js.map +1 -0
- package/dist/ui/components/viewer-approval-dialog.d.ts +9 -0
- package/dist/ui/components/viewer-approval-dialog.d.ts.map +1 -0
- package/dist/ui/components/viewer-approval-dialog.js +38 -0
- package/dist/ui/components/viewer-approval-dialog.js.map +1 -0
- package/dist/ui/hooks/use-git-info.d.ts +8 -0
- package/dist/ui/hooks/use-git-info.d.ts.map +1 -0
- package/dist/ui/hooks/use-git-info.js +72 -0
- package/dist/ui/hooks/use-git-info.js.map +1 -0
- package/dist/ui/hooks/use-keybindings.d.ts +10 -0
- package/dist/ui/hooks/use-keybindings.d.ts.map +1 -0
- package/dist/ui/hooks/use-keybindings.js +91 -0
- package/dist/ui/hooks/use-keybindings.js.map +1 -0
- package/dist/ui/hooks/use-portal-connected.d.ts +2 -0
- package/dist/ui/hooks/use-portal-connected.d.ts.map +1 -0
- package/dist/ui/hooks/use-portal-connected.js +10 -0
- package/dist/ui/hooks/use-portal-connected.js.map +1 -0
- package/dist/ui/hooks/use-raw-input.d.ts +8 -0
- package/dist/ui/hooks/use-raw-input.d.ts.map +1 -0
- package/dist/ui/hooks/use-raw-input.js +106 -0
- package/dist/ui/hooks/use-raw-input.js.map +1 -0
- package/dist/ui/hooks/use-spinner.d.ts +2 -0
- package/dist/ui/hooks/use-spinner.d.ts.map +1 -0
- package/dist/ui/hooks/use-spinner.js +13 -0
- package/dist/ui/hooks/use-spinner.js.map +1 -0
- package/dist/ui/hooks/use-terminal-size.d.ts +5 -0
- package/dist/ui/hooks/use-terminal-size.d.ts.map +1 -0
- package/dist/ui/hooks/use-terminal-size.js +22 -0
- package/dist/ui/hooks/use-terminal-size.js.map +1 -0
- package/dist/ui/hooks/use-update-check.d.ts +6 -0
- package/dist/ui/hooks/use-update-check.d.ts.map +1 -0
- package/dist/ui/hooks/use-update-check.js +62 -0
- package/dist/ui/hooks/use-update-check.js.map +1 -0
- package/dist/ui/layout/main-pane.d.ts +13 -0
- package/dist/ui/layout/main-pane.d.ts.map +1 -0
- package/dist/ui/layout/main-pane.js +36 -0
- package/dist/ui/layout/main-pane.js.map +1 -0
- package/dist/ui/layout/shell.d.ts +17 -0
- package/dist/ui/layout/shell.d.ts.map +1 -0
- package/dist/ui/layout/shell.js +24 -0
- package/dist/ui/layout/shell.js.map +1 -0
- package/dist/ui/layout/sidebar.d.ts +12 -0
- package/dist/ui/layout/sidebar.d.ts.map +1 -0
- package/dist/ui/layout/sidebar.js +9 -0
- package/dist/ui/layout/sidebar.js.map +1 -0
- package/dist/ui/layout/status-bar.d.ts +9 -0
- package/dist/ui/layout/status-bar.d.ts.map +1 -0
- package/dist/ui/layout/status-bar.js +138 -0
- package/dist/ui/layout/status-bar.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
export type ShareMode = "read-only" | "read-write";
|
|
2
|
+
export interface RelaySessionInfo {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
driverName: string;
|
|
5
|
+
displayName: string;
|
|
6
|
+
cwd: string;
|
|
7
|
+
status: string;
|
|
8
|
+
cols: number;
|
|
9
|
+
rows: number;
|
|
10
|
+
/** Whether this session is interactive (TUI) or non-interactive (print mode) */
|
|
11
|
+
interactive?: boolean;
|
|
12
|
+
/** The CLI command string that was used to spawn this session */
|
|
13
|
+
command?: string;
|
|
14
|
+
/** Detailed state from sideband hooks */
|
|
15
|
+
detailedState?: string;
|
|
16
|
+
/** Detailed sub-state */
|
|
17
|
+
detailedDetail?: string;
|
|
18
|
+
/** Current tool name */
|
|
19
|
+
currentTool?: string;
|
|
20
|
+
/** Model display name from status line */
|
|
21
|
+
modelDisplayName?: string;
|
|
22
|
+
/** Cumulative cost USD */
|
|
23
|
+
totalCostUsd?: number;
|
|
24
|
+
/** Context window usage percentage */
|
|
25
|
+
usedPercentage?: number;
|
|
26
|
+
/** Lines added this session */
|
|
27
|
+
totalLinesAdded?: number;
|
|
28
|
+
/** Lines removed this session */
|
|
29
|
+
totalLinesRemoved?: number;
|
|
30
|
+
/** Whether cost display is enabled (CLI setting) */
|
|
31
|
+
showCost?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface CliAuthMsg {
|
|
34
|
+
type: "cli_auth";
|
|
35
|
+
token: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CliRegisterSessionMsg {
|
|
38
|
+
type: "cli_register_session";
|
|
39
|
+
sessionId: string;
|
|
40
|
+
driverName: string;
|
|
41
|
+
displayName: string;
|
|
42
|
+
cwd: string;
|
|
43
|
+
status: string;
|
|
44
|
+
cols: number;
|
|
45
|
+
rows: number;
|
|
46
|
+
/** Base64-encoded ECDH P-256 public key (present when E2E is enabled) */
|
|
47
|
+
publicKey?: string;
|
|
48
|
+
/** Whether this session is interactive (TUI) or non-interactive (print mode) */
|
|
49
|
+
interactive?: boolean;
|
|
50
|
+
/** The CLI command string that was used to spawn this session */
|
|
51
|
+
command?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface CliUnregisterSessionMsg {
|
|
54
|
+
type: "cli_unregister_session";
|
|
55
|
+
sessionId: string;
|
|
56
|
+
}
|
|
57
|
+
export interface CliPtyDataMsg {
|
|
58
|
+
type: "cli_pty_data";
|
|
59
|
+
sessionId: string;
|
|
60
|
+
/** Base64-encoded raw PTY output */
|
|
61
|
+
data: string;
|
|
62
|
+
}
|
|
63
|
+
export interface CliSessionStatusMsg {
|
|
64
|
+
type: "cli_session_status";
|
|
65
|
+
sessionId: string;
|
|
66
|
+
status: string;
|
|
67
|
+
/** Detailed state from sideband hooks (e.g. "running", "waiting_input") */
|
|
68
|
+
detailedState?: string;
|
|
69
|
+
/** Detailed sub-state (e.g. "tool_use", "thinking", "prompt") */
|
|
70
|
+
detailedDetail?: string;
|
|
71
|
+
/** Current tool name if a tool is in use */
|
|
72
|
+
currentTool?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface CliSessionMetadataMsg {
|
|
75
|
+
type: "cli_session_metadata";
|
|
76
|
+
sessionId: string;
|
|
77
|
+
modelId?: string;
|
|
78
|
+
modelDisplayName?: string;
|
|
79
|
+
totalCostUsd?: number;
|
|
80
|
+
totalDurationMs?: number;
|
|
81
|
+
totalLinesAdded?: number;
|
|
82
|
+
totalLinesRemoved?: number;
|
|
83
|
+
usedPercentage?: number;
|
|
84
|
+
contextTotalTokens?: number;
|
|
85
|
+
contextUsedTokens?: number;
|
|
86
|
+
/** Whether cost display is enabled (CLI setting) */
|
|
87
|
+
showCost?: boolean;
|
|
88
|
+
}
|
|
89
|
+
export interface CliPongMsg {
|
|
90
|
+
type: "cli_pong";
|
|
91
|
+
}
|
|
92
|
+
export interface CliSessionPublicKeyMsg {
|
|
93
|
+
type: "cli_session_public_key";
|
|
94
|
+
sessionId: string;
|
|
95
|
+
/** Base64-encoded ECDH P-256 public key */
|
|
96
|
+
publicKey: string;
|
|
97
|
+
}
|
|
98
|
+
export interface CliWrappedKeyMsg {
|
|
99
|
+
type: "cli_wrapped_key";
|
|
100
|
+
sessionId: string;
|
|
101
|
+
viewerId: string;
|
|
102
|
+
/** Encrypted SCK (wire format: base64(nonce || ciphertext || tag)) */
|
|
103
|
+
wrappedKey: string;
|
|
104
|
+
/** Base64-encoded HKDF salt used for KEK derivation */
|
|
105
|
+
salt: string;
|
|
106
|
+
}
|
|
107
|
+
export interface CliEncryptedPtyDataMsg {
|
|
108
|
+
type: "cli_encrypted_pty_data";
|
|
109
|
+
sessionId: string;
|
|
110
|
+
/** Encrypted PTY output (wire format: base64(nonce || ciphertext || tag)) */
|
|
111
|
+
data: string;
|
|
112
|
+
/** Monotonic sequence number for ordering */
|
|
113
|
+
seq: number;
|
|
114
|
+
}
|
|
115
|
+
export interface CliBrowseDirResultMsg {
|
|
116
|
+
type: "cli_browse_dir_result";
|
|
117
|
+
requestId: string;
|
|
118
|
+
viewerId: string;
|
|
119
|
+
resolvedPath: string;
|
|
120
|
+
directories: string[];
|
|
121
|
+
error: string | null;
|
|
122
|
+
}
|
|
123
|
+
export interface CliBrowseFilesResultMsg {
|
|
124
|
+
type: "cli_browse_files_result";
|
|
125
|
+
requestId: string;
|
|
126
|
+
viewerId: string;
|
|
127
|
+
resolvedPath: string;
|
|
128
|
+
directories: string[];
|
|
129
|
+
files: string[];
|
|
130
|
+
error: string | null;
|
|
131
|
+
}
|
|
132
|
+
export interface CliPlanReadyMsg {
|
|
133
|
+
type: "cli_plan_ready";
|
|
134
|
+
ticketId: string;
|
|
135
|
+
sessionId: string;
|
|
136
|
+
plan: string;
|
|
137
|
+
iteration: number;
|
|
138
|
+
feedback: string | null;
|
|
139
|
+
}
|
|
140
|
+
export interface CliImplementationDoneMsg {
|
|
141
|
+
type: "cli_implementation_done";
|
|
142
|
+
ticketId: string;
|
|
143
|
+
sessionId: string;
|
|
144
|
+
summary: string;
|
|
145
|
+
gitContext: {
|
|
146
|
+
branch?: string;
|
|
147
|
+
prUrl?: string;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
export interface CliTicketStatusMsg {
|
|
151
|
+
type: "cli_ticket_status";
|
|
152
|
+
ticketId: string;
|
|
153
|
+
sessionId: string;
|
|
154
|
+
status: "planning" | "plan_ready" | "implementing" | "done" | "error";
|
|
155
|
+
message?: string;
|
|
156
|
+
}
|
|
157
|
+
export interface CliGitInfoResultMsg {
|
|
158
|
+
type: "cli_git_info_result";
|
|
159
|
+
requestId: string;
|
|
160
|
+
viewerId: string;
|
|
161
|
+
branch: string | null;
|
|
162
|
+
remoteUrl: string | null;
|
|
163
|
+
commits: {
|
|
164
|
+
hash: string;
|
|
165
|
+
message: string;
|
|
166
|
+
author: string;
|
|
167
|
+
timestamp: number;
|
|
168
|
+
}[];
|
|
169
|
+
changedFiles: number;
|
|
170
|
+
isClean: boolean;
|
|
171
|
+
error: string | null;
|
|
172
|
+
}
|
|
173
|
+
export interface DriverInfo {
|
|
174
|
+
name: string;
|
|
175
|
+
displayName: string;
|
|
176
|
+
installed: boolean;
|
|
177
|
+
}
|
|
178
|
+
export interface CliDriversResultMsg {
|
|
179
|
+
type: "cli_drivers_result";
|
|
180
|
+
viewerId: string;
|
|
181
|
+
drivers: DriverInfo[];
|
|
182
|
+
}
|
|
183
|
+
/** Default driver name used when none is specified in relay messages */
|
|
184
|
+
export declare const DEFAULT_DRIVER_NAME = "claude";
|
|
185
|
+
export type CliToRelayMsg = CliAuthMsg | CliRegisterSessionMsg | CliUnregisterSessionMsg | CliPtyDataMsg | CliSessionStatusMsg | CliSessionMetadataMsg | CliPongMsg | CliSessionPublicKeyMsg | CliWrappedKeyMsg | CliEncryptedPtyDataMsg | CliBrowseDirResultMsg | CliBrowseFilesResultMsg | CliPlanReadyMsg | CliImplementationDoneMsg | CliTicketStatusMsg | CliGitInfoResultMsg | CliDriversResultMsg;
|
|
186
|
+
export interface WebAuthMsg {
|
|
187
|
+
type: "web_auth";
|
|
188
|
+
token: string;
|
|
189
|
+
}
|
|
190
|
+
export interface WebListSessionsMsg {
|
|
191
|
+
type: "web_list_sessions";
|
|
192
|
+
}
|
|
193
|
+
export interface WebSubscribeMsg {
|
|
194
|
+
type: "web_subscribe";
|
|
195
|
+
sessionId: string;
|
|
196
|
+
mode: ShareMode;
|
|
197
|
+
}
|
|
198
|
+
export interface WebUnsubscribeMsg {
|
|
199
|
+
type: "web_unsubscribe";
|
|
200
|
+
}
|
|
201
|
+
export interface WebInputMsg {
|
|
202
|
+
type: "web_input";
|
|
203
|
+
sessionId: string;
|
|
204
|
+
/** Base64-encoded keystrokes */
|
|
205
|
+
data: string;
|
|
206
|
+
}
|
|
207
|
+
export interface WebResizeMsg {
|
|
208
|
+
type: "web_resize";
|
|
209
|
+
sessionId: string;
|
|
210
|
+
cols: number;
|
|
211
|
+
rows: number;
|
|
212
|
+
}
|
|
213
|
+
export interface WebCreateSessionMsg {
|
|
214
|
+
type: "web_create_session";
|
|
215
|
+
driverName: string;
|
|
216
|
+
cwd: string;
|
|
217
|
+
}
|
|
218
|
+
export interface WebPongMsg {
|
|
219
|
+
type: "web_pong";
|
|
220
|
+
}
|
|
221
|
+
export interface WebViewerPublicKeyMsg {
|
|
222
|
+
type: "web_viewer_public_key";
|
|
223
|
+
sessionId: string;
|
|
224
|
+
viewerId: string;
|
|
225
|
+
/** Base64-encoded ECDH P-256 public key */
|
|
226
|
+
publicKey: string;
|
|
227
|
+
}
|
|
228
|
+
export interface WebEncryptedInputMsg {
|
|
229
|
+
type: "web_encrypted_input";
|
|
230
|
+
sessionId: string;
|
|
231
|
+
viewerId: string;
|
|
232
|
+
/** Encrypted keystrokes (wire format: base64(nonce || ciphertext || tag)) */
|
|
233
|
+
data: string;
|
|
234
|
+
}
|
|
235
|
+
export interface WebBrowseDirMsg {
|
|
236
|
+
type: "web_browse_dir";
|
|
237
|
+
requestId: string;
|
|
238
|
+
path: string;
|
|
239
|
+
}
|
|
240
|
+
export type BrowserToRelayMsg = WebAuthMsg | WebListSessionsMsg | WebSubscribeMsg | WebUnsubscribeMsg | WebInputMsg | WebResizeMsg | WebCreateSessionMsg | WebPongMsg | WebViewerPublicKeyMsg | WebEncryptedInputMsg | WebBrowseDirMsg;
|
|
241
|
+
export interface RelayAuthOkMsg {
|
|
242
|
+
type: "relay_auth_ok";
|
|
243
|
+
}
|
|
244
|
+
export interface RelayAuthFailMsg {
|
|
245
|
+
type: "relay_auth_fail";
|
|
246
|
+
reason: string;
|
|
247
|
+
}
|
|
248
|
+
export interface RelayInputMsg {
|
|
249
|
+
type: "relay_input";
|
|
250
|
+
sessionId: string;
|
|
251
|
+
/** Base64-encoded keystrokes from browser */
|
|
252
|
+
data: string;
|
|
253
|
+
viewerId: string;
|
|
254
|
+
}
|
|
255
|
+
export interface RelayResizeMsg {
|
|
256
|
+
type: "relay_resize";
|
|
257
|
+
sessionId: string;
|
|
258
|
+
cols: number;
|
|
259
|
+
rows: number;
|
|
260
|
+
}
|
|
261
|
+
export interface RelayViewerJoinedMsg {
|
|
262
|
+
type: "relay_viewer_joined";
|
|
263
|
+
sessionId: string;
|
|
264
|
+
viewerId: string;
|
|
265
|
+
}
|
|
266
|
+
export interface RelayViewerLeftMsg {
|
|
267
|
+
type: "relay_viewer_left";
|
|
268
|
+
sessionId: string;
|
|
269
|
+
viewerId: string;
|
|
270
|
+
}
|
|
271
|
+
export interface RelayCreateSessionMsg {
|
|
272
|
+
type: "relay_create_session";
|
|
273
|
+
driverName: string;
|
|
274
|
+
cwd: string;
|
|
275
|
+
}
|
|
276
|
+
export interface RelayPingMsg {
|
|
277
|
+
type: "relay_ping";
|
|
278
|
+
}
|
|
279
|
+
export interface RelayViewerPublicKeyMsg {
|
|
280
|
+
type: "relay_viewer_public_key";
|
|
281
|
+
sessionId: string;
|
|
282
|
+
viewerId: string;
|
|
283
|
+
/** Base64-encoded ECDH P-256 public key from viewer */
|
|
284
|
+
publicKey: string;
|
|
285
|
+
}
|
|
286
|
+
export interface RelayEncryptedInputMsg {
|
|
287
|
+
type: "relay_encrypted_input";
|
|
288
|
+
sessionId: string;
|
|
289
|
+
viewerId: string;
|
|
290
|
+
/** Encrypted keystrokes from viewer (wire format: base64(nonce || ciphertext || tag)) */
|
|
291
|
+
data: string;
|
|
292
|
+
}
|
|
293
|
+
export interface RelayBrowseDirMsg {
|
|
294
|
+
type: "relay_browse_dir";
|
|
295
|
+
requestId: string;
|
|
296
|
+
viewerId: string;
|
|
297
|
+
path: string;
|
|
298
|
+
}
|
|
299
|
+
export interface RelayBrowseFilesMsg {
|
|
300
|
+
type: "relay_browse_files";
|
|
301
|
+
requestId: string;
|
|
302
|
+
viewerId: string;
|
|
303
|
+
path: string;
|
|
304
|
+
}
|
|
305
|
+
export interface RelayListDriversMsg {
|
|
306
|
+
type: "relay_list_drivers";
|
|
307
|
+
viewerId: string;
|
|
308
|
+
}
|
|
309
|
+
export interface RelayStartPlanningMsg {
|
|
310
|
+
type: "relay_start_planning";
|
|
311
|
+
ticketId: string;
|
|
312
|
+
ticketTitle: string;
|
|
313
|
+
ticketDescription: string;
|
|
314
|
+
systemInstructions: string[];
|
|
315
|
+
cwd: string;
|
|
316
|
+
driverName?: string;
|
|
317
|
+
previousPlan?: string;
|
|
318
|
+
feedback?: string;
|
|
319
|
+
iteration?: number;
|
|
320
|
+
}
|
|
321
|
+
export interface RelayStartInteractivePlanningMsg {
|
|
322
|
+
type: "relay_start_interactive_planning";
|
|
323
|
+
ticketId: string;
|
|
324
|
+
ticketTitle: string;
|
|
325
|
+
ticketDescription: string;
|
|
326
|
+
systemInstructions: string[];
|
|
327
|
+
cwd: string;
|
|
328
|
+
driverName?: string;
|
|
329
|
+
}
|
|
330
|
+
export interface RelayStartImplementationMsg {
|
|
331
|
+
type: "relay_start_implementation";
|
|
332
|
+
ticketId: string;
|
|
333
|
+
plan: string;
|
|
334
|
+
systemInstructions: string[];
|
|
335
|
+
cwd: string;
|
|
336
|
+
driverName?: string;
|
|
337
|
+
}
|
|
338
|
+
export interface RelayRequestChangesMsg {
|
|
339
|
+
type: "relay_request_changes";
|
|
340
|
+
ticketId: string;
|
|
341
|
+
sessionId: string;
|
|
342
|
+
feedback: string;
|
|
343
|
+
}
|
|
344
|
+
export interface RelayCloseSessionMsg {
|
|
345
|
+
type: "relay_close_session";
|
|
346
|
+
sessionId: string;
|
|
347
|
+
}
|
|
348
|
+
export interface RelayRequestGitInfoMsg {
|
|
349
|
+
type: "relay_request_git_info";
|
|
350
|
+
requestId: string;
|
|
351
|
+
viewerId: string;
|
|
352
|
+
cwd: string;
|
|
353
|
+
}
|
|
354
|
+
export type RelayToCliMsg = RelayAuthOkMsg | RelayAuthFailMsg | RelayInputMsg | RelayResizeMsg | RelayViewerJoinedMsg | RelayViewerLeftMsg | RelayCreateSessionMsg | RelayPingMsg | RelayViewerPublicKeyMsg | RelayEncryptedInputMsg | RelayBrowseDirMsg | RelayBrowseFilesMsg | RelayStartPlanningMsg | RelayStartInteractivePlanningMsg | RelayStartImplementationMsg | RelayRequestChangesMsg | RelayCloseSessionMsg | RelayRequestGitInfoMsg | RelayListDriversMsg;
|
|
355
|
+
export interface RelayWebAuthOkMsg {
|
|
356
|
+
type: "relay_web_auth_ok";
|
|
357
|
+
}
|
|
358
|
+
export interface RelayWebAuthFailMsg {
|
|
359
|
+
type: "relay_web_auth_fail";
|
|
360
|
+
reason: string;
|
|
361
|
+
}
|
|
362
|
+
export interface RelaySessionsMsg {
|
|
363
|
+
type: "relay_sessions";
|
|
364
|
+
sessions: RelaySessionInfo[];
|
|
365
|
+
}
|
|
366
|
+
export interface RelayPtyDataMsg {
|
|
367
|
+
type: "relay_pty_data";
|
|
368
|
+
sessionId: string;
|
|
369
|
+
/** Base64-encoded raw PTY output (forwarded from CLI) */
|
|
370
|
+
data: string;
|
|
371
|
+
}
|
|
372
|
+
export interface RelaySessionStatusMsg {
|
|
373
|
+
type: "relay_session_status";
|
|
374
|
+
sessionId: string;
|
|
375
|
+
status: string;
|
|
376
|
+
/** Detailed state from sideband hooks */
|
|
377
|
+
detailedState?: string;
|
|
378
|
+
/** Detailed sub-state */
|
|
379
|
+
detailedDetail?: string;
|
|
380
|
+
/** Current tool name */
|
|
381
|
+
currentTool?: string;
|
|
382
|
+
}
|
|
383
|
+
export interface RelaySessionMetadataMsg {
|
|
384
|
+
type: "relay_session_metadata";
|
|
385
|
+
sessionId: string;
|
|
386
|
+
modelId?: string;
|
|
387
|
+
modelDisplayName?: string;
|
|
388
|
+
totalCostUsd?: number;
|
|
389
|
+
totalDurationMs?: number;
|
|
390
|
+
totalLinesAdded?: number;
|
|
391
|
+
totalLinesRemoved?: number;
|
|
392
|
+
usedPercentage?: number;
|
|
393
|
+
contextTotalTokens?: number;
|
|
394
|
+
contextUsedTokens?: number;
|
|
395
|
+
}
|
|
396
|
+
export interface RelaySessionEndedMsg {
|
|
397
|
+
type: "relay_session_ended";
|
|
398
|
+
sessionId: string;
|
|
399
|
+
}
|
|
400
|
+
export interface RelaySessionCreatedMsg {
|
|
401
|
+
type: "relay_session_created";
|
|
402
|
+
sessionId: string;
|
|
403
|
+
}
|
|
404
|
+
export interface RelayWebPingMsg {
|
|
405
|
+
type: "relay_ping";
|
|
406
|
+
}
|
|
407
|
+
export interface RelaySessionPublicKeyMsg {
|
|
408
|
+
type: "relay_session_public_key";
|
|
409
|
+
sessionId: string;
|
|
410
|
+
/** Base64-encoded ECDH P-256 public key from CLI */
|
|
411
|
+
publicKey: string;
|
|
412
|
+
}
|
|
413
|
+
export interface RelayWrappedKeyMsg {
|
|
414
|
+
type: "relay_wrapped_key";
|
|
415
|
+
sessionId: string;
|
|
416
|
+
viewerId: string;
|
|
417
|
+
/** Encrypted SCK (wire format: base64(nonce || ciphertext || tag)) */
|
|
418
|
+
wrappedKey: string;
|
|
419
|
+
/** Base64-encoded HKDF salt used for KEK derivation */
|
|
420
|
+
salt: string;
|
|
421
|
+
}
|
|
422
|
+
export interface RelayEncryptedPtyDataMsg {
|
|
423
|
+
type: "relay_encrypted_pty_data";
|
|
424
|
+
sessionId: string;
|
|
425
|
+
/** Encrypted PTY output (wire format: base64(nonce || ciphertext || tag)) */
|
|
426
|
+
data: string;
|
|
427
|
+
/** Monotonic sequence number for ordering */
|
|
428
|
+
seq: number;
|
|
429
|
+
}
|
|
430
|
+
export interface RelayBrowseDirResultMsg {
|
|
431
|
+
type: "relay_browse_dir_result";
|
|
432
|
+
requestId: string;
|
|
433
|
+
resolvedPath: string;
|
|
434
|
+
directories: string[];
|
|
435
|
+
error: string | null;
|
|
436
|
+
}
|
|
437
|
+
export type RelayToBrowserMsg = RelayWebAuthOkMsg | RelayWebAuthFailMsg | RelaySessionsMsg | RelayPtyDataMsg | RelaySessionStatusMsg | RelaySessionMetadataMsg | RelaySessionEndedMsg | RelaySessionCreatedMsg | RelayWebPingMsg | RelaySessionPublicKeyMsg | RelayWrappedKeyMsg | RelayEncryptedPtyDataMsg | RelayBrowseDirResultMsg;
|
|
438
|
+
export declare const RELAY_URL = "wss://api.flaio.ai";
|
|
439
|
+
export declare const AUTH_URL = "https://flaio.ai/auth/cli";
|
|
440
|
+
/** Heartbeat interval in ms */
|
|
441
|
+
export declare const PING_INTERVAL_MS = 30000;
|
|
442
|
+
/** Dead connection timeout in ms */
|
|
443
|
+
export declare const PONG_TIMEOUT_MS = 15000;
|
|
444
|
+
//# sourceMappingURL=relay-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-protocol.d.ts","sourceRoot":"","sources":["../../src/relay/relay-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// WebSocket protocol message types for CLI ↔ Relay ↔ Browser communication
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/** Default driver name used when none is specified in relay messages */
|
|
5
|
+
export const DEFAULT_DRIVER_NAME = "claude";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Constants
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
export const RELAY_URL = "wss://api.flaio.ai";
|
|
10
|
+
export const AUTH_URL = "https://flaio.ai/auth/cli";
|
|
11
|
+
/** Heartbeat interval in ms */
|
|
12
|
+
export const PING_INTERVAL_MS = 30_000;
|
|
13
|
+
/** Dead connection timeout in ms */
|
|
14
|
+
export const PONG_TIMEOUT_MS = 15_000;
|
|
15
|
+
//# sourceMappingURL=relay-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-protocol.js","sourceRoot":"","sources":["../../src/relay/relay-protocol.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AA8M9E,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAwX5C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAEpD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,oCAAoC;AACpC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type RelayConnectionStatus = "disconnected" | "connecting" | "authenticating" | "connected" | "error";
|
|
2
|
+
export type SessionEncryptionStatus = "none" | "key-exchange" | "active" | "failed";
|
|
3
|
+
export interface RelayState {
|
|
4
|
+
/** Current WebSocket connection status */
|
|
5
|
+
connectionStatus: RelayConnectionStatus;
|
|
6
|
+
/** Error message if connectionStatus is "error" */
|
|
7
|
+
errorMessage: string | null;
|
|
8
|
+
/** Number of browser viewers currently connected across all sessions */
|
|
9
|
+
totalViewerCount: number;
|
|
10
|
+
/** Per-session viewer counts */
|
|
11
|
+
sessionViewerCounts: Map<string, number>;
|
|
12
|
+
/** Whether the user is logged in (has auth token) */
|
|
13
|
+
isLoggedIn: boolean;
|
|
14
|
+
/** Per-session E2E encryption status */
|
|
15
|
+
sessionEncryptionStatus: Map<string, SessionEncryptionStatus>;
|
|
16
|
+
}
|
|
17
|
+
export declare const relayStore: import("zustand/vanilla").StoreApi<RelayState>;
|
|
18
|
+
export declare function setRelayConnectionStatus(status: RelayConnectionStatus, errorMessage?: string): void;
|
|
19
|
+
export declare function updateViewerCount(sessionId: string, delta: number): void;
|
|
20
|
+
export declare function clearViewerCounts(): void;
|
|
21
|
+
export declare function setSessionEncryptionStatus(sessionId: string, status: SessionEncryptionStatus): void;
|
|
22
|
+
export declare function setRelayLoggedIn(loggedIn: boolean): void;
|
|
23
|
+
//# sourceMappingURL=relay-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-store.d.ts","sourceRoot":"","sources":["../../src/relay/relay-store.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpF,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,mDAAmD;IACnD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,qDAAqD;IACrD,UAAU,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CAC/D;AAED,eAAO,MAAM,UAAU,gDAOpB,CAAC;AAEJ,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,qBAAqB,EAC7B,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAKN;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,IAAI,CAmBN;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,uBAAuB,GAC9B,IAAI,CAQN;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAExD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createStore } from "zustand/vanilla";
|
|
2
|
+
export const relayStore = createStore(() => ({
|
|
3
|
+
connectionStatus: "disconnected",
|
|
4
|
+
errorMessage: null,
|
|
5
|
+
totalViewerCount: 0,
|
|
6
|
+
sessionViewerCounts: new Map(),
|
|
7
|
+
isLoggedIn: false,
|
|
8
|
+
sessionEncryptionStatus: new Map(),
|
|
9
|
+
}));
|
|
10
|
+
export function setRelayConnectionStatus(status, errorMessage) {
|
|
11
|
+
relayStore.setState({
|
|
12
|
+
connectionStatus: status,
|
|
13
|
+
errorMessage: errorMessage ?? null,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export function updateViewerCount(sessionId, delta) {
|
|
17
|
+
const state = relayStore.getState();
|
|
18
|
+
const counts = new Map(state.sessionViewerCounts);
|
|
19
|
+
const current = counts.get(sessionId) ?? 0;
|
|
20
|
+
const next = Math.max(0, current + delta);
|
|
21
|
+
if (next === 0) {
|
|
22
|
+
counts.delete(sessionId);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
counts.set(sessionId, next);
|
|
26
|
+
}
|
|
27
|
+
let total = 0;
|
|
28
|
+
for (const c of counts.values())
|
|
29
|
+
total += c;
|
|
30
|
+
relayStore.setState({
|
|
31
|
+
sessionViewerCounts: counts,
|
|
32
|
+
totalViewerCount: total,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function clearViewerCounts() {
|
|
36
|
+
relayStore.setState({
|
|
37
|
+
totalViewerCount: 0,
|
|
38
|
+
sessionViewerCounts: new Map(),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export function setSessionEncryptionStatus(sessionId, status) {
|
|
42
|
+
const statuses = new Map(relayStore.getState().sessionEncryptionStatus);
|
|
43
|
+
if (status === "none") {
|
|
44
|
+
statuses.delete(sessionId);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
statuses.set(sessionId, status);
|
|
48
|
+
}
|
|
49
|
+
relayStore.setState({ sessionEncryptionStatus: statuses });
|
|
50
|
+
}
|
|
51
|
+
export function setRelayLoggedIn(loggedIn) {
|
|
52
|
+
relayStore.setState({ isLoggedIn: loggedIn });
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=relay-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-store.js","sourceRoot":"","sources":["../../src/relay/relay-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA8B9C,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAa,GAAG,EAAE,CAAC,CAAC;IACvD,gBAAgB,EAAE,cAAc;IAChC,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,CAAC;IACnB,mBAAmB,EAAE,IAAI,GAAG,EAAE;IAC9B,UAAU,EAAE,KAAK;IACjB,uBAAuB,EAAE,IAAI,GAAG,EAAE;CACnC,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,wBAAwB,CACtC,MAA6B,EAC7B,YAAqB;IAErB,UAAU,CAAC,QAAQ,CAAC;QAClB,gBAAgB,EAAE,MAAM;QACxB,YAAY,EAAE,YAAY,IAAI,IAAI;KACnC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,KAAa;IAEb,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,IAAI,CAAC,CAAC;IAE5C,UAAU,CAAC,QAAQ,CAAC;QAClB,mBAAmB,EAAE,MAAM;QAC3B,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,UAAU,CAAC,QAAQ,CAAC;QAClB,gBAAgB,EAAE,CAAC;QACnB,mBAAmB,EAAE,IAAI,GAAG,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,MAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,uBAAuB,CAAC,CAAC;IACxE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,UAAU,CAAC,QAAQ,CAAC,EAAE,uBAAuB,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface TrackedTicket {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
status: string;
|
|
4
|
+
ticketTitle: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class TicketTracker {
|
|
7
|
+
private ticketMap;
|
|
8
|
+
private sessionToTicket;
|
|
9
|
+
startPlanning(ticketId: string, sessionId: string, ticketTitle: string): void;
|
|
10
|
+
startImplementation(ticketId: string, sessionId: string): void;
|
|
11
|
+
getSessionForTicket(ticketId: string): string | undefined;
|
|
12
|
+
getTicketForSession(sessionId: string): string | undefined;
|
|
13
|
+
updateStatus(ticketId: string, status: string): void;
|
|
14
|
+
remove(ticketId: string): void;
|
|
15
|
+
getAll(): Map<string, TrackedTicket>;
|
|
16
|
+
}
|
|
17
|
+
export declare const ticketTracker: TicketTracker;
|
|
18
|
+
//# sourceMappingURL=ticket-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-tracker.d.ts","sourceRoot":"","sources":["../../src/relay/ticket-tracker.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,eAAe,CAA6B;IAEpD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAS7E,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAmB9D,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOpD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ9B,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;CAGrC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// TicketTracker — maps ticketId to session and status for the dev loop
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export class TicketTracker {
|
|
5
|
+
ticketMap = new Map();
|
|
6
|
+
sessionToTicket = new Map();
|
|
7
|
+
startPlanning(ticketId, sessionId, ticketTitle) {
|
|
8
|
+
this.ticketMap.set(ticketId, {
|
|
9
|
+
sessionId,
|
|
10
|
+
status: "planning",
|
|
11
|
+
ticketTitle,
|
|
12
|
+
});
|
|
13
|
+
this.sessionToTicket.set(sessionId, ticketId);
|
|
14
|
+
}
|
|
15
|
+
startImplementation(ticketId, sessionId) {
|
|
16
|
+
const existing = this.ticketMap.get(ticketId);
|
|
17
|
+
if (existing) {
|
|
18
|
+
// Remove old session mapping if session changed
|
|
19
|
+
if (existing.sessionId !== sessionId) {
|
|
20
|
+
this.sessionToTicket.delete(existing.sessionId);
|
|
21
|
+
}
|
|
22
|
+
existing.sessionId = sessionId;
|
|
23
|
+
existing.status = "implementing";
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.ticketMap.set(ticketId, {
|
|
27
|
+
sessionId,
|
|
28
|
+
status: "implementing",
|
|
29
|
+
ticketTitle: "",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
this.sessionToTicket.set(sessionId, ticketId);
|
|
33
|
+
}
|
|
34
|
+
getSessionForTicket(ticketId) {
|
|
35
|
+
return this.ticketMap.get(ticketId)?.sessionId;
|
|
36
|
+
}
|
|
37
|
+
getTicketForSession(sessionId) {
|
|
38
|
+
return this.sessionToTicket.get(sessionId);
|
|
39
|
+
}
|
|
40
|
+
updateStatus(ticketId, status) {
|
|
41
|
+
const entry = this.ticketMap.get(ticketId);
|
|
42
|
+
if (entry) {
|
|
43
|
+
entry.status = status;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
remove(ticketId) {
|
|
47
|
+
const entry = this.ticketMap.get(ticketId);
|
|
48
|
+
if (entry) {
|
|
49
|
+
this.sessionToTicket.delete(entry.sessionId);
|
|
50
|
+
this.ticketMap.delete(ticketId);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getAll() {
|
|
54
|
+
return new Map(this.ticketMap);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export const ticketTracker = new TicketTracker();
|
|
58
|
+
//# sourceMappingURL=ticket-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-tracker.js","sourceRoot":"","sources":["../../src/relay/ticket-tracker.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAQ9E,MAAM,OAAO,aAAa;IAChB,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,aAAa,CAAC,QAAgB,EAAE,SAAiB,EAAE,WAAmB;QACpE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC3B,SAAS;YACT,MAAM,EAAE,UAAU;YAClB,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,CAAC,QAAgB,EAAE,SAAiB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,gDAAgD;YAChD,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;YACD,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;YAC/B,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC3B,SAAS;gBACT,MAAM,EAAE,cAAc;gBACtB,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACjD,CAAC;IAED,mBAAmB,CAAC,SAAiB;QACnC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,MAAc;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
|