@blario/react-native 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +377 -2
- package/dist/BlarProvider.d.ts +74 -0
- package/dist/actions/batched.d.ts +1 -0
- package/dist/actions/click.d.ts +4 -0
- package/dist/actions/commit-watch.d.ts +15 -0
- package/dist/actions/events.d.ts +35 -0
- package/dist/actions/executor.d.ts +29 -0
- package/dist/actions/highlight.d.ts +4 -0
- package/dist/actions/interaction-guards.d.ts +9 -0
- package/dist/actions/landing.d.ts +11 -0
- package/dist/actions/navigation-driver.d.ts +22 -0
- package/dist/actions/parse.d.ts +4 -0
- package/dist/actions/result.d.ts +4 -0
- package/dist/actions/scrolling.d.ts +12 -0
- package/dist/actions/services.d.ts +20 -0
- package/dist/actions/settle.d.ts +13 -0
- package/dist/actions/switch.d.ts +3 -0
- package/dist/actions/target.d.ts +25 -0
- package/dist/actions/text-input.d.ts +9 -0
- package/dist/actions/types.d.ts +59 -0
- package/dist/agent/batch-commands.d.ts +17 -0
- package/dist/agent/compose.d.ts +23 -0
- package/dist/agent/controller.d.ts +28 -0
- package/dist/agent/frame-runner.d.ts +9 -0
- package/dist/agent/frames.d.ts +180 -0
- package/dist/agent/handlers/agent-command.d.ts +5 -0
- package/dist/agent/handlers/batch.d.ts +5 -0
- package/dist/agent/handlers/consent-screenshot.d.ts +4 -0
- package/dist/agent/handlers/context.d.ts +16 -0
- package/dist/agent/handlers/dom-state.d.ts +4 -0
- package/dist/agent/handlers/element-context.d.ts +2 -0
- package/dist/agent/handlers/screenshot.d.ts +3 -0
- package/dist/agent/handlers/text-dom.d.ts +5 -0
- package/dist/agent/stage.d.ts +13 -0
- package/dist/agent-mode/action-description.d.ts +3 -0
- package/dist/agent-mode/bubbles.d.ts +10 -0
- package/dist/agent-mode/colors.d.ts +12 -0
- package/dist/agent-mode/controller.d.ts +92 -0
- package/dist/agent-mode/cursor-follow.d.ts +12 -0
- package/dist/agent-mode/cursor.d.ts +37 -0
- package/dist/agent-mode/frames.d.ts +36 -0
- package/dist/agent-mode/haptics.d.ts +6 -0
- package/dist/agent-mode/keep-awake.d.ts +19 -0
- package/dist/agent-mode/layer-stacking.d.ts +7 -0
- package/dist/agent-mode/markdown.d.ts +19 -0
- package/dist/agent-mode/panel-geometry.d.ts +6 -0
- package/dist/agent-mode/resume.d.ts +13 -0
- package/dist/agent-mode/run-memory.d.ts +19 -0
- package/dist/agent-mode/spotlight-controller.d.ts +68 -0
- package/dist/agent-mode/spotlight.d.ts +6 -0
- package/dist/agent-mode/state.d.ts +9 -0
- package/dist/agent-mode/status.d.ts +11 -0
- package/dist/agent-mode/timers.d.ts +6 -0
- package/dist/agent-mode/ui/AgentDock.d.ts +37 -0
- package/dist/agent-mode/ui/AgentLayer.d.ts +19 -0
- package/dist/agent-mode/ui/AgentLayerHost.d.ts +8 -0
- package/dist/agent-mode/ui/AgentPanel.d.ts +19 -0
- package/dist/agent-mode/ui/AgentTap.d.ts +10 -0
- package/dist/agent-mode/ui/MarkdownText.d.ts +8 -0
- package/dist/agent-mode/ui/MessageBubbles.d.ts +9 -0
- package/dist/agent-mode/ui/PendingOverlay.d.ts +5 -0
- package/dist/agent-mode/ui/SpotlightLayer.d.ts +9 -0
- package/dist/agent-mode/ui/SpotlightOverlay.d.ts +7 -0
- package/dist/agent-mode/ui/StatusCard.d.ts +14 -0
- package/dist/agent-mode/ui/TargetPulse.d.ts +9 -0
- package/dist/agent-mode/ui/TouchShield.d.ts +5 -0
- package/dist/agent-mode/ui/WarningIcon.d.ts +6 -0
- package/dist/agent-mode/ui/full-window-overlay.d.ts +5 -0
- package/dist/agent-mode/ui/layer-host.d.ts +2 -0
- package/dist/backend/api-client.d.ts +38 -0
- package/dist/backend/api-types.d.ts +25 -0
- package/dist/backend/app-info.d.ts +14 -0
- package/dist/backend/backend-transport.d.ts +70 -0
- package/dist/backend/backoff.d.ts +9 -0
- package/dist/backend/base64.d.ts +1 -0
- package/dist/backend/errors.d.ts +17 -0
- package/dist/backend/foreground.d.ts +1 -0
- package/dist/backend/health.d.ts +17 -0
- package/dist/backend/identity-proof.d.ts +23 -0
- package/dist/backend/identity.d.ts +27 -0
- package/dist/backend/message-metadata.d.ts +19 -0
- package/dist/backend/presence.d.ts +20 -0
- package/dist/backend/response-cache.d.ts +9 -0
- package/dist/backend/session-change.d.ts +2 -0
- package/dist/backend/session-socket.d.ts +49 -0
- package/dist/backend/session.d.ts +39 -0
- package/dist/backend/socket-url.d.ts +9 -0
- package/dist/backend/storage.d.ts +13 -0
- package/dist/backend/tab-id.d.ts +2 -0
- package/dist/blar.d.ts +37 -0
- package/dist/chat/ChatLayer.d.ts +29 -0
- package/dist/chat/ChatSheet.d.ts +11 -0
- package/dist/chat/ChatView.d.ts +19 -0
- package/dist/chat/Launcher.d.ts +14 -0
- package/dist/chat/bridge.d.ts +22 -0
- package/dist/chat/chat-coordinator.d.ts +57 -0
- package/dist/chat/chat-state.d.ts +20 -0
- package/dist/chat/navigation.d.ts +5 -0
- package/dist/chat/options.d.ts +22 -0
- package/dist/chat/webview.d.ts +10 -0
- package/dist/chat/widget-bundle.generated.d.ts +2 -0
- package/dist/chat/widget-shell.d.ts +24 -0
- package/dist/confirmation/port.d.ts +12 -0
- package/dist/fiber/locate.d.ts +7 -0
- package/dist/fiber/narrow.d.ts +5 -0
- package/dist/fiber/reader.d.ts +10 -0
- package/dist/fiber/text.d.ts +4 -0
- package/dist/fiber/types.d.ts +21 -0
- package/dist/host/border-radius.d.ts +1 -0
- package/dist/host/instance.d.ts +9 -0
- package/dist/host/measure.d.ts +3 -0
- package/dist/host/rect.d.ts +22 -0
- package/dist/host/visible-area.d.ts +2 -0
- package/dist/index.d.ts +10 -0
- package/dist/nudge/NudgeBubble.d.ts +15 -0
- package/dist/nudge/nudge.d.ts +23 -0
- package/dist/optional/expo-haptics.d.ts +1 -0
- package/dist/optional/expo-keep-awake.d.ts +1 -0
- package/dist/optional/react-native-haptic-feedback.d.ts +1 -0
- package/dist/optional/react-native-keep-awake.d.ts +1 -0
- package/dist/overlay/AgentOverlay.d.ts +5 -0
- package/dist/screenshot/capture-backend.d.ts +6 -0
- package/dist/screenshot/screenshotter.d.ts +18 -0
- package/dist/screenshot/skia.d.ts +35 -0
- package/dist/screenshot/view-shot.d.ts +2 -0
- package/dist/snapshot/capture.d.ts +36 -0
- package/dist/snapshot/classify.d.ts +11 -0
- package/dist/snapshot/collect.d.ts +27 -0
- package/dist/snapshot/element-context.d.ts +9 -0
- package/dist/snapshot/icon.d.ts +2 -0
- package/dist/snapshot/kinds.d.ts +3 -0
- package/dist/snapshot/modals.d.ts +2 -0
- package/dist/snapshot/navigation.d.ts +14 -0
- package/dist/snapshot/ordering.d.ts +2 -0
- package/dist/snapshot/properties.d.ts +14 -0
- package/dist/snapshot/registry.d.ts +16 -0
- package/dist/snapshot/render.d.ts +10 -0
- package/dist/snapshot/route-summary.d.ts +3 -0
- package/dist/snapshot/scroll.d.ts +15 -0
- package/dist/snapshot/text-layout.d.ts +8 -0
- package/dist/snapshot/view.d.ts +30 -0
- package/dist/snapshot/visibility.d.ts +17 -0
- package/dist/snapshot/wrappers.d.ts +11 -0
- package/dist/telemetry/SdkErrorBoundary.d.ts +15 -0
- package/dist/telemetry/build-info.generated.d.ts +2 -0
- package/dist/telemetry/envelope.d.ts +53 -0
- package/dist/telemetry/reporter.d.ts +33 -0
- package/dist/telemetry/scrub.d.ts +1 -0
- package/dist/telemetry/sdk-reporter.d.ts +5 -0
- package/dist/transport/connection-options.d.ts +18 -0
- package/dist/transport/relay-transport.d.ts +17 -0
- package/dist/transport/transport.d.ts +7 -0
- package/dist/ui/insets.d.ts +8 -0
- package/dist/ui/strings.d.ts +33 -0
- package/dist/ui/useInsets.d.ts +2 -0
- package/dist/version.d.ts +1 -0
- package/package.json +85 -4
- package/src/BlarProvider.tsx +462 -0
- package/src/actions/batched.ts +16 -0
- package/src/actions/click.ts +54 -0
- package/src/actions/commit-watch.ts +86 -0
- package/src/actions/events.ts +58 -0
- package/src/actions/executor.ts +147 -0
- package/src/actions/highlight.ts +13 -0
- package/src/actions/interaction-guards.ts +44 -0
- package/src/actions/landing.ts +26 -0
- package/src/actions/navigation-driver.ts +131 -0
- package/src/actions/parse.ts +82 -0
- package/src/actions/result.ts +14 -0
- package/src/actions/scrolling.ts +112 -0
- package/src/actions/services.ts +24 -0
- package/src/actions/settle.ts +40 -0
- package/src/actions/switch.ts +31 -0
- package/src/actions/target.ts +77 -0
- package/src/actions/text-input.ts +82 -0
- package/src/actions/types.ts +52 -0
- package/src/agent/batch-commands.ts +33 -0
- package/src/agent/compose.ts +67 -0
- package/src/agent/controller.ts +106 -0
- package/src/agent/frame-runner.ts +27 -0
- package/src/agent/frames.ts +193 -0
- package/src/agent/handlers/agent-command.ts +74 -0
- package/src/agent/handlers/batch.ts +72 -0
- package/src/agent/handlers/consent-screenshot.ts +44 -0
- package/src/agent/handlers/context.ts +17 -0
- package/src/agent/handlers/dom-state.ts +19 -0
- package/src/agent/handlers/element-context.ts +9 -0
- package/src/agent/handlers/screenshot.ts +24 -0
- package/src/agent/handlers/text-dom.ts +17 -0
- package/src/agent/stage.ts +22 -0
- package/src/agent-mode/action-description.ts +25 -0
- package/src/agent-mode/bubbles.ts +31 -0
- package/src/agent-mode/colors.ts +40 -0
- package/src/agent-mode/controller.ts +459 -0
- package/src/agent-mode/cursor-follow.ts +43 -0
- package/src/agent-mode/cursor.ts +118 -0
- package/src/agent-mode/frames.ts +70 -0
- package/src/agent-mode/haptics.ts +49 -0
- package/src/agent-mode/keep-awake.ts +107 -0
- package/src/agent-mode/layer-stacking.ts +16 -0
- package/src/agent-mode/markdown.ts +84 -0
- package/src/agent-mode/panel-geometry.ts +27 -0
- package/src/agent-mode/resume.ts +16 -0
- package/src/agent-mode/run-memory.ts +65 -0
- package/src/agent-mode/spotlight-controller.ts +255 -0
- package/src/agent-mode/spotlight.ts +14 -0
- package/src/agent-mode/state.ts +36 -0
- package/src/agent-mode/status.ts +13 -0
- package/src/agent-mode/timers.ts +11 -0
- package/src/agent-mode/ui/AgentDock.tsx +285 -0
- package/src/agent-mode/ui/AgentLayer.tsx +123 -0
- package/src/agent-mode/ui/AgentLayerHost.tsx +37 -0
- package/src/agent-mode/ui/AgentPanel.tsx +187 -0
- package/src/agent-mode/ui/AgentTap.tsx +190 -0
- package/src/agent-mode/ui/MarkdownText.tsx +55 -0
- package/src/agent-mode/ui/MessageBubbles.tsx +58 -0
- package/src/agent-mode/ui/PendingOverlay.tsx +32 -0
- package/src/agent-mode/ui/SpotlightLayer.tsx +60 -0
- package/src/agent-mode/ui/SpotlightOverlay.tsx +35 -0
- package/src/agent-mode/ui/StatusCard.tsx +137 -0
- package/src/agent-mode/ui/TargetPulse.tsx +74 -0
- package/src/agent-mode/ui/TouchShield.tsx +22 -0
- package/src/agent-mode/ui/WarningIcon.tsx +32 -0
- package/src/agent-mode/ui/full-window-overlay.ts +16 -0
- package/src/agent-mode/ui/layer-host.ts +11 -0
- package/src/backend/api-client.ts +210 -0
- package/src/backend/api-types.ts +56 -0
- package/src/backend/app-info.ts +40 -0
- package/src/backend/backend-transport.ts +338 -0
- package/src/backend/backoff.ts +16 -0
- package/src/backend/base64.ts +25 -0
- package/src/backend/errors.ts +32 -0
- package/src/backend/foreground.ts +10 -0
- package/src/backend/health.ts +64 -0
- package/src/backend/identity-proof.ts +151 -0
- package/src/backend/identity.ts +31 -0
- package/src/backend/message-metadata.ts +28 -0
- package/src/backend/presence.ts +95 -0
- package/src/backend/response-cache.ts +45 -0
- package/src/backend/session-change.ts +14 -0
- package/src/backend/session-socket.ts +292 -0
- package/src/backend/session.ts +188 -0
- package/src/backend/socket-url.ts +25 -0
- package/src/backend/storage.ts +49 -0
- package/src/backend/tab-id.ts +24 -0
- package/src/blar.ts +100 -0
- package/src/chat/ChatLayer.tsx +109 -0
- package/src/chat/ChatSheet.tsx +82 -0
- package/src/chat/ChatView.tsx +127 -0
- package/src/chat/Launcher.tsx +72 -0
- package/src/chat/bridge.ts +56 -0
- package/src/chat/chat-coordinator.ts +189 -0
- package/src/chat/chat-state.ts +35 -0
- package/src/chat/navigation.ts +15 -0
- package/src/chat/options.ts +39 -0
- package/src/chat/webview.ts +23 -0
- package/src/chat/widget-bundle.generated.ts +2 -0
- package/src/chat/widget-shell.ts +170 -0
- package/src/confirmation/port.ts +15 -0
- package/src/fiber/locate.ts +41 -0
- package/src/fiber/narrow.ts +15 -0
- package/src/fiber/reader.ts +98 -0
- package/src/fiber/text.ts +52 -0
- package/src/fiber/types.ts +24 -0
- package/src/host/border-radius.ts +11 -0
- package/src/host/instance.ts +30 -0
- package/src/host/measure.ts +25 -0
- package/src/host/rect.ts +45 -0
- package/src/host/visible-area.ts +5 -0
- package/src/index.ts +10 -0
- package/src/nudge/NudgeBubble.tsx +117 -0
- package/src/nudge/nudge.ts +100 -0
- package/src/optional/expo-haptics.ts +11 -0
- package/src/optional/expo-keep-awake.ts +11 -0
- package/src/optional/react-native-haptic-feedback.ts +11 -0
- package/src/optional/react-native-keep-awake.ts +11 -0
- package/src/overlay/AgentOverlay.tsx +16 -0
- package/src/screenshot/capture-backend.ts +7 -0
- package/src/screenshot/screenshotter.ts +39 -0
- package/src/screenshot/skia.ts +107 -0
- package/src/screenshot/view-shot.ts +41 -0
- package/src/snapshot/capture.ts +163 -0
- package/src/snapshot/classify.ts +40 -0
- package/src/snapshot/collect.ts +136 -0
- package/src/snapshot/element-context.ts +66 -0
- package/src/snapshot/icon.ts +21 -0
- package/src/snapshot/kinds.ts +10 -0
- package/src/snapshot/modals.ts +21 -0
- package/src/snapshot/navigation.ts +47 -0
- package/src/snapshot/ordering.ts +26 -0
- package/src/snapshot/properties.ts +71 -0
- package/src/snapshot/registry.ts +33 -0
- package/src/snapshot/render.ts +140 -0
- package/src/snapshot/route-summary.ts +15 -0
- package/src/snapshot/scroll.ts +90 -0
- package/src/snapshot/text-layout.ts +59 -0
- package/src/snapshot/view.ts +87 -0
- package/src/snapshot/visibility.ts +63 -0
- package/src/snapshot/wrappers.ts +69 -0
- package/src/telemetry/SdkErrorBoundary.tsx +28 -0
- package/src/telemetry/build-info.generated.ts +2 -0
- package/src/telemetry/envelope.ts +83 -0
- package/src/telemetry/reporter.ts +170 -0
- package/src/telemetry/scrub.ts +10 -0
- package/src/telemetry/sdk-reporter.ts +37 -0
- package/src/transport/connection-options.ts +65 -0
- package/src/transport/relay-transport.ts +82 -0
- package/src/transport/transport.ts +8 -0
- package/src/ui/insets.ts +31 -0
- package/src/ui/strings.ts +102 -0
- package/src/ui/useInsets.ts +10 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type UnknownRecord } from '../fiber/narrow.ts';
|
|
2
|
+
export type AgentModeEvent = {
|
|
3
|
+
kind: 'progress';
|
|
4
|
+
message: string;
|
|
5
|
+
progressType: string | null;
|
|
6
|
+
} | {
|
|
7
|
+
kind: 'message';
|
|
8
|
+
role: string;
|
|
9
|
+
text: string;
|
|
10
|
+
waitForResponse: boolean;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'queued';
|
|
13
|
+
message: string | null;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'execution_complete';
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'acknowledged';
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'cancelled';
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'session_closed';
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'history';
|
|
24
|
+
agentModeActive: boolean;
|
|
25
|
+
intent: string | null;
|
|
26
|
+
agentStatus: string | null;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'thinking';
|
|
29
|
+
} | {
|
|
30
|
+
kind: 'thinking_stop';
|
|
31
|
+
} | {
|
|
32
|
+
kind: 'session_started';
|
|
33
|
+
sessionId: number;
|
|
34
|
+
};
|
|
35
|
+
export declare function readAgentModeEvent(frame: UnknownRecord): AgentModeEvent | null;
|
|
36
|
+
export declare function isBubbleRole(role: string): boolean;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type KeepAwakeHolder = 'ai-turn' | 'agent-run';
|
|
2
|
+
export interface KeepAwakeAdapter {
|
|
3
|
+
name: string;
|
|
4
|
+
activate: () => void;
|
|
5
|
+
deactivate: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const KEEP_AWAKE_ADAPTER: KeepAwakeAdapter | null;
|
|
8
|
+
export declare class KeepAwake {
|
|
9
|
+
private readonly adapter;
|
|
10
|
+
private readonly log?;
|
|
11
|
+
private readonly holders;
|
|
12
|
+
private reportedMissing;
|
|
13
|
+
constructor(adapter: KeepAwakeAdapter | null, log?: ((message: string) => void) | undefined);
|
|
14
|
+
hold(holder: KeepAwakeHolder): void;
|
|
15
|
+
release(holder: KeepAwakeHolder): void;
|
|
16
|
+
releaseAll(): void;
|
|
17
|
+
private invoke;
|
|
18
|
+
private reportMissing;
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type InlineKind = 'text' | 'bold' | 'italic' | 'code' | 'link';
|
|
2
|
+
export interface Inline {
|
|
3
|
+
kind: InlineKind;
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
export type MarkdownBlock = {
|
|
7
|
+
kind: 'paragraph';
|
|
8
|
+
inlines: Inline[];
|
|
9
|
+
} | {
|
|
10
|
+
kind: 'bullet';
|
|
11
|
+
inlines: Inline[];
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'numbered';
|
|
14
|
+
marker: string;
|
|
15
|
+
inlines: Inline[];
|
|
16
|
+
};
|
|
17
|
+
export declare function parseInlines(source: string): Inline[];
|
|
18
|
+
export declare function parseMarkdown(source: string): MarkdownBlock[];
|
|
19
|
+
export declare function plainText(source: string): string;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Band, Rect } from '../host/rect.ts';
|
|
2
|
+
export type PanelDock = 'bottom' | 'top';
|
|
3
|
+
export declare const STACK_GAP = 12;
|
|
4
|
+
export declare function freeBand(safeTop: number, stackTop: number, keyboardTop: number): Band;
|
|
5
|
+
export declare function messageCap(room: number): number;
|
|
6
|
+
export declare function chooseDock(target: Rect, bottomStack: Rect, topStack: Rect): PanelDock;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentModePhase } from './state.ts';
|
|
2
|
+
export interface SavedRun {
|
|
3
|
+
sessionId: number;
|
|
4
|
+
lastAgentFrameAt: number;
|
|
5
|
+
}
|
|
6
|
+
export declare const RESUME_MAX_AGE_MS = 120000;
|
|
7
|
+
export declare function isResumable(run: SavedRun, sessionId: number, now: number): boolean;
|
|
8
|
+
export declare function shouldResumeAgentMode(input: {
|
|
9
|
+
run: SavedRun | null;
|
|
10
|
+
sessionId: number;
|
|
11
|
+
phase: AgentModePhase;
|
|
12
|
+
now: number;
|
|
13
|
+
}): boolean;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { KeyValueStorage } from '../backend/storage.ts';
|
|
2
|
+
import type { SavedRun } from './resume.ts';
|
|
3
|
+
export interface RunMemory {
|
|
4
|
+
recall: () => SavedRun | null;
|
|
5
|
+
remember: (at: number) => void;
|
|
6
|
+
forget: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const NO_RUN_MEMORY: RunMemory;
|
|
9
|
+
export declare class StoredRunMemory implements RunMemory {
|
|
10
|
+
private readonly storage;
|
|
11
|
+
private readonly key;
|
|
12
|
+
private readonly getSessionId;
|
|
13
|
+
private saved;
|
|
14
|
+
constructor(storage: KeyValueStorage, key: string, getSessionId: () => number | null);
|
|
15
|
+
load(): Promise<void>;
|
|
16
|
+
recall(): SavedRun | null;
|
|
17
|
+
remember(at: number): void;
|
|
18
|
+
forget(): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { ReadingRequest } from '../actions/services.ts';
|
|
2
|
+
import type { ConfirmationOutcome, ConfirmationRequest } from '../confirmation/port.ts';
|
|
3
|
+
import type { Band, Rect } from '../host/rect.ts';
|
|
4
|
+
import { type Hole } from './spotlight.ts';
|
|
5
|
+
import type { Timers } from './timers.ts';
|
|
6
|
+
export type SpotlightSnapshot = {
|
|
7
|
+
kind: 'none';
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'reading';
|
|
10
|
+
id: number;
|
|
11
|
+
target: Rect;
|
|
12
|
+
hole: Hole;
|
|
13
|
+
text: string | null;
|
|
14
|
+
durationMs: number;
|
|
15
|
+
shown: boolean;
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'confirming';
|
|
18
|
+
id: number;
|
|
19
|
+
target: Rect | null;
|
|
20
|
+
hole: Hole | null;
|
|
21
|
+
request: ConfirmationRequest;
|
|
22
|
+
shown: boolean;
|
|
23
|
+
};
|
|
24
|
+
export interface SpotlightEnvironment {
|
|
25
|
+
timers: Timers;
|
|
26
|
+
isForeground: () => boolean;
|
|
27
|
+
stopRun: () => void;
|
|
28
|
+
alert: () => void;
|
|
29
|
+
}
|
|
30
|
+
type Listener = (snapshot: SpotlightSnapshot) => void;
|
|
31
|
+
export declare const TRACK_MS = 33;
|
|
32
|
+
export declare const CONFIRMATION_TIMEOUT_MS = 60000;
|
|
33
|
+
export declare const REVEAL_MAX_MS = 1500;
|
|
34
|
+
export declare class SpotlightController {
|
|
35
|
+
private readonly environment;
|
|
36
|
+
private snapshot;
|
|
37
|
+
private readonly listeners;
|
|
38
|
+
private finishReading;
|
|
39
|
+
private readingTimer;
|
|
40
|
+
private finishConfirmation;
|
|
41
|
+
private confirmationTimer;
|
|
42
|
+
private trackTimer;
|
|
43
|
+
private revealTimer;
|
|
44
|
+
private view;
|
|
45
|
+
private placing;
|
|
46
|
+
private shown;
|
|
47
|
+
constructor(environment: SpotlightEnvironment);
|
|
48
|
+
getSnapshot(): SpotlightSnapshot;
|
|
49
|
+
subscribe(listener: Listener): () => void;
|
|
50
|
+
read(request: ReadingRequest): Promise<boolean>;
|
|
51
|
+
confirm(request: ConfirmationRequest): Promise<ConfirmationOutcome>;
|
|
52
|
+
place(id: number, band: Band): Promise<void>;
|
|
53
|
+
approve(): void;
|
|
54
|
+
cancel(): void;
|
|
55
|
+
skip(): void;
|
|
56
|
+
backgrounded(): void;
|
|
57
|
+
clear(): void;
|
|
58
|
+
private awaitPlacement;
|
|
59
|
+
private show;
|
|
60
|
+
private settle;
|
|
61
|
+
private endConfirmation;
|
|
62
|
+
private endReading;
|
|
63
|
+
private track;
|
|
64
|
+
private stopTracking;
|
|
65
|
+
private clearTimer;
|
|
66
|
+
private publish;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type AgentModePhase = 'idle' | 'pending' | 'active' | 'exiting';
|
|
2
|
+
export declare class AgentModeStateMachine {
|
|
3
|
+
private phase;
|
|
4
|
+
getPhase(): AgentModePhase;
|
|
5
|
+
isActive(): boolean;
|
|
6
|
+
isEngaged(): boolean;
|
|
7
|
+
transition(to: AgentModePhase): boolean;
|
|
8
|
+
forceIdle(): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type AgentStatus = {
|
|
2
|
+
kind: 'thinking';
|
|
3
|
+
} | {
|
|
4
|
+
kind: 'executing';
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'text';
|
|
7
|
+
text: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const THINKING: AgentStatus;
|
|
10
|
+
export declare const EXECUTING: AgentStatus;
|
|
11
|
+
export declare function isStepMessage(message: string, progressType: string | null): boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Band, Rect } from '../../host/rect.ts';
|
|
3
|
+
import type { UiStrings } from '../../ui/strings.ts';
|
|
4
|
+
import type { SpotlightSnapshot } from '../spotlight-controller.ts';
|
|
5
|
+
export interface DockActions {
|
|
6
|
+
place: (id: number, band: Band) => void | Promise<void>;
|
|
7
|
+
approve: () => void;
|
|
8
|
+
cancel: () => void;
|
|
9
|
+
skip: () => void;
|
|
10
|
+
}
|
|
11
|
+
export interface DockStatus {
|
|
12
|
+
status: string;
|
|
13
|
+
queued: string | null;
|
|
14
|
+
stopLabel: string;
|
|
15
|
+
pulse: number;
|
|
16
|
+
cleared: boolean;
|
|
17
|
+
onStop: () => void;
|
|
18
|
+
}
|
|
19
|
+
export interface DockLayout {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
cardWidth: number;
|
|
23
|
+
bottom: number;
|
|
24
|
+
safeTop: number;
|
|
25
|
+
}
|
|
26
|
+
export interface AgentDockProps {
|
|
27
|
+
spotlight: SpotlightSnapshot;
|
|
28
|
+
actions: DockActions;
|
|
29
|
+
card: DockStatus;
|
|
30
|
+
strings: UiStrings;
|
|
31
|
+
color: string;
|
|
32
|
+
reduceMotion: boolean;
|
|
33
|
+
nudge: number;
|
|
34
|
+
layout: DockLayout;
|
|
35
|
+
onCardFrame: (frame: Rect) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare function AgentDock({ spotlight, actions, card, strings, color, reduceMotion, nudge, layout, onCardFrame }: AgentDockProps): React.JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { UiStrings } from '../../ui/strings.ts';
|
|
3
|
+
import type { AgentModeSnapshot } from '../controller.ts';
|
|
4
|
+
import type { CursorSnapshot } from '../cursor.ts';
|
|
5
|
+
import type { SpotlightSnapshot } from '../spotlight-controller.ts';
|
|
6
|
+
import { type DockActions } from './AgentDock.tsx';
|
|
7
|
+
export interface AgentLayerProps {
|
|
8
|
+
snapshot: AgentModeSnapshot;
|
|
9
|
+
strings: UiStrings;
|
|
10
|
+
color: string;
|
|
11
|
+
spotlight: SpotlightSnapshot;
|
|
12
|
+
spotlightActions: DockActions;
|
|
13
|
+
cursor: CursorSnapshot;
|
|
14
|
+
reduceMotion: boolean;
|
|
15
|
+
onCursorAttach: () => void;
|
|
16
|
+
onCursorDetach: () => void;
|
|
17
|
+
onStop: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function AgentLayer({ snapshot, strings, color, spotlight, spotlightActions, cursor, reduceMotion, onCursorAttach, onCursorDetach, onStop }: AgentLayerProps): React.JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
export interface AgentLayerHostProps {
|
|
3
|
+
visible: boolean;
|
|
4
|
+
generation: number;
|
|
5
|
+
onRequestClose: () => void;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function AgentLayerHost({ visible, generation, onRequestClose, children }: AgentLayerHostProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { UiStrings } from '../../ui/strings.ts';
|
|
3
|
+
import type { PanelDock } from '../panel-geometry.ts';
|
|
4
|
+
import type { SpotlightSnapshot } from '../spotlight-controller.ts';
|
|
5
|
+
export type ActiveSpotlight = Exclude<SpotlightSnapshot, {
|
|
6
|
+
kind: 'none';
|
|
7
|
+
}>;
|
|
8
|
+
export interface AgentPanelProps {
|
|
9
|
+
spotlight: ActiveSpotlight;
|
|
10
|
+
dock: PanelDock;
|
|
11
|
+
strings: UiStrings;
|
|
12
|
+
color: string;
|
|
13
|
+
messageMaxHeight: number;
|
|
14
|
+
onConfirm: () => void;
|
|
15
|
+
onStop: () => void;
|
|
16
|
+
onSkip: () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function panelChrome(spotlight: ActiveSpotlight): number;
|
|
19
|
+
export declare function AgentPanel({ spotlight, dock, strings, color, messageMaxHeight, onConfirm, onStop, onSkip }: AgentPanelProps): React.JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CursorSnapshot } from '../cursor.ts';
|
|
3
|
+
export interface AgentTapProps {
|
|
4
|
+
snapshot: CursorSnapshot;
|
|
5
|
+
color: string;
|
|
6
|
+
reduceMotion: boolean;
|
|
7
|
+
onAttach: () => void;
|
|
8
|
+
onDetach: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function AgentTap({ snapshot, color, reduceMotion, onAttach, onDetach }: AgentTapProps): React.JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type TextStyle } from 'react-native';
|
|
3
|
+
export interface MarkdownTextProps {
|
|
4
|
+
source: string;
|
|
5
|
+
linkColor: string;
|
|
6
|
+
textStyle?: TextStyle;
|
|
7
|
+
}
|
|
8
|
+
export declare function MarkdownText({ source, linkColor, textStyle }: MarkdownTextProps): React.JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AgentBubble } from '../bubbles.ts';
|
|
3
|
+
export interface MessageBubblesProps {
|
|
4
|
+
bubbles: AgentBubble[];
|
|
5
|
+
width: number;
|
|
6
|
+
bottom: number;
|
|
7
|
+
linkColor: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function MessageBubbles({ bubbles, width, bottom, linkColor }: MessageBubblesProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SpotlightSnapshot } from '../spotlight-controller.ts';
|
|
3
|
+
export interface SpotlightLayerProps {
|
|
4
|
+
spotlight: SpotlightSnapshot;
|
|
5
|
+
color: string;
|
|
6
|
+
reduceMotion: boolean;
|
|
7
|
+
onBackdropPress: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function SpotlightLayer({ spotlight, color, reduceMotion, onBackdropPress }: SpotlightLayerProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Hole } from '../spotlight.ts';
|
|
3
|
+
export interface SpotlightOverlayProps {
|
|
4
|
+
hole: Hole;
|
|
5
|
+
}
|
|
6
|
+
export declare const SPOTLIGHT_DIM = "rgba(0, 0, 0, 0.6)";
|
|
7
|
+
export declare function SpotlightOverlay({ hole }: SpotlightOverlayProps): React.JSX.Element;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface StatusCardProps {
|
|
3
|
+
status: string;
|
|
4
|
+
queued: string | null;
|
|
5
|
+
stopLabel: string;
|
|
6
|
+
color: string;
|
|
7
|
+
stopHidden: boolean;
|
|
8
|
+
corners: StatusCorners;
|
|
9
|
+
pulse: number;
|
|
10
|
+
cleared: boolean;
|
|
11
|
+
onStop: () => void;
|
|
12
|
+
}
|
|
13
|
+
export type StatusCorners = 'round' | 'square-top' | 'square-bottom';
|
|
14
|
+
export declare function StatusCard({ status, queued, stopLabel, color, stopHidden, corners, pulse, cleared, onStop }: StatusCardProps): React.JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Rect } from '../../host/rect.ts';
|
|
3
|
+
export interface TargetPulseProps {
|
|
4
|
+
target: Rect;
|
|
5
|
+
radius: number;
|
|
6
|
+
color: string;
|
|
7
|
+
reduceMotion: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function TargetPulse({ target, radius, color, reduceMotion }: TargetPulseProps): React.JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type BootstrapResponse, type HeartbeatResponse, type IdentifyRequest } from './api-types.ts';
|
|
2
|
+
import type { BlarIdentity, IdentityProof, IdentityRefusalReason } from './identity.ts';
|
|
3
|
+
export interface ApiClientHooks {
|
|
4
|
+
restoreSource?: () => Promise<string | null>;
|
|
5
|
+
onIdentityRefused?: (reason: IdentityRefusalReason) => void;
|
|
6
|
+
}
|
|
7
|
+
export interface ApiClientOptions {
|
|
8
|
+
apiBaseUrl: string;
|
|
9
|
+
publishableKey: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class ApiClient {
|
|
12
|
+
private readonly options;
|
|
13
|
+
private sourceId;
|
|
14
|
+
private hooks;
|
|
15
|
+
private readonly proofs;
|
|
16
|
+
constructor(options: ApiClientOptions);
|
|
17
|
+
setHooks(hooks: ApiClientHooks): void;
|
|
18
|
+
setSourceId(sourceId: string | null): void;
|
|
19
|
+
getSourceId(): string | null;
|
|
20
|
+
getApiBaseUrl(): string;
|
|
21
|
+
getPublishableKey(): string;
|
|
22
|
+
setIdentity(identity: BlarIdentity | null): void;
|
|
23
|
+
getIdentity(): BlarIdentity | null;
|
|
24
|
+
getIdentityProof(): Promise<IdentityProof | null> | null;
|
|
25
|
+
refreshIdentityProof(): Promise<IdentityProof | null>;
|
|
26
|
+
loadSession(sourceId: string | null): Promise<BootstrapResponse>;
|
|
27
|
+
identifyUser(request: IdentifyRequest): Promise<BootstrapResponse>;
|
|
28
|
+
heartbeat(): Promise<HeartbeatResponse>;
|
|
29
|
+
createSession(): Promise<number | null>;
|
|
30
|
+
openNudge(tabId: string): Promise<number | null>;
|
|
31
|
+
dismissNudge(milestoneMessageId: number): Promise<void>;
|
|
32
|
+
snoozeNudge(milestoneMessageId: number): Promise<void>;
|
|
33
|
+
private requireBootstrap;
|
|
34
|
+
private buildHeaders;
|
|
35
|
+
private fetchWithTimeout;
|
|
36
|
+
private send;
|
|
37
|
+
private recover;
|
|
38
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CustomFields } from './identity.ts';
|
|
2
|
+
export interface BootstrapResponse {
|
|
3
|
+
sourceId: string;
|
|
4
|
+
conversationId: number | null;
|
|
5
|
+
sessionId: number | null;
|
|
6
|
+
aiActive: boolean;
|
|
7
|
+
isIdentityVerified: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface IdentifyRequest {
|
|
10
|
+
external_id: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
phone?: string;
|
|
14
|
+
contact_company?: string;
|
|
15
|
+
contact_company_external_id?: string;
|
|
16
|
+
country?: string;
|
|
17
|
+
custom_fields?: CustomFields;
|
|
18
|
+
}
|
|
19
|
+
export interface HeartbeatResponse {
|
|
20
|
+
hasPendingNudge: boolean;
|
|
21
|
+
conversationId: number | null;
|
|
22
|
+
}
|
|
23
|
+
export declare function parseBootstrap(raw: unknown): BootstrapResponse | null;
|
|
24
|
+
export declare function parseHeartbeat(raw: unknown): HeartbeatResponse;
|
|
25
|
+
export declare function parseSessionId(raw: unknown): number | null;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface AppInfo {
|
|
2
|
+
platform: 'react-native';
|
|
3
|
+
os: string;
|
|
4
|
+
os_version: string;
|
|
5
|
+
rn_version: string;
|
|
6
|
+
new_arch: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface GlobalMarkers {
|
|
9
|
+
nativeFabricUIManager?: unknown;
|
|
10
|
+
RN$Bridgeless?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export declare function detectNewArchitecture(markers: GlobalMarkers): boolean;
|
|
13
|
+
export declare function readAppInfo(): AppInfo;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { OutboundFrame } from '../agent/frames.ts';
|
|
2
|
+
import { type RunMemory } from '../agent-mode/run-memory.ts';
|
|
3
|
+
import type { AgentTransport } from '../transport/transport.ts';
|
|
4
|
+
import type { BlarIdentity } from './identity.ts';
|
|
5
|
+
import { type SessionState } from './session.ts';
|
|
6
|
+
import { type SocketState } from './session-socket.ts';
|
|
7
|
+
import { type KeyValueStorage } from './storage.ts';
|
|
8
|
+
export interface BackendTransportOptions {
|
|
9
|
+
publishableKey: string;
|
|
10
|
+
apiBaseUrl: string;
|
|
11
|
+
user: BlarIdentity | null;
|
|
12
|
+
storage?: KeyValueStorage;
|
|
13
|
+
onSocketState?: (state: SocketState) => void;
|
|
14
|
+
onConnecting?: (sessionId: number) => void;
|
|
15
|
+
onSessionChanged?: () => void;
|
|
16
|
+
log?: (message: string) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface WidgetProof {
|
|
19
|
+
identityToken?: string;
|
|
20
|
+
identitySignature?: string;
|
|
21
|
+
}
|
|
22
|
+
type FrameListener = (frame: Record<string, unknown>) => void;
|
|
23
|
+
export declare class BackendTransport implements AgentTransport {
|
|
24
|
+
private readonly api;
|
|
25
|
+
private readonly session;
|
|
26
|
+
private readonly runMemory;
|
|
27
|
+
private readonly health;
|
|
28
|
+
private readonly presence;
|
|
29
|
+
private readonly socket;
|
|
30
|
+
private readonly tabId;
|
|
31
|
+
private readonly frameListeners;
|
|
32
|
+
private readonly identityListeners;
|
|
33
|
+
private agentListener;
|
|
34
|
+
private lastSeenSeq;
|
|
35
|
+
private connectedKey;
|
|
36
|
+
private stopped;
|
|
37
|
+
private refreshing;
|
|
38
|
+
private initialUser;
|
|
39
|
+
private readonly log;
|
|
40
|
+
private readonly onConnecting;
|
|
41
|
+
private booted;
|
|
42
|
+
constructor(options: BackendTransportOptions);
|
|
43
|
+
onMessage(listener: (raw: string) => void): void;
|
|
44
|
+
getRunMemory(): RunMemory;
|
|
45
|
+
onFrame(listener: FrameListener): () => void;
|
|
46
|
+
onIdentityChange(listener: () => void): () => void;
|
|
47
|
+
start(): void;
|
|
48
|
+
stop(): void;
|
|
49
|
+
setUser(identity: BlarIdentity): Promise<void>;
|
|
50
|
+
logout(): Promise<void>;
|
|
51
|
+
isConnected(): boolean;
|
|
52
|
+
refreshSession(): Promise<void>;
|
|
53
|
+
switchSession(sessionId: number): Promise<void>;
|
|
54
|
+
leaveSession(): void;
|
|
55
|
+
openNudge(): Promise<number | null>;
|
|
56
|
+
dismissNudge(milestoneMessageId: number): Promise<void>;
|
|
57
|
+
snoozeNudge(milestoneMessageId: number): Promise<void>;
|
|
58
|
+
getState(): SessionState;
|
|
59
|
+
getTabId(): string;
|
|
60
|
+
getIdentity(): BlarIdentity | null;
|
|
61
|
+
readWidgetProof(): Promise<WidgetProof | null>;
|
|
62
|
+
noteInteraction(): void;
|
|
63
|
+
send(frame: OutboundFrame): void;
|
|
64
|
+
private boot;
|
|
65
|
+
private connect;
|
|
66
|
+
private receive;
|
|
67
|
+
private describeCommand;
|
|
68
|
+
private trackSequence;
|
|
69
|
+
}
|
|
70
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface BackoffPolicy {
|
|
2
|
+
baseMs: number;
|
|
3
|
+
decay: number;
|
|
4
|
+
maxMs: number;
|
|
5
|
+
maxAttempts: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const SOCKET_BACKOFF: BackoffPolicy;
|
|
8
|
+
export declare function backoffDelay(policy: BackoffPolicy, attempt: number): number;
|
|
9
|
+
export declare function isExhausted(policy: BackoffPolicy, attempt: number): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function decodeBase64Url(input: string): string | null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ApiErrorKind = 'http' | 'network' | 'timeout';
|
|
2
|
+
export declare class ApiRequestError extends Error {
|
|
3
|
+
readonly kind: ApiErrorKind;
|
|
4
|
+
readonly status: number;
|
|
5
|
+
readonly code: string | null;
|
|
6
|
+
readonly endpoint: string;
|
|
7
|
+
constructor(options: {
|
|
8
|
+
kind: ApiErrorKind;
|
|
9
|
+
endpoint: string;
|
|
10
|
+
status?: number;
|
|
11
|
+
code?: string | null;
|
|
12
|
+
message: string;
|
|
13
|
+
});
|
|
14
|
+
static http(endpoint: string, status: number, statusText: string, code: string | null): ApiRequestError;
|
|
15
|
+
static transport(endpoint: string, kind: 'network' | 'timeout'): ApiRequestError;
|
|
16
|
+
}
|
|
17
|
+
export declare function isIdentityRejection(error: unknown): error is ApiRequestError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function watchForeground(onActive: () => void): () => void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ClientHealth {
|
|
2
|
+
visibility: 'visible' | 'hidden';
|
|
3
|
+
hidden_ms: number;
|
|
4
|
+
lag_ms: number;
|
|
5
|
+
sdk_version: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class ClientHealthProbe {
|
|
8
|
+
private timer;
|
|
9
|
+
private subscription;
|
|
10
|
+
private expectedTickAt;
|
|
11
|
+
private worstLagMs;
|
|
12
|
+
private hiddenSince;
|
|
13
|
+
start(): void;
|
|
14
|
+
stop(): void;
|
|
15
|
+
take(): ClientHealth;
|
|
16
|
+
private onStateChange;
|
|
17
|
+
}
|