@pear-protocol/agent-sdk 0.3.1 → 0.4.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/README.md +9 -1
- package/dist/{client-Cgre8YKN.d.cts → client-BSUkCr7k.d.cts} +10 -1
- package/dist/{client-Cgre8YKN.d.ts → client-BSUkCr7k.d.ts} +10 -1
- package/dist/index.cjs +10 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/react/index.cjs +6 -0
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +3 -1
- package/dist/react/index.d.ts +3 -1
- package/dist/react/index.js +6 -0
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -59,6 +59,14 @@ There's also a sync `client.sendMessage({ sessionId, message })` returning a
|
|
|
59
59
|
`listSessionSummaries`, `createSession`, `getSession`, `deleteSession`,
|
|
60
60
|
`getMessages`).
|
|
61
61
|
|
|
62
|
+
Both `streamChat` and `sendMessage` require a `surface`
|
|
63
|
+
(`pear_v3` | `pear_pro` | `base_mini` | `web`) declaring which Pear client you
|
|
64
|
+
are — the API rejects requests without a valid one. The agent applies
|
|
65
|
+
per-surface universe and execution policy — e.g. `base_mini` surfaces only SYMM
|
|
66
|
+
assets and is analysis-only. (`useAgentChat` defaults to `pear_v3`; set it via
|
|
67
|
+
the returned `setSurface`.) The Telegram surfaces are resolved server-side and
|
|
68
|
+
are not client-declarable.
|
|
69
|
+
|
|
62
70
|
## React
|
|
63
71
|
|
|
64
72
|
```tsx
|
|
@@ -67,7 +75,7 @@ import { useAgentChat } from "@pear-protocol/agent-sdk/react";
|
|
|
67
75
|
function Chat({ client }) {
|
|
68
76
|
const {
|
|
69
77
|
messages, sendMessage, isStreaming, status, stop,
|
|
70
|
-
pendingAction, confirmTicket, cancelTicket, mode, setMode,
|
|
78
|
+
pendingAction, confirmTicket, cancelTicket, mode, setMode, surface, setSurface,
|
|
71
79
|
} = useAgentChat({ client });
|
|
72
80
|
|
|
73
81
|
// render `messages`; if `pendingAction`, show Confirm/Cancel buttons wired to
|
|
@@ -251,6 +251,13 @@ declare const ChatModeSchema: z.ZodEnum<{
|
|
|
251
251
|
advanced: "advanced";
|
|
252
252
|
}>;
|
|
253
253
|
type ChatMode = z.infer<typeof ChatModeSchema>;
|
|
254
|
+
declare const ChatSurfaceSchema: z.ZodEnum<{
|
|
255
|
+
pear_v3: "pear_v3";
|
|
256
|
+
pear_pro: "pear_pro";
|
|
257
|
+
base_mini: "base_mini";
|
|
258
|
+
web: "web";
|
|
259
|
+
}>;
|
|
260
|
+
type ChatSurface = z.infer<typeof ChatSurfaceSchema>;
|
|
254
261
|
|
|
255
262
|
declare const TicketActionSchema: z.ZodEnum<{
|
|
256
263
|
open_position: "open_position";
|
|
@@ -340,6 +347,7 @@ declare class AgentChatClient {
|
|
|
340
347
|
sessionId: string;
|
|
341
348
|
message: string;
|
|
342
349
|
mode?: ChatMode;
|
|
350
|
+
surface: ChatSurface;
|
|
343
351
|
signal?: AbortSignal;
|
|
344
352
|
cta?: {
|
|
345
353
|
previousText: string;
|
|
@@ -354,6 +362,7 @@ declare class AgentChatClient {
|
|
|
354
362
|
sessionId: string;
|
|
355
363
|
message: string;
|
|
356
364
|
mode?: ChatMode;
|
|
365
|
+
surface: ChatSurface;
|
|
357
366
|
}): Promise<ChatResult>;
|
|
358
367
|
confirmTicket(ticketId: string): Promise<ConfirmResult>;
|
|
359
368
|
cancelTicket(ticketId: string): Promise<CancelResult>;
|
|
@@ -368,4 +377,4 @@ declare class AgentChatClient {
|
|
|
368
377
|
unlinkWallet(): Promise<SelfUnlinkResult>;
|
|
369
378
|
}
|
|
370
379
|
|
|
371
|
-
export { AgentChatClient as A, type
|
|
380
|
+
export { type TwitterSource as $, AgentChatClient as A, type SessionSummary as B, type CancelResult as C, SessionSummarySchema as D, ErrorEventSchema as E, type SetConfirmationsResult as F, SetConfirmationsResultSchema as G, type SetExecutionResult as H, SetExecutionResultSchema as I, SourcesEventSchema as J, StatusEventSchema as K, type LinkStatus as L, type StreamEvent as M, type SuggestedAction as N, SuggestedActionSchema as O, type PendingAction as P, type TicketAction as Q, TicketActionSchema as R, type SelfLinkResult as S, ThinkingEventSchema as T, type TicketStatus as U, TicketStatusSchema as V, TokenEventSchema as W, type TradeLink as X, TradeLinkSchema as Y, type TradeSettings as Z, TradeSettingsSchema as _, type AgentChatClientConfig as a, TwitterSourceSchema as a0, type AgentChatMessage as b, AgentChatMessageSchema as c, type AgentEvent as d, type AgentWireEvent as e, AgentWireEventSchema as f, CancelResultSchema as g, type ChatMode as h, ChatModeSchema as i, type ChatResult as j, ChatResultSchema as k, type ChatSurface as l, ChatSurfaceSchema as m, type CitationSource as n, CitationSourceSchema as o, type ConfirmResult as p, ConfirmResultSchema as q, LinkStatusSchema as r, PendingActionSchema as s, SelfLinkResultSchema as t, type SelfUnlinkResult as u, SelfUnlinkResultSchema as v, type Session as w, type SessionListItem as x, SessionListItemSchema as y, SessionSchema as z };
|
|
@@ -251,6 +251,13 @@ declare const ChatModeSchema: z.ZodEnum<{
|
|
|
251
251
|
advanced: "advanced";
|
|
252
252
|
}>;
|
|
253
253
|
type ChatMode = z.infer<typeof ChatModeSchema>;
|
|
254
|
+
declare const ChatSurfaceSchema: z.ZodEnum<{
|
|
255
|
+
pear_v3: "pear_v3";
|
|
256
|
+
pear_pro: "pear_pro";
|
|
257
|
+
base_mini: "base_mini";
|
|
258
|
+
web: "web";
|
|
259
|
+
}>;
|
|
260
|
+
type ChatSurface = z.infer<typeof ChatSurfaceSchema>;
|
|
254
261
|
|
|
255
262
|
declare const TicketActionSchema: z.ZodEnum<{
|
|
256
263
|
open_position: "open_position";
|
|
@@ -340,6 +347,7 @@ declare class AgentChatClient {
|
|
|
340
347
|
sessionId: string;
|
|
341
348
|
message: string;
|
|
342
349
|
mode?: ChatMode;
|
|
350
|
+
surface: ChatSurface;
|
|
343
351
|
signal?: AbortSignal;
|
|
344
352
|
cta?: {
|
|
345
353
|
previousText: string;
|
|
@@ -354,6 +362,7 @@ declare class AgentChatClient {
|
|
|
354
362
|
sessionId: string;
|
|
355
363
|
message: string;
|
|
356
364
|
mode?: ChatMode;
|
|
365
|
+
surface: ChatSurface;
|
|
357
366
|
}): Promise<ChatResult>;
|
|
358
367
|
confirmTicket(ticketId: string): Promise<ConfirmResult>;
|
|
359
368
|
cancelTicket(ticketId: string): Promise<CancelResult>;
|
|
@@ -368,4 +377,4 @@ declare class AgentChatClient {
|
|
|
368
377
|
unlinkWallet(): Promise<SelfUnlinkResult>;
|
|
369
378
|
}
|
|
370
379
|
|
|
371
|
-
export { AgentChatClient as A, type
|
|
380
|
+
export { type TwitterSource as $, AgentChatClient as A, type SessionSummary as B, type CancelResult as C, SessionSummarySchema as D, ErrorEventSchema as E, type SetConfirmationsResult as F, SetConfirmationsResultSchema as G, type SetExecutionResult as H, SetExecutionResultSchema as I, SourcesEventSchema as J, StatusEventSchema as K, type LinkStatus as L, type StreamEvent as M, type SuggestedAction as N, SuggestedActionSchema as O, type PendingAction as P, type TicketAction as Q, TicketActionSchema as R, type SelfLinkResult as S, ThinkingEventSchema as T, type TicketStatus as U, TicketStatusSchema as V, TokenEventSchema as W, type TradeLink as X, TradeLinkSchema as Y, type TradeSettings as Z, TradeSettingsSchema as _, type AgentChatClientConfig as a, TwitterSourceSchema as a0, type AgentChatMessage as b, AgentChatMessageSchema as c, type AgentEvent as d, type AgentWireEvent as e, AgentWireEventSchema as f, CancelResultSchema as g, type ChatMode as h, ChatModeSchema as i, type ChatResult as j, ChatResultSchema as k, type ChatSurface as l, ChatSurfaceSchema as m, type CitationSource as n, CitationSourceSchema as o, type ConfirmResult as p, ConfirmResultSchema as q, LinkStatusSchema as r, PendingActionSchema as s, SelfLinkResultSchema as t, type SelfUnlinkResult as u, SelfUnlinkResultSchema as v, type Session as w, type SessionListItem as x, SessionListItemSchema as y, SessionSchema as z };
|
package/dist/index.cjs
CHANGED
|
@@ -95,6 +95,12 @@ var SuggestedActionSchema = zod.z.object({
|
|
|
95
95
|
options: zod.z.array(zod.z.string())
|
|
96
96
|
});
|
|
97
97
|
var ChatModeSchema = zod.z.enum(["standard", "advanced"]);
|
|
98
|
+
var ChatSurfaceSchema = zod.z.enum([
|
|
99
|
+
"pear_v3",
|
|
100
|
+
"pear_pro",
|
|
101
|
+
"base_mini",
|
|
102
|
+
"web"
|
|
103
|
+
]);
|
|
98
104
|
var TicketActionSchema = zod.z.enum([
|
|
99
105
|
"open_position",
|
|
100
106
|
"close_position",
|
|
@@ -369,6 +375,7 @@ var AgentChatClient = class {
|
|
|
369
375
|
sessionId: args.sessionId,
|
|
370
376
|
mode: args.mode ?? "standard"
|
|
371
377
|
});
|
|
378
|
+
params.set("surface", args.surface);
|
|
372
379
|
if (args.cta) {
|
|
373
380
|
params.set("suggestedActionPreviousText", args.cta.previousText);
|
|
374
381
|
params.set("suggestedActionQuestion", args.cta.question);
|
|
@@ -403,7 +410,8 @@ var AgentChatClient = class {
|
|
|
403
410
|
return this.http.json("POST", "/chat", {
|
|
404
411
|
message: args.message,
|
|
405
412
|
sessionId: args.sessionId,
|
|
406
|
-
mode: args.mode ?? "standard"
|
|
413
|
+
mode: args.mode ?? "standard",
|
|
414
|
+
surface: args.surface
|
|
407
415
|
}).then(parseChatResult);
|
|
408
416
|
}
|
|
409
417
|
confirmTicket(ticketId) {
|
|
@@ -457,6 +465,7 @@ exports.AuthError = AuthError;
|
|
|
457
465
|
exports.CancelResultSchema = CancelResultSchema;
|
|
458
466
|
exports.ChatModeSchema = ChatModeSchema;
|
|
459
467
|
exports.ChatResultSchema = ChatResultSchema;
|
|
468
|
+
exports.ChatSurfaceSchema = ChatSurfaceSchema;
|
|
460
469
|
exports.CitationSourceSchema = CitationSourceSchema;
|
|
461
470
|
exports.ConfirmResultSchema = ConfirmResultSchema;
|
|
462
471
|
exports.ConflictError = ConflictError;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/protocol/primitives.ts","../src/protocol/tickets.ts","../src/protocol/events.ts","../src/protocol/link.ts","../src/protocol/messages.ts","../src/stream.ts","../src/client.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["export class AgentChatError extends Error {\n\treadonly status?: number;\n\treadonly body?: string;\n\tconstructor(message: string, status?: number, body?: string) {\n\t\tsuper(message);\n\t\tthis.name = new.target.name;\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport class AuthError extends AgentChatError {}\nexport class ForbiddenError extends AgentChatError {}\nexport class ConflictError extends AgentChatError {}\nexport class TicketExpiredError extends AgentChatError {}\nexport class RateLimitError extends AgentChatError {}\nexport class ServerError extends AgentChatError {}\n\nexport function errorFromStatus(status: number, body: string): AgentChatError {\n\tconst msg = `Agent API error ${status}: ${body}`;\n\tif (status === 401) return new AuthError(msg, status, body);\n\tif (status === 403) return new ForbiddenError(msg, status, body);\n\tif (status === 409) return new ConflictError(msg, status, body);\n\tif (status === 410) return new TicketExpiredError(msg, status, body);\n\tif (status === 429) return new RateLimitError(msg, status, body);\n\tif (status >= 500) return new ServerError(msg, status, body);\n\treturn new AgentChatError(msg, status, body);\n}\n","import { errorFromStatus } from \"./errors\";\n\nexport interface AgentChatClientConfig {\n\t/** Base URL of the agent API, e.g. https://hl-v2-agent.pearprotocol.io */\n\tbaseUrl: string;\n\t/** Returns the freshest auth token (handles rotation). Required. */\n\tgetToken: () => string | Promise<string>;\n\t/** Sent as `X-Auth-Token-Version`. Defaults to \"v2\". */\n\ttokenVersion?: \"v2\" | \"v3\";\n\t/** Optional fetch override (SSR / tests). Defaults to global fetch. */\n\tfetch?: typeof fetch;\n}\n\nexport interface Http {\n\tbuildUrl: (path: string) => string;\n\tauthHeaders: () => Promise<Record<string, string>>;\n\t/** The resolved fetch — the single authoritative one (JSON + SSE share it). */\n\tfetch: typeof fetch;\n\tjson: <T>(method: string, path: string, body?: unknown) => Promise<T>;\n}\n\nexport function createHttp(config: AgentChatClientConfig): Http {\n\tconst baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n\tconst tokenVersion = config.tokenVersion ?? \"v2\";\n\tconst rawFetch = config.fetch ?? globalThis.fetch;\n\tif (!rawFetch) {\n\t\tthrow new Error(\"No fetch available — pass `fetch` in the client config\");\n\t}\n\t// Bind to globalThis. `fetch` is exposed on the Http object and the SSE path\n\t// invokes it as `http.fetch(...)` — called as a method, the browser's native\n\t// fetch runs with `this === the http object` and throws \"Illegal invocation\".\n\t// The JSON path calls it as a bare `doFetch(...)` (this === undefined), which\n\t// is why createSession worked but streamChat didn't. Binding pins `this`.\n\tconst doFetch: typeof fetch = rawFetch.bind(globalThis);\n\n\tconst buildUrl = (path: string): string =>\n\t\t`${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n\n\tconst authHeaders = async (): Promise<Record<string, string>> => {\n\t\tconst token = await config.getToken();\n\t\treturn {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\"X-Auth-Token-Version\": tokenVersion,\n\t\t};\n\t};\n\n\tconst json = async <T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> => {\n\t\tconst headers = await authHeaders();\n\t\tif (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\t\tconst res = await doFetch(buildUrl(path), {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: body !== undefined ? JSON.stringify(body) : undefined,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\t\tif (res.status === 204) return undefined as T;\n\t\tconst text = await res.text();\n\t\treturn (text ? JSON.parse(text) : undefined) as T;\n\t};\n\n\treturn { buildUrl, authHeaders, fetch: doFetch, json };\n}\n","import { z } from \"zod\";\n\n/** A Pear trade link surfaced with an agent reply. `platform` is left an open\n * string (not an enum) so a new venue doesn't break older SDK consumers. */\nexport const TradeLinkSchema = z.object({\n\tlink: z.string(),\n\tplatform: z.string(),\n\tlabel: z.string(),\n});\nexport type TradeLink = z.infer<typeof TradeLinkSchema>;\n\nexport const TwitterSourceSchema = z.object({\n\tauthor: z.string(),\n\ttweetUrl: z.string(),\n\tpublishedAt: z.string(),\n});\nexport type TwitterSource = z.infer<typeof TwitterSourceSchema>;\n\n/** Research web-citation. The research node emits a bare URL **string** on the\n * wire (research/agent.ts maps annotations -> `url_citation.url`); a future\n * object form is also accepted and normalized to `{ url, ... }`. */\nconst CitationObjectSchema = z.object({\n\turl: z.string(),\n\tstart_index: z.number().optional(),\n\tend_index: z.number().optional(),\n\ttitle: z.string().optional(),\n});\nexport const CitationSourceSchema = z.union([\n\tz.string().transform((url) => ({ url })),\n\tCitationObjectSchema,\n]);\nexport type CitationSource = z.infer<typeof CitationSourceSchema>;\n\nexport const SuggestedActionSchema = z.object({\n\tquestion: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type SuggestedAction = z.infer<typeof SuggestedActionSchema>;\n\nexport const ChatModeSchema = z.enum([\"standard\", \"advanced\"]);\nexport type ChatMode = z.infer<typeof ChatModeSchema>;\n","import { z } from \"zod\";\n\n/** Known ticket actions. Used for typing; the wire `action` field is parsed\n * permissively (plain string) elsewhere for forward-compat. */\nexport const TicketActionSchema = z.enum([\n\t\"open_position\",\n\t\"close_position\",\n\t\"close_all_positions\",\n\t\"adjust_position\",\n\t\"adjust_advance_position\",\n\t\"reverse_position\",\n\t\"rebalance_position\",\n\t\"set_risk_parameters\",\n]);\nexport type TicketAction = z.infer<typeof TicketActionSchema>;\n\nexport const TicketStatusSchema = z.enum([\n\t\"PENDING\",\n\t\"EXECUTING\",\n\t\"EXECUTED\",\n\t\"CANCELLED\",\n\t\"FAILED\",\n]);\nexport type TicketStatus = z.infer<typeof TicketStatusSchema>;\n\n/** Surfaced on a turn when a money-moving write was FROZEN (nothing executed).\n * `action` is a plain string (forward-compatible); compare against\n * `TicketActionSchema.options` if you need to switch on known actions. */\nexport const PendingActionSchema = z.object({\n\tticketId: z.string(),\n\taction: z.string(),\n\tconsequence: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type PendingAction = z.infer<typeof PendingActionSchema>;\n\n/** Response of POST /trade/tickets/:id/confirm. Strict on the money fields,\n * loose (passthrough) on the action-specific `result` payload. `status` is\n * intentionally narrowed to the two TERMINAL confirm outcomes this endpoint\n * returns; widen to `TicketStatusSchema` if the BE can ever return another. */\nexport const ConfirmResultSchema = z.looseObject({\n\tok: z.boolean(),\n\tstatus: z.enum([\"EXECUTED\", \"FAILED\"]),\n\t// `.optional()` is load-bearing: in zod v4 `z.unknown()` is NO LONGER\n\t// implicitly optional, so dropping it would make these fields required.\n\tresult: z.unknown().optional(),\n\tpositionsSnapshot: z.unknown().optional(),\n\timages: z.array(z.string()).optional(),\n});\nexport type ConfirmResult = z.infer<typeof ConfirmResultSchema>;\n\nexport const CancelResultSchema = z.object({\n\tok: z.literal(true),\n\tstatus: z.literal(\"CANCELLED\"),\n});\nexport type CancelResult = z.infer<typeof CancelResultSchema>;\n\nexport const SetConfirmationsResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetConfirmationsResult = z.infer<\n\ttypeof SetConfirmationsResultSchema\n>;\n\n/** Response of GET /trade/tickets/settings — the caller's two independent trade\n * toggles. `executionEnabled` is the master execution switch (any write at all);\n * `confirmationsEnabled` is the confirm-before-write preference. */\nexport const TradeSettingsSchema = z.object({\n\texecutionEnabled: z.boolean(),\n\tconfirmationsEnabled: z.boolean(),\n});\nexport type TradeSettings = z.infer<typeof TradeSettingsSchema>;\n\n/** Response of POST /trade/tickets/execution — the new master-switch state. */\nexport const SetExecutionResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetExecutionResult = z.infer<typeof SetExecutionResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\nimport { PendingActionSchema } from \"./tickets\";\n\nexport const TokenEventSchema = z.object({\n\ttype: z.literal(\"token\"),\n\ttext: z.string(),\n});\n// `thinking` is emitted by ADVANCED mode only (the standard pipeline doesn't).\nexport const ThinkingEventSchema = z.object({\n\ttype: z.literal(\"thinking\"),\n\ttext: z.string(),\n});\nexport const StatusEventSchema = z.object({\n\ttype: z.literal(\"status\"),\n\ttext: z.string(),\n\tphase: z.enum([\"start\", \"end\"]).optional(),\n\tnode: z.string().optional(),\n});\nexport const SourcesEventSchema = z.object({\n\ttype: z.literal(\"sources\"),\n\t// `.catch` on every NON-critical field so a malformed metadata array can\n\t// never sink the whole event — `pendingAction` (a staged money-moving trade)\n\t// rides on this same frame and MUST always survive.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).catch([]).optional(), // resolved URL strings\n\tsuggestedAction: SuggestedActionSchema.nullish().catch(null),\n\t// pendingAction is deliberately NOT `.catch`-ed: a corrupt ticket must reject,\n\t// never be fabricated.\n\tpendingAction: PendingActionSchema.nullish(),\n});\nexport const ErrorEventSchema = z.object({\n\ttype: z.literal(\"error\"),\n\tmessage: z.string().optional(),\n});\n\n/** The discriminated union of events the SSE wire delivers. Parse each event\n * with `.safeParse`; on failure (unknown/legacy `cycle` etc.) IGNORE it — do\n * not throw. */\nexport const AgentWireEventSchema = z.discriminatedUnion(\"type\", [\n\tTokenEventSchema,\n\tThinkingEventSchema,\n\tStatusEventSchema,\n\tSourcesEventSchema,\n\tErrorEventSchema,\n]);\nexport type AgentWireEvent = z.infer<typeof AgentWireEventSchema>;\n\n/** Final assembled turn — the shape of `POST /chat` AND the SDK's synthetic\n * `done` event (the SSE wire has no `done` frame; the SDK assembles it). */\nexport const ChatResultSchema = z.object({\n\tfinalText: z.string(),\n\tsessionId: z.string().optional(),\n\t// Same money-path guard as SourcesEventSchema: metadata degrades to [] / null\n\t// on drift so a hard `.parse` can never throw away a real `pendingAction`.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).default([]),\n\tsuggestedAction: SuggestedActionSchema.nullable().default(null).catch(null),\n\tpendingAction: PendingActionSchema.nullable().default(null),\n});\nexport type ChatResult = z.infer<typeof ChatResultSchema>;\n\n/** The RAW wire union plus a synthetic terminal `done`. NOTE: the SDK actually\n * emits a NORMALIZED `StreamEvent` (token/thinking carry a `delta`) defined in\n * the SDK's stream module; this `AgentEvent` is the pre-normalization shape. */\nexport type AgentEvent = AgentWireEvent | { type: \"done\"; result: ChatResult };\n","import { z } from \"zod\";\n\n/** Response of GET /auth/link-wallet/self — whether the caller's wallet has a\n * WalletLink (i.e. the agent holds an API key and can execute trades). */\nexport const LinkStatusSchema = z.object({\n\tlinked: z.boolean(),\n\twalletAddress: z.string(),\n});\nexport type LinkStatus = z.infer<typeof LinkStatusSchema>;\n\n/** Response of POST /auth/link-wallet/self. `created` is true only when this\n * call minted a new key (false on the idempotent already-linked path). */\nexport const SelfLinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(true),\n\tcreated: z.boolean(),\n});\nexport type SelfLinkResult = z.infer<typeof SelfLinkResultSchema>;\n\n/** Response of DELETE /auth/link-wallet/self. */\nexport const SelfUnlinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(false),\n});\nexport type SelfUnlinkResult = z.infer<typeof SelfUnlinkResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\n\nexport const SessionListItemSchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(), // ISO (Date serialized over the wire)\n});\nexport type SessionListItem = z.infer<typeof SessionListItemSchema>;\n\nexport const SessionSummarySchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n\tfirstUserMessage: z.string().optional(),\n\tlastUserMessage: z.string().optional(),\n\tlastUserMessageAt: z.string().optional(),\n\tlastAssistantMessageAt: z.string().optional(),\n});\nexport type SessionSummary = z.infer<typeof SessionSummarySchema>;\n\nexport const SessionSchema = z.object({\n\tid: z.string(),\n\tuserId: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n});\nexport type Session = z.infer<typeof SessionSchema>;\n\n/** A persisted chat message (history). `images` are pre-resolved URL strings.\n * `z.looseObject` keeps unknown future fields instead of stripping them. */\nexport const AgentChatMessageSchema = z.looseObject({\n\tid: z.string(),\n\trole: z.string(),\n\tcontent: z.string(),\n\tcreatedAt: z.string(),\n\tresearchAnnotations: z.array(CitationSourceSchema).nullish(),\n\ttwitterSources: z.array(TwitterSourceSchema).nullish(),\n\ttradeLinks: z.array(TradeLinkSchema).nullish(),\n\timages: z.array(z.string()).nullish(),\n\tsuggestedAction: SuggestedActionSchema.nullish(),\n});\nexport type AgentChatMessage = z.infer<typeof AgentChatMessageSchema>;\n","import { type AgentWireEvent, AgentWireEventSchema } from \"./protocol\";\n\n/** A token/thinking event normalized to expose an incremental `delta`. This\n * backend is DELTA-only on every path, so `delta === text` — there is no\n * cumulative reconciliation (a `startsWith` heuristic corrupts real output). */\nexport type StreamEvent =\n\t| (Extract<AgentWireEvent, { type: \"token\" }> & { delta: string })\n\t| (Extract<AgentWireEvent, { type: \"thinking\" }> & { delta: string })\n\t| Exclude<AgentWireEvent, { type: \"token\" | \"thinking\" }>;\n\nexport async function* parseSseStream(\n\tbody: ReadableStream<Uint8Array>,\n): AsyncGenerator<StreamEvent> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\n\t\t\t// Drain every complete `\\n\\n`-delimited frame in the buffer. `const idx`\n\t\t\t// is recomputed each iteration (no assignment-in-`while`-head: that trips\n\t\t\t// biome `noAssignInExpressions`, a non-auto-fixable CI error).\n\t\t\twhile (true) {\n\t\t\t\tconst idx = buffer.indexOf(\"\\n\\n\");\n\t\t\t\tif (idx < 0) break;\n\t\t\t\tconst rawEvent = buffer.slice(0, idx);\n\t\t\t\tbuffer = buffer.slice(idx + 2);\n\n\t\t\t\tconst lines = rawEvent.split(\"\\n\");\n\t\t\t\tconst eventLine = lines.find((l) => l.startsWith(\"event:\"));\n\t\t\t\tconst dataLine = lines.find((l) => l.startsWith(\"data:\"));\n\t\t\t\tif (!dataLine) continue;\n\t\t\t\tconst payloadText = dataLine.replace(/^data:\\s?/, \"\");\n\n\t\t\t\t// NestJS surfaces stream errors as `event: error\\ndata: <plain string>`\n\t\t\t\t// (NON-JSON). Detect it BEFORE JSON.parse so it isn't swallowed.\n\t\t\t\tif (eventLine?.replace(/^event:\\s?/, \"\") === \"error\") {\n\t\t\t\t\tyield { type: \"error\", message: payloadText };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet json: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(payloadText);\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst parsed = AgentWireEventSchema.safeParse(json);\n\t\t\t\tif (!parsed.success) {\n\t\t\t\t\t// Never SILENTLY drop a money-path frame: if it looks like a sources\n\t\t\t\t\t// event carrying pendingAction, fail loud instead of losing a trade.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(json as { type?: string })?.type === \"sources\" &&\n\t\t\t\t\t\t(json as { pendingAction?: unknown })?.pendingAction\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tmessage: \"malformed sources frame with pendingAction\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst ev = parsed.data;\n\t\t\t\tif (ev.type === \"token\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else if (ev.type === \"thinking\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else {\n\t\t\t\t\tyield ev;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\treader.cancel().catch(() => undefined);\n\t}\n}\n","import { AgentChatError, errorFromStatus } from \"./errors\";\nimport { type AgentChatClientConfig, createHttp, type Http } from \"./http\";\nimport {\n\ttype AgentChatMessage,\n\ttype CancelResult,\n\tCancelResultSchema,\n\ttype ChatMode,\n\ttype ChatResult,\n\tChatResultSchema,\n\ttype ConfirmResult,\n\tConfirmResultSchema,\n\ttype LinkStatus,\n\tLinkStatusSchema,\n\tPendingActionSchema,\n\ttype SelfLinkResult,\n\tSelfLinkResultSchema,\n\ttype SelfUnlinkResult,\n\tSelfUnlinkResultSchema,\n\ttype Session,\n\ttype SessionListItem,\n\ttype SessionSummary,\n\ttype SetConfirmationsResult,\n\tSetConfirmationsResultSchema,\n\ttype SetExecutionResult,\n\tSetExecutionResultSchema,\n\ttype TradeSettings,\n\tTradeSettingsSchema,\n} from \"./protocol\";\nimport { parseSseStream, type StreamEvent } from \"./stream\";\n\n/** Parse a ChatResult but NEVER throw away a real `pendingAction` on metadata\n * drift: on a parse failure, fall back to a minimal result that preserves\n * `finalText` + `pendingAction` rather than rejecting the whole turn. */\nfunction parseChatResult(raw: unknown): ChatResult {\n\tconst parsed = ChatResultSchema.safeParse(raw);\n\tif (parsed.success) return parsed.data;\n\tconst r = raw as { finalText?: unknown; pendingAction?: unknown };\n\t// Salvage finalText, but NEVER fabricate a ticket: keep pendingAction only if\n\t// it INDEPENDENTLY validates — a corrupt ticket is dropped, never handed to\n\t// confirmTicket() (the money endpoint).\n\tconst pa = PendingActionSchema.safeParse(r?.pendingAction);\n\treturn {\n\t\tfinalText: typeof r?.finalText === \"string\" ? r.finalText : \"\",\n\t\timages: [],\n\t\tsuggestedAction: null,\n\t\tpendingAction: pa.success ? pa.data : null,\n\t};\n}\n\nfunction assembleResult(\n\tsessionId: string,\n\tfinalText: string,\n\tsources: Extract<StreamEvent, { type: \"sources\" }> | undefined,\n): ChatResult {\n\treturn parseChatResult({\n\t\tfinalText,\n\t\tsessionId,\n\t\tresearchAnnotations: sources?.researchAnnotations,\n\t\ttwitterSources: sources?.twitterSources,\n\t\ttradeLinks: sources?.tradeLinks,\n\t\timages: sources?.images ?? [],\n\t\tsuggestedAction: sources?.suggestedAction ?? null,\n\t\tpendingAction: sources?.pendingAction ?? null,\n\t});\n}\n\nexport class AgentChatClient {\n\tprivate readonly http: Http;\n\n\tconstructor(config: AgentChatClientConfig) {\n\t\tthis.http = createHttp(config);\n\t}\n\n\tlistSessions(): Promise<SessionListItem[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions\");\n\t}\n\n\tlistSessionSummaries(): Promise<SessionSummary[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions/summary\");\n\t}\n\n\tcreateSession(): Promise<{ id: string }> {\n\t\treturn this.http.json(\"POST\", \"/chat/sessions\");\n\t}\n\n\tgetSession(sessionId: string): Promise<Session> {\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tasync deleteSession(sessionId: string): Promise<void> {\n\t\tawait this.http.json(\n\t\t\t\"DELETE\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tgetMessages(\n\t\tsessionId: string,\n\t\topts?: { limit?: number; before?: string },\n\t): Promise<AgentChatMessage[]> {\n\t\tconst params = new URLSearchParams();\n\t\tif (opts?.limit !== undefined) params.set(\"limit\", String(opts.limit));\n\t\tif (opts?.before) params.set(\"before\", opts.before);\n\t\tconst qs = params.toString();\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}/messages${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t}\n\n\t/** Stream a turn. Yields token/thinking/status/sources events, then a\n\t * synthetic `{type:'done', result}` assembled from accumulated token deltas +\n\t * the final `sources` payload (the SSE wire has no `done` frame). Throws an\n\t * `AgentChatError` if the backend emits a mid-stream `error` frame. */\n\tasync *streamChat(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t\tsignal?: AbortSignal;\n\t\t/** CTA callback — set when the user clicks a suggested-action option; the\n\t\t * agent rebuilds the turn from this context server-side. */\n\t\tcta?: { previousText: string; question: string; selectedOption: string };\n\t}): AsyncGenerator<StreamEvent | { type: \"done\"; result: ChatResult }> {\n\t\tconst params = new URLSearchParams({\n\t\t\tmessage: args.message,\n\t\t\tsessionId: args.sessionId,\n\t\t\tmode: args.mode ?? \"standard\",\n\t\t});\n\t\tif (args.cta) {\n\t\t\tparams.set(\"suggestedActionPreviousText\", args.cta.previousText);\n\t\t\tparams.set(\"suggestedActionQuestion\", args.cta.question);\n\t\t\tparams.set(\"suggestedActionSelectedOption\", args.cta.selectedOption);\n\t\t}\n\t\tconst headers = await this.http.authHeaders();\n\t\theaders.Accept = \"text/event-stream\";\n\t\tconst res = await this.http.fetch(\n\t\t\tthis.http.buildUrl(`/chat/stream?${params.toString()}`),\n\t\t\t{ method: \"GET\", headers, signal: args.signal },\n\t\t);\n\t\tif (!res.ok || !res.body) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\n\t\tlet finalText = \"\";\n\t\tlet sources: Extract<StreamEvent, { type: \"sources\" }> | undefined;\n\t\tfor await (const ev of parseSseStream(res.body)) {\n\t\t\tif (ev.type === \"error\") {\n\t\t\t\tthrow new AgentChatError(ev.message ?? \"Agent stream error\");\n\t\t\t}\n\t\t\tif (ev.type === \"token\") finalText += ev.delta;\n\t\t\tif (ev.type === \"sources\") sources = ev;\n\t\t\tyield ev;\n\t\t}\n\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\tresult: assembleResult(args.sessionId, finalText, sources),\n\t\t};\n\t}\n\n\t/** Sync send (POST /chat). Prefer `streamChat` for UX. */\n\tsendMessage(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t}): Promise<ChatResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/chat\", {\n\t\t\t\tmessage: args.message,\n\t\t\t\tsessionId: args.sessionId,\n\t\t\t\tmode: args.mode ?? \"standard\",\n\t\t\t})\n\t\t\t.then(parseChatResult);\n\t}\n\n\tconfirmTicket(ticketId: string): Promise<ConfirmResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/confirm`,\n\t\t\t)\n\t\t\t.then((raw) => ConfirmResultSchema.parse(raw));\n\t}\n\n\tcancelTicket(ticketId: string): Promise<CancelResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/cancel`,\n\t\t\t)\n\t\t\t.then((raw) => CancelResultSchema.parse(raw));\n\t}\n\n\tsetTradeConfirmations(enabled: boolean): Promise<SetConfirmationsResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/settings\", { enabled })\n\t\t\t.then((raw) => SetConfirmationsResultSchema.parse(raw));\n\t}\n\n\t/** Read both trade toggles for the caller wallet: the master execution switch\n\t * and the confirm-before-write preference. */\n\tgetTradeSettings(): Promise<TradeSettings> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/trade/tickets/settings\")\n\t\t\t.then((raw) => TradeSettingsSchema.parse(raw));\n\t}\n\n\t/** Flip the caller's master execution switch. `false` opts the wallet out of\n\t * all money-moving writes; `true` restores the default-ON state. */\n\tsetTradeExecution(enabled: boolean): Promise<SetExecutionResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/execution\", { enabled })\n\t\t\t.then((raw) => SetExecutionResultSchema.parse(raw));\n\t}\n\n\t/** Whether the caller's wallet is linked to the agent (i.e. the agent can\n\t * execute trades for it). Backend-verified — don't cache this locally. */\n\tgetLinkStatus(): Promise<LinkStatus> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => LinkStatusSchema.parse(raw));\n\t}\n\n\t/** Link the caller's wallet: the agent mints a Pear API key server-side AS\n\t * the caller (their token is forwarded) — the key never exists client-side.\n\t * Idempotent when already linked; `force` re-mints (recovery), `code` binds\n\t * a Telegram identity (replaces the legacy secret-based flow). */\n\tlinkWallet(opts?: {\n\t\tforce?: boolean;\n\t\tcode?: string;\n\t}): Promise<SelfLinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/auth/link-wallet/self\", opts ?? {})\n\t\t\t.then((raw) => SelfLinkResultSchema.parse(raw));\n\t}\n\n\t/** Unlink the caller's wallet — the agent loses trade authority. */\n\tunlinkWallet(): Promise<SelfUnlinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"DELETE\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => SelfUnlinkResultSchema.parse(raw));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/protocol/primitives.ts","../src/protocol/tickets.ts","../src/protocol/events.ts","../src/protocol/link.ts","../src/protocol/messages.ts","../src/stream.ts","../src/client.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["export class AgentChatError extends Error {\n\treadonly status?: number;\n\treadonly body?: string;\n\tconstructor(message: string, status?: number, body?: string) {\n\t\tsuper(message);\n\t\tthis.name = new.target.name;\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport class AuthError extends AgentChatError {}\nexport class ForbiddenError extends AgentChatError {}\nexport class ConflictError extends AgentChatError {}\nexport class TicketExpiredError extends AgentChatError {}\nexport class RateLimitError extends AgentChatError {}\nexport class ServerError extends AgentChatError {}\n\nexport function errorFromStatus(status: number, body: string): AgentChatError {\n\tconst msg = `Agent API error ${status}: ${body}`;\n\tif (status === 401) return new AuthError(msg, status, body);\n\tif (status === 403) return new ForbiddenError(msg, status, body);\n\tif (status === 409) return new ConflictError(msg, status, body);\n\tif (status === 410) return new TicketExpiredError(msg, status, body);\n\tif (status === 429) return new RateLimitError(msg, status, body);\n\tif (status >= 500) return new ServerError(msg, status, body);\n\treturn new AgentChatError(msg, status, body);\n}\n","import { errorFromStatus } from \"./errors\";\n\nexport interface AgentChatClientConfig {\n\t/** Base URL of the agent API, e.g. https://hl-v2-agent.pearprotocol.io */\n\tbaseUrl: string;\n\t/** Returns the freshest auth token (handles rotation). Required. */\n\tgetToken: () => string | Promise<string>;\n\t/** Sent as `X-Auth-Token-Version`. Defaults to \"v2\". */\n\ttokenVersion?: \"v2\" | \"v3\";\n\t/** Optional fetch override (SSR / tests). Defaults to global fetch. */\n\tfetch?: typeof fetch;\n}\n\nexport interface Http {\n\tbuildUrl: (path: string) => string;\n\tauthHeaders: () => Promise<Record<string, string>>;\n\t/** The resolved fetch — the single authoritative one (JSON + SSE share it). */\n\tfetch: typeof fetch;\n\tjson: <T>(method: string, path: string, body?: unknown) => Promise<T>;\n}\n\nexport function createHttp(config: AgentChatClientConfig): Http {\n\tconst baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n\tconst tokenVersion = config.tokenVersion ?? \"v2\";\n\tconst rawFetch = config.fetch ?? globalThis.fetch;\n\tif (!rawFetch) {\n\t\tthrow new Error(\"No fetch available — pass `fetch` in the client config\");\n\t}\n\t// Bind to globalThis. `fetch` is exposed on the Http object and the SSE path\n\t// invokes it as `http.fetch(...)` — called as a method, the browser's native\n\t// fetch runs with `this === the http object` and throws \"Illegal invocation\".\n\t// The JSON path calls it as a bare `doFetch(...)` (this === undefined), which\n\t// is why createSession worked but streamChat didn't. Binding pins `this`.\n\tconst doFetch: typeof fetch = rawFetch.bind(globalThis);\n\n\tconst buildUrl = (path: string): string =>\n\t\t`${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n\n\tconst authHeaders = async (): Promise<Record<string, string>> => {\n\t\tconst token = await config.getToken();\n\t\treturn {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\"X-Auth-Token-Version\": tokenVersion,\n\t\t};\n\t};\n\n\tconst json = async <T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> => {\n\t\tconst headers = await authHeaders();\n\t\tif (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\t\tconst res = await doFetch(buildUrl(path), {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: body !== undefined ? JSON.stringify(body) : undefined,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\t\tif (res.status === 204) return undefined as T;\n\t\tconst text = await res.text();\n\t\treturn (text ? JSON.parse(text) : undefined) as T;\n\t};\n\n\treturn { buildUrl, authHeaders, fetch: doFetch, json };\n}\n","import { z } from \"zod\";\n\n/** A Pear trade link surfaced with an agent reply. `platform` is left an open\n * string (not an enum) so a new venue doesn't break older SDK consumers. */\nexport const TradeLinkSchema = z.object({\n\tlink: z.string(),\n\tplatform: z.string(),\n\tlabel: z.string(),\n});\nexport type TradeLink = z.infer<typeof TradeLinkSchema>;\n\nexport const TwitterSourceSchema = z.object({\n\tauthor: z.string(),\n\ttweetUrl: z.string(),\n\tpublishedAt: z.string(),\n});\nexport type TwitterSource = z.infer<typeof TwitterSourceSchema>;\n\n/** Research web-citation. The research node emits a bare URL **string** on the\n * wire (research/agent.ts maps annotations -> `url_citation.url`); a future\n * object form is also accepted and normalized to `{ url, ... }`. */\nconst CitationObjectSchema = z.object({\n\turl: z.string(),\n\tstart_index: z.number().optional(),\n\tend_index: z.number().optional(),\n\ttitle: z.string().optional(),\n});\nexport const CitationSourceSchema = z.union([\n\tz.string().transform((url) => ({ url })),\n\tCitationObjectSchema,\n]);\nexport type CitationSource = z.infer<typeof CitationSourceSchema>;\n\nexport const SuggestedActionSchema = z.object({\n\tquestion: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type SuggestedAction = z.infer<typeof SuggestedActionSchema>;\n\nexport const ChatModeSchema = z.enum([\"standard\", \"advanced\"]);\nexport type ChatMode = z.infer<typeof ChatModeSchema>;\n\n/** The Pear client surface a chat request declares — drives per-surface behavior\n * server-side (analysis universe / execution policy). REQUIRED on the wire. The\n * Telegram surfaces (tg_dm / tg_group) are resolved server-side from the TG\n * session and are NOT client-declarable, so they're intentionally absent here. */\nexport const ChatSurfaceSchema = z.enum([\n\t\"pear_v3\",\n\t\"pear_pro\",\n\t\"base_mini\",\n\t\"web\",\n]);\nexport type ChatSurface = z.infer<typeof ChatSurfaceSchema>;\n","import { z } from \"zod\";\n\n/** Known ticket actions. Used for typing; the wire `action` field is parsed\n * permissively (plain string) elsewhere for forward-compat. */\nexport const TicketActionSchema = z.enum([\n\t\"open_position\",\n\t\"close_position\",\n\t\"close_all_positions\",\n\t\"adjust_position\",\n\t\"adjust_advance_position\",\n\t\"reverse_position\",\n\t\"rebalance_position\",\n\t\"set_risk_parameters\",\n]);\nexport type TicketAction = z.infer<typeof TicketActionSchema>;\n\nexport const TicketStatusSchema = z.enum([\n\t\"PENDING\",\n\t\"EXECUTING\",\n\t\"EXECUTED\",\n\t\"CANCELLED\",\n\t\"FAILED\",\n]);\nexport type TicketStatus = z.infer<typeof TicketStatusSchema>;\n\n/** Surfaced on a turn when a money-moving write was FROZEN (nothing executed).\n * `action` is a plain string (forward-compatible); compare against\n * `TicketActionSchema.options` if you need to switch on known actions. */\nexport const PendingActionSchema = z.object({\n\tticketId: z.string(),\n\taction: z.string(),\n\tconsequence: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type PendingAction = z.infer<typeof PendingActionSchema>;\n\n/** Response of POST /trade/tickets/:id/confirm. Strict on the money fields,\n * loose (passthrough) on the action-specific `result` payload. `status` is\n * intentionally narrowed to the two TERMINAL confirm outcomes this endpoint\n * returns; widen to `TicketStatusSchema` if the BE can ever return another. */\nexport const ConfirmResultSchema = z.looseObject({\n\tok: z.boolean(),\n\tstatus: z.enum([\"EXECUTED\", \"FAILED\"]),\n\t// `.optional()` is load-bearing: in zod v4 `z.unknown()` is NO LONGER\n\t// implicitly optional, so dropping it would make these fields required.\n\tresult: z.unknown().optional(),\n\tpositionsSnapshot: z.unknown().optional(),\n\timages: z.array(z.string()).optional(),\n});\nexport type ConfirmResult = z.infer<typeof ConfirmResultSchema>;\n\nexport const CancelResultSchema = z.object({\n\tok: z.literal(true),\n\tstatus: z.literal(\"CANCELLED\"),\n});\nexport type CancelResult = z.infer<typeof CancelResultSchema>;\n\nexport const SetConfirmationsResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetConfirmationsResult = z.infer<\n\ttypeof SetConfirmationsResultSchema\n>;\n\n/** Response of GET /trade/tickets/settings — the caller's two independent trade\n * toggles. `executionEnabled` is the master execution switch (any write at all);\n * `confirmationsEnabled` is the confirm-before-write preference. */\nexport const TradeSettingsSchema = z.object({\n\texecutionEnabled: z.boolean(),\n\tconfirmationsEnabled: z.boolean(),\n});\nexport type TradeSettings = z.infer<typeof TradeSettingsSchema>;\n\n/** Response of POST /trade/tickets/execution — the new master-switch state. */\nexport const SetExecutionResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetExecutionResult = z.infer<typeof SetExecutionResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\nimport { PendingActionSchema } from \"./tickets\";\n\nexport const TokenEventSchema = z.object({\n\ttype: z.literal(\"token\"),\n\ttext: z.string(),\n});\n// `thinking` is emitted by ADVANCED mode only (the standard pipeline doesn't).\nexport const ThinkingEventSchema = z.object({\n\ttype: z.literal(\"thinking\"),\n\ttext: z.string(),\n});\nexport const StatusEventSchema = z.object({\n\ttype: z.literal(\"status\"),\n\ttext: z.string(),\n\tphase: z.enum([\"start\", \"end\"]).optional(),\n\tnode: z.string().optional(),\n});\nexport const SourcesEventSchema = z.object({\n\ttype: z.literal(\"sources\"),\n\t// `.catch` on every NON-critical field so a malformed metadata array can\n\t// never sink the whole event — `pendingAction` (a staged money-moving trade)\n\t// rides on this same frame and MUST always survive.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).catch([]).optional(), // resolved URL strings\n\tsuggestedAction: SuggestedActionSchema.nullish().catch(null),\n\t// pendingAction is deliberately NOT `.catch`-ed: a corrupt ticket must reject,\n\t// never be fabricated.\n\tpendingAction: PendingActionSchema.nullish(),\n});\nexport const ErrorEventSchema = z.object({\n\ttype: z.literal(\"error\"),\n\tmessage: z.string().optional(),\n});\n\n/** The discriminated union of events the SSE wire delivers. Parse each event\n * with `.safeParse`; on failure (unknown/legacy `cycle` etc.) IGNORE it — do\n * not throw. */\nexport const AgentWireEventSchema = z.discriminatedUnion(\"type\", [\n\tTokenEventSchema,\n\tThinkingEventSchema,\n\tStatusEventSchema,\n\tSourcesEventSchema,\n\tErrorEventSchema,\n]);\nexport type AgentWireEvent = z.infer<typeof AgentWireEventSchema>;\n\n/** Final assembled turn — the shape of `POST /chat` AND the SDK's synthetic\n * `done` event (the SSE wire has no `done` frame; the SDK assembles it). */\nexport const ChatResultSchema = z.object({\n\tfinalText: z.string(),\n\tsessionId: z.string().optional(),\n\t// Same money-path guard as SourcesEventSchema: metadata degrades to [] / null\n\t// on drift so a hard `.parse` can never throw away a real `pendingAction`.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).default([]),\n\tsuggestedAction: SuggestedActionSchema.nullable().default(null).catch(null),\n\tpendingAction: PendingActionSchema.nullable().default(null),\n});\nexport type ChatResult = z.infer<typeof ChatResultSchema>;\n\n/** The RAW wire union plus a synthetic terminal `done`. NOTE: the SDK actually\n * emits a NORMALIZED `StreamEvent` (token/thinking carry a `delta`) defined in\n * the SDK's stream module; this `AgentEvent` is the pre-normalization shape. */\nexport type AgentEvent = AgentWireEvent | { type: \"done\"; result: ChatResult };\n","import { z } from \"zod\";\n\n/** Response of GET /auth/link-wallet/self — whether the caller's wallet has a\n * WalletLink (i.e. the agent holds an API key and can execute trades). */\nexport const LinkStatusSchema = z.object({\n\tlinked: z.boolean(),\n\twalletAddress: z.string(),\n});\nexport type LinkStatus = z.infer<typeof LinkStatusSchema>;\n\n/** Response of POST /auth/link-wallet/self. `created` is true only when this\n * call minted a new key (false on the idempotent already-linked path). */\nexport const SelfLinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(true),\n\tcreated: z.boolean(),\n});\nexport type SelfLinkResult = z.infer<typeof SelfLinkResultSchema>;\n\n/** Response of DELETE /auth/link-wallet/self. */\nexport const SelfUnlinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(false),\n});\nexport type SelfUnlinkResult = z.infer<typeof SelfUnlinkResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\n\nexport const SessionListItemSchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(), // ISO (Date serialized over the wire)\n});\nexport type SessionListItem = z.infer<typeof SessionListItemSchema>;\n\nexport const SessionSummarySchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n\tfirstUserMessage: z.string().optional(),\n\tlastUserMessage: z.string().optional(),\n\tlastUserMessageAt: z.string().optional(),\n\tlastAssistantMessageAt: z.string().optional(),\n});\nexport type SessionSummary = z.infer<typeof SessionSummarySchema>;\n\nexport const SessionSchema = z.object({\n\tid: z.string(),\n\tuserId: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n});\nexport type Session = z.infer<typeof SessionSchema>;\n\n/** A persisted chat message (history). `images` are pre-resolved URL strings.\n * `z.looseObject` keeps unknown future fields instead of stripping them. */\nexport const AgentChatMessageSchema = z.looseObject({\n\tid: z.string(),\n\trole: z.string(),\n\tcontent: z.string(),\n\tcreatedAt: z.string(),\n\tresearchAnnotations: z.array(CitationSourceSchema).nullish(),\n\ttwitterSources: z.array(TwitterSourceSchema).nullish(),\n\ttradeLinks: z.array(TradeLinkSchema).nullish(),\n\timages: z.array(z.string()).nullish(),\n\tsuggestedAction: SuggestedActionSchema.nullish(),\n});\nexport type AgentChatMessage = z.infer<typeof AgentChatMessageSchema>;\n","import { type AgentWireEvent, AgentWireEventSchema } from \"./protocol\";\n\n/** A token/thinking event normalized to expose an incremental `delta`. This\n * backend is DELTA-only on every path, so `delta === text` — there is no\n * cumulative reconciliation (a `startsWith` heuristic corrupts real output). */\nexport type StreamEvent =\n\t| (Extract<AgentWireEvent, { type: \"token\" }> & { delta: string })\n\t| (Extract<AgentWireEvent, { type: \"thinking\" }> & { delta: string })\n\t| Exclude<AgentWireEvent, { type: \"token\" | \"thinking\" }>;\n\nexport async function* parseSseStream(\n\tbody: ReadableStream<Uint8Array>,\n): AsyncGenerator<StreamEvent> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\n\t\t\t// Drain every complete `\\n\\n`-delimited frame in the buffer. `const idx`\n\t\t\t// is recomputed each iteration (no assignment-in-`while`-head: that trips\n\t\t\t// biome `noAssignInExpressions`, a non-auto-fixable CI error).\n\t\t\twhile (true) {\n\t\t\t\tconst idx = buffer.indexOf(\"\\n\\n\");\n\t\t\t\tif (idx < 0) break;\n\t\t\t\tconst rawEvent = buffer.slice(0, idx);\n\t\t\t\tbuffer = buffer.slice(idx + 2);\n\n\t\t\t\tconst lines = rawEvent.split(\"\\n\");\n\t\t\t\tconst eventLine = lines.find((l) => l.startsWith(\"event:\"));\n\t\t\t\tconst dataLine = lines.find((l) => l.startsWith(\"data:\"));\n\t\t\t\tif (!dataLine) continue;\n\t\t\t\tconst payloadText = dataLine.replace(/^data:\\s?/, \"\");\n\n\t\t\t\t// NestJS surfaces stream errors as `event: error\\ndata: <plain string>`\n\t\t\t\t// (NON-JSON). Detect it BEFORE JSON.parse so it isn't swallowed.\n\t\t\t\tif (eventLine?.replace(/^event:\\s?/, \"\") === \"error\") {\n\t\t\t\t\tyield { type: \"error\", message: payloadText };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet json: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(payloadText);\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst parsed = AgentWireEventSchema.safeParse(json);\n\t\t\t\tif (!parsed.success) {\n\t\t\t\t\t// Never SILENTLY drop a money-path frame: if it looks like a sources\n\t\t\t\t\t// event carrying pendingAction, fail loud instead of losing a trade.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(json as { type?: string })?.type === \"sources\" &&\n\t\t\t\t\t\t(json as { pendingAction?: unknown })?.pendingAction\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tmessage: \"malformed sources frame with pendingAction\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst ev = parsed.data;\n\t\t\t\tif (ev.type === \"token\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else if (ev.type === \"thinking\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else {\n\t\t\t\t\tyield ev;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\treader.cancel().catch(() => undefined);\n\t}\n}\n","import { AgentChatError, errorFromStatus } from \"./errors\";\nimport { type AgentChatClientConfig, createHttp, type Http } from \"./http\";\nimport {\n\ttype AgentChatMessage,\n\ttype CancelResult,\n\tCancelResultSchema,\n\ttype ChatMode,\n\ttype ChatResult,\n\tChatResultSchema,\n\ttype ChatSurface,\n\ttype ConfirmResult,\n\tConfirmResultSchema,\n\ttype LinkStatus,\n\tLinkStatusSchema,\n\tPendingActionSchema,\n\ttype SelfLinkResult,\n\tSelfLinkResultSchema,\n\ttype SelfUnlinkResult,\n\tSelfUnlinkResultSchema,\n\ttype Session,\n\ttype SessionListItem,\n\ttype SessionSummary,\n\ttype SetConfirmationsResult,\n\tSetConfirmationsResultSchema,\n\ttype SetExecutionResult,\n\tSetExecutionResultSchema,\n\ttype TradeSettings,\n\tTradeSettingsSchema,\n} from \"./protocol\";\nimport { parseSseStream, type StreamEvent } from \"./stream\";\n\n/** Parse a ChatResult but NEVER throw away a real `pendingAction` on metadata\n * drift: on a parse failure, fall back to a minimal result that preserves\n * `finalText` + `pendingAction` rather than rejecting the whole turn. */\nfunction parseChatResult(raw: unknown): ChatResult {\n\tconst parsed = ChatResultSchema.safeParse(raw);\n\tif (parsed.success) return parsed.data;\n\tconst r = raw as { finalText?: unknown; pendingAction?: unknown };\n\t// Salvage finalText, but NEVER fabricate a ticket: keep pendingAction only if\n\t// it INDEPENDENTLY validates — a corrupt ticket is dropped, never handed to\n\t// confirmTicket() (the money endpoint).\n\tconst pa = PendingActionSchema.safeParse(r?.pendingAction);\n\treturn {\n\t\tfinalText: typeof r?.finalText === \"string\" ? r.finalText : \"\",\n\t\timages: [],\n\t\tsuggestedAction: null,\n\t\tpendingAction: pa.success ? pa.data : null,\n\t};\n}\n\nfunction assembleResult(\n\tsessionId: string,\n\tfinalText: string,\n\tsources: Extract<StreamEvent, { type: \"sources\" }> | undefined,\n): ChatResult {\n\treturn parseChatResult({\n\t\tfinalText,\n\t\tsessionId,\n\t\tresearchAnnotations: sources?.researchAnnotations,\n\t\ttwitterSources: sources?.twitterSources,\n\t\ttradeLinks: sources?.tradeLinks,\n\t\timages: sources?.images ?? [],\n\t\tsuggestedAction: sources?.suggestedAction ?? null,\n\t\tpendingAction: sources?.pendingAction ?? null,\n\t});\n}\n\nexport class AgentChatClient {\n\tprivate readonly http: Http;\n\n\tconstructor(config: AgentChatClientConfig) {\n\t\tthis.http = createHttp(config);\n\t}\n\n\tlistSessions(): Promise<SessionListItem[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions\");\n\t}\n\n\tlistSessionSummaries(): Promise<SessionSummary[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions/summary\");\n\t}\n\n\tcreateSession(): Promise<{ id: string }> {\n\t\treturn this.http.json(\"POST\", \"/chat/sessions\");\n\t}\n\n\tgetSession(sessionId: string): Promise<Session> {\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tasync deleteSession(sessionId: string): Promise<void> {\n\t\tawait this.http.json(\n\t\t\t\"DELETE\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tgetMessages(\n\t\tsessionId: string,\n\t\topts?: { limit?: number; before?: string },\n\t): Promise<AgentChatMessage[]> {\n\t\tconst params = new URLSearchParams();\n\t\tif (opts?.limit !== undefined) params.set(\"limit\", String(opts.limit));\n\t\tif (opts?.before) params.set(\"before\", opts.before);\n\t\tconst qs = params.toString();\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}/messages${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t}\n\n\t/** Stream a turn. Yields token/thinking/status/sources events, then a\n\t * synthetic `{type:'done', result}` assembled from accumulated token deltas +\n\t * the final `sources` payload (the SSE wire has no `done` frame). Throws an\n\t * `AgentChatError` if the backend emits a mid-stream `error` frame. */\n\tasync *streamChat(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t\t/** Declares the client surface (pear_v3 / pear_pro / base_mini / …). Required —\n\t\t * the API rejects requests without a valid surface. Drives per-surface behavior. */\n\t\tsurface: ChatSurface;\n\t\tsignal?: AbortSignal;\n\t\t/** CTA callback — set when the user clicks a suggested-action option; the\n\t\t * agent rebuilds the turn from this context server-side. */\n\t\tcta?: { previousText: string; question: string; selectedOption: string };\n\t}): AsyncGenerator<StreamEvent | { type: \"done\"; result: ChatResult }> {\n\t\tconst params = new URLSearchParams({\n\t\t\tmessage: args.message,\n\t\t\tsessionId: args.sessionId,\n\t\t\tmode: args.mode ?? \"standard\",\n\t\t});\n\t\tparams.set(\"surface\", args.surface);\n\t\tif (args.cta) {\n\t\t\tparams.set(\"suggestedActionPreviousText\", args.cta.previousText);\n\t\t\tparams.set(\"suggestedActionQuestion\", args.cta.question);\n\t\t\tparams.set(\"suggestedActionSelectedOption\", args.cta.selectedOption);\n\t\t}\n\t\tconst headers = await this.http.authHeaders();\n\t\theaders.Accept = \"text/event-stream\";\n\t\tconst res = await this.http.fetch(\n\t\t\tthis.http.buildUrl(`/chat/stream?${params.toString()}`),\n\t\t\t{ method: \"GET\", headers, signal: args.signal },\n\t\t);\n\t\tif (!res.ok || !res.body) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\n\t\tlet finalText = \"\";\n\t\tlet sources: Extract<StreamEvent, { type: \"sources\" }> | undefined;\n\t\tfor await (const ev of parseSseStream(res.body)) {\n\t\t\tif (ev.type === \"error\") {\n\t\t\t\tthrow new AgentChatError(ev.message ?? \"Agent stream error\");\n\t\t\t}\n\t\t\tif (ev.type === \"token\") finalText += ev.delta;\n\t\t\tif (ev.type === \"sources\") sources = ev;\n\t\t\tyield ev;\n\t\t}\n\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\tresult: assembleResult(args.sessionId, finalText, sources),\n\t\t};\n\t}\n\n\t/** Sync send (POST /chat). Prefer `streamChat` for UX. */\n\tsendMessage(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t\t/** Required — the API rejects requests without a valid surface. */\n\t\tsurface: ChatSurface;\n\t}): Promise<ChatResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/chat\", {\n\t\t\t\tmessage: args.message,\n\t\t\t\tsessionId: args.sessionId,\n\t\t\t\tmode: args.mode ?? \"standard\",\n\t\t\t\tsurface: args.surface,\n\t\t\t})\n\t\t\t.then(parseChatResult);\n\t}\n\n\tconfirmTicket(ticketId: string): Promise<ConfirmResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/confirm`,\n\t\t\t)\n\t\t\t.then((raw) => ConfirmResultSchema.parse(raw));\n\t}\n\n\tcancelTicket(ticketId: string): Promise<CancelResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/cancel`,\n\t\t\t)\n\t\t\t.then((raw) => CancelResultSchema.parse(raw));\n\t}\n\n\tsetTradeConfirmations(enabled: boolean): Promise<SetConfirmationsResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/settings\", { enabled })\n\t\t\t.then((raw) => SetConfirmationsResultSchema.parse(raw));\n\t}\n\n\t/** Read both trade toggles for the caller wallet: the master execution switch\n\t * and the confirm-before-write preference. */\n\tgetTradeSettings(): Promise<TradeSettings> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/trade/tickets/settings\")\n\t\t\t.then((raw) => TradeSettingsSchema.parse(raw));\n\t}\n\n\t/** Flip the caller's master execution switch. `false` opts the wallet out of\n\t * all money-moving writes; `true` restores the default-ON state. */\n\tsetTradeExecution(enabled: boolean): Promise<SetExecutionResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/execution\", { enabled })\n\t\t\t.then((raw) => SetExecutionResultSchema.parse(raw));\n\t}\n\n\t/** Whether the caller's wallet is linked to the agent (i.e. the agent can\n\t * execute trades for it). Backend-verified — don't cache this locally. */\n\tgetLinkStatus(): Promise<LinkStatus> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => LinkStatusSchema.parse(raw));\n\t}\n\n\t/** Link the caller's wallet: the agent mints a Pear API key server-side AS\n\t * the caller (their token is forwarded) — the key never exists client-side.\n\t * Idempotent when already linked; `force` re-mints (recovery), `code` binds\n\t * a Telegram identity (replaces the legacy secret-based flow). */\n\tlinkWallet(opts?: {\n\t\tforce?: boolean;\n\t\tcode?: string;\n\t}): Promise<SelfLinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/auth/link-wallet/self\", opts ?? {})\n\t\t\t.then((raw) => SelfLinkResultSchema.parse(raw));\n\t}\n\n\t/** Unlink the caller's wallet — the agent loses trade authority. */\n\tunlinkWallet(): Promise<SelfUnlinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"DELETE\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => SelfUnlinkResultSchema.parse(raw));\n\t}\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AgentChatClient, a as AgentChatClientConfig, b as AgentChatMessage, c as AgentChatMessageSchema, d as AgentEvent, e as AgentWireEvent, f as AgentWireEventSchema, C as CancelResult, g as CancelResultSchema, h as ChatMode, i as ChatModeSchema, j as ChatResult, k as ChatResultSchema, l as
|
|
1
|
+
export { A as AgentChatClient, a as AgentChatClientConfig, b as AgentChatMessage, c as AgentChatMessageSchema, d as AgentEvent, e as AgentWireEvent, f as AgentWireEventSchema, C as CancelResult, g as CancelResultSchema, h as ChatMode, i as ChatModeSchema, j as ChatResult, k as ChatResultSchema, l as ChatSurface, m as ChatSurfaceSchema, n as CitationSource, o as CitationSourceSchema, p as ConfirmResult, q as ConfirmResultSchema, E as ErrorEventSchema, L as LinkStatus, r as LinkStatusSchema, P as PendingAction, s as PendingActionSchema, S as SelfLinkResult, t as SelfLinkResultSchema, u as SelfUnlinkResult, v as SelfUnlinkResultSchema, w as Session, x as SessionListItem, y as SessionListItemSchema, z as SessionSchema, B as SessionSummary, D as SessionSummarySchema, F as SetConfirmationsResult, G as SetConfirmationsResultSchema, H as SetExecutionResult, I as SetExecutionResultSchema, J as SourcesEventSchema, K as StatusEventSchema, M as StreamEvent, N as SuggestedAction, O as SuggestedActionSchema, T as ThinkingEventSchema, Q as TicketAction, R as TicketActionSchema, U as TicketStatus, V as TicketStatusSchema, W as TokenEventSchema, X as TradeLink, Y as TradeLinkSchema, Z as TradeSettings, _ as TradeSettingsSchema, $ as TwitterSource, a0 as TwitterSourceSchema } from './client-BSUkCr7k.cjs';
|
|
2
2
|
import 'zod';
|
|
3
3
|
|
|
4
4
|
declare class AgentChatError extends Error {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AgentChatClient, a as AgentChatClientConfig, b as AgentChatMessage, c as AgentChatMessageSchema, d as AgentEvent, e as AgentWireEvent, f as AgentWireEventSchema, C as CancelResult, g as CancelResultSchema, h as ChatMode, i as ChatModeSchema, j as ChatResult, k as ChatResultSchema, l as
|
|
1
|
+
export { A as AgentChatClient, a as AgentChatClientConfig, b as AgentChatMessage, c as AgentChatMessageSchema, d as AgentEvent, e as AgentWireEvent, f as AgentWireEventSchema, C as CancelResult, g as CancelResultSchema, h as ChatMode, i as ChatModeSchema, j as ChatResult, k as ChatResultSchema, l as ChatSurface, m as ChatSurfaceSchema, n as CitationSource, o as CitationSourceSchema, p as ConfirmResult, q as ConfirmResultSchema, E as ErrorEventSchema, L as LinkStatus, r as LinkStatusSchema, P as PendingAction, s as PendingActionSchema, S as SelfLinkResult, t as SelfLinkResultSchema, u as SelfUnlinkResult, v as SelfUnlinkResultSchema, w as Session, x as SessionListItem, y as SessionListItemSchema, z as SessionSchema, B as SessionSummary, D as SessionSummarySchema, F as SetConfirmationsResult, G as SetConfirmationsResultSchema, H as SetExecutionResult, I as SetExecutionResultSchema, J as SourcesEventSchema, K as StatusEventSchema, M as StreamEvent, N as SuggestedAction, O as SuggestedActionSchema, T as ThinkingEventSchema, Q as TicketAction, R as TicketActionSchema, U as TicketStatus, V as TicketStatusSchema, W as TokenEventSchema, X as TradeLink, Y as TradeLinkSchema, Z as TradeSettings, _ as TradeSettingsSchema, $ as TwitterSource, a0 as TwitterSourceSchema } from './client-BSUkCr7k.js';
|
|
2
2
|
import 'zod';
|
|
3
3
|
|
|
4
4
|
declare class AgentChatError extends Error {
|
package/dist/index.js
CHANGED
|
@@ -93,6 +93,12 @@ var SuggestedActionSchema = z.object({
|
|
|
93
93
|
options: z.array(z.string())
|
|
94
94
|
});
|
|
95
95
|
var ChatModeSchema = z.enum(["standard", "advanced"]);
|
|
96
|
+
var ChatSurfaceSchema = z.enum([
|
|
97
|
+
"pear_v3",
|
|
98
|
+
"pear_pro",
|
|
99
|
+
"base_mini",
|
|
100
|
+
"web"
|
|
101
|
+
]);
|
|
96
102
|
var TicketActionSchema = z.enum([
|
|
97
103
|
"open_position",
|
|
98
104
|
"close_position",
|
|
@@ -367,6 +373,7 @@ var AgentChatClient = class {
|
|
|
367
373
|
sessionId: args.sessionId,
|
|
368
374
|
mode: args.mode ?? "standard"
|
|
369
375
|
});
|
|
376
|
+
params.set("surface", args.surface);
|
|
370
377
|
if (args.cta) {
|
|
371
378
|
params.set("suggestedActionPreviousText", args.cta.previousText);
|
|
372
379
|
params.set("suggestedActionQuestion", args.cta.question);
|
|
@@ -401,7 +408,8 @@ var AgentChatClient = class {
|
|
|
401
408
|
return this.http.json("POST", "/chat", {
|
|
402
409
|
message: args.message,
|
|
403
410
|
sessionId: args.sessionId,
|
|
404
|
-
mode: args.mode ?? "standard"
|
|
411
|
+
mode: args.mode ?? "standard",
|
|
412
|
+
surface: args.surface
|
|
405
413
|
}).then(parseChatResult);
|
|
406
414
|
}
|
|
407
415
|
confirmTicket(ticketId) {
|
|
@@ -447,6 +455,6 @@ var AgentChatClient = class {
|
|
|
447
455
|
}
|
|
448
456
|
};
|
|
449
457
|
|
|
450
|
-
export { AgentChatClient, AgentChatError, AgentChatMessageSchema, AgentWireEventSchema, AuthError, CancelResultSchema, ChatModeSchema, ChatResultSchema, CitationSourceSchema, ConfirmResultSchema, ConflictError, ErrorEventSchema, ForbiddenError, LinkStatusSchema, PendingActionSchema, RateLimitError, SelfLinkResultSchema, SelfUnlinkResultSchema, ServerError, SessionListItemSchema, SessionSchema, SessionSummarySchema, SetConfirmationsResultSchema, SetExecutionResultSchema, SourcesEventSchema, StatusEventSchema, SuggestedActionSchema, ThinkingEventSchema, TicketActionSchema, TicketExpiredError, TicketStatusSchema, TokenEventSchema, TradeLinkSchema, TradeSettingsSchema, TwitterSourceSchema };
|
|
458
|
+
export { AgentChatClient, AgentChatError, AgentChatMessageSchema, AgentWireEventSchema, AuthError, CancelResultSchema, ChatModeSchema, ChatResultSchema, ChatSurfaceSchema, CitationSourceSchema, ConfirmResultSchema, ConflictError, ErrorEventSchema, ForbiddenError, LinkStatusSchema, PendingActionSchema, RateLimitError, SelfLinkResultSchema, SelfUnlinkResultSchema, ServerError, SessionListItemSchema, SessionSchema, SessionSummarySchema, SetConfirmationsResultSchema, SetExecutionResultSchema, SourcesEventSchema, StatusEventSchema, SuggestedActionSchema, ThinkingEventSchema, TicketActionSchema, TicketExpiredError, TicketStatusSchema, TokenEventSchema, TradeLinkSchema, TradeSettingsSchema, TwitterSourceSchema };
|
|
451
459
|
//# sourceMappingURL=index.js.map
|
|
452
460
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/protocol/primitives.ts","../src/protocol/tickets.ts","../src/protocol/events.ts","../src/protocol/link.ts","../src/protocol/messages.ts","../src/stream.ts","../src/client.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["export class AgentChatError extends Error {\n\treadonly status?: number;\n\treadonly body?: string;\n\tconstructor(message: string, status?: number, body?: string) {\n\t\tsuper(message);\n\t\tthis.name = new.target.name;\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport class AuthError extends AgentChatError {}\nexport class ForbiddenError extends AgentChatError {}\nexport class ConflictError extends AgentChatError {}\nexport class TicketExpiredError extends AgentChatError {}\nexport class RateLimitError extends AgentChatError {}\nexport class ServerError extends AgentChatError {}\n\nexport function errorFromStatus(status: number, body: string): AgentChatError {\n\tconst msg = `Agent API error ${status}: ${body}`;\n\tif (status === 401) return new AuthError(msg, status, body);\n\tif (status === 403) return new ForbiddenError(msg, status, body);\n\tif (status === 409) return new ConflictError(msg, status, body);\n\tif (status === 410) return new TicketExpiredError(msg, status, body);\n\tif (status === 429) return new RateLimitError(msg, status, body);\n\tif (status >= 500) return new ServerError(msg, status, body);\n\treturn new AgentChatError(msg, status, body);\n}\n","import { errorFromStatus } from \"./errors\";\n\nexport interface AgentChatClientConfig {\n\t/** Base URL of the agent API, e.g. https://hl-v2-agent.pearprotocol.io */\n\tbaseUrl: string;\n\t/** Returns the freshest auth token (handles rotation). Required. */\n\tgetToken: () => string | Promise<string>;\n\t/** Sent as `X-Auth-Token-Version`. Defaults to \"v2\". */\n\ttokenVersion?: \"v2\" | \"v3\";\n\t/** Optional fetch override (SSR / tests). Defaults to global fetch. */\n\tfetch?: typeof fetch;\n}\n\nexport interface Http {\n\tbuildUrl: (path: string) => string;\n\tauthHeaders: () => Promise<Record<string, string>>;\n\t/** The resolved fetch — the single authoritative one (JSON + SSE share it). */\n\tfetch: typeof fetch;\n\tjson: <T>(method: string, path: string, body?: unknown) => Promise<T>;\n}\n\nexport function createHttp(config: AgentChatClientConfig): Http {\n\tconst baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n\tconst tokenVersion = config.tokenVersion ?? \"v2\";\n\tconst rawFetch = config.fetch ?? globalThis.fetch;\n\tif (!rawFetch) {\n\t\tthrow new Error(\"No fetch available — pass `fetch` in the client config\");\n\t}\n\t// Bind to globalThis. `fetch` is exposed on the Http object and the SSE path\n\t// invokes it as `http.fetch(...)` — called as a method, the browser's native\n\t// fetch runs with `this === the http object` and throws \"Illegal invocation\".\n\t// The JSON path calls it as a bare `doFetch(...)` (this === undefined), which\n\t// is why createSession worked but streamChat didn't. Binding pins `this`.\n\tconst doFetch: typeof fetch = rawFetch.bind(globalThis);\n\n\tconst buildUrl = (path: string): string =>\n\t\t`${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n\n\tconst authHeaders = async (): Promise<Record<string, string>> => {\n\t\tconst token = await config.getToken();\n\t\treturn {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\"X-Auth-Token-Version\": tokenVersion,\n\t\t};\n\t};\n\n\tconst json = async <T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> => {\n\t\tconst headers = await authHeaders();\n\t\tif (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\t\tconst res = await doFetch(buildUrl(path), {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: body !== undefined ? JSON.stringify(body) : undefined,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\t\tif (res.status === 204) return undefined as T;\n\t\tconst text = await res.text();\n\t\treturn (text ? JSON.parse(text) : undefined) as T;\n\t};\n\n\treturn { buildUrl, authHeaders, fetch: doFetch, json };\n}\n","import { z } from \"zod\";\n\n/** A Pear trade link surfaced with an agent reply. `platform` is left an open\n * string (not an enum) so a new venue doesn't break older SDK consumers. */\nexport const TradeLinkSchema = z.object({\n\tlink: z.string(),\n\tplatform: z.string(),\n\tlabel: z.string(),\n});\nexport type TradeLink = z.infer<typeof TradeLinkSchema>;\n\nexport const TwitterSourceSchema = z.object({\n\tauthor: z.string(),\n\ttweetUrl: z.string(),\n\tpublishedAt: z.string(),\n});\nexport type TwitterSource = z.infer<typeof TwitterSourceSchema>;\n\n/** Research web-citation. The research node emits a bare URL **string** on the\n * wire (research/agent.ts maps annotations -> `url_citation.url`); a future\n * object form is also accepted and normalized to `{ url, ... }`. */\nconst CitationObjectSchema = z.object({\n\turl: z.string(),\n\tstart_index: z.number().optional(),\n\tend_index: z.number().optional(),\n\ttitle: z.string().optional(),\n});\nexport const CitationSourceSchema = z.union([\n\tz.string().transform((url) => ({ url })),\n\tCitationObjectSchema,\n]);\nexport type CitationSource = z.infer<typeof CitationSourceSchema>;\n\nexport const SuggestedActionSchema = z.object({\n\tquestion: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type SuggestedAction = z.infer<typeof SuggestedActionSchema>;\n\nexport const ChatModeSchema = z.enum([\"standard\", \"advanced\"]);\nexport type ChatMode = z.infer<typeof ChatModeSchema>;\n","import { z } from \"zod\";\n\n/** Known ticket actions. Used for typing; the wire `action` field is parsed\n * permissively (plain string) elsewhere for forward-compat. */\nexport const TicketActionSchema = z.enum([\n\t\"open_position\",\n\t\"close_position\",\n\t\"close_all_positions\",\n\t\"adjust_position\",\n\t\"adjust_advance_position\",\n\t\"reverse_position\",\n\t\"rebalance_position\",\n\t\"set_risk_parameters\",\n]);\nexport type TicketAction = z.infer<typeof TicketActionSchema>;\n\nexport const TicketStatusSchema = z.enum([\n\t\"PENDING\",\n\t\"EXECUTING\",\n\t\"EXECUTED\",\n\t\"CANCELLED\",\n\t\"FAILED\",\n]);\nexport type TicketStatus = z.infer<typeof TicketStatusSchema>;\n\n/** Surfaced on a turn when a money-moving write was FROZEN (nothing executed).\n * `action` is a plain string (forward-compatible); compare against\n * `TicketActionSchema.options` if you need to switch on known actions. */\nexport const PendingActionSchema = z.object({\n\tticketId: z.string(),\n\taction: z.string(),\n\tconsequence: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type PendingAction = z.infer<typeof PendingActionSchema>;\n\n/** Response of POST /trade/tickets/:id/confirm. Strict on the money fields,\n * loose (passthrough) on the action-specific `result` payload. `status` is\n * intentionally narrowed to the two TERMINAL confirm outcomes this endpoint\n * returns; widen to `TicketStatusSchema` if the BE can ever return another. */\nexport const ConfirmResultSchema = z.looseObject({\n\tok: z.boolean(),\n\tstatus: z.enum([\"EXECUTED\", \"FAILED\"]),\n\t// `.optional()` is load-bearing: in zod v4 `z.unknown()` is NO LONGER\n\t// implicitly optional, so dropping it would make these fields required.\n\tresult: z.unknown().optional(),\n\tpositionsSnapshot: z.unknown().optional(),\n\timages: z.array(z.string()).optional(),\n});\nexport type ConfirmResult = z.infer<typeof ConfirmResultSchema>;\n\nexport const CancelResultSchema = z.object({\n\tok: z.literal(true),\n\tstatus: z.literal(\"CANCELLED\"),\n});\nexport type CancelResult = z.infer<typeof CancelResultSchema>;\n\nexport const SetConfirmationsResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetConfirmationsResult = z.infer<\n\ttypeof SetConfirmationsResultSchema\n>;\n\n/** Response of GET /trade/tickets/settings — the caller's two independent trade\n * toggles. `executionEnabled` is the master execution switch (any write at all);\n * `confirmationsEnabled` is the confirm-before-write preference. */\nexport const TradeSettingsSchema = z.object({\n\texecutionEnabled: z.boolean(),\n\tconfirmationsEnabled: z.boolean(),\n});\nexport type TradeSettings = z.infer<typeof TradeSettingsSchema>;\n\n/** Response of POST /trade/tickets/execution — the new master-switch state. */\nexport const SetExecutionResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetExecutionResult = z.infer<typeof SetExecutionResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\nimport { PendingActionSchema } from \"./tickets\";\n\nexport const TokenEventSchema = z.object({\n\ttype: z.literal(\"token\"),\n\ttext: z.string(),\n});\n// `thinking` is emitted by ADVANCED mode only (the standard pipeline doesn't).\nexport const ThinkingEventSchema = z.object({\n\ttype: z.literal(\"thinking\"),\n\ttext: z.string(),\n});\nexport const StatusEventSchema = z.object({\n\ttype: z.literal(\"status\"),\n\ttext: z.string(),\n\tphase: z.enum([\"start\", \"end\"]).optional(),\n\tnode: z.string().optional(),\n});\nexport const SourcesEventSchema = z.object({\n\ttype: z.literal(\"sources\"),\n\t// `.catch` on every NON-critical field so a malformed metadata array can\n\t// never sink the whole event — `pendingAction` (a staged money-moving trade)\n\t// rides on this same frame and MUST always survive.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).catch([]).optional(), // resolved URL strings\n\tsuggestedAction: SuggestedActionSchema.nullish().catch(null),\n\t// pendingAction is deliberately NOT `.catch`-ed: a corrupt ticket must reject,\n\t// never be fabricated.\n\tpendingAction: PendingActionSchema.nullish(),\n});\nexport const ErrorEventSchema = z.object({\n\ttype: z.literal(\"error\"),\n\tmessage: z.string().optional(),\n});\n\n/** The discriminated union of events the SSE wire delivers. Parse each event\n * with `.safeParse`; on failure (unknown/legacy `cycle` etc.) IGNORE it — do\n * not throw. */\nexport const AgentWireEventSchema = z.discriminatedUnion(\"type\", [\n\tTokenEventSchema,\n\tThinkingEventSchema,\n\tStatusEventSchema,\n\tSourcesEventSchema,\n\tErrorEventSchema,\n]);\nexport type AgentWireEvent = z.infer<typeof AgentWireEventSchema>;\n\n/** Final assembled turn — the shape of `POST /chat` AND the SDK's synthetic\n * `done` event (the SSE wire has no `done` frame; the SDK assembles it). */\nexport const ChatResultSchema = z.object({\n\tfinalText: z.string(),\n\tsessionId: z.string().optional(),\n\t// Same money-path guard as SourcesEventSchema: metadata degrades to [] / null\n\t// on drift so a hard `.parse` can never throw away a real `pendingAction`.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).default([]),\n\tsuggestedAction: SuggestedActionSchema.nullable().default(null).catch(null),\n\tpendingAction: PendingActionSchema.nullable().default(null),\n});\nexport type ChatResult = z.infer<typeof ChatResultSchema>;\n\n/** The RAW wire union plus a synthetic terminal `done`. NOTE: the SDK actually\n * emits a NORMALIZED `StreamEvent` (token/thinking carry a `delta`) defined in\n * the SDK's stream module; this `AgentEvent` is the pre-normalization shape. */\nexport type AgentEvent = AgentWireEvent | { type: \"done\"; result: ChatResult };\n","import { z } from \"zod\";\n\n/** Response of GET /auth/link-wallet/self — whether the caller's wallet has a\n * WalletLink (i.e. the agent holds an API key and can execute trades). */\nexport const LinkStatusSchema = z.object({\n\tlinked: z.boolean(),\n\twalletAddress: z.string(),\n});\nexport type LinkStatus = z.infer<typeof LinkStatusSchema>;\n\n/** Response of POST /auth/link-wallet/self. `created` is true only when this\n * call minted a new key (false on the idempotent already-linked path). */\nexport const SelfLinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(true),\n\tcreated: z.boolean(),\n});\nexport type SelfLinkResult = z.infer<typeof SelfLinkResultSchema>;\n\n/** Response of DELETE /auth/link-wallet/self. */\nexport const SelfUnlinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(false),\n});\nexport type SelfUnlinkResult = z.infer<typeof SelfUnlinkResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\n\nexport const SessionListItemSchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(), // ISO (Date serialized over the wire)\n});\nexport type SessionListItem = z.infer<typeof SessionListItemSchema>;\n\nexport const SessionSummarySchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n\tfirstUserMessage: z.string().optional(),\n\tlastUserMessage: z.string().optional(),\n\tlastUserMessageAt: z.string().optional(),\n\tlastAssistantMessageAt: z.string().optional(),\n});\nexport type SessionSummary = z.infer<typeof SessionSummarySchema>;\n\nexport const SessionSchema = z.object({\n\tid: z.string(),\n\tuserId: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n});\nexport type Session = z.infer<typeof SessionSchema>;\n\n/** A persisted chat message (history). `images` are pre-resolved URL strings.\n * `z.looseObject` keeps unknown future fields instead of stripping them. */\nexport const AgentChatMessageSchema = z.looseObject({\n\tid: z.string(),\n\trole: z.string(),\n\tcontent: z.string(),\n\tcreatedAt: z.string(),\n\tresearchAnnotations: z.array(CitationSourceSchema).nullish(),\n\ttwitterSources: z.array(TwitterSourceSchema).nullish(),\n\ttradeLinks: z.array(TradeLinkSchema).nullish(),\n\timages: z.array(z.string()).nullish(),\n\tsuggestedAction: SuggestedActionSchema.nullish(),\n});\nexport type AgentChatMessage = z.infer<typeof AgentChatMessageSchema>;\n","import { type AgentWireEvent, AgentWireEventSchema } from \"./protocol\";\n\n/** A token/thinking event normalized to expose an incremental `delta`. This\n * backend is DELTA-only on every path, so `delta === text` — there is no\n * cumulative reconciliation (a `startsWith` heuristic corrupts real output). */\nexport type StreamEvent =\n\t| (Extract<AgentWireEvent, { type: \"token\" }> & { delta: string })\n\t| (Extract<AgentWireEvent, { type: \"thinking\" }> & { delta: string })\n\t| Exclude<AgentWireEvent, { type: \"token\" | \"thinking\" }>;\n\nexport async function* parseSseStream(\n\tbody: ReadableStream<Uint8Array>,\n): AsyncGenerator<StreamEvent> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\n\t\t\t// Drain every complete `\\n\\n`-delimited frame in the buffer. `const idx`\n\t\t\t// is recomputed each iteration (no assignment-in-`while`-head: that trips\n\t\t\t// biome `noAssignInExpressions`, a non-auto-fixable CI error).\n\t\t\twhile (true) {\n\t\t\t\tconst idx = buffer.indexOf(\"\\n\\n\");\n\t\t\t\tif (idx < 0) break;\n\t\t\t\tconst rawEvent = buffer.slice(0, idx);\n\t\t\t\tbuffer = buffer.slice(idx + 2);\n\n\t\t\t\tconst lines = rawEvent.split(\"\\n\");\n\t\t\t\tconst eventLine = lines.find((l) => l.startsWith(\"event:\"));\n\t\t\t\tconst dataLine = lines.find((l) => l.startsWith(\"data:\"));\n\t\t\t\tif (!dataLine) continue;\n\t\t\t\tconst payloadText = dataLine.replace(/^data:\\s?/, \"\");\n\n\t\t\t\t// NestJS surfaces stream errors as `event: error\\ndata: <plain string>`\n\t\t\t\t// (NON-JSON). Detect it BEFORE JSON.parse so it isn't swallowed.\n\t\t\t\tif (eventLine?.replace(/^event:\\s?/, \"\") === \"error\") {\n\t\t\t\t\tyield { type: \"error\", message: payloadText };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet json: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(payloadText);\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst parsed = AgentWireEventSchema.safeParse(json);\n\t\t\t\tif (!parsed.success) {\n\t\t\t\t\t// Never SILENTLY drop a money-path frame: if it looks like a sources\n\t\t\t\t\t// event carrying pendingAction, fail loud instead of losing a trade.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(json as { type?: string })?.type === \"sources\" &&\n\t\t\t\t\t\t(json as { pendingAction?: unknown })?.pendingAction\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tmessage: \"malformed sources frame with pendingAction\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst ev = parsed.data;\n\t\t\t\tif (ev.type === \"token\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else if (ev.type === \"thinking\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else {\n\t\t\t\t\tyield ev;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\treader.cancel().catch(() => undefined);\n\t}\n}\n","import { AgentChatError, errorFromStatus } from \"./errors\";\nimport { type AgentChatClientConfig, createHttp, type Http } from \"./http\";\nimport {\n\ttype AgentChatMessage,\n\ttype CancelResult,\n\tCancelResultSchema,\n\ttype ChatMode,\n\ttype ChatResult,\n\tChatResultSchema,\n\ttype ConfirmResult,\n\tConfirmResultSchema,\n\ttype LinkStatus,\n\tLinkStatusSchema,\n\tPendingActionSchema,\n\ttype SelfLinkResult,\n\tSelfLinkResultSchema,\n\ttype SelfUnlinkResult,\n\tSelfUnlinkResultSchema,\n\ttype Session,\n\ttype SessionListItem,\n\ttype SessionSummary,\n\ttype SetConfirmationsResult,\n\tSetConfirmationsResultSchema,\n\ttype SetExecutionResult,\n\tSetExecutionResultSchema,\n\ttype TradeSettings,\n\tTradeSettingsSchema,\n} from \"./protocol\";\nimport { parseSseStream, type StreamEvent } from \"./stream\";\n\n/** Parse a ChatResult but NEVER throw away a real `pendingAction` on metadata\n * drift: on a parse failure, fall back to a minimal result that preserves\n * `finalText` + `pendingAction` rather than rejecting the whole turn. */\nfunction parseChatResult(raw: unknown): ChatResult {\n\tconst parsed = ChatResultSchema.safeParse(raw);\n\tif (parsed.success) return parsed.data;\n\tconst r = raw as { finalText?: unknown; pendingAction?: unknown };\n\t// Salvage finalText, but NEVER fabricate a ticket: keep pendingAction only if\n\t// it INDEPENDENTLY validates — a corrupt ticket is dropped, never handed to\n\t// confirmTicket() (the money endpoint).\n\tconst pa = PendingActionSchema.safeParse(r?.pendingAction);\n\treturn {\n\t\tfinalText: typeof r?.finalText === \"string\" ? r.finalText : \"\",\n\t\timages: [],\n\t\tsuggestedAction: null,\n\t\tpendingAction: pa.success ? pa.data : null,\n\t};\n}\n\nfunction assembleResult(\n\tsessionId: string,\n\tfinalText: string,\n\tsources: Extract<StreamEvent, { type: \"sources\" }> | undefined,\n): ChatResult {\n\treturn parseChatResult({\n\t\tfinalText,\n\t\tsessionId,\n\t\tresearchAnnotations: sources?.researchAnnotations,\n\t\ttwitterSources: sources?.twitterSources,\n\t\ttradeLinks: sources?.tradeLinks,\n\t\timages: sources?.images ?? [],\n\t\tsuggestedAction: sources?.suggestedAction ?? null,\n\t\tpendingAction: sources?.pendingAction ?? null,\n\t});\n}\n\nexport class AgentChatClient {\n\tprivate readonly http: Http;\n\n\tconstructor(config: AgentChatClientConfig) {\n\t\tthis.http = createHttp(config);\n\t}\n\n\tlistSessions(): Promise<SessionListItem[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions\");\n\t}\n\n\tlistSessionSummaries(): Promise<SessionSummary[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions/summary\");\n\t}\n\n\tcreateSession(): Promise<{ id: string }> {\n\t\treturn this.http.json(\"POST\", \"/chat/sessions\");\n\t}\n\n\tgetSession(sessionId: string): Promise<Session> {\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tasync deleteSession(sessionId: string): Promise<void> {\n\t\tawait this.http.json(\n\t\t\t\"DELETE\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tgetMessages(\n\t\tsessionId: string,\n\t\topts?: { limit?: number; before?: string },\n\t): Promise<AgentChatMessage[]> {\n\t\tconst params = new URLSearchParams();\n\t\tif (opts?.limit !== undefined) params.set(\"limit\", String(opts.limit));\n\t\tif (opts?.before) params.set(\"before\", opts.before);\n\t\tconst qs = params.toString();\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}/messages${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t}\n\n\t/** Stream a turn. Yields token/thinking/status/sources events, then a\n\t * synthetic `{type:'done', result}` assembled from accumulated token deltas +\n\t * the final `sources` payload (the SSE wire has no `done` frame). Throws an\n\t * `AgentChatError` if the backend emits a mid-stream `error` frame. */\n\tasync *streamChat(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t\tsignal?: AbortSignal;\n\t\t/** CTA callback — set when the user clicks a suggested-action option; the\n\t\t * agent rebuilds the turn from this context server-side. */\n\t\tcta?: { previousText: string; question: string; selectedOption: string };\n\t}): AsyncGenerator<StreamEvent | { type: \"done\"; result: ChatResult }> {\n\t\tconst params = new URLSearchParams({\n\t\t\tmessage: args.message,\n\t\t\tsessionId: args.sessionId,\n\t\t\tmode: args.mode ?? \"standard\",\n\t\t});\n\t\tif (args.cta) {\n\t\t\tparams.set(\"suggestedActionPreviousText\", args.cta.previousText);\n\t\t\tparams.set(\"suggestedActionQuestion\", args.cta.question);\n\t\t\tparams.set(\"suggestedActionSelectedOption\", args.cta.selectedOption);\n\t\t}\n\t\tconst headers = await this.http.authHeaders();\n\t\theaders.Accept = \"text/event-stream\";\n\t\tconst res = await this.http.fetch(\n\t\t\tthis.http.buildUrl(`/chat/stream?${params.toString()}`),\n\t\t\t{ method: \"GET\", headers, signal: args.signal },\n\t\t);\n\t\tif (!res.ok || !res.body) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\n\t\tlet finalText = \"\";\n\t\tlet sources: Extract<StreamEvent, { type: \"sources\" }> | undefined;\n\t\tfor await (const ev of parseSseStream(res.body)) {\n\t\t\tif (ev.type === \"error\") {\n\t\t\t\tthrow new AgentChatError(ev.message ?? \"Agent stream error\");\n\t\t\t}\n\t\t\tif (ev.type === \"token\") finalText += ev.delta;\n\t\t\tif (ev.type === \"sources\") sources = ev;\n\t\t\tyield ev;\n\t\t}\n\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\tresult: assembleResult(args.sessionId, finalText, sources),\n\t\t};\n\t}\n\n\t/** Sync send (POST /chat). Prefer `streamChat` for UX. */\n\tsendMessage(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t}): Promise<ChatResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/chat\", {\n\t\t\t\tmessage: args.message,\n\t\t\t\tsessionId: args.sessionId,\n\t\t\t\tmode: args.mode ?? \"standard\",\n\t\t\t})\n\t\t\t.then(parseChatResult);\n\t}\n\n\tconfirmTicket(ticketId: string): Promise<ConfirmResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/confirm`,\n\t\t\t)\n\t\t\t.then((raw) => ConfirmResultSchema.parse(raw));\n\t}\n\n\tcancelTicket(ticketId: string): Promise<CancelResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/cancel`,\n\t\t\t)\n\t\t\t.then((raw) => CancelResultSchema.parse(raw));\n\t}\n\n\tsetTradeConfirmations(enabled: boolean): Promise<SetConfirmationsResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/settings\", { enabled })\n\t\t\t.then((raw) => SetConfirmationsResultSchema.parse(raw));\n\t}\n\n\t/** Read both trade toggles for the caller wallet: the master execution switch\n\t * and the confirm-before-write preference. */\n\tgetTradeSettings(): Promise<TradeSettings> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/trade/tickets/settings\")\n\t\t\t.then((raw) => TradeSettingsSchema.parse(raw));\n\t}\n\n\t/** Flip the caller's master execution switch. `false` opts the wallet out of\n\t * all money-moving writes; `true` restores the default-ON state. */\n\tsetTradeExecution(enabled: boolean): Promise<SetExecutionResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/execution\", { enabled })\n\t\t\t.then((raw) => SetExecutionResultSchema.parse(raw));\n\t}\n\n\t/** Whether the caller's wallet is linked to the agent (i.e. the agent can\n\t * execute trades for it). Backend-verified — don't cache this locally. */\n\tgetLinkStatus(): Promise<LinkStatus> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => LinkStatusSchema.parse(raw));\n\t}\n\n\t/** Link the caller's wallet: the agent mints a Pear API key server-side AS\n\t * the caller (their token is forwarded) — the key never exists client-side.\n\t * Idempotent when already linked; `force` re-mints (recovery), `code` binds\n\t * a Telegram identity (replaces the legacy secret-based flow). */\n\tlinkWallet(opts?: {\n\t\tforce?: boolean;\n\t\tcode?: string;\n\t}): Promise<SelfLinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/auth/link-wallet/self\", opts ?? {})\n\t\t\t.then((raw) => SelfLinkResultSchema.parse(raw));\n\t}\n\n\t/** Unlink the caller's wallet — the agent loses trade authority. */\n\tunlinkWallet(): Promise<SelfUnlinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"DELETE\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => SelfUnlinkResultSchema.parse(raw));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/protocol/primitives.ts","../src/protocol/tickets.ts","../src/protocol/events.ts","../src/protocol/link.ts","../src/protocol/messages.ts","../src/stream.ts","../src/client.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["export class AgentChatError extends Error {\n\treadonly status?: number;\n\treadonly body?: string;\n\tconstructor(message: string, status?: number, body?: string) {\n\t\tsuper(message);\n\t\tthis.name = new.target.name;\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport class AuthError extends AgentChatError {}\nexport class ForbiddenError extends AgentChatError {}\nexport class ConflictError extends AgentChatError {}\nexport class TicketExpiredError extends AgentChatError {}\nexport class RateLimitError extends AgentChatError {}\nexport class ServerError extends AgentChatError {}\n\nexport function errorFromStatus(status: number, body: string): AgentChatError {\n\tconst msg = `Agent API error ${status}: ${body}`;\n\tif (status === 401) return new AuthError(msg, status, body);\n\tif (status === 403) return new ForbiddenError(msg, status, body);\n\tif (status === 409) return new ConflictError(msg, status, body);\n\tif (status === 410) return new TicketExpiredError(msg, status, body);\n\tif (status === 429) return new RateLimitError(msg, status, body);\n\tif (status >= 500) return new ServerError(msg, status, body);\n\treturn new AgentChatError(msg, status, body);\n}\n","import { errorFromStatus } from \"./errors\";\n\nexport interface AgentChatClientConfig {\n\t/** Base URL of the agent API, e.g. https://hl-v2-agent.pearprotocol.io */\n\tbaseUrl: string;\n\t/** Returns the freshest auth token (handles rotation). Required. */\n\tgetToken: () => string | Promise<string>;\n\t/** Sent as `X-Auth-Token-Version`. Defaults to \"v2\". */\n\ttokenVersion?: \"v2\" | \"v3\";\n\t/** Optional fetch override (SSR / tests). Defaults to global fetch. */\n\tfetch?: typeof fetch;\n}\n\nexport interface Http {\n\tbuildUrl: (path: string) => string;\n\tauthHeaders: () => Promise<Record<string, string>>;\n\t/** The resolved fetch — the single authoritative one (JSON + SSE share it). */\n\tfetch: typeof fetch;\n\tjson: <T>(method: string, path: string, body?: unknown) => Promise<T>;\n}\n\nexport function createHttp(config: AgentChatClientConfig): Http {\n\tconst baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n\tconst tokenVersion = config.tokenVersion ?? \"v2\";\n\tconst rawFetch = config.fetch ?? globalThis.fetch;\n\tif (!rawFetch) {\n\t\tthrow new Error(\"No fetch available — pass `fetch` in the client config\");\n\t}\n\t// Bind to globalThis. `fetch` is exposed on the Http object and the SSE path\n\t// invokes it as `http.fetch(...)` — called as a method, the browser's native\n\t// fetch runs with `this === the http object` and throws \"Illegal invocation\".\n\t// The JSON path calls it as a bare `doFetch(...)` (this === undefined), which\n\t// is why createSession worked but streamChat didn't. Binding pins `this`.\n\tconst doFetch: typeof fetch = rawFetch.bind(globalThis);\n\n\tconst buildUrl = (path: string): string =>\n\t\t`${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n\n\tconst authHeaders = async (): Promise<Record<string, string>> => {\n\t\tconst token = await config.getToken();\n\t\treturn {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\"X-Auth-Token-Version\": tokenVersion,\n\t\t};\n\t};\n\n\tconst json = async <T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> => {\n\t\tconst headers = await authHeaders();\n\t\tif (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\t\tconst res = await doFetch(buildUrl(path), {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: body !== undefined ? JSON.stringify(body) : undefined,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\t\tif (res.status === 204) return undefined as T;\n\t\tconst text = await res.text();\n\t\treturn (text ? JSON.parse(text) : undefined) as T;\n\t};\n\n\treturn { buildUrl, authHeaders, fetch: doFetch, json };\n}\n","import { z } from \"zod\";\n\n/** A Pear trade link surfaced with an agent reply. `platform` is left an open\n * string (not an enum) so a new venue doesn't break older SDK consumers. */\nexport const TradeLinkSchema = z.object({\n\tlink: z.string(),\n\tplatform: z.string(),\n\tlabel: z.string(),\n});\nexport type TradeLink = z.infer<typeof TradeLinkSchema>;\n\nexport const TwitterSourceSchema = z.object({\n\tauthor: z.string(),\n\ttweetUrl: z.string(),\n\tpublishedAt: z.string(),\n});\nexport type TwitterSource = z.infer<typeof TwitterSourceSchema>;\n\n/** Research web-citation. The research node emits a bare URL **string** on the\n * wire (research/agent.ts maps annotations -> `url_citation.url`); a future\n * object form is also accepted and normalized to `{ url, ... }`. */\nconst CitationObjectSchema = z.object({\n\turl: z.string(),\n\tstart_index: z.number().optional(),\n\tend_index: z.number().optional(),\n\ttitle: z.string().optional(),\n});\nexport const CitationSourceSchema = z.union([\n\tz.string().transform((url) => ({ url })),\n\tCitationObjectSchema,\n]);\nexport type CitationSource = z.infer<typeof CitationSourceSchema>;\n\nexport const SuggestedActionSchema = z.object({\n\tquestion: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type SuggestedAction = z.infer<typeof SuggestedActionSchema>;\n\nexport const ChatModeSchema = z.enum([\"standard\", \"advanced\"]);\nexport type ChatMode = z.infer<typeof ChatModeSchema>;\n\n/** The Pear client surface a chat request declares — drives per-surface behavior\n * server-side (analysis universe / execution policy). REQUIRED on the wire. The\n * Telegram surfaces (tg_dm / tg_group) are resolved server-side from the TG\n * session and are NOT client-declarable, so they're intentionally absent here. */\nexport const ChatSurfaceSchema = z.enum([\n\t\"pear_v3\",\n\t\"pear_pro\",\n\t\"base_mini\",\n\t\"web\",\n]);\nexport type ChatSurface = z.infer<typeof ChatSurfaceSchema>;\n","import { z } from \"zod\";\n\n/** Known ticket actions. Used for typing; the wire `action` field is parsed\n * permissively (plain string) elsewhere for forward-compat. */\nexport const TicketActionSchema = z.enum([\n\t\"open_position\",\n\t\"close_position\",\n\t\"close_all_positions\",\n\t\"adjust_position\",\n\t\"adjust_advance_position\",\n\t\"reverse_position\",\n\t\"rebalance_position\",\n\t\"set_risk_parameters\",\n]);\nexport type TicketAction = z.infer<typeof TicketActionSchema>;\n\nexport const TicketStatusSchema = z.enum([\n\t\"PENDING\",\n\t\"EXECUTING\",\n\t\"EXECUTED\",\n\t\"CANCELLED\",\n\t\"FAILED\",\n]);\nexport type TicketStatus = z.infer<typeof TicketStatusSchema>;\n\n/** Surfaced on a turn when a money-moving write was FROZEN (nothing executed).\n * `action` is a plain string (forward-compatible); compare against\n * `TicketActionSchema.options` if you need to switch on known actions. */\nexport const PendingActionSchema = z.object({\n\tticketId: z.string(),\n\taction: z.string(),\n\tconsequence: z.string(),\n\toptions: z.array(z.string()),\n});\nexport type PendingAction = z.infer<typeof PendingActionSchema>;\n\n/** Response of POST /trade/tickets/:id/confirm. Strict on the money fields,\n * loose (passthrough) on the action-specific `result` payload. `status` is\n * intentionally narrowed to the two TERMINAL confirm outcomes this endpoint\n * returns; widen to `TicketStatusSchema` if the BE can ever return another. */\nexport const ConfirmResultSchema = z.looseObject({\n\tok: z.boolean(),\n\tstatus: z.enum([\"EXECUTED\", \"FAILED\"]),\n\t// `.optional()` is load-bearing: in zod v4 `z.unknown()` is NO LONGER\n\t// implicitly optional, so dropping it would make these fields required.\n\tresult: z.unknown().optional(),\n\tpositionsSnapshot: z.unknown().optional(),\n\timages: z.array(z.string()).optional(),\n});\nexport type ConfirmResult = z.infer<typeof ConfirmResultSchema>;\n\nexport const CancelResultSchema = z.object({\n\tok: z.literal(true),\n\tstatus: z.literal(\"CANCELLED\"),\n});\nexport type CancelResult = z.infer<typeof CancelResultSchema>;\n\nexport const SetConfirmationsResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetConfirmationsResult = z.infer<\n\ttypeof SetConfirmationsResultSchema\n>;\n\n/** Response of GET /trade/tickets/settings — the caller's two independent trade\n * toggles. `executionEnabled` is the master execution switch (any write at all);\n * `confirmationsEnabled` is the confirm-before-write preference. */\nexport const TradeSettingsSchema = z.object({\n\texecutionEnabled: z.boolean(),\n\tconfirmationsEnabled: z.boolean(),\n});\nexport type TradeSettings = z.infer<typeof TradeSettingsSchema>;\n\n/** Response of POST /trade/tickets/execution — the new master-switch state. */\nexport const SetExecutionResultSchema = z.object({\n\tok: z.boolean(),\n\tenabled: z.boolean(),\n});\nexport type SetExecutionResult = z.infer<typeof SetExecutionResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\nimport { PendingActionSchema } from \"./tickets\";\n\nexport const TokenEventSchema = z.object({\n\ttype: z.literal(\"token\"),\n\ttext: z.string(),\n});\n// `thinking` is emitted by ADVANCED mode only (the standard pipeline doesn't).\nexport const ThinkingEventSchema = z.object({\n\ttype: z.literal(\"thinking\"),\n\ttext: z.string(),\n});\nexport const StatusEventSchema = z.object({\n\ttype: z.literal(\"status\"),\n\ttext: z.string(),\n\tphase: z.enum([\"start\", \"end\"]).optional(),\n\tnode: z.string().optional(),\n});\nexport const SourcesEventSchema = z.object({\n\ttype: z.literal(\"sources\"),\n\t// `.catch` on every NON-critical field so a malformed metadata array can\n\t// never sink the whole event — `pendingAction` (a staged money-moving trade)\n\t// rides on this same frame and MUST always survive.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).catch([]).optional(), // resolved URL strings\n\tsuggestedAction: SuggestedActionSchema.nullish().catch(null),\n\t// pendingAction is deliberately NOT `.catch`-ed: a corrupt ticket must reject,\n\t// never be fabricated.\n\tpendingAction: PendingActionSchema.nullish(),\n});\nexport const ErrorEventSchema = z.object({\n\ttype: z.literal(\"error\"),\n\tmessage: z.string().optional(),\n});\n\n/** The discriminated union of events the SSE wire delivers. Parse each event\n * with `.safeParse`; on failure (unknown/legacy `cycle` etc.) IGNORE it — do\n * not throw. */\nexport const AgentWireEventSchema = z.discriminatedUnion(\"type\", [\n\tTokenEventSchema,\n\tThinkingEventSchema,\n\tStatusEventSchema,\n\tSourcesEventSchema,\n\tErrorEventSchema,\n]);\nexport type AgentWireEvent = z.infer<typeof AgentWireEventSchema>;\n\n/** Final assembled turn — the shape of `POST /chat` AND the SDK's synthetic\n * `done` event (the SSE wire has no `done` frame; the SDK assembles it). */\nexport const ChatResultSchema = z.object({\n\tfinalText: z.string(),\n\tsessionId: z.string().optional(),\n\t// Same money-path guard as SourcesEventSchema: metadata degrades to [] / null\n\t// on drift so a hard `.parse` can never throw away a real `pendingAction`.\n\tresearchAnnotations: z.array(CitationSourceSchema).catch([]).optional(),\n\ttwitterSources: z.array(TwitterSourceSchema).catch([]).optional(),\n\ttradeLinks: z.array(TradeLinkSchema).catch([]).optional(),\n\timages: z.array(z.string()).default([]),\n\tsuggestedAction: SuggestedActionSchema.nullable().default(null).catch(null),\n\tpendingAction: PendingActionSchema.nullable().default(null),\n});\nexport type ChatResult = z.infer<typeof ChatResultSchema>;\n\n/** The RAW wire union plus a synthetic terminal `done`. NOTE: the SDK actually\n * emits a NORMALIZED `StreamEvent` (token/thinking carry a `delta`) defined in\n * the SDK's stream module; this `AgentEvent` is the pre-normalization shape. */\nexport type AgentEvent = AgentWireEvent | { type: \"done\"; result: ChatResult };\n","import { z } from \"zod\";\n\n/** Response of GET /auth/link-wallet/self — whether the caller's wallet has a\n * WalletLink (i.e. the agent holds an API key and can execute trades). */\nexport const LinkStatusSchema = z.object({\n\tlinked: z.boolean(),\n\twalletAddress: z.string(),\n});\nexport type LinkStatus = z.infer<typeof LinkStatusSchema>;\n\n/** Response of POST /auth/link-wallet/self. `created` is true only when this\n * call minted a new key (false on the idempotent already-linked path). */\nexport const SelfLinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(true),\n\tcreated: z.boolean(),\n});\nexport type SelfLinkResult = z.infer<typeof SelfLinkResultSchema>;\n\n/** Response of DELETE /auth/link-wallet/self. */\nexport const SelfUnlinkResultSchema = z.object({\n\tok: z.boolean(),\n\tlinked: z.literal(false),\n});\nexport type SelfUnlinkResult = z.infer<typeof SelfUnlinkResultSchema>;\n","import { z } from \"zod\";\nimport {\n\tCitationSourceSchema,\n\tSuggestedActionSchema,\n\tTradeLinkSchema,\n\tTwitterSourceSchema,\n} from \"./primitives\";\n\nexport const SessionListItemSchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(), // ISO (Date serialized over the wire)\n});\nexport type SessionListItem = z.infer<typeof SessionListItemSchema>;\n\nexport const SessionSummarySchema = z.object({\n\tid: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n\tfirstUserMessage: z.string().optional(),\n\tlastUserMessage: z.string().optional(),\n\tlastUserMessageAt: z.string().optional(),\n\tlastAssistantMessageAt: z.string().optional(),\n});\nexport type SessionSummary = z.infer<typeof SessionSummarySchema>;\n\nexport const SessionSchema = z.object({\n\tid: z.string(),\n\tuserId: z.string(),\n\tappType: z.string(),\n\tcreatedAt: z.string(),\n});\nexport type Session = z.infer<typeof SessionSchema>;\n\n/** A persisted chat message (history). `images` are pre-resolved URL strings.\n * `z.looseObject` keeps unknown future fields instead of stripping them. */\nexport const AgentChatMessageSchema = z.looseObject({\n\tid: z.string(),\n\trole: z.string(),\n\tcontent: z.string(),\n\tcreatedAt: z.string(),\n\tresearchAnnotations: z.array(CitationSourceSchema).nullish(),\n\ttwitterSources: z.array(TwitterSourceSchema).nullish(),\n\ttradeLinks: z.array(TradeLinkSchema).nullish(),\n\timages: z.array(z.string()).nullish(),\n\tsuggestedAction: SuggestedActionSchema.nullish(),\n});\nexport type AgentChatMessage = z.infer<typeof AgentChatMessageSchema>;\n","import { type AgentWireEvent, AgentWireEventSchema } from \"./protocol\";\n\n/** A token/thinking event normalized to expose an incremental `delta`. This\n * backend is DELTA-only on every path, so `delta === text` — there is no\n * cumulative reconciliation (a `startsWith` heuristic corrupts real output). */\nexport type StreamEvent =\n\t| (Extract<AgentWireEvent, { type: \"token\" }> & { delta: string })\n\t| (Extract<AgentWireEvent, { type: \"thinking\" }> & { delta: string })\n\t| Exclude<AgentWireEvent, { type: \"token\" | \"thinking\" }>;\n\nexport async function* parseSseStream(\n\tbody: ReadableStream<Uint8Array>,\n): AsyncGenerator<StreamEvent> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\n\t\t\t// Drain every complete `\\n\\n`-delimited frame in the buffer. `const idx`\n\t\t\t// is recomputed each iteration (no assignment-in-`while`-head: that trips\n\t\t\t// biome `noAssignInExpressions`, a non-auto-fixable CI error).\n\t\t\twhile (true) {\n\t\t\t\tconst idx = buffer.indexOf(\"\\n\\n\");\n\t\t\t\tif (idx < 0) break;\n\t\t\t\tconst rawEvent = buffer.slice(0, idx);\n\t\t\t\tbuffer = buffer.slice(idx + 2);\n\n\t\t\t\tconst lines = rawEvent.split(\"\\n\");\n\t\t\t\tconst eventLine = lines.find((l) => l.startsWith(\"event:\"));\n\t\t\t\tconst dataLine = lines.find((l) => l.startsWith(\"data:\"));\n\t\t\t\tif (!dataLine) continue;\n\t\t\t\tconst payloadText = dataLine.replace(/^data:\\s?/, \"\");\n\n\t\t\t\t// NestJS surfaces stream errors as `event: error\\ndata: <plain string>`\n\t\t\t\t// (NON-JSON). Detect it BEFORE JSON.parse so it isn't swallowed.\n\t\t\t\tif (eventLine?.replace(/^event:\\s?/, \"\") === \"error\") {\n\t\t\t\t\tyield { type: \"error\", message: payloadText };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet json: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(payloadText);\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst parsed = AgentWireEventSchema.safeParse(json);\n\t\t\t\tif (!parsed.success) {\n\t\t\t\t\t// Never SILENTLY drop a money-path frame: if it looks like a sources\n\t\t\t\t\t// event carrying pendingAction, fail loud instead of losing a trade.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(json as { type?: string })?.type === \"sources\" &&\n\t\t\t\t\t\t(json as { pendingAction?: unknown })?.pendingAction\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tmessage: \"malformed sources frame with pendingAction\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst ev = parsed.data;\n\t\t\t\tif (ev.type === \"token\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else if (ev.type === \"thinking\") {\n\t\t\t\t\tyield { ...ev, delta: ev.text };\n\t\t\t\t} else {\n\t\t\t\t\tyield ev;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\treader.cancel().catch(() => undefined);\n\t}\n}\n","import { AgentChatError, errorFromStatus } from \"./errors\";\nimport { type AgentChatClientConfig, createHttp, type Http } from \"./http\";\nimport {\n\ttype AgentChatMessage,\n\ttype CancelResult,\n\tCancelResultSchema,\n\ttype ChatMode,\n\ttype ChatResult,\n\tChatResultSchema,\n\ttype ChatSurface,\n\ttype ConfirmResult,\n\tConfirmResultSchema,\n\ttype LinkStatus,\n\tLinkStatusSchema,\n\tPendingActionSchema,\n\ttype SelfLinkResult,\n\tSelfLinkResultSchema,\n\ttype SelfUnlinkResult,\n\tSelfUnlinkResultSchema,\n\ttype Session,\n\ttype SessionListItem,\n\ttype SessionSummary,\n\ttype SetConfirmationsResult,\n\tSetConfirmationsResultSchema,\n\ttype SetExecutionResult,\n\tSetExecutionResultSchema,\n\ttype TradeSettings,\n\tTradeSettingsSchema,\n} from \"./protocol\";\nimport { parseSseStream, type StreamEvent } from \"./stream\";\n\n/** Parse a ChatResult but NEVER throw away a real `pendingAction` on metadata\n * drift: on a parse failure, fall back to a minimal result that preserves\n * `finalText` + `pendingAction` rather than rejecting the whole turn. */\nfunction parseChatResult(raw: unknown): ChatResult {\n\tconst parsed = ChatResultSchema.safeParse(raw);\n\tif (parsed.success) return parsed.data;\n\tconst r = raw as { finalText?: unknown; pendingAction?: unknown };\n\t// Salvage finalText, but NEVER fabricate a ticket: keep pendingAction only if\n\t// it INDEPENDENTLY validates — a corrupt ticket is dropped, never handed to\n\t// confirmTicket() (the money endpoint).\n\tconst pa = PendingActionSchema.safeParse(r?.pendingAction);\n\treturn {\n\t\tfinalText: typeof r?.finalText === \"string\" ? r.finalText : \"\",\n\t\timages: [],\n\t\tsuggestedAction: null,\n\t\tpendingAction: pa.success ? pa.data : null,\n\t};\n}\n\nfunction assembleResult(\n\tsessionId: string,\n\tfinalText: string,\n\tsources: Extract<StreamEvent, { type: \"sources\" }> | undefined,\n): ChatResult {\n\treturn parseChatResult({\n\t\tfinalText,\n\t\tsessionId,\n\t\tresearchAnnotations: sources?.researchAnnotations,\n\t\ttwitterSources: sources?.twitterSources,\n\t\ttradeLinks: sources?.tradeLinks,\n\t\timages: sources?.images ?? [],\n\t\tsuggestedAction: sources?.suggestedAction ?? null,\n\t\tpendingAction: sources?.pendingAction ?? null,\n\t});\n}\n\nexport class AgentChatClient {\n\tprivate readonly http: Http;\n\n\tconstructor(config: AgentChatClientConfig) {\n\t\tthis.http = createHttp(config);\n\t}\n\n\tlistSessions(): Promise<SessionListItem[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions\");\n\t}\n\n\tlistSessionSummaries(): Promise<SessionSummary[]> {\n\t\treturn this.http.json(\"GET\", \"/chat/sessions/summary\");\n\t}\n\n\tcreateSession(): Promise<{ id: string }> {\n\t\treturn this.http.json(\"POST\", \"/chat/sessions\");\n\t}\n\n\tgetSession(sessionId: string): Promise<Session> {\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tasync deleteSession(sessionId: string): Promise<void> {\n\t\tawait this.http.json(\n\t\t\t\"DELETE\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}`,\n\t\t);\n\t}\n\n\tgetMessages(\n\t\tsessionId: string,\n\t\topts?: { limit?: number; before?: string },\n\t): Promise<AgentChatMessage[]> {\n\t\tconst params = new URLSearchParams();\n\t\tif (opts?.limit !== undefined) params.set(\"limit\", String(opts.limit));\n\t\tif (opts?.before) params.set(\"before\", opts.before);\n\t\tconst qs = params.toString();\n\t\treturn this.http.json(\n\t\t\t\"GET\",\n\t\t\t`/chat/sessions/${encodeURIComponent(sessionId)}/messages${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t}\n\n\t/** Stream a turn. Yields token/thinking/status/sources events, then a\n\t * synthetic `{type:'done', result}` assembled from accumulated token deltas +\n\t * the final `sources` payload (the SSE wire has no `done` frame). Throws an\n\t * `AgentChatError` if the backend emits a mid-stream `error` frame. */\n\tasync *streamChat(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t\t/** Declares the client surface (pear_v3 / pear_pro / base_mini / …). Required —\n\t\t * the API rejects requests without a valid surface. Drives per-surface behavior. */\n\t\tsurface: ChatSurface;\n\t\tsignal?: AbortSignal;\n\t\t/** CTA callback — set when the user clicks a suggested-action option; the\n\t\t * agent rebuilds the turn from this context server-side. */\n\t\tcta?: { previousText: string; question: string; selectedOption: string };\n\t}): AsyncGenerator<StreamEvent | { type: \"done\"; result: ChatResult }> {\n\t\tconst params = new URLSearchParams({\n\t\t\tmessage: args.message,\n\t\t\tsessionId: args.sessionId,\n\t\t\tmode: args.mode ?? \"standard\",\n\t\t});\n\t\tparams.set(\"surface\", args.surface);\n\t\tif (args.cta) {\n\t\t\tparams.set(\"suggestedActionPreviousText\", args.cta.previousText);\n\t\t\tparams.set(\"suggestedActionQuestion\", args.cta.question);\n\t\t\tparams.set(\"suggestedActionSelectedOption\", args.cta.selectedOption);\n\t\t}\n\t\tconst headers = await this.http.authHeaders();\n\t\theaders.Accept = \"text/event-stream\";\n\t\tconst res = await this.http.fetch(\n\t\t\tthis.http.buildUrl(`/chat/stream?${params.toString()}`),\n\t\t\t{ method: \"GET\", headers, signal: args.signal },\n\t\t);\n\t\tif (!res.ok || !res.body) {\n\t\t\tthrow errorFromStatus(res.status, await res.text().catch(() => \"\"));\n\t\t}\n\n\t\tlet finalText = \"\";\n\t\tlet sources: Extract<StreamEvent, { type: \"sources\" }> | undefined;\n\t\tfor await (const ev of parseSseStream(res.body)) {\n\t\t\tif (ev.type === \"error\") {\n\t\t\t\tthrow new AgentChatError(ev.message ?? \"Agent stream error\");\n\t\t\t}\n\t\t\tif (ev.type === \"token\") finalText += ev.delta;\n\t\t\tif (ev.type === \"sources\") sources = ev;\n\t\t\tyield ev;\n\t\t}\n\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\tresult: assembleResult(args.sessionId, finalText, sources),\n\t\t};\n\t}\n\n\t/** Sync send (POST /chat). Prefer `streamChat` for UX. */\n\tsendMessage(args: {\n\t\tsessionId: string;\n\t\tmessage: string;\n\t\tmode?: ChatMode;\n\t\t/** Required — the API rejects requests without a valid surface. */\n\t\tsurface: ChatSurface;\n\t}): Promise<ChatResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/chat\", {\n\t\t\t\tmessage: args.message,\n\t\t\t\tsessionId: args.sessionId,\n\t\t\t\tmode: args.mode ?? \"standard\",\n\t\t\t\tsurface: args.surface,\n\t\t\t})\n\t\t\t.then(parseChatResult);\n\t}\n\n\tconfirmTicket(ticketId: string): Promise<ConfirmResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/confirm`,\n\t\t\t)\n\t\t\t.then((raw) => ConfirmResultSchema.parse(raw));\n\t}\n\n\tcancelTicket(ticketId: string): Promise<CancelResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\n\t\t\t\t\"POST\",\n\t\t\t\t`/trade/tickets/${encodeURIComponent(ticketId)}/cancel`,\n\t\t\t)\n\t\t\t.then((raw) => CancelResultSchema.parse(raw));\n\t}\n\n\tsetTradeConfirmations(enabled: boolean): Promise<SetConfirmationsResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/settings\", { enabled })\n\t\t\t.then((raw) => SetConfirmationsResultSchema.parse(raw));\n\t}\n\n\t/** Read both trade toggles for the caller wallet: the master execution switch\n\t * and the confirm-before-write preference. */\n\tgetTradeSettings(): Promise<TradeSettings> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/trade/tickets/settings\")\n\t\t\t.then((raw) => TradeSettingsSchema.parse(raw));\n\t}\n\n\t/** Flip the caller's master execution switch. `false` opts the wallet out of\n\t * all money-moving writes; `true` restores the default-ON state. */\n\tsetTradeExecution(enabled: boolean): Promise<SetExecutionResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/trade/tickets/execution\", { enabled })\n\t\t\t.then((raw) => SetExecutionResultSchema.parse(raw));\n\t}\n\n\t/** Whether the caller's wallet is linked to the agent (i.e. the agent can\n\t * execute trades for it). Backend-verified — don't cache this locally. */\n\tgetLinkStatus(): Promise<LinkStatus> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"GET\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => LinkStatusSchema.parse(raw));\n\t}\n\n\t/** Link the caller's wallet: the agent mints a Pear API key server-side AS\n\t * the caller (their token is forwarded) — the key never exists client-side.\n\t * Idempotent when already linked; `force` re-mints (recovery), `code` binds\n\t * a Telegram identity (replaces the legacy secret-based flow). */\n\tlinkWallet(opts?: {\n\t\tforce?: boolean;\n\t\tcode?: string;\n\t}): Promise<SelfLinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"POST\", \"/auth/link-wallet/self\", opts ?? {})\n\t\t\t.then((raw) => SelfLinkResultSchema.parse(raw));\n\t}\n\n\t/** Unlink the caller's wallet — the agent loses trade authority. */\n\tunlinkWallet(): Promise<SelfUnlinkResult> {\n\t\treturn this.http\n\t\t\t.json<unknown>(\"DELETE\", \"/auth/link-wallet/self\")\n\t\t\t.then((raw) => SelfUnlinkResultSchema.parse(raw));\n\t}\n}\n"]}
|
package/dist/react/index.cjs
CHANGED
|
@@ -28,6 +28,7 @@ function useAgentChat(opts) {
|
|
|
28
28
|
const [status, setStatus] = react.useState("");
|
|
29
29
|
const [statusNode, setStatusNode] = react.useState(null);
|
|
30
30
|
const [mode, setMode] = react.useState("standard");
|
|
31
|
+
const [surface, setSurface] = react.useState("pear_v3");
|
|
31
32
|
const [pendingAction, setPendingAction] = react.useState(
|
|
32
33
|
null
|
|
33
34
|
);
|
|
@@ -40,6 +41,8 @@ function useAgentChat(opts) {
|
|
|
40
41
|
const streamingRef = react.useRef(false);
|
|
41
42
|
const modeRef = react.useRef(mode);
|
|
42
43
|
modeRef.current = mode;
|
|
44
|
+
const surfaceRef = react.useRef(surface);
|
|
45
|
+
surfaceRef.current = surface;
|
|
43
46
|
const counterRef = react.useRef(0);
|
|
44
47
|
const nextId = react.useCallback(
|
|
45
48
|
() => typeof crypto !== "undefined" && "randomUUID" in crypto ? crypto.randomUUID() : `m${Date.now()}-${++counterRef.current}`,
|
|
@@ -100,6 +103,7 @@ function useAgentChat(opts) {
|
|
|
100
103
|
sessionId: sid,
|
|
101
104
|
message: text,
|
|
102
105
|
mode: modeRef.current,
|
|
106
|
+
surface: surfaceRef.current,
|
|
103
107
|
signal: controller.signal,
|
|
104
108
|
cta: cta ? {
|
|
105
109
|
previousText: cta.previousText,
|
|
@@ -219,6 +223,8 @@ function useAgentChat(opts) {
|
|
|
219
223
|
error,
|
|
220
224
|
mode,
|
|
221
225
|
setMode,
|
|
226
|
+
surface,
|
|
227
|
+
setSurface,
|
|
222
228
|
pendingAction,
|
|
223
229
|
sessionId,
|
|
224
230
|
sendMessage,
|
package/dist/react/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/useAgentChat.ts","../../src/react/useAgentSessions.ts","../../src/react/useWalletLink.ts"],"names":["useState","useRef","useCallback","useEffect","opts"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type {\n\tAgentChatMessage,\n\tChatMode,\n\tCitationSource,\n\tPendingAction,\n\tSuggestedAction,\n\tTradeLink,\n\tTwitterSource,\n} from \"../protocol\";\n\n/** A persisted message worth rendering. A user-stopped turn can persist an\n * EMPTY assistant row (no text, no attachments) — skip it on history load,\n * the same way `stop()` removes the live placeholder. */\nfunction isRenderableMessage(m: AgentChatMessage): boolean {\n\tif (m.role === \"user\") return true;\n\treturn Boolean(\n\t\tm.content ||\n\t\t\tm.images?.length ||\n\t\t\tm.tradeLinks?.length ||\n\t\t\tm.twitterSources?.length ||\n\t\t\tm.researchAnnotations?.length ||\n\t\t\tm.suggestedAction,\n\t);\n}\n\n/** Map a persisted history message to the display shape. */\nfunction toDisplayMessage(m: AgentChatMessage): DisplayMessage {\n\treturn {\n\t\tid: m.id,\n\t\ttext: m.content,\n\t\tisUser: m.role === \"user\",\n\t\ttradeLinks: m.tradeLinks ?? undefined,\n\t\timages: m.images ?? undefined,\n\t\ttwitterSources: m.twitterSources ?? undefined,\n\t\tresearchAnnotations: m.researchAnnotations ?? undefined,\n\t\tsuggestedAction: m.suggestedAction ?? undefined,\n\t};\n}\n\nexport interface DisplayMessage {\n\tid: string;\n\ttext: string;\n\tisUser: boolean;\n\tisStreaming?: boolean;\n\treasoning?: string;\n\ttradeLinks?: TradeLink[];\n\timages?: string[];\n\ttwitterSources?: TwitterSource[];\n\tresearchAnnotations?: CitationSource[];\n\tsuggestedAction?: SuggestedAction | null;\n}\n\nexport interface UseAgentChatOptions {\n\tclient: AgentChatClient;\n\t/** Optional existing session to resume. */\n\tsessionId?: string;\n}\n\nexport function useAgentChat(opts: UseAgentChatOptions) {\n\tconst { client } = opts;\n\tconst [messages, setMessages] = useState<DisplayMessage[]>([]);\n\tconst [isStreaming, setIsStreaming] = useState(false);\n\tconst [status, setStatus] = useState(\"\");\n\t// The node of the latest status event (e.g. \"research\", \"compose\") so the UI\n\t// can map to its own per-node \"thinking\" phrasing. null between turns.\n\tconst [statusNode, setStatusNode] = useState<string | null>(null);\n\tconst [mode, setMode] = useState<ChatMode>(\"standard\");\n\tconst [pendingAction, setPendingAction] = useState<PendingAction | null>(\n\t\tnull,\n\t);\n\t// Last turn's failure (null while healthy). Mid-stream errors land here too —\n\t// without it, a stream that dies after a few tokens renders a truncated\n\t// answer that looks complete and the app has no way to know.\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst sessionIdRef = useRef<string | null>(opts.sessionId ?? null);\n\tconst [sessionId, setSessionId] = useState<string | null>(\n\t\topts.sessionId ?? null,\n\t);\n\tconst abortRef = useRef<AbortController | null>(null);\n\tconst streamingRef = useRef(false);\n\tconst modeRef = useRef(mode);\n\tmodeRef.current = mode;\n\tconst counterRef = useRef(0);\n\n\t// Per-instance id factory — never a module-level counter (SSR-hostile: a\n\t// shared singleton collides across concurrent requests / hydration).\n\tconst nextId = useCallback(\n\t\t() =>\n\t\t\ttypeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n\t\t\t\t? crypto.randomUUID()\n\t\t\t\t: `m${Date.now()}-${++counterRef.current}`,\n\t\t[],\n\t);\n\n\t// Abort any in-flight stream on unmount (otherwise the SSE keeps running).\n\tuseEffect(() => () => abortRef.current?.abort(), []);\n\n\tconst patchLast = useCallback(\n\t\t(patch: (m: DisplayMessage) => DisplayMessage) => {\n\t\t\tsetMessages((prev) => {\n\t\t\t\tif (prev.length === 0) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tconst last = next[next.length - 1];\n\t\t\t\tif (!last.isUser) next[next.length - 1] = patch(last);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\t/** Abort a running stream (e.g. a Stop button). A stopped turn that\n\t * produced NOTHING removes its placeholder bubble entirely — otherwise an\n\t * empty assistant bubble (typing dots frozen) lingers in the thread. */\n\tconst stop = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetMessages((prev) => {\n\t\t\tif (prev.length === 0) return prev;\n\t\t\tconst last = prev[prev.length - 1];\n\t\t\tif (last.isUser) return prev;\n\t\t\tif (!last.text && !last.reasoning) return prev.slice(0, -1);\n\t\t\treturn [...prev.slice(0, -1), { ...last, isStreaming: false }];\n\t\t});\n\t}, []);\n\n\tconst sendMessage = useCallback(\n\t\tasync (text: string, cta?: { question: string; previousText: string }) => {\n\t\t\tif (!text.trim() || streamingRef.current) return;\n\n\t\t\tlet sid = sessionIdRef.current;\n\t\t\tif (!sid) {\n\t\t\t\tsid = (await client.createSession()).id;\n\t\t\t\tsessionIdRef.current = sid;\n\t\t\t\tsetSessionId(sid);\n\t\t\t}\n\n\t\t\tsetPendingAction(null);\n\t\t\tsetStatusNode(null);\n\t\t\tsetError(null);\n\t\t\tsetMessages((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: nextId(), text, isUser: true },\n\t\t\t\t{ id: nextId(), text: \"\", isUser: false, isStreaming: true },\n\t\t\t]);\n\t\t\tstreamingRef.current = true;\n\t\t\tsetIsStreaming(true);\n\t\t\tsetStatus(\"thinking\");\n\n\t\t\tabortRef.current?.abort();\n\t\t\tconst controller = new AbortController();\n\t\t\tabortRef.current = controller;\n\n\t\t\ttry {\n\t\t\t\tfor await (const ev of client.streamChat({\n\t\t\t\t\tsessionId: sid,\n\t\t\t\t\tmessage: text,\n\t\t\t\t\tmode: modeRef.current,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\tcta: cta\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpreviousText: cta.previousText,\n\t\t\t\t\t\t\t\tquestion: cta.question,\n\t\t\t\t\t\t\t\tselectedOption: text,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t})) {\n\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\tswitch (ev.type) {\n\t\t\t\t\t\tcase \"token\":\n\t\t\t\t\t\t\tpatchLast((m) => ({ ...m, text: m.text + ev.delta }));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"thinking\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\treasoning: (m.reasoning ?? \"\") + ev.delta,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"status\":\n\t\t\t\t\t\t\tsetStatus(ev.text);\n\t\t\t\t\t\t\tsetStatusNode(ev.node ?? null);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sources\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\ttradeLinks: ev.tradeLinks ?? m.tradeLinks,\n\t\t\t\t\t\t\t\timages: ev.images ?? m.images,\n\t\t\t\t\t\t\t\ttwitterSources: ev.twitterSources ?? m.twitterSources,\n\t\t\t\t\t\t\t\tresearchAnnotations:\n\t\t\t\t\t\t\t\t\tev.researchAnnotations ?? m.researchAnnotations,\n\t\t\t\t\t\t\t\tsuggestedAction: ev.suggestedAction ?? m.suggestedAction,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"done\":\n\t\t\t\t\t\t\tif (ev.result.pendingAction) {\n\t\t\t\t\t\t\t\tsetPendingAction(ev.result.pendingAction);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tif (\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\tcontroller.signal.aborted\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Surface the cause to the console for debugging; keep the on-screen\n\t\t\t\t// copy generic.\n\t\t\t\tconsole.error(\"[useAgentChat] stream failed:\", err);\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t...m,\n\t\t\t\t\ttext: m.text || \"Something went wrong. Try again.\",\n\t\t\t\t}));\n\t\t\t} finally {\n\t\t\t\t// Guarded: after stop() → sendMessage(next), this controller is\n\t\t\t\t// superseded — patching here would mark the NEW turn's streaming\n\t\t\t\t// placeholder as finished (its caret/status vanish mid-stream).\n\t\t\t\tif (abortRef.current === controller) {\n\t\t\t\t\tstreamingRef.current = false;\n\t\t\t\t\tsetIsStreaming(false);\n\t\t\t\t\tsetStatus(\"\");\n\t\t\t\t\tsetStatusNode(null);\n\t\t\t\t\tpatchLast((m) => ({ ...m, isStreaming: false }));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[client, nextId, patchLast],\n\t);\n\n\tconst confirmTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.confirmTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\tconst cancelTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.cancelTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Switch to an existing session and load its history into view. */\n\tconst loadSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tabortRef.current?.abort();\n\t\t\tstreamingRef.current = false;\n\t\t\tsetIsStreaming(false);\n\t\t\tsetStatus(\"\");\n\t\t\tsetStatusNode(null);\n\t\t\tsetPendingAction(null);\n\t\t\tsetError(null);\n\t\t\tsessionIdRef.current = id;\n\t\t\tsetSessionId(id);\n\t\t\ttry {\n\t\t\t\tconst history = await client.getMessages(id);\n\t\t\t\tsetMessages(history.filter(isRenderableMessage).map(toDisplayMessage));\n\t\t\t} catch {\n\t\t\t\tsetMessages([]);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Start a fresh session — clears the view; the next send creates it. */\n\tconst newSession = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetPendingAction(null);\n\t\tsetError(null);\n\t\tsessionIdRef.current = null;\n\t\tsetSessionId(null);\n\t\tsetMessages([]);\n\t}, []);\n\n\treturn {\n\t\tmessages,\n\t\tisStreaming,\n\t\tstatus,\n\t\tstatusNode,\n\t\terror,\n\t\tmode,\n\t\tsetMode,\n\t\tpendingAction,\n\t\tsessionId,\n\t\tsendMessage,\n\t\tstop,\n\t\tconfirmTicket,\n\t\tcancelTicket,\n\t\tloadSession,\n\t\tnewSession,\n\t};\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type { SessionSummary } from \"../protocol\";\n\n/** Minimal session-list hook (load + refresh + create + delete). Apps that use\n * TanStack Query can skip this and call the client directly. */\nexport function useAgentSessions(client: AgentChatClient) {\n\tconst [sessions, setSessions] = useState<SessionSummary[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst data = await client.listSessionSummaries();\n\t\t\tif (mountedRef.current) setSessions(data);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) setError(err as Error);\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsLoading(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refresh();\n\t}, [refresh]);\n\n\tconst createSession = useCallback(async () => {\n\t\tconst out = await client.createSession();\n\t\tawait refresh();\n\t\treturn out;\n\t}, [client, refresh]);\n\n\tconst deleteSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tawait client.deleteSession(id);\n\t\t\tawait refresh();\n\t\t},\n\t\t[client, refresh],\n\t);\n\n\treturn { sessions, isLoading, error, refresh, createSession, deleteSession };\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\n\n/**\n * Backend-verified wallet-link state + link/unlink actions. `linked` is\n * `null` while the initial status fetch is in flight — render a loading\n * state, not a gate (a flash of \"not linked\" for a linked user is the bug\n * this hook exists to kill; never cache link state in localStorage).\n *\n * Pass `enabled: false` until the caller is authenticated — the status\n * fetch needs a bearer token, and firing it pre-auth surfaces a stale 401\n * (\"Authorization header must be Bearer...\") on whatever gate renders next.\n */\nexport function useWalletLink(\n\tclient: AgentChatClient,\n\topts?: { enabled?: boolean },\n) {\n\tconst enabled = opts?.enabled ?? true;\n\tconst [linked, setLinked] = useState<boolean | null>(null);\n\tconst [isWorking, setIsWorking] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst status = await client.getLinkStatus();\n\t\t\tif (mountedRef.current) setLinked(status.linked);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) {\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tsetLinked(null);\n\t\t\t}\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\t// Pre-auth: unknown status, and any earlier pre-auth failure is noise.\n\t\t\tsetLinked(null);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\t\tvoid refresh();\n\t}, [refresh, enabled]);\n\n\tconst link = useCallback(\n\t\tasync (opts?: { force?: boolean; code?: string }) => {\n\t\t\tsetIsWorking(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst out = await client.linkWallet(opts);\n\t\t\t\tif (mountedRef.current) setLinked(out.linked);\n\t\t\t\treturn out;\n\t\t\t} catch (err) {\n\t\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tif (mountedRef.current) setError(e);\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\tconst unlink = useCallback(async () => {\n\t\tsetIsWorking(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst out = await client.unlinkWallet();\n\t\t\tif (mountedRef.current) setLinked(false);\n\t\t\treturn out;\n\t\t} catch (err) {\n\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\tif (mountedRef.current) setError(e);\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t}\n\t}, [client]);\n\n\treturn { linked, isWorking, error, link, unlink, refresh };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/useAgentChat.ts","../../src/react/useAgentSessions.ts","../../src/react/useWalletLink.ts"],"names":["useState","useRef","useCallback","useEffect","opts"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type {\n\tAgentChatMessage,\n\tChatMode,\n\tChatSurface,\n\tCitationSource,\n\tPendingAction,\n\tSuggestedAction,\n\tTradeLink,\n\tTwitterSource,\n} from \"../protocol\";\n\n/** A persisted message worth rendering. A user-stopped turn can persist an\n * EMPTY assistant row (no text, no attachments) — skip it on history load,\n * the same way `stop()` removes the live placeholder. */\nfunction isRenderableMessage(m: AgentChatMessage): boolean {\n\tif (m.role === \"user\") return true;\n\treturn Boolean(\n\t\tm.content ||\n\t\t\tm.images?.length ||\n\t\t\tm.tradeLinks?.length ||\n\t\t\tm.twitterSources?.length ||\n\t\t\tm.researchAnnotations?.length ||\n\t\t\tm.suggestedAction,\n\t);\n}\n\n/** Map a persisted history message to the display shape. */\nfunction toDisplayMessage(m: AgentChatMessage): DisplayMessage {\n\treturn {\n\t\tid: m.id,\n\t\ttext: m.content,\n\t\tisUser: m.role === \"user\",\n\t\ttradeLinks: m.tradeLinks ?? undefined,\n\t\timages: m.images ?? undefined,\n\t\ttwitterSources: m.twitterSources ?? undefined,\n\t\tresearchAnnotations: m.researchAnnotations ?? undefined,\n\t\tsuggestedAction: m.suggestedAction ?? undefined,\n\t};\n}\n\nexport interface DisplayMessage {\n\tid: string;\n\ttext: string;\n\tisUser: boolean;\n\tisStreaming?: boolean;\n\treasoning?: string;\n\ttradeLinks?: TradeLink[];\n\timages?: string[];\n\ttwitterSources?: TwitterSource[];\n\tresearchAnnotations?: CitationSource[];\n\tsuggestedAction?: SuggestedAction | null;\n}\n\nexport interface UseAgentChatOptions {\n\tclient: AgentChatClient;\n\t/** Optional existing session to resume. */\n\tsessionId?: string;\n}\n\nexport function useAgentChat(opts: UseAgentChatOptions) {\n\tconst { client } = opts;\n\tconst [messages, setMessages] = useState<DisplayMessage[]>([]);\n\tconst [isStreaming, setIsStreaming] = useState(false);\n\tconst [status, setStatus] = useState(\"\");\n\t// The node of the latest status event (e.g. \"research\", \"compose\") so the UI\n\t// can map to its own per-node \"thinking\" phrasing. null between turns.\n\tconst [statusNode, setStatusNode] = useState<string | null>(null);\n\tconst [mode, setMode] = useState<ChatMode>(\"standard\");\n\t// Declared client surface — drives per-surface behavior server-side. Defaults\n\t// to pear_v3 (retail web); switch it (e.g. base_mini) to test venue awareness.\n\tconst [surface, setSurface] = useState<ChatSurface>(\"pear_v3\");\n\tconst [pendingAction, setPendingAction] = useState<PendingAction | null>(\n\t\tnull,\n\t);\n\t// Last turn's failure (null while healthy). Mid-stream errors land here too —\n\t// without it, a stream that dies after a few tokens renders a truncated\n\t// answer that looks complete and the app has no way to know.\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst sessionIdRef = useRef<string | null>(opts.sessionId ?? null);\n\tconst [sessionId, setSessionId] = useState<string | null>(\n\t\topts.sessionId ?? null,\n\t);\n\tconst abortRef = useRef<AbortController | null>(null);\n\tconst streamingRef = useRef(false);\n\tconst modeRef = useRef(mode);\n\tmodeRef.current = mode;\n\tconst surfaceRef = useRef(surface);\n\tsurfaceRef.current = surface;\n\tconst counterRef = useRef(0);\n\n\t// Per-instance id factory — never a module-level counter (SSR-hostile: a\n\t// shared singleton collides across concurrent requests / hydration).\n\tconst nextId = useCallback(\n\t\t() =>\n\t\t\ttypeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n\t\t\t\t? crypto.randomUUID()\n\t\t\t\t: `m${Date.now()}-${++counterRef.current}`,\n\t\t[],\n\t);\n\n\t// Abort any in-flight stream on unmount (otherwise the SSE keeps running).\n\tuseEffect(() => () => abortRef.current?.abort(), []);\n\n\tconst patchLast = useCallback(\n\t\t(patch: (m: DisplayMessage) => DisplayMessage) => {\n\t\t\tsetMessages((prev) => {\n\t\t\t\tif (prev.length === 0) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tconst last = next[next.length - 1];\n\t\t\t\tif (!last.isUser) next[next.length - 1] = patch(last);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\t/** Abort a running stream (e.g. a Stop button). A stopped turn that\n\t * produced NOTHING removes its placeholder bubble entirely — otherwise an\n\t * empty assistant bubble (typing dots frozen) lingers in the thread. */\n\tconst stop = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetMessages((prev) => {\n\t\t\tif (prev.length === 0) return prev;\n\t\t\tconst last = prev[prev.length - 1];\n\t\t\tif (last.isUser) return prev;\n\t\t\tif (!last.text && !last.reasoning) return prev.slice(0, -1);\n\t\t\treturn [...prev.slice(0, -1), { ...last, isStreaming: false }];\n\t\t});\n\t}, []);\n\n\tconst sendMessage = useCallback(\n\t\tasync (text: string, cta?: { question: string; previousText: string }) => {\n\t\t\tif (!text.trim() || streamingRef.current) return;\n\n\t\t\tlet sid = sessionIdRef.current;\n\t\t\tif (!sid) {\n\t\t\t\tsid = (await client.createSession()).id;\n\t\t\t\tsessionIdRef.current = sid;\n\t\t\t\tsetSessionId(sid);\n\t\t\t}\n\n\t\t\tsetPendingAction(null);\n\t\t\tsetStatusNode(null);\n\t\t\tsetError(null);\n\t\t\tsetMessages((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: nextId(), text, isUser: true },\n\t\t\t\t{ id: nextId(), text: \"\", isUser: false, isStreaming: true },\n\t\t\t]);\n\t\t\tstreamingRef.current = true;\n\t\t\tsetIsStreaming(true);\n\t\t\tsetStatus(\"thinking\");\n\n\t\t\tabortRef.current?.abort();\n\t\t\tconst controller = new AbortController();\n\t\t\tabortRef.current = controller;\n\n\t\t\ttry {\n\t\t\t\tfor await (const ev of client.streamChat({\n\t\t\t\t\tsessionId: sid,\n\t\t\t\t\tmessage: text,\n\t\t\t\t\tmode: modeRef.current,\n\t\t\t\t\tsurface: surfaceRef.current,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\tcta: cta\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpreviousText: cta.previousText,\n\t\t\t\t\t\t\t\tquestion: cta.question,\n\t\t\t\t\t\t\t\tselectedOption: text,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t})) {\n\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\tswitch (ev.type) {\n\t\t\t\t\t\tcase \"token\":\n\t\t\t\t\t\t\tpatchLast((m) => ({ ...m, text: m.text + ev.delta }));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"thinking\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\treasoning: (m.reasoning ?? \"\") + ev.delta,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"status\":\n\t\t\t\t\t\t\tsetStatus(ev.text);\n\t\t\t\t\t\t\tsetStatusNode(ev.node ?? null);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sources\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\ttradeLinks: ev.tradeLinks ?? m.tradeLinks,\n\t\t\t\t\t\t\t\timages: ev.images ?? m.images,\n\t\t\t\t\t\t\t\ttwitterSources: ev.twitterSources ?? m.twitterSources,\n\t\t\t\t\t\t\t\tresearchAnnotations:\n\t\t\t\t\t\t\t\t\tev.researchAnnotations ?? m.researchAnnotations,\n\t\t\t\t\t\t\t\tsuggestedAction: ev.suggestedAction ?? m.suggestedAction,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"done\":\n\t\t\t\t\t\t\tif (ev.result.pendingAction) {\n\t\t\t\t\t\t\t\tsetPendingAction(ev.result.pendingAction);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tif (\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\tcontroller.signal.aborted\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Surface the cause to the console for debugging; keep the on-screen\n\t\t\t\t// copy generic.\n\t\t\t\tconsole.error(\"[useAgentChat] stream failed:\", err);\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t...m,\n\t\t\t\t\ttext: m.text || \"Something went wrong. Try again.\",\n\t\t\t\t}));\n\t\t\t} finally {\n\t\t\t\t// Guarded: after stop() → sendMessage(next), this controller is\n\t\t\t\t// superseded — patching here would mark the NEW turn's streaming\n\t\t\t\t// placeholder as finished (its caret/status vanish mid-stream).\n\t\t\t\tif (abortRef.current === controller) {\n\t\t\t\t\tstreamingRef.current = false;\n\t\t\t\t\tsetIsStreaming(false);\n\t\t\t\t\tsetStatus(\"\");\n\t\t\t\t\tsetStatusNode(null);\n\t\t\t\t\tpatchLast((m) => ({ ...m, isStreaming: false }));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[client, nextId, patchLast],\n\t);\n\n\tconst confirmTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.confirmTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\tconst cancelTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.cancelTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Switch to an existing session and load its history into view. */\n\tconst loadSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tabortRef.current?.abort();\n\t\t\tstreamingRef.current = false;\n\t\t\tsetIsStreaming(false);\n\t\t\tsetStatus(\"\");\n\t\t\tsetStatusNode(null);\n\t\t\tsetPendingAction(null);\n\t\t\tsetError(null);\n\t\t\tsessionIdRef.current = id;\n\t\t\tsetSessionId(id);\n\t\t\ttry {\n\t\t\t\tconst history = await client.getMessages(id);\n\t\t\t\tsetMessages(history.filter(isRenderableMessage).map(toDisplayMessage));\n\t\t\t} catch {\n\t\t\t\tsetMessages([]);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Start a fresh session — clears the view; the next send creates it. */\n\tconst newSession = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetPendingAction(null);\n\t\tsetError(null);\n\t\tsessionIdRef.current = null;\n\t\tsetSessionId(null);\n\t\tsetMessages([]);\n\t}, []);\n\n\treturn {\n\t\tmessages,\n\t\tisStreaming,\n\t\tstatus,\n\t\tstatusNode,\n\t\terror,\n\t\tmode,\n\t\tsetMode,\n\t\tsurface,\n\t\tsetSurface,\n\t\tpendingAction,\n\t\tsessionId,\n\t\tsendMessage,\n\t\tstop,\n\t\tconfirmTicket,\n\t\tcancelTicket,\n\t\tloadSession,\n\t\tnewSession,\n\t};\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type { SessionSummary } from \"../protocol\";\n\n/** Minimal session-list hook (load + refresh + create + delete). Apps that use\n * TanStack Query can skip this and call the client directly. */\nexport function useAgentSessions(client: AgentChatClient) {\n\tconst [sessions, setSessions] = useState<SessionSummary[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst data = await client.listSessionSummaries();\n\t\t\tif (mountedRef.current) setSessions(data);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) setError(err as Error);\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsLoading(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refresh();\n\t}, [refresh]);\n\n\tconst createSession = useCallback(async () => {\n\t\tconst out = await client.createSession();\n\t\tawait refresh();\n\t\treturn out;\n\t}, [client, refresh]);\n\n\tconst deleteSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tawait client.deleteSession(id);\n\t\t\tawait refresh();\n\t\t},\n\t\t[client, refresh],\n\t);\n\n\treturn { sessions, isLoading, error, refresh, createSession, deleteSession };\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\n\n/**\n * Backend-verified wallet-link state + link/unlink actions. `linked` is\n * `null` while the initial status fetch is in flight — render a loading\n * state, not a gate (a flash of \"not linked\" for a linked user is the bug\n * this hook exists to kill; never cache link state in localStorage).\n *\n * Pass `enabled: false` until the caller is authenticated — the status\n * fetch needs a bearer token, and firing it pre-auth surfaces a stale 401\n * (\"Authorization header must be Bearer...\") on whatever gate renders next.\n */\nexport function useWalletLink(\n\tclient: AgentChatClient,\n\topts?: { enabled?: boolean },\n) {\n\tconst enabled = opts?.enabled ?? true;\n\tconst [linked, setLinked] = useState<boolean | null>(null);\n\tconst [isWorking, setIsWorking] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst status = await client.getLinkStatus();\n\t\t\tif (mountedRef.current) setLinked(status.linked);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) {\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tsetLinked(null);\n\t\t\t}\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\t// Pre-auth: unknown status, and any earlier pre-auth failure is noise.\n\t\t\tsetLinked(null);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\t\tvoid refresh();\n\t}, [refresh, enabled]);\n\n\tconst link = useCallback(\n\t\tasync (opts?: { force?: boolean; code?: string }) => {\n\t\t\tsetIsWorking(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst out = await client.linkWallet(opts);\n\t\t\t\tif (mountedRef.current) setLinked(out.linked);\n\t\t\t\treturn out;\n\t\t\t} catch (err) {\n\t\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tif (mountedRef.current) setError(e);\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\tconst unlink = useCallback(async () => {\n\t\tsetIsWorking(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst out = await client.unlinkWallet();\n\t\t\tif (mountedRef.current) setLinked(false);\n\t\t\treturn out;\n\t\t} catch (err) {\n\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\tif (mountedRef.current) setError(e);\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t}\n\t}, [client]);\n\n\treturn { linked, isWorking, error, link, unlink, refresh };\n}\n"]}
|
package/dist/react/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { X as TradeLink, $ as TwitterSource, n as CitationSource, N as SuggestedAction, A as AgentChatClient } from '../client-BSUkCr7k.cjs';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
5
5
|
interface DisplayMessage {
|
|
@@ -26,6 +26,8 @@ declare function useAgentChat(opts: UseAgentChatOptions): {
|
|
|
26
26
|
error: Error | null;
|
|
27
27
|
mode: "standard" | "advanced";
|
|
28
28
|
setMode: react.Dispatch<react.SetStateAction<"standard" | "advanced">>;
|
|
29
|
+
surface: "pear_v3" | "pear_pro" | "base_mini" | "web";
|
|
30
|
+
setSurface: react.Dispatch<react.SetStateAction<"pear_v3" | "pear_pro" | "base_mini" | "web">>;
|
|
29
31
|
pendingAction: {
|
|
30
32
|
ticketId: string;
|
|
31
33
|
action: string;
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { X as TradeLink, $ as TwitterSource, n as CitationSource, N as SuggestedAction, A as AgentChatClient } from '../client-BSUkCr7k.js';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
5
5
|
interface DisplayMessage {
|
|
@@ -26,6 +26,8 @@ declare function useAgentChat(opts: UseAgentChatOptions): {
|
|
|
26
26
|
error: Error | null;
|
|
27
27
|
mode: "standard" | "advanced";
|
|
28
28
|
setMode: react.Dispatch<react.SetStateAction<"standard" | "advanced">>;
|
|
29
|
+
surface: "pear_v3" | "pear_pro" | "base_mini" | "web";
|
|
30
|
+
setSurface: react.Dispatch<react.SetStateAction<"pear_v3" | "pear_pro" | "base_mini" | "web">>;
|
|
29
31
|
pendingAction: {
|
|
30
32
|
ticketId: string;
|
|
31
33
|
action: string;
|
package/dist/react/index.js
CHANGED
|
@@ -26,6 +26,7 @@ function useAgentChat(opts) {
|
|
|
26
26
|
const [status, setStatus] = useState("");
|
|
27
27
|
const [statusNode, setStatusNode] = useState(null);
|
|
28
28
|
const [mode, setMode] = useState("standard");
|
|
29
|
+
const [surface, setSurface] = useState("pear_v3");
|
|
29
30
|
const [pendingAction, setPendingAction] = useState(
|
|
30
31
|
null
|
|
31
32
|
);
|
|
@@ -38,6 +39,8 @@ function useAgentChat(opts) {
|
|
|
38
39
|
const streamingRef = useRef(false);
|
|
39
40
|
const modeRef = useRef(mode);
|
|
40
41
|
modeRef.current = mode;
|
|
42
|
+
const surfaceRef = useRef(surface);
|
|
43
|
+
surfaceRef.current = surface;
|
|
41
44
|
const counterRef = useRef(0);
|
|
42
45
|
const nextId = useCallback(
|
|
43
46
|
() => typeof crypto !== "undefined" && "randomUUID" in crypto ? crypto.randomUUID() : `m${Date.now()}-${++counterRef.current}`,
|
|
@@ -98,6 +101,7 @@ function useAgentChat(opts) {
|
|
|
98
101
|
sessionId: sid,
|
|
99
102
|
message: text,
|
|
100
103
|
mode: modeRef.current,
|
|
104
|
+
surface: surfaceRef.current,
|
|
101
105
|
signal: controller.signal,
|
|
102
106
|
cta: cta ? {
|
|
103
107
|
previousText: cta.previousText,
|
|
@@ -217,6 +221,8 @@ function useAgentChat(opts) {
|
|
|
217
221
|
error,
|
|
218
222
|
mode,
|
|
219
223
|
setMode,
|
|
224
|
+
surface,
|
|
225
|
+
setSurface,
|
|
220
226
|
pendingAction,
|
|
221
227
|
sessionId,
|
|
222
228
|
sendMessage,
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/useAgentChat.ts","../../src/react/useAgentSessions.ts","../../src/react/useWalletLink.ts"],"names":["useState","useRef","useEffect","useCallback","opts"],"mappings":"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","file":"index.js","sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type {\n\tAgentChatMessage,\n\tChatMode,\n\tCitationSource,\n\tPendingAction,\n\tSuggestedAction,\n\tTradeLink,\n\tTwitterSource,\n} from \"../protocol\";\n\n/** A persisted message worth rendering. A user-stopped turn can persist an\n * EMPTY assistant row (no text, no attachments) — skip it on history load,\n * the same way `stop()` removes the live placeholder. */\nfunction isRenderableMessage(m: AgentChatMessage): boolean {\n\tif (m.role === \"user\") return true;\n\treturn Boolean(\n\t\tm.content ||\n\t\t\tm.images?.length ||\n\t\t\tm.tradeLinks?.length ||\n\t\t\tm.twitterSources?.length ||\n\t\t\tm.researchAnnotations?.length ||\n\t\t\tm.suggestedAction,\n\t);\n}\n\n/** Map a persisted history message to the display shape. */\nfunction toDisplayMessage(m: AgentChatMessage): DisplayMessage {\n\treturn {\n\t\tid: m.id,\n\t\ttext: m.content,\n\t\tisUser: m.role === \"user\",\n\t\ttradeLinks: m.tradeLinks ?? undefined,\n\t\timages: m.images ?? undefined,\n\t\ttwitterSources: m.twitterSources ?? undefined,\n\t\tresearchAnnotations: m.researchAnnotations ?? undefined,\n\t\tsuggestedAction: m.suggestedAction ?? undefined,\n\t};\n}\n\nexport interface DisplayMessage {\n\tid: string;\n\ttext: string;\n\tisUser: boolean;\n\tisStreaming?: boolean;\n\treasoning?: string;\n\ttradeLinks?: TradeLink[];\n\timages?: string[];\n\ttwitterSources?: TwitterSource[];\n\tresearchAnnotations?: CitationSource[];\n\tsuggestedAction?: SuggestedAction | null;\n}\n\nexport interface UseAgentChatOptions {\n\tclient: AgentChatClient;\n\t/** Optional existing session to resume. */\n\tsessionId?: string;\n}\n\nexport function useAgentChat(opts: UseAgentChatOptions) {\n\tconst { client } = opts;\n\tconst [messages, setMessages] = useState<DisplayMessage[]>([]);\n\tconst [isStreaming, setIsStreaming] = useState(false);\n\tconst [status, setStatus] = useState(\"\");\n\t// The node of the latest status event (e.g. \"research\", \"compose\") so the UI\n\t// can map to its own per-node \"thinking\" phrasing. null between turns.\n\tconst [statusNode, setStatusNode] = useState<string | null>(null);\n\tconst [mode, setMode] = useState<ChatMode>(\"standard\");\n\tconst [pendingAction, setPendingAction] = useState<PendingAction | null>(\n\t\tnull,\n\t);\n\t// Last turn's failure (null while healthy). Mid-stream errors land here too —\n\t// without it, a stream that dies after a few tokens renders a truncated\n\t// answer that looks complete and the app has no way to know.\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst sessionIdRef = useRef<string | null>(opts.sessionId ?? null);\n\tconst [sessionId, setSessionId] = useState<string | null>(\n\t\topts.sessionId ?? null,\n\t);\n\tconst abortRef = useRef<AbortController | null>(null);\n\tconst streamingRef = useRef(false);\n\tconst modeRef = useRef(mode);\n\tmodeRef.current = mode;\n\tconst counterRef = useRef(0);\n\n\t// Per-instance id factory — never a module-level counter (SSR-hostile: a\n\t// shared singleton collides across concurrent requests / hydration).\n\tconst nextId = useCallback(\n\t\t() =>\n\t\t\ttypeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n\t\t\t\t? crypto.randomUUID()\n\t\t\t\t: `m${Date.now()}-${++counterRef.current}`,\n\t\t[],\n\t);\n\n\t// Abort any in-flight stream on unmount (otherwise the SSE keeps running).\n\tuseEffect(() => () => abortRef.current?.abort(), []);\n\n\tconst patchLast = useCallback(\n\t\t(patch: (m: DisplayMessage) => DisplayMessage) => {\n\t\t\tsetMessages((prev) => {\n\t\t\t\tif (prev.length === 0) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tconst last = next[next.length - 1];\n\t\t\t\tif (!last.isUser) next[next.length - 1] = patch(last);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\t/** Abort a running stream (e.g. a Stop button). A stopped turn that\n\t * produced NOTHING removes its placeholder bubble entirely — otherwise an\n\t * empty assistant bubble (typing dots frozen) lingers in the thread. */\n\tconst stop = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetMessages((prev) => {\n\t\t\tif (prev.length === 0) return prev;\n\t\t\tconst last = prev[prev.length - 1];\n\t\t\tif (last.isUser) return prev;\n\t\t\tif (!last.text && !last.reasoning) return prev.slice(0, -1);\n\t\t\treturn [...prev.slice(0, -1), { ...last, isStreaming: false }];\n\t\t});\n\t}, []);\n\n\tconst sendMessage = useCallback(\n\t\tasync (text: string, cta?: { question: string; previousText: string }) => {\n\t\t\tif (!text.trim() || streamingRef.current) return;\n\n\t\t\tlet sid = sessionIdRef.current;\n\t\t\tif (!sid) {\n\t\t\t\tsid = (await client.createSession()).id;\n\t\t\t\tsessionIdRef.current = sid;\n\t\t\t\tsetSessionId(sid);\n\t\t\t}\n\n\t\t\tsetPendingAction(null);\n\t\t\tsetStatusNode(null);\n\t\t\tsetError(null);\n\t\t\tsetMessages((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: nextId(), text, isUser: true },\n\t\t\t\t{ id: nextId(), text: \"\", isUser: false, isStreaming: true },\n\t\t\t]);\n\t\t\tstreamingRef.current = true;\n\t\t\tsetIsStreaming(true);\n\t\t\tsetStatus(\"thinking\");\n\n\t\t\tabortRef.current?.abort();\n\t\t\tconst controller = new AbortController();\n\t\t\tabortRef.current = controller;\n\n\t\t\ttry {\n\t\t\t\tfor await (const ev of client.streamChat({\n\t\t\t\t\tsessionId: sid,\n\t\t\t\t\tmessage: text,\n\t\t\t\t\tmode: modeRef.current,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\tcta: cta\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpreviousText: cta.previousText,\n\t\t\t\t\t\t\t\tquestion: cta.question,\n\t\t\t\t\t\t\t\tselectedOption: text,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t})) {\n\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\tswitch (ev.type) {\n\t\t\t\t\t\tcase \"token\":\n\t\t\t\t\t\t\tpatchLast((m) => ({ ...m, text: m.text + ev.delta }));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"thinking\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\treasoning: (m.reasoning ?? \"\") + ev.delta,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"status\":\n\t\t\t\t\t\t\tsetStatus(ev.text);\n\t\t\t\t\t\t\tsetStatusNode(ev.node ?? null);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sources\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\ttradeLinks: ev.tradeLinks ?? m.tradeLinks,\n\t\t\t\t\t\t\t\timages: ev.images ?? m.images,\n\t\t\t\t\t\t\t\ttwitterSources: ev.twitterSources ?? m.twitterSources,\n\t\t\t\t\t\t\t\tresearchAnnotations:\n\t\t\t\t\t\t\t\t\tev.researchAnnotations ?? m.researchAnnotations,\n\t\t\t\t\t\t\t\tsuggestedAction: ev.suggestedAction ?? m.suggestedAction,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"done\":\n\t\t\t\t\t\t\tif (ev.result.pendingAction) {\n\t\t\t\t\t\t\t\tsetPendingAction(ev.result.pendingAction);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tif (\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\tcontroller.signal.aborted\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Surface the cause to the console for debugging; keep the on-screen\n\t\t\t\t// copy generic.\n\t\t\t\tconsole.error(\"[useAgentChat] stream failed:\", err);\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t...m,\n\t\t\t\t\ttext: m.text || \"Something went wrong. Try again.\",\n\t\t\t\t}));\n\t\t\t} finally {\n\t\t\t\t// Guarded: after stop() → sendMessage(next), this controller is\n\t\t\t\t// superseded — patching here would mark the NEW turn's streaming\n\t\t\t\t// placeholder as finished (its caret/status vanish mid-stream).\n\t\t\t\tif (abortRef.current === controller) {\n\t\t\t\t\tstreamingRef.current = false;\n\t\t\t\t\tsetIsStreaming(false);\n\t\t\t\t\tsetStatus(\"\");\n\t\t\t\t\tsetStatusNode(null);\n\t\t\t\t\tpatchLast((m) => ({ ...m, isStreaming: false }));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[client, nextId, patchLast],\n\t);\n\n\tconst confirmTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.confirmTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\tconst cancelTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.cancelTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Switch to an existing session and load its history into view. */\n\tconst loadSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tabortRef.current?.abort();\n\t\t\tstreamingRef.current = false;\n\t\t\tsetIsStreaming(false);\n\t\t\tsetStatus(\"\");\n\t\t\tsetStatusNode(null);\n\t\t\tsetPendingAction(null);\n\t\t\tsetError(null);\n\t\t\tsessionIdRef.current = id;\n\t\t\tsetSessionId(id);\n\t\t\ttry {\n\t\t\t\tconst history = await client.getMessages(id);\n\t\t\t\tsetMessages(history.filter(isRenderableMessage).map(toDisplayMessage));\n\t\t\t} catch {\n\t\t\t\tsetMessages([]);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Start a fresh session — clears the view; the next send creates it. */\n\tconst newSession = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetPendingAction(null);\n\t\tsetError(null);\n\t\tsessionIdRef.current = null;\n\t\tsetSessionId(null);\n\t\tsetMessages([]);\n\t}, []);\n\n\treturn {\n\t\tmessages,\n\t\tisStreaming,\n\t\tstatus,\n\t\tstatusNode,\n\t\terror,\n\t\tmode,\n\t\tsetMode,\n\t\tpendingAction,\n\t\tsessionId,\n\t\tsendMessage,\n\t\tstop,\n\t\tconfirmTicket,\n\t\tcancelTicket,\n\t\tloadSession,\n\t\tnewSession,\n\t};\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type { SessionSummary } from \"../protocol\";\n\n/** Minimal session-list hook (load + refresh + create + delete). Apps that use\n * TanStack Query can skip this and call the client directly. */\nexport function useAgentSessions(client: AgentChatClient) {\n\tconst [sessions, setSessions] = useState<SessionSummary[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst data = await client.listSessionSummaries();\n\t\t\tif (mountedRef.current) setSessions(data);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) setError(err as Error);\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsLoading(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refresh();\n\t}, [refresh]);\n\n\tconst createSession = useCallback(async () => {\n\t\tconst out = await client.createSession();\n\t\tawait refresh();\n\t\treturn out;\n\t}, [client, refresh]);\n\n\tconst deleteSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tawait client.deleteSession(id);\n\t\t\tawait refresh();\n\t\t},\n\t\t[client, refresh],\n\t);\n\n\treturn { sessions, isLoading, error, refresh, createSession, deleteSession };\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\n\n/**\n * Backend-verified wallet-link state + link/unlink actions. `linked` is\n * `null` while the initial status fetch is in flight — render a loading\n * state, not a gate (a flash of \"not linked\" for a linked user is the bug\n * this hook exists to kill; never cache link state in localStorage).\n *\n * Pass `enabled: false` until the caller is authenticated — the status\n * fetch needs a bearer token, and firing it pre-auth surfaces a stale 401\n * (\"Authorization header must be Bearer...\") on whatever gate renders next.\n */\nexport function useWalletLink(\n\tclient: AgentChatClient,\n\topts?: { enabled?: boolean },\n) {\n\tconst enabled = opts?.enabled ?? true;\n\tconst [linked, setLinked] = useState<boolean | null>(null);\n\tconst [isWorking, setIsWorking] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst status = await client.getLinkStatus();\n\t\t\tif (mountedRef.current) setLinked(status.linked);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) {\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tsetLinked(null);\n\t\t\t}\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\t// Pre-auth: unknown status, and any earlier pre-auth failure is noise.\n\t\t\tsetLinked(null);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\t\tvoid refresh();\n\t}, [refresh, enabled]);\n\n\tconst link = useCallback(\n\t\tasync (opts?: { force?: boolean; code?: string }) => {\n\t\t\tsetIsWorking(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst out = await client.linkWallet(opts);\n\t\t\t\tif (mountedRef.current) setLinked(out.linked);\n\t\t\t\treturn out;\n\t\t\t} catch (err) {\n\t\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tif (mountedRef.current) setError(e);\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\tconst unlink = useCallback(async () => {\n\t\tsetIsWorking(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst out = await client.unlinkWallet();\n\t\t\tif (mountedRef.current) setLinked(false);\n\t\t\treturn out;\n\t\t} catch (err) {\n\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\tif (mountedRef.current) setError(e);\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t}\n\t}, [client]);\n\n\treturn { linked, isWorking, error, link, unlink, refresh };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/useAgentChat.ts","../../src/react/useAgentSessions.ts","../../src/react/useWalletLink.ts"],"names":["useState","useRef","useEffect","useCallback","opts"],"mappings":"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","file":"index.js","sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type {\n\tAgentChatMessage,\n\tChatMode,\n\tChatSurface,\n\tCitationSource,\n\tPendingAction,\n\tSuggestedAction,\n\tTradeLink,\n\tTwitterSource,\n} from \"../protocol\";\n\n/** A persisted message worth rendering. A user-stopped turn can persist an\n * EMPTY assistant row (no text, no attachments) — skip it on history load,\n * the same way `stop()` removes the live placeholder. */\nfunction isRenderableMessage(m: AgentChatMessage): boolean {\n\tif (m.role === \"user\") return true;\n\treturn Boolean(\n\t\tm.content ||\n\t\t\tm.images?.length ||\n\t\t\tm.tradeLinks?.length ||\n\t\t\tm.twitterSources?.length ||\n\t\t\tm.researchAnnotations?.length ||\n\t\t\tm.suggestedAction,\n\t);\n}\n\n/** Map a persisted history message to the display shape. */\nfunction toDisplayMessage(m: AgentChatMessage): DisplayMessage {\n\treturn {\n\t\tid: m.id,\n\t\ttext: m.content,\n\t\tisUser: m.role === \"user\",\n\t\ttradeLinks: m.tradeLinks ?? undefined,\n\t\timages: m.images ?? undefined,\n\t\ttwitterSources: m.twitterSources ?? undefined,\n\t\tresearchAnnotations: m.researchAnnotations ?? undefined,\n\t\tsuggestedAction: m.suggestedAction ?? undefined,\n\t};\n}\n\nexport interface DisplayMessage {\n\tid: string;\n\ttext: string;\n\tisUser: boolean;\n\tisStreaming?: boolean;\n\treasoning?: string;\n\ttradeLinks?: TradeLink[];\n\timages?: string[];\n\ttwitterSources?: TwitterSource[];\n\tresearchAnnotations?: CitationSource[];\n\tsuggestedAction?: SuggestedAction | null;\n}\n\nexport interface UseAgentChatOptions {\n\tclient: AgentChatClient;\n\t/** Optional existing session to resume. */\n\tsessionId?: string;\n}\n\nexport function useAgentChat(opts: UseAgentChatOptions) {\n\tconst { client } = opts;\n\tconst [messages, setMessages] = useState<DisplayMessage[]>([]);\n\tconst [isStreaming, setIsStreaming] = useState(false);\n\tconst [status, setStatus] = useState(\"\");\n\t// The node of the latest status event (e.g. \"research\", \"compose\") so the UI\n\t// can map to its own per-node \"thinking\" phrasing. null between turns.\n\tconst [statusNode, setStatusNode] = useState<string | null>(null);\n\tconst [mode, setMode] = useState<ChatMode>(\"standard\");\n\t// Declared client surface — drives per-surface behavior server-side. Defaults\n\t// to pear_v3 (retail web); switch it (e.g. base_mini) to test venue awareness.\n\tconst [surface, setSurface] = useState<ChatSurface>(\"pear_v3\");\n\tconst [pendingAction, setPendingAction] = useState<PendingAction | null>(\n\t\tnull,\n\t);\n\t// Last turn's failure (null while healthy). Mid-stream errors land here too —\n\t// without it, a stream that dies after a few tokens renders a truncated\n\t// answer that looks complete and the app has no way to know.\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst sessionIdRef = useRef<string | null>(opts.sessionId ?? null);\n\tconst [sessionId, setSessionId] = useState<string | null>(\n\t\topts.sessionId ?? null,\n\t);\n\tconst abortRef = useRef<AbortController | null>(null);\n\tconst streamingRef = useRef(false);\n\tconst modeRef = useRef(mode);\n\tmodeRef.current = mode;\n\tconst surfaceRef = useRef(surface);\n\tsurfaceRef.current = surface;\n\tconst counterRef = useRef(0);\n\n\t// Per-instance id factory — never a module-level counter (SSR-hostile: a\n\t// shared singleton collides across concurrent requests / hydration).\n\tconst nextId = useCallback(\n\t\t() =>\n\t\t\ttypeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n\t\t\t\t? crypto.randomUUID()\n\t\t\t\t: `m${Date.now()}-${++counterRef.current}`,\n\t\t[],\n\t);\n\n\t// Abort any in-flight stream on unmount (otherwise the SSE keeps running).\n\tuseEffect(() => () => abortRef.current?.abort(), []);\n\n\tconst patchLast = useCallback(\n\t\t(patch: (m: DisplayMessage) => DisplayMessage) => {\n\t\t\tsetMessages((prev) => {\n\t\t\t\tif (prev.length === 0) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tconst last = next[next.length - 1];\n\t\t\t\tif (!last.isUser) next[next.length - 1] = patch(last);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\t/** Abort a running stream (e.g. a Stop button). A stopped turn that\n\t * produced NOTHING removes its placeholder bubble entirely — otherwise an\n\t * empty assistant bubble (typing dots frozen) lingers in the thread. */\n\tconst stop = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetMessages((prev) => {\n\t\t\tif (prev.length === 0) return prev;\n\t\t\tconst last = prev[prev.length - 1];\n\t\t\tif (last.isUser) return prev;\n\t\t\tif (!last.text && !last.reasoning) return prev.slice(0, -1);\n\t\t\treturn [...prev.slice(0, -1), { ...last, isStreaming: false }];\n\t\t});\n\t}, []);\n\n\tconst sendMessage = useCallback(\n\t\tasync (text: string, cta?: { question: string; previousText: string }) => {\n\t\t\tif (!text.trim() || streamingRef.current) return;\n\n\t\t\tlet sid = sessionIdRef.current;\n\t\t\tif (!sid) {\n\t\t\t\tsid = (await client.createSession()).id;\n\t\t\t\tsessionIdRef.current = sid;\n\t\t\t\tsetSessionId(sid);\n\t\t\t}\n\n\t\t\tsetPendingAction(null);\n\t\t\tsetStatusNode(null);\n\t\t\tsetError(null);\n\t\t\tsetMessages((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: nextId(), text, isUser: true },\n\t\t\t\t{ id: nextId(), text: \"\", isUser: false, isStreaming: true },\n\t\t\t]);\n\t\t\tstreamingRef.current = true;\n\t\t\tsetIsStreaming(true);\n\t\t\tsetStatus(\"thinking\");\n\n\t\t\tabortRef.current?.abort();\n\t\t\tconst controller = new AbortController();\n\t\t\tabortRef.current = controller;\n\n\t\t\ttry {\n\t\t\t\tfor await (const ev of client.streamChat({\n\t\t\t\t\tsessionId: sid,\n\t\t\t\t\tmessage: text,\n\t\t\t\t\tmode: modeRef.current,\n\t\t\t\t\tsurface: surfaceRef.current,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\tcta: cta\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpreviousText: cta.previousText,\n\t\t\t\t\t\t\t\tquestion: cta.question,\n\t\t\t\t\t\t\t\tselectedOption: text,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t})) {\n\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\tswitch (ev.type) {\n\t\t\t\t\t\tcase \"token\":\n\t\t\t\t\t\t\tpatchLast((m) => ({ ...m, text: m.text + ev.delta }));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"thinking\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\treasoning: (m.reasoning ?? \"\") + ev.delta,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"status\":\n\t\t\t\t\t\t\tsetStatus(ev.text);\n\t\t\t\t\t\t\tsetStatusNode(ev.node ?? null);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sources\":\n\t\t\t\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t\ttradeLinks: ev.tradeLinks ?? m.tradeLinks,\n\t\t\t\t\t\t\t\timages: ev.images ?? m.images,\n\t\t\t\t\t\t\t\ttwitterSources: ev.twitterSources ?? m.twitterSources,\n\t\t\t\t\t\t\t\tresearchAnnotations:\n\t\t\t\t\t\t\t\t\tev.researchAnnotations ?? m.researchAnnotations,\n\t\t\t\t\t\t\t\tsuggestedAction: ev.suggestedAction ?? m.suggestedAction,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"done\":\n\t\t\t\t\t\t\tif (ev.result.pendingAction) {\n\t\t\t\t\t\t\t\tsetPendingAction(ev.result.pendingAction);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tif (\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\tcontroller.signal.aborted\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Surface the cause to the console for debugging; keep the on-screen\n\t\t\t\t// copy generic.\n\t\t\t\tconsole.error(\"[useAgentChat] stream failed:\", err);\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tpatchLast((m) => ({\n\t\t\t\t\t...m,\n\t\t\t\t\ttext: m.text || \"Something went wrong. Try again.\",\n\t\t\t\t}));\n\t\t\t} finally {\n\t\t\t\t// Guarded: after stop() → sendMessage(next), this controller is\n\t\t\t\t// superseded — patching here would mark the NEW turn's streaming\n\t\t\t\t// placeholder as finished (its caret/status vanish mid-stream).\n\t\t\t\tif (abortRef.current === controller) {\n\t\t\t\t\tstreamingRef.current = false;\n\t\t\t\t\tsetIsStreaming(false);\n\t\t\t\t\tsetStatus(\"\");\n\t\t\t\t\tsetStatusNode(null);\n\t\t\t\t\tpatchLast((m) => ({ ...m, isStreaming: false }));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[client, nextId, patchLast],\n\t);\n\n\tconst confirmTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.confirmTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\tconst cancelTicket = useCallback(\n\t\tasync (ticketId: string) => {\n\t\t\tconst out = await client.cancelTicket(ticketId);\n\t\t\tsetPendingAction(null);\n\t\t\treturn out;\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Switch to an existing session and load its history into view. */\n\tconst loadSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tabortRef.current?.abort();\n\t\t\tstreamingRef.current = false;\n\t\t\tsetIsStreaming(false);\n\t\t\tsetStatus(\"\");\n\t\t\tsetStatusNode(null);\n\t\t\tsetPendingAction(null);\n\t\t\tsetError(null);\n\t\t\tsessionIdRef.current = id;\n\t\t\tsetSessionId(id);\n\t\t\ttry {\n\t\t\t\tconst history = await client.getMessages(id);\n\t\t\t\tsetMessages(history.filter(isRenderableMessage).map(toDisplayMessage));\n\t\t\t} catch {\n\t\t\t\tsetMessages([]);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\t/** Start a fresh session — clears the view; the next send creates it. */\n\tconst newSession = useCallback(() => {\n\t\tabortRef.current?.abort();\n\t\tstreamingRef.current = false;\n\t\tsetIsStreaming(false);\n\t\tsetStatus(\"\");\n\t\tsetStatusNode(null);\n\t\tsetPendingAction(null);\n\t\tsetError(null);\n\t\tsessionIdRef.current = null;\n\t\tsetSessionId(null);\n\t\tsetMessages([]);\n\t}, []);\n\n\treturn {\n\t\tmessages,\n\t\tisStreaming,\n\t\tstatus,\n\t\tstatusNode,\n\t\terror,\n\t\tmode,\n\t\tsetMode,\n\t\tsurface,\n\t\tsetSurface,\n\t\tpendingAction,\n\t\tsessionId,\n\t\tsendMessage,\n\t\tstop,\n\t\tconfirmTicket,\n\t\tcancelTicket,\n\t\tloadSession,\n\t\tnewSession,\n\t};\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\nimport type { SessionSummary } from \"../protocol\";\n\n/** Minimal session-list hook (load + refresh + create + delete). Apps that use\n * TanStack Query can skip this and call the client directly. */\nexport function useAgentSessions(client: AgentChatClient) {\n\tconst [sessions, setSessions] = useState<SessionSummary[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst data = await client.listSessionSummaries();\n\t\t\tif (mountedRef.current) setSessions(data);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) setError(err as Error);\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsLoading(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refresh();\n\t}, [refresh]);\n\n\tconst createSession = useCallback(async () => {\n\t\tconst out = await client.createSession();\n\t\tawait refresh();\n\t\treturn out;\n\t}, [client, refresh]);\n\n\tconst deleteSession = useCallback(\n\t\tasync (id: string) => {\n\t\t\tawait client.deleteSession(id);\n\t\t\tawait refresh();\n\t\t},\n\t\t[client, refresh],\n\t);\n\n\treturn { sessions, isLoading, error, refresh, createSession, deleteSession };\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { AgentChatClient } from \"../client\";\n\n/**\n * Backend-verified wallet-link state + link/unlink actions. `linked` is\n * `null` while the initial status fetch is in flight — render a loading\n * state, not a gate (a flash of \"not linked\" for a linked user is the bug\n * this hook exists to kill; never cache link state in localStorage).\n *\n * Pass `enabled: false` until the caller is authenticated — the status\n * fetch needs a bearer token, and firing it pre-auth surfaces a stale 401\n * (\"Authorization header must be Bearer...\") on whatever gate renders next.\n */\nexport function useWalletLink(\n\tclient: AgentChatClient,\n\topts?: { enabled?: boolean },\n) {\n\tconst enabled = opts?.enabled ?? true;\n\tconst [linked, setLinked] = useState<boolean | null>(null);\n\tconst [isWorking, setIsWorking] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst mountedRef = useRef(true);\n\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst status = await client.getLinkStatus();\n\t\t\tif (mountedRef.current) setLinked(status.linked);\n\t\t} catch (err) {\n\t\t\tif (mountedRef.current) {\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\tsetLinked(null);\n\t\t\t}\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\t// Pre-auth: unknown status, and any earlier pre-auth failure is noise.\n\t\t\tsetLinked(null);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\t\tvoid refresh();\n\t}, [refresh, enabled]);\n\n\tconst link = useCallback(\n\t\tasync (opts?: { force?: boolean; code?: string }) => {\n\t\t\tsetIsWorking(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst out = await client.linkWallet(opts);\n\t\t\t\tif (mountedRef.current) setLinked(out.linked);\n\t\t\t\treturn out;\n\t\t\t} catch (err) {\n\t\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tif (mountedRef.current) setError(e);\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\tconst unlink = useCallback(async () => {\n\t\tsetIsWorking(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst out = await client.unlinkWallet();\n\t\t\tif (mountedRef.current) setLinked(false);\n\t\t\treturn out;\n\t\t} catch (err) {\n\t\t\tconst e = err instanceof Error ? err : new Error(String(err));\n\t\t\tif (mountedRef.current) setError(e);\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tif (mountedRef.current) setIsWorking(false);\n\t\t}\n\t}, [client]);\n\n\treturn { linked, isWorking, error, link, unlink, refresh };\n}\n"]}
|