botmux 3.14.0 → 3.15.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.
Files changed (121) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/tmux-pipe-backend.d.ts +30 -0
  3. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/tmux-pipe-backend.js +60 -0
  5. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  6. package/dist/adapters/backend/types.d.ts +7 -0
  7. package/dist/adapters/backend/types.d.ts.map +1 -1
  8. package/dist/adapters/backend/types.js.map +1 -1
  9. package/dist/adapters/cli/cursor.d.ts.map +1 -1
  10. package/dist/adapters/cli/cursor.js +13 -1
  11. package/dist/adapters/cli/cursor.js.map +1 -1
  12. package/dist/adapters/cli/dsh.d.ts.map +1 -1
  13. package/dist/adapters/cli/dsh.js +5 -1
  14. package/dist/adapters/cli/dsh.js.map +1 -1
  15. package/dist/adapters/cli/pi.d.ts +14 -1
  16. package/dist/adapters/cli/pi.d.ts.map +1 -1
  17. package/dist/adapters/cli/pi.js +21 -1
  18. package/dist/adapters/cli/pi.js.map +1 -1
  19. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  20. package/dist/adapters/cli/shared-hints.js +29 -24
  21. package/dist/adapters/cli/shared-hints.js.map +1 -1
  22. package/dist/adapters/cli/types.d.ts +4 -0
  23. package/dist/adapters/cli/types.d.ts.map +1 -1
  24. package/dist/bot-registry.d.ts +22 -0
  25. package/dist/bot-registry.d.ts.map +1 -1
  26. package/dist/bot-registry.js +24 -0
  27. package/dist/bot-registry.js.map +1 -1
  28. package/dist/cli.d.ts.map +1 -1
  29. package/dist/cli.js +8 -3
  30. package/dist/cli.js.map +1 -1
  31. package/dist/core/command-discovery.d.ts.map +1 -1
  32. package/dist/core/command-discovery.js +4 -1
  33. package/dist/core/command-discovery.js.map +1 -1
  34. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  35. package/dist/core/dashboard-ipc-server.js +42 -1
  36. package/dist/core/dashboard-ipc-server.js.map +1 -1
  37. package/dist/core/skills/frontmatter.d.ts.map +1 -1
  38. package/dist/core/skills/frontmatter.js +6 -1
  39. package/dist/core/skills/frontmatter.js.map +1 -1
  40. package/dist/core/worker-pool.d.ts.map +1 -1
  41. package/dist/core/worker-pool.js +21 -8
  42. package/dist/core/worker-pool.js.map +1 -1
  43. package/dist/daemon.d.ts.map +1 -1
  44. package/dist/daemon.js +4 -10
  45. package/dist/daemon.js.map +1 -1
  46. package/dist/dashboard/bot-payload.d.ts +4 -0
  47. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  48. package/dist/dashboard/bot-payload.js +1 -0
  49. package/dist/dashboard/bot-payload.js.map +1 -1
  50. package/dist/dashboard/web/bot-defaults-page.d.ts +7 -0
  51. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  52. package/dist/dashboard/web/bot-defaults-page.js +96 -1
  53. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  54. package/dist/dashboard/web/bot-defaults.d.ts +2 -0
  55. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  56. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  57. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  58. package/dist/dashboard/web/i18n.js +8 -0
  59. package/dist/dashboard/web/i18n.js.map +1 -1
  60. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  61. package/dist/dashboard/web/skills-page.js +4 -2
  62. package/dist/dashboard/web/skills-page.js.map +1 -1
  63. package/dist/dashboard-web/app.js +1 -1
  64. package/dist/dashboard-web/chunks/bot-defaults-page-65SMZ4QY.js +10 -0
  65. package/dist/dashboard-web/chunks/{chunk-2WQDS65D.js → chunk-IKN6WURK.js} +1 -1
  66. package/dist/dashboard-web/chunks/{chunk-Q2MT4VWH.js → chunk-VMWNR3SV.js} +4 -4
  67. package/dist/dashboard-web/chunks/{chunk-6O7KXFD2.js → chunk-Z7B3E3US.js} +1 -1
  68. package/dist/dashboard-web/chunks/{chunk-U3ZFSO7E.js → chunk-Z7DO42GJ.js} +1 -1
  69. package/dist/dashboard-web/chunks/{connectors-page-2KZO5KSJ.js → connectors-page-CPH6VVFY.js} +1 -1
  70. package/dist/dashboard-web/chunks/{feedback-page-CLVTOLLO.js → feedback-page-J2FKQ3LK.js} +1 -1
  71. package/dist/dashboard-web/chunks/{groups-page-HLASRTSY.js → groups-page-VDOOLS4M.js} +1 -1
  72. package/dist/dashboard-web/chunks/{insights-page-4RPU2CRU.js → insights-page-A2LWTKJD.js} +1 -1
  73. package/dist/dashboard-web/chunks/{monitor-room-OTKQ2CXK.js → monitor-room-2YR752E3.js} +1 -1
  74. package/dist/dashboard-web/chunks/{monitoring-page-IJPUB6JT.js → monitoring-page-BGYSKZGM.js} +1 -1
  75. package/dist/dashboard-web/chunks/{office-page-QSR3J44Y.js → office-page-ZZHTEAE4.js} +1 -1
  76. package/dist/dashboard-web/chunks/{overview-page-6OK63V4V.js → overview-page-7NYPKQSB.js} +1 -1
  77. package/dist/dashboard-web/chunks/{roles-page-6NWJMOB5.js → roles-page-YUC4YLJG.js} +1 -1
  78. package/dist/dashboard-web/chunks/{schedules-page-6I3LNXD4.js → schedules-page-2L2NKTDJ.js} +1 -1
  79. package/dist/dashboard-web/chunks/{sessions-page-B2TXGJDO.js → sessions-page-DYZZMKFL.js} +1 -1
  80. package/dist/dashboard-web/chunks/{settings-page-6KJADSC6.js → settings-page-LIULUSMH.js} +1 -1
  81. package/dist/dashboard-web/chunks/{skills-page-M2Q6L5CB.js → skills-page-DQPBBI3T.js} +2 -2
  82. package/dist/dashboard-web/chunks/{team-federation-page-7I7FDE3B.js → team-federation-page-LQKLDV4K.js} +1 -1
  83. package/dist/dashboard-web/chunks/{v3-page-HQXRL65L.js → v3-page-RVKQIMAP.js} +1 -1
  84. package/dist/dashboard-web/chunks/{whiteboards-page-LQKC4TAZ.js → whiteboards-page-S5K55HRZ.js} +1 -1
  85. package/dist/dashboard.js +11 -1
  86. package/dist/dashboard.js.map +1 -1
  87. package/dist/dsh-runner.js +8 -1
  88. package/dist/dsh-runner.js.map +1 -1
  89. package/dist/i18n/en.d.ts.map +1 -1
  90. package/dist/i18n/en.js +15 -26
  91. package/dist/i18n/en.js.map +1 -1
  92. package/dist/i18n/zh.d.ts.map +1 -1
  93. package/dist/i18n/zh.js +15 -26
  94. package/dist/i18n/zh.js.map +1 -1
  95. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  96. package/dist/im/lark/event-dispatcher.js +5 -19
  97. package/dist/im/lark/event-dispatcher.js.map +1 -1
  98. package/dist/services/bridge-fallback-gate.d.ts +15 -7
  99. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  100. package/dist/services/bridge-fallback-gate.js +43 -16
  101. package/dist/services/bridge-fallback-gate.js.map +1 -1
  102. package/dist/services/peer-cross-ref-store.d.ts +8 -0
  103. package/dist/services/peer-cross-ref-store.d.ts.map +1 -0
  104. package/dist/services/peer-cross-ref-store.js +95 -0
  105. package/dist/services/peer-cross-ref-store.js.map +1 -0
  106. package/dist/services/pi-transcript.d.ts.map +1 -1
  107. package/dist/services/pi-transcript.js +10 -6
  108. package/dist/services/pi-transcript.js.map +1 -1
  109. package/dist/services/structured-bridge-clis.d.ts +13 -4
  110. package/dist/services/structured-bridge-clis.d.ts.map +1 -1
  111. package/dist/services/structured-bridge-clis.js +13 -3
  112. package/dist/services/structured-bridge-clis.js.map +1 -1
  113. package/dist/types.d.ts +1 -0
  114. package/dist/types.d.ts.map +1 -1
  115. package/dist/utils/bot-routing.d.ts +1 -1
  116. package/dist/utils/bot-routing.d.ts.map +1 -1
  117. package/dist/utils/bot-routing.js.map +1 -1
  118. package/dist/worker.js +233 -11
  119. package/dist/worker.js.map +1 -1
  120. package/package.json +5 -1
  121. package/dist/dashboard-web/chunks/bot-defaults-page-4RENHE7J.js +0 -10
@@ -13,6 +13,8 @@ export interface DashboardBotDescriptor {
13
13
  wrapperCli?: string;
14
14
  model?: string;
15
15
  reasoningEffort?: string;
16
+ /** dsh runner turn timeout (ms); dashboard exposes it for the dsh CLI only. */
17
+ turnTimeoutMs?: number;
16
18
  }
17
19
  /**
18
20
  * per-bot brand(feishu / lark)按 larkAppId 的映射,供 dashboard 前端派生飞书
@@ -38,6 +40,7 @@ export declare function botDefaultsPayload(bot: DashboardBotDescriptor, j?: any,
38
40
  error: string;
39
41
  online: boolean;
40
42
  agentSelectionKey?: string | undefined;
43
+ turnTimeoutMs?: number | undefined;
41
44
  reasoningEffort?: string | undefined;
42
45
  model?: string | undefined;
43
46
  wrapperCli?: string | undefined;
@@ -105,6 +108,7 @@ export declare function botDefaultsPayload(bot: DashboardBotDescriptor, j?: any,
105
108
  skills: any;
106
109
  online: boolean;
107
110
  agentSelectionKey?: string | undefined;
111
+ turnTimeoutMs?: number | undefined;
108
112
  reasoningEffort?: string | undefined;
109
113
  model?: string | undefined;
110
114
  wrapperCli?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"bot-payload.d.ts","sourceRoot":"","sources":["../../src/dashboard/bot-payload.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;0DACsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,aAAa,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAMjC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,sBAAsB;;;;;;EAQ5D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyFtF"}
1
+ {"version":3,"file":"bot-payload.d.ts","sourceRoot":"","sources":["../../src/dashboard/bot-payload.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;0DACsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,aAAa,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAMjC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,sBAAsB;;;;;;EAQ5D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0FtF"}
@@ -39,6 +39,7 @@ export function botDefaultsPayload(bot, j, error) {
39
39
  ...(bot.wrapperCli ? { wrapperCli: bot.wrapperCli } : {}),
40
40
  ...(bot.model ? { model: bot.model } : {}),
41
41
  ...(bot.reasoningEffort ? { reasoningEffort: bot.reasoningEffort } : {}),
42
+ ...(typeof bot.turnTimeoutMs === 'number' ? { turnTimeoutMs: bot.turnTimeoutMs } : {}),
42
43
  // 「修改 CLI」下拉的当前选中项(cliId+wrapperCli → 选择键),wrapper 网关形态
43
44
  // (aiden×claude / ttadk×codex 等)据此才能高亮回对应选项,否则前端回落到裸
44
45
  // cliId、丢失 wrapper 语义(重载后下拉复位、再保存会把 wrapper 剥掉)。
@@ -1 +1 @@
1
- {"version":3,"file":"bot-payload.js","sourceRoot":"","sources":["../../src/dashboard/bot-payload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-payload.js","sourceRoot":"","sources":["../../src/dashboard/bot-payload.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,13 @@ export declare function BotAgentSection(props: {
49
49
  cliState: CliOptionsState;
50
50
  patchBot: PatchBot;
51
51
  }): import("react").JSX.Element;
52
+ /**
53
+ * Node's setTimeout delay caps at a 32-bit signed int of ms; a larger value
54
+ * wraps to ~1ms. Kept in lockstep with `MAX_TURN_TIMEOUT_MS` in bot-registry
55
+ * (a browser bundle can't import that Node-side module); a unit test asserts the
56
+ * two stay equal so this copy can't silently drift.
57
+ */
58
+ export declare const DASHBOARD_MAX_TURN_TIMEOUT_MS = 2147483647;
52
59
  type SandboxTier = 'readWrite' | 'readOnly' | 'deny';
53
60
  type SandboxTiers = {
54
61
  readWrite: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"bot-defaults-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults-page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-defaults-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults-page.tsx"],"names":[],"mappings":"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"}
@@ -809,6 +809,13 @@ export function BotAgentSection(props) {
809
809
  const [cliSelectionTouched, setCliSelectionTouched] = useState(false);
810
810
  const [model, setModel] = useState(typeof bot.model === 'string' ? bot.model : '');
811
811
  const [reasoningEffort, setReasoningEffort] = useState(bot.reasoningEffort ?? '');
812
+ // dsh-only turn timeout, edited in minutes (bots.json stores ms). Empty = use
813
+ // the runner default (10 min). `touched` gates whether a save sends the field
814
+ // at all: an untouched field is omitted so the daemon preserves the exact
815
+ // stored ms (including legal non-whole-minute values) instead of clearing it.
816
+ const [turnTimeoutMin, setTurnTimeoutMin] = useState(turnTimeoutMinFromMs(bot.turnTimeoutMs));
817
+ const [turnTimeoutTouched, setTurnTimeoutTouched] = useState(false);
818
+ const [turnTimeoutError, setTurnTimeoutError] = useState(null);
812
819
  const [runtimeDraft, setRuntimeDraft] = useState(() => runtimeDraftFromBot(bot));
813
820
  const [runtimeTouched, setRuntimeTouched] = useState(false);
814
821
  const [runtimeStatus, setRuntimeStatus] = useState(null);
@@ -822,6 +829,9 @@ export function BotAgentSection(props) {
822
829
  setCliSelectionTouched(false);
823
830
  setModel(typeof bot.model === 'string' ? bot.model : '');
824
831
  setReasoningEffort(bot.reasoningEffort ?? '');
832
+ setTurnTimeoutMin(turnTimeoutMinFromMs(bot.turnTimeoutMs));
833
+ setTurnTimeoutTouched(false);
834
+ setTurnTimeoutError(null);
825
835
  setRuntimeDraft(runtimeDraftFromBot(bot));
826
836
  setRuntimeTouched(false);
827
837
  setSkillValue(skillInjectionResolved(bot));
@@ -831,6 +841,7 @@ export function BotAgentSection(props) {
831
841
  bot.larkAppId,
832
842
  bot.model,
833
843
  bot.reasoningEffort,
844
+ bot.turnTimeoutMs,
834
845
  runtimeConfigKey,
835
846
  bot.wrapperCli,
836
847
  bot.skillInjection,
@@ -913,12 +924,32 @@ export function BotAgentSection(props) {
913
924
  : { provider: runtimeDraft.updateProvider },
914
925
  };
915
926
  }
927
+ // dsh-only turn timeout: validate the (touched) minutes input before saving
928
+ // so an illegal value surfaces an inline error instead of silently clearing
929
+ // the config. Untouched → omitted below so the daemon preserves the stored
930
+ // ms exactly (including legal non-whole-minute values).
931
+ let turnTimeoutField;
932
+ if (cliKey === 'dsh' && turnTimeoutTouched) {
933
+ const parsed = parseTurnTimeoutMinInput(turnTimeoutMin);
934
+ if (parsed === 'invalid') {
935
+ const text = tr('botDefaults.agentTurnTimeoutInvalid');
936
+ setTurnTimeoutError(text);
937
+ setAgentStatus({ text: `✗ ${text}` });
938
+ return;
939
+ }
940
+ setTurnTimeoutError(null);
941
+ turnTimeoutField = parsed; // number (minutes→ms) or '' (clear)
942
+ }
916
943
  setAgentBusy(true);
917
944
  try {
918
945
  const body = {
919
946
  cliId: cliKey,
920
947
  model,
921
948
  reasoningEffort: (cliKey === 'codex' || cliKey === 'codex-app' || cliKey.endsWith('-codex')) ? reasoningEffort : '',
949
+ // dsh-only: only send when the user actually edited the field. Omitting
950
+ // it makes the daemon preserve the current value; non-dsh selections
951
+ // never send it (the daemon drops any stored value for non-dsh CLIs).
952
+ ...(cliKey === 'dsh' && turnTimeoutField !== undefined ? { turnTimeoutMs: turnTimeoutField } : {}),
922
953
  ...(runtimeTouched ? { cliRuntime } : {}),
923
954
  };
924
955
  const res = await sendJson('PUT', `/api/bots/${encodeURIComponent(bot.larkAppId)}/agent`, body);
@@ -943,8 +974,14 @@ export function BotAgentSection(props) {
943
974
  wrapperCli: res.body.wrapperCli ?? null,
944
975
  model: res.body.model ?? '',
945
976
  reasoningEffort: res.body.reasoningEffort ?? undefined,
977
+ turnTimeoutMs: typeof res.body.turnTimeoutMs === 'number' ? res.body.turnTimeoutMs : undefined,
946
978
  agentSelectionKey: res.body.selectionKey ?? cliKey,
947
979
  });
980
+ // Re-sync the minutes input from the authoritative saved ms and clear
981
+ // the dirty flag so a subsequent unrelated save won't touch the field.
982
+ setTurnTimeoutMin(turnTimeoutMinFromMs(typeof res.body.turnTimeoutMs === 'number' ? res.body.turnTimeoutMs : undefined));
983
+ setTurnTimeoutTouched(false);
984
+ setTurnTimeoutError(null);
948
985
  setRuntimeTouched(false);
949
986
  if (cliRuntime) {
950
987
  const probe = res.body.runtimeProbe;
@@ -1036,6 +1073,8 @@ export function BotAgentSection(props) {
1036
1073
  const siSupport = bot.skillInjectionSupport === 'dynamic' ? 'dynamic' : bot.skillInjectionSupport === 'global' ? 'global' : 'none';
1037
1074
  const isRiff = cliKey === 'riff';
1038
1075
  const isCodexSelection = cliKey === 'codex' || cliKey === 'codex-app' || cliKey.endsWith('-codex');
1076
+ // The dsh adapter is the only one that forwards a runner turn timeout.
1077
+ const isDsh = cliKey === 'dsh';
1039
1078
  const reasoningEffortOptions = useMemo(() => codexReasoningEffortsForModel(model), [model]);
1040
1079
  useEffect(() => {
1041
1080
  if (reasoningEffort && !reasoningEffortOptions.includes(reasoningEffort))
@@ -1075,7 +1114,14 @@ export function BotAgentSection(props) {
1075
1114
  ? 'botDefaults.runtimeOfficialNote'
1076
1115
  : runtimeDraft.mode === 'legacy'
1077
1116
  ? 'botDefaults.runtimeLegacyNote'
1078
- : 'botDefaults.runtimeCustomNote') }), runtimeDraft.mode === 'legacy' ? (_jsx("div", { className: "bd-runtime-fields", "data-runtime-legacy": "", children: _jsxs("label", { className: "bd-runtime-wide", children: [_jsx("span", { children: tr('botDefaults.runtimeLegacyPath') }), _jsx("input", { type: "text", value: runtimeDraft.legacyPath, readOnly: true, "aria-readonly": "true", "data-input": "agentRuntimeLegacyPath" })] }) })) : null, runtimeDraft.mode === 'custom' ? (_jsxs("div", { className: "bd-runtime-fields", children: [_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeIdHelp'), children: tr('botDefaults.runtimeId') }), _jsx("input", { type: "text", "data-input": "agentRuntimeId", value: runtimeDraft.id, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ id: event.currentTarget.value }) })] }), _jsxs("label", { children: [_jsx("span", { children: tr('botDefaults.runtimeDisplayName') }), _jsx("input", { type: "text", "data-input": "agentRuntimeDisplayName", placeholder: tr('botDefaults.runtimeDisplayNamePlaceholder'), value: runtimeDraft.displayName, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ displayName: event.currentTarget.value }) })] }), _jsxs("label", { className: "bd-runtime-wide", children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeExecutableHelp'), children: tr('botDefaults.runtimeExecutable') }), _jsx("input", { type: "text", "data-input": "agentRuntimeExecutable", value: runtimeDraft.executable, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ executable: event.currentTarget.value }) })] }), _jsxs("div", { className: "bd-field", children: [_jsx("span", { children: tr('botDefaults.runtimeUpdateProvider') }), _jsx(DropdownField, { dataInput: "agentRuntimeUpdateProvider", ariaLabel: tr('botDefaults.runtimeUpdateProvider'), value: runtimeDraft.updateProvider, disabled: agentBusy, options: runtimeProviderOptions, onChange: updateProvider => updateRuntimeDraft({ updateProvider }) })] }), runtimeDraft.updateProvider === 'npm' ? (_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimePackageHelp'), children: tr('botDefaults.runtimePackageName') }), _jsx("input", { type: "text", "data-input": "agentRuntimePackageName", value: runtimeDraft.packageName, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ packageName: event.currentTarget.value }) })] })) : null] })) : null, _jsx(StatusSpan, { status: runtimeStatus, attr: { 'data-runtime-status': '' } })] })) : null, !isRiff && (_jsx("div", { className: "bd-row", children: _jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.agentHelp'), children: tr('botDefaults.agentModel') }), _jsx("input", { type: "text", "data-input": "agentModel", list: `agent-model-suggestions-${bot.larkAppId}`, placeholder: modelPlaceholder, value: model, disabled: agentBusy || modelDisabledByCli, onChange: event => setModel(event.currentTarget.value) }), _jsx("datalist", { id: `agent-model-suggestions-${bot.larkAppId}`, children: suggestions.map(item => _jsx("option", { value: item }, item)) })] }) })), isCodexSelection && (_jsx("div", { className: "bd-row", children: _jsxs("div", { className: "bd-field", children: [_jsx(FieldTitle, { help: tr('botDefaults.agentReasoningEffortHelp'), children: tr('botDefaults.agentReasoningEffort') }), _jsx(DropdownField, { dataInput: "agentReasoningEffort", ariaLabel: tr('botDefaults.agentReasoningEffort'), value: reasoningEffort, disabled: agentBusy, options: [
1117
+ : 'botDefaults.runtimeCustomNote') }), runtimeDraft.mode === 'legacy' ? (_jsx("div", { className: "bd-runtime-fields", "data-runtime-legacy": "", children: _jsxs("label", { className: "bd-runtime-wide", children: [_jsx("span", { children: tr('botDefaults.runtimeLegacyPath') }), _jsx("input", { type: "text", value: runtimeDraft.legacyPath, readOnly: true, "aria-readonly": "true", "data-input": "agentRuntimeLegacyPath" })] }) })) : null, runtimeDraft.mode === 'custom' ? (_jsxs("div", { className: "bd-runtime-fields", children: [_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeIdHelp'), children: tr('botDefaults.runtimeId') }), _jsx("input", { type: "text", "data-input": "agentRuntimeId", value: runtimeDraft.id, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ id: event.currentTarget.value }) })] }), _jsxs("label", { children: [_jsx("span", { children: tr('botDefaults.runtimeDisplayName') }), _jsx("input", { type: "text", "data-input": "agentRuntimeDisplayName", placeholder: tr('botDefaults.runtimeDisplayNamePlaceholder'), value: runtimeDraft.displayName, disabled: agentBusy, autoComplete: "off", onChange: event => updateRuntimeDraft({ displayName: event.currentTarget.value }) })] }), _jsxs("label", { className: "bd-runtime-wide", children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimeExecutableHelp'), children: tr('botDefaults.runtimeExecutable') }), _jsx("input", { type: "text", "data-input": "agentRuntimeExecutable", value: runtimeDraft.executable, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ executable: event.currentTarget.value }) })] }), _jsxs("div", { className: "bd-field", children: [_jsx("span", { children: tr('botDefaults.runtimeUpdateProvider') }), _jsx(DropdownField, { dataInput: "agentRuntimeUpdateProvider", ariaLabel: tr('botDefaults.runtimeUpdateProvider'), value: runtimeDraft.updateProvider, disabled: agentBusy, options: runtimeProviderOptions, onChange: updateProvider => updateRuntimeDraft({ updateProvider }) })] }), runtimeDraft.updateProvider === 'npm' ? (_jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.runtimePackageHelp'), children: tr('botDefaults.runtimePackageName') }), _jsx("input", { type: "text", "data-input": "agentRuntimePackageName", value: runtimeDraft.packageName, disabled: agentBusy, autoCapitalize: "none", autoComplete: "off", spellCheck: false, onChange: event => updateRuntimeDraft({ packageName: event.currentTarget.value }) })] })) : null] })) : null, _jsx(StatusSpan, { status: runtimeStatus, attr: { 'data-runtime-status': '' } })] })) : null, !isRiff && (_jsx("div", { className: "bd-row", children: _jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.agentHelp'), children: tr('botDefaults.agentModel') }), _jsx("input", { type: "text", "data-input": "agentModel", list: `agent-model-suggestions-${bot.larkAppId}`, placeholder: modelPlaceholder, value: model, disabled: agentBusy || modelDisabledByCli, onChange: event => setModel(event.currentTarget.value) }), _jsx("datalist", { id: `agent-model-suggestions-${bot.larkAppId}`, children: suggestions.map(item => _jsx("option", { value: item }, item)) })] }) })), isDsh && (_jsx("div", { className: "bd-row", children: _jsxs("label", { children: [_jsx(FieldTitle, { help: tr('botDefaults.agentTurnTimeoutHelp'), children: tr('botDefaults.agentTurnTimeout') }), _jsx("input", { type: "number", min: 0,
1118
+ // Allow non-whole minutes so a legal non-60000-multiple ms value
1119
+ // (e.g. 90001ms ≈ 1.50002min) can be shown and edited losslessly.
1120
+ step: "any", inputMode: "decimal", "data-input": "agentTurnTimeout", placeholder: tr('botDefaults.agentTurnTimeoutPlaceholder'), value: turnTimeoutMin, disabled: agentBusy, onChange: event => {
1121
+ setTurnTimeoutMin(event.currentTarget.value);
1122
+ setTurnTimeoutTouched(true);
1123
+ setTurnTimeoutError(null);
1124
+ } }), turnTimeoutError ? _jsx("small", { className: "hint-warn", "data-turn-timeout-error": "", children: turnTimeoutError }) : null] }) })), isCodexSelection && (_jsx("div", { className: "bd-row", children: _jsxs("div", { className: "bd-field", children: [_jsx(FieldTitle, { help: tr('botDefaults.agentReasoningEffortHelp'), children: tr('botDefaults.agentReasoningEffort') }), _jsx(DropdownField, { dataInput: "agentReasoningEffort", ariaLabel: tr('botDefaults.agentReasoningEffort'), value: reasoningEffort, disabled: agentBusy, options: [
1079
1125
  { value: '', label: tr('botDefaults.agentReasoningEffortDefault') },
1080
1126
  ...reasoningEffortOptions.map(value => ({
1081
1127
  value,
@@ -1083,6 +1129,55 @@ export function BotAgentSection(props) {
1083
1129
  })),
1084
1130
  ], onChange: next => setReasoningEffort(next) })] }) })), isRiff && _jsx(RiffSection, { bot: bot, patchBot: patchBot, persistCliSelection: persistRiffCliSelection }), !isRiff && siSupport === 'dynamic' ? (_jsx("div", { className: "bd-row", children: _jsxs("div", { className: "bd-field", children: [_jsx(FieldTitle, { help: tr('botDefaults.skillInjectionHelpDynamic'), children: tr('botDefaults.skillInjection') }), _jsx(DropdownField, { dataInput: "skillInjection", ariaLabel: tr('botDefaults.skillInjection'), value: "dynamic", disabled: true, options: dynamicSkillOptions, onChange: () => undefined })] }) })) : !isRiff && siSupport === 'global' ? (_jsxs("div", { className: "bd-row", children: [_jsxs("div", { className: "bd-field", children: [_jsx(FieldTitle, { help: tr('botDefaults.skillInjectionHelp'), children: tr('botDefaults.skillInjection') }), _jsx(DropdownField, { dataInput: "skillInjection", ariaLabel: tr('botDefaults.skillInjection'), value: skillValue, disabled: skillBusy, options: skillOptions, onChange: next => void saveSkillInjection(next) })] }), _jsx("div", { className: "actions", children: _jsx(StatusSpan, { status: skillStatus, attr: { 'data-skill-injection-status': '' } }) })] })) : null, !isRiff && (_jsxs("div", { className: "actions bd-section-actions", children: [_jsx("button", { type: "button", className: "primary", "data-action": "save-agent", disabled: agentBusy, onClick: () => void saveAgent(), children: tr('botDefaults.agentSave') }), _jsx(StatusSpan, { status: agentStatus, attr: { 'data-agent-status': '' } })] }))] }));
1085
1131
  }
1132
+ /**
1133
+ * Node's setTimeout delay caps at a 32-bit signed int of ms; a larger value
1134
+ * wraps to ~1ms. Kept in lockstep with `MAX_TURN_TIMEOUT_MS` in bot-registry
1135
+ * (a browser bundle can't import that Node-side module); a unit test asserts the
1136
+ * two stay equal so this copy can't silently drift.
1137
+ */
1138
+ export const DASHBOARD_MAX_TURN_TIMEOUT_MS = 2_147_483_647;
1139
+ /**
1140
+ * Convert a stored dsh turn timeout (ms) into the minutes string shown in the
1141
+ * input. Absent / non-positive / non-integer / over-bound → empty (the field
1142
+ * then means "use the runner default"). A legal value that is not a whole
1143
+ * number of minutes is shown as its decimal minutes (trimmed of any float
1144
+ * tail) rather than hidden as empty; `parseTurnTimeoutMinInput` re-rounds it to
1145
+ * the nearest whole ms, so the displayed value round-trips back to the same ms.
1146
+ */
1147
+ function turnTimeoutMinFromMs(ms) {
1148
+ if (typeof ms !== 'number' || !Number.isInteger(ms) || ms <= 0 || ms > DASHBOARD_MAX_TURN_TIMEOUT_MS)
1149
+ return '';
1150
+ const minutes = ms / 60_000;
1151
+ // Trim any floating-point tail; parseTurnTimeoutMinInput re-rounds to ms.
1152
+ return Number.isInteger(minutes) ? String(minutes) : String(Number(minutes.toFixed(10)));
1153
+ }
1154
+ /**
1155
+ * Parse the minutes input for the PUT body. Returns:
1156
+ * - `''` → cleared (empty input) → daemon reverts to the runner default,
1157
+ * - a number → minutes → ms, rounded to the nearest whole ms, a positive
1158
+ * integer within the arm-able bound,
1159
+ * - `'invalid'` → the operator typed something that is not a clearable blank
1160
+ * and not a representable positive timeout (0, negative, NaN,
1161
+ * or a minutes value whose nearest ms is ≤0 / over-bound).
1162
+ * Rounding to the nearest whole ms makes the value shown by
1163
+ * `turnTimeoutMinFromMs` (a possibly-decimal minutes figure) round-trip back to
1164
+ * the exact stored ms; invalid input is surfaced inline, never silently cleared.
1165
+ */
1166
+ function parseTurnTimeoutMinInput(minutes) {
1167
+ const trimmed = minutes.trim();
1168
+ if (!trimmed)
1169
+ return '';
1170
+ const asMinutes = Number(trimmed);
1171
+ if (!Number.isFinite(asMinutes) || asMinutes <= 0)
1172
+ return 'invalid';
1173
+ // Round to the nearest whole ms: the minutes field is a lossy display of a
1174
+ // ms value, so snapping back to an integer ms is the safe, non-destructive
1175
+ // interpretation (e.g. 1.5000166667 min → 90001 ms).
1176
+ const ms = Math.round(asMinutes * 60_000);
1177
+ if (ms <= 0 || ms > DASHBOARD_MAX_TURN_TIMEOUT_MS)
1178
+ return 'invalid';
1179
+ return ms;
1180
+ }
1086
1181
  function skillInjectionResolved(bot) {
1087
1182
  const override = bot.skillInjection === 'global' || bot.skillInjection === 'prompt' || bot.skillInjection === 'off' ? bot.skillInjection : '';
1088
1183
  const def = bot.skillInjectionDefault === 'global' || bot.skillInjectionDefault === 'off' ? bot.skillInjectionDefault : 'prompt';