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,591 @@
|
|
|
1
|
+
import { createStore } from "zustand/vanilla";
|
|
2
|
+
import { ConnectorManager } from "../connectors/connector-manager.js";
|
|
3
|
+
import { SlackAdapter } from "../connectors/adapters/slack-adapter.js";
|
|
4
|
+
import { HookServer } from "../hooks/hook-server.js";
|
|
5
|
+
import { PortalServer } from "../portal/portal-server.js";
|
|
6
|
+
import { RelayClient } from "../relay/relay-client.js";
|
|
7
|
+
import { setRelayLoggedIn } from "../relay/relay-store.js";
|
|
8
|
+
import { installHooks } from "../hooks/install.js";
|
|
9
|
+
import { appStore, getSessionInstance, setPermissionPending, clearPermissionPending } from "./app-store.js";
|
|
10
|
+
import { settingsStore } from "./settings-store.js";
|
|
11
|
+
import { makeDebugLog } from "../connectors/debug.js";
|
|
12
|
+
const debugLog = makeDebugLog("connector");
|
|
13
|
+
export const connectorStatusStore = createStore(() => ({
|
|
14
|
+
connectors: [],
|
|
15
|
+
}));
|
|
16
|
+
function publishConnectorStatuses() {
|
|
17
|
+
const badges = connectorManager.getAll().map((c) => ({
|
|
18
|
+
name: c.name,
|
|
19
|
+
displayName: c.displayName,
|
|
20
|
+
status: c.status,
|
|
21
|
+
}));
|
|
22
|
+
connectorStatusStore.setState({ connectors: badges });
|
|
23
|
+
}
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Module-level singletons (same pattern as agentDetector in app-store.ts)
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
const connectorManager = new ConnectorManager();
|
|
28
|
+
const hookServer = new HookServer();
|
|
29
|
+
const portalServer = new PortalServer();
|
|
30
|
+
const relayClient = new RelayClient();
|
|
31
|
+
let started = false;
|
|
32
|
+
let unsubSettings = null;
|
|
33
|
+
let unsubSessions = null;
|
|
34
|
+
// Session status tracking for notification transitions
|
|
35
|
+
const prevStatuses = new Map();
|
|
36
|
+
// Dedup: avoid posting the same response twice (waiting_input → exited, or hook + status transition)
|
|
37
|
+
const lastPostedResponse = new Map();
|
|
38
|
+
// Track last post time per session to debounce rapid transitions
|
|
39
|
+
const lastPostTime = new Map();
|
|
40
|
+
const DEDUP_WINDOW_MS = 3000;
|
|
41
|
+
// Debounce + mutex state for config reactivity
|
|
42
|
+
let debounceTimer = null;
|
|
43
|
+
let syncInProgress = false;
|
|
44
|
+
let lastSlackFields = null;
|
|
45
|
+
/**
|
|
46
|
+
* Start the HookServer IPC and wire all bridges.
|
|
47
|
+
* Safe to call multiple times — only the first call has effect.
|
|
48
|
+
*/
|
|
49
|
+
export async function startConnectors() {
|
|
50
|
+
if (started)
|
|
51
|
+
return;
|
|
52
|
+
started = true;
|
|
53
|
+
// Ensure settings are loaded before reading config
|
|
54
|
+
if (!settingsStore.getState().loaded) {
|
|
55
|
+
settingsStore.getState().load();
|
|
56
|
+
}
|
|
57
|
+
// Install/upgrade hooks in ~/.claude/settings.json (replaces legacy hooks)
|
|
58
|
+
installHooks({ silent: true });
|
|
59
|
+
await hookServer.start();
|
|
60
|
+
await portalServer.start();
|
|
61
|
+
wireHookBridge();
|
|
62
|
+
wirePromptBridge();
|
|
63
|
+
wireSessionNotifications();
|
|
64
|
+
await syncSlackFromConfig();
|
|
65
|
+
wireConfigReactivity();
|
|
66
|
+
// Start relay if enabled and authenticated
|
|
67
|
+
await syncRelayFromConfig();
|
|
68
|
+
wireRelayConfigReactivity();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Tear down everything cleanly.
|
|
72
|
+
*/
|
|
73
|
+
export async function stopConnectors() {
|
|
74
|
+
if (!started)
|
|
75
|
+
return;
|
|
76
|
+
started = false;
|
|
77
|
+
if (debounceTimer) {
|
|
78
|
+
clearTimeout(debounceTimer);
|
|
79
|
+
debounceTimer = null;
|
|
80
|
+
}
|
|
81
|
+
if (relayDebounceTimer) {
|
|
82
|
+
clearTimeout(relayDebounceTimer);
|
|
83
|
+
relayDebounceTimer = null;
|
|
84
|
+
}
|
|
85
|
+
if (unsubSettings) {
|
|
86
|
+
unsubSettings();
|
|
87
|
+
unsubSettings = null;
|
|
88
|
+
}
|
|
89
|
+
if (unsubRelaySettings) {
|
|
90
|
+
unsubRelaySettings();
|
|
91
|
+
unsubRelaySettings = null;
|
|
92
|
+
}
|
|
93
|
+
if (unsubSessions) {
|
|
94
|
+
unsubSessions();
|
|
95
|
+
unsubSessions = null;
|
|
96
|
+
}
|
|
97
|
+
prevStatuses.clear();
|
|
98
|
+
lastPostedResponse.clear();
|
|
99
|
+
lastPostTime.clear();
|
|
100
|
+
lastSlackFields = null;
|
|
101
|
+
await relayClient.stop();
|
|
102
|
+
await portalServer.stop();
|
|
103
|
+
await connectorManager.disconnectAll();
|
|
104
|
+
publishConnectorStatuses();
|
|
105
|
+
await hookServer.stop();
|
|
106
|
+
}
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Internal wiring
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
/**
|
|
111
|
+
* Resolve a hook-originated session ID (Claude Code's session_id) to our
|
|
112
|
+
* internal AgentSession.id by matching on cwd. Falls back to the hook
|
|
113
|
+
* session ID as-is when no match is found.
|
|
114
|
+
*/
|
|
115
|
+
function resolveInternalSessionId(hookSessionId, cwd) {
|
|
116
|
+
if (!cwd)
|
|
117
|
+
return hookSessionId;
|
|
118
|
+
const match = appStore.getState().sessions.find((s) => s.cwd === cwd);
|
|
119
|
+
return match ? match.id : hookSessionId;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check whether the hook event originated from an agent session managed by
|
|
123
|
+
* this app (matched by cwd). External/standalone Claude Code instances
|
|
124
|
+
* should NOT have their events forwarded to Slack.
|
|
125
|
+
*/
|
|
126
|
+
function isInternalSession(cwd) {
|
|
127
|
+
if (!cwd)
|
|
128
|
+
return false;
|
|
129
|
+
return appStore.getState().sessions.some((s) => s.cwd === cwd);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Bridge HookServer events → ConnectorManager
|
|
133
|
+
*/
|
|
134
|
+
function wireHookBridge() {
|
|
135
|
+
// permission_request: async — await connector reply then call socket reply callback
|
|
136
|
+
// If no connectors are connected or the agent isn't managed by this app,
|
|
137
|
+
// reply with "ack" so the hook falls through instead of denying.
|
|
138
|
+
hookServer.on("permission_request", (payload, reply) => {
|
|
139
|
+
const cwd = String(payload.cwd ?? "");
|
|
140
|
+
// Only forward events from agents running inside this app
|
|
141
|
+
if (!isInternalSession(cwd)) {
|
|
142
|
+
reply({ type: "ack", payload: {} });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const connected = connectorManager.getAll().filter((c) => c.status === "connected");
|
|
146
|
+
if (connected.length === 0) {
|
|
147
|
+
// No connectors to ask — let hook fall through to default behavior
|
|
148
|
+
reply({ type: "ack", payload: {} });
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const sessionId = resolveInternalSessionId(String(payload.sessionId ?? ""), cwd);
|
|
152
|
+
// Show blue "waiting_permission" badge while awaiting connector reply.
|
|
153
|
+
// Set status first, then arm the guard so the driver's 1s poll can't
|
|
154
|
+
// overwrite it with "running". The guard auto-clears if the agent
|
|
155
|
+
// transitions to waiting_input/exited (self-healing).
|
|
156
|
+
appStore.getState().updateSessionStatus(sessionId, "waiting_permission");
|
|
157
|
+
setPermissionPending(sessionId);
|
|
158
|
+
(async () => {
|
|
159
|
+
try {
|
|
160
|
+
const result = await connectorManager.requestPermission({
|
|
161
|
+
sessionId,
|
|
162
|
+
toolName: String(payload.toolName ?? ""),
|
|
163
|
+
toolInput: payload.toolInput ?? {},
|
|
164
|
+
cwd,
|
|
165
|
+
});
|
|
166
|
+
reply({
|
|
167
|
+
type: "permission_reply",
|
|
168
|
+
payload: { allowed: result.allowed, message: result.message },
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
reply({
|
|
173
|
+
type: "permission_reply",
|
|
174
|
+
payload: { allowed: false, message: "Connector error" },
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
clearPermissionPending(sessionId);
|
|
179
|
+
appStore.getState().updateSessionStatus(sessionId, "running");
|
|
180
|
+
}
|
|
181
|
+
})();
|
|
182
|
+
});
|
|
183
|
+
// post_tool_use: acknowledged but not forwarded to Slack
|
|
184
|
+
// (agent responses are sent via the "notification" event instead)
|
|
185
|
+
hookServer.on("post_tool_use", () => { });
|
|
186
|
+
// notification: from Claude Code's Notification hook.
|
|
187
|
+
// Filter out "waiting for input" noise — forward actual responses.
|
|
188
|
+
// Only forward for agents managed by this app.
|
|
189
|
+
hookServer.on("notification", (payload) => {
|
|
190
|
+
const cwd = String(payload.cwd ?? "");
|
|
191
|
+
if (!isInternalSession(cwd))
|
|
192
|
+
return;
|
|
193
|
+
const sessionId = resolveInternalSessionId(String(payload.sessionId ?? ""), cwd);
|
|
194
|
+
const message = String(payload.message ?? "");
|
|
195
|
+
if (!message)
|
|
196
|
+
return;
|
|
197
|
+
// Filter out noise — desktop notifications about waiting for input
|
|
198
|
+
const lower = message.toLowerCase();
|
|
199
|
+
if (lower.includes("waiting for") || lower.includes("needs input") || lower.includes("needs your input"))
|
|
200
|
+
return;
|
|
201
|
+
// Dedup: skip if we just posted this exact content via wireSessionNotifications
|
|
202
|
+
if (message === lastPostedResponse.get(sessionId)) {
|
|
203
|
+
const lastTime = lastPostTime.get(sessionId) ?? 0;
|
|
204
|
+
if (Date.now() - lastTime < DEDUP_WINDOW_MS) {
|
|
205
|
+
debugLog(`dedup: skipping hook notification for ${sessionId} (same as recent post)`);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
lastPostedResponse.set(sessionId, message);
|
|
210
|
+
lastPostTime.set(sessionId, Date.now());
|
|
211
|
+
connectorManager
|
|
212
|
+
.postNotification({
|
|
213
|
+
sessionId,
|
|
214
|
+
type: "response",
|
|
215
|
+
message,
|
|
216
|
+
cwd,
|
|
217
|
+
})
|
|
218
|
+
.catch((err) => {
|
|
219
|
+
debugLog(`hook notification post failed for ${sessionId}:`, String(err));
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
// stop: session stopped notification (only for managed agents)
|
|
223
|
+
hookServer.on("stop", (payload) => {
|
|
224
|
+
const cwd = String(payload.cwd ?? "");
|
|
225
|
+
if (!isInternalSession(cwd))
|
|
226
|
+
return;
|
|
227
|
+
const sessionId = resolveInternalSessionId(String(payload.sessionId ?? ""), cwd);
|
|
228
|
+
connectorManager
|
|
229
|
+
.postNotification({
|
|
230
|
+
sessionId,
|
|
231
|
+
type: "stopped",
|
|
232
|
+
message: `Session exited (code ${payload.exitCode ?? "?"})`,
|
|
233
|
+
cwd,
|
|
234
|
+
})
|
|
235
|
+
.catch((err) => {
|
|
236
|
+
debugLog(`stop notification failed for ${sessionId}:`, String(err));
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Route inbound Slack messages to the correct agent's PTY input.
|
|
242
|
+
* If a sessionId is provided (thread-routed), target that session directly.
|
|
243
|
+
* Otherwise fall back to the active session.
|
|
244
|
+
*/
|
|
245
|
+
function wirePromptBridge() {
|
|
246
|
+
connectorManager.on("prompt", (text, sessionId) => {
|
|
247
|
+
let session = sessionId ? getSessionInstance(sessionId) : null;
|
|
248
|
+
if (!session) {
|
|
249
|
+
session = appStore.getState().getActiveSession();
|
|
250
|
+
}
|
|
251
|
+
if (session) {
|
|
252
|
+
// Write text first, then send Enter as a separate event after a short
|
|
253
|
+
// delay so the agent's input handler can commit the text before submission.
|
|
254
|
+
session.write(text);
|
|
255
|
+
setTimeout(() => session.write("\r"), 100);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Extract only the agent's latest response.
|
|
261
|
+
* First tries the viewport content (from the session instance, already processed by xterm).
|
|
262
|
+
* Falls back to the full scrollback buffer when the prompt scrolled off-screen.
|
|
263
|
+
*/
|
|
264
|
+
function extractLatestResponse(sessionId) {
|
|
265
|
+
const session = getSessionInstance(sessionId);
|
|
266
|
+
if (!session)
|
|
267
|
+
return null;
|
|
268
|
+
// Primary: use viewport content from the session (reliable — already flushed by xterm)
|
|
269
|
+
const content = session.getContent();
|
|
270
|
+
if (content && content.length > 0) {
|
|
271
|
+
const viewportLines = content.map((line) => line.map((span) => span.text).join("").trimEnd());
|
|
272
|
+
const result = extractFromLines(viewportLines);
|
|
273
|
+
if (result)
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
// Fallback: read scrollback for long responses where prompt scrolled off viewport
|
|
277
|
+
return extractFromLines(session.getPlainText(500));
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Find the last user prompt (❯ with text), take lines after it,
|
|
281
|
+
* and strip terminal chrome / hook output.
|
|
282
|
+
*/
|
|
283
|
+
function extractFromLines(allLines) {
|
|
284
|
+
// Find the last user prompt line — several prompt styles:
|
|
285
|
+
// "❯ sometext", "$ sometext", or Claude Code's "human>" / "H:"
|
|
286
|
+
// NOTE: ">" is intentionally excluded — it matches Markdown blockquotes
|
|
287
|
+
// (`> quoted text`) which appear in agent responses, causing truncation.
|
|
288
|
+
let promptIdx = -1;
|
|
289
|
+
for (let i = allLines.length - 1; i >= 0; i--) {
|
|
290
|
+
const l = allLines[i];
|
|
291
|
+
// Match "❯ sometext" or "$ sometext" but not bare prompts
|
|
292
|
+
if (/^[❯$]\s+\S/.test(l)) {
|
|
293
|
+
promptIdx = i;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (promptIdx < 0)
|
|
298
|
+
return null;
|
|
299
|
+
// Take lines after the prompt
|
|
300
|
+
const after = allLines.slice(promptIdx + 1);
|
|
301
|
+
// Filter out terminal chrome and noise
|
|
302
|
+
const cleaned = after.filter((l) => {
|
|
303
|
+
if (!l)
|
|
304
|
+
return false;
|
|
305
|
+
// Dividers (solid lines of dashes, equals, etc.)
|
|
306
|
+
if (/^[─━═\-]+$/.test(l))
|
|
307
|
+
return false;
|
|
308
|
+
// Box drawing borders
|
|
309
|
+
if (/^[╭╰╮╯│┌└┐┘├┤┬┴┼]/.test(l))
|
|
310
|
+
return false;
|
|
311
|
+
if (/[╭╰╮╯│┌└┐┘├┤┬┴┼]$/.test(l.trimEnd()))
|
|
312
|
+
return false;
|
|
313
|
+
// Empty prompt line (excludes ">" — see prompt-detection note above)
|
|
314
|
+
if (/^[❯$]\s*$/.test(l))
|
|
315
|
+
return false;
|
|
316
|
+
// Hook output lines
|
|
317
|
+
if (/^\s*⏺\s+(Ran|Running|Read|Edit|Write|Bash|Glob|Grep|Task)\b/.test(l))
|
|
318
|
+
return false;
|
|
319
|
+
if (/^\s*[⎿]\s/.test(l))
|
|
320
|
+
return false;
|
|
321
|
+
if (/hook error/i.test(l))
|
|
322
|
+
return false;
|
|
323
|
+
// Claude Code status/chrome lines
|
|
324
|
+
if (/\?\s+for shortcuts/i.test(l))
|
|
325
|
+
return false;
|
|
326
|
+
if (/\/ide\s+for\s/i.test(l))
|
|
327
|
+
return false;
|
|
328
|
+
if (/\/help/i.test(l) && /shortcuts|commands/i.test(l))
|
|
329
|
+
return false;
|
|
330
|
+
// Update/install notices
|
|
331
|
+
if (/update available/i.test(l))
|
|
332
|
+
return false;
|
|
333
|
+
if (/npm install -g/i.test(l))
|
|
334
|
+
return false;
|
|
335
|
+
if (/npm update/i.test(l))
|
|
336
|
+
return false;
|
|
337
|
+
// Cost / token stats bar
|
|
338
|
+
if (/^\s*\$[\d.]+\s+(cost|total)/i.test(l))
|
|
339
|
+
return false;
|
|
340
|
+
if (/tokens?[:\s]+[\d,]+/i.test(l) && /cost|input|output/i.test(l))
|
|
341
|
+
return false;
|
|
342
|
+
// Model name on its own line
|
|
343
|
+
if (/^\s*claude-/i.test(l) && l.trim().length < 80)
|
|
344
|
+
return false;
|
|
345
|
+
// "Press Enter" / "Esc to cancel" prompts
|
|
346
|
+
if (/^\s*(Press|Esc\s)/i.test(l))
|
|
347
|
+
return false;
|
|
348
|
+
// Compact mode tip, auto-update notice
|
|
349
|
+
if (/^\s*tip:/i.test(l))
|
|
350
|
+
return false;
|
|
351
|
+
if (/^\s*Run\s.*to update/i.test(l))
|
|
352
|
+
return false;
|
|
353
|
+
// Progress bars / spinners
|
|
354
|
+
if (/^\s*[⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏⣾⣽⣻⢿⡿⣟⣯⣷]\s/.test(l))
|
|
355
|
+
return false;
|
|
356
|
+
// ANSI escape-only lines (after stripping — but these appear as empty)
|
|
357
|
+
if (l.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, "").trim() === "")
|
|
358
|
+
return false;
|
|
359
|
+
return true;
|
|
360
|
+
});
|
|
361
|
+
const text = cleaned.join("\n").trim();
|
|
362
|
+
return text || null;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Subscribe to appStore to detect session status transitions
|
|
366
|
+
* and post notifications to connectors.
|
|
367
|
+
*/
|
|
368
|
+
function wireSessionNotifications() {
|
|
369
|
+
// Initialize tracking from current state
|
|
370
|
+
for (const s of appStore.getState().sessions) {
|
|
371
|
+
prevStatuses.set(s.id, s.status);
|
|
372
|
+
}
|
|
373
|
+
unsubSessions = appStore.subscribe((state) => {
|
|
374
|
+
const currentIds = new Set();
|
|
375
|
+
for (const s of state.sessions) {
|
|
376
|
+
currentIds.add(s.id);
|
|
377
|
+
const prev = prevStatuses.get(s.id);
|
|
378
|
+
if (prev !== s.status) {
|
|
379
|
+
prevStatuses.set(s.id, s.status);
|
|
380
|
+
// Detect meaningful transitions
|
|
381
|
+
if (prev === "starting" && s.status === "running") {
|
|
382
|
+
connectorManager
|
|
383
|
+
.postNotification({
|
|
384
|
+
sessionId: s.id,
|
|
385
|
+
type: "started",
|
|
386
|
+
message: `Session started (${s.displayName})`,
|
|
387
|
+
cwd: s.cwd,
|
|
388
|
+
})
|
|
389
|
+
.catch((err) => {
|
|
390
|
+
debugLog(`started notification failed for ${s.id}:`, String(err));
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
else if (s.status === "running" &&
|
|
394
|
+
(prev === "waiting_input" || prev === "idle")) {
|
|
395
|
+
// Agent started working — emit typing notification for placeholder
|
|
396
|
+
connectorManager
|
|
397
|
+
.postNotification({
|
|
398
|
+
sessionId: s.id,
|
|
399
|
+
type: "typing",
|
|
400
|
+
message: "Thinking...",
|
|
401
|
+
cwd: s.cwd,
|
|
402
|
+
})
|
|
403
|
+
.catch((err) => {
|
|
404
|
+
debugLog(`typing notification failed for ${s.id}:`, String(err));
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
else if (s.status === "waiting_input" || s.status === "exited") {
|
|
408
|
+
// Agent finished responding — extract latest response after a short
|
|
409
|
+
// delay so the ScreenBuffer's 30fps debounce can flush fresh content.
|
|
410
|
+
const sessionId = s.id;
|
|
411
|
+
const cwd = s.cwd;
|
|
412
|
+
const displayName = s.displayName;
|
|
413
|
+
const isExited = s.status === "exited";
|
|
414
|
+
setTimeout(() => {
|
|
415
|
+
const response = extractLatestResponse(sessionId);
|
|
416
|
+
if (response) {
|
|
417
|
+
// Dedup: skip if same content posted recently (hook or prior transition)
|
|
418
|
+
const lastContent = lastPostedResponse.get(sessionId);
|
|
419
|
+
const lastTime = lastPostTime.get(sessionId) ?? 0;
|
|
420
|
+
if (response === lastContent && Date.now() - lastTime < DEDUP_WINDOW_MS) {
|
|
421
|
+
debugLog(`dedup: skipping status-transition post for ${sessionId}`);
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
lastPostedResponse.set(sessionId, response);
|
|
425
|
+
lastPostTime.set(sessionId, Date.now());
|
|
426
|
+
connectorManager
|
|
427
|
+
.postNotification({
|
|
428
|
+
sessionId,
|
|
429
|
+
type: "response",
|
|
430
|
+
message: response,
|
|
431
|
+
cwd,
|
|
432
|
+
})
|
|
433
|
+
.catch((err) => {
|
|
434
|
+
debugLog(`response post failed for ${sessionId}:`, String(err));
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
debugLog(`no extractable response for ${sessionId} after transition`);
|
|
440
|
+
}
|
|
441
|
+
if (isExited) {
|
|
442
|
+
connectorManager
|
|
443
|
+
.postNotification({
|
|
444
|
+
sessionId,
|
|
445
|
+
type: "stopped",
|
|
446
|
+
message: `Session exited (${displayName})`,
|
|
447
|
+
cwd,
|
|
448
|
+
})
|
|
449
|
+
.catch((err) => {
|
|
450
|
+
debugLog(`exit notification failed for ${sessionId}:`, String(err));
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}, 150);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
// Clean up map entries for removed sessions
|
|
458
|
+
for (const id of prevStatuses.keys()) {
|
|
459
|
+
if (!currentIds.has(id)) {
|
|
460
|
+
prevStatuses.delete(id);
|
|
461
|
+
lastPostedResponse.delete(id);
|
|
462
|
+
lastPostTime.delete(id);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Sync SlackAdapter from current settings config.
|
|
469
|
+
* Tears down existing adapter if present, then creates a new one if config is valid.
|
|
470
|
+
*/
|
|
471
|
+
async function syncSlackFromConfig() {
|
|
472
|
+
const { config } = settingsStore.getState();
|
|
473
|
+
const slack = config.connectors.slack;
|
|
474
|
+
// Tear down existing adapter if registered
|
|
475
|
+
const existing = connectorManager.get("slack");
|
|
476
|
+
if (existing) {
|
|
477
|
+
try {
|
|
478
|
+
await existing.disconnect();
|
|
479
|
+
}
|
|
480
|
+
catch {
|
|
481
|
+
// Best effort
|
|
482
|
+
}
|
|
483
|
+
connectorManager.unregister("slack");
|
|
484
|
+
}
|
|
485
|
+
// Register and connect if enabled with required fields
|
|
486
|
+
if (slack.enabled && slack.botToken && slack.channelId) {
|
|
487
|
+
const adapterConfig = {
|
|
488
|
+
botToken: slack.botToken,
|
|
489
|
+
channelId: slack.channelId,
|
|
490
|
+
appToken: slack.appToken,
|
|
491
|
+
pollInterval: slack.pollInterval,
|
|
492
|
+
timeout: slack.timeout,
|
|
493
|
+
};
|
|
494
|
+
const adapter = new SlackAdapter(adapterConfig);
|
|
495
|
+
connectorManager.register(adapter);
|
|
496
|
+
try {
|
|
497
|
+
await adapter.connect();
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// Error status is set inside the adapter
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
publishConnectorStatuses();
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Watch settingsStore for Slack config changes.
|
|
507
|
+
* Debounced (1s) with shallow comparison and mutex to prevent reconnect storms.
|
|
508
|
+
*/
|
|
509
|
+
function wireConfigReactivity() {
|
|
510
|
+
// Snapshot initial state
|
|
511
|
+
lastSlackFields = serializeSlackConfig();
|
|
512
|
+
unsubSettings = settingsStore.subscribe(() => {
|
|
513
|
+
const current = serializeSlackConfig();
|
|
514
|
+
// Skip no-ops
|
|
515
|
+
if (current === lastSlackFields)
|
|
516
|
+
return;
|
|
517
|
+
lastSlackFields = current;
|
|
518
|
+
// Debounce to avoid reconnect storms while typing tokens
|
|
519
|
+
if (debounceTimer)
|
|
520
|
+
clearTimeout(debounceTimer);
|
|
521
|
+
debounceTimer = setTimeout(() => {
|
|
522
|
+
debounceTimer = null;
|
|
523
|
+
// Mutex to prevent concurrent syncs from interleaving
|
|
524
|
+
if (syncInProgress)
|
|
525
|
+
return;
|
|
526
|
+
syncInProgress = true;
|
|
527
|
+
syncSlackFromConfig().finally(() => {
|
|
528
|
+
syncInProgress = false;
|
|
529
|
+
});
|
|
530
|
+
}, 1000);
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
// ---------------------------------------------------------------------------
|
|
534
|
+
// Relay client lifecycle
|
|
535
|
+
// ---------------------------------------------------------------------------
|
|
536
|
+
let relayDebounceTimer = null;
|
|
537
|
+
let relaySyncInProgress = false;
|
|
538
|
+
let lastRelayFields = null;
|
|
539
|
+
let unsubRelaySettings = null;
|
|
540
|
+
async function syncRelayFromConfig() {
|
|
541
|
+
const { config } = settingsStore.getState();
|
|
542
|
+
const relay = config.relay;
|
|
543
|
+
setRelayLoggedIn(!!relay.authToken);
|
|
544
|
+
// Stop relay if disabled or no token
|
|
545
|
+
if (!relay.enabled || !relay.authToken) {
|
|
546
|
+
await relayClient.stop();
|
|
547
|
+
return;
|
|
548
|
+
}
|
|
549
|
+
// Start if auto-connect is on
|
|
550
|
+
if (relay.autoConnect) {
|
|
551
|
+
await relayClient.start();
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
function wireRelayConfigReactivity() {
|
|
555
|
+
lastRelayFields = serializeRelayConfig();
|
|
556
|
+
unsubRelaySettings = settingsStore.subscribe(() => {
|
|
557
|
+
const current = serializeRelayConfig();
|
|
558
|
+
if (current === lastRelayFields)
|
|
559
|
+
return;
|
|
560
|
+
lastRelayFields = current;
|
|
561
|
+
if (relayDebounceTimer)
|
|
562
|
+
clearTimeout(relayDebounceTimer);
|
|
563
|
+
relayDebounceTimer = setTimeout(() => {
|
|
564
|
+
relayDebounceTimer = null;
|
|
565
|
+
if (relaySyncInProgress)
|
|
566
|
+
return;
|
|
567
|
+
relaySyncInProgress = true;
|
|
568
|
+
syncRelayFromConfig().finally(() => {
|
|
569
|
+
relaySyncInProgress = false;
|
|
570
|
+
});
|
|
571
|
+
}, 1000);
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
function serializeRelayConfig() {
|
|
575
|
+
const { config } = settingsStore.getState();
|
|
576
|
+
const r = config.relay;
|
|
577
|
+
return JSON.stringify([r.enabled, r.authToken, r.autoConnect]);
|
|
578
|
+
}
|
|
579
|
+
function serializeSlackConfig() {
|
|
580
|
+
const { config } = settingsStore.getState();
|
|
581
|
+
const s = config.connectors.slack;
|
|
582
|
+
return JSON.stringify([
|
|
583
|
+
s.enabled,
|
|
584
|
+
s.botToken,
|
|
585
|
+
s.appToken,
|
|
586
|
+
s.channelId,
|
|
587
|
+
s.pollInterval,
|
|
588
|
+
s.timeout,
|
|
589
|
+
]);
|
|
590
|
+
}
|
|
591
|
+
//# sourceMappingURL=connector-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-store.js","sourceRoot":"","sources":["../../src/store/connector-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-store.d.ts","sourceRoot":"","sources":["../../src/store/portal-store.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,eAAO,MAAM,WAAW,iDAErB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-store.js","sourceRoot":"","sources":["../../src/store/portal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAM9C,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,EAAe,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,mBAAmB,EAAE,IAAI,GAAG,EAAU;CACvC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AppConfig } from "../config/config.js";
|
|
2
|
+
export interface SettingsState {
|
|
3
|
+
config: AppConfig;
|
|
4
|
+
loaded: boolean;
|
|
5
|
+
load: () => void;
|
|
6
|
+
save: () => void;
|
|
7
|
+
update: (patch: Partial<AppConfig>) => void;
|
|
8
|
+
updateConnector: (name: "slack" | "discord" | "telegram", patch: Record<string, unknown>) => void;
|
|
9
|
+
updateUi: (patch: Record<string, unknown>) => void;
|
|
10
|
+
updateRelay: (patch: Record<string, unknown>) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const settingsStore: import("zustand/vanilla").StoreApi<SettingsState>;
|
|
13
|
+
//# sourceMappingURL=settings-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-store.d.ts","sourceRoot":"","sources":["../../src/store/settings-store.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAEhB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAC5C,eAAe,EAAE,CACf,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,EACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,IAAI,CAAC;IACV,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACnD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACvD;AAED,eAAO,MAAM,aAAa,mDA6DvB,CAAC"}
|