@xopcai/xopc 0.0.66 → 0.0.67

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 (78) hide show
  1. package/dist/extensions/telegram/xopc.extension.json +1 -1
  2. package/dist/gateway/static/root/assets/{agents-JiJR38n1.js → agents-CmhOU0fB.js} +2 -2
  3. package/dist/gateway/static/root/assets/{agents-JiJR38n1.js.map → agents-CmhOU0fB.js.map} +1 -1
  4. package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js → apps-page-CzS9A_6L.js} +2 -2
  5. package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js.map → apps-page-CzS9A_6L.js.map} +1 -1
  6. package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js → channels-settings-Bn0YSztA.js} +2 -2
  7. package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js.map → channels-settings-Bn0YSztA.js.map} +1 -1
  8. package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js → cron-dreaming-jobs-bAYsiHdF.js} +2 -2
  9. package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js.map → cron-dreaming-jobs-bAYsiHdF.js.map} +1 -1
  10. package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js → cron-page-CKqDtScu.js} +2 -2
  11. package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js.map → cron-page-CKqDtScu.js.map} +1 -1
  12. package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js → dist-CUMhnSuX.js} +2 -2
  13. package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js.map → dist-CUMhnSuX.js.map} +1 -1
  14. package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js → extension-debug-page-BDls5xp3.js} +2 -2
  15. package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js.map → extension-debug-page-BDls5xp3.js.map} +1 -1
  16. package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js → extension-page-BSfv53OO.js} +2 -2
  17. package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js.map → extension-page-BSfv53OO.js.map} +1 -1
  18. package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js → extension-settings-page-B0nkVsLi.js} +2 -2
  19. package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js.map → extension-settings-page-B0nkVsLi.js.map} +1 -1
  20. package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js → heartbeat-config-api-P5zdbIBw.js} +2 -2
  21. package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js.map → heartbeat-config-api-P5zdbIBw.js.map} +1 -1
  22. package/dist/gateway/static/root/assets/{index-Cc57jhuG.js → index-DAglRwh4.js} +5 -5
  23. package/dist/gateway/static/root/assets/{index-Cc57jhuG.js.map → index-DAglRwh4.js.map} +1 -1
  24. package/dist/gateway/static/root/assets/index-DHj3Cf9B.css +1 -0
  25. package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js → logs-page-CfGDv4k7.js} +2 -2
  26. package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js.map → logs-page-CfGDv4k7.js.map} +1 -1
  27. package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js → sessions-page-DoGE8N-O.js} +2 -2
  28. package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js.map → sessions-page-DoGE8N-O.js.map} +1 -1
  29. package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js +3 -0
  30. package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js.map +1 -0
  31. package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js → skills-page-ADUi69Fa.js} +2 -2
  32. package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js.map → skills-page-ADUi69Fa.js.map} +1 -1
  33. package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js → use-image-provider-credentials-C4x4dNv2.js} +2 -2
  34. package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js.map → use-image-provider-credentials-C4x4dNv2.js.map} +1 -1
  35. package/dist/gateway/static/root/index.html +2 -2
  36. package/dist/package.js +1 -1
  37. package/dist/src/cli/commands/tunnel.js +69 -8
  38. package/dist/src/cli/commands/tunnel.js.map +1 -1
  39. package/dist/src/config/schema.d.ts +2 -0
  40. package/dist/src/config/schema.js +2 -0
  41. package/dist/src/config/schema.js.map +1 -1
  42. package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -5
  43. package/dist/src/gateway/hono/lib/config-payload.js +3 -5
  44. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  45. package/dist/src/gateway/hono/routes/tunnel.js +12 -10
  46. package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
  47. package/dist/src/tunnel/acme-client.d.ts +11 -0
  48. package/dist/src/tunnel/acme-client.js +54 -10
  49. package/dist/src/tunnel/acme-client.js.map +1 -1
  50. package/dist/src/tunnel/env.d.ts +14 -3
  51. package/dist/src/tunnel/env.js +34 -5
  52. package/dist/src/tunnel/env.js.map +1 -1
  53. package/dist/src/tunnel/frpc-binary.d.ts +6 -1
  54. package/dist/src/tunnel/frpc-binary.js +66 -40
  55. package/dist/src/tunnel/frpc-binary.js.map +1 -1
  56. package/dist/src/tunnel/frpc-extract.d.ts +10 -0
  57. package/dist/src/tunnel/frpc-extract.js +129 -0
  58. package/dist/src/tunnel/frpc-extract.js.map +1 -0
  59. package/dist/src/tunnel/gateway-lifecycle.d.ts +3 -1
  60. package/dist/src/tunnel/gateway-lifecycle.js +6 -4
  61. package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
  62. package/dist/src/tunnel/index.d.ts +3 -1
  63. package/dist/src/tunnel/index.js +2 -2
  64. package/dist/src/tunnel/tls-server.js +5 -0
  65. package/dist/src/tunnel/tls-server.js.map +1 -1
  66. package/dist/src/tunnel/tunnel-config.js +11 -1
  67. package/dist/src/tunnel/tunnel-config.js.map +1 -1
  68. package/dist/src/tunnel/tunnel-e2e-config.d.ts +4 -1
  69. package/dist/src/tunnel/tunnel-e2e-config.js +10 -3
  70. package/dist/src/tunnel/tunnel-e2e-config.js.map +1 -1
  71. package/dist/src/tunnel/tunnel-service.d.ts +4 -0
  72. package/dist/src/tunnel/tunnel-service.js +66 -5
  73. package/dist/src/tunnel/tunnel-service.js.map +1 -1
  74. package/dist/src/tunnel/tunnel-types.d.ts +16 -0
  75. package/package.json +3 -3
  76. package/dist/gateway/static/root/assets/index-B5gp15_q.css +0 -1
  77. package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js +0 -3
  78. package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat-config-api-DWmeyjyR.js","names":["useCallback","useEffect","useMemo","useState","ChangeEvent","buildCronFromPickerState","cronExpressionToPickerState","IntervalKind","PickerState","SchedulePickerMode","cn","formControlBorderFocusClass","selectControlBaseClass","MINUTE_VALUES","Array","from","length","_","idx","CronSchedulePickerLabels","scheduleTimeLabel","modeNoRepeat","modeInterval","intervalKindMinutes","intervalKindHours","modeHourly","modeDaily","modeWeekly","modeMonthly","modeCustom","minuteUnit","minuteAtHour","intervalMinutes","intervalHours","hourUnit","dayOfMonth","customCronHint","weekdays","pickerSelectClass","timeInputClass","dateInputClass","numberInputClass","cronTextareaClass","CronSchedulePickerProps","value","onChange","cron","labels","disabled","showHeading","CronSchedulePicker","t0","$","_c","t1","undefined","t2","parsed","mode","setMode","intervalKind","setIntervalKind","onceDate","setOnceDate","setIntervalMinutes","setIntervalHours","minute","setMinute","hour","setHour","weekDays","setWeekDays","setDayOfMonth","rawCron","setRawCron","intervalMinutesDraft","setIntervalMinutesDraft","intervalHoursDraft","setIntervalHoursDraft","t3","t4","p","t5","patch","next","emit","t6","String","t7","padStart","t8","t9","timeValue","t10","e","v","target","hh","mm","split","map","_temp","Number","isNaN","onTimeChange","t11","e_0","next_0","t12","t13","t14","t15","t16","t17","t18","t19","t20","e_1","v_0","t21","e_2","k","e_3","next_1","raw","parseInt","isFinite","raw_0","v_1","Math","min","max","round","e_4","next_2","raw_1","raw_2","v_2","e_5","mm_0","_temp2","t22","t23","t24","e_6","d","_temp3","_temp4","t25","e_7","mm_1","_temp5","t26","modeRow","t27","label","i_0","on","i","next_3","weekRow","t28","e_8","v_3","trim","customBlock","t29","t30","m_0","m","d_0","x","fetchJson","apiUrl","heartbeatMdSwrKey","fetchHeartbeatMdSwr","Promise","res","ok","payload","content","revalidateGatewayConfig","fetchJson","apiUrl","heartbeatMdSwrKey","mutate","HeartbeatSettingsState","isRecord","v","Record","Array","isArray","normalizeHeartbeatFromConfig","config","c","gw","gateway","hb","heartbeat","ahRaw","activeHours","ah","start","end","timezone","enabled","Boolean","intervalMs","Number","isFinite","includeSystemPromptSection","target","targetChatId","prompt","ackMaxChars","isolatedSession","buildHeartbeatPayload","state","p","trim","undefined","patchHeartbeatSettings","Promise","method","body","JSON","stringify","fetchHeartbeatMd","res","ok","payload","content","putHeartbeatMd","triggerHeartbeat","reason","headers"],"sources":["../../../../../web/src/features/scheduling/cron/cron-schedule-picker.tsx","../../../../../web/src/features/settings/heartbeat-md-swr.ts","../../../../../web/src/features/settings/heartbeat-config-api.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, type ChangeEvent } from 'react';\n\nimport {\n buildCronFromPickerState,\n cronExpressionToPickerState,\n type IntervalKind,\n type PickerState,\n type SchedulePickerMode,\n} from '@/features/scheduling/cron/cron-expression';\nimport { cn } from '@/lib/cn';\nimport { formControlBorderFocusClass, selectControlBaseClass } from '@/lib/form-field-width';\n\nexport type { IntervalKind, PickerState, SchedulePickerMode } from '@/features/scheduling/cron/cron-expression';\nexport { buildCronFromPickerState, cronExpressionToPickerState } from '@/features/scheduling/cron/cron-expression';\n\nconst MINUTE_VALUES: readonly number[] = Array.from({ length: 60 }, (_, idx) => idx);\n\nexport type CronSchedulePickerLabels = {\n scheduleTimeLabel: string;\n modeNoRepeat: string;\n modeInterval: string;\n intervalKindMinutes: string;\n intervalKindHours: string;\n modeHourly: string;\n modeDaily: string;\n modeWeekly: string;\n modeMonthly: string;\n modeCustom: string;\n minuteUnit: string;\n minuteAtHour: string;\n intervalMinutes: string;\n intervalHours: string;\n hourUnit: string;\n dayOfMonth: string;\n customCronHint: string;\n weekdays: readonly string[];\n};\n\nconst pickerSelectClass = cn(\n selectControlBaseClass,\n 'min-w-0 shrink text-xs sm:min-w-[7rem] sm:max-w-[11rem]',\n);\n\nconst timeInputClass = cn(\n 'h-9 min-w-[6.5rem] shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-sm text-fg',\n formControlBorderFocusClass,\n 'dark:bg-surface-panel',\n);\n\nconst dateInputClass = cn(\n 'h-9 min-w-[9.5rem] shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-sm text-fg',\n formControlBorderFocusClass,\n);\n\nconst numberInputClass = cn(\n 'h-9 w-14 shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-center text-sm tabular-nums text-fg',\n formControlBorderFocusClass,\n);\n\nconst cronTextareaClass = cn(\n 'min-h-[2.5rem] w-full rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 font-mono text-xs text-fg',\n formControlBorderFocusClass,\n);\n\ntype CronSchedulePickerProps = {\n value: string;\n onChange: (cron: string) => void;\n labels: CronSchedulePickerLabels;\n disabled?: boolean;\n /** When false, hides the top \"Scheduled time\" label (e.g. when wrapped by ScheduleField). */\n showHeading?: boolean;\n};\n\nexport function CronSchedulePicker({\n value,\n onChange,\n labels,\n disabled,\n showHeading = true,\n}: CronSchedulePickerProps) {\n const parsed = useMemo(() => cronExpressionToPickerState(value), [value]);\n\n const [mode, setMode] = useState<SchedulePickerMode>(parsed.mode);\n const [intervalKind, setIntervalKind] = useState<IntervalKind>(parsed.intervalKind);\n const [onceDate, setOnceDate] = useState(parsed.onceDate);\n const [intervalMinutes, setIntervalMinutes] = useState(parsed.intervalMinutes);\n const [intervalHours, setIntervalHours] = useState(parsed.intervalHours);\n const [minute, setMinute] = useState(parsed.minute);\n const [hour, setHour] = useState(parsed.hour);\n const [weekDays, setWeekDays] = useState<boolean[]>(parsed.weekDays);\n const [dayOfMonth, setDayOfMonth] = useState(parsed.dayOfMonth);\n const [rawCron, setRawCron] = useState(parsed.rawCron);\n const [intervalMinutesDraft, setIntervalMinutesDraft] = useState<string | null>(null);\n const [intervalHoursDraft, setIntervalHoursDraft] = useState<string | null>(null);\n\n useEffect(() => {\n const p = cronExpressionToPickerState(value);\n setMode(p.mode);\n setIntervalKind(p.intervalKind);\n setOnceDate(p.onceDate);\n setIntervalMinutes(p.intervalMinutes);\n setIntervalHours(p.intervalHours);\n setMinute(p.minute);\n setHour(p.hour);\n setWeekDays(p.weekDays);\n setDayOfMonth(p.dayOfMonth);\n setRawCron(p.rawCron);\n setIntervalMinutesDraft(null);\n setIntervalHoursDraft(null);\n }, [value]);\n\n const emit = useCallback(\n (patch: Partial<PickerState>) => {\n const next: PickerState = {\n mode,\n intervalKind,\n onceDate,\n intervalMinutes,\n intervalHours,\n minute,\n hour,\n weekDays,\n dayOfMonth,\n rawCron,\n ...patch,\n };\n onChange(buildCronFromPickerState(next));\n },\n [\n mode,\n intervalKind,\n onceDate,\n intervalMinutes,\n intervalHours,\n minute,\n hour,\n weekDays,\n dayOfMonth,\n rawCron,\n onChange,\n ],\n );\n\n const timeValue = `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;\n\n const onTimeChange = (e: ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n if (!v) return;\n const [hh, mm] = v.split(':').map((x) => parseInt(x, 10));\n if (Number.isNaN(hh) || Number.isNaN(mm)) return;\n emit({ minute: mm, hour: hh });\n };\n\n const modeRow = (\n <div className=\"flex min-w-0 flex-nowrap items-center gap-2 overflow-x-auto pb-0.5\">\n <select\n className={pickerSelectClass}\n disabled={disabled}\n value={mode}\n onChange={(e) => {\n const next = e.target.value as SchedulePickerMode;\n setMode(next);\n emit({ mode: next });\n }}\n aria-label={labels.scheduleTimeLabel}\n >\n <option value=\"no_repeat\">{labels.modeNoRepeat}</option>\n <option value=\"interval\">{labels.modeInterval}</option>\n <option value=\"hourly\">{labels.modeHourly}</option>\n <option value=\"daily\">{labels.modeDaily}</option>\n <option value=\"weekly\">{labels.modeWeekly}</option>\n <option value=\"monthly\">{labels.modeMonthly}</option>\n <option value=\"custom\">{labels.modeCustom}</option>\n </select>\n\n {mode === 'no_repeat' && (\n <>\n <input\n type=\"date\"\n disabled={disabled}\n className={dateInputClass}\n value={onceDate}\n onChange={(e) => {\n const v = e.target.value;\n setOnceDate(v);\n emit({ onceDate: v });\n }}\n aria-label={labels.modeNoRepeat}\n />\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n </>\n )}\n\n {mode === 'interval' && (\n <>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[5rem]')}\n disabled={disabled}\n value={intervalKind}\n onChange={(e) => {\n const k = e.target.value as IntervalKind;\n setIntervalKind(k);\n setIntervalMinutesDraft(null);\n setIntervalHoursDraft(null);\n emit({ intervalKind: k });\n }}\n aria-label={labels.modeInterval}\n >\n <option value=\"minutes\">{labels.intervalKindMinutes}</option>\n <option value=\"hours\">{labels.intervalKindHours}</option>\n </select>\n {intervalKind === 'minutes' ? (\n <>\n <input\n type=\"number\"\n min={1}\n max={59}\n disabled={disabled}\n className={numberInputClass}\n value={intervalMinutesDraft ?? String(intervalMinutes)}\n onChange={(e) => {\n const next = e.target.value;\n setIntervalMinutesDraft(next);\n const raw = parseInt(next, 10);\n if (Number.isFinite(raw) && raw >= 1 && raw <= 59) {\n setIntervalMinutes(raw);\n emit({ intervalMinutes: raw });\n }\n }}\n onBlur={() => {\n if (intervalMinutesDraft === null) return;\n const raw = parseInt(intervalMinutesDraft, 10);\n const v =\n !Number.isFinite(raw) || raw < 1\n ? 5\n : Math.min(59, Math.max(1, Math.round(raw)));\n setIntervalMinutes(v);\n emit({ intervalMinutes: v });\n setIntervalMinutesDraft(null);\n }}\n aria-label={labels.intervalMinutes}\n />\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.minuteUnit}</span>\n </>\n ) : (\n <>\n <input\n type=\"number\"\n min={1}\n max={23}\n disabled={disabled}\n className={numberInputClass}\n value={intervalHoursDraft ?? String(intervalHours)}\n onChange={(e) => {\n const next = e.target.value;\n setIntervalHoursDraft(next);\n const raw = parseInt(next, 10);\n if (Number.isFinite(raw) && raw >= 1 && raw <= 23) {\n setIntervalHours(raw);\n emit({ intervalHours: raw });\n }\n }}\n onBlur={() => {\n if (intervalHoursDraft === null) return;\n const raw = parseInt(intervalHoursDraft, 10);\n const v =\n !Number.isFinite(raw) || raw < 1\n ? 2\n : Math.min(23, Math.max(1, Math.round(raw)));\n setIntervalHours(v);\n emit({ intervalHours: v });\n setIntervalHoursDraft(null);\n }}\n aria-label={labels.intervalHours}\n />\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.hourUnit}</span>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[4rem]')}\n disabled={disabled}\n value={minute}\n onChange={(e) => {\n const mm = parseInt(e.target.value, 10);\n setMinute(mm);\n emit({ minute: mm });\n }}\n aria-label={labels.minuteAtHour}\n >\n {MINUTE_VALUES.map((m) => (\n <option key={m} value={m}>\n {String(m).padStart(2, '0')}\n </option>\n ))}\n </select>\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.minuteUnit}</span>\n </>\n )}\n </>\n )}\n\n {mode === 'daily' && (\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n )}\n\n {mode === 'weekly' && (\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n )}\n\n {mode === 'monthly' && (\n <>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[4.5rem]')}\n disabled={disabled}\n value={dayOfMonth}\n onChange={(e) => {\n const d = parseInt(e.target.value, 10);\n setDayOfMonth(d);\n emit({ dayOfMonth: d });\n }}\n aria-label={labels.dayOfMonth}\n >\n {Array.from({ length: 31 }, (_, i) => i + 1).map((d) => (\n <option key={d} value={d}>\n {d}\n </option>\n ))}\n </select>\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n </>\n )}\n\n {mode === 'hourly' && (\n <>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[4rem]')}\n disabled={disabled}\n value={minute}\n onChange={(e) => {\n const mm = parseInt(e.target.value, 10);\n setMinute(mm);\n emit({ minute: mm });\n }}\n aria-label={labels.minuteAtHour}\n >\n {MINUTE_VALUES.map((m) => (\n <option key={m} value={m}>\n {String(m).padStart(2, '0')}\n </option>\n ))}\n </select>\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.minuteUnit}</span>\n </>\n )}\n </div>\n );\n\n const weekRow =\n mode === 'weekly' ? (\n <div className=\"flex flex-wrap gap-1.5 pt-1\" role=\"group\" aria-label={labels.modeWeekly}>\n {labels.weekdays.map((label, i) => {\n const on = weekDays[i];\n return (\n <button\n key={label}\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'flex size-9 select-none items-center justify-center rounded-full border text-xs font-medium transition-colors',\n on\n ? 'border-fg bg-fg text-surface-panel'\n : 'border-edge-subtle bg-surface-panel text-fg hover:border-edge',\n )}\n aria-pressed={on}\n onClick={() => {\n const next = [...weekDays];\n next[i] = !next[i];\n setWeekDays(next);\n emit({ weekDays: next });\n }}\n >\n {label}\n </button>\n );\n })}\n </div>\n ) : null;\n\n const customBlock =\n mode === 'custom' ? (\n <div className=\"pt-1\">\n <textarea\n disabled={disabled}\n className={cronTextareaClass}\n rows={2}\n spellCheck={false}\n value={rawCron}\n placeholder=\"*/5 * * * *\"\n onChange={(e) => {\n const v = e.target.value;\n setRawCron(v);\n onChange(v.trim() || '*/5 * * * *');\n }}\n aria-label={labels.modeCustom}\n />\n <p className=\"mt-1 text-xs text-fg-muted\">{labels.customCronHint}</p>\n </div>\n ) : null;\n\n return (\n <div className=\"flex flex-col gap-2\">\n {showHeading ? (\n <span className=\"text-xs font-medium text-fg-muted\">{labels.scheduleTimeLabel}</span>\n ) : null}\n {modeRow}\n {weekRow}\n {customBlock}\n </div>\n );\n}\n","import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport function heartbeatMdSwrKey(): string {\n return apiUrl('/api/workspace/heartbeat-md');\n}\n\nexport async function fetchHeartbeatMdSwr(): Promise<string> {\n const res = await fetchJson<{ ok?: boolean; payload?: { content?: string } }>(heartbeatMdSwrKey());\n return typeof res.payload?.content === 'string' ? res.payload.content : '';\n}\n","import { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\nimport { heartbeatMdSwrKey } from '@/features/settings/heartbeat-md-swr';\nimport { mutate } from 'swr';\n\nimport type { HeartbeatSettingsState } from './heartbeat-settings.types';\n\nexport type { HeartbeatSettingsState } from './heartbeat-settings.types';\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === 'object' && !Array.isArray(v);\n}\n\nexport function normalizeHeartbeatFromConfig(config: unknown): HeartbeatSettingsState {\n const c = isRecord(config) ? config : {};\n const gw = isRecord(c.gateway) ? c.gateway : {};\n const hb = isRecord(gw.heartbeat) ? gw.heartbeat : {};\n const ahRaw = hb.activeHours;\n const ah = isRecord(ahRaw) ? ahRaw : null;\n const activeHours =\n ah && typeof ah.start === 'string' && typeof ah.end === 'string' && ah.start && ah.end\n ? {\n start: ah.start,\n end: ah.end,\n timezone: typeof ah.timezone === 'string' ? ah.timezone : '',\n }\n : null;\n return {\n enabled: Boolean(hb.enabled ?? true),\n intervalMs: typeof hb.intervalMs === 'number' && Number.isFinite(hb.intervalMs) ? hb.intervalMs : 1_800_000,\n includeSystemPromptSection: hb.includeSystemPromptSection === true,\n target: typeof hb.target === 'string' ? hb.target : '',\n targetChatId: typeof hb.targetChatId === 'string' ? hb.targetChatId : '',\n prompt: typeof hb.prompt === 'string' ? hb.prompt : '',\n ackMaxChars:\n typeof hb.ackMaxChars === 'number' && Number.isFinite(hb.ackMaxChars) ? hb.ackMaxChars : '',\n isolatedSession: Boolean(hb.isolatedSession),\n activeHours,\n };\n}\n\nfunction buildHeartbeatPayload(state: HeartbeatSettingsState): Record<string, unknown> {\n const p: Record<string, unknown> = {\n enabled: state.enabled,\n intervalMs: state.intervalMs,\n includeSystemPromptSection: state.includeSystemPromptSection,\n };\n if (state.target.trim()) p.target = state.target.trim();\n else p.target = null;\n if (state.targetChatId.trim()) p.targetChatId = state.targetChatId.trim();\n else p.targetChatId = null;\n if (state.prompt.trim()) p.prompt = state.prompt.trim();\n else p.prompt = null;\n if (state.ackMaxChars === '' || state.ackMaxChars === undefined) {\n p.ackMaxChars = null;\n } else {\n p.ackMaxChars = state.ackMaxChars;\n }\n if (state.isolatedSession) p.isolatedSession = true;\n else p.isolatedSession = null;\n if (state.activeHours?.start?.trim() && state.activeHours?.end?.trim()) {\n p.activeHours = {\n start: state.activeHours.start.trim(),\n end: state.activeHours.end.trim(),\n ...(state.activeHours.timezone.trim()\n ? { timezone: state.activeHours.timezone.trim() }\n : {}),\n };\n } else {\n p.activeHours = null;\n }\n return p;\n}\n\nexport async function patchHeartbeatSettings(state: HeartbeatSettingsState): Promise<void> {\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({\n gateway: {\n heartbeat: buildHeartbeatPayload(state),\n },\n }),\n });\n void revalidateGatewayConfig();\n}\n\nexport async function fetchHeartbeatMd(): Promise<string> {\n const res = await fetchJson<{ ok?: boolean; payload?: { content?: string } }>(\n apiUrl('/api/workspace/heartbeat-md'),\n );\n return typeof res.payload?.content === 'string' ? res.payload.content : '';\n}\n\nexport async function putHeartbeatMd(content: string): Promise<void> {\n await fetchJson(apiUrl('/api/workspace/heartbeat-md'), {\n method: 'PUT',\n body: JSON.stringify({ content }),\n });\n void mutate(heartbeatMdSwrKey());\n}\n\n/** Queue one heartbeat run (same path as the interval timer). */\nexport async function triggerHeartbeat(reason?: string): Promise<void> {\n await fetchJson(apiUrl('/api/heartbeat/trigger'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(reason ? { reason } : {}),\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"heartbeat-config-api-P5zdbIBw.js","names":["useCallback","useEffect","useMemo","useState","ChangeEvent","buildCronFromPickerState","cronExpressionToPickerState","IntervalKind","PickerState","SchedulePickerMode","cn","formControlBorderFocusClass","selectControlBaseClass","MINUTE_VALUES","Array","from","length","_","idx","CronSchedulePickerLabels","scheduleTimeLabel","modeNoRepeat","modeInterval","intervalKindMinutes","intervalKindHours","modeHourly","modeDaily","modeWeekly","modeMonthly","modeCustom","minuteUnit","minuteAtHour","intervalMinutes","intervalHours","hourUnit","dayOfMonth","customCronHint","weekdays","pickerSelectClass","timeInputClass","dateInputClass","numberInputClass","cronTextareaClass","CronSchedulePickerProps","value","onChange","cron","labels","disabled","showHeading","CronSchedulePicker","t0","$","_c","t1","undefined","t2","parsed","mode","setMode","intervalKind","setIntervalKind","onceDate","setOnceDate","setIntervalMinutes","setIntervalHours","minute","setMinute","hour","setHour","weekDays","setWeekDays","setDayOfMonth","rawCron","setRawCron","intervalMinutesDraft","setIntervalMinutesDraft","intervalHoursDraft","setIntervalHoursDraft","t3","t4","p","t5","patch","next","emit","t6","String","t7","padStart","t8","t9","timeValue","t10","e","v","target","hh","mm","split","map","_temp","Number","isNaN","onTimeChange","t11","e_0","next_0","t12","t13","t14","t15","t16","t17","t18","t19","t20","e_1","v_0","t21","e_2","k","e_3","next_1","raw","parseInt","isFinite","raw_0","v_1","Math","min","max","round","e_4","next_2","raw_1","raw_2","v_2","e_5","mm_0","_temp2","t22","t23","t24","e_6","d","_temp3","_temp4","t25","e_7","mm_1","_temp5","t26","modeRow","t27","label","i_0","on","i","next_3","weekRow","t28","e_8","v_3","trim","customBlock","t29","t30","m_0","m","d_0","x","fetchJson","apiUrl","heartbeatMdSwrKey","fetchHeartbeatMdSwr","Promise","res","ok","payload","content","revalidateGatewayConfig","fetchJson","apiUrl","heartbeatMdSwrKey","mutate","HeartbeatSettingsState","isRecord","v","Record","Array","isArray","normalizeHeartbeatFromConfig","config","c","gw","gateway","hb","heartbeat","ahRaw","activeHours","ah","start","end","timezone","enabled","Boolean","intervalMs","Number","isFinite","includeSystemPromptSection","target","targetChatId","prompt","ackMaxChars","isolatedSession","buildHeartbeatPayload","state","p","trim","undefined","patchHeartbeatSettings","Promise","method","body","JSON","stringify","fetchHeartbeatMd","res","ok","payload","content","putHeartbeatMd","triggerHeartbeat","reason","headers"],"sources":["../../../../../web/src/features/scheduling/cron/cron-schedule-picker.tsx","../../../../../web/src/features/settings/heartbeat-md-swr.ts","../../../../../web/src/features/settings/heartbeat-config-api.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, type ChangeEvent } from 'react';\n\nimport {\n buildCronFromPickerState,\n cronExpressionToPickerState,\n type IntervalKind,\n type PickerState,\n type SchedulePickerMode,\n} from '@/features/scheduling/cron/cron-expression';\nimport { cn } from '@/lib/cn';\nimport { formControlBorderFocusClass, selectControlBaseClass } from '@/lib/form-field-width';\n\nexport type { IntervalKind, PickerState, SchedulePickerMode } from '@/features/scheduling/cron/cron-expression';\nexport { buildCronFromPickerState, cronExpressionToPickerState } from '@/features/scheduling/cron/cron-expression';\n\nconst MINUTE_VALUES: readonly number[] = Array.from({ length: 60 }, (_, idx) => idx);\n\nexport type CronSchedulePickerLabels = {\n scheduleTimeLabel: string;\n modeNoRepeat: string;\n modeInterval: string;\n intervalKindMinutes: string;\n intervalKindHours: string;\n modeHourly: string;\n modeDaily: string;\n modeWeekly: string;\n modeMonthly: string;\n modeCustom: string;\n minuteUnit: string;\n minuteAtHour: string;\n intervalMinutes: string;\n intervalHours: string;\n hourUnit: string;\n dayOfMonth: string;\n customCronHint: string;\n weekdays: readonly string[];\n};\n\nconst pickerSelectClass = cn(\n selectControlBaseClass,\n 'min-w-0 shrink text-xs sm:min-w-[7rem] sm:max-w-[11rem]',\n);\n\nconst timeInputClass = cn(\n 'h-9 min-w-[6.5rem] shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-sm text-fg',\n formControlBorderFocusClass,\n 'dark:bg-surface-panel',\n);\n\nconst dateInputClass = cn(\n 'h-9 min-w-[9.5rem] shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-sm text-fg',\n formControlBorderFocusClass,\n);\n\nconst numberInputClass = cn(\n 'h-9 w-14 shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-center text-sm tabular-nums text-fg',\n formControlBorderFocusClass,\n);\n\nconst cronTextareaClass = cn(\n 'min-h-[2.5rem] w-full rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 font-mono text-xs text-fg',\n formControlBorderFocusClass,\n);\n\ntype CronSchedulePickerProps = {\n value: string;\n onChange: (cron: string) => void;\n labels: CronSchedulePickerLabels;\n disabled?: boolean;\n /** When false, hides the top \"Scheduled time\" label (e.g. when wrapped by ScheduleField). */\n showHeading?: boolean;\n};\n\nexport function CronSchedulePicker({\n value,\n onChange,\n labels,\n disabled,\n showHeading = true,\n}: CronSchedulePickerProps) {\n const parsed = useMemo(() => cronExpressionToPickerState(value), [value]);\n\n const [mode, setMode] = useState<SchedulePickerMode>(parsed.mode);\n const [intervalKind, setIntervalKind] = useState<IntervalKind>(parsed.intervalKind);\n const [onceDate, setOnceDate] = useState(parsed.onceDate);\n const [intervalMinutes, setIntervalMinutes] = useState(parsed.intervalMinutes);\n const [intervalHours, setIntervalHours] = useState(parsed.intervalHours);\n const [minute, setMinute] = useState(parsed.minute);\n const [hour, setHour] = useState(parsed.hour);\n const [weekDays, setWeekDays] = useState<boolean[]>(parsed.weekDays);\n const [dayOfMonth, setDayOfMonth] = useState(parsed.dayOfMonth);\n const [rawCron, setRawCron] = useState(parsed.rawCron);\n const [intervalMinutesDraft, setIntervalMinutesDraft] = useState<string | null>(null);\n const [intervalHoursDraft, setIntervalHoursDraft] = useState<string | null>(null);\n\n useEffect(() => {\n const p = cronExpressionToPickerState(value);\n setMode(p.mode);\n setIntervalKind(p.intervalKind);\n setOnceDate(p.onceDate);\n setIntervalMinutes(p.intervalMinutes);\n setIntervalHours(p.intervalHours);\n setMinute(p.minute);\n setHour(p.hour);\n setWeekDays(p.weekDays);\n setDayOfMonth(p.dayOfMonth);\n setRawCron(p.rawCron);\n setIntervalMinutesDraft(null);\n setIntervalHoursDraft(null);\n }, [value]);\n\n const emit = useCallback(\n (patch: Partial<PickerState>) => {\n const next: PickerState = {\n mode,\n intervalKind,\n onceDate,\n intervalMinutes,\n intervalHours,\n minute,\n hour,\n weekDays,\n dayOfMonth,\n rawCron,\n ...patch,\n };\n onChange(buildCronFromPickerState(next));\n },\n [\n mode,\n intervalKind,\n onceDate,\n intervalMinutes,\n intervalHours,\n minute,\n hour,\n weekDays,\n dayOfMonth,\n rawCron,\n onChange,\n ],\n );\n\n const timeValue = `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;\n\n const onTimeChange = (e: ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n if (!v) return;\n const [hh, mm] = v.split(':').map((x) => parseInt(x, 10));\n if (Number.isNaN(hh) || Number.isNaN(mm)) return;\n emit({ minute: mm, hour: hh });\n };\n\n const modeRow = (\n <div className=\"flex min-w-0 flex-nowrap items-center gap-2 overflow-x-auto pb-0.5\">\n <select\n className={pickerSelectClass}\n disabled={disabled}\n value={mode}\n onChange={(e) => {\n const next = e.target.value as SchedulePickerMode;\n setMode(next);\n emit({ mode: next });\n }}\n aria-label={labels.scheduleTimeLabel}\n >\n <option value=\"no_repeat\">{labels.modeNoRepeat}</option>\n <option value=\"interval\">{labels.modeInterval}</option>\n <option value=\"hourly\">{labels.modeHourly}</option>\n <option value=\"daily\">{labels.modeDaily}</option>\n <option value=\"weekly\">{labels.modeWeekly}</option>\n <option value=\"monthly\">{labels.modeMonthly}</option>\n <option value=\"custom\">{labels.modeCustom}</option>\n </select>\n\n {mode === 'no_repeat' && (\n <>\n <input\n type=\"date\"\n disabled={disabled}\n className={dateInputClass}\n value={onceDate}\n onChange={(e) => {\n const v = e.target.value;\n setOnceDate(v);\n emit({ onceDate: v });\n }}\n aria-label={labels.modeNoRepeat}\n />\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n </>\n )}\n\n {mode === 'interval' && (\n <>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[5rem]')}\n disabled={disabled}\n value={intervalKind}\n onChange={(e) => {\n const k = e.target.value as IntervalKind;\n setIntervalKind(k);\n setIntervalMinutesDraft(null);\n setIntervalHoursDraft(null);\n emit({ intervalKind: k });\n }}\n aria-label={labels.modeInterval}\n >\n <option value=\"minutes\">{labels.intervalKindMinutes}</option>\n <option value=\"hours\">{labels.intervalKindHours}</option>\n </select>\n {intervalKind === 'minutes' ? (\n <>\n <input\n type=\"number\"\n min={1}\n max={59}\n disabled={disabled}\n className={numberInputClass}\n value={intervalMinutesDraft ?? String(intervalMinutes)}\n onChange={(e) => {\n const next = e.target.value;\n setIntervalMinutesDraft(next);\n const raw = parseInt(next, 10);\n if (Number.isFinite(raw) && raw >= 1 && raw <= 59) {\n setIntervalMinutes(raw);\n emit({ intervalMinutes: raw });\n }\n }}\n onBlur={() => {\n if (intervalMinutesDraft === null) return;\n const raw = parseInt(intervalMinutesDraft, 10);\n const v =\n !Number.isFinite(raw) || raw < 1\n ? 5\n : Math.min(59, Math.max(1, Math.round(raw)));\n setIntervalMinutes(v);\n emit({ intervalMinutes: v });\n setIntervalMinutesDraft(null);\n }}\n aria-label={labels.intervalMinutes}\n />\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.minuteUnit}</span>\n </>\n ) : (\n <>\n <input\n type=\"number\"\n min={1}\n max={23}\n disabled={disabled}\n className={numberInputClass}\n value={intervalHoursDraft ?? String(intervalHours)}\n onChange={(e) => {\n const next = e.target.value;\n setIntervalHoursDraft(next);\n const raw = parseInt(next, 10);\n if (Number.isFinite(raw) && raw >= 1 && raw <= 23) {\n setIntervalHours(raw);\n emit({ intervalHours: raw });\n }\n }}\n onBlur={() => {\n if (intervalHoursDraft === null) return;\n const raw = parseInt(intervalHoursDraft, 10);\n const v =\n !Number.isFinite(raw) || raw < 1\n ? 2\n : Math.min(23, Math.max(1, Math.round(raw)));\n setIntervalHours(v);\n emit({ intervalHours: v });\n setIntervalHoursDraft(null);\n }}\n aria-label={labels.intervalHours}\n />\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.hourUnit}</span>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[4rem]')}\n disabled={disabled}\n value={minute}\n onChange={(e) => {\n const mm = parseInt(e.target.value, 10);\n setMinute(mm);\n emit({ minute: mm });\n }}\n aria-label={labels.minuteAtHour}\n >\n {MINUTE_VALUES.map((m) => (\n <option key={m} value={m}>\n {String(m).padStart(2, '0')}\n </option>\n ))}\n </select>\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.minuteUnit}</span>\n </>\n )}\n </>\n )}\n\n {mode === 'daily' && (\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n )}\n\n {mode === 'weekly' && (\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n )}\n\n {mode === 'monthly' && (\n <>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[4.5rem]')}\n disabled={disabled}\n value={dayOfMonth}\n onChange={(e) => {\n const d = parseInt(e.target.value, 10);\n setDayOfMonth(d);\n emit({ dayOfMonth: d });\n }}\n aria-label={labels.dayOfMonth}\n >\n {Array.from({ length: 31 }, (_, i) => i + 1).map((d) => (\n <option key={d} value={d}>\n {d}\n </option>\n ))}\n </select>\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={timeValue}\n onChange={onTimeChange}\n aria-label={labels.scheduleTimeLabel}\n />\n </>\n )}\n\n {mode === 'hourly' && (\n <>\n <select\n className={cn(pickerSelectClass, 'w-auto min-w-[4rem]')}\n disabled={disabled}\n value={minute}\n onChange={(e) => {\n const mm = parseInt(e.target.value, 10);\n setMinute(mm);\n emit({ minute: mm });\n }}\n aria-label={labels.minuteAtHour}\n >\n {MINUTE_VALUES.map((m) => (\n <option key={m} value={m}>\n {String(m).padStart(2, '0')}\n </option>\n ))}\n </select>\n <span className=\"shrink-0 text-sm text-fg-muted\">{labels.minuteUnit}</span>\n </>\n )}\n </div>\n );\n\n const weekRow =\n mode === 'weekly' ? (\n <div className=\"flex flex-wrap gap-1.5 pt-1\" role=\"group\" aria-label={labels.modeWeekly}>\n {labels.weekdays.map((label, i) => {\n const on = weekDays[i];\n return (\n <button\n key={label}\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'flex size-9 select-none items-center justify-center rounded-full border text-xs font-medium transition-colors',\n on\n ? 'border-fg bg-fg text-surface-panel'\n : 'border-edge-subtle bg-surface-panel text-fg hover:border-edge',\n )}\n aria-pressed={on}\n onClick={() => {\n const next = [...weekDays];\n next[i] = !next[i];\n setWeekDays(next);\n emit({ weekDays: next });\n }}\n >\n {label}\n </button>\n );\n })}\n </div>\n ) : null;\n\n const customBlock =\n mode === 'custom' ? (\n <div className=\"pt-1\">\n <textarea\n disabled={disabled}\n className={cronTextareaClass}\n rows={2}\n spellCheck={false}\n value={rawCron}\n placeholder=\"*/5 * * * *\"\n onChange={(e) => {\n const v = e.target.value;\n setRawCron(v);\n onChange(v.trim() || '*/5 * * * *');\n }}\n aria-label={labels.modeCustom}\n />\n <p className=\"mt-1 text-xs text-fg-muted\">{labels.customCronHint}</p>\n </div>\n ) : null;\n\n return (\n <div className=\"flex flex-col gap-2\">\n {showHeading ? (\n <span className=\"text-xs font-medium text-fg-muted\">{labels.scheduleTimeLabel}</span>\n ) : null}\n {modeRow}\n {weekRow}\n {customBlock}\n </div>\n );\n}\n","import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport function heartbeatMdSwrKey(): string {\n return apiUrl('/api/workspace/heartbeat-md');\n}\n\nexport async function fetchHeartbeatMdSwr(): Promise<string> {\n const res = await fetchJson<{ ok?: boolean; payload?: { content?: string } }>(heartbeatMdSwrKey());\n return typeof res.payload?.content === 'string' ? res.payload.content : '';\n}\n","import { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\nimport { heartbeatMdSwrKey } from '@/features/settings/heartbeat-md-swr';\nimport { mutate } from 'swr';\n\nimport type { HeartbeatSettingsState } from './heartbeat-settings.types';\n\nexport type { HeartbeatSettingsState } from './heartbeat-settings.types';\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === 'object' && !Array.isArray(v);\n}\n\nexport function normalizeHeartbeatFromConfig(config: unknown): HeartbeatSettingsState {\n const c = isRecord(config) ? config : {};\n const gw = isRecord(c.gateway) ? c.gateway : {};\n const hb = isRecord(gw.heartbeat) ? gw.heartbeat : {};\n const ahRaw = hb.activeHours;\n const ah = isRecord(ahRaw) ? ahRaw : null;\n const activeHours =\n ah && typeof ah.start === 'string' && typeof ah.end === 'string' && ah.start && ah.end\n ? {\n start: ah.start,\n end: ah.end,\n timezone: typeof ah.timezone === 'string' ? ah.timezone : '',\n }\n : null;\n return {\n enabled: Boolean(hb.enabled ?? true),\n intervalMs: typeof hb.intervalMs === 'number' && Number.isFinite(hb.intervalMs) ? hb.intervalMs : 1_800_000,\n includeSystemPromptSection: hb.includeSystemPromptSection === true,\n target: typeof hb.target === 'string' ? hb.target : '',\n targetChatId: typeof hb.targetChatId === 'string' ? hb.targetChatId : '',\n prompt: typeof hb.prompt === 'string' ? hb.prompt : '',\n ackMaxChars:\n typeof hb.ackMaxChars === 'number' && Number.isFinite(hb.ackMaxChars) ? hb.ackMaxChars : '',\n isolatedSession: Boolean(hb.isolatedSession),\n activeHours,\n };\n}\n\nfunction buildHeartbeatPayload(state: HeartbeatSettingsState): Record<string, unknown> {\n const p: Record<string, unknown> = {\n enabled: state.enabled,\n intervalMs: state.intervalMs,\n includeSystemPromptSection: state.includeSystemPromptSection,\n };\n if (state.target.trim()) p.target = state.target.trim();\n else p.target = null;\n if (state.targetChatId.trim()) p.targetChatId = state.targetChatId.trim();\n else p.targetChatId = null;\n if (state.prompt.trim()) p.prompt = state.prompt.trim();\n else p.prompt = null;\n if (state.ackMaxChars === '' || state.ackMaxChars === undefined) {\n p.ackMaxChars = null;\n } else {\n p.ackMaxChars = state.ackMaxChars;\n }\n if (state.isolatedSession) p.isolatedSession = true;\n else p.isolatedSession = null;\n if (state.activeHours?.start?.trim() && state.activeHours?.end?.trim()) {\n p.activeHours = {\n start: state.activeHours.start.trim(),\n end: state.activeHours.end.trim(),\n ...(state.activeHours.timezone.trim()\n ? { timezone: state.activeHours.timezone.trim() }\n : {}),\n };\n } else {\n p.activeHours = null;\n }\n return p;\n}\n\nexport async function patchHeartbeatSettings(state: HeartbeatSettingsState): Promise<void> {\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({\n gateway: {\n heartbeat: buildHeartbeatPayload(state),\n },\n }),\n });\n void revalidateGatewayConfig();\n}\n\nexport async function fetchHeartbeatMd(): Promise<string> {\n const res = await fetchJson<{ ok?: boolean; payload?: { content?: string } }>(\n apiUrl('/api/workspace/heartbeat-md'),\n );\n return typeof res.payload?.content === 'string' ? res.payload.content : '';\n}\n\nexport async function putHeartbeatMd(content: string): Promise<void> {\n await fetchJson(apiUrl('/api/workspace/heartbeat-md'), {\n method: 'PUT',\n body: JSON.stringify({ content }),\n });\n void mutate(heartbeatMdSwrKey());\n}\n\n/** Queue one heartbeat run (same path as the interval timer). */\nexport async function triggerHeartbeat(reason?: string): Promise<void> {\n await fetchJson(apiUrl('/api/heartbeat/trigger'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(reason ? { reason } : {}),\n });\n}\n"],"mappings":"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"}