@dbx-tools/shared-teams 0.3.43 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +6 -0
- package/lib/index.js +8 -0
- package/lib/src/activity.d.ts +198 -0
- package/lib/src/activity.js +113 -0
- package/lib/src/card.d.ts +103 -0
- package/lib/src/card.js +101 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -6
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * as activity from "./src/activity.js";
|
|
2
|
+
export * as card from "./src/card.js";
|
|
3
|
+
export { ADAPTIVE_CARD_CONTENT_TYPE, ACTIVITY_TYPES, channelAccountSchema, conversationAccountSchema, cardAttachmentSchema, activitySchema, activityRequestSchema, activityResponseSchema, toCardAttachment, cardsOf } from "./src/activity.js";
|
|
4
|
+
export type { ActivityType, ChannelAccount, ConversationAccount, CardAttachment, Activity, ActivityRequest, ActivityResponse } from "./src/activity.js";
|
|
5
|
+
export { ADAPTIVE_CARD_VERSION, ADAPTIVE_CARD_SCHEMA_URL, cardFactSchema, cardActionSchema, cardSpecSchema, adaptiveCardSchema, cardResultSchema } from "./src/card.js";
|
|
6
|
+
export type { CardFact, CardAction, CardSpec, AdaptiveCard, CardResult } from "./src/card.js";
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// GENERATED by projen watch - DO NOT EDIT.
|
|
2
|
+
// Regenerated from the exporting modules in ./src.
|
|
3
|
+
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
|
+
export * as activity from "./src/activity.js";
|
|
5
|
+
export * as card from "./src/card.js";
|
|
6
|
+
export { ADAPTIVE_CARD_CONTENT_TYPE, ACTIVITY_TYPES, channelAccountSchema, conversationAccountSchema, cardAttachmentSchema, activitySchema, activityRequestSchema, activityResponseSchema, toCardAttachment, cardsOf } from "./src/activity.js";
|
|
7
|
+
export { ADAPTIVE_CARD_VERSION, ADAPTIVE_CARD_SCHEMA_URL, cardFactSchema, cardActionSchema, cardSpecSchema, adaptiveCardSchema, cardResultSchema } from "./src/card.js";
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdPLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0ICogYXMgYWN0aXZpdHkgZnJvbSBcIi4vc3JjL2FjdGl2aXR5XCI7XG5leHBvcnQgKiBhcyBjYXJkIGZyb20gXCIuL3NyYy9jYXJkXCI7XG5leHBvcnQgeyBBREFQVElWRV9DQVJEX0NPTlRFTlRfVFlQRSwgQUNUSVZJVFlfVFlQRVMsIGNoYW5uZWxBY2NvdW50U2NoZW1hLCBjb252ZXJzYXRpb25BY2NvdW50U2NoZW1hLCBjYXJkQXR0YWNobWVudFNjaGVtYSwgYWN0aXZpdHlTY2hlbWEsIGFjdGl2aXR5UmVxdWVzdFNjaGVtYSwgYWN0aXZpdHlSZXNwb25zZVNjaGVtYSwgdG9DYXJkQXR0YWNobWVudCwgY2FyZHNPZiB9IGZyb20gXCIuL3NyYy9hY3Rpdml0eVwiO1xuZXhwb3J0IHR5cGUgeyBBY3Rpdml0eVR5cGUsIENoYW5uZWxBY2NvdW50LCBDb252ZXJzYXRpb25BY2NvdW50LCBDYXJkQXR0YWNobWVudCwgQWN0aXZpdHksIEFjdGl2aXR5UmVxdWVzdCwgQWN0aXZpdHlSZXNwb25zZSB9IGZyb20gXCIuL3NyYy9hY3Rpdml0eVwiO1xuZXhwb3J0IHsgQURBUFRJVkVfQ0FSRF9WRVJTSU9OLCBBREFQVElWRV9DQVJEX1NDSEVNQV9VUkwsIGNhcmRGYWN0U2NoZW1hLCBjYXJkQWN0aW9uU2NoZW1hLCBjYXJkU3BlY1NjaGVtYSwgYWRhcHRpdmVDYXJkU2NoZW1hLCBjYXJkUmVzdWx0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NhcmRcIjtcbmV4cG9ydCB0eXBlIHsgQ2FyZEZhY3QsIENhcmRBY3Rpb24sIENhcmRTcGVjLCBBZGFwdGl2ZUNhcmQsIENhcmRSZXN1bHQgfSBmcm9tIFwiLi9zcmMvY2FyZFwiO1xuIl19
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-format contract for the Teams conversation endpoint: the Bot Framework
|
|
3
|
+
* `Activity` a Teams-like client posts, and the activity (carrying Adaptive Card
|
|
4
|
+
* attachments) the agent answers with.
|
|
5
|
+
*
|
|
6
|
+
* Why this shape rather than a bespoke `{ message }` envelope: Teams does not
|
|
7
|
+
* speak a custom chat API. A channel delivers a bot a JSON `Activity` and reads
|
|
8
|
+
* back activities whose `attachments` carry
|
|
9
|
+
* `application/vnd.microsoft.card.adaptive` payloads. Modelling the real
|
|
10
|
+
* protocol here means the same endpoint that backs the in-repo preview chat is
|
|
11
|
+
* the one a Bot Framework channel could call - the analogue of how the Mastra
|
|
12
|
+
* plugin exposes MCP at a path rather than inventing a tool-call API.
|
|
13
|
+
*
|
|
14
|
+
* Only the subset the conversation endpoint actually reads or writes is
|
|
15
|
+
* modelled. `Activity` is a large, evolving envelope, so unknown fields are
|
|
16
|
+
* PRESERVED rather than stripped (see {@link activitySchema}) - a channel sends
|
|
17
|
+
* far more than this, and dropping it would corrupt a round-trip.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import { z } from "zod";
|
|
22
|
+
import { adaptiveCardSchema } from "./card.js";
|
|
23
|
+
/** The attachment content type Teams uses for an Adaptive Card. */
|
|
24
|
+
export declare const ADAPTIVE_CARD_CONTENT_TYPE = "application/vnd.microsoft.card.adaptive";
|
|
25
|
+
/** Bot Framework activity types this endpoint understands. */
|
|
26
|
+
export declare const ACTIVITY_TYPES: readonly ["message", "conversationUpdate", "typing"];
|
|
27
|
+
/** A Bot Framework activity type. */
|
|
28
|
+
export type ActivityType = (typeof ACTIVITY_TYPES)[number];
|
|
29
|
+
/**
|
|
30
|
+
* A participant in a conversation. `id` is the stable key; `name` is the
|
|
31
|
+
* display label a chat transcript shows.
|
|
32
|
+
*/
|
|
33
|
+
export declare const channelAccountSchema: z.ZodObject<{
|
|
34
|
+
id: z.ZodString;
|
|
35
|
+
name: z.ZodOptional<z.ZodString>;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
/** A conversation participant (user or bot). */
|
|
38
|
+
export type ChannelAccount = z.infer<typeof channelAccountSchema>;
|
|
39
|
+
/**
|
|
40
|
+
* The conversation an activity belongs to. The `id` is what maps onto a Mastra
|
|
41
|
+
* memory thread, so a client that keeps sending the same id gets a continuous
|
|
42
|
+
* conversation.
|
|
43
|
+
*/
|
|
44
|
+
export declare const conversationAccountSchema: z.ZodObject<{
|
|
45
|
+
id: z.ZodString;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
/** The conversation an activity belongs to. */
|
|
48
|
+
export type ConversationAccount = z.infer<typeof conversationAccountSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* An Adaptive Card attachment - how a card reaches a Teams client. The card
|
|
51
|
+
* document lives under `content`, tagged by `contentType`.
|
|
52
|
+
*/
|
|
53
|
+
export declare const cardAttachmentSchema: z.ZodObject<{
|
|
54
|
+
contentType: z.ZodLiteral<"application/vnd.microsoft.card.adaptive">;
|
|
55
|
+
content: z.ZodObject<{
|
|
56
|
+
type: z.ZodLiteral<"AdaptiveCard">;
|
|
57
|
+
$schema: z.ZodString;
|
|
58
|
+
version: z.ZodString;
|
|
59
|
+
body: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
60
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
/** An Adaptive Card attachment on an activity. */
|
|
64
|
+
export type CardAttachment = z.infer<typeof cardAttachmentSchema>;
|
|
65
|
+
/**
|
|
66
|
+
* A Bot Framework activity.
|
|
67
|
+
*
|
|
68
|
+
* `.passthrough()` is deliberate: a real channel sends `channelId`,
|
|
69
|
+
* `serviceUrl`, `timestamp`, `replyToId`, `channelData` and more. This endpoint
|
|
70
|
+
* reads only what it needs, but an unknown field is part of the caller's
|
|
71
|
+
* envelope and is kept so a client can round-trip its own metadata.
|
|
72
|
+
*/
|
|
73
|
+
export declare const activitySchema: z.ZodObject<{
|
|
74
|
+
type: z.ZodEnum<{
|
|
75
|
+
message: "message";
|
|
76
|
+
conversationUpdate: "conversationUpdate";
|
|
77
|
+
typing: "typing";
|
|
78
|
+
}>;
|
|
79
|
+
id: z.ZodOptional<z.ZodString>;
|
|
80
|
+
text: z.ZodOptional<z.ZodString>;
|
|
81
|
+
from: z.ZodOptional<z.ZodObject<{
|
|
82
|
+
id: z.ZodString;
|
|
83
|
+
name: z.ZodOptional<z.ZodString>;
|
|
84
|
+
}, z.core.$strip>>;
|
|
85
|
+
recipient: z.ZodOptional<z.ZodObject<{
|
|
86
|
+
id: z.ZodString;
|
|
87
|
+
name: z.ZodOptional<z.ZodString>;
|
|
88
|
+
}, z.core.$strip>>;
|
|
89
|
+
conversation: z.ZodOptional<z.ZodObject<{
|
|
90
|
+
id: z.ZodString;
|
|
91
|
+
}, z.core.$strip>>;
|
|
92
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
93
|
+
contentType: z.ZodLiteral<"application/vnd.microsoft.card.adaptive">;
|
|
94
|
+
content: z.ZodObject<{
|
|
95
|
+
type: z.ZodLiteral<"AdaptiveCard">;
|
|
96
|
+
$schema: z.ZodString;
|
|
97
|
+
version: z.ZodString;
|
|
98
|
+
body: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
99
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
100
|
+
}, z.core.$strip>;
|
|
101
|
+
}, z.core.$strip>>>;
|
|
102
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
103
|
+
}, z.core.$loose>;
|
|
104
|
+
/** A Bot Framework activity. */
|
|
105
|
+
export type Activity = z.infer<typeof activitySchema>;
|
|
106
|
+
/**
|
|
107
|
+
* The request body the conversation endpoint accepts: an inbound activity plus
|
|
108
|
+
* optional routing hints that are NOT part of the Bot Framework envelope
|
|
109
|
+
* (which agent to run, which serving model to use). Keeping them as siblings of
|
|
110
|
+
* `activity` leaves the protocol payload untouched.
|
|
111
|
+
*/
|
|
112
|
+
export declare const activityRequestSchema: z.ZodObject<{
|
|
113
|
+
activity: z.ZodObject<{
|
|
114
|
+
type: z.ZodEnum<{
|
|
115
|
+
message: "message";
|
|
116
|
+
conversationUpdate: "conversationUpdate";
|
|
117
|
+
typing: "typing";
|
|
118
|
+
}>;
|
|
119
|
+
id: z.ZodOptional<z.ZodString>;
|
|
120
|
+
text: z.ZodOptional<z.ZodString>;
|
|
121
|
+
from: z.ZodOptional<z.ZodObject<{
|
|
122
|
+
id: z.ZodString;
|
|
123
|
+
name: z.ZodOptional<z.ZodString>;
|
|
124
|
+
}, z.core.$strip>>;
|
|
125
|
+
recipient: z.ZodOptional<z.ZodObject<{
|
|
126
|
+
id: z.ZodString;
|
|
127
|
+
name: z.ZodOptional<z.ZodString>;
|
|
128
|
+
}, z.core.$strip>>;
|
|
129
|
+
conversation: z.ZodOptional<z.ZodObject<{
|
|
130
|
+
id: z.ZodString;
|
|
131
|
+
}, z.core.$strip>>;
|
|
132
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
133
|
+
contentType: z.ZodLiteral<"application/vnd.microsoft.card.adaptive">;
|
|
134
|
+
content: z.ZodObject<{
|
|
135
|
+
type: z.ZodLiteral<"AdaptiveCard">;
|
|
136
|
+
$schema: z.ZodString;
|
|
137
|
+
version: z.ZodString;
|
|
138
|
+
body: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
139
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
140
|
+
}, z.core.$strip>;
|
|
141
|
+
}, z.core.$strip>>>;
|
|
142
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
143
|
+
}, z.core.$loose>;
|
|
144
|
+
agentId: z.ZodOptional<z.ZodString>;
|
|
145
|
+
model: z.ZodOptional<z.ZodString>;
|
|
146
|
+
}, z.core.$strip>;
|
|
147
|
+
/** A request to the Teams conversation endpoint. */
|
|
148
|
+
export type ActivityRequest = z.infer<typeof activityRequestSchema>;
|
|
149
|
+
/**
|
|
150
|
+
* The endpoint's response: the activities to append to the transcript. An array
|
|
151
|
+
* because one turn may answer with several activities (Teams itself allows a
|
|
152
|
+
* bot to send more than one reply), and because a future streaming/typing
|
|
153
|
+
* variant can grow into the same shape without a breaking change.
|
|
154
|
+
*/
|
|
155
|
+
export declare const activityResponseSchema: z.ZodObject<{
|
|
156
|
+
activities: z.ZodArray<z.ZodObject<{
|
|
157
|
+
type: z.ZodEnum<{
|
|
158
|
+
message: "message";
|
|
159
|
+
conversationUpdate: "conversationUpdate";
|
|
160
|
+
typing: "typing";
|
|
161
|
+
}>;
|
|
162
|
+
id: z.ZodOptional<z.ZodString>;
|
|
163
|
+
text: z.ZodOptional<z.ZodString>;
|
|
164
|
+
from: z.ZodOptional<z.ZodObject<{
|
|
165
|
+
id: z.ZodString;
|
|
166
|
+
name: z.ZodOptional<z.ZodString>;
|
|
167
|
+
}, z.core.$strip>>;
|
|
168
|
+
recipient: z.ZodOptional<z.ZodObject<{
|
|
169
|
+
id: z.ZodString;
|
|
170
|
+
name: z.ZodOptional<z.ZodString>;
|
|
171
|
+
}, z.core.$strip>>;
|
|
172
|
+
conversation: z.ZodOptional<z.ZodObject<{
|
|
173
|
+
id: z.ZodString;
|
|
174
|
+
}, z.core.$strip>>;
|
|
175
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
176
|
+
contentType: z.ZodLiteral<"application/vnd.microsoft.card.adaptive">;
|
|
177
|
+
content: z.ZodObject<{
|
|
178
|
+
type: z.ZodLiteral<"AdaptiveCard">;
|
|
179
|
+
$schema: z.ZodString;
|
|
180
|
+
version: z.ZodString;
|
|
181
|
+
body: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
182
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
183
|
+
}, z.core.$strip>;
|
|
184
|
+
}, z.core.$strip>>>;
|
|
185
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
186
|
+
}, z.core.$loose>>;
|
|
187
|
+
}, z.core.$strip>;
|
|
188
|
+
/** The response from the Teams conversation endpoint. */
|
|
189
|
+
export type ActivityResponse = z.infer<typeof activityResponseSchema>;
|
|
190
|
+
/**
|
|
191
|
+
* Wrap a compiled Adaptive Card as a Teams attachment.
|
|
192
|
+
*
|
|
193
|
+
* Browser-safe and shared so the server (building a reply) and any client
|
|
194
|
+
* (rendering an optimistic local activity) tag attachments identically.
|
|
195
|
+
*/
|
|
196
|
+
export declare const toCardAttachment: (card: z.infer<typeof adaptiveCardSchema>) => CardAttachment;
|
|
197
|
+
/** Read the Adaptive Card documents carried by an activity, if any. */
|
|
198
|
+
export declare const cardsOf: (activity: Activity) => z.infer<typeof adaptiveCardSchema>[];
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-format contract for the Teams conversation endpoint: the Bot Framework
|
|
3
|
+
* `Activity` a Teams-like client posts, and the activity (carrying Adaptive Card
|
|
4
|
+
* attachments) the agent answers with.
|
|
5
|
+
*
|
|
6
|
+
* Why this shape rather than a bespoke `{ message }` envelope: Teams does not
|
|
7
|
+
* speak a custom chat API. A channel delivers a bot a JSON `Activity` and reads
|
|
8
|
+
* back activities whose `attachments` carry
|
|
9
|
+
* `application/vnd.microsoft.card.adaptive` payloads. Modelling the real
|
|
10
|
+
* protocol here means the same endpoint that backs the in-repo preview chat is
|
|
11
|
+
* the one a Bot Framework channel could call - the analogue of how the Mastra
|
|
12
|
+
* plugin exposes MCP at a path rather than inventing a tool-call API.
|
|
13
|
+
*
|
|
14
|
+
* Only the subset the conversation endpoint actually reads or writes is
|
|
15
|
+
* modelled. `Activity` is a large, evolving envelope, so unknown fields are
|
|
16
|
+
* PRESERVED rather than stripped (see {@link activitySchema}) - a channel sends
|
|
17
|
+
* far more than this, and dropping it would corrupt a round-trip.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import { z } from "zod";
|
|
22
|
+
import { adaptiveCardSchema } from "./card.js";
|
|
23
|
+
/** The attachment content type Teams uses for an Adaptive Card. */
|
|
24
|
+
export const ADAPTIVE_CARD_CONTENT_TYPE = "application/vnd.microsoft.card.adaptive";
|
|
25
|
+
/** Bot Framework activity types this endpoint understands. */
|
|
26
|
+
export const ACTIVITY_TYPES = ["message", "conversationUpdate", "typing"];
|
|
27
|
+
/**
|
|
28
|
+
* A participant in a conversation. `id` is the stable key; `name` is the
|
|
29
|
+
* display label a chat transcript shows.
|
|
30
|
+
*/
|
|
31
|
+
export const channelAccountSchema = z.object({
|
|
32
|
+
id: z.string().describe("Stable id of the user or bot."),
|
|
33
|
+
name: z.string().optional().describe("Display name shown in the transcript."),
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* The conversation an activity belongs to. The `id` is what maps onto a Mastra
|
|
37
|
+
* memory thread, so a client that keeps sending the same id gets a continuous
|
|
38
|
+
* conversation.
|
|
39
|
+
*/
|
|
40
|
+
export const conversationAccountSchema = z.object({
|
|
41
|
+
id: z.string().describe("Conversation id; maps to the agent's memory thread."),
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* An Adaptive Card attachment - how a card reaches a Teams client. The card
|
|
45
|
+
* document lives under `content`, tagged by `contentType`.
|
|
46
|
+
*/
|
|
47
|
+
export const cardAttachmentSchema = z.object({
|
|
48
|
+
contentType: z.literal(ADAPTIVE_CARD_CONTENT_TYPE),
|
|
49
|
+
content: adaptiveCardSchema.describe("The compiled Adaptive Card document."),
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* A Bot Framework activity.
|
|
53
|
+
*
|
|
54
|
+
* `.passthrough()` is deliberate: a real channel sends `channelId`,
|
|
55
|
+
* `serviceUrl`, `timestamp`, `replyToId`, `channelData` and more. This endpoint
|
|
56
|
+
* reads only what it needs, but an unknown field is part of the caller's
|
|
57
|
+
* envelope and is kept so a client can round-trip its own metadata.
|
|
58
|
+
*/
|
|
59
|
+
export const activitySchema = z
|
|
60
|
+
.object({
|
|
61
|
+
type: z.enum(ACTIVITY_TYPES).describe("Activity type; `message` carries user text."),
|
|
62
|
+
id: z.string().optional().describe("Activity id, assigned by the sender."),
|
|
63
|
+
text: z.string().optional().describe("Message text, present on a `message` activity."),
|
|
64
|
+
from: channelAccountSchema.optional().describe("Who sent the activity."),
|
|
65
|
+
recipient: channelAccountSchema.optional().describe("Who the activity is addressed to."),
|
|
66
|
+
conversation: conversationAccountSchema
|
|
67
|
+
.optional()
|
|
68
|
+
.describe("Conversation the activity belongs to."),
|
|
69
|
+
attachments: z
|
|
70
|
+
.array(cardAttachmentSchema)
|
|
71
|
+
.optional()
|
|
72
|
+
.describe("Adaptive Card attachments carried by the activity."),
|
|
73
|
+
timestamp: z.string().optional().describe("ISO-8601 time the activity was created."),
|
|
74
|
+
})
|
|
75
|
+
.passthrough();
|
|
76
|
+
/**
|
|
77
|
+
* The request body the conversation endpoint accepts: an inbound activity plus
|
|
78
|
+
* optional routing hints that are NOT part of the Bot Framework envelope
|
|
79
|
+
* (which agent to run, which serving model to use). Keeping them as siblings of
|
|
80
|
+
* `activity` leaves the protocol payload untouched.
|
|
81
|
+
*/
|
|
82
|
+
export const activityRequestSchema = z.object({
|
|
83
|
+
activity: activitySchema.describe("The inbound Bot Framework activity."),
|
|
84
|
+
agentId: z
|
|
85
|
+
.string()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe("Mastra agent to answer with. Defaults to the plugin's default agent."),
|
|
88
|
+
model: z.string().optional().describe("Optional serving-endpoint override for this turn."),
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* The endpoint's response: the activities to append to the transcript. An array
|
|
92
|
+
* because one turn may answer with several activities (Teams itself allows a
|
|
93
|
+
* bot to send more than one reply), and because a future streaming/typing
|
|
94
|
+
* variant can grow into the same shape without a breaking change.
|
|
95
|
+
*/
|
|
96
|
+
export const activityResponseSchema = z.object({
|
|
97
|
+
activities: z.array(activitySchema).describe("Activities the bot replies with."),
|
|
98
|
+
});
|
|
99
|
+
/**
|
|
100
|
+
* Wrap a compiled Adaptive Card as a Teams attachment.
|
|
101
|
+
*
|
|
102
|
+
* Browser-safe and shared so the server (building a reply) and any client
|
|
103
|
+
* (rendering an optimistic local activity) tag attachments identically.
|
|
104
|
+
*/
|
|
105
|
+
export const toCardAttachment = (card) => ({
|
|
106
|
+
contentType: ADAPTIVE_CARD_CONTENT_TYPE,
|
|
107
|
+
content: card,
|
|
108
|
+
});
|
|
109
|
+
/** Read the Adaptive Card documents carried by an activity, if any. */
|
|
110
|
+
export const cardsOf = (activity) => (activity.attachments ?? [])
|
|
111
|
+
.filter((attachment) => attachment.contentType === ADAPTIVE_CARD_CONTENT_TYPE)
|
|
112
|
+
.map((attachment) => attachment.content);
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU1QyxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcseUNBQXlDLENBQUM7QUFFcEYsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLENBQVUsQ0FBQztBQUtuRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLCtCQUErQixDQUFDO0lBQ3hELElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHVDQUF1QyxDQUFDO0NBQzlFLENBQUMsQ0FBQztBQUtIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hELEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHFEQUFxRCxDQUFDO0NBQy9FLENBQUMsQ0FBQztBQUtIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsV0FBVyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUM7SUFDbEQsT0FBTyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsQ0FBQztDQUM3RSxDQUFDLENBQUM7QUFLSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUM7S0FDNUIsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLDZDQUE2QyxDQUFDO0lBQ3BGLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDO0lBQzFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGdEQUFnRCxDQUFDO0lBQ3RGLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUM7SUFDeEUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQztJQUN4RixZQUFZLEVBQUUseUJBQXlCO1NBQ3BDLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyx1Q0FBdUMsQ0FBQztJQUNwRCxXQUFXLEVBQUUsQ0FBQztTQUNYLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztTQUMzQixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsb0RBQW9ELENBQUM7SUFDakUsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMseUNBQXlDLENBQUM7Q0FDckYsQ0FBQztLQUNELFdBQVcsRUFBRSxDQUFDO0FBS2pCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxxQ0FBcUMsQ0FBQztJQUN4RSxPQUFPLEVBQUUsQ0FBQztTQUNQLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyxzRUFBc0UsQ0FBQztJQUNuRixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtREFBbUQsQ0FBQztDQUMzRixDQUFDLENBQUM7QUFLSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxDQUFDO0NBQ2pGLENBQUMsQ0FBQztBQUtIOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUF3QyxFQUFrQixFQUFFLENBQUMsQ0FBQztJQUM3RixXQUFXLEVBQUUsMEJBQTBCO0lBQ3ZDLE9BQU8sRUFBRSxJQUFJO0NBQ2QsQ0FBQyxDQUFDO0FBRUgsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWtCLEVBQXdDLEVBQUUsQ0FDbEYsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztLQUN6QixNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssMEJBQTBCLENBQUM7S0FDN0UsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IGNvbnRyYWN0IGZvciB0aGUgVGVhbXMgY29udmVyc2F0aW9uIGVuZHBvaW50OiB0aGUgQm90IEZyYW1ld29ya1xuICogYEFjdGl2aXR5YCBhIFRlYW1zLWxpa2UgY2xpZW50IHBvc3RzLCBhbmQgdGhlIGFjdGl2aXR5IChjYXJyeWluZyBBZGFwdGl2ZSBDYXJkXG4gKiBhdHRhY2htZW50cykgdGhlIGFnZW50IGFuc3dlcnMgd2l0aC5cbiAqXG4gKiBXaHkgdGhpcyBzaGFwZSByYXRoZXIgdGhhbiBhIGJlc3Bva2UgYHsgbWVzc2FnZSB9YCBlbnZlbG9wZTogVGVhbXMgZG9lcyBub3RcbiAqIHNwZWFrIGEgY3VzdG9tIGNoYXQgQVBJLiBBIGNoYW5uZWwgZGVsaXZlcnMgYSBib3QgYSBKU09OIGBBY3Rpdml0eWAgYW5kIHJlYWRzXG4gKiBiYWNrIGFjdGl2aXRpZXMgd2hvc2UgYGF0dGFjaG1lbnRzYCBjYXJyeVxuICogYGFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZWAgcGF5bG9hZHMuIE1vZGVsbGluZyB0aGUgcmVhbFxuICogcHJvdG9jb2wgaGVyZSBtZWFucyB0aGUgc2FtZSBlbmRwb2ludCB0aGF0IGJhY2tzIHRoZSBpbi1yZXBvIHByZXZpZXcgY2hhdCBpc1xuICogdGhlIG9uZSBhIEJvdCBGcmFtZXdvcmsgY2hhbm5lbCBjb3VsZCBjYWxsIC0gdGhlIGFuYWxvZ3VlIG9mIGhvdyB0aGUgTWFzdHJhXG4gKiBwbHVnaW4gZXhwb3NlcyBNQ1AgYXQgYSBwYXRoIHJhdGhlciB0aGFuIGludmVudGluZyBhIHRvb2wtY2FsbCBBUEkuXG4gKlxuICogT25seSB0aGUgc3Vic2V0IHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnQgYWN0dWFsbHkgcmVhZHMgb3Igd3JpdGVzIGlzXG4gKiBtb2RlbGxlZC4gYEFjdGl2aXR5YCBpcyBhIGxhcmdlLCBldm9sdmluZyBlbnZlbG9wZSwgc28gdW5rbm93biBmaWVsZHMgYXJlXG4gKiBQUkVTRVJWRUQgcmF0aGVyIHRoYW4gc3RyaXBwZWQgKHNlZSB7QGxpbmsgYWN0aXZpdHlTY2hlbWF9KSAtIGEgY2hhbm5lbCBzZW5kc1xuICogZmFyIG1vcmUgdGhhbiB0aGlzLCBhbmQgZHJvcHBpbmcgaXQgd291bGQgY29ycnVwdCBhIHJvdW5kLXRyaXAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBhZGFwdGl2ZUNhcmRTY2hlbWEgfSBmcm9tIFwiLi9jYXJkXCI7XG5cbi8qKiBUaGUgYXR0YWNobWVudCBjb250ZW50IHR5cGUgVGVhbXMgdXNlcyBmb3IgYW4gQWRhcHRpdmUgQ2FyZC4gKi9cbmV4cG9ydCBjb25zdCBBREFQVElWRV9DQVJEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLmFkYXB0aXZlXCI7XG5cbi8qKiBCb3QgRnJhbWV3b3JrIGFjdGl2aXR5IHR5cGVzIHRoaXMgZW5kcG9pbnQgdW5kZXJzdGFuZHMuICovXG5leHBvcnQgY29uc3QgQUNUSVZJVFlfVFlQRVMgPSBbXCJtZXNzYWdlXCIsIFwiY29udmVyc2F0aW9uVXBkYXRlXCIsIFwidHlwaW5nXCJdIGFzIGNvbnN0O1xuXG4vKiogQSBCb3QgRnJhbWV3b3JrIGFjdGl2aXR5IHR5cGUuICovXG5leHBvcnQgdHlwZSBBY3Rpdml0eVR5cGUgPSAodHlwZW9mIEFDVElWSVRZX1RZUEVTKVtudW1iZXJdO1xuXG4vKipcbiAqIEEgcGFydGljaXBhbnQgaW4gYSBjb252ZXJzYXRpb24uIGBpZGAgaXMgdGhlIHN0YWJsZSBrZXk7IGBuYW1lYCBpcyB0aGVcbiAqIGRpc3BsYXkgbGFiZWwgYSBjaGF0IHRyYW5zY3JpcHQgc2hvd3MuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGFubmVsQWNjb3VudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTdGFibGUgaWQgb2YgdGhlIHVzZXIgb3IgYm90LlwiKSxcbiAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRGlzcGxheSBuYW1lIHNob3duIGluIHRoZSB0cmFuc2NyaXB0LlwiKSxcbn0pO1xuXG4vKiogQSBjb252ZXJzYXRpb24gcGFydGljaXBhbnQgKHVzZXIgb3IgYm90KS4gKi9cbmV4cG9ydCB0eXBlIENoYW5uZWxBY2NvdW50ID0gei5pbmZlcjx0eXBlb2YgY2hhbm5lbEFjY291bnRTY2hlbWE+O1xuXG4vKipcbiAqIFRoZSBjb252ZXJzYXRpb24gYW4gYWN0aXZpdHkgYmVsb25ncyB0by4gVGhlIGBpZGAgaXMgd2hhdCBtYXBzIG9udG8gYSBNYXN0cmFcbiAqIG1lbW9yeSB0aHJlYWQsIHNvIGEgY2xpZW50IHRoYXQga2VlcHMgc2VuZGluZyB0aGUgc2FtZSBpZCBnZXRzIGEgY29udGludW91c1xuICogY29udmVyc2F0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY29udmVyc2F0aW9uQWNjb3VudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gaWQ7IG1hcHMgdG8gdGhlIGFnZW50J3MgbWVtb3J5IHRocmVhZC5cIiksXG59KTtcblxuLyoqIFRoZSBjb252ZXJzYXRpb24gYW4gYWN0aXZpdHkgYmVsb25ncyB0by4gKi9cbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvbkFjY291bnQgPSB6LmluZmVyPHR5cGVvZiBjb252ZXJzYXRpb25BY2NvdW50U2NoZW1hPjtcblxuLyoqXG4gKiBBbiBBZGFwdGl2ZSBDYXJkIGF0dGFjaG1lbnQgLSBob3cgYSBjYXJkIHJlYWNoZXMgYSBUZWFtcyBjbGllbnQuIFRoZSBjYXJkXG4gKiBkb2N1bWVudCBsaXZlcyB1bmRlciBgY29udGVudGAsIHRhZ2dlZCBieSBgY29udGVudFR5cGVgLlxuICovXG5leHBvcnQgY29uc3QgY2FyZEF0dGFjaG1lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRUeXBlOiB6LmxpdGVyYWwoQURBUFRJVkVfQ0FSRF9DT05URU5UX1RZUEUpLFxuICBjb250ZW50OiBhZGFwdGl2ZUNhcmRTY2hlbWEuZGVzY3JpYmUoXCJUaGUgY29tcGlsZWQgQWRhcHRpdmUgQ2FyZCBkb2N1bWVudC5cIiksXG59KTtcblxuLyoqIEFuIEFkYXB0aXZlIENhcmQgYXR0YWNobWVudCBvbiBhbiBhY3Rpdml0eS4gKi9cbmV4cG9ydCB0eXBlIENhcmRBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgY2FyZEF0dGFjaG1lbnRTY2hlbWE+O1xuXG4vKipcbiAqIEEgQm90IEZyYW1ld29yayBhY3Rpdml0eS5cbiAqXG4gKiBgLnBhc3N0aHJvdWdoKClgIGlzIGRlbGliZXJhdGU6IGEgcmVhbCBjaGFubmVsIHNlbmRzIGBjaGFubmVsSWRgLFxuICogYHNlcnZpY2VVcmxgLCBgdGltZXN0YW1wYCwgYHJlcGx5VG9JZGAsIGBjaGFubmVsRGF0YWAgYW5kIG1vcmUuIFRoaXMgZW5kcG9pbnRcbiAqIHJlYWRzIG9ubHkgd2hhdCBpdCBuZWVkcywgYnV0IGFuIHVua25vd24gZmllbGQgaXMgcGFydCBvZiB0aGUgY2FsbGVyJ3NcbiAqIGVudmVsb3BlIGFuZCBpcyBrZXB0IHNvIGEgY2xpZW50IGNhbiByb3VuZC10cmlwIGl0cyBvd24gbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBhY3Rpdml0eVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKEFDVElWSVRZX1RZUEVTKS5kZXNjcmliZShcIkFjdGl2aXR5IHR5cGU7IGBtZXNzYWdlYCBjYXJyaWVzIHVzZXIgdGV4dC5cIiksXG4gICAgaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkFjdGl2aXR5IGlkLCBhc3NpZ25lZCBieSB0aGUgc2VuZGVyLlwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJNZXNzYWdlIHRleHQsIHByZXNlbnQgb24gYSBgbWVzc2FnZWAgYWN0aXZpdHkuXCIpLFxuICAgIGZyb206IGNoYW5uZWxBY2NvdW50U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJXaG8gc2VudCB0aGUgYWN0aXZpdHkuXCIpLFxuICAgIHJlY2lwaWVudDogY2hhbm5lbEFjY291bnRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIldobyB0aGUgYWN0aXZpdHkgaXMgYWRkcmVzc2VkIHRvLlwiKSxcbiAgICBjb252ZXJzYXRpb246IGNvbnZlcnNhdGlvbkFjY291bnRTY2hlbWFcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gdGhlIGFjdGl2aXR5IGJlbG9uZ3MgdG8uXCIpLFxuICAgIGF0dGFjaG1lbnRzOiB6XG4gICAgICAuYXJyYXkoY2FyZEF0dGFjaG1lbnRTY2hlbWEpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiQWRhcHRpdmUgQ2FyZCBhdHRhY2htZW50cyBjYXJyaWVkIGJ5IHRoZSBhY3Rpdml0eS5cIiksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJJU08tODYwMSB0aW1lIHRoZSBhY3Rpdml0eSB3YXMgY3JlYXRlZC5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpO1xuXG4vKiogQSBCb3QgRnJhbWV3b3JrIGFjdGl2aXR5LiAqL1xuZXhwb3J0IHR5cGUgQWN0aXZpdHkgPSB6LmluZmVyPHR5cGVvZiBhY3Rpdml0eVNjaGVtYT47XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSB0aGUgY29udmVyc2F0aW9uIGVuZHBvaW50IGFjY2VwdHM6IGFuIGluYm91bmQgYWN0aXZpdHkgcGx1c1xuICogb3B0aW9uYWwgcm91dGluZyBoaW50cyB0aGF0IGFyZSBOT1QgcGFydCBvZiB0aGUgQm90IEZyYW1ld29yayBlbnZlbG9wZVxuICogKHdoaWNoIGFnZW50IHRvIHJ1biwgd2hpY2ggc2VydmluZyBtb2RlbCB0byB1c2UpLiBLZWVwaW5nIHRoZW0gYXMgc2libGluZ3Mgb2ZcbiAqIGBhY3Rpdml0eWAgbGVhdmVzIHRoZSBwcm90b2NvbCBwYXlsb2FkIHVudG91Y2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFjdGl2aXR5UmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWN0aXZpdHk6IGFjdGl2aXR5U2NoZW1hLmRlc2NyaWJlKFwiVGhlIGluYm91bmQgQm90IEZyYW1ld29yayBhY3Rpdml0eS5cIiksXG4gIGFnZW50SWQ6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIk1hc3RyYSBhZ2VudCB0byBhbnN3ZXIgd2l0aC4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGRlZmF1bHQgYWdlbnQuXCIpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiT3B0aW9uYWwgc2VydmluZy1lbmRwb2ludCBvdmVycmlkZSBmb3IgdGhpcyB0dXJuLlwiKSxcbn0pO1xuXG4vKiogQSByZXF1ZXN0IHRvIHRoZSBUZWFtcyBjb252ZXJzYXRpb24gZW5kcG9pbnQuICovXG5leHBvcnQgdHlwZSBBY3Rpdml0eVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBhY3Rpdml0eVJlcXVlc3RTY2hlbWE+O1xuXG4vKipcbiAqIFRoZSBlbmRwb2ludCdzIHJlc3BvbnNlOiB0aGUgYWN0aXZpdGllcyB0byBhcHBlbmQgdG8gdGhlIHRyYW5zY3JpcHQuIEFuIGFycmF5XG4gKiBiZWNhdXNlIG9uZSB0dXJuIG1heSBhbnN3ZXIgd2l0aCBzZXZlcmFsIGFjdGl2aXRpZXMgKFRlYW1zIGl0c2VsZiBhbGxvd3MgYVxuICogYm90IHRvIHNlbmQgbW9yZSB0aGFuIG9uZSByZXBseSksIGFuZCBiZWNhdXNlIGEgZnV0dXJlIHN0cmVhbWluZy90eXBpbmdcbiAqIHZhcmlhbnQgY2FuIGdyb3cgaW50byB0aGUgc2FtZSBzaGFwZSB3aXRob3V0IGEgYnJlYWtpbmcgY2hhbmdlLlxuICovXG5leHBvcnQgY29uc3QgYWN0aXZpdHlSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWN0aXZpdGllczogei5hcnJheShhY3Rpdml0eVNjaGVtYSkuZGVzY3JpYmUoXCJBY3Rpdml0aWVzIHRoZSBib3QgcmVwbGllcyB3aXRoLlwiKSxcbn0pO1xuXG4vKiogVGhlIHJlc3BvbnNlIGZyb20gdGhlIFRlYW1zIGNvbnZlcnNhdGlvbiBlbmRwb2ludC4gKi9cbmV4cG9ydCB0eXBlIEFjdGl2aXR5UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBhY3Rpdml0eVJlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBXcmFwIGEgY29tcGlsZWQgQWRhcHRpdmUgQ2FyZCBhcyBhIFRlYW1zIGF0dGFjaG1lbnQuXG4gKlxuICogQnJvd3Nlci1zYWZlIGFuZCBzaGFyZWQgc28gdGhlIHNlcnZlciAoYnVpbGRpbmcgYSByZXBseSkgYW5kIGFueSBjbGllbnRcbiAqIChyZW5kZXJpbmcgYW4gb3B0aW1pc3RpYyBsb2NhbCBhY3Rpdml0eSkgdGFnIGF0dGFjaG1lbnRzIGlkZW50aWNhbGx5LlxuICovXG5leHBvcnQgY29uc3QgdG9DYXJkQXR0YWNobWVudCA9IChjYXJkOiB6LmluZmVyPHR5cGVvZiBhZGFwdGl2ZUNhcmRTY2hlbWE+KTogQ2FyZEF0dGFjaG1lbnQgPT4gKHtcbiAgY29udGVudFR5cGU6IEFEQVBUSVZFX0NBUkRfQ09OVEVOVF9UWVBFLFxuICBjb250ZW50OiBjYXJkLFxufSk7XG5cbi8qKiBSZWFkIHRoZSBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50cyBjYXJyaWVkIGJ5IGFuIGFjdGl2aXR5LCBpZiBhbnkuICovXG5leHBvcnQgY29uc3QgY2FyZHNPZiA9IChhY3Rpdml0eTogQWN0aXZpdHkpOiB6LmluZmVyPHR5cGVvZiBhZGFwdGl2ZUNhcmRTY2hlbWE+W10gPT5cbiAgKGFjdGl2aXR5LmF0dGFjaG1lbnRzID8/IFtdKVxuICAgIC5maWx0ZXIoKGF0dGFjaG1lbnQpID0+IGF0dGFjaG1lbnQuY29udGVudFR5cGUgPT09IEFEQVBUSVZFX0NBUkRfQ09OVEVOVF9UWVBFKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQpID0+IGF0dGFjaG1lbnQuY29udGVudCk7XG4iXX0=
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-format contract for the Teams add-on: the semantic card a model drafts
|
|
3
|
+
* and the Adaptive Card document that drafting compiles to. Pure (zod +
|
|
4
|
+
* inferred types, no Node-only imports) so the server-side card builder, the
|
|
5
|
+
* Mastra tool, and the React Adaptive Cards renderer all validate / type
|
|
6
|
+
* against one definition.
|
|
7
|
+
*
|
|
8
|
+
* The model does NOT hand-author raw Adaptive Card JSON. It describes a card in
|
|
9
|
+
* a small, high-level vocabulary ({@link CardSpec}) - a title, some text/fact
|
|
10
|
+
* blocks, and optional link actions - and the builder compiles that into a
|
|
11
|
+
* valid Adaptive Card 1.5 document ({@link AdaptiveCard}). Keeping the model's
|
|
12
|
+
* surface small avoids the two failure modes of free-form card JSON: an invalid
|
|
13
|
+
* schema the renderer rejects, and a card that renders but ignores Teams' host
|
|
14
|
+
* constraints.
|
|
15
|
+
*
|
|
16
|
+
* Array fields intentionally avoid `.min()` / `.nonempty()`: those emit
|
|
17
|
+
* `minItems` in the JSON schema, which some Model Serving endpoints reject
|
|
18
|
+
* ("array types do not support minItems") when the schema is forwarded as a
|
|
19
|
+
* tool definition.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import { z } from "zod";
|
|
24
|
+
/** The Adaptive Card schema version the builder targets. Teams supports 1.5. */
|
|
25
|
+
export declare const ADAPTIVE_CARD_VERSION = "1.5";
|
|
26
|
+
/** The Adaptive Card `$schema` URL a well-formed document declares. */
|
|
27
|
+
export declare const ADAPTIVE_CARD_SCHEMA_URL = "http://adaptivecards.io/schemas/adaptive-card.json";
|
|
28
|
+
/**
|
|
29
|
+
* A single labelled fact, rendered as a row in an Adaptive Card `FactSet`.
|
|
30
|
+
* Facts are the right shape for compact key/value detail (status, owner, due
|
|
31
|
+
* date) that would be noise as prose.
|
|
32
|
+
*/
|
|
33
|
+
export declare const cardFactSchema: z.ZodObject<{
|
|
34
|
+
title: z.ZodString;
|
|
35
|
+
value: z.ZodString;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
/** A labelled key/value fact in a {@link CardSpec}. */
|
|
38
|
+
export type CardFact = z.infer<typeof cardFactSchema>;
|
|
39
|
+
/**
|
|
40
|
+
* An action button rendered under the card body. Only an open-URL action is
|
|
41
|
+
* modelled: it is the one action that is safe to render in any host without a
|
|
42
|
+
* back-end wired up, and it covers the common "here is the link" case.
|
|
43
|
+
*/
|
|
44
|
+
export declare const cardActionSchema: z.ZodObject<{
|
|
45
|
+
title: z.ZodString;
|
|
46
|
+
url: z.ZodString;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
/** A link action button in a {@link CardSpec}. */
|
|
49
|
+
export type CardAction = z.infer<typeof cardActionSchema>;
|
|
50
|
+
/**
|
|
51
|
+
* The high-level card a model asks to build (the tool input). Deliberately
|
|
52
|
+
* small: a heading, optional supporting text, optional facts, and optional link
|
|
53
|
+
* buttons. The builder turns this into a full Adaptive Card document.
|
|
54
|
+
*/
|
|
55
|
+
export declare const cardSpecSchema: z.ZodObject<{
|
|
56
|
+
title: z.ZodString;
|
|
57
|
+
subtitle: z.ZodOptional<z.ZodString>;
|
|
58
|
+
text: z.ZodOptional<z.ZodString>;
|
|
59
|
+
facts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
60
|
+
title: z.ZodString;
|
|
61
|
+
value: z.ZodString;
|
|
62
|
+
}, z.core.$strip>>>;
|
|
63
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
64
|
+
title: z.ZodString;
|
|
65
|
+
url: z.ZodString;
|
|
66
|
+
}, z.core.$strip>>>;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
/** The validated semantic card a model asked to build. */
|
|
69
|
+
export type CardSpec = z.infer<typeof cardSpecSchema>;
|
|
70
|
+
/**
|
|
71
|
+
* The compiled Adaptive Card document - the JSON the `adaptivecards` renderer
|
|
72
|
+
* consumes. Typed loosely (`elements` / `actions` as record arrays) because the
|
|
73
|
+
* full Adaptive Card schema is large and host-versioned; the builder owns the
|
|
74
|
+
* exact element shapes and this contract only pins the envelope every consumer
|
|
75
|
+
* relies on (`type`, `version`, `body`).
|
|
76
|
+
*/
|
|
77
|
+
export declare const adaptiveCardSchema: z.ZodObject<{
|
|
78
|
+
type: z.ZodLiteral<"AdaptiveCard">;
|
|
79
|
+
$schema: z.ZodString;
|
|
80
|
+
version: z.ZodString;
|
|
81
|
+
body: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
82
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
83
|
+
}, z.core.$strip>;
|
|
84
|
+
/** A compiled Adaptive Card document ready to render or post to Teams. */
|
|
85
|
+
export type AdaptiveCard = z.infer<typeof adaptiveCardSchema>;
|
|
86
|
+
/**
|
|
87
|
+
* The result the card tool returns: the compiled Adaptive Card plus the
|
|
88
|
+
* `title` echoed back for a caller that wants a label without re-reading the
|
|
89
|
+
* document. Kept separate from {@link AdaptiveCard} so the tool output stays
|
|
90
|
+
* additive.
|
|
91
|
+
*/
|
|
92
|
+
export declare const cardResultSchema: z.ZodObject<{
|
|
93
|
+
title: z.ZodString;
|
|
94
|
+
card: z.ZodObject<{
|
|
95
|
+
type: z.ZodLiteral<"AdaptiveCard">;
|
|
96
|
+
$schema: z.ZodString;
|
|
97
|
+
version: z.ZodString;
|
|
98
|
+
body: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
99
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
100
|
+
}, z.core.$strip>;
|
|
101
|
+
}, z.core.$strip>;
|
|
102
|
+
/** The result of building a card. */
|
|
103
|
+
export type CardResult = z.infer<typeof cardResultSchema>;
|
package/lib/src/card.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-format contract for the Teams add-on: the semantic card a model drafts
|
|
3
|
+
* and the Adaptive Card document that drafting compiles to. Pure (zod +
|
|
4
|
+
* inferred types, no Node-only imports) so the server-side card builder, the
|
|
5
|
+
* Mastra tool, and the React Adaptive Cards renderer all validate / type
|
|
6
|
+
* against one definition.
|
|
7
|
+
*
|
|
8
|
+
* The model does NOT hand-author raw Adaptive Card JSON. It describes a card in
|
|
9
|
+
* a small, high-level vocabulary ({@link CardSpec}) - a title, some text/fact
|
|
10
|
+
* blocks, and optional link actions - and the builder compiles that into a
|
|
11
|
+
* valid Adaptive Card 1.5 document ({@link AdaptiveCard}). Keeping the model's
|
|
12
|
+
* surface small avoids the two failure modes of free-form card JSON: an invalid
|
|
13
|
+
* schema the renderer rejects, and a card that renders but ignores Teams' host
|
|
14
|
+
* constraints.
|
|
15
|
+
*
|
|
16
|
+
* Array fields intentionally avoid `.min()` / `.nonempty()`: those emit
|
|
17
|
+
* `minItems` in the JSON schema, which some Model Serving endpoints reject
|
|
18
|
+
* ("array types do not support minItems") when the schema is forwarded as a
|
|
19
|
+
* tool definition.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import { z } from "zod";
|
|
24
|
+
/** The Adaptive Card schema version the builder targets. Teams supports 1.5. */
|
|
25
|
+
export const ADAPTIVE_CARD_VERSION = "1.5";
|
|
26
|
+
/** The Adaptive Card `$schema` URL a well-formed document declares. */
|
|
27
|
+
export const ADAPTIVE_CARD_SCHEMA_URL = "http://adaptivecards.io/schemas/adaptive-card.json";
|
|
28
|
+
/**
|
|
29
|
+
* A single labelled fact, rendered as a row in an Adaptive Card `FactSet`.
|
|
30
|
+
* Facts are the right shape for compact key/value detail (status, owner, due
|
|
31
|
+
* date) that would be noise as prose.
|
|
32
|
+
*/
|
|
33
|
+
export const cardFactSchema = z.object({
|
|
34
|
+
title: z.string().describe('Fact label shown on the left (e.g. "Status", "Owner").'),
|
|
35
|
+
value: z.string().describe('Fact value shown on the right (e.g. "Open", "alice").'),
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* An action button rendered under the card body. Only an open-URL action is
|
|
39
|
+
* modelled: it is the one action that is safe to render in any host without a
|
|
40
|
+
* back-end wired up, and it covers the common "here is the link" case.
|
|
41
|
+
*/
|
|
42
|
+
export const cardActionSchema = z.object({
|
|
43
|
+
title: z.string().describe('Button label (e.g. "Open ticket", "View run").'),
|
|
44
|
+
url: z
|
|
45
|
+
.string()
|
|
46
|
+
.describe("Absolute https URL the button opens when tapped (an Action.OpenUrl target)."),
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* The high-level card a model asks to build (the tool input). Deliberately
|
|
50
|
+
* small: a heading, optional supporting text, optional facts, and optional link
|
|
51
|
+
* buttons. The builder turns this into a full Adaptive Card document.
|
|
52
|
+
*/
|
|
53
|
+
export const cardSpecSchema = z.object({
|
|
54
|
+
title: z.string().describe("Card heading, shown bold at the top of the card."),
|
|
55
|
+
subtitle: z
|
|
56
|
+
.string()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe("Optional lighter subheading under the title (e.g. a category or timestamp)."),
|
|
59
|
+
text: z
|
|
60
|
+
.string()
|
|
61
|
+
.optional()
|
|
62
|
+
.describe([
|
|
63
|
+
"Optional body text under the heading. A limited Markdown subset is",
|
|
64
|
+
"supported by the Teams host: **bold**, _italic_, links, and '-' bullet",
|
|
65
|
+
"lists. Do NOT use headings, tables, or fenced code blocks - use the",
|
|
66
|
+
"`facts` array for tabular key/value detail instead.",
|
|
67
|
+
].join(" ")),
|
|
68
|
+
facts: z
|
|
69
|
+
.array(cardFactSchema)
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Optional key/value rows rendered as a FactSet (label on the left, value right)."),
|
|
72
|
+
actions: z
|
|
73
|
+
.array(cardActionSchema)
|
|
74
|
+
.optional()
|
|
75
|
+
.describe("Optional link buttons rendered under the body, each opening a URL."),
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* The compiled Adaptive Card document - the JSON the `adaptivecards` renderer
|
|
79
|
+
* consumes. Typed loosely (`elements` / `actions` as record arrays) because the
|
|
80
|
+
* full Adaptive Card schema is large and host-versioned; the builder owns the
|
|
81
|
+
* exact element shapes and this contract only pins the envelope every consumer
|
|
82
|
+
* relies on (`type`, `version`, `body`).
|
|
83
|
+
*/
|
|
84
|
+
export const adaptiveCardSchema = z.object({
|
|
85
|
+
type: z.literal("AdaptiveCard"),
|
|
86
|
+
$schema: z.string(),
|
|
87
|
+
version: z.string(),
|
|
88
|
+
body: z.array(z.record(z.string(), z.unknown())),
|
|
89
|
+
actions: z.array(z.record(z.string(), z.unknown())).optional(),
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* The result the card tool returns: the compiled Adaptive Card plus the
|
|
93
|
+
* `title` echoed back for a caller that wants a label without re-reading the
|
|
94
|
+
* document. Kept separate from {@link AdaptiveCard} so the tool output stays
|
|
95
|
+
* additive.
|
|
96
|
+
*/
|
|
97
|
+
export const cardResultSchema = z.object({
|
|
98
|
+
title: z.string().describe("The card title, echoed for convenience."),
|
|
99
|
+
card: adaptiveCardSchema.describe("The compiled Adaptive Card document."),
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFFM0MsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLG9EQUFvRCxDQUFDO0FBRTdGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx3REFBd0QsQ0FBQztJQUNwRixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx1REFBdUQsQ0FBQztDQUNwRixDQUFDLENBQUM7QUFLSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxnREFBZ0QsQ0FBQztJQUM1RSxHQUFHLEVBQUUsQ0FBQztTQUNILE1BQU0sRUFBRTtTQUNSLFFBQVEsQ0FBQyw2RUFBNkUsQ0FBQztDQUMzRixDQUFDLENBQUM7QUFLSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsa0RBQWtELENBQUM7SUFDOUUsUUFBUSxFQUFFLENBQUM7U0FDUixNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsNkVBQTZFLENBQUM7SUFDMUYsSUFBSSxFQUFFLENBQUM7U0FDSixNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQ1A7UUFDRSxvRUFBb0U7UUFDcEUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxxREFBcUQ7S0FDdEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ1o7SUFDSCxLQUFLLEVBQUUsQ0FBQztTQUNMLEtBQUssQ0FBQyxjQUFjLENBQUM7U0FDckIsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLGlGQUFpRixDQUFDO0lBQzlGLE9BQU8sRUFBRSxDQUFDO1NBQ1AsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1NBQ3ZCLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyxvRUFBb0UsQ0FBQztDQUNsRixDQUFDLENBQUM7QUFLSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUMvQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNoRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUMvRCxDQUFDLENBQUM7QUFLSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMseUNBQXlDLENBQUM7SUFDckUsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsQ0FBQztDQUMxRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IGNvbnRyYWN0IGZvciB0aGUgVGVhbXMgYWRkLW9uOiB0aGUgc2VtYW50aWMgY2FyZCBhIG1vZGVsIGRyYWZ0c1xuICogYW5kIHRoZSBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50IHRoYXQgZHJhZnRpbmcgY29tcGlsZXMgdG8uIFB1cmUgKHpvZCArXG4gKiBpbmZlcnJlZCB0eXBlcywgbm8gTm9kZS1vbmx5IGltcG9ydHMpIHNvIHRoZSBzZXJ2ZXItc2lkZSBjYXJkIGJ1aWxkZXIsIHRoZVxuICogTWFzdHJhIHRvb2wsIGFuZCB0aGUgUmVhY3QgQWRhcHRpdmUgQ2FyZHMgcmVuZGVyZXIgYWxsIHZhbGlkYXRlIC8gdHlwZVxuICogYWdhaW5zdCBvbmUgZGVmaW5pdGlvbi5cbiAqXG4gKiBUaGUgbW9kZWwgZG9lcyBOT1QgaGFuZC1hdXRob3IgcmF3IEFkYXB0aXZlIENhcmQgSlNPTi4gSXQgZGVzY3JpYmVzIGEgY2FyZCBpblxuICogYSBzbWFsbCwgaGlnaC1sZXZlbCB2b2NhYnVsYXJ5ICh7QGxpbmsgQ2FyZFNwZWN9KSAtIGEgdGl0bGUsIHNvbWUgdGV4dC9mYWN0XG4gKiBibG9ja3MsIGFuZCBvcHRpb25hbCBsaW5rIGFjdGlvbnMgLSBhbmQgdGhlIGJ1aWxkZXIgY29tcGlsZXMgdGhhdCBpbnRvIGFcbiAqIHZhbGlkIEFkYXB0aXZlIENhcmQgMS41IGRvY3VtZW50ICh7QGxpbmsgQWRhcHRpdmVDYXJkfSkuIEtlZXBpbmcgdGhlIG1vZGVsJ3NcbiAqIHN1cmZhY2Ugc21hbGwgYXZvaWRzIHRoZSB0d28gZmFpbHVyZSBtb2RlcyBvZiBmcmVlLWZvcm0gY2FyZCBKU09OOiBhbiBpbnZhbGlkXG4gKiBzY2hlbWEgdGhlIHJlbmRlcmVyIHJlamVjdHMsIGFuZCBhIGNhcmQgdGhhdCByZW5kZXJzIGJ1dCBpZ25vcmVzIFRlYW1zJyBob3N0XG4gKiBjb25zdHJhaW50cy5cbiAqXG4gKiBBcnJheSBmaWVsZHMgaW50ZW50aW9uYWxseSBhdm9pZCBgLm1pbigpYCAvIGAubm9uZW1wdHkoKWA6IHRob3NlIGVtaXRcbiAqIGBtaW5JdGVtc2AgaW4gdGhlIEpTT04gc2NoZW1hLCB3aGljaCBzb21lIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnRzIHJlamVjdFxuICogKFwiYXJyYXkgdHlwZXMgZG8gbm90IHN1cHBvcnQgbWluSXRlbXNcIikgd2hlbiB0aGUgc2NoZW1hIGlzIGZvcndhcmRlZCBhcyBhXG4gKiB0b29sIGRlZmluaXRpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKiBUaGUgQWRhcHRpdmUgQ2FyZCBzY2hlbWEgdmVyc2lvbiB0aGUgYnVpbGRlciB0YXJnZXRzLiBUZWFtcyBzdXBwb3J0cyAxLjUuICovXG5leHBvcnQgY29uc3QgQURBUFRJVkVfQ0FSRF9WRVJTSU9OID0gXCIxLjVcIjtcblxuLyoqIFRoZSBBZGFwdGl2ZSBDYXJkIGAkc2NoZW1hYCBVUkwgYSB3ZWxsLWZvcm1lZCBkb2N1bWVudCBkZWNsYXJlcy4gKi9cbmV4cG9ydCBjb25zdCBBREFQVElWRV9DQVJEX1NDSEVNQV9VUkwgPSBcImh0dHA6Ly9hZGFwdGl2ZWNhcmRzLmlvL3NjaGVtYXMvYWRhcHRpdmUtY2FyZC5qc29uXCI7XG5cbi8qKlxuICogQSBzaW5nbGUgbGFiZWxsZWQgZmFjdCwgcmVuZGVyZWQgYXMgYSByb3cgaW4gYW4gQWRhcHRpdmUgQ2FyZCBgRmFjdFNldGAuXG4gKiBGYWN0cyBhcmUgdGhlIHJpZ2h0IHNoYXBlIGZvciBjb21wYWN0IGtleS92YWx1ZSBkZXRhaWwgKHN0YXR1cywgb3duZXIsIGR1ZVxuICogZGF0ZSkgdGhhdCB3b3VsZCBiZSBub2lzZSBhcyBwcm9zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNhcmRGYWN0U2NoZW1hID0gei5vYmplY3Qoe1xuICB0aXRsZTogei5zdHJpbmcoKS5kZXNjcmliZSgnRmFjdCBsYWJlbCBzaG93biBvbiB0aGUgbGVmdCAoZS5nLiBcIlN0YXR1c1wiLCBcIk93bmVyXCIpLicpLFxuICB2YWx1ZTogei5zdHJpbmcoKS5kZXNjcmliZSgnRmFjdCB2YWx1ZSBzaG93biBvbiB0aGUgcmlnaHQgKGUuZy4gXCJPcGVuXCIsIFwiYWxpY2VcIikuJyksXG59KTtcblxuLyoqIEEgbGFiZWxsZWQga2V5L3ZhbHVlIGZhY3QgaW4gYSB7QGxpbmsgQ2FyZFNwZWN9LiAqL1xuZXhwb3J0IHR5cGUgQ2FyZEZhY3QgPSB6LmluZmVyPHR5cGVvZiBjYXJkRmFjdFNjaGVtYT47XG5cbi8qKlxuICogQW4gYWN0aW9uIGJ1dHRvbiByZW5kZXJlZCB1bmRlciB0aGUgY2FyZCBib2R5LiBPbmx5IGFuIG9wZW4tVVJMIGFjdGlvbiBpc1xuICogbW9kZWxsZWQ6IGl0IGlzIHRoZSBvbmUgYWN0aW9uIHRoYXQgaXMgc2FmZSB0byByZW5kZXIgaW4gYW55IGhvc3Qgd2l0aG91dCBhXG4gKiBiYWNrLWVuZCB3aXJlZCB1cCwgYW5kIGl0IGNvdmVycyB0aGUgY29tbW9uIFwiaGVyZSBpcyB0aGUgbGlua1wiIGNhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBjYXJkQWN0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICB0aXRsZTogei5zdHJpbmcoKS5kZXNjcmliZSgnQnV0dG9uIGxhYmVsIChlLmcuIFwiT3BlbiB0aWNrZXRcIiwgXCJWaWV3IHJ1blwiKS4nKSxcbiAgdXJsOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFwiQWJzb2x1dGUgaHR0cHMgVVJMIHRoZSBidXR0b24gb3BlbnMgd2hlbiB0YXBwZWQgKGFuIEFjdGlvbi5PcGVuVXJsIHRhcmdldCkuXCIpLFxufSk7XG5cbi8qKiBBIGxpbmsgYWN0aW9uIGJ1dHRvbiBpbiBhIHtAbGluayBDYXJkU3BlY30uICovXG5leHBvcnQgdHlwZSBDYXJkQWN0aW9uID0gei5pbmZlcjx0eXBlb2YgY2FyZEFjdGlvblNjaGVtYT47XG5cbi8qKlxuICogVGhlIGhpZ2gtbGV2ZWwgY2FyZCBhIG1vZGVsIGFza3MgdG8gYnVpbGQgKHRoZSB0b29sIGlucHV0KS4gRGVsaWJlcmF0ZWx5XG4gKiBzbWFsbDogYSBoZWFkaW5nLCBvcHRpb25hbCBzdXBwb3J0aW5nIHRleHQsIG9wdGlvbmFsIGZhY3RzLCBhbmQgb3B0aW9uYWwgbGlua1xuICogYnV0dG9ucy4gVGhlIGJ1aWxkZXIgdHVybnMgdGhpcyBpbnRvIGEgZnVsbCBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50LlxuICovXG5leHBvcnQgY29uc3QgY2FyZFNwZWNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ2FyZCBoZWFkaW5nLCBzaG93biBib2xkIGF0IHRoZSB0b3Agb2YgdGhlIGNhcmQuXCIpLFxuICBzdWJ0aXRsZTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiT3B0aW9uYWwgbGlnaHRlciBzdWJoZWFkaW5nIHVuZGVyIHRoZSB0aXRsZSAoZS5nLiBhIGNhdGVnb3J5IG9yIHRpbWVzdGFtcCkuXCIpLFxuICB0ZXh0OiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBbXG4gICAgICAgIFwiT3B0aW9uYWwgYm9keSB0ZXh0IHVuZGVyIHRoZSBoZWFkaW5nLiBBIGxpbWl0ZWQgTWFya2Rvd24gc3Vic2V0IGlzXCIsXG4gICAgICAgIFwic3VwcG9ydGVkIGJ5IHRoZSBUZWFtcyBob3N0OiAqKmJvbGQqKiwgX2l0YWxpY18sIGxpbmtzLCBhbmQgJy0nIGJ1bGxldFwiLFxuICAgICAgICBcImxpc3RzLiBEbyBOT1QgdXNlIGhlYWRpbmdzLCB0YWJsZXMsIG9yIGZlbmNlZCBjb2RlIGJsb2NrcyAtIHVzZSB0aGVcIixcbiAgICAgICAgXCJgZmFjdHNgIGFycmF5IGZvciB0YWJ1bGFyIGtleS92YWx1ZSBkZXRhaWwgaW5zdGVhZC5cIixcbiAgICAgIF0uam9pbihcIiBcIiksXG4gICAgKSxcbiAgZmFjdHM6IHpcbiAgICAuYXJyYXkoY2FyZEZhY3RTY2hlbWEpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJPcHRpb25hbCBrZXkvdmFsdWUgcm93cyByZW5kZXJlZCBhcyBhIEZhY3RTZXQgKGxhYmVsIG9uIHRoZSBsZWZ0LCB2YWx1ZSByaWdodCkuXCIpLFxuICBhY3Rpb25zOiB6XG4gICAgLmFycmF5KGNhcmRBY3Rpb25TY2hlbWEpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJPcHRpb25hbCBsaW5rIGJ1dHRvbnMgcmVuZGVyZWQgdW5kZXIgdGhlIGJvZHksIGVhY2ggb3BlbmluZyBhIFVSTC5cIiksXG59KTtcblxuLyoqIFRoZSB2YWxpZGF0ZWQgc2VtYW50aWMgY2FyZCBhIG1vZGVsIGFza2VkIHRvIGJ1aWxkLiAqL1xuZXhwb3J0IHR5cGUgQ2FyZFNwZWMgPSB6LmluZmVyPHR5cGVvZiBjYXJkU3BlY1NjaGVtYT47XG5cbi8qKlxuICogVGhlIGNvbXBpbGVkIEFkYXB0aXZlIENhcmQgZG9jdW1lbnQgLSB0aGUgSlNPTiB0aGUgYGFkYXB0aXZlY2FyZHNgIHJlbmRlcmVyXG4gKiBjb25zdW1lcy4gVHlwZWQgbG9vc2VseSAoYGVsZW1lbnRzYCAvIGBhY3Rpb25zYCBhcyByZWNvcmQgYXJyYXlzKSBiZWNhdXNlIHRoZVxuICogZnVsbCBBZGFwdGl2ZSBDYXJkIHNjaGVtYSBpcyBsYXJnZSBhbmQgaG9zdC12ZXJzaW9uZWQ7IHRoZSBidWlsZGVyIG93bnMgdGhlXG4gKiBleGFjdCBlbGVtZW50IHNoYXBlcyBhbmQgdGhpcyBjb250cmFjdCBvbmx5IHBpbnMgdGhlIGVudmVsb3BlIGV2ZXJ5IGNvbnN1bWVyXG4gKiByZWxpZXMgb24gKGB0eXBlYCwgYHZlcnNpb25gLCBgYm9keWApLlxuICovXG5leHBvcnQgY29uc3QgYWRhcHRpdmVDYXJkU2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJBZGFwdGl2ZUNhcmRcIiksXG4gICRzY2hlbWE6IHouc3RyaW5nKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCksXG4gIGJvZHk6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIEEgY29tcGlsZWQgQWRhcHRpdmUgQ2FyZCBkb2N1bWVudCByZWFkeSB0byByZW5kZXIgb3IgcG9zdCB0byBUZWFtcy4gKi9cbmV4cG9ydCB0eXBlIEFkYXB0aXZlQ2FyZCA9IHouaW5mZXI8dHlwZW9mIGFkYXB0aXZlQ2FyZFNjaGVtYT47XG5cbi8qKlxuICogVGhlIHJlc3VsdCB0aGUgY2FyZCB0b29sIHJldHVybnM6IHRoZSBjb21waWxlZCBBZGFwdGl2ZSBDYXJkIHBsdXMgdGhlXG4gKiBgdGl0bGVgIGVjaG9lZCBiYWNrIGZvciBhIGNhbGxlciB0aGF0IHdhbnRzIGEgbGFiZWwgd2l0aG91dCByZS1yZWFkaW5nIHRoZVxuICogZG9jdW1lbnQuIEtlcHQgc2VwYXJhdGUgZnJvbSB7QGxpbmsgQWRhcHRpdmVDYXJkfSBzbyB0aGUgdG9vbCBvdXRwdXQgc3RheXNcbiAqIGFkZGl0aXZlLlxuICovXG5leHBvcnQgY29uc3QgY2FyZFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdGl0bGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgY2FyZCB0aXRsZSwgZWNob2VkIGZvciBjb252ZW5pZW5jZS5cIiksXG4gIGNhcmQ6IGFkYXB0aXZlQ2FyZFNjaGVtYS5kZXNjcmliZShcIlRoZSBjb21waWxlZCBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50LlwiKSxcbn0pO1xuXG4vKiogVGhlIHJlc3VsdCBvZiBidWlsZGluZyBhIGNhcmQuICovXG5leHBvcnQgdHlwZSBDYXJkUmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgY2FyZFJlc3VsdFNjaGVtYT47XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/activity.ts","../src/card.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -12,23 +12,27 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"zod": "4.3.6",
|
|
15
|
-
"@dbx-tools/shared-core": "0.
|
|
15
|
+
"@dbx-tools/shared-core": "0.4.0"
|
|
16
16
|
},
|
|
17
|
-
"main": "index.
|
|
17
|
+
"main": "./lib/index.js",
|
|
18
18
|
"license": "UNLICENSED",
|
|
19
19
|
"publishConfig": {
|
|
20
20
|
"access": "public"
|
|
21
21
|
},
|
|
22
|
-
"version": "0.
|
|
23
|
-
"types": "index.ts",
|
|
22
|
+
"version": "0.4.0",
|
|
23
|
+
"types": "./lib/index.d.ts",
|
|
24
24
|
"type": "module",
|
|
25
25
|
"exports": {
|
|
26
|
-
".":
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./lib/index.d.ts",
|
|
28
|
+
"default": "./lib/index.js"
|
|
29
|
+
},
|
|
27
30
|
"./package.json": "./package.json"
|
|
28
31
|
},
|
|
29
32
|
"files": [
|
|
30
33
|
"index.ts",
|
|
31
|
-
"src"
|
|
34
|
+
"src",
|
|
35
|
+
"lib"
|
|
32
36
|
],
|
|
33
37
|
"dbxToolsConfig": {
|
|
34
38
|
"tags": [
|