@dbx-tools/teams 0.3.44 → 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 +28 -0
- package/lib/index.js +24 -0
- package/lib/src/auth.d.ts +94 -0
- package/lib/src/auth.js +232 -0
- package/lib/src/builder.d.ts +29 -0
- package/lib/src/builder.js +96 -0
- package/lib/src/config.d.ts +148 -0
- package/lib/src/config.js +163 -0
- package/lib/src/connector.d.ts +53 -0
- package/lib/src/connector.js +82 -0
- package/lib/src/conversation.d.ts +234 -0
- package/lib/src/conversation.js +509 -0
- package/lib/src/defaults.d.ts +59 -0
- package/lib/src/defaults.js +61 -0
- package/lib/src/messaging.d.ts +74 -0
- package/lib/src/messaging.js +114 -0
- package/lib/src/plugin.d.ts +185 -0
- package/lib/src/plugin.js +430 -0
- package/lib/src/runtime.d.ts +63 -0
- package/lib/src/runtime.js +143 -0
- package/lib/src/tool.d.ts +67 -0
- package/lib/src/tool.js +71 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -7
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Teams runtime: a lazily-resolved, process-wide config shared by the
|
|
3
|
+
* plugin and the `create_teams_card` tool, so both read one resolved card
|
|
4
|
+
* version / webhook set. The first caller (normally the plugin at setup)
|
|
5
|
+
* primes it from the plugin's config; later callers (the tool's `execute`)
|
|
6
|
+
* reuse it.
|
|
7
|
+
*
|
|
8
|
+
* The runtime also carries the {@link TeamsExecutor} every operation runs
|
|
9
|
+
* through. The plugin installs its own `execute()` there at setup, which is how
|
|
10
|
+
* the tool - a plain function with no plugin instance in scope - still gets
|
|
11
|
+
* AppKit's cache / retry / timeout / telemetry chain. Without a registered
|
|
12
|
+
* plugin (a direct call from a script or a test) the operations still run, just
|
|
13
|
+
* without interceptors.
|
|
14
|
+
*
|
|
15
|
+
* Like the web-search runtime and unlike the email one, there is no connection
|
|
16
|
+
* pool to hold - card building is in-process and a webhook post is a stateless
|
|
17
|
+
* HTTP call - so the runtime holds only the resolved config and that executor.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import { AppKitError, ExecutionError } from "@databricks/appkit";
|
|
22
|
+
import { async, error, log } from "@dbx-tools/shared-core";
|
|
23
|
+
import { buildCardResult } from "./builder.js";
|
|
24
|
+
import { resolveTeamsConfig } from "./config.js";
|
|
25
|
+
import { TEAMS_BUILD_SETTINGS, TEAMS_POST_SETTINGS } from "./defaults.js";
|
|
26
|
+
const logger = log.logger("teams/runtime");
|
|
27
|
+
/**
|
|
28
|
+
* Executor used until (or unless) the plugin installs its own: run the call
|
|
29
|
+
* directly, mapping a throw onto the same {@link ExecutionResult} shape so
|
|
30
|
+
* call sites branch on `ok` either way.
|
|
31
|
+
*/
|
|
32
|
+
const directExecute = async (fn) => {
|
|
33
|
+
try {
|
|
34
|
+
return { ok: true, data: await fn() };
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
status: err instanceof AppKitError ? err.statusCode : 500,
|
|
40
|
+
message: error.errorMessage(err),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
let runtime;
|
|
45
|
+
/**
|
|
46
|
+
* Return the shared runtime, building it on first use from the supplied config
|
|
47
|
+
* layered over environment defaults. Overrides are only read when the runtime
|
|
48
|
+
* is first created, so prime it from the plugin's config at setup; subsequent
|
|
49
|
+
* calls (the tool's `execute`) pass nothing and get the same instance.
|
|
50
|
+
*/
|
|
51
|
+
export function getTeamsRuntime(overrides) {
|
|
52
|
+
if (!runtime) {
|
|
53
|
+
runtime = { config: resolveTeamsConfig(overrides), execute: directExecute };
|
|
54
|
+
}
|
|
55
|
+
return runtime;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Install the executor operations run through. The plugin calls this at setup
|
|
59
|
+
* with its own `execute()`; a second call replaces the previous one, so a
|
|
60
|
+
* re-registered plugin does not leave the tool bound to a dead instance.
|
|
61
|
+
*/
|
|
62
|
+
export function setTeamsExecutor(execute) {
|
|
63
|
+
getTeamsRuntime().execute = execute;
|
|
64
|
+
}
|
|
65
|
+
/** Drop the memoized runtime so the next {@link getTeamsRuntime} rebuilds it. */
|
|
66
|
+
export function resetTeamsRuntime() {
|
|
67
|
+
runtime = undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Run one operation through the shared executor and unwrap it.
|
|
71
|
+
*
|
|
72
|
+
* `execute()` never throws, so a failed call arrives as `{ ok: false }` with a
|
|
73
|
+
* status the interceptors already sanitized; it is logged here and re-raised as
|
|
74
|
+
* a stable {@link ExecutionError} so an upstream message never becomes the
|
|
75
|
+
* caller's error text.
|
|
76
|
+
*/
|
|
77
|
+
async function run(operation, settings, fn, signal) {
|
|
78
|
+
const { execute } = getTeamsRuntime();
|
|
79
|
+
const result = await execute((executeSignal) => fn(async.combineAbortSignals(executeSignal, signal)), settings);
|
|
80
|
+
if (result.ok)
|
|
81
|
+
return result.data;
|
|
82
|
+
if (signal?.aborted)
|
|
83
|
+
throw ExecutionError.canceled();
|
|
84
|
+
logger.warn("execution-failed", {
|
|
85
|
+
operation,
|
|
86
|
+
status: result.status,
|
|
87
|
+
error: result.message,
|
|
88
|
+
});
|
|
89
|
+
throw new ExecutionError(`teams: ${operation} failed`, {
|
|
90
|
+
context: { operation, status: result.status },
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Compile a card spec into an Adaptive Card document, stamped with the runtime's
|
|
95
|
+
* resolved card version. Runs through the shared executor so a build picks up
|
|
96
|
+
* the app's telemetry / timeout chain.
|
|
97
|
+
*/
|
|
98
|
+
export async function buildCard(spec, signal) {
|
|
99
|
+
const { config } = getTeamsRuntime();
|
|
100
|
+
return run("build", TEAMS_BUILD_SETTINGS, async () => {
|
|
101
|
+
const result = buildCardResult(spec);
|
|
102
|
+
result.card.version = config.cardVersion;
|
|
103
|
+
return result;
|
|
104
|
+
}, signal);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* POST a compiled Adaptive Card to the configured Teams incoming webhook,
|
|
108
|
+
* wrapped in the `MessageCard` attachment envelope Teams expects. Throws when
|
|
109
|
+
* no webhook is configured, so a caller that reaches here without one gets a
|
|
110
|
+
* clear error rather than a silent no-op.
|
|
111
|
+
*/
|
|
112
|
+
export async function postCard(cardDocument, signal) {
|
|
113
|
+
const { config } = getTeamsRuntime();
|
|
114
|
+
const webhookUrl = config.webhookUrl;
|
|
115
|
+
if (!webhookUrl) {
|
|
116
|
+
throw new ExecutionError("teams: no webhook configured", {
|
|
117
|
+
context: { operation: "post" },
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
await run("post", TEAMS_POST_SETTINGS, async (executeSignal) => {
|
|
121
|
+
const body = {
|
|
122
|
+
type: "message",
|
|
123
|
+
attachments: [
|
|
124
|
+
{
|
|
125
|
+
contentType: "application/vnd.microsoft.card.adaptive",
|
|
126
|
+
content: cardDocument,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
const response = await fetch(webhookUrl, {
|
|
131
|
+
method: "POST",
|
|
132
|
+
headers: { "content-type": "application/json" },
|
|
133
|
+
body: JSON.stringify(body),
|
|
134
|
+
...(executeSignal ? { signal: executeSignal } : {}),
|
|
135
|
+
});
|
|
136
|
+
if (!response.ok) {
|
|
137
|
+
throw new ExecutionError(`teams: webhook responded ${response.status}`, {
|
|
138
|
+
context: { operation: "post", status: response.status },
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}, signal);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQW9ELE1BQU0sVUFBVSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBK0IsTUFBTSxZQUFZLENBQUM7QUFFcEcsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQWtCM0M7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFrQixLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDaEQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU87WUFDTCxFQUFFLEVBQUUsS0FBSztZQUNULE1BQU0sRUFBRSxHQUFHLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ3pELE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztTQUNqQyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLElBQUksT0FBaUMsQ0FBQztBQUV0Qzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBNkI7SUFDM0QsSUFB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QUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1lBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxQixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3BELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLGNBQWMsQ0FBQyw0QkFBNEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN0RSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFO2FBQ3hELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLEVBQ0QsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgVGVhbXMgcnVudGltZTogYSBsYXppbHktcmVzb2x2ZWQsIHByb2Nlc3Mtd2lkZSBjb25maWcgc2hhcmVkIGJ5IHRoZVxuICogcGx1Z2luIGFuZCB0aGUgYGNyZWF0ZV90ZWFtc19jYXJkYCB0b29sLCBzbyBib3RoIHJlYWQgb25lIHJlc29sdmVkIGNhcmRcbiAqIHZlcnNpb24gLyB3ZWJob29rIHNldC4gVGhlIGZpcnN0IGNhbGxlciAobm9ybWFsbHkgdGhlIHBsdWdpbiBhdCBzZXR1cClcbiAqIHByaW1lcyBpdCBmcm9tIHRoZSBwbHVnaW4ncyBjb25maWc7IGxhdGVyIGNhbGxlcnMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgKVxuICogcmV1c2UgaXQuXG4gKlxuICogVGhlIHJ1bnRpbWUgYWxzbyBjYXJyaWVzIHRoZSB7QGxpbmsgVGVhbXNFeGVjdXRvcn0gZXZlcnkgb3BlcmF0aW9uIHJ1bnNcbiAqIHRocm91Z2guIFRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93biBgZXhlY3V0ZSgpYCB0aGVyZSBhdCBzZXR1cCwgd2hpY2ggaXMgaG93XG4gKiB0aGUgdG9vbCAtIGEgcGxhaW4gZnVuY3Rpb24gd2l0aCBubyBwbHVnaW4gaW5zdGFuY2UgaW4gc2NvcGUgLSBzdGlsbCBnZXRzXG4gKiBBcHBLaXQncyBjYWNoZSAvIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi4gV2l0aG91dCBhIHJlZ2lzdGVyZWRcbiAqIHBsdWdpbiAoYSBkaXJlY3QgY2FsbCBmcm9tIGEgc2NyaXB0IG9yIGEgdGVzdCkgdGhlIG9wZXJhdGlvbnMgc3RpbGwgcnVuLCBqdXN0XG4gKiB3aXRob3V0IGludGVyY2VwdG9ycy5cbiAqXG4gKiBMaWtlIHRoZSB3ZWItc2VhcmNoIHJ1bnRpbWUgYW5kIHVubGlrZSB0aGUgZW1haWwgb25lLCB0aGVyZSBpcyBubyBjb25uZWN0aW9uXG4gKiBwb29sIHRvIGhvbGQgLSBjYXJkIGJ1aWxkaW5nIGlzIGluLXByb2Nlc3MgYW5kIGEgd2ViaG9vayBwb3N0IGlzIGEgc3RhdGVsZXNzXG4gKiBIVFRQIGNhbGwgLSBzbyB0aGUgcnVudGltZSBob2xkcyBvbmx5IHRoZSByZXNvbHZlZCBjb25maWcgYW5kIHRoYXQgZXhlY3V0b3IuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEFwcEtpdEVycm9yLCBFeGVjdXRpb25FcnJvciwgdHlwZSBFeGVjdXRpb25SZXN1bHQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBhc3luYywgZXJyb3IsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBjYXJkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXRlYW1zXCI7XG5pbXBvcnQgeyBidWlsZENhcmRSZXN1bHQgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlVGVhbXNDb25maWcsIHR5cGUgUmVzb2x2ZWRUZWFtc0NvbmZpZywgdHlwZSBUZWFtc1BsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgVEVBTVNfQlVJTERfU0VUVElOR1MsIFRFQU1TX1BPU1RfU0VUVElOR1MsIHR5cGUgVGVhbXNFeGVjdXRpb25TZXR0aW5ncyB9IGZyb20gXCIuL2RlZmF1bHRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0ZWFtcy9ydW50aW1lXCIpO1xuXG4vKipcbiAqIFJ1bnMgb25lIG9wZXJhdGlvbiB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgVGVhbXNFeGVjdXRvciA9IDxUPihcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2V0dGluZ3M6IFRlYW1zRXhlY3V0aW9uU2V0dGluZ3MsXG4pID0+IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PFQ+PjtcblxuLyoqIFRoZSBzaGFyZWQgcmVzb2x2ZWQgY29uZmlnIHBsdXMgdGhlIGV4ZWN1dG9yIG9wZXJhdGlvbnMgcnVuIHRocm91Z2guICovXG5leHBvcnQgaW50ZXJmYWNlIFRlYW1zUnVudGltZSB7XG4gIGNvbmZpZzogUmVzb2x2ZWRUZWFtc0NvbmZpZztcbiAgZXhlY3V0ZTogVGVhbXNFeGVjdXRvcjtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciB1c2VkIHVudGlsIChvciB1bmxlc3MpIHRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93bjogcnVuIHRoZSBjYWxsXG4gKiBkaXJlY3RseSwgbWFwcGluZyBhIHRocm93IG9udG8gdGhlIHNhbWUge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gc2hhcGUgc29cbiAqIGNhbGwgc2l0ZXMgYnJhbmNoIG9uIGBva2AgZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgZGlyZWN0RXhlY3V0ZTogVGVhbXNFeGVjdXRvciA9IGFzeW5jIChmbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCBkYXRhOiBhd2FpdCBmbigpIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7XG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGF0dXM6IGVyciBpbnN0YW5jZW9mIEFwcEtpdEVycm9yID8gZXJyLnN0YXR1c0NvZGUgOiA1MDAsXG4gICAgICBtZXNzYWdlOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9O1xuICB9XG59O1xuXG5sZXQgcnVudGltZTogVGVhbXNSdW50aW1lIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2hhcmVkIHJ1bnRpbWUsIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IHVzZSBmcm9tIHRoZSBzdXBwbGllZCBjb25maWdcbiAqIGxheWVyZWQgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cy4gT3ZlcnJpZGVzIGFyZSBvbmx5IHJlYWQgd2hlbiB0aGUgcnVudGltZVxuICogaXMgZmlyc3QgY3JlYXRlZCwgc28gcHJpbWUgaXQgZnJvbSB0aGUgcGx1Z2luJ3MgY29uZmlnIGF0IHNldHVwOyBzdWJzZXF1ZW50XG4gKiBjYWxscyAodGhlIHRvb2wncyBgZXhlY3V0ZWApIHBhc3Mgbm90aGluZyBhbmQgZ2V0IHRoZSBzYW1lIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVhbXNSdW50aW1lKG92ZXJyaWRlcz86IFRlYW1zUGx1Z2luQ29uZmlnKTogVGVhbXNSdW50aW1lIHtcbiAgaWYgKCFydW50aW1lKSB7XG4gICAgcnVudGltZSA9IHsgY29uZmlnOiByZXNvbHZlVGVhbXNDb25maWcob3ZlcnJpZGVzKSwgZXhlY3V0ZTogZGlyZWN0RXhlY3V0ZSB9O1xuICB9XG4gIHJldHVybiBydW50aW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGwgdGhlIGV4ZWN1dG9yIG9wZXJhdGlvbnMgcnVuIHRocm91Z2guIFRoZSBwbHVnaW4gY2FsbHMgdGhpcyBhdCBzZXR1cFxuICogd2l0aCBpdHMgb3duIGBleGVjdXRlKClgOyBhIHNlY29uZCBjYWxsIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUsIHNvIGFcbiAqIHJlLXJlZ2lzdGVyZWQgcGx1Z2luIGRvZXMgbm90IGxlYXZlIHRoZSB0b29sIGJvdW5kIHRvIGEgZGVhZCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRlYW1zRXhlY3V0b3IoZXhlY3V0ZTogVGVhbXNFeGVjdXRvcik6IHZvaWQge1xuICBnZXRUZWFtc1J1bnRpbWUoKS5leGVjdXRlID0gZXhlY3V0ZTtcbn1cblxuLyoqIERyb3AgdGhlIG1lbW9pemVkIHJ1bnRpbWUgc28gdGhlIG5leHQge0BsaW5rIGdldFRlYW1zUnVudGltZX0gcmVidWlsZHMgaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRUZWFtc1J1bnRpbWUoKTogdm9pZCB7XG4gIHJ1bnRpbWUgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVuIG9uZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgc2hhcmVkIGV4ZWN1dG9yIGFuZCB1bndyYXAgaXQuXG4gKlxuICogYGV4ZWN1dGUoKWAgbmV2ZXIgdGhyb3dzLCBzbyBhIGZhaWxlZCBjYWxsIGFycml2ZXMgYXMgYHsgb2s6IGZhbHNlIH1gIHdpdGggYVxuICogc3RhdHVzIHRoZSBpbnRlcmNlcHRvcnMgYWxyZWFkeSBzYW5pdGl6ZWQ7IGl0IGlzIGxvZ2dlZCBoZXJlIGFuZCByZS1yYWlzZWQgYXNcbiAqIGEgc3RhYmxlIHtAbGluayBFeGVjdXRpb25FcnJvcn0gc28gYW4gdXBzdHJlYW0gbWVzc2FnZSBuZXZlciBiZWNvbWVzIHRoZVxuICogY2FsbGVyJ3MgZXJyb3IgdGV4dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuPFQ+KFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgc2V0dGluZ3M6IFRlYW1zRXhlY3V0aW9uU2V0dGluZ3MsXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHsgZXhlY3V0ZSB9ID0gZ2V0VGVhbXNSdW50aW1lKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGUoXG4gICAgKGV4ZWN1dGVTaWduYWwpID0+IGZuKGFzeW5jLmNvbWJpbmVBYm9ydFNpZ25hbHMoZXhlY3V0ZVNpZ25hbCwgc2lnbmFsKSksXG4gICAgc2V0dGluZ3MsXG4gICk7XG4gIGlmIChyZXN1bHQub2spIHJldHVybiByZXN1bHQuZGF0YTtcbiAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgRXhlY3V0aW9uRXJyb3IuY2FuY2VsZWQoKTtcbiAgbG9nZ2VyLndhcm4oXCJleGVjdXRpb24tZmFpbGVkXCIsIHtcbiAgICBvcGVyYXRpb24sXG4gICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgIGVycm9yOiByZXN1bHQubWVzc2FnZSxcbiAgfSk7XG4gIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihgdGVhbXM6ICR7b3BlcmF0aW9ufSBmYWlsZWRgLCB7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb24sIHN0YXR1czogcmVzdWx0LnN0YXR1cyB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgY2FyZCBzcGVjIGludG8gYW4gQWRhcHRpdmUgQ2FyZCBkb2N1bWVudCwgc3RhbXBlZCB3aXRoIHRoZSBydW50aW1lJ3NcbiAqIHJlc29sdmVkIGNhcmQgdmVyc2lvbi4gUnVucyB0aHJvdWdoIHRoZSBzaGFyZWQgZXhlY3V0b3Igc28gYSBidWlsZCBwaWNrcyB1cFxuICogdGhlIGFwcCdzIHRlbGVtZXRyeSAvIHRpbWVvdXQgY2hhaW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENhcmQoXG4gIHNwZWM6IGNhcmQuQ2FyZFNwZWMsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxjYXJkLkNhcmRSZXN1bHQ+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSgpO1xuICByZXR1cm4gcnVuKFxuICAgIFwiYnVpbGRcIixcbiAgICBURUFNU19CVUlMRF9TRVRUSU5HUyxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZENhcmRSZXN1bHQoc3BlYyk7XG4gICAgICByZXN1bHQuY2FyZC52ZXJzaW9uID0gY29uZmlnLmNhcmRWZXJzaW9uO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cblxuLyoqXG4gKiBQT1NUIGEgY29tcGlsZWQgQWRhcHRpdmUgQ2FyZCB0byB0aGUgY29uZmlndXJlZCBUZWFtcyBpbmNvbWluZyB3ZWJob29rLFxuICogd3JhcHBlZCBpbiB0aGUgYE1lc3NhZ2VDYXJkYCBhdHRhY2htZW50IGVudmVsb3BlIFRlYW1zIGV4cGVjdHMuIFRocm93cyB3aGVuXG4gKiBubyB3ZWJob29rIGlzIGNvbmZpZ3VyZWQsIHNvIGEgY2FsbGVyIHRoYXQgcmVhY2hlcyBoZXJlIHdpdGhvdXQgb25lIGdldHMgYVxuICogY2xlYXIgZXJyb3IgcmF0aGVyIHRoYW4gYSBzaWxlbnQgbm8tb3AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0Q2FyZChcbiAgY2FyZERvY3VtZW50OiBjYXJkLkFkYXB0aXZlQ2FyZCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSgpO1xuICBjb25zdCB3ZWJob29rVXJsID0gY29uZmlnLndlYmhvb2tVcmw7XG4gIGlmICghd2ViaG9va1VybCkge1xuICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihcInRlYW1zOiBubyB3ZWJob29rIGNvbmZpZ3VyZWRcIiwge1xuICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwicG9zdFwiIH0sXG4gICAgfSk7XG4gIH1cbiAgYXdhaXQgcnVuKFxuICAgIFwicG9zdFwiLFxuICAgIFRFQU1TX1BPU1RfU0VUVElOR1MsXG4gICAgYXN5bmMgKGV4ZWN1dGVTaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgICBhdHRhY2htZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLFxuICAgICAgICAgICAgY29udGVudDogY2FyZERvY3VtZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh3ZWJob29rVXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgIC4uLihleGVjdXRlU2lnbmFsID8geyBzaWduYWw6IGV4ZWN1dGVTaWduYWwgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoYHRlYW1zOiB3ZWJob29rIHJlc3BvbmRlZCAke3Jlc3BvbnNlLnN0YXR1c31gLCB7XG4gICAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwicG9zdFwiLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `create_teams_card` Mastra tool: a model describes a card in the small
|
|
3
|
+
* {@link card.CardSpec} vocabulary and gets back a compiled Adaptive Card
|
|
4
|
+
* document. Unlike `send_email`, building a card is a pure, side-effect-free
|
|
5
|
+
* transform - nothing leaves the building - so it is NOT approval-gated: the
|
|
6
|
+
* card is data the app then decides what to do with (render it in a preview,
|
|
7
|
+
* post it to a Teams incoming webhook, attach it to a bot reply).
|
|
8
|
+
*
|
|
9
|
+
* The build runs through the executor the plugin installs on the shared
|
|
10
|
+
* runtime, so a build from this tool picks up the same telemetry / timeout
|
|
11
|
+
* chain as one from the AppKit tool. In a Mastra app with no AppKit plugin
|
|
12
|
+
* registered the build still runs, just without interceptors.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* The model-facing description of the card-building capability, shared by the
|
|
18
|
+
* Mastra {@link teamsCardTool} and the AppKit `teams.createCard` tool so both
|
|
19
|
+
* agents get the same guidance about the vocabulary and when to reach for it.
|
|
20
|
+
*/
|
|
21
|
+
export declare const CREATE_CARD_DESCRIPTION: string;
|
|
22
|
+
/** Options accepted by {@link teamsCardTool}. */
|
|
23
|
+
export interface TeamsCardToolOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Override the tool id. Defaults to `"create_teams_card"`. A UI that renders
|
|
26
|
+
* the returned card keys off this id, so keep it unless you also teach the
|
|
27
|
+
* client about the new name.
|
|
28
|
+
*/
|
|
29
|
+
id?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build the `create_teams_card` tool. Spread it into the agents that should be
|
|
33
|
+
* able to produce Teams cards.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import { teamsCardTool } from "@dbx-tools/teams";
|
|
38
|
+
* import { createAgent } from "@dbx-tools/appkit-mastra";
|
|
39
|
+
*
|
|
40
|
+
* const support = createAgent({
|
|
41
|
+
* instructions: "...",
|
|
42
|
+
* tools: () => ({ create_teams_card: teamsCardTool() }),
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function teamsCardTool(opts?: TeamsCardToolOptions): import("@mastra/core/tools").Tool<{
|
|
47
|
+
title: string;
|
|
48
|
+
subtitle?: string | undefined;
|
|
49
|
+
text?: string | undefined;
|
|
50
|
+
facts?: {
|
|
51
|
+
title: string;
|
|
52
|
+
value: string;
|
|
53
|
+
}[] | undefined;
|
|
54
|
+
actions?: {
|
|
55
|
+
title: string;
|
|
56
|
+
url: string;
|
|
57
|
+
}[] | undefined;
|
|
58
|
+
}, {
|
|
59
|
+
title: string;
|
|
60
|
+
card: {
|
|
61
|
+
type: "AdaptiveCard";
|
|
62
|
+
$schema: string;
|
|
63
|
+
version: string;
|
|
64
|
+
body: Record<string, unknown>[];
|
|
65
|
+
actions?: Record<string, unknown>[] | undefined;
|
|
66
|
+
};
|
|
67
|
+
}, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, string, unknown>;
|
package/lib/src/tool.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `create_teams_card` Mastra tool: a model describes a card in the small
|
|
3
|
+
* {@link card.CardSpec} vocabulary and gets back a compiled Adaptive Card
|
|
4
|
+
* document. Unlike `send_email`, building a card is a pure, side-effect-free
|
|
5
|
+
* transform - nothing leaves the building - so it is NOT approval-gated: the
|
|
6
|
+
* card is data the app then decides what to do with (render it in a preview,
|
|
7
|
+
* post it to a Teams incoming webhook, attach it to a bot reply).
|
|
8
|
+
*
|
|
9
|
+
* The build runs through the executor the plugin installs on the shared
|
|
10
|
+
* runtime, so a build from this tool picks up the same telemetry / timeout
|
|
11
|
+
* chain as one from the AppKit tool. In a Mastra app with no AppKit plugin
|
|
12
|
+
* registered the build still runs, just without interceptors.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { log, string } from "@dbx-tools/shared-core";
|
|
17
|
+
import { card } from "@dbx-tools/shared-teams";
|
|
18
|
+
import { createTool } from "@mastra/core/tools";
|
|
19
|
+
import { buildCard } from "./runtime.js";
|
|
20
|
+
const logger = log.logger("teams/tool/create-card");
|
|
21
|
+
/**
|
|
22
|
+
* The model-facing description of the card-building capability, shared by the
|
|
23
|
+
* Mastra {@link teamsCardTool} and the AppKit `teams.createCard` tool so both
|
|
24
|
+
* agents get the same guidance about the vocabulary and when to reach for it.
|
|
25
|
+
*/
|
|
26
|
+
export const CREATE_CARD_DESCRIPTION = string.toDescription(`
|
|
27
|
+
Build a Microsoft Teams Adaptive Card from a short structured description.
|
|
28
|
+
Provide a title, an optional subtitle and body text, an optional list of
|
|
29
|
+
key/value facts, and optional link buttons; the tool returns a compiled
|
|
30
|
+
Adaptive Card document (Adaptive Card 1.5) ready to render or post to Teams.
|
|
31
|
+
Use it when the user asks to summarize a status, result, or record as a Teams
|
|
32
|
+
card / message card, or to prepare something to post to a channel. Keep body
|
|
33
|
+
text to the Teams Markdown subset - **bold**, _italic_, links, and '-'
|
|
34
|
+
bullet lists - and put tabular key/value detail in the 'facts' array, not in
|
|
35
|
+
the text. Do NOT hand-author raw Adaptive Card JSON; describe the card and
|
|
36
|
+
this tool compiles the valid document.
|
|
37
|
+
`);
|
|
38
|
+
/**
|
|
39
|
+
* Build the `create_teams_card` tool. Spread it into the agents that should be
|
|
40
|
+
* able to produce Teams cards.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* import { teamsCardTool } from "@dbx-tools/teams";
|
|
45
|
+
* import { createAgent } from "@dbx-tools/appkit-mastra";
|
|
46
|
+
*
|
|
47
|
+
* const support = createAgent({
|
|
48
|
+
* instructions: "...",
|
|
49
|
+
* tools: () => ({ create_teams_card: teamsCardTool() }),
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function teamsCardTool(opts = {}) {
|
|
54
|
+
return createTool({
|
|
55
|
+
id: opts.id ?? "create_teams_card",
|
|
56
|
+
description: CREATE_CARD_DESCRIPTION,
|
|
57
|
+
inputSchema: card.cardSpecSchema,
|
|
58
|
+
outputSchema: card.cardResultSchema,
|
|
59
|
+
execute: async (input, context) => {
|
|
60
|
+
const spec = card.cardSpecSchema.parse(input);
|
|
61
|
+
const result = await buildCard(spec, context?.abortSignal);
|
|
62
|
+
logger.info("built", {
|
|
63
|
+
title: result.title,
|
|
64
|
+
elements: result.card.body.length,
|
|
65
|
+
actions: result.card.actions?.length ?? 0,
|
|
66
|
+
});
|
|
67
|
+
return result;
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRXBEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7OztDQVczRCxDQUFDLENBQUM7QUFZSDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBNkIsRUFBRTtJQUMzRCxPQUFPLFVBQVUsQ0FBQztRQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxtQkFBbUI7UUFDbEMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDaEMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7UUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDakMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO2FBQzFDLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYGNyZWF0ZV90ZWFtc19jYXJkYCBNYXN0cmEgdG9vbDogYSBtb2RlbCBkZXNjcmliZXMgYSBjYXJkIGluIHRoZSBzbWFsbFxuICoge0BsaW5rIGNhcmQuQ2FyZFNwZWN9IHZvY2FidWxhcnkgYW5kIGdldHMgYmFjayBhIGNvbXBpbGVkIEFkYXB0aXZlIENhcmRcbiAqIGRvY3VtZW50LiBVbmxpa2UgYHNlbmRfZW1haWxgLCBidWlsZGluZyBhIGNhcmQgaXMgYSBwdXJlLCBzaWRlLWVmZmVjdC1mcmVlXG4gKiB0cmFuc2Zvcm0gLSBub3RoaW5nIGxlYXZlcyB0aGUgYnVpbGRpbmcgLSBzbyBpdCBpcyBOT1QgYXBwcm92YWwtZ2F0ZWQ6IHRoZVxuICogY2FyZCBpcyBkYXRhIHRoZSBhcHAgdGhlbiBkZWNpZGVzIHdoYXQgdG8gZG8gd2l0aCAocmVuZGVyIGl0IGluIGEgcHJldmlldyxcbiAqIHBvc3QgaXQgdG8gYSBUZWFtcyBpbmNvbWluZyB3ZWJob29rLCBhdHRhY2ggaXQgdG8gYSBib3QgcmVwbHkpLlxuICpcbiAqIFRoZSBidWlsZCBydW5zIHRocm91Z2ggdGhlIGV4ZWN1dG9yIHRoZSBwbHVnaW4gaW5zdGFsbHMgb24gdGhlIHNoYXJlZFxuICogcnVudGltZSwgc28gYSBidWlsZCBmcm9tIHRoaXMgdG9vbCBwaWNrcyB1cCB0aGUgc2FtZSB0ZWxlbWV0cnkgLyB0aW1lb3V0XG4gKiBjaGFpbiBhcyBvbmUgZnJvbSB0aGUgQXBwS2l0IHRvb2wuIEluIGEgTWFzdHJhIGFwcCB3aXRoIG5vIEFwcEtpdCBwbHVnaW5cbiAqIHJlZ2lzdGVyZWQgdGhlIGJ1aWxkIHN0aWxsIHJ1bnMsIGp1c3Qgd2l0aG91dCBpbnRlcmNlcHRvcnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGxvZywgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNhcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtdGVhbXNcIjtcbmltcG9ydCB7IGNyZWF0ZVRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCI7XG5pbXBvcnQgeyBidWlsZENhcmQgfSBmcm9tIFwiLi9ydW50aW1lXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0ZWFtcy90b29sL2NyZWF0ZS1jYXJkXCIpO1xuXG4vKipcbiAqIFRoZSBtb2RlbC1mYWNpbmcgZGVzY3JpcHRpb24gb2YgdGhlIGNhcmQtYnVpbGRpbmcgY2FwYWJpbGl0eSwgc2hhcmVkIGJ5IHRoZVxuICogTWFzdHJhIHtAbGluayB0ZWFtc0NhcmRUb29sfSBhbmQgdGhlIEFwcEtpdCBgdGVhbXMuY3JlYXRlQ2FyZGAgdG9vbCBzbyBib3RoXG4gKiBhZ2VudHMgZ2V0IHRoZSBzYW1lIGd1aWRhbmNlIGFib3V0IHRoZSB2b2NhYnVsYXJ5IGFuZCB3aGVuIHRvIHJlYWNoIGZvciBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENSRUFURV9DQVJEX0RFU0NSSVBUSU9OID0gc3RyaW5nLnRvRGVzY3JpcHRpb24oYFxuICBCdWlsZCBhIE1pY3Jvc29mdCBUZWFtcyBBZGFwdGl2ZSBDYXJkIGZyb20gYSBzaG9ydCBzdHJ1Y3R1cmVkIGRlc2NyaXB0aW9uLlxuICBQcm92aWRlIGEgdGl0bGUsIGFuIG9wdGlvbmFsIHN1YnRpdGxlIGFuZCBib2R5IHRleHQsIGFuIG9wdGlvbmFsIGxpc3Qgb2ZcbiAga2V5L3ZhbHVlIGZhY3RzLCBhbmQgb3B0aW9uYWwgbGluayBidXR0b25zOyB0aGUgdG9vbCByZXR1cm5zIGEgY29tcGlsZWRcbiAgQWRhcHRpdmUgQ2FyZCBkb2N1bWVudCAoQWRhcHRpdmUgQ2FyZCAxLjUpIHJlYWR5IHRvIHJlbmRlciBvciBwb3N0IHRvIFRlYW1zLlxuICBVc2UgaXQgd2hlbiB0aGUgdXNlciBhc2tzIHRvIHN1bW1hcml6ZSBhIHN0YXR1cywgcmVzdWx0LCBvciByZWNvcmQgYXMgYSBUZWFtc1xuICBjYXJkIC8gbWVzc2FnZSBjYXJkLCBvciB0byBwcmVwYXJlIHNvbWV0aGluZyB0byBwb3N0IHRvIGEgY2hhbm5lbC4gS2VlcCBib2R5XG4gIHRleHQgdG8gdGhlIFRlYW1zIE1hcmtkb3duIHN1YnNldCAtICoqYm9sZCoqLCBfaXRhbGljXywgbGlua3MsIGFuZCAnLSdcbiAgYnVsbGV0IGxpc3RzIC0gYW5kIHB1dCB0YWJ1bGFyIGtleS92YWx1ZSBkZXRhaWwgaW4gdGhlICdmYWN0cycgYXJyYXksIG5vdCBpblxuICB0aGUgdGV4dC4gRG8gTk9UIGhhbmQtYXV0aG9yIHJhdyBBZGFwdGl2ZSBDYXJkIEpTT047IGRlc2NyaWJlIHRoZSBjYXJkIGFuZFxuICB0aGlzIHRvb2wgY29tcGlsZXMgdGhlIHZhbGlkIGRvY3VtZW50LlxuYCk7XG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IHtAbGluayB0ZWFtc0NhcmRUb29sfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVhbXNDYXJkVG9vbE9wdGlvbnMge1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRvb2wgaWQuIERlZmF1bHRzIHRvIGBcImNyZWF0ZV90ZWFtc19jYXJkXCJgLiBBIFVJIHRoYXQgcmVuZGVyc1xuICAgKiB0aGUgcmV0dXJuZWQgY2FyZCBrZXlzIG9mZiB0aGlzIGlkLCBzbyBrZWVwIGl0IHVubGVzcyB5b3UgYWxzbyB0ZWFjaCB0aGVcbiAgICogY2xpZW50IGFib3V0IHRoZSBuZXcgbmFtZS5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgY3JlYXRlX3RlYW1zX2NhcmRgIHRvb2wuIFNwcmVhZCBpdCBpbnRvIHRoZSBhZ2VudHMgdGhhdCBzaG91bGQgYmVcbiAqIGFibGUgdG8gcHJvZHVjZSBUZWFtcyBjYXJkcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRlYW1zQ2FyZFRvb2wgfSBmcm9tIFwiQGRieC10b29scy90ZWFtc1wiO1xuICogaW1wb3J0IHsgY3JlYXRlQWdlbnQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG4gKlxuICogY29uc3Qgc3VwcG9ydCA9IGNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgY3JlYXRlX3RlYW1zX2NhcmQ6IHRlYW1zQ2FyZFRvb2woKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZWFtc0NhcmRUb29sKG9wdHM6IFRlYW1zQ2FyZFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRzLmlkID8/IFwiY3JlYXRlX3RlYW1zX2NhcmRcIixcbiAgICBkZXNjcmlwdGlvbjogQ1JFQVRFX0NBUkRfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IGNhcmQuY2FyZFNwZWNTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBjYXJkLmNhcmRSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzcGVjID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZENhcmQoc3BlYywgY29udGV4dD8uYWJvcnRTaWduYWwpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJidWlsdFwiLCB7XG4gICAgICAgIHRpdGxlOiByZXN1bHQudGl0bGUsXG4gICAgICAgIGVsZW1lbnRzOiByZXN1bHQuY2FyZC5ib2R5Lmxlbmd0aCxcbiAgICAgICAgYWN0aW9uczogcmVzdWx0LmNhcmQuYWN0aW9ucz8ubGVuZ3RoID8/IDAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/auth.ts","../src/builder.ts","../src/config.ts","../src/connector.ts","../src/conversation.ts","../src/defaults.ts","../src/messaging.ts","../src/plugin.ts","../src/runtime.ts","../src/tool.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -17,24 +17,28 @@
|
|
|
17
17
|
"@mastra/core": "^1.47.0",
|
|
18
18
|
"jose": "^6.2.3",
|
|
19
19
|
"zod": "4.3.6",
|
|
20
|
-
"@dbx-tools/shared-core": "0.
|
|
21
|
-
"@dbx-tools/shared-teams": "0.
|
|
20
|
+
"@dbx-tools/shared-core": "0.4.0",
|
|
21
|
+
"@dbx-tools/shared-teams": "0.4.0"
|
|
22
22
|
},
|
|
23
|
-
"main": "index.
|
|
23
|
+
"main": "./lib/index.js",
|
|
24
24
|
"license": "UNLICENSED",
|
|
25
25
|
"publishConfig": {
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
|
-
"version": "0.
|
|
29
|
-
"types": "index.ts",
|
|
28
|
+
"version": "0.4.0",
|
|
29
|
+
"types": "./lib/index.d.ts",
|
|
30
30
|
"type": "module",
|
|
31
31
|
"exports": {
|
|
32
|
-
".":
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./lib/index.d.ts",
|
|
34
|
+
"default": "./lib/index.js"
|
|
35
|
+
},
|
|
33
36
|
"./package.json": "./package.json"
|
|
34
37
|
},
|
|
35
38
|
"files": [
|
|
36
39
|
"index.ts",
|
|
37
|
-
"src"
|
|
40
|
+
"src",
|
|
41
|
+
"lib"
|
|
38
42
|
],
|
|
39
43
|
"dbxToolsConfig": {
|
|
40
44
|
"tags": [
|