@zixt/host 0.0.134 → 0.0.136
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/index.js +166 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import { homedir as homedir4 } from "node:os";
|
|
|
28
28
|
// package.json
|
|
29
29
|
var package_default = {
|
|
30
30
|
name: "@zixt/host",
|
|
31
|
-
version: "0.0.
|
|
31
|
+
version: "0.0.136",
|
|
32
32
|
type: "module",
|
|
33
33
|
exports: {
|
|
34
34
|
".": "./src/client.ts",
|
|
@@ -14700,6 +14700,10 @@ var ID_PREFIXES = {
|
|
|
14700
14700
|
voiceTurn: "vtr",
|
|
14701
14701
|
/** One signed voice-provider webhook receipt. */
|
|
14702
14702
|
voiceWebhookEvent: "vwe",
|
|
14703
|
+
/** One live browser microphone session with the Zixt Guide (UI-16). */
|
|
14704
|
+
guideVoiceSession: "gvs",
|
|
14705
|
+
/** One Guide reply authorized to be spoken on that session. */
|
|
14706
|
+
guideVoiceSpeech: "gvt",
|
|
14703
14707
|
/** Org-singleton Company setup record (PRD OB-5). */
|
|
14704
14708
|
companySetup: "cst",
|
|
14705
14709
|
/** One durable set of teammate-proposed Automations awaiting an Admin (OB-12). */
|
|
@@ -14780,6 +14784,11 @@ var VoiceLineId = idSchema(ID_PREFIXES.voiceLine, "voice line id");
|
|
|
14780
14784
|
var VoiceCallerId = idSchema(ID_PREFIXES.voiceCaller, "voice caller id");
|
|
14781
14785
|
var VoiceCallId = idSchema(ID_PREFIXES.voiceCall, "voice call id");
|
|
14782
14786
|
var VoiceTurnId = idSchema(ID_PREFIXES.voiceTurn, "voice turn id");
|
|
14787
|
+
var GuideVoiceSessionId = idSchema(
|
|
14788
|
+
ID_PREFIXES.guideVoiceSession,
|
|
14789
|
+
"Guide voice session id"
|
|
14790
|
+
);
|
|
14791
|
+
var GuideVoiceSpeechId = idSchema(ID_PREFIXES.guideVoiceSpeech, "Guide speech id");
|
|
14783
14792
|
var VoiceWebhookEventId = idSchema(
|
|
14784
14793
|
ID_PREFIXES.voiceWebhookEvent,
|
|
14785
14794
|
"voice webhook event id"
|
|
@@ -19659,6 +19668,19 @@ var TestWebhookDeliveryRequest = external_exports.object({
|
|
|
19659
19668
|
// ../../packages/contracts/src/manager.ts
|
|
19660
19669
|
var MANAGER_DEFAULT_MODEL = "gpt-5.6-luna";
|
|
19661
19670
|
var MANAGER_DEFAULT_PORTRAIT = 23;
|
|
19671
|
+
var ManagerVoiceName = external_exports.enum([
|
|
19672
|
+
"marin",
|
|
19673
|
+
"cedar",
|
|
19674
|
+
"alloy",
|
|
19675
|
+
"ash",
|
|
19676
|
+
"ballad",
|
|
19677
|
+
"coral",
|
|
19678
|
+
"echo",
|
|
19679
|
+
"sage",
|
|
19680
|
+
"shimmer",
|
|
19681
|
+
"verse"
|
|
19682
|
+
]);
|
|
19683
|
+
var MANAGER_DEFAULT_VOICE = "marin";
|
|
19662
19684
|
var MANAGER_DISPLAY_NAME_MAX = 60;
|
|
19663
19685
|
var MANAGER_INSTRUCTIONS_MAX = 2e4;
|
|
19664
19686
|
var CONVERSATION_MESSAGE_MAX = 1e5;
|
|
@@ -19694,6 +19716,11 @@ var ManagerConfigProjection = external_exports.object({
|
|
|
19694
19716
|
* never rejected by a server that has not shipped the newer artwork yet.
|
|
19695
19717
|
*/
|
|
19696
19718
|
portrait: external_exports.number().int().min(0).max(63).default(MANAGER_DEFAULT_PORTRAIT),
|
|
19719
|
+
/**
|
|
19720
|
+
* The voice every spoken Zixt surface renders in for this organization.
|
|
19721
|
+
* Older rows carry none and read as MANAGER_DEFAULT_VOICE.
|
|
19722
|
+
*/
|
|
19723
|
+
voice: ManagerVoiceName.default(MANAGER_DEFAULT_VOICE),
|
|
19697
19724
|
revision: external_exports.number().int().min(0),
|
|
19698
19725
|
updatedAt: external_exports.string().nullable()
|
|
19699
19726
|
}).strict();
|
|
@@ -19709,10 +19736,11 @@ var UpdateManagerRequest = external_exports.object({
|
|
|
19709
19736
|
answerDirectMessages: external_exports.boolean().optional()
|
|
19710
19737
|
}).strict().optional(),
|
|
19711
19738
|
portrait: external_exports.number().int().min(0).max(63).optional(),
|
|
19739
|
+
voice: ManagerVoiceName.optional(),
|
|
19712
19740
|
/** Optimistic concurrency: refuse when another admin saved first. */
|
|
19713
19741
|
expectedRevision: external_exports.number().int().min(0).optional()
|
|
19714
19742
|
}).strict().superRefine((value, ctx) => {
|
|
19715
|
-
if (value.displayName === void 0 && value.instructions === void 0 && value.model === void 0 && value.reasoningEffort === void 0 && value.slack === void 0 && value.portrait === void 0) {
|
|
19743
|
+
if (value.displayName === void 0 && value.instructions === void 0 && value.model === void 0 && value.reasoningEffort === void 0 && value.slack === void 0 && value.portrait === void 0 && value.voice === void 0) {
|
|
19716
19744
|
ctx.addIssue({ code: "custom", message: "nothing to update" });
|
|
19717
19745
|
}
|
|
19718
19746
|
});
|
|
@@ -22184,7 +22212,13 @@ var SetupGuideReplyRequest = external_exports.object({
|
|
|
22184
22212
|
onboarding: SetupGuideOnboardingState,
|
|
22185
22213
|
actions: external_exports.array(SetupGuideAvailableAction).max(128),
|
|
22186
22214
|
toolResults: external_exports.array(SetupGuideToolResult).max(12).default([]),
|
|
22187
|
-
mission: SetupGuideMission.nullable().optional()
|
|
22215
|
+
mission: SetupGuideMission.nullable().optional(),
|
|
22216
|
+
/**
|
|
22217
|
+
* The live Guide voice session this turn was spoken into. It only authorizes
|
|
22218
|
+
* the resulting reply to be spoken on that same session; it never changes
|
|
22219
|
+
* what the Guide may read, propose, or execute.
|
|
22220
|
+
*/
|
|
22221
|
+
voiceSessionId: GuideVoiceSessionId.optional()
|
|
22188
22222
|
});
|
|
22189
22223
|
var SetupGuideProposedAction = external_exports.object({
|
|
22190
22224
|
actionId: external_exports.string().regex(/^[a-z][a-z0-9_.-]{0,79}$/),
|
|
@@ -22195,11 +22229,21 @@ var SetupGuideProposedAction = external_exports.object({
|
|
|
22195
22229
|
*/
|
|
22196
22230
|
parameters: external_exports.array(SetupGuideActionParameter).max(12)
|
|
22197
22231
|
});
|
|
22198
|
-
var
|
|
22232
|
+
var SetupGuideAnswer = external_exports.object({
|
|
22199
22233
|
message: GuideText,
|
|
22200
22234
|
/** One tool at a time keeps UI execution and its result causally ordered. */
|
|
22201
22235
|
proposedActions: external_exports.array(SetupGuideProposedAction).max(1)
|
|
22202
22236
|
});
|
|
22237
|
+
var SetupGuideReplyResponse = SetupGuideAnswer.extend({
|
|
22238
|
+
/**
|
|
22239
|
+
* Identity this exact committed reply may be spoken under, present only when
|
|
22240
|
+
* the request named a live voice session. The browser runs a bounded action
|
|
22241
|
+
* loop, so only it knows which reply in that loop is the person's answer;
|
|
22242
|
+
* this id is how it says "speak that one" without ever sending prose back for
|
|
22243
|
+
* the cloud to read aloud.
|
|
22244
|
+
*/
|
|
22245
|
+
speech: external_exports.object({ id: GuideVoiceSpeechId }).strict().nullable().default(null)
|
|
22246
|
+
});
|
|
22203
22247
|
var SetupGuideTranscriptionRequest = external_exports.object({
|
|
22204
22248
|
mediaType: external_exports.enum(["audio/webm", "audio/mp4", "audio/ogg"]),
|
|
22205
22249
|
/** Bounded short-lived audio. The route decodes it in memory and never stores it. */
|
|
@@ -22208,6 +22252,52 @@ var SetupGuideTranscriptionRequest = external_exports.object({
|
|
|
22208
22252
|
var SetupGuideTranscriptionResponse = external_exports.object({
|
|
22209
22253
|
text: GuideText
|
|
22210
22254
|
});
|
|
22255
|
+
var StartGuideVoiceSessionRequest = external_exports.object({
|
|
22256
|
+
/** Stable client fence; an ambiguous provider create is never resubmitted under it. */
|
|
22257
|
+
requestId: external_exports.uuid(),
|
|
22258
|
+
offerSdp: BrowserVoiceSessionDescription
|
|
22259
|
+
}).strict();
|
|
22260
|
+
var GuideVoiceSessionStatus = external_exports.enum([
|
|
22261
|
+
"connecting",
|
|
22262
|
+
"connected",
|
|
22263
|
+
"ending",
|
|
22264
|
+
"ended",
|
|
22265
|
+
"failed"
|
|
22266
|
+
]);
|
|
22267
|
+
var GuideVoiceSessionProjection = external_exports.object({
|
|
22268
|
+
id: GuideVoiceSessionId,
|
|
22269
|
+
status: GuideVoiceSessionStatus,
|
|
22270
|
+
startedAt: IsoDate2,
|
|
22271
|
+
expiresAt: IsoDate2
|
|
22272
|
+
}).strict();
|
|
22273
|
+
var StartGuideVoiceSessionResponse = external_exports.object({
|
|
22274
|
+
session: GuideVoiceSessionProjection,
|
|
22275
|
+
/** Applied directly to the browser peer connection and never persisted by Zixt. */
|
|
22276
|
+
answerSdp: BrowserVoiceSessionDescription
|
|
22277
|
+
}).strict();
|
|
22278
|
+
var AckGuideVoiceSessionResponse = external_exports.object({ session: GuideVoiceSessionProjection }).strict();
|
|
22279
|
+
var EndGuideVoiceSessionResponse = external_exports.object({ ended: external_exports.literal(true) }).strict();
|
|
22280
|
+
var GuideVoiceCaption = external_exports.string().max(4e3);
|
|
22281
|
+
var GuideVoicePresentationFrame = external_exports.discriminatedUnion("type", [
|
|
22282
|
+
external_exports.object({ type: external_exports.literal("listening_started") }).strict(),
|
|
22283
|
+
external_exports.object({ type: external_exports.literal("listening_stopped") }).strict(),
|
|
22284
|
+
external_exports.object({ type: external_exports.literal("user_caption"), text: GuideVoiceCaption, final: external_exports.boolean() }).strict(),
|
|
22285
|
+
external_exports.object({
|
|
22286
|
+
type: external_exports.literal("guide_speech_started"),
|
|
22287
|
+
speechId: GuideVoiceSpeechId,
|
|
22288
|
+
text: GuideVoiceCaption
|
|
22289
|
+
}).strict(),
|
|
22290
|
+
external_exports.object({ type: external_exports.literal("guide_speech_stopped"), speechId: GuideVoiceSpeechId }).strict(),
|
|
22291
|
+
external_exports.object({ type: external_exports.literal("guide_speech_failed"), speechId: GuideVoiceSpeechId }).strict(),
|
|
22292
|
+
external_exports.object({ type: external_exports.literal("guide_speech_idle") }).strict(),
|
|
22293
|
+
external_exports.object({ type: external_exports.literal("transcription_failed") }).strict(),
|
|
22294
|
+
external_exports.object({ type: external_exports.literal("session_ended") }).strict(),
|
|
22295
|
+
external_exports.object({ type: external_exports.literal("session_failed") }).strict()
|
|
22296
|
+
]);
|
|
22297
|
+
var SpeakGuideVoiceReplyRequest = external_exports.object({ speechId: GuideVoiceSpeechId }).strict();
|
|
22298
|
+
var SpeakGuideVoiceReplyResponse = external_exports.object({ speaking: external_exports.boolean() }).strict();
|
|
22299
|
+
var InterruptGuideVoiceSessionRequest = external_exports.object({ speechId: GuideVoiceSpeechId }).strict();
|
|
22300
|
+
var InterruptGuideVoiceSessionResponse = external_exports.object({ interrupted: external_exports.boolean() }).strict();
|
|
22211
22301
|
|
|
22212
22302
|
// ../../packages/contracts/src/roles.ts
|
|
22213
22303
|
var CompanyToolKind = external_exports.enum([
|
|
@@ -22261,10 +22351,34 @@ var InterviewTurn = InterviewQuestion.extend({
|
|
|
22261
22351
|
/** Tailored options fetched by "Not sure, suggest for me"; the person picks, edits, then continues. */
|
|
22262
22352
|
suggestions: external_exports.array(external_exports.string().trim().min(1).max(200)).max(8).default([]),
|
|
22263
22353
|
/** The answer here was passed to the Zixt team as product feedback (MG-23); the transcript says so. */
|
|
22264
|
-
feedbackNoted: external_exports.boolean().default(false)
|
|
22354
|
+
feedbackNoted: external_exports.boolean().default(false),
|
|
22355
|
+
/**
|
|
22356
|
+
* A correction of an earlier round's answer to the same question (OB-13). It
|
|
22357
|
+
* is not a new question: the round's question budget ignores it and the
|
|
22358
|
+
* rendered transcript shows a one-line note instead of re-asking.
|
|
22359
|
+
*/
|
|
22360
|
+
restates: external_exports.object({ id: Key, round: external_exports.number().int().min(1) }).nullable().default(null)
|
|
22265
22361
|
});
|
|
22362
|
+
var InterviewSubject = external_exports.enum([
|
|
22363
|
+
"business",
|
|
22364
|
+
"channels",
|
|
22365
|
+
"tools",
|
|
22366
|
+
"handoff",
|
|
22367
|
+
"watch",
|
|
22368
|
+
"human_gate",
|
|
22369
|
+
"team",
|
|
22370
|
+
"computer",
|
|
22371
|
+
"purpose",
|
|
22372
|
+
"personal_goals",
|
|
22373
|
+
/** A model-generated or legacy question. Never enters the recap, never settles a subject. */
|
|
22374
|
+
"other"
|
|
22375
|
+
]);
|
|
22376
|
+
var INTERVIEW_SUBJECTS = InterviewSubject.options.filter(
|
|
22377
|
+
(subject) => subject !== "other"
|
|
22378
|
+
);
|
|
22266
22379
|
var CompanySetupInterview = external_exports.object({
|
|
22267
|
-
turns
|
|
22380
|
+
/** Check-in rounds accumulate turns, and a correction appends one more. */
|
|
22381
|
+
turns: external_exports.array(InterviewTurn).max(120),
|
|
22268
22382
|
/** Increments each time the interview is re-run for an additive re-plan. */
|
|
22269
22383
|
round: external_exports.number().int().min(1),
|
|
22270
22384
|
complete: external_exports.boolean(),
|
|
@@ -22453,6 +22567,34 @@ var CompanySetupApproval = external_exports.object({
|
|
|
22453
22567
|
by: MemberId.nullable(),
|
|
22454
22568
|
createdAgentIds: external_exports.array(AgentId)
|
|
22455
22569
|
});
|
|
22570
|
+
var InterviewFact = external_exports.object({
|
|
22571
|
+
subject: InterviewSubject,
|
|
22572
|
+
label: external_exports.string().trim().min(1).max(60),
|
|
22573
|
+
question: InterviewQuestion,
|
|
22574
|
+
/** Null when the subject was asked but skipped or answered "Not sure, suggest for me". */
|
|
22575
|
+
value: external_exports.string().trim().min(1).max(2e3).nullable(),
|
|
22576
|
+
round: external_exports.number().int().min(1),
|
|
22577
|
+
answeredAt: IsoDate.nullable(),
|
|
22578
|
+
/** The answer was corrected in the round now open. */
|
|
22579
|
+
correctedThisRound: external_exports.boolean()
|
|
22580
|
+
});
|
|
22581
|
+
var CheckInTeammate = external_exports.object({
|
|
22582
|
+
agentId: AgentId,
|
|
22583
|
+
name: external_exports.string().trim().min(1).max(120),
|
|
22584
|
+
roleTitle: external_exports.string().trim().min(1).max(80),
|
|
22585
|
+
/** Successful receipts only (done or nothing_to_do); never every terminated attempt. */
|
|
22586
|
+
finishedTasks: external_exports.number().int().min(0),
|
|
22587
|
+
lastFinishedAt: IsoDate.nullable()
|
|
22588
|
+
});
|
|
22589
|
+
var COMPANY_SETUP_MAX_FACTS = 16;
|
|
22590
|
+
var COMPANY_SETUP_MAX_CHECK_IN_TEAM = 12;
|
|
22591
|
+
var COMPANY_SETUP_MAX_CHECK_IN_TOOLS = 8;
|
|
22592
|
+
var CompanySetupCheckIn = external_exports.object({
|
|
22593
|
+
round: external_exports.number().int().min(1),
|
|
22594
|
+
facts: external_exports.array(InterviewFact).max(COMPANY_SETUP_MAX_FACTS),
|
|
22595
|
+
team: external_exports.array(CheckInTeammate).max(COMPANY_SETUP_MAX_CHECK_IN_TEAM),
|
|
22596
|
+
connectedTools: external_exports.array(external_exports.object({ kind: CompanyToolKind, name: external_exports.string().trim().min(1).max(120) })).max(COMPANY_SETUP_MAX_CHECK_IN_TOOLS)
|
|
22597
|
+
});
|
|
22456
22598
|
var CompanySetupView = external_exports.object({
|
|
22457
22599
|
id: CompanySetupId.nullable(),
|
|
22458
22600
|
orgId: OrgId,
|
|
@@ -22461,6 +22603,12 @@ var CompanySetupView = external_exports.object({
|
|
|
22461
22603
|
interview: CompanySetupInterview.nullable(),
|
|
22462
22604
|
/** The next unanswered question, when the interview is open. */
|
|
22463
22605
|
currentQuestion: InterviewTurn.nullable(),
|
|
22606
|
+
/**
|
|
22607
|
+
* The returning-organization check-in (OB-13). Present only for an Admin
|
|
22608
|
+
* whose team already exists and whose interview is open again; null for a
|
|
22609
|
+
* Member, and null on a first run.
|
|
22610
|
+
*/
|
|
22611
|
+
checkIn: CompanySetupCheckIn.nullable(),
|
|
22464
22612
|
plan: CompanySetupPlan.nullable(),
|
|
22465
22613
|
/**
|
|
22466
22614
|
* The plan is being proposed in the background (a planner call can take a
|
|
@@ -22487,8 +22635,18 @@ var CompanySetupView = external_exports.object({
|
|
|
22487
22635
|
});
|
|
22488
22636
|
var AnswerCompanySetupQuestionRequest = external_exports.object({
|
|
22489
22637
|
questionId: Key,
|
|
22490
|
-
answer: InterviewAnswer
|
|
22491
|
-
|
|
22638
|
+
answer: InterviewAnswer,
|
|
22639
|
+
/**
|
|
22640
|
+
* Correct an earlier round's answer to this question (OB-13). The answer
|
|
22641
|
+
* must be text: a correction replaces what was said, so it cannot be a
|
|
22642
|
+
* skip. The pending question is untouched and no question is consumed.
|
|
22643
|
+
*/
|
|
22644
|
+
restatesRound: external_exports.number().int().min(1).optional()
|
|
22645
|
+
}).strict().refine((value) => value.restatesRound === void 0 || value.answer.kind === "text", {
|
|
22646
|
+
message: "a correction must be an answer in your own words",
|
|
22647
|
+
path: ["answer"]
|
|
22648
|
+
});
|
|
22649
|
+
var CloseCompanyCheckInRequest = external_exports.object({}).strict();
|
|
22492
22650
|
var SuggestCompanySetupAnswersRequest = external_exports.object({
|
|
22493
22651
|
questionId: Key
|
|
22494
22652
|
}).strict();
|