@agentcomms/resend 0.12.1 → 0.12.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/cli.mjs +64 -19
- package/dist/index.d.mts +28 -4
- package/dist/index.mjs +2 -2
- package/dist/{send-W8SmlF7p.mjs → send-BedjeO_M.mjs} +849 -339
- package/dist/{server-ElSFoKeD.mjs → server-Bq2OYONI.mjs} +3 -2
- package/dist/{stdio-entry-h_wAVp9z.mjs → stdio-entry-QIUMjquj.mjs} +1 -1
- package/package.json +3 -3
package/dist/cli.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as
|
|
2
|
+
import { $ as inlineCommand, B as agentMarker, C as policyChange, D as sendPolicyOf, E as removeAccountChange, F as CHANNEL_SERVERS, H as approvalsOf, I as CommsError, J as commandPathOf, L as EXIT_CODES, N as checkNewName, O as showAccount, Q as gatedChangeAtTerminal, R as SEND_LOOKUP, S as policyApprovalRefusal, T as policyWanted, U as approveChangeAtTerminal, V as approvalKind, W as canPrompt, X as exemptFromUpdateGate, Y as escapeForDisplay, _ as runDoctor, a as revokeSendApproval, at as renderPrune, b as listAccounts, c as downloadReceived, ct as serverInstallChange, d as listReceived, dt as terminalUpdateHooks, et as installExitStatus, f as listScheduled, g as showSentEmail, gt as writeResult, h as showReceived, i as prepareSend, it as renderInstall, k as ResendContext, l as getMetrics, lt as serverPruneChange, m as listSuppressions, mt as updateGateAtTerminal, n as executeSend, nt as paint, o as sendStatus, ot as runCommand, p as listSentEmails, pt as truncateDisplay, q as colorEnabled, r as finishSendApproval, rt as refuseUnclaimedApproval, s as cancelScheduledChange, st as runUpdateCheckChild, t as beginSendApproval, tt as openCore, u as listDomains, ut as shellCommand, v as addAccountChange, w as policyReport, x as modeOf, xt as VERSION, y as inspectKey, z as UPDATE_CHECK_CHILD_COMMAND } from "./send-BedjeO_M.mjs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import fs from "node:fs";
|
|
5
|
-
import childProcess from "node:child_process";
|
|
6
4
|
import { createInterface } from "node:readline/promises";
|
|
7
5
|
import { stripVTControlCharacters } from "node:util";
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import childProcess from "node:child_process";
|
|
8
8
|
import process$1 from "node:process";
|
|
9
9
|
import { EventEmitter } from "node:events";
|
|
10
10
|
import { Writable } from "node:stream";
|
|
@@ -3040,12 +3040,12 @@ const KEY_SHAPE = /^re_[A-Za-z0-9_]{8,200}$/;
|
|
|
3040
3040
|
async function readApiKey(env, streams, options) {
|
|
3041
3041
|
const marker = agentMarker(env);
|
|
3042
3042
|
if (marker) throw new CommsError("AUTH_REQUIRED", "a Resend API key is added by a person at their own terminal, not by an agent", {
|
|
3043
|
-
hint: `Ask the user to run
|
|
3043
|
+
hint: `Ask the user to run ${inlineCommand(options.command)} in their own terminal. Never paste a key into a chat: the transcript keeps it.`,
|
|
3044
3044
|
details: { marker }
|
|
3045
3045
|
});
|
|
3046
3046
|
let key = env["RESEND_API_KEY"]?.trim() ?? "";
|
|
3047
3047
|
if (key === "") {
|
|
3048
|
-
if (!canPrompt(env, streams, { json: options.json })) throw new CommsError("AUTH_REQUIRED", "a Resend API key is needed, and there is no terminal to ask for it", { hint: `A person runs
|
|
3048
|
+
if (!canPrompt(env, streams, { json: options.json })) throw new CommsError("AUTH_REQUIRED", "a Resend API key is needed, and there is no terminal to ask for it", { hint: `A person runs ${inlineCommand(options.command)} in a terminal, which asks for the key without showing it, or sets ${KEY_ENV} for that one command.` });
|
|
3049
3049
|
key = (await askHidden(streams, "Resend API key (https://resend.com/api-keys; it is not shown as you type): ")).trim();
|
|
3050
3050
|
}
|
|
3051
3051
|
if (!KEY_SHAPE.test(key)) throw new CommsError("BAD_DATA", "that does not look like a Resend API key (they start with re_)", { hint: "Nothing was stored. Copy the key again from the Resend dashboard." });
|
|
@@ -3115,7 +3115,8 @@ function renderPrepared(result) {
|
|
|
3115
3115
|
return `${result.preview}\n\nNext: ${escapeForDisplay(result.nextStep)}`;
|
|
3116
3116
|
}
|
|
3117
3117
|
function renderSent(result) {
|
|
3118
|
-
|
|
3118
|
+
const sent = result.state === "scheduled" ? `Scheduled for ${result.scheduledAt ?? "?"} as ${result.resendId}, to ${truncateDisplay(result.to.join(", "), 200)}.` : `Sent as ${result.resendId}, to ${truncateDisplay(result.to.join(", "), 200)}.`;
|
|
3119
|
+
return result.note ? `${sent}\nNote: ${escapeForDisplay(result.note)}.` : sent;
|
|
3119
3120
|
}
|
|
3120
3121
|
function renderStatus(result) {
|
|
3121
3122
|
return `${result.approvalId}: ${escapeForDisplay(result.verdict)}`;
|
|
@@ -3144,6 +3145,7 @@ async function run(argv, deps = {}) {
|
|
|
3144
3145
|
stdin: process.stdin
|
|
3145
3146
|
};
|
|
3146
3147
|
const env = deps.env ?? process.env;
|
|
3148
|
+
const platform = deps.platform ?? process.platform;
|
|
3147
3149
|
const program = new Command();
|
|
3148
3150
|
let exitCode = 0;
|
|
3149
3151
|
let ran = false;
|
|
@@ -3173,7 +3175,8 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3173
3175
|
};
|
|
3174
3176
|
const output = () => ({
|
|
3175
3177
|
json: globals().json,
|
|
3176
|
-
color: globals().color
|
|
3178
|
+
color: globals().color,
|
|
3179
|
+
platform
|
|
3177
3180
|
});
|
|
3178
3181
|
let gated = null;
|
|
3179
3182
|
program.hook("preAction", async (_program, command) => {
|
|
@@ -3236,8 +3239,16 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3236
3239
|
"never"
|
|
3237
3240
|
])).option("--domain <domain>", "for a sending-only key restricted to one domain: that domain")).action(act(async (context, options, name, flags) => {
|
|
3238
3241
|
const mode = modeOf(flags.mode);
|
|
3239
|
-
const command =
|
|
3240
|
-
|
|
3242
|
+
const command = shellCommand([
|
|
3243
|
+
"agent-resend",
|
|
3244
|
+
"account",
|
|
3245
|
+
"add",
|
|
3246
|
+
name,
|
|
3247
|
+
...mode ? ["--mode", mode] : [],
|
|
3248
|
+
...flags.send ? ["--send", String(flags.send)] : [],
|
|
3249
|
+
...flags.domain ? ["--domain", String(flags.domain)] : []
|
|
3250
|
+
], platform);
|
|
3251
|
+
checkNewName(await context.config(), name, context.platform);
|
|
3241
3252
|
const key = await readApiKey(env, streams, {
|
|
3242
3253
|
json: options.json,
|
|
3243
3254
|
command
|
|
@@ -3261,7 +3272,12 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3261
3272
|
writeResult(result, output(), (data) => renderAccount(data, options.color), streams);
|
|
3262
3273
|
}));
|
|
3263
3274
|
approvalOption(account.command("remove <name>").description("forget an account and delete its key, once a person approves it")).action(act(async (context, _options, name, flags) => {
|
|
3264
|
-
const removed = await changeAt(context, removeAccountChange(context, name), flags,
|
|
3275
|
+
const removed = await changeAt(context, removeAccountChange(context, name), flags, shellCommand([
|
|
3276
|
+
"agent-resend",
|
|
3277
|
+
"account",
|
|
3278
|
+
"remove",
|
|
3279
|
+
name
|
|
3280
|
+
], platform));
|
|
3265
3281
|
writeResult(removed, output(), renderRemoved, streams);
|
|
3266
3282
|
}));
|
|
3267
3283
|
approvalOption(account.command("policy <name>").description("report how its sends and changes are approved, or set --send, --mode and --change; loosening is approved by a person").option("--send <policy>", "chat, confirm or never").option("--mode <mode>", "read or send").option("--change <policy>", "how a loosening of this account is approved: chat or confirm")).action(act(async (context, _options, name, flags) => {
|
|
@@ -3272,7 +3288,15 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3272
3288
|
});
|
|
3273
3289
|
const reporting = wanted.send === void 0 && wanted.mode === void 0 && wanted.change === void 0;
|
|
3274
3290
|
if (reporting) refuseUnclaimedApproval(flags.approval, policyApprovalRefusal("cli"));
|
|
3275
|
-
const result = reporting ? await policyReport(context, name) : await changeAt(context, policyChange(context, name, wanted), flags,
|
|
3291
|
+
const result = reporting ? await policyReport(context, name) : await changeAt(context, policyChange(context, name, wanted), flags, shellCommand([
|
|
3292
|
+
"agent-resend",
|
|
3293
|
+
"account",
|
|
3294
|
+
"policy",
|
|
3295
|
+
name,
|
|
3296
|
+
...wanted.send ? ["--send", wanted.send] : [],
|
|
3297
|
+
...wanted.mode ? ["--mode", wanted.mode] : [],
|
|
3298
|
+
...wanted.change ? ["--change", wanted.change] : []
|
|
3299
|
+
], platform));
|
|
3276
3300
|
writeResult(result, output(), renderPolicy, streams);
|
|
3277
3301
|
}));
|
|
3278
3302
|
program.command("doctor").description("check what has to work, and say who enforces what — read-only is this package’s promise, not the key’s").option("--account <name>", "check only this account").option("--offline", "do not ask Resend anything", false).action(act(async (context, options, flags) => {
|
|
@@ -3373,21 +3397,37 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3373
3397
|
writeResult(result, output(), (data) => renderRead(data, options.color), streams);
|
|
3374
3398
|
}));
|
|
3375
3399
|
approvalOption(accountOption(scheduled.command("cancel <id>")).description("cancel a scheduled email; one this machine did not schedule is approved by a person first")).action(act(async (context, _options, id, flags) => {
|
|
3376
|
-
const cancelled = await changeAt(context, cancelScheduledChange(context, String(flags.account), id), flags,
|
|
3400
|
+
const cancelled = await changeAt(context, cancelScheduledChange(context, String(flags.account), id), flags, shellCommand([
|
|
3401
|
+
"agent-resend",
|
|
3402
|
+
"scheduled",
|
|
3403
|
+
"cancel",
|
|
3404
|
+
id,
|
|
3405
|
+
"--account",
|
|
3406
|
+
String(flags.account)
|
|
3407
|
+
], platform));
|
|
3377
3408
|
writeResult(cancelled, output(), renderCancelled, streams);
|
|
3378
3409
|
}));
|
|
3379
3410
|
program.command("approve <approvalId>").description("approve a send or a change at this terminal: read it, then type the code back").action(act(async (context, options, approvalId) => {
|
|
3380
3411
|
const marker = agentMarker(env);
|
|
3381
3412
|
if (marker) throw new CommsError("APPROVAL_REQUIRED", "only a person can approve a send or a change, not an agent", {
|
|
3382
|
-
hint: `Ask the user to run
|
|
3413
|
+
hint: `Ask the user to run ${inlineCommand(shellCommand([
|
|
3414
|
+
"agent-resend",
|
|
3415
|
+
"approve",
|
|
3416
|
+
approvalId
|
|
3417
|
+
], context.platform))} in their own terminal.`,
|
|
3383
3418
|
details: { marker }
|
|
3384
3419
|
});
|
|
3385
|
-
if (!canPrompt(env, streams, { json: options.json })) throw new CommsError("APPROVAL_REQUIRED", "approving needs an interactive terminal", { hint: `Run
|
|
3420
|
+
if (!canPrompt(env, streams, { json: options.json })) throw new CommsError("APPROVAL_REQUIRED", "approving needs an interactive terminal", { hint: `Run ${inlineCommand(shellCommand([
|
|
3421
|
+
"agent-resend",
|
|
3422
|
+
"approve",
|
|
3423
|
+
approvalId
|
|
3424
|
+
], context.platform))} directly in a terminal.` });
|
|
3386
3425
|
const pending = await context.core.approvals.get(approvalId);
|
|
3387
3426
|
if (pending && approvalKind(pending) === "change") {
|
|
3388
3427
|
const outcome = await approveChangeAtTerminal(context.core, approvalId, env, {
|
|
3389
3428
|
json: options.json,
|
|
3390
|
-
color: options.color
|
|
3429
|
+
color: options.color,
|
|
3430
|
+
platform: context.platform
|
|
3391
3431
|
}, streams);
|
|
3392
3432
|
streams.stdout.write(outcome.state === "approved" ? "Approved. This command approves; the change is applied by the command that prepared it.\n" : "Cancelled. Nothing was changed.\n");
|
|
3393
3433
|
return;
|
|
@@ -3405,7 +3445,7 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3405
3445
|
}));
|
|
3406
3446
|
const mcp = program.command("mcp").description("run the MCP server on stdio, for a coding agent to connect to").option("--account <name>", "pin the server to one account; every tool then acts on it and no other").action(async (flags) => {
|
|
3407
3447
|
ran = true;
|
|
3408
|
-
const { startResendStdioServer } = await import("./stdio-entry-
|
|
3448
|
+
const { startResendStdioServer } = await import("./stdio-entry-QIUMjquj.mjs");
|
|
3409
3449
|
await startResendStdioServer({
|
|
3410
3450
|
...deps,
|
|
3411
3451
|
env,
|
|
@@ -3429,7 +3469,7 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3429
3469
|
const pinned = flags.account ?? mcp.opts().account;
|
|
3430
3470
|
const launcher = flags.launcher;
|
|
3431
3471
|
const name = flags.name;
|
|
3432
|
-
const again = [
|
|
3472
|
+
const again = shellCommand([
|
|
3433
3473
|
"agent-resend",
|
|
3434
3474
|
"mcp",
|
|
3435
3475
|
"install",
|
|
@@ -3440,7 +3480,7 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3440
3480
|
...launcher !== void 0 ? ["--launcher", launcher] : [],
|
|
3441
3481
|
...flags.verify === false ? ["--no-verify"] : [],
|
|
3442
3482
|
...flags.force === true ? ["--force"] : []
|
|
3443
|
-
]
|
|
3483
|
+
], platform);
|
|
3444
3484
|
const result = await changeAt(context, serverInstallChange(context.core, env, {
|
|
3445
3485
|
channel: "resend",
|
|
3446
3486
|
client: flags.client,
|
|
@@ -3460,7 +3500,12 @@ is out: update first, or put it off (agentcomms update, agentcomms update --late
|
|
|
3460
3500
|
channel: "resend",
|
|
3461
3501
|
dryRun: flags.dryRun === true,
|
|
3462
3502
|
includePrinted: flags.includePrinted === true
|
|
3463
|
-
}, RESEND_MCP), flags,
|
|
3503
|
+
}, RESEND_MCP), flags, shellCommand([
|
|
3504
|
+
"agent-resend",
|
|
3505
|
+
"mcp",
|
|
3506
|
+
"prune",
|
|
3507
|
+
...flags.includePrinted === true ? ["--include-printed"] : []
|
|
3508
|
+
], platform));
|
|
3464
3509
|
writeResult(result, output(), () => renderPrune(result, options.color), streams);
|
|
3465
3510
|
}));
|
|
3466
3511
|
program.command(`${UPDATE_CHECK_CHILD_COMMAND} <claimedAt>`, { hidden: true }).description("internal: finish the day's update check a command handed on").action(act(async (context, _options, claimedAt) => {
|
package/dist/index.d.mts
CHANGED
|
@@ -11509,7 +11509,7 @@ type RegisteredPrompt = {
|
|
|
11509
11509
|
remove(): void;
|
|
11510
11510
|
};
|
|
11511
11511
|
//#endregion
|
|
11512
|
-
//#region ../core/dist/
|
|
11512
|
+
//#region ../core/dist/change-flow-BcrEyoig.d.mts
|
|
11513
11513
|
type SendPolicy = "chat" | "confirm" | "never";
|
|
11514
11514
|
/**
|
|
11515
11515
|
* How a loosening of the configuration is approved: `chat` — the person says yes in the conversation and the agent
|
|
@@ -11997,6 +11997,8 @@ interface LiveDraft {
|
|
|
11997
11997
|
}
|
|
11998
11998
|
/** What the product making a claim tells the store about itself. */
|
|
11999
11999
|
interface ClaimOptions {
|
|
12000
|
+
/** The shell syntax used by any approval command this refusal prints. */
|
|
12001
|
+
platform?: NodeJS.Platform | undefined;
|
|
12000
12002
|
/**
|
|
12001
12003
|
* What the caller is told when the send is waiting for a person: which command approves it, and what to run after.
|
|
12002
12004
|
*
|
|
@@ -12006,6 +12008,17 @@ interface ClaimOptions {
|
|
|
12006
12008
|
* names no product at all rather than the wrong one.
|
|
12007
12009
|
*/
|
|
12008
12010
|
pendingHint?: string | undefined;
|
|
12011
|
+
/**
|
|
12012
|
+
* The caller's cancellation — an MCP request's signal — asked under the record's lock, immediately before the claim
|
|
12013
|
+
* would change the record.
|
|
12014
|
+
*
|
|
12015
|
+
* A claim can wait: for the lock, while another process holds it. A caller that looked at its signal before calling
|
|
12016
|
+
* and found it clear could be cancelled during that wait, and the claim then went through all the same, spending an
|
|
12017
|
+
* approval on a call nobody was waiting for any more — whose outcome its caller then had to record as a failure,
|
|
12018
|
+
* since a claim cannot be put back. Asked here, a cancellation that lands before the record changes leaves it exactly
|
|
12019
|
+
* as it was, for the same call made again; one that lands after is the caller's to handle, as it always was.
|
|
12020
|
+
*/
|
|
12021
|
+
signal?: AbortSignal | undefined;
|
|
12009
12022
|
}
|
|
12010
12023
|
declare class ApprovalStore {
|
|
12011
12024
|
#private;
|
|
@@ -12018,7 +12031,7 @@ declare class ApprovalStore {
|
|
|
12018
12031
|
create(input: CreateApprovalInput): Promise<ApprovalRecord>;
|
|
12019
12032
|
get(approvalId: string): Promise<ApprovalRecord | null>;
|
|
12020
12033
|
/** Issues a new challenge to show a human; only its hash is kept. */
|
|
12021
|
-
issueChallenge(approvalId: string, kind?: ApprovalKind): Promise<string>;
|
|
12034
|
+
issueChallenge(approvalId: string, kind?: ApprovalKind, platform?: NodeJS.Platform): Promise<string>;
|
|
12022
12035
|
/**
|
|
12023
12036
|
* A human approved through a confirm channel by typing the issued challenge. The draft must still be exactly what the
|
|
12024
12037
|
* record was prepared for; otherwise the record is voided, because the human would be approving content the record
|
|
@@ -12027,7 +12040,7 @@ declare class ApprovalStore {
|
|
|
12027
12040
|
* A change is approved the same way, with `kind: 'change'` and its digest standing in for the draft (see
|
|
12028
12041
|
* `createChange`), so a person's typed code means one thing whichever kind of approval it is typed for.
|
|
12029
12042
|
*/
|
|
12030
|
-
approve(approvalId: string, via: ApprovalChannel, live: LiveDraft, answer: string, kind?: ApprovalKind): Promise<ApprovalRecord>;
|
|
12043
|
+
approve(approvalId: string, via: ApprovalChannel, live: LiveDraft, answer: string, kind?: ApprovalKind, platform?: NodeJS.Platform): Promise<ApprovalRecord>;
|
|
12031
12044
|
/**
|
|
12032
12045
|
* Claims the record for sending, once. Non-consuming refusals (not yet approved) leave the record untouched so the
|
|
12033
12046
|
* human can still approve it; integrity failures (other inbox or account, edited or changed draft, different
|
|
@@ -12081,7 +12094,7 @@ declare class ApprovalStore {
|
|
|
12081
12094
|
*
|
|
12082
12095
|
* Only a pending question can be answered, and only once: a second answer is refused, not taken over the first.
|
|
12083
12096
|
*/
|
|
12084
|
-
answerDownload(approvalId: string, via: ApprovalChannel, answer: RecordedSaveAnswer): Promise<ApprovalRecord & {
|
|
12097
|
+
answerDownload(approvalId: string, via: ApprovalChannel, answer: RecordedSaveAnswer, platform?: NodeJS.Platform): Promise<ApprovalRecord & {
|
|
12085
12098
|
download: DownloadBinding;
|
|
12086
12099
|
}>;
|
|
12087
12100
|
/**
|
|
@@ -12099,10 +12112,15 @@ declare class ApprovalStore {
|
|
|
12099
12112
|
* gave it in the conversation. Under `confirm`, only a question the person answered at a terminal or in a trusted
|
|
12100
12113
|
* form can be claimed; a pending one is refused, and left as it is, so they can still answer it. One used, voided or
|
|
12101
12114
|
* expired is refused as an approval in that state is.
|
|
12115
|
+
*
|
|
12116
|
+
* `options.signal` is the download's cancellation, asked under the lock as a send's is (`ClaimOptions.signal`): a
|
|
12117
|
+
* download cancelled while this waited saves nothing and leaves the question open, the answer still unused.
|
|
12102
12118
|
*/
|
|
12103
12119
|
claimForDownload(approvalId: string, live: DownloadRequest, options?: {
|
|
12104
12120
|
policy?: ChangePolicy | undefined;
|
|
12105
12121
|
pendingHint?: string | undefined;
|
|
12122
|
+
signal?: AbortSignal | undefined;
|
|
12123
|
+
platform?: NodeJS.Platform | undefined;
|
|
12106
12124
|
}): Promise<ApprovalRecord & {
|
|
12107
12125
|
download: DownloadBinding;
|
|
12108
12126
|
}>;
|
|
@@ -12398,6 +12416,10 @@ interface ThrottleOptions {
|
|
|
12398
12416
|
sleep?: (ms: number) => Promise<void>;
|
|
12399
12417
|
/** Tests shorten this; nothing a person or an agent passes can. */
|
|
12400
12418
|
intervalMs?: number;
|
|
12419
|
+
/** How long one holder of the lock may keep everyone else waiting. Tests shorten this too. */
|
|
12420
|
+
lockTimeoutMs?: number;
|
|
12421
|
+
/** How long a request may wait for the lock in all: `LOCK_MAX_WAIT_MS`. Tests shorten this too. */
|
|
12422
|
+
lockMaxWaitMs?: number;
|
|
12401
12423
|
}
|
|
12402
12424
|
//#endregion
|
|
12403
12425
|
//#region src/context.d.ts
|
|
@@ -12410,6 +12432,8 @@ interface ResendContextOptions {
|
|
|
12410
12432
|
core?: Core | undefined;
|
|
12411
12433
|
env?: NodeJS.ProcessEnv | undefined;
|
|
12412
12434
|
now?: (() => Date) | undefined;
|
|
12435
|
+
/** The shell syntax used for commands an operation returns or prints. */
|
|
12436
|
+
platform?: NodeJS.Platform | undefined;
|
|
12413
12437
|
surface?: "cli" | "mcp" | undefined;
|
|
12414
12438
|
/** The inner fetch every request goes through, always inside the guard. Injected so a test never reaches Resend. */
|
|
12415
12439
|
fetch?: FetchLike | undefined;
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _t as
|
|
2
|
-
import { t as createResendMcpServer } from "./server-
|
|
1
|
+
import { _t as REFUSED, bt as ROUTES, vt as RESEND_API_ORIGIN, xt as VERSION, yt as RESEND_DOWNLOAD_ORIGIN } from "./send-BedjeO_M.mjs";
|
|
2
|
+
import { t as createResendMcpServer } from "./server-Bq2OYONI.mjs";
|
|
3
3
|
//#region src/index.ts
|
|
4
4
|
/**
|
|
5
5
|
* The library entry of `@agentcomms/resend`.
|