@fayz-ai/sdk 0.8.1 → 0.8.3
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/dist/agent.cjs +16 -0
- package/dist/agent.cjs.map +1 -0
- package/dist/agent.d.ts +114 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +3 -0
- package/dist/agent.js.map +1 -0
- package/dist/{chunk-3UTEZ2QL.cjs → chunk-746EA3BV.cjs} +95 -4
- package/dist/chunk-746EA3BV.cjs.map +1 -0
- package/dist/chunk-7UZH4XEV.cjs +66 -0
- package/dist/chunk-7UZH4XEV.cjs.map +1 -0
- package/dist/{chunk-PRCW5CVJ.js → chunk-7ZHG7XTA.js} +95 -5
- package/dist/chunk-7ZHG7XTA.js.map +1 -0
- package/dist/{chunk-MCB2L25R.cjs → chunk-DK3ZA6NA.cjs} +3 -3
- package/dist/{chunk-MCB2L25R.cjs.map → chunk-DK3ZA6NA.cjs.map} +1 -1
- package/dist/{chunk-ZTJ2BJ3I.js → chunk-SKARZBEH.js} +26 -26
- package/dist/{chunk-ZTJ2BJ3I.js.map → chunk-SKARZBEH.js.map} +1 -1
- package/dist/{chunk-R4XVCBFG.js → chunk-UWOQAD5A.js} +3 -3
- package/dist/{chunk-R4XVCBFG.js.map → chunk-UWOQAD5A.js.map} +1 -1
- package/dist/chunk-VPMRURSI.js +63 -0
- package/dist/chunk-VPMRURSI.js.map +1 -0
- package/dist/{chunk-6OWKU36M.cjs → chunk-WMH7SIER.cjs} +26 -26
- package/dist/{chunk-6OWKU36M.cjs.map → chunk-WMH7SIER.cjs.map} +1 -1
- package/dist/client.cjs +5 -5
- package/dist/client.js +2 -2
- package/dist/index.cjs +30 -21
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/release-channels.cjs +5 -5
- package/dist/release-channels.js +1 -1
- package/dist/shop.cjs +7 -3
- package/dist/shop.d.ts +76 -0
- package/dist/shop.d.ts.map +1 -1
- package/dist/shop.js +1 -1
- package/package.json +7 -1
- package/src/agent.test.ts +114 -0
- package/src/agent.ts +188 -0
- package/src/index.ts +11 -0
- package/src/release-channels.json +24 -24
- package/src/shop.ts +174 -2
- package/dist/chunk-3UTEZ2QL.cjs.map +0 -1
- package/dist/chunk-PRCW5CVJ.js.map +0 -1
package/dist/shop.d.ts
CHANGED
|
@@ -8,6 +8,22 @@ export interface FayzShopProviderOptions {
|
|
|
8
8
|
productMetadata?: FayzShopProductMetadataOverlay[];
|
|
9
9
|
fetcher?: typeof fetch;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* The signed-in shopper's access token, when there is one.
|
|
13
|
+
*
|
|
14
|
+
* PostgREST decides who you are from the Authorization bearer, and this client
|
|
15
|
+
* used to send the publishable key unconditionally — so every request arrived
|
|
16
|
+
* as `anon` even with a customer logged in. auth.uid() was therefore always
|
|
17
|
+
* null, which is why shop_resolve_customer never linked auth_user_id (0 of 519
|
|
18
|
+
* customers in the pool) and why the self-read policy on public.addresses could
|
|
19
|
+
* never match a row.
|
|
20
|
+
*
|
|
21
|
+
* A module-level resolver rather than a per-app option on purpose: the wiring
|
|
22
|
+
* is done once by initStorefrontRuntime, so a storefront cannot forget it and
|
|
23
|
+
* silently fall back to anonymous. Mirrors setShopTenantResolver in plugin-shop.
|
|
24
|
+
*/
|
|
25
|
+
type AccessTokenResolver = () => string | null | undefined;
|
|
26
|
+
export declare function setShopAccessTokenResolver(resolver: AccessTokenResolver | null): void;
|
|
11
27
|
export interface FayzShopProductMetadataOverlay {
|
|
12
28
|
sku?: string | null;
|
|
13
29
|
slug?: string | null;
|
|
@@ -257,6 +273,9 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
257
273
|
customerEmail: string | null;
|
|
258
274
|
discountCode: string | null;
|
|
259
275
|
notes: string | null;
|
|
276
|
+
shippingAddress: Record<string, string | undefined> | null;
|
|
277
|
+
paymentMethodKind: string | null;
|
|
278
|
+
paidAt: string | null;
|
|
260
279
|
items: {
|
|
261
280
|
id: string;
|
|
262
281
|
orderId: string;
|
|
@@ -289,6 +308,9 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
289
308
|
customerEmail: string | null;
|
|
290
309
|
discountCode: string | null;
|
|
291
310
|
notes: string | null;
|
|
311
|
+
shippingAddress: Record<string, string | undefined> | null;
|
|
312
|
+
paymentMethodKind: string | null;
|
|
313
|
+
paidAt: string | null;
|
|
292
314
|
items: {
|
|
293
315
|
id: string;
|
|
294
316
|
orderId: string;
|
|
@@ -321,6 +343,9 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
321
343
|
customerEmail: string | null;
|
|
322
344
|
discountCode: string | null;
|
|
323
345
|
notes: string | null;
|
|
346
|
+
shippingAddress: Record<string, string | undefined> | null;
|
|
347
|
+
paymentMethodKind: string | null;
|
|
348
|
+
paidAt: string | null;
|
|
324
349
|
items: {
|
|
325
350
|
id: string;
|
|
326
351
|
orderId: string;
|
|
@@ -370,6 +395,9 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
370
395
|
customerEmail: string | null;
|
|
371
396
|
discountCode: string | null;
|
|
372
397
|
notes: string | null;
|
|
398
|
+
shippingAddress: Record<string, string | undefined> | null;
|
|
399
|
+
paymentMethodKind: string | null;
|
|
400
|
+
paidAt: string | null;
|
|
373
401
|
items: {
|
|
374
402
|
id: string;
|
|
375
403
|
orderId: string;
|
|
@@ -402,6 +430,9 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
402
430
|
customerEmail: string | null;
|
|
403
431
|
discountCode: string | null;
|
|
404
432
|
notes: string | null;
|
|
433
|
+
shippingAddress: Record<string, string | undefined> | null;
|
|
434
|
+
paymentMethodKind: string | null;
|
|
435
|
+
paidAt: string | null;
|
|
405
436
|
items: {
|
|
406
437
|
id: string;
|
|
407
438
|
orderId: string;
|
|
@@ -427,6 +458,22 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
427
458
|
notes?: string;
|
|
428
459
|
discountCode?: string;
|
|
429
460
|
shippingTotal?: number;
|
|
461
|
+
/** Structured delivery address; frozen on the order and saved to the
|
|
462
|
+
* customer's address book by the RPC. */
|
|
463
|
+
shippingAddress?: {
|
|
464
|
+
postalCode: string;
|
|
465
|
+
street: string;
|
|
466
|
+
number?: string;
|
|
467
|
+
complement?: string;
|
|
468
|
+
district?: string;
|
|
469
|
+
city: string;
|
|
470
|
+
state: string;
|
|
471
|
+
country?: string;
|
|
472
|
+
recipient?: string;
|
|
473
|
+
phone?: string;
|
|
474
|
+
label?: string;
|
|
475
|
+
};
|
|
476
|
+
paymentMethod?: "pix" | "credit_card" | "debit_card" | "boleto" | "cash" | "other";
|
|
430
477
|
items: Array<{
|
|
431
478
|
productId: string;
|
|
432
479
|
quantity: number;
|
|
@@ -450,6 +497,9 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
450
497
|
customerEmail: string | null;
|
|
451
498
|
discountCode: string | null;
|
|
452
499
|
notes: string | null;
|
|
500
|
+
shippingAddress: Record<string, string | undefined> | null;
|
|
501
|
+
paymentMethodKind: string | null;
|
|
502
|
+
paidAt: string | null;
|
|
453
503
|
items: {
|
|
454
504
|
id: string;
|
|
455
505
|
orderId: string;
|
|
@@ -506,6 +556,32 @@ export declare function createFayzShopProvider(options: FayzShopProviderOptions)
|
|
|
506
556
|
createdAt: string;
|
|
507
557
|
updatedAt: string;
|
|
508
558
|
}>;
|
|
559
|
+
quoteShipping(postalCode: string, subtotal: number): Promise<{
|
|
560
|
+
zoneId: string;
|
|
561
|
+
name: string;
|
|
562
|
+
carrier: string | undefined;
|
|
563
|
+
rate: number;
|
|
564
|
+
baseRate: number;
|
|
565
|
+
freeAbove: number | null;
|
|
566
|
+
etaMinDays: number | undefined;
|
|
567
|
+
etaMaxDays: number | undefined;
|
|
568
|
+
free: boolean;
|
|
569
|
+
}[]>;
|
|
570
|
+
listCustomerAddresses(customerId: string): Promise<{
|
|
571
|
+
id: string;
|
|
572
|
+
label: string | undefined;
|
|
573
|
+
recipient: string | undefined;
|
|
574
|
+
phone: string | undefined;
|
|
575
|
+
postalCode: string;
|
|
576
|
+
street: string;
|
|
577
|
+
number: string | undefined;
|
|
578
|
+
complement: string | undefined;
|
|
579
|
+
district: string | undefined;
|
|
580
|
+
city: string;
|
|
581
|
+
state: string;
|
|
582
|
+
country: string | undefined;
|
|
583
|
+
isDefault: boolean;
|
|
584
|
+
}[]>;
|
|
509
585
|
createCustomer(input: {
|
|
510
586
|
firstName: string;
|
|
511
587
|
lastName?: string;
|
package/dist/shop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop.d.ts","sourceRoot":"","sources":["../src/shop.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,eAAe,CAAC,EAAE,8BAA8B,EAAE,CAAA;IAClD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAA;AACnE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAA;AACnE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,MAAM,GAAG,gBAAgB,GAAG,UAAU,GAAG,oBAAoB,GAAG,QAAQ,CAAA;AAC1H,MAAM,MAAM,yBAAyB,GAAG,aAAa,GAAG,qBAAqB,GAAG,WAAW,CAAA;AAE3F,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;IACxD,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,eAAe,CAAC,EAAE,uBAAuB,CAAA;IACzC,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;
|
|
1
|
+
{"version":3,"file":"shop.d.ts","sourceRoot":"","sources":["../src/shop.ts"],"names":[],"mappings":"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"}
|
package/dist/shop.js
CHANGED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"fayz": {
|
|
4
4
|
"status": "beta"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.8.
|
|
6
|
+
"version": "0.8.3",
|
|
7
7
|
"description": "Fayz SDK — API client, app params, runtime broker helpers, and shared types for generated Fayz projects",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "./dist/index.cjs",
|
|
@@ -28,6 +28,12 @@
|
|
|
28
28
|
"import": "./dist/client.js",
|
|
29
29
|
"require": "./dist/client.cjs"
|
|
30
30
|
},
|
|
31
|
+
"./agent": {
|
|
32
|
+
"source": "./src/agent.ts",
|
|
33
|
+
"types": "./dist/agent.d.ts",
|
|
34
|
+
"import": "./dist/agent.js",
|
|
35
|
+
"require": "./dist/agent.cjs"
|
|
36
|
+
},
|
|
31
37
|
"./shop": {
|
|
32
38
|
"source": "./src/shop.ts",
|
|
33
39
|
"types": "./dist/shop.d.ts",
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { createFayzAgentClient, FayzAgentError } from './agent'
|
|
4
|
+
|
|
5
|
+
function jsonResponse(body: unknown, status = 200): Response {
|
|
6
|
+
return new Response(JSON.stringify(body), {
|
|
7
|
+
status,
|
|
8
|
+
headers: { 'Content-Type': 'application/json' },
|
|
9
|
+
})
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function client(fetcher: typeof fetch) {
|
|
13
|
+
return createFayzAgentClient({
|
|
14
|
+
baseUrl: 'http://localhost:5173/api',
|
|
15
|
+
projectId: 'project-1',
|
|
16
|
+
publishableKey: 'fayzpk_test',
|
|
17
|
+
fetcher,
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
describe('createFayzAgentClient', () => {
|
|
22
|
+
it('targets the public broker and presents the publishable key', async () => {
|
|
23
|
+
const fetcher = vi.fn<typeof fetch>().mockResolvedValue(
|
|
24
|
+
jsonResponse({ conversationId: 'conv-1', content: 'Hi', toolCalls: [] }),
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
await client(fetcher).chat({ message: 'Hello' })
|
|
28
|
+
|
|
29
|
+
const [url, init] = fetcher.mock.calls[0]
|
|
30
|
+
expect(url).toBe('http://localhost:5173/api/public/projects/project-1/agents/chat')
|
|
31
|
+
expect((init?.headers as Record<string, string>)['x-fayz-agent-key']).toBe('fayzpk_test')
|
|
32
|
+
expect(JSON.parse(init?.body as string)).toEqual({ message: 'Hello' })
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('forwards the tool catalog and returns the calls the model asked for', async () => {
|
|
36
|
+
const toolCall = { id: 'call-1', name: 'getTeamMembers', arguments: { role: 'staff' } }
|
|
37
|
+
const fetcher = vi.fn<typeof fetch>().mockResolvedValue(
|
|
38
|
+
jsonResponse({ conversationId: 'conv-1', content: '', toolCalls: [toolCall] }),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
const response = await client(fetcher).chat({
|
|
42
|
+
message: "Who's on my team?",
|
|
43
|
+
tools: [
|
|
44
|
+
{
|
|
45
|
+
name: 'getTeamMembers',
|
|
46
|
+
description: 'Lists team members.',
|
|
47
|
+
parameters: { type: 'object', properties: { role: { type: 'string' } } },
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
expect(response.toolCalls).toEqual([toolCall])
|
|
53
|
+
expect(JSON.parse(fetcher.mock.calls[0][1]?.body as string).tools).toHaveLength(1)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('sends tool results with the conversation id and no new message', async () => {
|
|
57
|
+
const fetcher = vi.fn<typeof fetch>().mockResolvedValue(
|
|
58
|
+
jsonResponse({ conversationId: 'conv-1', content: 'Ana and Bruno.', toolCalls: [] }),
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
const response = await client(fetcher).chat({
|
|
62
|
+
conversationId: 'conv-1',
|
|
63
|
+
toolResults: [{ toolCallId: 'call-1', content: '{"total":2}' }],
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
const body = JSON.parse(fetcher.mock.calls[0][1]?.body as string)
|
|
67
|
+
expect(body).toEqual({
|
|
68
|
+
conversationId: 'conv-1',
|
|
69
|
+
toolResults: [{ toolCallId: 'call-1', content: '{"total":2}' }],
|
|
70
|
+
})
|
|
71
|
+
expect(response.content).toBe('Ana and Bruno.')
|
|
72
|
+
expect(response.toolCalls).toEqual([])
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('tolerates a response that omits toolCalls', async () => {
|
|
76
|
+
const fetcher = vi.fn<typeof fetch>().mockResolvedValue(
|
|
77
|
+
jsonResponse({ conversationId: 'conv-1', content: 'Hi' }),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
const response = await client(fetcher).chat({ message: 'Hello' })
|
|
81
|
+
|
|
82
|
+
expect(response.toolCalls).toEqual([])
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it('surfaces the broker error message and status', async () => {
|
|
86
|
+
const fetcher = vi
|
|
87
|
+
.fn<typeof fetch>()
|
|
88
|
+
.mockResolvedValue(jsonResponse({ error: 'Invalid agent key' }, 401))
|
|
89
|
+
|
|
90
|
+
await expect(client(fetcher).chat({ message: 'Hello' })).rejects.toMatchObject({
|
|
91
|
+
name: 'FayzAgentError',
|
|
92
|
+
status: 401,
|
|
93
|
+
message: 'Invalid agent key',
|
|
94
|
+
})
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('falls back to a generic message when the error body is not JSON', async () => {
|
|
98
|
+
const fetcher = vi
|
|
99
|
+
.fn<typeof fetch>()
|
|
100
|
+
.mockResolvedValue(new Response('gateway down', { status: 502 }))
|
|
101
|
+
|
|
102
|
+
await expect(client(fetcher).getInfo()).rejects.toThrow(FayzAgentError)
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('reads the agent identity from /config', async () => {
|
|
106
|
+
const agent = { id: 'a-1', name: 'Glow', description: null, icon: '💇' }
|
|
107
|
+
const fetcher = vi.fn<typeof fetch>().mockResolvedValue(jsonResponse({ agent }))
|
|
108
|
+
|
|
109
|
+
expect(await client(fetcher).getInfo()).toEqual(agent)
|
|
110
|
+
expect(fetcher.mock.calls[0][0]).toBe(
|
|
111
|
+
'http://localhost:5173/api/public/projects/project-1/agents/config',
|
|
112
|
+
)
|
|
113
|
+
})
|
|
114
|
+
})
|
package/src/agent.ts
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client for the Fayz agent broker — the runtime surface a generated app uses
|
|
3
|
+
* to reach the AI agent configured for its project in Fayz.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors `createFayzShopProvider`: the app holds a publishable key, Fayz holds
|
|
6
|
+
* the model credentials. The key ships in the bundle the same way a Supabase
|
|
7
|
+
* anon key does; it only ever resolves to the one agent its web channel belongs
|
|
8
|
+
* to, and the broker rate-limits per project.
|
|
9
|
+
*
|
|
10
|
+
* Tools are client-plane. The app declares what it can do (`tools`), the model
|
|
11
|
+
* decides what to call, and the app executes the calls against its own session
|
|
12
|
+
* before handing results back. Fayz never needs the app's data credentials.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export interface FayzAgentClientOptions {
|
|
16
|
+
/** Fayz API base, e.g. https://fayz.ai/api */
|
|
17
|
+
baseUrl: string
|
|
18
|
+
projectId: string
|
|
19
|
+
/** Publishable key of the project's WEB agent channel. */
|
|
20
|
+
publishableKey: string
|
|
21
|
+
fetcher?: typeof fetch
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface FayzAgentTool {
|
|
25
|
+
name: string
|
|
26
|
+
description: string
|
|
27
|
+
/** JSON Schema for the tool's arguments. */
|
|
28
|
+
parameters?: Record<string, unknown>
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface FayzAgentToolCall {
|
|
32
|
+
id: string
|
|
33
|
+
name: string
|
|
34
|
+
arguments: Record<string, unknown>
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface FayzAgentToolResult {
|
|
38
|
+
toolCallId: string
|
|
39
|
+
content: string
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface FayzAgentChatInput {
|
|
43
|
+
/** New end-user message. Omit when replying with tool results. */
|
|
44
|
+
message?: string
|
|
45
|
+
conversationId?: string
|
|
46
|
+
/** Identity of the end user, required by channels with an INTERNAL audience. */
|
|
47
|
+
externalUserId?: string
|
|
48
|
+
/** Human label for that user, so the owner's dashboard shows a name. */
|
|
49
|
+
externalUserName?: string
|
|
50
|
+
tools?: FayzAgentTool[]
|
|
51
|
+
toolResults?: FayzAgentToolResult[]
|
|
52
|
+
/** Decision for a server-parked write (broker PENDING_CONFIRMATION step). */
|
|
53
|
+
confirmAction?: { id: string; approved: boolean }
|
|
54
|
+
/** Runtime context the agent should know about (page, locale, tenant). */
|
|
55
|
+
context?: Record<string, unknown>
|
|
56
|
+
signal?: AbortSignal
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** A server-plane write the broker parked pending human confirmation. */
|
|
60
|
+
export interface FayzAgentPendingAction {
|
|
61
|
+
id: string
|
|
62
|
+
toolName: string
|
|
63
|
+
title?: string
|
|
64
|
+
params?: Record<string, unknown>
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface FayzAgentChatResponse {
|
|
68
|
+
conversationId: string
|
|
69
|
+
content: string
|
|
70
|
+
toolCalls: FayzAgentToolCall[]
|
|
71
|
+
/** Present when the broker is waiting on a confirmAction for this write. */
|
|
72
|
+
pendingAction?: FayzAgentPendingAction
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface FayzAgentInfo {
|
|
76
|
+
id: string
|
|
77
|
+
name: string
|
|
78
|
+
description: string | null
|
|
79
|
+
icon: string | null
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export class FayzAgentError extends Error {
|
|
83
|
+
constructor(
|
|
84
|
+
message: string,
|
|
85
|
+
readonly status: number,
|
|
86
|
+
) {
|
|
87
|
+
super(message)
|
|
88
|
+
this.name = 'FayzAgentError'
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface FayzAgentConversationSummary {
|
|
93
|
+
id: string
|
|
94
|
+
title: string | null
|
|
95
|
+
/** Last activity — the field the list is ordered by. */
|
|
96
|
+
updatedAt: string
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface FayzAgentConversationMessage {
|
|
100
|
+
id: string
|
|
101
|
+
role: string
|
|
102
|
+
content: string
|
|
103
|
+
createdAt: string
|
|
104
|
+
/** Tool calls this reply made, with their results — so a resumed thread shows
|
|
105
|
+
* the same trace and record links it showed live. */
|
|
106
|
+
toolCalls?: Array<{
|
|
107
|
+
name: string
|
|
108
|
+
arguments?: Record<string, unknown>
|
|
109
|
+
result?: string
|
|
110
|
+
}>
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface FayzAgentConversationDetail {
|
|
114
|
+
id: string
|
|
115
|
+
title: string | null
|
|
116
|
+
messages: FayzAgentConversationMessage[]
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export interface FayzAgentClient {
|
|
120
|
+
/** Identity of the agent behind the key, for rendering its name/icon. */
|
|
121
|
+
getInfo(signal?: AbortSignal): Promise<FayzAgentInfo>
|
|
122
|
+
chat(input: FayzAgentChatInput): Promise<FayzAgentChatResponse>
|
|
123
|
+
/** The signed-in user's own threads, most-recently-active first. */
|
|
124
|
+
listConversations(externalUserId?: string, signal?: AbortSignal): Promise<FayzAgentConversationSummary[]>
|
|
125
|
+
/** One thread with its transcript — 404s on another user's thread. */
|
|
126
|
+
getConversation(
|
|
127
|
+
conversationId: string,
|
|
128
|
+
externalUserId?: string,
|
|
129
|
+
signal?: AbortSignal,
|
|
130
|
+
): Promise<FayzAgentConversationDetail>
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function createFayzAgentClient(options: FayzAgentClientOptions): FayzAgentClient {
|
|
134
|
+
const fetcher = options.fetcher ?? globalThis.fetch
|
|
135
|
+
const base = `${options.baseUrl.replace(/\/+$/, '')}/public/projects/${options.projectId}/agents`
|
|
136
|
+
const headers = {
|
|
137
|
+
'Content-Type': 'application/json',
|
|
138
|
+
'x-fayz-agent-key': options.publishableKey,
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async function request<T>(path: string, init: RequestInit): Promise<T> {
|
|
142
|
+
const response = await fetcher(`${base}${path}`, { ...init, headers })
|
|
143
|
+
if (!response.ok) {
|
|
144
|
+
const body = (await response.json().catch(() => null)) as { error?: string } | null
|
|
145
|
+
throw new FayzAgentError(body?.error ?? `Agent request failed (${response.status})`, response.status)
|
|
146
|
+
}
|
|
147
|
+
return (await response.json()) as T
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
async getInfo(signal) {
|
|
152
|
+
const body = await request<{ agent: FayzAgentInfo }>('/config', { method: 'GET', signal })
|
|
153
|
+
return body.agent
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
async chat({ signal, ...input }) {
|
|
157
|
+
const body = await request<Partial<FayzAgentChatResponse>>('/chat', {
|
|
158
|
+
method: 'POST',
|
|
159
|
+
body: JSON.stringify(input),
|
|
160
|
+
signal,
|
|
161
|
+
})
|
|
162
|
+
return {
|
|
163
|
+
conversationId: body.conversationId ?? '',
|
|
164
|
+
content: body.content ?? '',
|
|
165
|
+
toolCalls: body.toolCalls ?? [],
|
|
166
|
+
...(body.pendingAction ? { pendingAction: body.pendingAction } : {}),
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
async listConversations(externalUserId, signal) {
|
|
171
|
+
const query = externalUserId ? `?externalUserId=${encodeURIComponent(externalUserId)}` : ''
|
|
172
|
+
const body = await request<{ conversations?: FayzAgentConversationSummary[] }>(
|
|
173
|
+
`/conversations${query}`,
|
|
174
|
+
{ method: 'GET', signal },
|
|
175
|
+
)
|
|
176
|
+
return body.conversations ?? []
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
async getConversation(conversationId, externalUserId, signal) {
|
|
180
|
+
const query = externalUserId ? `?externalUserId=${encodeURIComponent(externalUserId)}` : ''
|
|
181
|
+
const body = await request<{ conversation: FayzAgentConversationDetail }>(
|
|
182
|
+
`/conversations/${encodeURIComponent(conversationId)}${query}`,
|
|
183
|
+
{ method: 'GET', signal },
|
|
184
|
+
)
|
|
185
|
+
return body.conversation
|
|
186
|
+
},
|
|
187
|
+
}
|
|
188
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -41,6 +41,17 @@ export {
|
|
|
41
41
|
createFayzRuntimeClient,
|
|
42
42
|
FayzRuntimeError,
|
|
43
43
|
} from './runtime'
|
|
44
|
+
export { createFayzAgentClient, FayzAgentError } from './agent'
|
|
45
|
+
export type {
|
|
46
|
+
FayzAgentChatInput,
|
|
47
|
+
FayzAgentChatResponse,
|
|
48
|
+
FayzAgentClient,
|
|
49
|
+
FayzAgentClientOptions,
|
|
50
|
+
FayzAgentInfo,
|
|
51
|
+
FayzAgentTool,
|
|
52
|
+
FayzAgentToolCall,
|
|
53
|
+
FayzAgentToolResult,
|
|
54
|
+
} from './agent'
|
|
44
55
|
export {
|
|
45
56
|
createFayzShopProvider,
|
|
46
57
|
FayzShopError,
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"channels": {
|
|
3
3
|
"stable": {
|
|
4
|
-
"@fayz-ai/sdk": "^0.8.
|
|
5
|
-
"@fayz-ai/core": "^0.8.
|
|
6
|
-
"@fayz-ai/auth": "^0.8.
|
|
7
|
-
"@fayz-ai/ui": "^0.8.
|
|
8
|
-
"@fayz-ai/saas": "^0.8.
|
|
4
|
+
"@fayz-ai/sdk": "^0.8.1",
|
|
5
|
+
"@fayz-ai/core": "^0.8.1",
|
|
6
|
+
"@fayz-ai/auth": "^0.8.1",
|
|
7
|
+
"@fayz-ai/ui": "^0.8.1",
|
|
8
|
+
"@fayz-ai/saas": "^0.8.1",
|
|
9
9
|
"@fayz-ai/shop": "^0.8.0",
|
|
10
10
|
"@fayz-ai/storefront": "^0.8.0",
|
|
11
11
|
"@fayz-ai/portal": "^0.8.0",
|
|
12
12
|
"@fayz-ai/courses": "^0.8.0",
|
|
13
13
|
"@fayz-ai/db": "^0.8.0",
|
|
14
|
-
"@fayz-ai/plugin-agenda": "^0.8.
|
|
14
|
+
"@fayz-ai/plugin-agenda": "^0.8.1",
|
|
15
15
|
"@fayz-ai/plugin-auth": "^0.8.0",
|
|
16
16
|
"@fayz-ai/plugin-automations": "^0.8.0",
|
|
17
|
-
"@fayz-ai/plugin-blog": "^0.8.
|
|
17
|
+
"@fayz-ai/plugin-blog": "^0.8.1",
|
|
18
18
|
"@fayz-ai/plugin-conversations": "^0.8.0",
|
|
19
19
|
"@fayz-ai/plugin-courses": "^0.8.0",
|
|
20
20
|
"@fayz-ai/plugin-crm": "^0.8.0",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@fayz-ai/plugin-financial": "^0.8.0",
|
|
23
23
|
"@fayz-ai/plugin-forms": "^0.8.0",
|
|
24
24
|
"@fayz-ai/plugin-inventory": "^0.8.0",
|
|
25
|
-
"@fayz-ai/plugin-marketing": "^0.8.
|
|
25
|
+
"@fayz-ai/plugin-marketing": "^0.8.1",
|
|
26
26
|
"@fayz-ai/plugin-menu": "^0.8.0",
|
|
27
27
|
"@fayz-ai/plugin-orders": "^0.8.0",
|
|
28
28
|
"@fayz-ai/plugin-payments": "^0.8.0",
|
|
@@ -34,20 +34,20 @@
|
|
|
34
34
|
"@fayz-ai/plugin-tasks": "^0.8.0"
|
|
35
35
|
},
|
|
36
36
|
"latest": {
|
|
37
|
-
"@fayz-ai/sdk": "^0.8.
|
|
38
|
-
"@fayz-ai/core": "^0.8.
|
|
39
|
-
"@fayz-ai/auth": "^0.8.
|
|
40
|
-
"@fayz-ai/ui": "^0.8.
|
|
41
|
-
"@fayz-ai/saas": "^0.8.
|
|
37
|
+
"@fayz-ai/sdk": "^0.8.1",
|
|
38
|
+
"@fayz-ai/core": "^0.8.1",
|
|
39
|
+
"@fayz-ai/auth": "^0.8.1",
|
|
40
|
+
"@fayz-ai/ui": "^0.8.1",
|
|
41
|
+
"@fayz-ai/saas": "^0.8.1",
|
|
42
42
|
"@fayz-ai/shop": "^0.8.0",
|
|
43
43
|
"@fayz-ai/storefront": "^0.8.0",
|
|
44
44
|
"@fayz-ai/portal": "^0.8.0",
|
|
45
45
|
"@fayz-ai/courses": "^0.8.0",
|
|
46
46
|
"@fayz-ai/db": "^0.8.0",
|
|
47
|
-
"@fayz-ai/plugin-agenda": "^0.8.
|
|
47
|
+
"@fayz-ai/plugin-agenda": "^0.8.1",
|
|
48
48
|
"@fayz-ai/plugin-auth": "^0.8.0",
|
|
49
49
|
"@fayz-ai/plugin-automations": "^0.8.0",
|
|
50
|
-
"@fayz-ai/plugin-blog": "^0.8.
|
|
50
|
+
"@fayz-ai/plugin-blog": "^0.8.1",
|
|
51
51
|
"@fayz-ai/plugin-conversations": "^0.8.0",
|
|
52
52
|
"@fayz-ai/plugin-courses": "^0.8.0",
|
|
53
53
|
"@fayz-ai/plugin-crm": "^0.8.0",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"@fayz-ai/plugin-financial": "^0.8.0",
|
|
56
56
|
"@fayz-ai/plugin-forms": "^0.8.0",
|
|
57
57
|
"@fayz-ai/plugin-inventory": "^0.8.0",
|
|
58
|
-
"@fayz-ai/plugin-marketing": "^0.8.
|
|
58
|
+
"@fayz-ai/plugin-marketing": "^0.8.1",
|
|
59
59
|
"@fayz-ai/plugin-menu": "^0.8.0",
|
|
60
60
|
"@fayz-ai/plugin-orders": "^0.8.0",
|
|
61
61
|
"@fayz-ai/plugin-payments": "^0.8.0",
|
|
@@ -67,20 +67,20 @@
|
|
|
67
67
|
"@fayz-ai/plugin-tasks": "^0.8.0"
|
|
68
68
|
},
|
|
69
69
|
"preview": {
|
|
70
|
-
"@fayz-ai/sdk": "^0.8.
|
|
71
|
-
"@fayz-ai/core": "^0.8.
|
|
72
|
-
"@fayz-ai/auth": "^0.8.
|
|
73
|
-
"@fayz-ai/ui": "^0.8.
|
|
74
|
-
"@fayz-ai/saas": "^0.8.
|
|
70
|
+
"@fayz-ai/sdk": "^0.8.1",
|
|
71
|
+
"@fayz-ai/core": "^0.8.1",
|
|
72
|
+
"@fayz-ai/auth": "^0.8.1",
|
|
73
|
+
"@fayz-ai/ui": "^0.8.1",
|
|
74
|
+
"@fayz-ai/saas": "^0.8.1",
|
|
75
75
|
"@fayz-ai/shop": "^0.8.0",
|
|
76
76
|
"@fayz-ai/storefront": "^0.8.0",
|
|
77
77
|
"@fayz-ai/portal": "^0.8.0",
|
|
78
78
|
"@fayz-ai/courses": "^0.8.0",
|
|
79
79
|
"@fayz-ai/db": "^0.8.0",
|
|
80
|
-
"@fayz-ai/plugin-agenda": "^0.8.
|
|
80
|
+
"@fayz-ai/plugin-agenda": "^0.8.1",
|
|
81
81
|
"@fayz-ai/plugin-auth": "^0.8.0",
|
|
82
82
|
"@fayz-ai/plugin-automations": "^0.8.0",
|
|
83
|
-
"@fayz-ai/plugin-blog": "^0.8.
|
|
83
|
+
"@fayz-ai/plugin-blog": "^0.8.1",
|
|
84
84
|
"@fayz-ai/plugin-conversations": "^0.8.0",
|
|
85
85
|
"@fayz-ai/plugin-courses": "^0.8.0",
|
|
86
86
|
"@fayz-ai/plugin-crm": "^0.8.0",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"@fayz-ai/plugin-financial": "^0.8.0",
|
|
89
89
|
"@fayz-ai/plugin-forms": "^0.8.0",
|
|
90
90
|
"@fayz-ai/plugin-inventory": "^0.8.0",
|
|
91
|
-
"@fayz-ai/plugin-marketing": "^0.8.
|
|
91
|
+
"@fayz-ai/plugin-marketing": "^0.8.1",
|
|
92
92
|
"@fayz-ai/plugin-menu": "^0.8.0",
|
|
93
93
|
"@fayz-ai/plugin-orders": "^0.8.0",
|
|
94
94
|
"@fayz-ai/plugin-payments": "^0.8.0",
|