@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.
Files changed (2) hide show
  1. package/dist/index.js +166 -8
  2. 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.134",
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 SetupGuideReplyResponse = external_exports.object({
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: external_exports.array(InterviewTurn).max(40),
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
- }).strict();
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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zixt/host",
3
- "version": "0.0.134",
3
+ "version": "0.0.136",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./src/client.ts",