primcli 1.64.0 → 1.66.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/README.md +17 -0
- package/dist/{api-command-C3XihKH7.js → api-command-T189Vupo.js} +85 -11
- package/dist/{machine-session-B3JznlvO.js → machine-session-CgEAzThT.js} +4 -4
- package/dist/{notify-session-Bzcs3VBe.js → notify-session-CaG0vpjw.js} +2 -2
- package/dist/oclif/auto-signal-worker.js +2 -2
- package/dist/oclif/auto-signals.js +1 -1
- package/dist/oclif/index.js +198 -20
- package/dist/oclif/receiver-heal.js +1 -1
- package/dist/{repeats-BL7ZC-_6-Dzangtkf.js → repeats-BL7ZC-_6-O_YE1_cO.js} +6 -2
- package/dist/{scoped-chat-BW041zEY.js → scoped-chat-DKpjp27r.js} +1 -1
- package/dist/{signal-command-CgNIftzG.js → signal-command-CztPfoRE.js} +4 -4
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -324,6 +324,23 @@ still goes out, and different replies to the same email are separate sends. To
|
|
|
324
324
|
retry an uncertain send after the window, pass the key it reported with
|
|
325
325
|
`--idempotency-key`.
|
|
326
326
|
|
|
327
|
+
When a send is answered with an earlier one, nothing goes out and the stderr
|
|
328
|
+
notice says which send answered it and why:
|
|
329
|
+
|
|
330
|
+
| Why | Notice |
|
|
331
|
+
|---|---|
|
|
332
|
+
| The same content inside the five-minute window, with no key of your own | `Not sent: identical to <id> sent 42s ago (status delivered). Pass --idempotency-key with a new key to send again.` |
|
|
333
|
+
| A key you passed that was already used | `Not sent: idempotency key <key> was already used for <id> sent 3h ago (status delivered). A key you pass never expires. Use a different key only for a different message.` |
|
|
334
|
+
| A Function sending again for the email or event that invoked it | `Not sent: this Function already sent this message as <id> sent 2m ago (status delivered), for the same email or event that invoked it. A Function that runs again for one trigger sends once.` |
|
|
335
|
+
| A reply with no key to an email that already has a reply | `Not sent: the email already has a reply, <id> sent 5m ago (status delivered). Pass an idempotency key to send another reply.` |
|
|
336
|
+
|
|
337
|
+
The notice goes to stderr only, so stdout stays parseable. With `--json` it is
|
|
338
|
+
the envelope's `outcome_message`, and `sent.idempotency` carries the same facts
|
|
339
|
+
as fields (`key_source`, `original_sent_email_id`, `original_created_at`,
|
|
340
|
+
`window_seconds`). The outcome is `already_sent` and the exit code is 0 in every
|
|
341
|
+
case. An API response without the `idempotency` object gets the general notice,
|
|
342
|
+
`Already sent: this exact message went out earlier (...). Nothing new was sent.`
|
|
343
|
+
|
|
327
344
|
Without `--json`, `send` and `reply` keep printing the send record on stdout exactly
|
|
328
345
|
as before and add a one-line stderr summary such as `Reply sent (queued for
|
|
329
346
|
delivery, id X). Do not resend.` Before sending, `primitive reply` (and
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as __exportAll, _ as WEBHOOK_EVENT_TYPES, g as SENT_EMAIL_EVENT_TYPES } from "./repeats-BL7ZC-_6-
|
|
1
|
+
import { S as __exportAll, _ as WEBHOOK_EVENT_TYPES, g as SENT_EMAIL_EVENT_TYPES } from "./repeats-BL7ZC-_6-O_YE1_cO.js";
|
|
2
2
|
import { C as resolveCliAuth, F as agentProfilesDirectory, G as createClient, H as requireDefaultLoginProfile, K as createConfig, N as agentProfileDirectory, R as loadConnectedAgentProfile, S as normalizeApiBaseUrl, T as saveSignupCredentials, W as PrimitiveApiClient, _ as deleteCliCredentials, c as resolveConfigEnvironment, d as validateCliHeaderName, f as validateCliHeaderValue, i as loadCliConfig, j as AGENT_PROFILE_ENV, m as cliAccessTokenExpiresAt, p as acquireCliCredentialsLock, w as saveCliCredentials, x as loadCliCredentials, y as detectPrimitiveKeyEnvMisname } from "./cli-config-DMszFbGn.js";
|
|
3
3
|
import { h as writeMailJson, m as withMailLock, p as syncMailDirectory, u as privateMailPermissions } from "./shared-mail-files-MwlVE90c.js";
|
|
4
4
|
import { Command, Errors, Flags } from "@oclif/core";
|
|
@@ -3894,22 +3894,93 @@ function withFlagSuggestion(error, valid) {
|
|
|
3894
3894
|
//#region src/oclif/idempotent-replay-banner.ts
|
|
3895
3895
|
/**
|
|
3896
3896
|
* If `data` carries `idempotent_replay: true`, write a stderr notice
|
|
3897
|
-
* that
|
|
3898
|
-
* Otherwise no-op.
|
|
3899
|
-
*
|
|
3900
|
-
* The notice deliberately gives no advice on how to force a fresh
|
|
3901
|
-
* copy. Whoever sees a replay has already sent this message; telling
|
|
3902
|
-
* them to vary the content is an instruction to double-send.
|
|
3897
|
+
* that nothing new was sent and why. Otherwise no-op.
|
|
3903
3898
|
*/
|
|
3904
3899
|
function writeIdempotentReplayBannerIfReplay(data, options) {
|
|
3905
3900
|
if (!isReplay(data)) return;
|
|
3906
|
-
|
|
3901
|
+
const { write, ...notice } = options;
|
|
3902
|
+
write(`${formatAlreadySentNotice(data, notice)}\n`);
|
|
3907
3903
|
}
|
|
3908
3904
|
function isReplay(data) {
|
|
3909
3905
|
if (data === null || typeof data !== "object") return false;
|
|
3910
3906
|
return data.idempotent_replay === true;
|
|
3911
3907
|
}
|
|
3912
|
-
function
|
|
3908
|
+
function nonEmptyString(value) {
|
|
3909
|
+
return typeof value === "string" && value ? value : null;
|
|
3910
|
+
}
|
|
3911
|
+
/**
|
|
3912
|
+
* Read the API's `idempotency` object. Null when it is absent or names
|
|
3913
|
+
* a key source this CLI does not know, so the general notice is used
|
|
3914
|
+
* and nothing is claimed about a case it cannot describe.
|
|
3915
|
+
*/
|
|
3916
|
+
function readReplayDetail(sent, keyOrigin) {
|
|
3917
|
+
const raw = sent.idempotency;
|
|
3918
|
+
if (raw === null || typeof raw !== "object") return null;
|
|
3919
|
+
const object = raw;
|
|
3920
|
+
const source = object.key_source;
|
|
3921
|
+
let kind;
|
|
3922
|
+
if (sent.dedup_reason === "parent_already_replied") kind = "parent_already_replied";
|
|
3923
|
+
else if (source === "auto_content" || source === "function_trigger") kind = source;
|
|
3924
|
+
else if (source === "explicit") kind = keyOrigin === "cli_derived" ? "auto_content" : "explicit";
|
|
3925
|
+
else return null;
|
|
3926
|
+
return {
|
|
3927
|
+
kind,
|
|
3928
|
+
originalId: nonEmptyString(object.original_sent_email_id) ?? nonEmptyString(sent.id),
|
|
3929
|
+
originalCreatedAt: nonEmptyString(object.original_created_at)
|
|
3930
|
+
};
|
|
3931
|
+
}
|
|
3932
|
+
/** "12s ago", "4m ago", "3h ago", "9d ago"; null when the time is unusable. */
|
|
3933
|
+
function formatReplayAge(createdAt, now) {
|
|
3934
|
+
if (createdAt === null) return null;
|
|
3935
|
+
const created = Date.parse(createdAt);
|
|
3936
|
+
if (Number.isNaN(created)) return null;
|
|
3937
|
+
const seconds = Math.max(0, Math.round((now - created) / 1e3));
|
|
3938
|
+
if (seconds < 120) return `${seconds}s ago`;
|
|
3939
|
+
const minutes = Math.round(seconds / 60);
|
|
3940
|
+
if (minutes < 120) return `${minutes}m ago`;
|
|
3941
|
+
const hours = Math.round(minutes / 60);
|
|
3942
|
+
if (hours < 48) return `${hours}h ago`;
|
|
3943
|
+
return `${Math.round(hours / 24)}d ago`;
|
|
3944
|
+
}
|
|
3945
|
+
function statusSuffix(sent) {
|
|
3946
|
+
const status = nonEmptyString(sent.status);
|
|
3947
|
+
const deliveryStatus = nonEmptyString(sent.delivery_status);
|
|
3948
|
+
const details = [];
|
|
3949
|
+
if (status) details.push(`status ${status}`);
|
|
3950
|
+
if (deliveryStatus && deliveryStatus !== status) details.push(`delivery status ${deliveryStatus}`);
|
|
3951
|
+
return details.length > 0 ? ` (${details.join(", ")})` : "";
|
|
3952
|
+
}
|
|
3953
|
+
function formatSpecificNotice(sent, detail, options) {
|
|
3954
|
+
const age = formatReplayAge(detail.originalCreatedAt, options.now ?? Date.now());
|
|
3955
|
+
const when = age ? ` sent ${age}` : "";
|
|
3956
|
+
const id = detail.originalId ?? "an earlier send";
|
|
3957
|
+
const state = statusSuffix(sent);
|
|
3958
|
+
const advise = options.advise !== false;
|
|
3959
|
+
const keyHint = options.keyHint ?? "an idempotency key";
|
|
3960
|
+
switch (detail.kind) {
|
|
3961
|
+
case "auto_content": return `Not sent: identical to ${id}${when}${state}.${advise ? ` Pass ${keyHint} to send again.` : ""}`;
|
|
3962
|
+
case "explicit": {
|
|
3963
|
+
const key = nonEmptyString(sent.client_idempotency_key);
|
|
3964
|
+
return `Not sent: ${key ? `idempotency key ${key}` : "this idempotency key"} was already used for ${id}${when}${state}. A key you pass never expires.${advise ? " Use a different key only for a different message." : ""}`;
|
|
3965
|
+
}
|
|
3966
|
+
case "function_trigger": return `Not sent: this Function already sent this message as ${id}${when}${state}, for the same email or event that invoked it. A Function that runs again for one trigger sends once.`;
|
|
3967
|
+
case "parent_already_replied": return `Not sent: the email already has a reply, ${id}${when}${state}.${advise ? ` Pass ${keyHint} to send another reply.` : ""}`;
|
|
3968
|
+
}
|
|
3969
|
+
}
|
|
3970
|
+
/**
|
|
3971
|
+
* The notice for a send that was answered with an existing send. Worded
|
|
3972
|
+
* from the API's `idempotency` object when the response carries one;
|
|
3973
|
+
* the general "already sent" notice otherwise.
|
|
3974
|
+
*
|
|
3975
|
+
* The advice never says to change the message. Whoever sees this has a
|
|
3976
|
+
* send on record already, and varying the content to get past it is how
|
|
3977
|
+
* a retry becomes a double send. Sending the same thing again on
|
|
3978
|
+
* purpose is a different request, and an idempotency key is how the API
|
|
3979
|
+
* is told so.
|
|
3980
|
+
*/
|
|
3981
|
+
function formatAlreadySentNotice(sent, options = {}) {
|
|
3982
|
+
const detail = readReplayDetail(sent, options.keyOrigin ?? "caller");
|
|
3983
|
+
if (detail) return formatSpecificNotice(sent, detail, options);
|
|
3913
3984
|
const details = [];
|
|
3914
3985
|
if (typeof sent.id === "string" && sent.id) details.push(`sent id ${sent.id}`);
|
|
3915
3986
|
const status = typeof sent.status === "string" && sent.status ? sent.status : null;
|
|
@@ -4378,7 +4449,10 @@ function reportSendCommandResult(params) {
|
|
|
4378
4449
|
errorPayload = { message: "The API returned no send record." };
|
|
4379
4450
|
} else {
|
|
4380
4451
|
outcome = successfulSendOutcome(sent);
|
|
4381
|
-
outcomeMessage = outcome === "not_sent" || outcome === "uncertain" ? formatSendRecordFailureSummary(params.noun, outcome, sent) : outcome === "already_sent" ? formatAlreadySentNotice(sent
|
|
4452
|
+
outcomeMessage = outcome === "not_sent" || outcome === "uncertain" ? formatSendRecordFailureSummary(params.noun, outcome, sent) : outcome === "already_sent" ? formatAlreadySentNotice(sent, {
|
|
4453
|
+
keyOrigin: params.idempotencyKeyOrigin ?? "caller",
|
|
4454
|
+
keyHint: "--idempotency-key with a new key"
|
|
4455
|
+
}) : formatSentSummary(params.noun, sent);
|
|
4382
4456
|
}
|
|
4383
4457
|
if (!params.json) params.writeStderr(`${outcomeMessage}\n`);
|
|
4384
4458
|
}
|
|
@@ -5225,7 +5299,7 @@ function savedConnectedProfiles(configDir, exclude) {
|
|
|
5225
5299
|
*/
|
|
5226
5300
|
async function otherProfiles(configDir, session, current) {
|
|
5227
5301
|
if (session) try {
|
|
5228
|
-
const { connectedProfilesForSession } = await import("./machine-session-
|
|
5302
|
+
const { connectedProfilesForSession } = await import("./machine-session-CgEAzThT.js").then((n) => n.s);
|
|
5229
5303
|
return {
|
|
5230
5304
|
inSession: true,
|
|
5231
5305
|
profiles: connectedProfilesForSession(configDir, session, current)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { S as __exportAll } from "./repeats-BL7ZC-_6-
|
|
1
|
+
import { S as __exportAll } from "./repeats-BL7ZC-_6-O_YE1_cO.js";
|
|
2
2
|
import { B as parseOwnerMemberAddress, F as agentProfilesDirectory, I as connectedAgentIdentity, L as connectedApiBaseUrl, M as AgentConnectionSetupError, N as agentProfileDirectory, P as agentProfileName, R as loadConnectedAgentProfile, U as saveConnectedAgentProfile, V as profileAlreadyConnectedMessage, W as PrimitiveApiClient, j as AGENT_PROFILE_ENV, x as loadCliCredentials, z as parseConnectedAgentProfile } from "./cli-config-DMszFbGn.js";
|
|
3
|
-
import { Ct as cliInvocation, Jn as putAgentContactPolicy, Jt as refreshStoredCliCredentials, Pn as listDomains, Tt as defaultConnectionName, Vn as listSentEmails, Yn as putContact, an as deleteAgentContact, ar as sendEmail, jn as listContacts, kn as listAgentContacts, mn as getContact, nr as searchEmails, on as deleteContact, pn as getAgentContactPolicy, qn as putAgentContact, vn as getEmail } from "./api-command-
|
|
3
|
+
import { Ct as cliInvocation, Jn as putAgentContactPolicy, Jt as refreshStoredCliCredentials, Pn as listDomains, Tt as defaultConnectionName, Vn as listSentEmails, Yn as putContact, an as deleteAgentContact, ar as sendEmail, jn as listContacts, kn as listAgentContacts, mn as getContact, nr as searchEmails, on as deleteContact, pn as getAgentContactPolicy, qn as putAgentContact, vn as getEmail } from "./api-command-T189Vupo.js";
|
|
4
4
|
import { _ as acquireListenLock, c as mailTime, d as readMailJson, f as removeMailFile, g as ListenStateError, h as writeMailJson, i as mailId, l as privateMailDirectory, o as mailObject, r as mailAddress, s as mailString } from "./shared-mail-files-MwlVE90c.js";
|
|
5
|
-
import { _ as detectAgentRuntime, a as NotificationRetryError, d as defaultSessionSocket, f as NativeSessionDisconnectedError, l as SESSION_UUID, t as notificationScope, u as connectNativeSession, v as installConnectSkill, x as readBundledConnectSkill } from "./notify-session-
|
|
6
|
-
import { a as scopedChatSenderTrust } from "./scoped-chat-
|
|
5
|
+
import { _ as detectAgentRuntime, a as NotificationRetryError, d as defaultSessionSocket, f as NativeSessionDisconnectedError, l as SESSION_UUID, t as notificationScope, u as connectNativeSession, v as installConnectSkill, x as readBundledConnectSkill } from "./notify-session-CaG0vpjw.js";
|
|
6
|
+
import { a as scopedChatSenderTrust } from "./scoped-chat-DKpjp27r.js";
|
|
7
7
|
import { l as stopBackgroundListen, r as backgroundListenStatus } from "./listen-background--0peztKE.js";
|
|
8
8
|
import { t as readSharedMailOwner } from "./shared-mail-watch-DtKpsgg8.js";
|
|
9
9
|
import { accessSync, chmodSync, closeSync, constants, copyFileSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, rmdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as parseWebhookEvent, c as classifySignalContent, v as isEmailReceivedEvent, y as isTrustedSender } from "./repeats-BL7ZC-_6-
|
|
2
|
-
import { F as wakeReadCommand, P as skillFirstLine, Y as wakeInteractionSentence, dn as downloadEmailAttachmentPart } from "./api-command-
|
|
1
|
+
import { b as parseWebhookEvent, c as classifySignalContent, v as isEmailReceivedEvent, y as isTrustedSender } from "./repeats-BL7ZC-_6-O_YE1_cO.js";
|
|
2
|
+
import { F as wakeReadCommand, P as skillFirstLine, Y as wakeInteractionSentence, dn as downloadEmailAttachmentPart } from "./api-command-T189Vupo.js";
|
|
3
3
|
import { _ as acquireListenLock, g as ListenStateError, y as listenIdentity } from "./shared-mail-files-MwlVE90c.js";
|
|
4
4
|
import { closeSync, copyFileSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, opendirSync, readFileSync, readdirSync, readlinkSync, renameSync, rmSync, statSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { createHash, randomUUID, scryptSync } from "node:crypto";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as readThreadContext, En as getSentEmail, Kt as createAuthenticatedCliApiClient } from "../api-command-
|
|
1
|
+
import { A as readThreadContext, En as getSentEmail, Kt as createAuthenticatedCliApiClient } from "../api-command-T189Vupo.js";
|
|
2
2
|
import { _ as acquireListenLock } from "../shared-mail-files-MwlVE90c.js";
|
|
3
|
-
import { t as sendSignal } from "../signal-command-
|
|
3
|
+
import { t as sendSignal } from "../signal-command-CztPfoRE.js";
|
|
4
4
|
import { AUTO_SIGNAL_KIND_ENV, AUTO_WORKING_RENEW_MS, autoSignalsDisabled, clearWorkingSending, markWorkingSending, readAutoClaim, readWorkingLease, recordRenewer, stopWorkingLease, writeWorkingLease } from "./auto-signals.js";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { d as readMailJson, h as writeMailJson, i as mailId, l as privateMailDirectory, r as mailAddress } from "../shared-mail-files-MwlVE90c.js";
|
|
2
|
-
import { a as scopedChatSenderTrust, n as isPlainChatReply } from "../scoped-chat-
|
|
2
|
+
import { a as scopedChatSenderTrust, n as isPlainChatReply } from "../scoped-chat-DKpjp27r.js";
|
|
3
3
|
import { existsSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
import { join } from "node:path";
|
package/dist/oclif/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { a as REPEAT_IDLE_MAX_MINUTES, b as parseWebhookEvent, d as parseRepeatTick, f as preparePresenceAliveEmail, i as REPEAT_EVERY_MAX_MINUTES, l as parseInteractionEnvelope$1, m as repeatStopCommand, o as REPEAT_MAX_SENDS_MAX, p as prepareSignalEmail, s as buildRepeatStopBody, u as parsePresenceEnvelope, v as isEmailReceivedEvent, x as parseFromHeader } from "../repeats-BL7ZC-_6-
|
|
1
|
+
import { a as REPEAT_IDLE_MAX_MINUTES, b as parseWebhookEvent, d as parseRepeatTick, f as preparePresenceAliveEmail, i as REPEAT_EVERY_MAX_MINUTES, l as parseInteractionEnvelope$1, m as repeatStopCommand, o as REPEAT_MAX_SENDS_MAX, p as prepareSignalEmail, s as buildRepeatStopBody, u as parsePresenceEnvelope, v as isEmailReceivedEvent, x as parseFromHeader } from "../repeats-BL7ZC-_6-O_YE1_cO.js";
|
|
2
2
|
import { A as saveActiveChatState, C as resolveCliAuth, D as deleteChatState, E as chatStatePath, F as agentProfilesDirectory, H as requireDefaultLoginProfile, M as AgentConnectionSetupError, N as agentProfileDirectory, O as loadActiveChatState, P as agentProfileName, R as loadConnectedAgentProfile, T as saveSignupCredentials, W as PrimitiveApiClient, _ as deleteCliCredentials, a as normalizeCliEnvironmentName, b as hasStoredCliLogin, c as resolveConfigEnvironment, g as credentialsPath, h as credentialsLockPath, i as loadCliConfig, j as AGENT_PROFILE_ENV, k as loadChatConversationByLocalId, l as saveCliConfig, m as cliAccessTokenExpiresAt, n as deleteCliConfig, o as redactCliEnvironment, p as acquireCliCredentialsLock, r as emptyCliConfig, s as removeCliEnvironment, u as upsertCliEnvironment, v as deleteCliCredentialsLock, w as saveCliCredentials, x as loadCliCredentials, y as detectPrimitiveKeyEnvMisname } from "../cli-config-DMszFbGn.js";
|
|
3
|
-
import { $ as apiResultHttpStatus, $n as replyToEmail, $t as completeWebhookEvent, A as readThreadContext, An as listAgentNetworks, At as formatAlreadySentNotice, B as pendingMailPath, Bn as listRoutes, Bt as expectedAutomatedVerdicts, C as queryUsesAwaiting, Cn as getMemory, Cr as verifyAgentSignup, Ct as cliInvocation, D as displayAddress, Dn as getThread, Dt as identitySuggestions, E as describeWake, En as getSentEmail, Et as generatedAgentName, F as wakeReadCommand, Fn as listEmails, Ft as AUTOMATED_VALUES, G as interactionNextActions, Gn as pollCliLogin, H as recordPendingMail, Hn as listWakeAuthorizations, Ht as isAutomatedRejectedError, I as wakeRecipientField, In as listEndpoints, It as AutomatedFilterUnsupportedError, J as replyInteractionWarning, Jt as refreshStoredCliCredentials, K as readEmailInteraction, Kn as pullWebhookEvent, Kt as createAuthenticatedCliApiClient, L as wakeRelationship, Ln as listFunctionLogs, Lt as assertAutomatedVerdict, M as serverMuted, Mn as listDefaultNetworkAgents, Mt as withFlagSuggestion, N as serverRelationship, Nn as listDefaultNetworkMembers, Nt as AUTOMATED_FILTER_UNSUPPORTED_CODE, O as formatMailWakeLine, On as getWakeSchedule, Ot as loadSkillLine, Pn as listDomains, Pt as AUTOMATED_FLAG_DESCRIPTION, Q as SEND_OUTCOME_HELP, Qn as reorderRoutes, Qt as cliLogout, R as clearConsumedPendingMail, Rn as listFunctions, Rt as automatedRejectedError, S as isAwaitingRejectedError, Sn as getInboxStatus, Sr as verifyAgentClaim, T as bareAddress, Tn as getRepeatingSend, U as removePendingMail, Un as listWakeDispatches, Ut as queryUsesAutomated, V as readPendingMail, Vn as listSentEmails, Vt as hasAutomatedVerdict, W as interactionHumanLine, Wn as listWakeSchedules, Wt as ConnectedAgentKeyRequiredError, X as IDEMPOTENCY_KEY_FLAG_DESCRIPTION, Xn as redeemCreditCode, Xt as addDefaultNetworkMember, Yt as resolveCliApiRequestConfig, Z as MAX_SEND_WAIT_TIMEOUT_MS, Zn as removeDefaultNetworkMember, Zt as checkDefaultNetworkContactAdmission, _ as awaitingRejectedError, _n as getDefaultNetworkAgent, _r as updateFunction, _t as sendWaitClampNotice, a as extractErrorCode, ar as sendEmail, at as deriveSendIdempotencyKey, b as formatRepliesCell, bn as getFunctionRouting, br as updateWakeAuthorization, bt as successfulSendOutcome, c as readTextFileFlag, cn as deleteRoute, cr as setMemory, ct as formatDeletedEarlierSendNotice, d as writeErrorWithHints, dr as startAgentSignup, dt as formatSendFailureSummary, en as createEndpoint, er as resendAgentSignupVerification, et as assertValidIdempotencyKey, f as AWAITING_FLAG_DESCRIPTION, fn as getAccount, fr as startCliLogin, ft as formatSendRecordFailureSummary, g as assertAwaitingFilterRows, gn as getCreditBalance, gr as updateDefaultNetworkMember, gt as sendOutcomeExitCode, h as ReplyStateUnsupportedError, hn as getConversation, hr as unsetFunctionRoute, ht as sendIdentityFields, i as createOperationCommand, in as createWakeSchedule, ir as semanticSearch, it as classifySendError, j as sentInThread, jt as writeIdempotentReplayBannerIfReplay, k as latestOwnOutbound, kn as listAgentContacts, kt as currentMailSessionKey, l as runWithTiming, ln as deleteWakeAuthorization, lr as simulateRoute, lt as formatPriorRepliesCheckSkipped, m as REPLY_STATE_UNSUPPORTED_CODE, mr as testFunction, mt as reportSendCommandResult, n as API_ERROR_CODES, nn as createRoute, nr as searchEmails, nt as buildThrownSendFailureEnvelope, o as extractErrorPayload, or as setFunctionRoute, ot as excludeSignalReplies, p as AWAITING_VALUES, pn as getAgentContactPolicy, pr as stopRepeatFromEmail, pt as priorRepliesThatWentOut, q as replyExpectation, qt as createCliApiClient, r as TIME_FLAG_DESCRIPTION, rn as createWakeAuthorization, rr as searchMemories, rt as checkPriorReplies, s as formatErrorPayload, sn as deleteMemory, sr as setFunctionSecret, st as followUpCommandPrefix, t as API_BASE_URL_FLAG_DESCRIPTION, tn as createFunction, tr as runWakeSchedule, tt as buildFollowUpCommand, u as surfaceUnauthorizedHint, un as deleteWakeSchedule, ur as startAgentClaim, ut as formatPriorRepliesWarning, v as ensureSearchReportsReplyState, vn as getEmail, vr as updateRepeatingSend, vt as sentHistoryWindowStart, w as explainPendingMailNotFound, wn as getOrgRoutingTopology, wt as connectNextSteps, x as hasReplyState, xn as getFunctionTestRunTrace, xr as updateWakeSchedule, xt as thrownErrorExitCode, y as formatAwaitingCell, yn as getFunction, yr as updateRoute, yt as serializeErrorPayload, z as clearReadPendingMail, zn as listRepeatingSends, zt as ensureSearchReportsAutomated } from "../api-command-
|
|
3
|
+
import { $ as apiResultHttpStatus, $n as replyToEmail, $t as completeWebhookEvent, A as readThreadContext, An as listAgentNetworks, At as formatAlreadySentNotice, B as pendingMailPath, Bn as listRoutes, Bt as expectedAutomatedVerdicts, C as queryUsesAwaiting, Cn as getMemory, Cr as verifyAgentSignup, Ct as cliInvocation, D as displayAddress, Dn as getThread, Dt as identitySuggestions, E as describeWake, En as getSentEmail, Et as generatedAgentName, F as wakeReadCommand, Fn as listEmails, Ft as AUTOMATED_VALUES, G as interactionNextActions, Gn as pollCliLogin, H as recordPendingMail, Hn as listWakeAuthorizations, Ht as isAutomatedRejectedError, I as wakeRecipientField, In as listEndpoints, It as AutomatedFilterUnsupportedError, J as replyInteractionWarning, Jt as refreshStoredCliCredentials, K as readEmailInteraction, Kn as pullWebhookEvent, Kt as createAuthenticatedCliApiClient, L as wakeRelationship, Ln as listFunctionLogs, Lt as assertAutomatedVerdict, M as serverMuted, Mn as listDefaultNetworkAgents, Mt as withFlagSuggestion, N as serverRelationship, Nn as listDefaultNetworkMembers, Nt as AUTOMATED_FILTER_UNSUPPORTED_CODE, O as formatMailWakeLine, On as getWakeSchedule, Ot as loadSkillLine, Pn as listDomains, Pt as AUTOMATED_FLAG_DESCRIPTION, Q as SEND_OUTCOME_HELP, Qn as reorderRoutes, Qt as cliLogout, R as clearConsumedPendingMail, Rn as listFunctions, Rt as automatedRejectedError, S as isAwaitingRejectedError, Sn as getInboxStatus, Sr as verifyAgentClaim, T as bareAddress, Tn as getRepeatingSend, U as removePendingMail, Un as listWakeDispatches, Ut as queryUsesAutomated, V as readPendingMail, Vn as listSentEmails, Vt as hasAutomatedVerdict, W as interactionHumanLine, Wn as listWakeSchedules, Wt as ConnectedAgentKeyRequiredError, X as IDEMPOTENCY_KEY_FLAG_DESCRIPTION, Xn as redeemCreditCode, Xt as addDefaultNetworkMember, Yt as resolveCliApiRequestConfig, Z as MAX_SEND_WAIT_TIMEOUT_MS, Zn as removeDefaultNetworkMember, Zt as checkDefaultNetworkContactAdmission, _ as awaitingRejectedError, _n as getDefaultNetworkAgent, _r as updateFunction, _t as sendWaitClampNotice, a as extractErrorCode, ar as sendEmail, at as deriveSendIdempotencyKey, b as formatRepliesCell, bn as getFunctionRouting, br as updateWakeAuthorization, bt as successfulSendOutcome, c as readTextFileFlag, cn as deleteRoute, cr as setMemory, ct as formatDeletedEarlierSendNotice, d as writeErrorWithHints, dr as startAgentSignup, dt as formatSendFailureSummary, en as createEndpoint, er as resendAgentSignupVerification, et as assertValidIdempotencyKey, f as AWAITING_FLAG_DESCRIPTION, fn as getAccount, fr as startCliLogin, ft as formatSendRecordFailureSummary, g as assertAwaitingFilterRows, gn as getCreditBalance, gr as updateDefaultNetworkMember, gt as sendOutcomeExitCode, h as ReplyStateUnsupportedError, hn as getConversation, hr as unsetFunctionRoute, ht as sendIdentityFields, i as createOperationCommand, in as createWakeSchedule, ir as semanticSearch, it as classifySendError, j as sentInThread, jt as writeIdempotentReplayBannerIfReplay, k as latestOwnOutbound, kn as listAgentContacts, kt as currentMailSessionKey, l as runWithTiming, ln as deleteWakeAuthorization, lr as simulateRoute, lt as formatPriorRepliesCheckSkipped, m as REPLY_STATE_UNSUPPORTED_CODE, mr as testFunction, mt as reportSendCommandResult, n as API_ERROR_CODES, nn as createRoute, nr as searchEmails, nt as buildThrownSendFailureEnvelope, o as extractErrorPayload, or as setFunctionRoute, ot as excludeSignalReplies, p as AWAITING_VALUES, pn as getAgentContactPolicy, pr as stopRepeatFromEmail, pt as priorRepliesThatWentOut, q as replyExpectation, qt as createCliApiClient, r as TIME_FLAG_DESCRIPTION, rn as createWakeAuthorization, rr as searchMemories, rt as checkPriorReplies, s as formatErrorPayload, sn as deleteMemory, sr as setFunctionSecret, st as followUpCommandPrefix, t as API_BASE_URL_FLAG_DESCRIPTION, tn as createFunction, tr as runWakeSchedule, tt as buildFollowUpCommand, u as surfaceUnauthorizedHint, un as deleteWakeSchedule, ur as startAgentClaim, ut as formatPriorRepliesWarning, v as ensureSearchReportsReplyState, vn as getEmail, vr as updateRepeatingSend, vt as sentHistoryWindowStart, w as explainPendingMailNotFound, wn as getOrgRoutingTopology, wt as connectNextSteps, x as hasReplyState, xn as getFunctionTestRunTrace, xr as updateWakeSchedule, xt as thrownErrorExitCode, y as formatAwaitingCell, yn as getFunction, yr as updateRoute, yt as serializeErrorPayload, z as clearReadPendingMail, zn as listRepeatingSends, zt as ensureSearchReportsAutomated } from "../api-command-T189Vupo.js";
|
|
4
4
|
import { S as resolveListenSubscription, _ as acquireListenLock, a as mailLockBusy, c as mailTime, d as readMailJson, f as removeMailFile, g as ListenStateError, h as writeMailJson, i as mailId, l as privateMailDirectory, m as withMailLock, o as mailObject, u as privateMailPermissions, x as normalizeListenOrigin, y as listenIdentity } from "../shared-mail-files-MwlVE90c.js";
|
|
5
|
-
import { _ as detectAgentRuntime, a as NotificationRetryError, b as installedVersion, c as readConversationStatusContent, d as defaultSessionSocket, f as NativeSessionDisconnectedError, g as connectSkillTarget, h as NotificationOutcomeUnknownError, i as notificationReceiptPage, l as SESSION_UUID$1, m as NativeSessionNotLoadedError, n as notificationSenders, o as isRoutineNotificationContent, p as NativeSessionError, r as openSessionNotifications, s as notificationPartReader, t as notificationScope, v as installConnectSkill, x as readBundledConnectSkill, y as installedConnectSkillFile } from "../notify-session-
|
|
6
|
-
import { $ as boundSessionProfiles, A as AgentDisconnectError, B as runContactRequest, C as verificationReplySubmitted, D as createNotificationContactPolicy, E as NetworkAdmissionPendingError, F as addressNoteTarget, G as receiverStatusCommand, H as agentInvitationHash, I as runAddressNotesRequest, J as savedReceiver, K as refusalAfterReplacement, L as ContactsApiError, M as clearRevokedAddresses, N as disconnectAgent, O as evaluateContactPolicy, P as AddressNotesApiError, Q as recordHookMailCheck, R as contactAddress, S as externalReceivingState, T as NETWORK_ADMISSION_PENDING_RETRY_MS, U as connectAgent, V as agentConnectionStatus, W as readAgentInvitation, X as releaseRegistrationsForProfile, Y as MACHINE_RUNTIMES, Z as installClaudeWakeHook, _ as defaultAgentProfileName, _t as upsertManagedBlock, a as endSession, at as ephemeralCliReason, b as runAgentConnect, bt as refreshOwnerMemberAddressPeriodically, c as pendingSessionDisconnects, ct as inspectClaudeHooks, d as registerSession, dt as samePath, et as claudeConfigDir, f as retryPendingDisconnects, ft as writeClaudeSettings, g as connectWarnings, gt as readManagedFile, h as enrollmentResumes, ht as jsonIndentation, i as connectedProfilesForSession, it as ensureHookLauncher, j as claimOverRevokedSetup, k as canonicalContactSelector, l as psProcessInfo, lt as readClaudeSettings, m as enrollAgent, mt as inspectManagedBlock, n as OMP_MAIN, nt as describeSessionHookChange, o as headlessClaudeRun, ot as findOnPath, p as runDetached, pt as MachineFileError, q as saveConnectionName, r as agentConnectionState, rt as describeSessionHookItem, st as hasMachineSessionHooks, t as HOOK_END_GRACE_MS, tt as currentCliLocation, u as readClaudeHookInput, ut as repairClaudeHooks, v as invitationProfileName, vt as writeManagedFile, w as ContactPolicyReadRetryError, x as RECEIVER_MODES, xt as withOwnerMemberAddress, y as pollCheckCommand, yt as readHookLauncherWarning, z as contactAgentAddress } from "../machine-session-
|
|
7
|
-
import { a as scopedChatSenderTrust, i as readBeforeDeadline, n as isPlainChatReply, o as presenceDisposition, r as isScopedChatReply, s as readPresenceProjection, t as isConnectedChatCredential } from "../scoped-chat-
|
|
5
|
+
import { _ as detectAgentRuntime, a as NotificationRetryError, b as installedVersion, c as readConversationStatusContent, d as defaultSessionSocket, f as NativeSessionDisconnectedError, g as connectSkillTarget, h as NotificationOutcomeUnknownError, i as notificationReceiptPage, l as SESSION_UUID$1, m as NativeSessionNotLoadedError, n as notificationSenders, o as isRoutineNotificationContent, p as NativeSessionError, r as openSessionNotifications, s as notificationPartReader, t as notificationScope, v as installConnectSkill, x as readBundledConnectSkill, y as installedConnectSkillFile } from "../notify-session-CaG0vpjw.js";
|
|
6
|
+
import { $ as boundSessionProfiles, A as AgentDisconnectError, B as runContactRequest, C as verificationReplySubmitted, D as createNotificationContactPolicy, E as NetworkAdmissionPendingError, F as addressNoteTarget, G as receiverStatusCommand, H as agentInvitationHash, I as runAddressNotesRequest, J as savedReceiver, K as refusalAfterReplacement, L as ContactsApiError, M as clearRevokedAddresses, N as disconnectAgent, O as evaluateContactPolicy, P as AddressNotesApiError, Q as recordHookMailCheck, R as contactAddress, S as externalReceivingState, T as NETWORK_ADMISSION_PENDING_RETRY_MS, U as connectAgent, V as agentConnectionStatus, W as readAgentInvitation, X as releaseRegistrationsForProfile, Y as MACHINE_RUNTIMES, Z as installClaudeWakeHook, _ as defaultAgentProfileName, _t as upsertManagedBlock, a as endSession, at as ephemeralCliReason, b as runAgentConnect, bt as refreshOwnerMemberAddressPeriodically, c as pendingSessionDisconnects, ct as inspectClaudeHooks, d as registerSession, dt as samePath, et as claudeConfigDir, f as retryPendingDisconnects, ft as writeClaudeSettings, g as connectWarnings, gt as readManagedFile, h as enrollmentResumes, ht as jsonIndentation, i as connectedProfilesForSession, it as ensureHookLauncher, j as claimOverRevokedSetup, k as canonicalContactSelector, l as psProcessInfo, lt as readClaudeSettings, m as enrollAgent, mt as inspectManagedBlock, n as OMP_MAIN, nt as describeSessionHookChange, o as headlessClaudeRun, ot as findOnPath, p as runDetached, pt as MachineFileError, q as saveConnectionName, r as agentConnectionState, rt as describeSessionHookItem, st as hasMachineSessionHooks, t as HOOK_END_GRACE_MS, tt as currentCliLocation, u as readClaudeHookInput, ut as repairClaudeHooks, v as invitationProfileName, vt as writeManagedFile, w as ContactPolicyReadRetryError, x as RECEIVER_MODES, xt as withOwnerMemberAddress, y as pollCheckCommand, yt as readHookLauncherWarning, z as contactAgentAddress } from "../machine-session-CgEAzThT.js";
|
|
7
|
+
import { a as scopedChatSenderTrust, i as readBeforeDeadline, n as isPlainChatReply, o as presenceDisposition, r as isScopedChatReply, s as readPresenceProjection, t as isConnectedChatCredential } from "../scoped-chat-DKpjp27r.js";
|
|
8
8
|
import { c as startBackgroundListen, i as backgroundListenToken, l as stopBackgroundListen, o as runBackgroundListen, r as backgroundListenStatus, u as verifyBackgroundListenTarget } from "../listen-background--0peztKE.js";
|
|
9
|
-
import { a as ensureSharedMailSubscription, c as isConnectedAgentKey, d as reserveSharedMailSubscription, f as followEmailConversation, g as EventReceiverError, h as EventConnection, i as sharedMailScope, l as createSharedMailWaiter, m as otherParticipants, n as reconcileChatSend, p as readConversationFollow, r as openSharedMailReceiver, s as AGENT_CONNECTION_REQUIRED_MESSAGE, t as sendSignal, u as openSharedMailStore } from "../signal-command-
|
|
9
|
+
import { a as ensureSharedMailSubscription, c as isConnectedAgentKey, d as reserveSharedMailSubscription, f as followEmailConversation, g as EventReceiverError, h as EventConnection, i as sharedMailScope, l as createSharedMailWaiter, m as otherParticipants, n as reconcileChatSend, p as readConversationFollow, r as openSharedMailReceiver, s as AGENT_CONNECTION_REQUIRED_MESSAGE, t as sendSignal, u as openSharedMailStore } from "../signal-command-CztPfoRE.js";
|
|
10
10
|
import { autoSignalEligible, dispatchAutoRead, dispatchAutoWorking, haltAutoWorking, isSentSignal, readWorkingLease, restoreAutoWorking } from "./auto-signals.js";
|
|
11
11
|
import { t as guardJsonOutputCommands } from "../json-output-CEskSQJi.js";
|
|
12
12
|
import { Args, Command, Errors, Flags, ux } from "@oclif/core";
|
|
@@ -1651,7 +1651,8 @@ const openapiDocument = {
|
|
|
1651
1651
|
},
|
|
1652
1652
|
"responses": {
|
|
1653
1653
|
"200": {
|
|
1654
|
-
"description": "Outbound relay result",
|
|
1654
|
+
"description": "Outbound relay result. When the request was answered with an\nexisting send instead of making a new one, the response carries\n`Idempotent-Replayed: true` and `data.idempotency`, and nothing\nwas sent for this request.\n",
|
|
1655
|
+
"headers": { "Idempotent-Replayed": { "$ref": "#/components/headers/IdempotentReplayed" } },
|
|
1655
1656
|
"content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, {
|
|
1656
1657
|
"type": "object",
|
|
1657
1658
|
"properties": { "data": { "$ref": "#/components/schemas/SendMailResult" } }
|
|
@@ -2575,7 +2576,8 @@ const openapiDocument = {
|
|
|
2575
2576
|
},
|
|
2576
2577
|
"responses": {
|
|
2577
2578
|
"200": {
|
|
2578
|
-
"description": "Outbound relay result",
|
|
2579
|
+
"description": "Outbound relay result. When the request was answered with an\nexisting send instead of making a new one, the response carries\n`Idempotent-Replayed: true` and `data.idempotency`, and nothing\nwas sent for this request.\n",
|
|
2580
|
+
"headers": { "Idempotent-Replayed": { "$ref": "#/components/headers/IdempotentReplayed" } },
|
|
2579
2581
|
"content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, {
|
|
2580
2582
|
"type": "object",
|
|
2581
2583
|
"properties": { "data": { "$ref": "#/components/schemas/SendMailResult" } }
|
|
@@ -8295,6 +8297,20 @@ const openapiDocument = {
|
|
|
8295
8297
|
}
|
|
8296
8298
|
}
|
|
8297
8299
|
},
|
|
8300
|
+
"headers": {
|
|
8301
|
+
"IdempotentReplayed": {
|
|
8302
|
+
"description": "Set to `true` when the request was answered with an existing send\ninstead of making a new one. Absent on a request that sent. On a\nbatch it means at least one message replayed; see\n`Idempotent-Replayed-Count`.\n",
|
|
8303
|
+
"schema": { "type": "string" },
|
|
8304
|
+
"example": "true"
|
|
8305
|
+
},
|
|
8306
|
+
"IdempotentReplayedCount": {
|
|
8307
|
+
"description": "Batch sends only: how many messages were answered with an existing\nsend instead of being sent. Absent when every message sent.\n",
|
|
8308
|
+
"schema": {
|
|
8309
|
+
"type": "integer",
|
|
8310
|
+
"minimum": 1
|
|
8311
|
+
}
|
|
8312
|
+
}
|
|
8313
|
+
},
|
|
8298
8314
|
"responses": {
|
|
8299
8315
|
"AttachmentPart": {
|
|
8300
8316
|
"description": "Original attachment bytes; never a JSON envelope or a base64 string",
|
|
@@ -11715,6 +11731,10 @@ const openapiDocument = {
|
|
|
11715
11731
|
}
|
|
11716
11732
|
},
|
|
11717
11733
|
"required": ["hostname", "via"]
|
|
11734
|
+
},
|
|
11735
|
+
"from_name": {
|
|
11736
|
+
"type": ["string", "null"],
|
|
11737
|
+
"description": "Display name from the `From:` header, decoded for display:\nRFC 2047 encoded words are decoded in their declared charset\nand folded lines are joined (e.g. `Dana Rúiz` for\n`=?UTF-8?Q?Dana_R=C3=BAiz?= <dana@example.com>`). Null when\nthe header carries no display name, and may be absent; treat\na missing value the same as null.\n\nFor display only: the sender chooses this name freely, so\nidentify the sender by `from_email`, never by this name.\n"
|
|
11718
11738
|
}
|
|
11719
11739
|
},
|
|
11720
11740
|
"required": [
|
|
@@ -11929,7 +11949,11 @@ const openapiDocument = {
|
|
|
11929
11949
|
},
|
|
11930
11950
|
"from_header": {
|
|
11931
11951
|
"type": ["string", "null"],
|
|
11932
|
-
"description": "Raw `From:` header from the message body, including any\ndisplay name (e.g. `\"Alice Example\" <alice@example.com>`).\
|
|
11952
|
+
"description": "Raw `From:` header from the message body, including any\ndisplay name (e.g. `\"Alice Example\" <alice@example.com>`).\nThe display name in this raw value may be RFC 2047 encoded\n(`=?UTF-8?Q?...?=`); use `from_name` for the decoded name.\n\nFor the bare email address (display name stripped), use\n`from_email`.\n"
|
|
11953
|
+
},
|
|
11954
|
+
"from_name": {
|
|
11955
|
+
"type": ["string", "null"],
|
|
11956
|
+
"description": "Display name from the `From:` header, decoded for display:\nRFC 2047 encoded words are decoded in their declared charset\nand folded lines are joined (e.g. `Dana Rúiz` for\n`=?UTF-8?Q?Dana_R=C3=BAiz?= <dana@example.com>`). Null when\nthe header carries no display name, and may be absent; treat\na missing value the same as null.\n\nFor display only: the sender chooses this name freely, so\nidentify the sender by `from_email`, never by this name.\n"
|
|
11933
11957
|
},
|
|
11934
11958
|
"content_discarded_at": {
|
|
11935
11959
|
"type": ["string", "null"],
|
|
@@ -11938,7 +11962,7 @@ const openapiDocument = {
|
|
|
11938
11962
|
"content_discarded_by_delivery_id": { "type": ["string", "null"] },
|
|
11939
11963
|
"from_email": {
|
|
11940
11964
|
"type": "string",
|
|
11941
|
-
"description": "Bare email address parsed from the `From:` header, with\ndisplay name stripped (e.g. `alice@example.com`). Falls\nback to `sender` (the SMTP envelope MAIL FROM) when the\n`From:` header cannot be parsed.\n\n**This is the canonical \"who sent this email\" field for\nmost use cases**, including comparing against allowlists,\nrouting replies, or displaying the sender to a user. Use\n`
|
|
11965
|
+
"description": "Bare email address parsed from the `From:` header, with\ndisplay name stripped (e.g. `alice@example.com`). Falls\nback to `sender` (the SMTP envelope MAIL FROM) when the\n`From:` header cannot be parsed.\n\n**This is the canonical \"who sent this email\" field for\nmost use cases**, including comparing against allowlists,\nrouting replies, or displaying the sender to a user. Use\n`from_name` when you need the display name, `from_header`\nfor the raw header, or `sender`/`smtp_mail_from` when you\nneed the SMTP envelope value (e.g. to follow a bounce).\n"
|
|
11942
11966
|
},
|
|
11943
11967
|
"to_email": {
|
|
11944
11968
|
"type": "string",
|
|
@@ -13749,6 +13773,46 @@ const openapiDocument = {
|
|
|
13749
13773
|
"reply_sent_email_id"
|
|
13750
13774
|
]
|
|
13751
13775
|
},
|
|
13776
|
+
"SendMailIdempotencyReplay": {
|
|
13777
|
+
"type": "object",
|
|
13778
|
+
"description": "Present only when the request was answered with an existing send\ninstead of making a new one (`idempotent_replay: true`). Nothing\nwas sent for this request. Says how the idempotency key was\nderived and which send the request collapsed onto. On the replay\nof a stored failure the same object is under `error.details`.\n",
|
|
13779
|
+
"properties": {
|
|
13780
|
+
"replayed": {
|
|
13781
|
+
"type": "boolean",
|
|
13782
|
+
"description": "Always `true`. The object is absent on a request that made a send of its own."
|
|
13783
|
+
},
|
|
13784
|
+
"key_source": {
|
|
13785
|
+
"type": "string",
|
|
13786
|
+
"enum": [
|
|
13787
|
+
"explicit",
|
|
13788
|
+
"auto_content",
|
|
13789
|
+
"function_trigger"
|
|
13790
|
+
],
|
|
13791
|
+
"description": "`explicit`: the request carried an `Idempotency-Key` header.\n`auto_content`: no header was sent, so the key was derived\nfrom the canonical request content (recipients included) and\na fixed 5-minute window; an identical send inside the same\nwindow was not sent again. `function_trigger`: no header on a\nsend made by a Function, so the key was derived from the\ncontent, the Function and the inbound email (or event) that\ninvoked it.\n"
|
|
13792
|
+
},
|
|
13793
|
+
"original_sent_email_id": {
|
|
13794
|
+
"type": "string",
|
|
13795
|
+
"format": "uuid",
|
|
13796
|
+
"description": "The send this request collapsed onto. Same value as `id`."
|
|
13797
|
+
},
|
|
13798
|
+
"original_created_at": {
|
|
13799
|
+
"type": ["string", "null"],
|
|
13800
|
+
"format": "date-time",
|
|
13801
|
+
"description": "When that send was created."
|
|
13802
|
+
},
|
|
13803
|
+
"window_seconds": {
|
|
13804
|
+
"type": ["integer", "null"],
|
|
13805
|
+
"description": "Length of the content window (300) when an `auto_content`\nkey matched on content. Null for `explicit` and\n`function_trigger` keys, which have no window, and for a\nkeyless reply matched because its parent already has a reply\n(`dedup_reason: parent_already_replied`).\n"
|
|
13806
|
+
}
|
|
13807
|
+
},
|
|
13808
|
+
"required": [
|
|
13809
|
+
"replayed",
|
|
13810
|
+
"key_source",
|
|
13811
|
+
"original_sent_email_id",
|
|
13812
|
+
"original_created_at",
|
|
13813
|
+
"window_seconds"
|
|
13814
|
+
]
|
|
13815
|
+
},
|
|
13752
13816
|
"SendMailResult": {
|
|
13753
13817
|
"type": "object",
|
|
13754
13818
|
"properties": {
|
|
@@ -13805,6 +13869,11 @@ const openapiDocument = {
|
|
|
13805
13869
|
"type": "boolean",
|
|
13806
13870
|
"description": "True when the response replays a previously-recorded send\nkeyed by `client_idempotency_key` (same key, same canonical\npayload). False on a fresh send and on gate-denied\nresponses. Lets callers branch on cache state without\ndiffing fields.\n"
|
|
13807
13871
|
},
|
|
13872
|
+
"dedup_reason": {
|
|
13873
|
+
"type": ["string", "null"],
|
|
13874
|
+
"description": "Why the response was a replay; null or absent on a fresh\nsend. `content_hash_match`: the idempotency key matched an\nearlier send. `parent_already_replied`: a reply sent without\nan `Idempotency-Key` header was matched to the reply its\nparent email already has. Pass an `Idempotency-Key` to send\nanother reply to the same email.\n"
|
|
13875
|
+
},
|
|
13876
|
+
"idempotency": { "$ref": "#/components/schemas/SendMailIdempotencyReplay" },
|
|
13808
13877
|
"scheduled_at": {
|
|
13809
13878
|
"type": "string",
|
|
13810
13879
|
"format": "date-time",
|
|
@@ -23208,7 +23277,11 @@ const operationManifest = [
|
|
|
23208
23277
|
},
|
|
23209
23278
|
"from_header": {
|
|
23210
23279
|
"type": ["string", "null"],
|
|
23211
|
-
"description": "Raw `From:` header from the message body, including any\ndisplay name (e.g. `\"Alice Example\" <alice@example.com>`).\
|
|
23280
|
+
"description": "Raw `From:` header from the message body, including any\ndisplay name (e.g. `\"Alice Example\" <alice@example.com>`).\nThe display name in this raw value may be RFC 2047 encoded\n(`=?UTF-8?Q?...?=`); use `from_name` for the decoded name.\n\nFor the bare email address (display name stripped), use\n`from_email`.\n"
|
|
23281
|
+
},
|
|
23282
|
+
"from_name": {
|
|
23283
|
+
"type": ["string", "null"],
|
|
23284
|
+
"description": "Display name from the `From:` header, decoded for display:\nRFC 2047 encoded words are decoded in their declared charset\nand folded lines are joined (e.g. `Dana Rúiz` for\n`=?UTF-8?Q?Dana_R=C3=BAiz?= <dana@example.com>`). Null when\nthe header carries no display name, and may be absent; treat\na missing value the same as null.\n\nFor display only: the sender chooses this name freely, so\nidentify the sender by `from_email`, never by this name.\n"
|
|
23212
23285
|
},
|
|
23213
23286
|
"content_discarded_at": {
|
|
23214
23287
|
"type": ["string", "null"],
|
|
@@ -23217,7 +23290,7 @@ const operationManifest = [
|
|
|
23217
23290
|
"content_discarded_by_delivery_id": { "type": ["string", "null"] },
|
|
23218
23291
|
"from_email": {
|
|
23219
23292
|
"type": "string",
|
|
23220
|
-
"description": "Bare email address parsed from the `From:` header, with\ndisplay name stripped (e.g. `alice@example.com`). Falls\nback to `sender` (the SMTP envelope MAIL FROM) when the\n`From:` header cannot be parsed.\n\n**This is the canonical \"who sent this email\" field for\nmost use cases**, including comparing against allowlists,\nrouting replies, or displaying the sender to a user. Use\n`
|
|
23293
|
+
"description": "Bare email address parsed from the `From:` header, with\ndisplay name stripped (e.g. `alice@example.com`). Falls\nback to `sender` (the SMTP envelope MAIL FROM) when the\n`From:` header cannot be parsed.\n\n**This is the canonical \"who sent this email\" field for\nmost use cases**, including comparing against allowlists,\nrouting replies, or displaying the sender to a user. Use\n`from_name` when you need the display name, `from_header`\nfor the raw header, or `sender`/`smtp_mail_from` when you\nneed the SMTP envelope value (e.g. to follow a bounce).\n"
|
|
23221
23294
|
},
|
|
23222
23295
|
"to_email": {
|
|
23223
23296
|
"type": "string",
|
|
@@ -23972,6 +24045,10 @@ const operationManifest = [
|
|
|
23972
24045
|
}
|
|
23973
24046
|
},
|
|
23974
24047
|
"required": ["hostname", "via"]
|
|
24048
|
+
},
|
|
24049
|
+
"from_name": {
|
|
24050
|
+
"type": ["string", "null"],
|
|
24051
|
+
"description": "Display name from the `From:` header, decoded for display:\nRFC 2047 encoded words are decoded in their declared charset\nand folded lines are joined (e.g. `Dana Rúiz` for\n`=?UTF-8?Q?Dana_R=C3=BAiz?= <dana@example.com>`). Null when\nthe header carries no display name, and may be absent; treat\na missing value the same as null.\n\nFor display only: the sender chooses this name freely, so\nidentify the sender by `from_email`, never by this name.\n"
|
|
23975
24052
|
}
|
|
23976
24053
|
},
|
|
23977
24054
|
"required": [
|
|
@@ -24398,6 +24475,10 @@ const operationManifest = [
|
|
|
24398
24475
|
}
|
|
24399
24476
|
},
|
|
24400
24477
|
"required": ["hostname", "via"]
|
|
24478
|
+
},
|
|
24479
|
+
"from_name": {
|
|
24480
|
+
"type": ["string", "null"],
|
|
24481
|
+
"description": "Display name from the `From:` header, decoded for display:\nRFC 2047 encoded words are decoded in their declared charset\nand folded lines are joined (e.g. `Dana Rúiz` for\n`=?UTF-8?Q?Dana_R=C3=BAiz?= <dana@example.com>`). Null when\nthe header carries no display name, and may be absent; treat\na missing value the same as null.\n\nFor display only: the sender chooses this name freely, so\nidentify the sender by `from_email`, never by this name.\n"
|
|
24401
24482
|
}
|
|
24402
24483
|
},
|
|
24403
24484
|
"required": [
|
|
@@ -33074,6 +33155,50 @@ const operationManifest = [
|
|
|
33074
33155
|
"type": "boolean",
|
|
33075
33156
|
"description": "True when the response replays a previously-recorded send\nkeyed by `client_idempotency_key` (same key, same canonical\npayload). False on a fresh send and on gate-denied\nresponses. Lets callers branch on cache state without\ndiffing fields.\n"
|
|
33076
33157
|
},
|
|
33158
|
+
"dedup_reason": {
|
|
33159
|
+
"type": ["string", "null"],
|
|
33160
|
+
"description": "Why the response was a replay; null or absent on a fresh\nsend. `content_hash_match`: the idempotency key matched an\nearlier send. `parent_already_replied`: a reply sent without\nan `Idempotency-Key` header was matched to the reply its\nparent email already has. Pass an `Idempotency-Key` to send\nanother reply to the same email.\n"
|
|
33161
|
+
},
|
|
33162
|
+
"idempotency": {
|
|
33163
|
+
"type": "object",
|
|
33164
|
+
"description": "Present only when the request was answered with an existing send\ninstead of making a new one (`idempotent_replay: true`). Nothing\nwas sent for this request. Says how the idempotency key was\nderived and which send the request collapsed onto. On the replay\nof a stored failure the same object is under `error.details`.\n",
|
|
33165
|
+
"properties": {
|
|
33166
|
+
"replayed": {
|
|
33167
|
+
"type": "boolean",
|
|
33168
|
+
"description": "Always `true`. The object is absent on a request that made a send of its own."
|
|
33169
|
+
},
|
|
33170
|
+
"key_source": {
|
|
33171
|
+
"type": "string",
|
|
33172
|
+
"enum": [
|
|
33173
|
+
"explicit",
|
|
33174
|
+
"auto_content",
|
|
33175
|
+
"function_trigger"
|
|
33176
|
+
],
|
|
33177
|
+
"description": "`explicit`: the request carried an `Idempotency-Key` header.\n`auto_content`: no header was sent, so the key was derived\nfrom the canonical request content (recipients included) and\na fixed 5-minute window; an identical send inside the same\nwindow was not sent again. `function_trigger`: no header on a\nsend made by a Function, so the key was derived from the\ncontent, the Function and the inbound email (or event) that\ninvoked it.\n"
|
|
33178
|
+
},
|
|
33179
|
+
"original_sent_email_id": {
|
|
33180
|
+
"type": "string",
|
|
33181
|
+
"format": "uuid",
|
|
33182
|
+
"description": "The send this request collapsed onto. Same value as `id`."
|
|
33183
|
+
},
|
|
33184
|
+
"original_created_at": {
|
|
33185
|
+
"type": ["string", "null"],
|
|
33186
|
+
"format": "date-time",
|
|
33187
|
+
"description": "When that send was created."
|
|
33188
|
+
},
|
|
33189
|
+
"window_seconds": {
|
|
33190
|
+
"type": ["integer", "null"],
|
|
33191
|
+
"description": "Length of the content window (300) when an `auto_content`\nkey matched on content. Null for `explicit` and\n`function_trigger` keys, which have no window, and for a\nkeyless reply matched because its parent already has a reply\n(`dedup_reason: parent_already_replied`).\n"
|
|
33192
|
+
}
|
|
33193
|
+
},
|
|
33194
|
+
"required": [
|
|
33195
|
+
"replayed",
|
|
33196
|
+
"key_source",
|
|
33197
|
+
"original_sent_email_id",
|
|
33198
|
+
"original_created_at",
|
|
33199
|
+
"window_seconds"
|
|
33200
|
+
]
|
|
33201
|
+
},
|
|
33077
33202
|
"scheduled_at": {
|
|
33078
33203
|
"type": "string",
|
|
33079
33204
|
"format": "date-time",
|
|
@@ -33847,6 +33972,50 @@ const operationManifest = [
|
|
|
33847
33972
|
"type": "boolean",
|
|
33848
33973
|
"description": "True when the response replays a previously-recorded send\nkeyed by `client_idempotency_key` (same key, same canonical\npayload). False on a fresh send and on gate-denied\nresponses. Lets callers branch on cache state without\ndiffing fields.\n"
|
|
33849
33974
|
},
|
|
33975
|
+
"dedup_reason": {
|
|
33976
|
+
"type": ["string", "null"],
|
|
33977
|
+
"description": "Why the response was a replay; null or absent on a fresh\nsend. `content_hash_match`: the idempotency key matched an\nearlier send. `parent_already_replied`: a reply sent without\nan `Idempotency-Key` header was matched to the reply its\nparent email already has. Pass an `Idempotency-Key` to send\nanother reply to the same email.\n"
|
|
33978
|
+
},
|
|
33979
|
+
"idempotency": {
|
|
33980
|
+
"type": "object",
|
|
33981
|
+
"description": "Present only when the request was answered with an existing send\ninstead of making a new one (`idempotent_replay: true`). Nothing\nwas sent for this request. Says how the idempotency key was\nderived and which send the request collapsed onto. On the replay\nof a stored failure the same object is under `error.details`.\n",
|
|
33982
|
+
"properties": {
|
|
33983
|
+
"replayed": {
|
|
33984
|
+
"type": "boolean",
|
|
33985
|
+
"description": "Always `true`. The object is absent on a request that made a send of its own."
|
|
33986
|
+
},
|
|
33987
|
+
"key_source": {
|
|
33988
|
+
"type": "string",
|
|
33989
|
+
"enum": [
|
|
33990
|
+
"explicit",
|
|
33991
|
+
"auto_content",
|
|
33992
|
+
"function_trigger"
|
|
33993
|
+
],
|
|
33994
|
+
"description": "`explicit`: the request carried an `Idempotency-Key` header.\n`auto_content`: no header was sent, so the key was derived\nfrom the canonical request content (recipients included) and\na fixed 5-minute window; an identical send inside the same\nwindow was not sent again. `function_trigger`: no header on a\nsend made by a Function, so the key was derived from the\ncontent, the Function and the inbound email (or event) that\ninvoked it.\n"
|
|
33995
|
+
},
|
|
33996
|
+
"original_sent_email_id": {
|
|
33997
|
+
"type": "string",
|
|
33998
|
+
"format": "uuid",
|
|
33999
|
+
"description": "The send this request collapsed onto. Same value as `id`."
|
|
34000
|
+
},
|
|
34001
|
+
"original_created_at": {
|
|
34002
|
+
"type": ["string", "null"],
|
|
34003
|
+
"format": "date-time",
|
|
34004
|
+
"description": "When that send was created."
|
|
34005
|
+
},
|
|
34006
|
+
"window_seconds": {
|
|
34007
|
+
"type": ["integer", "null"],
|
|
34008
|
+
"description": "Length of the content window (300) when an `auto_content`\nkey matched on content. Null for `explicit` and\n`function_trigger` keys, which have no window, and for a\nkeyless reply matched because its parent already has a reply\n(`dedup_reason: parent_already_replied`).\n"
|
|
34009
|
+
}
|
|
34010
|
+
},
|
|
34011
|
+
"required": [
|
|
34012
|
+
"replayed",
|
|
34013
|
+
"key_source",
|
|
34014
|
+
"original_sent_email_id",
|
|
34015
|
+
"original_created_at",
|
|
34016
|
+
"window_seconds"
|
|
34017
|
+
]
|
|
34018
|
+
},
|
|
33850
34019
|
"scheduled_at": {
|
|
33851
34020
|
"type": "string",
|
|
33852
34021
|
"format": "date-time",
|
|
@@ -39641,6 +39810,10 @@ function chatFailureText(message) {
|
|
|
39641
39810
|
function chatHeading(text) {
|
|
39642
39811
|
return chatColor("bold", text);
|
|
39643
39812
|
}
|
|
39813
|
+
const CHAT_REPLAY_NOTICE = {
|
|
39814
|
+
keyOrigin: "cli_derived",
|
|
39815
|
+
advise: false
|
|
39816
|
+
};
|
|
39644
39817
|
function chatNoticeText(message) {
|
|
39645
39818
|
return chatColor("yellow", message);
|
|
39646
39819
|
}
|
|
@@ -39940,7 +40113,7 @@ function chatNoun(context) {
|
|
|
39940
40113
|
return context.parentReply === void 0 ? "Message" : "Reply";
|
|
39941
40114
|
}
|
|
39942
40115
|
function formatChatRepliedMessage(context, outcome) {
|
|
39943
|
-
if (outcome === "already_sent") return `${formatAlreadySentNotice(context.sent)} Its existing reply from ${context.reply.from_email} is shown.`;
|
|
40116
|
+
if (outcome === "already_sent") return `${formatAlreadySentNotice(context.sent, CHAT_REPLAY_NOTICE)} Its existing reply from ${context.reply.from_email} is shown.`;
|
|
39944
40117
|
return `${chatNoun(context)} sent (id ${context.sent.id}) and a reply arrived from ${context.reply.from_email}.`;
|
|
39945
40118
|
}
|
|
39946
40119
|
function buildChatJsonEnvelope(context, outcome = "replied") {
|
|
@@ -40004,7 +40177,7 @@ function formatChatAwaitingReplyMessage(context, options) {
|
|
|
40004
40177
|
const [next] = buildChatExistingReplyCommands(context, options.existingReplyId);
|
|
40005
40178
|
const status = options.waitError === void 0 ? "No reply to it yet." : `Loading its reply failed: ${options.waitError}.`;
|
|
40006
40179
|
const action = next.kind === "inspect_reply" ? "read the reply with" : next.kind === "inspect_inbox" ? "inspect the inbox with" : "wait with";
|
|
40007
|
-
return `${formatAlreadySentNotice(context.sent)} ${status} Do NOT resend; ${action}: ${next.command}`;
|
|
40180
|
+
return `${formatAlreadySentNotice(context.sent, CHAT_REPLAY_NOTICE)} ${status} Do NOT resend; ${action}: ${next.command}`;
|
|
40008
40181
|
}
|
|
40009
40182
|
const [wait] = buildChatRecoveryCommands(context);
|
|
40010
40183
|
const status = options.waitError === void 0 ? `No reply yet after ${context.timeoutSeconds}s.` : `Waiting for the reply failed: ${options.waitError}`;
|
|
@@ -40807,7 +40980,7 @@ var ChatCommand = class ChatCommand extends Command {
|
|
|
40807
40980
|
await connectedWait?.bind(sent.id);
|
|
40808
40981
|
if (flags.async) {
|
|
40809
40982
|
const outcome = sent.idempotent_replay ? "already_sent" : "sent";
|
|
40810
|
-
const message = sent.idempotent_replay ? `${formatAlreadySentNotice(sent)} This conversation remains bound to this session; inspect it if the answer may have arrived already.` : `${chatNoun(baseContext)} sent (id ${sent.id}). This conversation is bound to this session for status and later replies. Keep its configured receiver active.`;
|
|
40983
|
+
const message = sent.idempotent_replay ? `${formatAlreadySentNotice(sent, CHAT_REPLAY_NOTICE)} This conversation remains bound to this session; inspect it if the answer may have arrived already.` : `${chatNoun(baseContext)} sent (id ${sent.id}). This conversation is bound to this session for status and later replies. Keep its configured receiver active.`;
|
|
40811
40984
|
const result = {
|
|
40812
40985
|
outcome,
|
|
40813
40986
|
exit_code: sendOutcomeExitCode(outcome),
|
|
@@ -41006,7 +41179,7 @@ var ChatCommand = class ChatCommand extends Command {
|
|
|
41006
41179
|
}
|
|
41007
41180
|
reportReplied(context, outcome) {
|
|
41008
41181
|
this.chatProgress.outcomeReported = true;
|
|
41009
|
-
if (outcome === "already_sent") process.stderr.write(`${chatNoticeText(formatAlreadySentNotice(context.sent))}\n`);
|
|
41182
|
+
if (outcome === "already_sent") process.stderr.write(`${chatNoticeText(formatAlreadySentNotice(context.sent, CHAT_REPLAY_NOTICE))}\n`);
|
|
41010
41183
|
if (context.json) this.log(JSON.stringify(buildChatJsonEnvelope(context, outcome), null, 2));
|
|
41011
41184
|
else this.log(formatChatResponse(context));
|
|
41012
41185
|
}
|
|
@@ -44755,7 +44928,7 @@ const PRIMITIVE_TEAM_AUTHOR = {
|
|
|
44755
44928
|
url: "https://primitive.dev"
|
|
44756
44929
|
};
|
|
44757
44930
|
const SDK_VERSION_RANGE = "^2.0.0";
|
|
44758
|
-
const CLI_VERSION_RANGE = "^1.
|
|
44931
|
+
const CLI_VERSION_RANGE = "^1.66.0";
|
|
44759
44932
|
const ESBUILD_VERSION_RANGE = "^0.27.0";
|
|
44760
44933
|
function renderHandler() {
|
|
44761
44934
|
return `// env.PRIMITIVE_API_KEY, env.PRIMITIVE_WEBHOOK_SECRET, and
|
|
@@ -55141,9 +55314,12 @@ var PaymentsPayEmailCommand = class PaymentsPayEmailCommand extends Command {
|
|
|
55141
55314
|
}
|
|
55142
55315
|
const sent = result.data?.data ?? null;
|
|
55143
55316
|
const replayed = sent?.idempotent_replay === true;
|
|
55144
|
-
if (replayed) writeIdempotentReplayBannerIfReplay(sent, {
|
|
55145
|
-
|
|
55146
|
-
|
|
55317
|
+
if (replayed) writeIdempotentReplayBannerIfReplay(sent, {
|
|
55318
|
+
advise: false,
|
|
55319
|
+
write: (chunk) => {
|
|
55320
|
+
process.stderr.write(chunk);
|
|
55321
|
+
}
|
|
55322
|
+
});
|
|
55147
55323
|
let settlement = null;
|
|
55148
55324
|
if (flags["wait-settle"] && !replayed && payeeTo) {
|
|
55149
55325
|
process.stderr.write("Payment sent. Waiting for the x402 settlement interaction email (settlement is async)...\n");
|
|
@@ -56018,6 +56194,7 @@ var ReplyCommand = class ReplyCommand extends Command {
|
|
|
56018
56194
|
const outcome = reportSendCommandResult({
|
|
56019
56195
|
attemptStartedAtIso,
|
|
56020
56196
|
idempotencyKey,
|
|
56197
|
+
idempotencyKeyOrigin: flags["idempotency-key"] === void 0 ? "cli_derived" : "caller",
|
|
56021
56198
|
extraEnvelopeFields: {
|
|
56022
56199
|
...priorRepliesEnvelopeFields(priorRepliesCheck),
|
|
56023
56200
|
...replyTargetEnvelopeFields(flags, this.replyTarget),
|
|
@@ -57144,6 +57321,7 @@ var SendCommand = class SendCommand extends Command {
|
|
|
57144
57321
|
attemptStartedAtIso,
|
|
57145
57322
|
...this.waitNotice ? { extraEnvelopeFields: { wait_notice: this.waitNotice } } : {},
|
|
57146
57323
|
idempotencyKey,
|
|
57324
|
+
idempotencyKeyOrigin: flags["idempotency-key"] === void 0 ? "cli_derived" : "caller",
|
|
57147
57325
|
json: flags.json,
|
|
57148
57326
|
log: (line) => this.log(line),
|
|
57149
57327
|
noun: "Message",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { N as agentProfileDirectory, P as agentProfileName, R as loadConnectedAgentProfile, j as AGENT_PROFILE_ENV } from "../cli-config-DMszFbGn.js";
|
|
2
2
|
import { d as readMailJson } from "../shared-mail-files-MwlVE90c.js";
|
|
3
|
-
import { _ as detectAgentRuntime, l as SESSION_UUID, t as notificationScope } from "../notify-session-
|
|
3
|
+
import { _ as detectAgentRuntime, l as SESSION_UUID, t as notificationScope } from "../notify-session-CaG0vpjw.js";
|
|
4
4
|
import { a as claimBackgroundListenRestart, n as backgroundListenRestartable, r as backgroundListenStatus } from "../listen-background--0peztKE.js";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
30
|
enumerable: true
|
|
31
31
|
}) : target, mod));
|
|
32
32
|
//#endregion
|
|
33
|
-
//#region ../node_modules/.pnpm/nodemailer@10.0
|
|
33
|
+
//#region ../node_modules/.pnpm/nodemailer@10.1.0/node_modules/nodemailer/dist/esm/addressparser/index.js
|
|
34
34
|
/**
|
|
35
35
|
* Restores the quoting of a local part that was read out of a quoted string.
|
|
36
36
|
*
|
|
@@ -504,7 +504,11 @@ var Tokenizer = class {
|
|
|
504
504
|
this.operatorExpecting = this.operators[chr];
|
|
505
505
|
this.escaped = false;
|
|
506
506
|
return;
|
|
507
|
-
} else if ([
|
|
507
|
+
} else if ([
|
|
508
|
+
"\"",
|
|
509
|
+
"'",
|
|
510
|
+
")"
|
|
511
|
+
].includes(this.operatorExpecting) && chr === "\\") {
|
|
508
512
|
this.escaped = true;
|
|
509
513
|
return;
|
|
510
514
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as classifySignalContent, y as isTrustedSender } from "./repeats-BL7ZC-_6-
|
|
1
|
+
import { c as classifySignalContent, y as isTrustedSender } from "./repeats-BL7ZC-_6-O_YE1_cO.js";
|
|
2
2
|
//#region src/oclif/presence-provenance.ts
|
|
3
3
|
function readPresenceProjection(detail) {
|
|
4
4
|
if (!detail || typeof detail !== "object") return null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { h as sendPreparedSignal, p as prepareSignalEmail } from "./repeats-BL7ZC-_6-
|
|
2
|
-
import { T as bareAddress, Vn as listSentEmails, ar as sendEmail, bt as successfulSendOutcome, en as createEndpoint, it as classifySendError, o as extractErrorPayload, vn as getEmail } from "./api-command-
|
|
1
|
+
import { h as sendPreparedSignal, p as prepareSignalEmail } from "./repeats-BL7ZC-_6-O_YE1_cO.js";
|
|
2
|
+
import { T as bareAddress, Vn as listSentEmails, ar as sendEmail, bt as successfulSendOutcome, en as createEndpoint, it as classifySendError, o as extractErrorPayload, vn as getEmail } from "./api-command-T189Vupo.js";
|
|
3
3
|
import { _ as acquireListenLock, b as listenProcessIdentity, c as mailTime, d as readMailJson, f as removeMailFile, h as writeMailJson, i as mailId, l as privateMailDirectory, m as withMailLock, n as invalidSharedMail, o as mailObject, p as syncMailDirectory, r as mailAddress, s as mailString, t as SharedMailStateError, v as compareListenProcessIdentity, y as listenIdentity } from "./shared-mail-files-MwlVE90c.js";
|
|
4
|
-
import { a as scopedChatSenderTrust, i as readBeforeDeadline, n as isPlainChatReply } from "./scoped-chat-
|
|
4
|
+
import { a as scopedChatSenderTrust, i as readBeforeDeadline, n as isPlainChatReply } from "./scoped-chat-DKpjp27r.js";
|
|
5
5
|
import { n as tryOwnSharedMail, r as waitForSharedMailChange, t as readSharedMailOwner } from "./shared-mail-watch-DtKpsgg8.js";
|
|
6
6
|
import { recordSentSignal } from "./oclif/auto-signals.js";
|
|
7
7
|
import { Errors } from "@oclif/core";
|
|
@@ -9,7 +9,7 @@ import { opendirSync } from "node:fs";
|
|
|
9
9
|
import { createHash, randomUUID, scryptSync } from "node:crypto";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
import { setTimeout as setTimeout$1 } from "node:timers/promises";
|
|
12
|
-
//#region ../sdk-node/dist/api-
|
|
12
|
+
//#region ../sdk-node/dist/api-UuhZ15CF.js
|
|
13
13
|
const jsonBodySerializer = { bodySerializer: (body) => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value) };
|
|
14
14
|
function createSseClient({ onRequest, onSseError, onSseEvent, responseTransformer, responseValidator, sseDefaultRetryDelay, sseMaxRetryAttempts, sseMaxRetryDelay, sseSleepFn, url, ...options }) {
|
|
15
15
|
let lastEventId;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "primcli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.66.0",
|
|
4
4
|
"description": "Official Primitive CLI: deploy Primitive Functions, send and inspect mail, manage endpoints, all from the terminal. Wraps the @primitivedotdev/sdk runtime client with one-shot commands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -189,8 +189,8 @@
|
|
|
189
189
|
"node": ">=22"
|
|
190
190
|
},
|
|
191
191
|
"dependencies": {
|
|
192
|
-
"@oclif/core": "^5.1.
|
|
193
|
-
"@oclif/plugin-autocomplete": "^4.0.
|
|
192
|
+
"@oclif/core": "^5.1.7",
|
|
193
|
+
"@oclif/plugin-autocomplete": "^4.0.4",
|
|
194
194
|
"@oclif/plugin-help": "^7.0.2",
|
|
195
195
|
"@oclif/plugin-warn-if-update-available": "^4.0.1",
|
|
196
196
|
"viem": "^2.57.2",
|
|
@@ -203,11 +203,11 @@
|
|
|
203
203
|
"@types/node": "^26.6.4",
|
|
204
204
|
"@types/ws": "^8.18.2",
|
|
205
205
|
"@vitest/coverage-v8": "^5.0.3",
|
|
206
|
-
"oclif": "^6.0.
|
|
206
|
+
"oclif": "^6.0.3",
|
|
207
207
|
"tsdown": "^0.23.0",
|
|
208
208
|
"tsx": "4.23.14",
|
|
209
209
|
"typescript": "^5.7.2",
|
|
210
|
-
"vite": "^8.3.
|
|
210
|
+
"vite": "^8.3.4",
|
|
211
211
|
"vitest": "^5.0.3"
|
|
212
212
|
}
|
|
213
213
|
}
|