@livx.cc/agentx 0.99.113 → 0.99.114

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.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as AgentOptions, H as Hooks, p as RunResult, f as Decider, A as Agent, i as PermissionPolicy, L as LineKind, C as ChannelMode, q as SecondChannelOptions, S as SecondChannel } from './secondChannel-CJMY5EbL.js';
2
- export { b as ChatFragment, c as Classification, d as Classifier, e as CompactResult, D as DEFAULT_MUTATING, g as Decision, M as ModelRouter, h as ModelRouterOptions, P as PermissionOptions, j as PermissionRule, k as PreToolUseDecision, R as ReasoningEffort, l as RecordingHooks, m as RecordingLifecycle, n as RouteDecision, o as RouterState, T as Tier, r as ToolUse, s as ToolUseMeta, t as claudeCodeDisallowedTools, u as composeHooks, v as estimateTokens, w as jevAvailable, x as jevClassifier, y as pickTier, z as planMode, B as reasoningToChatFragment } from './secondChannel-CJMY5EbL.js';
1
+ import { a as AgentOptions, H as Hooks, p as RunResult, f as Decider, A as Agent, i as PermissionPolicy, G as Gender, L as LineKind, C as ChannelMode, q as SecondChannelOptions, S as SecondChannel } from './secondChannel-Cl-fIl-F.js';
2
+ export { b as ChatFragment, c as Classification, d as Classifier, e as CompactResult, D as DEFAULT_MUTATING, g as Decision, M as ModelRouter, h as ModelRouterOptions, P as PermissionOptions, j as PermissionRule, k as PreToolUseDecision, R as ReasoningEffort, l as RecordingHooks, m as RecordingLifecycle, n as RouteDecision, o as RouterState, T as Tier, r as ToolUse, s as ToolUseMeta, t as claudeCodeDisallowedTools, u as composeHooks, v as estimateTokens, w as jevAvailable, x as jevClassifier, y as pickTier, z as planMode, B as reasoningToChatFragment } from './secondChannel-Cl-fIl-F.js';
3
3
  export { MODEL_ALIASES, ModelSwitch, ResolveModelSwitchOpts, latestClaude, modelShortLabel, resolveModelAlias, resolveModelSwitch } from './models.js';
4
4
  import { IFilesystem, FileMetadata } from '@livx.cc/wcli/core';
5
5
  export { CommandExecutor, FileMetadata, IFilesystem, IndexedDbFilesystem, MemFilesystem, registerHeadlessCommands } from '@livx.cc/wcli/core';
@@ -1621,11 +1621,14 @@ declare function makeTaskBatchTool(opts: TaskToolOptions): AgentTool;
1621
1621
  /** Component-scoped logger (libx.js). debug/verbose gated via DEBUG env/localStorage. */
1622
1622
  declare const forComponent: (name: string) => libx_js_src_modules_log.ComponentLogger;
1623
1623
 
1624
- type Topic = 'board' | 'search' | 'web' | 'read' | 'write' | 'run' | 'mail' | 'calendar' | 'memory';
1625
- /** Two phrasings per topic and language (never the same line twice in a call). */
1624
+ type Topic = 'board' | 'websearch' | 'page' | 'browser' | 'search' | 'mail' | 'calendar' | 'memory' | 'write' | 'run' | 'read' | 'delegate';
1625
+ /** Two phrasings per topic and language (never the same line twice in a call). Hebrew is gendered on the speaker:
1626
+ * 'he-f' / 'he-m' follow the voice (ProgressOptions.gender); 'he' (plural present) when the gender is unknown. */
1626
1627
  declare const PROGRESS_TEMPLATES: Record<string, Record<Topic, string[]>>;
1627
1628
  declare class ProgressOptions {
1628
1629
  templates: Record<string, Partial<Record<Topic, string[]>>>;
1630
+ /** The voice's gender: picks the gendered table (`${lang}-f`/`-m`) when one exists. */
1631
+ gender: Gender;
1629
1632
  /** Fast-model fallback for a tool with no template (fastProgressGenerator). Absent → silence. */
1630
1633
  generate?: (tool: string, hint: string, lang: string, signal: AbortSignal) => Promise<string>;
1631
1634
  generateBudgetMs: number;
@@ -1695,6 +1698,8 @@ declare class VoiceCallOptions {
1695
1698
  bankCacheDir?: string;
1696
1699
  /** The host STT's language (BCP-47) — the starting language; each turn's own words still decide. */
1697
1700
  lang?: string;
1701
+ /** The voice's gender: generated fill/progress lines speak of themselves in it (Hebrew templates too). '' = neutral. */
1702
+ gender: Gender;
1698
1703
  aec: boolean;
1699
1704
  mode: ChannelMode;
1700
1705
  gate: Partial<TurnGateOptions>;
package/dist/index.js CHANGED
@@ -9804,6 +9804,9 @@ var KIND_HINT = {
9804
9804
  bridge: `neutral one-moment cues while the answer is prepared (like "let me see\u2026", "one sec\u2026") \u2014 never the start of a statement or opinion ("the thing is", "well actually", "here's the deal")`,
9805
9805
  phatic: 'greetings, thanks and yes/no openers a person starts a turn with (like "hi", "thanks", "how are you")'
9806
9806
  };
9807
+ function personaHint(gender) {
9808
+ return gender === "female" ? 'You are a woman: when you refer to yourself, use feminine grammatical forms (e.g. Hebrew "\u05D1\u05D5\u05D3\u05E7\u05EA", not "\u05D1\u05D5\u05D3\u05E7").' : gender === "male" ? 'You are a man: when you refer to yourself, use masculine grammatical forms (e.g. Hebrew "\u05D1\u05D5\u05D3\u05E7", not "\u05D1\u05D5\u05D3\u05E7\u05EA").' : "";
9809
+ }
9807
9810
  function fastBankGenerator(ai, model, perKind = 12) {
9808
9811
  return async (lang, avoid, signal) => {
9809
9812
  const name = languageName(lang);
@@ -12560,14 +12563,19 @@ init_logging();
12560
12563
  var log26 = forComponent("Progress");
12561
12564
  var HE_RESULT_CLAIM = /(?:^|\s)(?:מצאתי|סיימתי|בוצע|הנה|אין)(?=\s|$|[.,!…])/u;
12562
12565
  var TOPICS = [
12566
+ [/toolsearch|^mcp__.*__(list_commands|call_info)$/, null],
12567
+ // tool plumbing — no line (and no generated one)
12563
12568
  [/kanban|board|card|\bkb\b|list_cards/, "board"],
12564
12569
  [/mail|gmail|inbox/, "mail"],
12565
12570
  [/calendar|event|schedule/, "calendar"],
12566
12571
  [/memory|recall|remember/, "memory"],
12567
- [/web_?search|websearch|fetch|browse|url|page|tab|browser/, "web"],
12572
+ [/web_?search|search_web|google/, "websearch"],
12573
+ [/fetch|read_page|get_page|page_text|navigate|url|history/, "page"],
12574
+ [/click|type|press_key|scroll|screenshot|tab|browser|highlight|point|wait_for|upload/, "browser"],
12568
12575
  [/grep|glob|search|find|lookup|quicklook/, "search"],
12576
+ [/^(agent|task)$|subagent|delegate/, "delegate"],
12569
12577
  [/edit|write|patch|create|update|save|delete|move/, "write"],
12570
- [/shell|bash|exec|run|command|terminal/, "run"],
12578
+ [/shell|bash|exec|run|command|terminal|eval/, "run"],
12571
12579
  [/read|open|view|cat|look|get|list|ls/, "read"]
12572
12580
  ];
12573
12581
  var PROGRESS_TEMPLATES = {
@@ -12576,27 +12584,62 @@ var PROGRESS_TEMPLATES = {
12576
12584
  mail: ["checking the mail\u2026", "going through the inbox\u2026"],
12577
12585
  calendar: ["checking the calendar\u2026", "looking at the schedule\u2026"],
12578
12586
  memory: ["checking my notes\u2026", "looking back\u2026"],
12579
- web: ["reading the page\u2026", "looking it up online\u2026"],
12587
+ websearch: ["searching\u2026", "searching the web\u2026"],
12588
+ page: ["reading the page\u2026", "going through the page\u2026"],
12589
+ browser: ["working in the browser\u2026", "on the page now\u2026"],
12580
12590
  search: ["searching\u2026", "still looking\u2026"],
12591
+ delegate: ["working on it\u2026", "still on it\u2026"],
12581
12592
  write: ["making the change\u2026", "writing it down\u2026"],
12582
12593
  run: ["running it\u2026", "still running\u2026"],
12583
12594
  read: ["reading it\u2026", "going through it\u2026"]
12584
12595
  },
12585
12596
  he: {
12586
- // plural present: gender-neutral for a voice of either gender
12587
12597
  board: ["\u05D1\u05D5\u05D3\u05E7\u05D9\u05DD \u05D1\u05DC\u05D5\u05D7\u2026", "\u05DE\u05E1\u05EA\u05DB\u05DC\u05D9\u05DD \u05E2\u05DC \u05D4\u05DB\u05E8\u05D8\u05D9\u05E1\u05D9\u05DD\u2026"],
12588
12598
  mail: ["\u05D1\u05D5\u05D3\u05E7\u05D9\u05DD \u05D0\u05EA \u05D4\u05DE\u05D9\u05D9\u05DC\u2026", "\u05E2\u05D5\u05D1\u05E8\u05D9\u05DD \u05E2\u05DC \u05D4\u05D3\u05D5\u05D0\u05E8\u2026"],
12589
12599
  calendar: ["\u05D1\u05D5\u05D3\u05E7\u05D9\u05DD \u05D1\u05D9\u05D5\u05DE\u05DF\u2026", "\u05DE\u05E1\u05EA\u05DB\u05DC\u05D9\u05DD \u05D1\u05DC\u05D5\u05F4\u05D6\u2026"],
12590
12600
  memory: ["\u05D1\u05D5\u05D3\u05E7\u05D9\u05DD \u05D1\u05E8\u05E9\u05D9\u05DE\u05D5\u05EA\u2026", "\u05DE\u05D7\u05E4\u05E9\u05D9\u05DD \u05D1\u05D6\u05D9\u05DB\u05E8\u05D5\u05DF\u2026"],
12591
- web: ["\u05E7\u05D5\u05E8\u05D0\u05D9\u05DD \u05D0\u05EA \u05D4\u05D3\u05E3\u2026", "\u05DE\u05D7\u05E4\u05E9\u05D9\u05DD \u05D1\u05E8\u05E9\u05EA\u2026"],
12601
+ websearch: ["\u05DE\u05D7\u05E4\u05E9\u05D9\u05DD\u2026", "\u05DE\u05D7\u05E4\u05E9\u05D9\u05DD \u05D1\u05E8\u05E9\u05EA\u2026"],
12602
+ page: ["\u05E7\u05D5\u05E8\u05D0\u05D9\u05DD \u05D0\u05EA \u05D4\u05D3\u05E3\u2026", "\u05E2\u05D5\u05D1\u05E8\u05D9\u05DD \u05E2\u05DC \u05D4\u05D3\u05E3\u2026"],
12603
+ browser: ["\u05E2\u05D5\u05D1\u05D3\u05D9\u05DD \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF\u2026", "\u05E2\u05DC \u05D4\u05D3\u05E3 \u05E2\u05DB\u05E9\u05D9\u05D5\u2026"],
12592
12604
  search: ["\u05DE\u05D7\u05E4\u05E9\u05D9\u05DD\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05DE\u05D7\u05E4\u05E9\u05D9\u05DD\u2026"],
12605
+ delegate: ["\u05E2\u05D5\u05D1\u05D3\u05D9\u05DD \u05E2\u05DC \u05D6\u05D4\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05E2\u05DC \u05D6\u05D4\u2026"],
12593
12606
  write: ["\u05DE\u05D1\u05E6\u05E2\u05D9\u05DD \u05D0\u05EA \u05D4\u05E9\u05D9\u05E0\u05D5\u05D9\u2026", "\u05DB\u05D5\u05EA\u05D1\u05D9\u05DD \u05D0\u05EA \u05D6\u05D4\u2026"],
12594
12607
  run: ["\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05E8\u05E5\u2026"],
12595
12608
  read: ["\u05E7\u05D5\u05E8\u05D0\u05D9\u05DD\u2026", "\u05E2\u05D5\u05D1\u05E8\u05D9\u05DD \u05E2\u05DC \u05D6\u05D4\u2026"]
12609
+ },
12610
+ "he-f": {
12611
+ board: ["\u05D1\u05D5\u05D3\u05E7\u05EA \u05D1\u05DC\u05D5\u05D7\u2026", "\u05DE\u05E1\u05EA\u05DB\u05DC\u05EA \u05E2\u05DC \u05D4\u05DB\u05E8\u05D8\u05D9\u05E1\u05D9\u05DD\u2026"],
12612
+ mail: ["\u05D1\u05D5\u05D3\u05E7\u05EA \u05D0\u05EA \u05D4\u05DE\u05D9\u05D9\u05DC\u2026", "\u05E2\u05D5\u05D1\u05E8\u05EA \u05E2\u05DC \u05D4\u05D3\u05D5\u05D0\u05E8\u2026"],
12613
+ calendar: ["\u05D1\u05D5\u05D3\u05E7\u05EA \u05D1\u05D9\u05D5\u05DE\u05DF\u2026", "\u05DE\u05E1\u05EA\u05DB\u05DC\u05EA \u05D1\u05DC\u05D5\u05F4\u05D6\u2026"],
12614
+ memory: ["\u05D1\u05D5\u05D3\u05E7\u05EA \u05D1\u05E8\u05E9\u05D9\u05DE\u05D5\u05EA\u2026", "\u05DE\u05D7\u05E4\u05E9\u05EA \u05D1\u05D6\u05D9\u05DB\u05E8\u05D5\u05DF\u2026"],
12615
+ websearch: ["\u05DE\u05D7\u05E4\u05E9\u05EA\u2026", "\u05DE\u05D7\u05E4\u05E9\u05EA \u05D1\u05E8\u05E9\u05EA\u2026"],
12616
+ page: ["\u05E7\u05D5\u05E8\u05D0\u05EA \u05D0\u05EA \u05D4\u05D3\u05E3\u2026", "\u05E2\u05D5\u05D1\u05E8\u05EA \u05E2\u05DC \u05D4\u05D3\u05E3\u2026"],
12617
+ browser: ["\u05E2\u05D5\u05D1\u05D3\u05EA \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF\u2026", "\u05E2\u05DC \u05D4\u05D3\u05E3 \u05E2\u05DB\u05E9\u05D9\u05D5\u2026"],
12618
+ search: ["\u05DE\u05D7\u05E4\u05E9\u05EA\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05DE\u05D7\u05E4\u05E9\u05EA\u2026"],
12619
+ delegate: ["\u05E2\u05D5\u05D1\u05D3\u05EA \u05E2\u05DC \u05D6\u05D4\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05E2\u05DC \u05D6\u05D4\u2026"],
12620
+ write: ["\u05DE\u05D1\u05E6\u05E2\u05EA \u05D0\u05EA \u05D4\u05E9\u05D9\u05E0\u05D5\u05D9\u2026", "\u05DB\u05D5\u05EA\u05D1\u05EA \u05D0\u05EA \u05D6\u05D4\u2026"],
12621
+ run: ["\u05DE\u05E8\u05D9\u05E6\u05D4\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05E8\u05E5\u2026"],
12622
+ read: ["\u05E7\u05D5\u05E8\u05D0\u05EA\u2026", "\u05E2\u05D5\u05D1\u05E8\u05EA \u05E2\u05DC \u05D6\u05D4\u2026"]
12623
+ },
12624
+ "he-m": {
12625
+ board: ["\u05D1\u05D5\u05D3\u05E7 \u05D1\u05DC\u05D5\u05D7\u2026", "\u05DE\u05E1\u05EA\u05DB\u05DC \u05E2\u05DC \u05D4\u05DB\u05E8\u05D8\u05D9\u05E1\u05D9\u05DD\u2026"],
12626
+ mail: ["\u05D1\u05D5\u05D3\u05E7 \u05D0\u05EA \u05D4\u05DE\u05D9\u05D9\u05DC\u2026", "\u05E2\u05D5\u05D1\u05E8 \u05E2\u05DC \u05D4\u05D3\u05D5\u05D0\u05E8\u2026"],
12627
+ calendar: ["\u05D1\u05D5\u05D3\u05E7 \u05D1\u05D9\u05D5\u05DE\u05DF\u2026", "\u05DE\u05E1\u05EA\u05DB\u05DC \u05D1\u05DC\u05D5\u05F4\u05D6\u2026"],
12628
+ memory: ["\u05D1\u05D5\u05D3\u05E7 \u05D1\u05E8\u05E9\u05D9\u05DE\u05D5\u05EA\u2026", "\u05DE\u05D7\u05E4\u05E9 \u05D1\u05D6\u05D9\u05DB\u05E8\u05D5\u05DF\u2026"],
12629
+ websearch: ["\u05DE\u05D7\u05E4\u05E9\u2026", "\u05DE\u05D7\u05E4\u05E9 \u05D1\u05E8\u05E9\u05EA\u2026"],
12630
+ page: ["\u05E7\u05D5\u05E8\u05D0 \u05D0\u05EA \u05D4\u05D3\u05E3\u2026", "\u05E2\u05D5\u05D1\u05E8 \u05E2\u05DC \u05D4\u05D3\u05E3\u2026"],
12631
+ browser: ["\u05E2\u05D5\u05D1\u05D3 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF\u2026", "\u05E2\u05DC \u05D4\u05D3\u05E3 \u05E2\u05DB\u05E9\u05D9\u05D5\u2026"],
12632
+ search: ["\u05DE\u05D7\u05E4\u05E9\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05DE\u05D7\u05E4\u05E9\u2026"],
12633
+ delegate: ["\u05E2\u05D5\u05D1\u05D3 \u05E2\u05DC \u05D6\u05D4\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05E2\u05DC \u05D6\u05D4\u2026"],
12634
+ write: ["\u05DE\u05D1\u05E6\u05E2 \u05D0\u05EA \u05D4\u05E9\u05D9\u05E0\u05D5\u05D9\u2026", "\u05DB\u05D5\u05EA\u05D1 \u05D0\u05EA \u05D6\u05D4\u2026"],
12635
+ run: ["\u05DE\u05E8\u05D9\u05E5\u2026", "\u05E2\u05D3\u05D9\u05D9\u05DF \u05E8\u05E5\u2026"],
12636
+ read: ["\u05E7\u05D5\u05E8\u05D0\u2026", "\u05E2\u05D5\u05D1\u05E8 \u05E2\u05DC \u05D6\u05D4\u2026"]
12596
12637
  }
12597
12638
  };
12598
12639
  var ProgressOptions = class {
12599
12640
  templates = PROGRESS_TEMPLATES;
12641
+ /** The voice's gender: picks the gendered table (`${lang}-f`/`-m`) when one exists. */
12642
+ gender = "";
12600
12643
  /** Fast-model fallback for a tool with no template (fastProgressGenerator). Absent → silence. */
12601
12644
  generate;
12602
12645
  generateBudgetMs = 800;
@@ -12645,8 +12688,11 @@ var Progress = class {
12645
12688
  async line(tool, args, lang) {
12646
12689
  if (this.streamed) return "";
12647
12690
  const name = tool.toLowerCase();
12648
- const topic = TOPICS.find(([re]) => re.test(name))?.[1];
12649
- const pool = topic ? this.o.templates[lang]?.[topic] ?? [] : [];
12691
+ const hit = TOPICS.find(([re]) => re.test(name));
12692
+ if (hit && hit[1] === null) return "";
12693
+ const topic = hit?.[1];
12694
+ const g = this.o.gender ? this.o.templates[`${lang}-${this.o.gender[0]}`] : void 0;
12695
+ const pool = topic ? (g ?? this.o.templates[lang])?.[topic] ?? [] : [];
12650
12696
  const fresh = pool.find((l2) => !this.said.has(norm3(l2)));
12651
12697
  if (fresh) return fresh;
12652
12698
  if (!this.o.generate) return "";
@@ -12667,9 +12713,9 @@ var Progress = class {
12667
12713
  return l;
12668
12714
  }
12669
12715
  };
12670
- function fastProgressGenerator(ai, model) {
12716
+ function fastProgressGenerator(ai, model, gender) {
12671
12717
  return async (tool, hint, lang, signal) => {
12672
- const prompt = `An assistant on a live voice call is running the tool "${tool}"${hint ? ` (about: "${hint}")` : ""}. Write ONE spoken line of 2-5 words, in ${languageName(lang)}, saying what it is doing right now (like "checking the board\u2026"). Never state a result or a finding. Output only the line.`;
12718
+ const prompt = `An assistant on a live voice call is running the tool "${tool}"${hint ? ` (about: "${hint}")` : ""}. Write ONE spoken line of 2-5 words, in ${languageName(lang)}, saying what it is doing right now (like "checking the board\u2026"). Never state a result or a finding. ${personaHint(gender)} Output only the line.`;
12673
12719
  const reasoning = /gpt-oss/.test(model) ? { providerOptions: { reasoning_effort: "low" } } : {};
12674
12720
  const r = await ai.chat({ model, messages: [{ role: "user", content: prompt }], stream: false, signal, maxTokens: 150, ...reasoning });
12675
12721
  return r.content ?? "";
@@ -13256,14 +13302,14 @@ var KIND_HINT2 = {
13256
13302
  bridge: 'a neutral one-moment cue while the answer is prepared ("let me see\u2026", "one sec\u2026") \u2014 never the start of a statement or opinion ("the thing is", "well actually")'
13257
13303
  };
13258
13304
  var REACT_HINT = 'a short reaction to their LAST words instead: feeling ("oh no", "ha, nice", "ugh"), surprise ("wait, really?", "huh"), a light laugh if they joke or laugh ("ha!"), or an echo of their key word ("the deploy?") \u2014 still never asks for an answer or takes the turn; if nothing there deserves a reaction, a plain "mm-hm"';
13259
- function fastLineGenerator(ai, model) {
13305
+ function fastLineGenerator(ai, model, gender) {
13260
13306
  return async (c, signal) => {
13261
13307
  const prompt = `You voice the tiny side-sounds of a live spoken conversation. Write ONE line of 1-5 words: ${KIND_HINT2[c.kind]}.
13262
13308
  ` + (c.react ? `Here the line may be ${REACT_HINT}.
13263
13309
  ` : "") + `The user just said: "${c.heard}"
13264
13310
  The assistant is: ${c.state}.
13265
13311
  ` + (c.avoid.length ? `Do not reuse any of: ${c.avoid.map((a) => `"${a}"`).join(", ")}.
13266
- ` : "") + `React to their actual words, casually, in ${languageName(c.lang)}. Output only the line.`;
13312
+ ` : "") + `React to their actual words, casually, in ${languageName(c.lang)}. ${personaHint(gender)} Output only the line.`;
13267
13313
  const reasoning = /gpt-oss/.test(model) ? { providerOptions: { reasoning_effort: "low" } } : {};
13268
13314
  const r = await ai.chat({ model, messages: [{ role: "user", content: prompt }], stream: false, signal, maxTokens: 150, ...reasoning });
13269
13315
  return r.content ?? "";
@@ -13301,6 +13347,8 @@ var VoiceCallOptions = class {
13301
13347
  bankCacheDir;
13302
13348
  /** The host STT's language (BCP-47) — the starting language; each turn's own words still decide. */
13303
13349
  lang;
13350
+ /** The voice's gender: generated fill/progress lines speak of themselves in it (Hebrew templates too). '' = neutral. */
13351
+ gender = "";
13304
13352
  aec = false;
13305
13353
  mode = "normal";
13306
13354
  gate = {};
@@ -13324,7 +13372,7 @@ var VoiceCall = class {
13324
13372
  ...ai ? {
13325
13373
  banks: new ChannelBanks({ generate: fastBankGenerator(ai, o.fastModel), ...o.bankCacheDir ? { cacheDir: o.bankCacheDir } : {} }),
13326
13374
  decide: channelDecide(ai),
13327
- generate: fastLineGenerator(ai, o.fastModel)
13375
+ generate: fastLineGenerator(ai, o.fastModel, o.gender)
13328
13376
  } : {},
13329
13377
  mode: o.mode,
13330
13378
  aec: o.aec,
@@ -13338,7 +13386,7 @@ var VoiceCall = class {
13338
13386
  cancel: () => o.cancel(),
13339
13387
  now: o.now
13340
13388
  });
13341
- this.progress = new Progress({ ...ai ? { generate: fastProgressGenerator(ai, o.fastModel) } : {}, now: o.now, ...o.progress });
13389
+ this.progress = new Progress({ ...ai ? { generate: fastProgressGenerator(ai, o.fastModel, o.gender) } : {}, gender: o.gender, now: o.now, ...o.progress });
13342
13390
  this.judge = new OverlapJudge({ ...ai ? { model: overlapModelFor(ai) } : {}, now: o.now });
13343
13391
  this.gate = new TurnGate({
13344
13392
  now: o.now,