@parlor/client 0.0.0-stage → 0.2.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 +22 -2
- package/dist/action-client.d.ts +42 -0
- package/dist/action-client.d.ts.map +1 -0
- package/dist/action-client.js +92 -0
- package/dist/action-client.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-client.d.ts +11 -0
- package/dist/plugin-client.d.ts.map +1 -0
- package/dist/plugin-client.js +14 -0
- package/dist/plugin-client.js.map +1 -0
- package/dist/query-keys.d.ts +3 -0
- package/dist/query-keys.d.ts.map +1 -0
- package/dist/query-keys.js +5 -0
- package/dist/query-keys.js.map +1 -0
- package/dist/react/action-query.d.ts +26 -0
- package/dist/react/action-query.d.ts.map +1 -0
- package/dist/react/action-query.js +33 -0
- package/dist/react/action-query.js.map +1 -0
- package/dist/react/agent-ui/activity-state.d.ts +20 -0
- package/dist/react/agent-ui/activity-state.d.ts.map +1 -0
- package/dist/react/agent-ui/activity-state.js +14 -0
- package/dist/react/agent-ui/activity-state.js.map +1 -0
- package/dist/react/agent-ui/chat-activity.d.ts +13 -0
- package/dist/react/agent-ui/chat-activity.d.ts.map +1 -0
- package/dist/react/agent-ui/chat-activity.js +26 -0
- package/dist/react/agent-ui/chat-activity.js.map +1 -0
- package/dist/react/agent-ui/chat-confirm.d.ts +28 -0
- package/dist/react/agent-ui/chat-confirm.d.ts.map +1 -0
- package/dist/react/agent-ui/chat-confirm.js +140 -0
- package/dist/react/agent-ui/chat-confirm.js.map +1 -0
- package/dist/react/agent-ui/chat.d.ts +7 -0
- package/dist/react/agent-ui/chat.d.ts.map +1 -0
- package/dist/react/agent-ui/chat.js +7 -0
- package/dist/react/agent-ui/chat.js.map +1 -0
- package/dist/react/agent-ui/dev.d.ts +12 -0
- package/dist/react/agent-ui/dev.d.ts.map +1 -0
- package/dist/react/agent-ui/dev.js +80 -0
- package/dist/react/agent-ui/dev.js.map +1 -0
- package/dist/react/agent-ui/runtime.d.ts +12 -0
- package/dist/react/agent-ui/runtime.d.ts.map +1 -0
- package/dist/react/agent-ui/runtime.js +50 -0
- package/dist/react/agent-ui/runtime.js.map +1 -0
- package/dist/react/agent-ui/use-agent-activity.d.ts +3 -0
- package/dist/react/agent-ui/use-agent-activity.d.ts.map +1 -0
- package/dist/react/agent-ui/use-agent-activity.js +7 -0
- package/dist/react/agent-ui/use-agent-activity.js.map +1 -0
- package/dist/react/agent-ui/use-agent-confirmations.d.ts +8 -0
- package/dist/react/agent-ui/use-agent-confirmations.d.ts.map +1 -0
- package/dist/react/agent-ui/use-agent-confirmations.js +12 -0
- package/dist/react/agent-ui/use-agent-confirmations.js.map +1 -0
- package/dist/react/agent-ui/use-agent-view.d.ts +11 -0
- package/dist/react/agent-ui/use-agent-view.d.ts.map +1 -0
- package/dist/react/agent-ui/use-agent-view.js +25 -0
- package/dist/react/agent-ui/use-agent-view.js.map +1 -0
- package/dist/react/chat/ask-fields.d.ts +13 -0
- package/dist/react/chat/ask-fields.d.ts.map +1 -0
- package/dist/react/chat/ask-fields.js +46 -0
- package/dist/react/chat/ask-fields.js.map +1 -0
- package/dist/react/chat/chat-ask.d.ts +32 -0
- package/dist/react/chat/chat-ask.d.ts.map +1 -0
- package/dist/react/chat/chat-ask.js +69 -0
- package/dist/react/chat/chat-ask.js.map +1 -0
- package/dist/react/chat/chat-composer.d.ts +18 -0
- package/dist/react/chat/chat-composer.d.ts.map +1 -0
- package/dist/react/chat/chat-composer.js +81 -0
- package/dist/react/chat/chat-composer.js.map +1 -0
- package/dist/react/chat/chat-root.d.ts +14 -0
- package/dist/react/chat/chat-root.d.ts.map +1 -0
- package/dist/react/chat/chat-root.js +21 -0
- package/dist/react/chat/chat-root.js.map +1 -0
- package/dist/react/chat/chat-thread.d.ts +18 -0
- package/dist/react/chat/chat-thread.d.ts.map +1 -0
- package/dist/react/chat/chat-thread.js +69 -0
- package/dist/react/chat/chat-thread.js.map +1 -0
- package/dist/react/chat/context.d.ts +6 -0
- package/dist/react/chat/context.d.ts.map +1 -0
- package/dist/react/chat/context.js +24 -0
- package/dist/react/chat/context.js.map +1 -0
- package/dist/react/chat/create.d.ts +15 -0
- package/dist/react/chat/create.d.ts.map +1 -0
- package/dist/react/chat/create.js +23 -0
- package/dist/react/chat/create.js.map +1 -0
- package/dist/react/chat/open-turns.d.ts +10 -0
- package/dist/react/chat/open-turns.d.ts.map +1 -0
- package/dist/react/chat/open-turns.js +60 -0
- package/dist/react/chat/open-turns.js.map +1 -0
- package/dist/react/chat/runtime.d.ts +167 -0
- package/dist/react/chat/runtime.d.ts.map +1 -0
- package/dist/react/chat/runtime.js +939 -0
- package/dist/react/chat/runtime.js.map +1 -0
- package/dist/react/chat/use-chat.d.ts +4 -0
- package/dist/react/chat/use-chat.d.ts.map +1 -0
- package/dist/react/chat/use-chat.js +22 -0
- package/dist/react/chat/use-chat.js.map +1 -0
- package/dist/react/chat/use-device-setup.d.ts +9 -0
- package/dist/react/chat/use-device-setup.d.ts.map +1 -0
- package/dist/react/chat/use-device-setup.js +17 -0
- package/dist/react/chat/use-device-setup.js.map +1 -0
- package/dist/react/hooks.d.ts +17 -0
- package/dist/react/hooks.d.ts.map +1 -0
- package/dist/react/hooks.js +36 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/react/index.d.ts +21 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +14 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/provider.d.ts +41 -0
- package/dist/react/provider.d.ts.map +1 -0
- package/dist/react/provider.js +176 -0
- package/dist/react/provider.js.map +1 -0
- package/dist/react/retry.d.ts +5 -0
- package/dist/react/retry.d.ts.map +1 -0
- package/dist/react/retry.js +22 -0
- package/dist/react/retry.js.map +1 -0
- package/dist/react/sync-bridge.d.ts +28 -0
- package/dist/react/sync-bridge.d.ts.map +1 -0
- package/dist/react/sync-bridge.js +65 -0
- package/dist/react/sync-bridge.js.map +1 -0
- package/dist/react/sync.d.ts +51 -0
- package/dist/react/sync.d.ts.map +1 -0
- package/dist/react/sync.js +154 -0
- package/dist/react/sync.js.map +1 -0
- package/dist/react/use-capability.d.ts +6 -0
- package/dist/react/use-capability.d.ts.map +1 -0
- package/dist/react/use-capability.js +21 -0
- package/dist/react/use-capability.js.map +1 -0
- package/dist/react/use-devices.d.ts +34 -0
- package/dist/react/use-devices.d.ts.map +1 -0
- package/dist/react/use-devices.js +93 -0
- package/dist/react/use-devices.js.map +1 -0
- package/dist/react/use-link-device.d.ts +42 -0
- package/dist/react/use-link-device.d.ts.map +1 -0
- package/dist/react/use-link-device.js +58 -0
- package/dist/react/use-link-device.js.map +1 -0
- package/dist/register.d.ts +7 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +2 -0
- package/dist/register.js.map +1 -0
- package/dist/router/errors.d.ts +13 -0
- package/dist/router/errors.d.ts.map +1 -0
- package/dist/router/errors.js +16 -0
- package/dist/router/errors.js.map +1 -0
- package/dist/router/index.d.ts +4 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +4 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/mount.d.ts +22 -0
- package/dist/router/mount.d.ts.map +1 -0
- package/dist/router/mount.js +27 -0
- package/dist/router/mount.js.map +1 -0
- package/dist/router/router.d.ts +29 -0
- package/dist/router/router.d.ts.map +1 -0
- package/dist/router/router.js +44 -0
- package/dist/router/router.js.map +1 -0
- package/dist/session.d.ts +121 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +5 -0
- package/dist/session.js.map +1 -0
- package/dist/ssr/index.d.ts +2 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +2 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/render.d.ts +18 -0
- package/dist/ssr/render.d.ts.map +1 -0
- package/dist/ssr/render.js +96 -0
- package/dist/ssr/render.js.map +1 -0
- package/package.json +70 -3
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { AgentConfirmation, AgentUiClient } from "@parlor/agent-ui/client";
|
|
2
|
+
import type { CapabilityHandle, LocalAgentHost } from "@parlor/capabilities";
|
|
3
|
+
import { type ChatItem, type HostSummary, type ThreadSummary } from "@parlor/chat";
|
|
4
|
+
import type { ChatUserActionMap } from "@parlor/chat/server";
|
|
5
|
+
import { type Tag } from "@parlor/core";
|
|
6
|
+
import type { ClientChannel } from "@parlor/sync";
|
|
7
|
+
import type { PluginClient } from "../../plugin-client.js";
|
|
8
|
+
import type { DeviceLinker, DeviceSource, HostAuthorizer } from "../../session.js";
|
|
9
|
+
/** One agent the user can talk to; `key` is `<hostId>/<agentId>`. */
|
|
10
|
+
export interface AgentChoice {
|
|
11
|
+
readonly key: string;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly hostName: string;
|
|
14
|
+
readonly online: boolean;
|
|
15
|
+
readonly ready: boolean;
|
|
16
|
+
readonly problem: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
/** How this client adds a computer, decided by the `localAgentHost` capability. */
|
|
19
|
+
export type ConnectOption = {
|
|
20
|
+
readonly kind: "command";
|
|
21
|
+
readonly command: string;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: "here";
|
|
24
|
+
start(): Promise<void>;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* `waiting`: a prompt waits for a computer, which `ChatState.wait` names: one that must
|
|
28
|
+
* still approve this device, or one that is offline while the prompt queues.
|
|
29
|
+
* `unavailable`: this backend has no chat, this user may not use it, or the first read
|
|
30
|
+
* failed and is being retried; `ChatState.unavailable` says which.
|
|
31
|
+
*/
|
|
32
|
+
export type ChatStatus = "loading" | "idle" | "sending" | "waiting" | "running" | "unavailable";
|
|
33
|
+
/**
|
|
34
|
+
* Why chat is `unavailable`: `forbidden` when the app's chat `access` refuses this user,
|
|
35
|
+
* so the agent should not show at all; `not_found` when the server has no chat;
|
|
36
|
+
* `unauthenticated` when nobody is signed in; `error` while a failed read is retried.
|
|
37
|
+
*/
|
|
38
|
+
export interface ChatUnavailable {
|
|
39
|
+
readonly reason: "forbidden" | "not_found" | "unauthenticated" | "error";
|
|
40
|
+
}
|
|
41
|
+
export interface ChatWait {
|
|
42
|
+
readonly reason: "offline" | "approval";
|
|
43
|
+
readonly hostId: string;
|
|
44
|
+
readonly hostName: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether this device may send: `linked` (or nothing to link), `checking` until it knows, or
|
|
48
|
+
* `unlinked` with the code it shows once `startLink` made one. A device links once, from a
|
|
49
|
+
* device already linked or from the computer.
|
|
50
|
+
*/
|
|
51
|
+
export type LinkState = {
|
|
52
|
+
readonly status: "linked" | "checking";
|
|
53
|
+
} | {
|
|
54
|
+
readonly status: "unlinked";
|
|
55
|
+
readonly hostName: string;
|
|
56
|
+
readonly code?: string | undefined;
|
|
57
|
+
/** What a linked phone's camera opens to link this device: `<app>/link#d=…&c=…`. */
|
|
58
|
+
readonly qr?: string | undefined;
|
|
59
|
+
/** What to run on the computer to link this device there instead, while `code` is shown. */
|
|
60
|
+
readonly command?: string | undefined;
|
|
61
|
+
readonly expiresAt?: string | undefined;
|
|
62
|
+
/** The code shown last ran out; `startLink` shows a new one. */
|
|
63
|
+
readonly expired: boolean;
|
|
64
|
+
/** No other device is linked yet to link this one, so only the computer can, with `command`. */
|
|
65
|
+
readonly onlyComputer: boolean;
|
|
66
|
+
readonly busy: boolean;
|
|
67
|
+
readonly error?: string | undefined;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Set while an action waits for this device to be set up: on a browser, the first prompt
|
|
71
|
+
* would otherwise open a passkey prompt with no warning. `explain` until the user picks,
|
|
72
|
+
* `passkey` while the browser asks, `cancelled` once they dismissed it.
|
|
73
|
+
*/
|
|
74
|
+
export interface DeviceSetup {
|
|
75
|
+
readonly step: "explain" | "passkey" | "cancelled";
|
|
76
|
+
}
|
|
77
|
+
export interface ChatState {
|
|
78
|
+
readonly status: ChatStatus;
|
|
79
|
+
/** Set exactly while `status` is `waiting`; approval wins when both reasons hold. */
|
|
80
|
+
readonly wait: ChatWait | undefined;
|
|
81
|
+
/** Set exactly while `status` is `unavailable`. */
|
|
82
|
+
readonly unavailable: ChatUnavailable | undefined;
|
|
83
|
+
readonly thread: ThreadSummary | undefined;
|
|
84
|
+
readonly threads: readonly ThreadSummary[];
|
|
85
|
+
/** Older threads exist past `threads`; `loadMoreThreads` reads them. */
|
|
86
|
+
readonly moreThreads: boolean;
|
|
87
|
+
readonly items: readonly ChatItem<AgentConfirmation>[];
|
|
88
|
+
/** The thread has items before the first one shown; `loadOlder` reads them. */
|
|
89
|
+
readonly hasOlder: boolean;
|
|
90
|
+
/** Set while `loadOlder` or `loadMoreThreads` reads. */
|
|
91
|
+
readonly loadingOlder: boolean;
|
|
92
|
+
readonly hosts: readonly HostSummary[];
|
|
93
|
+
readonly agents: readonly AgentChoice[];
|
|
94
|
+
readonly agent: AgentChoice | undefined;
|
|
95
|
+
readonly connect: ConnectOption;
|
|
96
|
+
readonly draft: string;
|
|
97
|
+
/** Why the last send, stop or answer failed; cleared by the next one that succeeds. */
|
|
98
|
+
readonly error: string | undefined;
|
|
99
|
+
readonly setup: DeviceSetup | undefined;
|
|
100
|
+
readonly link: LinkState;
|
|
101
|
+
/**
|
|
102
|
+
* The chosen agent's computer wants this device to confirm it is the user again, so
|
|
103
|
+
* sending asks for Face ID or Touch ID first.
|
|
104
|
+
*/
|
|
105
|
+
readonly presenceDue: boolean;
|
|
106
|
+
}
|
|
107
|
+
export interface ChatCommands {
|
|
108
|
+
setDraft(text: string): void;
|
|
109
|
+
/** Signs the draft (or `text`) and sends it to the chosen agent; idempotent per call. */
|
|
110
|
+
send(text?: string): Promise<void>;
|
|
111
|
+
stop(): Promise<void>;
|
|
112
|
+
/** Sends a prompt again as a new turn in its thread, signed anew. */
|
|
113
|
+
resend(promptItemId: string): Promise<void>;
|
|
114
|
+
/** Reads the thread's next earlier page while `hasOlder`. */
|
|
115
|
+
loadOlder(): Promise<void>;
|
|
116
|
+
/** Reads the next older threads while `moreThreads`. */
|
|
117
|
+
loadMoreThreads(): Promise<void>;
|
|
118
|
+
/** A `presence` ask triggers the OS prompt first; a `computer` ask refuses. */
|
|
119
|
+
answer(askId: string, choice: string, values?: Readonly<Record<string, string | number | boolean>>): Promise<void>;
|
|
120
|
+
choose(agentKey: string): void;
|
|
121
|
+
/** `undefined` opens the most recent thread, if there is one. */
|
|
122
|
+
openThread(threadId: string | undefined): void;
|
|
123
|
+
/** Starts a blank thread; it exists on the server once the first prompt is sent. */
|
|
124
|
+
newThread(): void;
|
|
125
|
+
/** Shows this device's link code, after Face ID or Touch ID unless `presence` is false. */
|
|
126
|
+
startLink(options?: {
|
|
127
|
+
readonly presence?: boolean;
|
|
128
|
+
}): Promise<void>;
|
|
129
|
+
}
|
|
130
|
+
export interface DeviceSetupCommands {
|
|
131
|
+
/** Sets this device up, with a passkey or without one, then runs what waited for it. */
|
|
132
|
+
setUpDevice(options: {
|
|
133
|
+
readonly passkey: boolean;
|
|
134
|
+
}): Promise<void>;
|
|
135
|
+
/** Drops what waited for the setup; the draft stays. */
|
|
136
|
+
dismissSetup(): void;
|
|
137
|
+
}
|
|
138
|
+
export interface ChatRuntime extends ChatCommands, DeviceSetupCommands {
|
|
139
|
+
subscribe(listener: () => void): () => void;
|
|
140
|
+
get(): ChatState;
|
|
141
|
+
start(): () => void;
|
|
142
|
+
/**
|
|
143
|
+
* Called by a UI that explains the device setup, until it unmounts. Without one, the first
|
|
144
|
+
* prompt enrolls the device directly, as before.
|
|
145
|
+
*/
|
|
146
|
+
explainSetup(): () => void;
|
|
147
|
+
}
|
|
148
|
+
export interface ChatRuntimeDeps {
|
|
149
|
+
readonly calls: PluginClient<ChatUserActionMap>;
|
|
150
|
+
readonly clientId: string;
|
|
151
|
+
readonly appOrigin: string;
|
|
152
|
+
readonly agentUi: AgentUiClient;
|
|
153
|
+
readonly addChannel: (channel: ClientChannel) => () => void;
|
|
154
|
+
readonly onSyncTags: (listener: (tags: readonly Tag[]) => void) => () => void;
|
|
155
|
+
readonly onResume: (listener: () => void) => () => void;
|
|
156
|
+
/** What the server negotiated for sync; `undefined` until it has. */
|
|
157
|
+
readonly transport: () => "sse" | "poll" | undefined;
|
|
158
|
+
readonly onNegotiated: (listener: (transport: "sse" | "poll") => void) => () => void;
|
|
159
|
+
readonly isHidden?: (() => boolean) | undefined;
|
|
160
|
+
readonly auth: Partial<DeviceSource & HostAuthorizer & DeviceLinker> | undefined;
|
|
161
|
+
readonly localHost: Promise<CapabilityHandle<LocalAgentHost>>;
|
|
162
|
+
readonly threadId: string | undefined;
|
|
163
|
+
}
|
|
164
|
+
export declare const HOST_GRANTS_TAG = "parlor_auth_hosts";
|
|
165
|
+
export declare const DEVICES_TAG = "parlor_auth_devices";
|
|
166
|
+
export declare function createChatRuntime(deps: ChatRuntimeDeps): ChatRuntime;
|
|
167
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/react/chat/runtime.ts"],"names":[],"mappings":"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"}
|