wednesdayai 0.6.1-dev.27 → 0.6.1-dev.28
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/{agent-CQhgyAis.js → agent-BDuI5Zvc.js} +26 -26
- package/dist/{agent-Y_2aRBZH.js → agent-BW-Yan08.js} +11 -11
- package/dist/{agent-turn-runner-faZvyYiv.js → agent-turn-runner-BfXiXNe2.js} +6 -6
- package/dist/{agent-turn-runner-ClBJoKQQ.js → agent-turn-runner-CHm-I95T.js} +5 -5
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +32 -32
- package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
- package/dist/bundled/command-logger/handler.js +2 -2
- package/dist/bundled/session-journal/handler.js +31 -31
- package/dist/bundled/session-memory/handler.js +31 -31
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{chrome-B3nEcesV.js → chrome-CKy31bWh.js} +32 -32
- package/dist/{chrome-DLbFTDQE.js → chrome-Ct9vb6SC.js} +12 -12
- package/dist/{command-queue-BSbitNdP.js → command-queue-AIWqKnVD.js} +1 -1
- package/dist/{command-queue-BijpV9rd.js → command-queue-CNStMA4Y.js} +1 -1
- package/dist/control-ui-v2/assets/{AgentsView-DVvw6PTU.js → AgentsView-3Qsr3xnf.js} +1 -1
- package/dist/control-ui-v2/assets/{AutomationsView-CxjmPRdI.js → AutomationsView-DkBzPKKQ.js} +1 -1
- package/dist/control-ui-v2/assets/Badge-CB5TWfdz.js +1 -0
- package/dist/control-ui-v2/assets/{Button-DL76WqX4.js → Button-CGdLofSY.js} +1 -1
- package/dist/control-ui-v2/assets/{ChannelsView-BDcVzQIM.js → ChannelsView-BRb8eYyh.js} +1 -1
- package/dist/control-ui-v2/assets/{ConfigForm-CbvOdyOA.js → ConfigForm-D8_bqW8x.js} +1 -1
- package/dist/control-ui-v2/assets/{ConfirmDialog-DGHQXUr5.js → ConfirmDialog-B7aotBjN.js} +1 -1
- package/dist/control-ui-v2/assets/{DataTable-lEkd1R85.js → DataTable-CSi930kO.js} +1 -1
- package/dist/control-ui-v2/assets/{DebugView-CHHmLv3x.js → DebugView-8cZqh6FQ.js} +1 -1
- package/dist/control-ui-v2/assets/{Dialog-rIrrCPSu.js → Dialog-CQE8Pvh6.js} +1 -1
- package/dist/control-ui-v2/assets/{DreamsView-uQSpm1S4.js → DreamsView-B0KzP2OM.js} +1 -1
- package/dist/control-ui-v2/assets/{EntityLink-AEBgCNQX.js → EntityLink-BO2oG3y8.js} +1 -1
- package/dist/control-ui-v2/assets/{FilterPills-HxAXXDO8.js → FilterPills-9pNaAyrL.js} +1 -1
- package/dist/control-ui-v2/assets/{InstancesView-Svk7C7AX.js → InstancesView-BbunCxYg.js} +1 -1
- package/dist/control-ui-v2/assets/{LearningView-CWqWycCM.js → LearningView-CEqD48Ll.js} +1 -1
- package/dist/control-ui-v2/assets/{LogsView-D7kaR6es.js → LogsView-fcI0vxkz.js} +1 -1
- package/dist/control-ui-v2/assets/{NodesView-CqKA1XAX.js → NodesView-BONHE7EP.js} +1 -1
- package/dist/control-ui-v2/assets/{OverviewView-Dz3YnxWP.js → OverviewView-BpynJnjy.js} +1 -1
- package/dist/control-ui-v2/assets/{Panel-CyfpswdJ.js → Panel-9wOynsWc.js} +1 -1
- package/dist/control-ui-v2/assets/{PluginMount-C1HeSpS9.js → PluginMount-6N20-nhI.js} +1 -1
- package/dist/control-ui-v2/assets/{PluginPageView-Dap5OwAt.js → PluginPageView-DZ3bh805.js} +1 -1
- package/dist/control-ui-v2/assets/{PluginPanels-DdDZQ_Dn.js → PluginPanels-DulRlgcm.js} +1 -1
- package/dist/control-ui-v2/assets/{RunsView-CQXkKsIZ.js → RunsView-dcBTwtFX.js} +1 -1
- package/dist/control-ui-v2/assets/{SessionsView-Bs9UqOQr.js → SessionsView-CZuTvckb.js} +1 -1
- package/dist/control-ui-v2/assets/{SettingsView-BhorzAw5.js → SettingsView-BTcubWvr.js} +1 -1
- package/dist/control-ui-v2/assets/{SkillsView-ClzUjPU-.js → SkillsView-Bj7lvW23.js} +1 -1
- package/dist/control-ui-v2/assets/{Stat-BruDi6qc.js → Stat-BZwg1PGE.js} +1 -1
- package/dist/control-ui-v2/assets/{StatusDot-Cij-6nH8.js → StatusDot-DHhJ1VpB.js} +1 -1
- package/dist/control-ui-v2/assets/{StorageView-BYgvfNcg.js → StorageView-B5cF1lld.js} +1 -1
- package/dist/control-ui-v2/assets/{UpdatedAgo-DWSnE4WG.js → UpdatedAgo-Dw3kxb2x.js} +1 -1
- package/dist/control-ui-v2/assets/{UsageView-C_ezU9jy.js → UsageView-DBZ1WkEI.js} +1 -1
- package/dist/control-ui-v2/assets/{config-store-27hOx1yp.js → config-store-XvvVJ8Fq.js} +1 -1
- package/dist/control-ui-v2/assets/{format-dlOOV12I.js → format-CGs6a1G6.js} +1 -1
- package/dist/control-ui-v2/assets/gateway-features-BZH74_Oc.js +1 -0
- package/dist/control-ui-v2/assets/{index-OijNknZs.js → index-BvXiY83i.js} +1 -1
- package/dist/control-ui-v2/assets/{links-C1sAzVEH.js → links-DlVrQOFC.js} +2 -2
- package/dist/control-ui-v2/assets/{run-rows-BYCIH1Sn.js → run-rows-Au2UUkD7.js} +1 -1
- package/dist/control-ui-v2/assets/{runs-store-DLIlHRM6.js → runs-store-DXgNPFWM.js} +1 -1
- package/dist/control-ui-v2/assets/{use-gateway-query-CF94JYnM.js → use-gateway-query-D25QZANO.js} +1 -1
- package/dist/control-ui-v2/index.html +7 -7
- package/dist/{deliver-CY4Fs4RX.js → deliver-DsuMPE0S.js} +28 -28
- package/dist/{deliver-xfGDp6XD.js → deliver-DxVojbH7.js} +6 -6
- package/dist/{diagnostic-S8OX1Eq2.js → diagnostic-C4pLNG6a.js} +1 -1
- package/dist/{diagnostic-BZYYYnMx.js → diagnostic-DJ11ZJIJ.js} +3 -3
- package/dist/{errors-BRYMqzPb.js → errors-0-at0aYV.js} +1 -1
- package/dist/extensionAPI.js +24 -24
- package/dist/{fences-Dtk43Q2a.js → fences-Z8d1dj8p.js} +16 -16
- package/dist/{fences-DbKcVN_n.js → fences-j5vzXLXf.js} +1 -1
- package/dist/{fetch-guard-UCuiKQ5E.js → fetch-guard-BQ-NMG7L.js} +2 -2
- package/dist/{fetch-guard-DuBGo4VE.js → fetch-guard-BaBd9ZVm.js} +2 -2
- package/dist/{frontmatter-DHBTRDiB.js → frontmatter-CzhUc9Ri.js} +5 -5
- package/dist/{fs-safe-Bk4Thq7a.js → fs-safe-Bd1xxVwv.js} +1 -1
- package/dist/{fs-safe-CyG0wflg.js → fs-safe-DMWtsz4J.js} +26 -26
- package/dist/{legacy-names-6uH6aLhq.js → legacy-names-chsmo2vs.js} +26 -26
- package/dist/llm-slug-generator.js +31 -31
- package/dist/{manager-BvLLls5L.js → manager-B4xc1xN6.js} +16 -16
- package/dist/{manager-Cf3W8LKj.js → manager-CD-sBxdS.js} +3 -3
- package/dist/{model-selection-Ca4WCV4n.js → model-selection-CYS--Nqz.js} +1 -1
- package/dist/{model-selection-CbMZx9fR.js → model-selection-Ds5bEVQ2.js} +82 -82
- package/dist/{nudge-DelcKR7z.js → nudge-CKFTN2YI.js} +9 -9
- package/dist/{nudge-Dd9wU1K5.js → nudge-DZuNGDE_.js} +32 -32
- package/dist/{outbound-attachment-CKATrxgO.js → outbound-attachment-BsEApkFu.js} +9 -9
- package/dist/{outbound-attachment-Btl5f-Lu.js → outbound-attachment-DHLTkCuI.js} +4 -4
- package/dist/{pi-embedded-ApthdT0k.js → pi-embedded-C8SqFziv.js} +40 -40
- package/dist/{pi-embedded-D-4wht-f.js → pi-embedded-yXKiYEGf.js} +229 -229
- package/dist/{pi-model-discovery-Dgbp4zjx.js → pi-model-discovery-CtfGh_up.js} +7 -7
- package/dist/{pi-model-discovery-D-D_mngz.js → pi-model-discovery-De5Z6lro.js} +1 -1
- package/dist/{proxy-env-v_oj7Urd.js → proxy-env-D4WYaw6X.js} +1 -1
- package/dist/{proxy-env-BRG1LWK1.js → proxy-env-DPCNy_X3.js} +1 -1
- package/dist/{pw-ai-BH-MmrGa.js → pw-ai-BmuDO1HM.js} +5 -5
- package/dist/{pw-ai-DK4N7_nV.js → pw-ai-ohfJZ9jX.js} +11 -11
- package/dist/{qmd-manager-Cdz2xlNp.js → qmd-manager-2dro3Ccn.js} +9 -9
- package/dist/{qmd-manager-NT_CKYQG.js → qmd-manager-CgZ9ng9u.js} +4 -4
- package/dist/{qmd-scope-CyWbQgiS.js → qmd-scope-DMUA3Vq9.js} +1 -1
- package/dist/{qmd-scope-hzI66flw.js → qmd-scope-RFd-g5Qi.js} +1 -1
- package/dist/{query-expansion-CPkdZdty.js → query-expansion-DQ8zm-TE.js} +1 -1
- package/dist/{query-expansion-feTsk3WF.js → query-expansion-GZKwviqQ.js} +13 -13
- package/dist/{recorder-DCGoPaKG.js → recorder-DA5NY6nl.js} +1 -1
- package/dist/{recorder-C3f7IlHZ.js → recorder-dKE74HOC.js} +2 -2
- package/dist/{redact-C4XKILzo.js → redact-LOuk7TRy.js} +1 -1
- package/dist/{reply-directives-BjV2MFIq.js → reply-directives-8FtYI79u.js} +9 -9
- package/dist/{reply-directives-ToqsETSh.js → reply-directives-CE9WoRyW.js} +49 -49
- package/dist/{runs-CPjMwHXQ.js → runs-BIabbRe5.js} +8 -8
- package/dist/{runs-D7qs08K3.js → runs-Dw8BeXyu.js} +5 -5
- package/dist/{send-BnVk7V-5.js → send-BQzswQlt.js} +5 -5
- package/dist/{send-DDBl5H1k.js → send-BTp_lz-m.js} +4 -4
- package/dist/{send-B9huC0Lk.js → send-CWcFiq7U.js} +3 -3
- package/dist/{send-Cj5zKV3M.js → send-DW_8PsC0.js} +4 -4
- package/dist/{sessions-zel35iDK.js → sessions-Bz8mUwgo.js} +5 -5
- package/dist/{sessions-CXuFR_IY.js → sessions-DKv9bCbi.js} +1 -1
- package/dist/{subsystem-DoQFckDJ.js → subsystem-cFv2jJm-.js} +71 -71
- package/dist/{tool-loop-detection-CtOkwPJY.js → tool-loop-detection-9fAxiikd.js} +2 -2
- package/dist/{user-run-recording-BVpLQDqe.js → user-run-recording-C1LRU5Lb.js} +2 -2
- package/dist/{user-run-recording-C10wwXyW.js → user-run-recording-CWRiZJsh.js} +1 -1
- package/dist/web-client/assets/{hast-util-from-dom-CvePVP6E.js → hast-util-from-dom-BoP9fB2c.js} +1 -1
- package/dist/web-client/assets/{hast-util-to-mdast-CwugKdbc.js → hast-util-to-mdast-Bo07nYTv.js} +1 -1
- package/dist/web-client/assets/{index-CFHLAWrp.js → index-CwqOe0fG.js} +2 -2
- package/dist/web-client/index.html +1 -1
- package/dist/{ws-2U5gNvRt.js → ws-Do6yaRWR.js} +1 -1
- package/dist/{ws-DrXm3NWZ.js → ws-Dt2EocLN.js} +1 -1
- package/extensions/a2a/package.json +1 -1
- package/extensions/acpx/package.json +1 -1
- package/extensions/anthropic/package.json +1 -1
- package/extensions/bifrost/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/deepgram/package.json +1 -1
- package/extensions/deepinfra/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diffs/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/dream-cycle/package.json +1 -1
- package/extensions/elevenlabs/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/gemini-search/package.json +1 -1
- package/extensions/google/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/grok-search/package.json +1 -1
- package/extensions/groq/package.json +1 -1
- package/extensions/identity-oidc/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/kimi-search/package.json +1 -1
- package/extensions/kokoro/package.json +1 -1
- package/extensions/learning-core/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +1 -1
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/mistral/package.json +1 -1
- package/extensions/moonshot/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +1 -1
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +1 -1
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/openai/package.json +1 -1
- package/extensions/openai-realtime/package.json +1 -1
- package/extensions/openrouter/package.json +1 -1
- package/extensions/perplexity-search/package.json +1 -1
- package/extensions/searxng-search/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +1 -1
- package/extensions/twitch/package.json +1 -1
- package/extensions/ui-surfaces/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +1 -1
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zai/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +1 -1
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +1 -1
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/dist/control-ui-v2/assets/Badge-4n2tRQ02.js +0 -1
- package/dist/control-ui-v2/assets/gateway-features-BIj6-KTX.js +0 -1
- package/dist/github-copilot-token-Bm6yG6tw.js +0 -106
- package/dist/paths-BIDPYPVC.js +0 -233
package/dist/control-ui-v2/assets/{AutomationsView-CxjmPRdI.js → AutomationsView-DkBzPKKQ.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t,h as n,i as r,l as i,r as a,s as o,t as s}from"./format-dlOOV12I.js";import{a as c,n as l,o as u}from"./links-C1sAzVEH.js";import{t as d}from"./Button-DL76WqX4.js";import{t as f}from"./Dialog-rIrrCPSu.js";import{n as p,t as m}from"./use-gateway-query-CF94JYnM.js";import{t as h}from"./Badge-4n2tRQ02.js";import{t as g}from"./Panel-CyfpswdJ.js";import{t as _}from"./EntityLink-AEBgCNQX.js";import{t as v}from"./Stat-BruDi6qc.js";import{t as ee}from"./DataTable-lEkd1R85.js";import{t as y}from"./FilterPills-HxAXXDO8.js";import{t as b}from"./StatusDot-Cij-6nH8.js";var x=e(n(),1),S=`last`,C={name:``,description:``,agentId:``,sessionKey:``,identity:``,clearAgent:!1,enabled:!0,deleteAfterRun:!0,scheduleKind:`every`,scheduleAt:``,everyAmount:`30`,everyUnit:`minutes`,cronExpr:`0 7 * * *`,cronTz:``,scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`,jobType:`assistantTask`,sessionTarget:`isolated`,wakeMode:`now`,payloadKind:`agentTurn`,wakeGateKind:`command`,wakeGateCommand:``,wakeGateModel:``,wakeGateProvider:``,wakeGatePrompt:``,wakeGateReason:``,payloadText:``,payloadModel:``,payloadThinking:``,payloadLightContext:!1,deliveryMode:`announce`,deliveryChannel:S,deliveryTo:``,deliveryAccountId:``,deliveryBestEffort:!1,failureAlertMode:`inherit`,failureAlertAfter:`2`,failureAlertCooldownSeconds:`3600`,failureAlertChannel:S,failureAlertTo:``,failureAlertDeliveryMode:`announce`,failureAlertAccountId:``,failureDestinationChannel:`last`,failureDestinationTo:``,failureDestinationAccountId:``,failureDestinationMode:`announce`,timeoutSeconds:``};function w(e,t){let n=Number(e);return Number.isFinite(n)?n:t}function T(e){let t=(e??``).trim();return t&&t.toLowerCase().replaceAll(/[^a-z0-9_-]+/g,`-`).replaceAll(/^-+|-+$/g,``).slice(0,64)||`main`}function E(e,t){return t===`timelineMessage`?{...e,jobType:t,sessionTarget:`main`,payloadKind:`systemEvent`,deliveryMode:`none`,identity:``}:t===`wakeGateCheck`?{...e,jobType:t,sessionTarget:`main`,payloadKind:`wakeGate`,deliveryMode:`none`,identity:``}:{...e,jobType:t,sessionTarget:`isolated`,payloadKind:`agentTurn`}}function D(e){return e.sessionTarget===`main`&&e.payloadKind===`systemEvent`?`timelineMessage`:e.sessionTarget===`main`&&e.payloadKind===`wakeGate`?`wakeGateCheck`:`assistantTask`}function O(e){return e.sessionTarget===`isolated`&&e.payloadKind===`agentTurn`}function te(e){return e.sessionTarget===`isolated`&&e.payloadKind===`agentTurn`}function k(e){return e.deliveryMode!==`announce`||O(e)?e:{...e,deliveryMode:`none`}}function A(e,t={}){let n={};if(e.name.trim()||(n.name=`cron.errors.nameRequired`),e.scheduleKind===`at`){let t=Date.parse(e.scheduleAt);Number.isFinite(t)||(n.scheduleAt=`cron.errors.scheduleAtInvalid`)}else if(e.scheduleKind===`every`)w(e.everyAmount,0)<=0&&(n.everyAmount=`cron.errors.everyAmountInvalid`);else if(e.cronExpr.trim()||(n.cronExpr=`cron.errors.cronExprRequired`),!e.scheduleExact){let t=e.staggerAmount.trim();t&&w(t,0)<=0&&(n.staggerAmount=`cron.errors.staggerAmountInvalid`)}if(e.sessionTarget===`main`){e.payloadKind!==`systemEvent`&&e.payloadKind!==`wakeGate`&&(n.payloadText=`cron.errors.mainJobPayload`);let r=e.clearAgent?``:e.agentId.trim(),i=t.defaultAgentId?.trim()||`main`;r&&T(r)!==T(i)&&!n.payloadText&&(n.agentId=`cron.errors.mainJobAgent`)}else e.payloadKind===`systemEvent`?n.payloadText=`cron.errors.isolatedJobPayload`:e.payloadKind===`wakeGate`&&(n.wakeGateCommand=`cron.errors.isolatedJobPayload`);if(e.payloadKind===`wakeGate`?e.wakeGateKind===`command`&&!e.wakeGateCommand.trim()&&!n.wakeGateCommand&&(n.wakeGateCommand=`cron.errors.systemTextRequired`):!e.payloadText.trim()&&!n.payloadText&&(n.payloadText=e.payloadKind===`systemEvent`?`cron.errors.systemTextRequired`:`cron.errors.agentMessageRequired`),e.payloadKind===`agentTurn`){let t=e.timeoutSeconds.trim();t&&w(t,0)<=0&&(n.timeoutSeconds=`cron.errors.timeoutInvalid`)}if(e.deliveryMode===`webhook`){let t=e.deliveryTo.trim();t?/^https?:\/\//i.test(t)||(n.deliveryTo=`cron.errors.webhookUrlInvalid`):n.deliveryTo=`cron.errors.webhookUrlRequired`}if(e.failureAlertMode===`custom`){let t=e.failureAlertAfter.trim();if(t){let e=w(t,0);(!Number.isFinite(e)||e<=0)&&(n.failureAlertAfter=`cron.errors.failureAlertAfterInvalid`)}let r=e.failureAlertCooldownSeconds.trim();if(r){let e=w(r,-1);(!Number.isFinite(e)||e<0)&&(n.failureAlertCooldownSeconds=`cron.errors.failureAlertCooldownInvalid`)}}return n}function j(e){return Object.keys(e).length>0}function M(e){let t=Date.parse(e);if(!Number.isFinite(t))return``;let n=new Date(t);return`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,`0`)}-${String(n.getDate()).padStart(2,`0`)}T${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`}function N(e){if(e%864e5==0)return{everyAmount:String(Math.max(1,e/864e5)),everyUnit:`days`};if(e%36e5==0)return{everyAmount:String(Math.max(1,e/36e5)),everyUnit:`hours`};let t=Math.max(1,Math.ceil(e/6e4));return{everyAmount:String(t),everyUnit:`minutes`}}function P(e){return e===0?{scheduleExact:!0,staggerAmount:``,staggerUnit:`seconds`}:typeof e!=`number`||!Number.isFinite(e)||e<0?{scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`}:e%6e4==0?{scheduleExact:!1,staggerAmount:String(Math.max(1,e/6e4)),staggerUnit:`minutes`}:{scheduleExact:!1,staggerAmount:String(Math.max(1,Math.ceil(e/1e3))),staggerUnit:`seconds`}}function F(e,t){let n=e.failureAlert,r={...t,name:e.name,description:e.description??``,agentId:e.agentId??``,sessionKey:e.sessionKey??``,identity:e.identity??``,clearAgent:!1,enabled:e.enabled,deleteAfterRun:e.deleteAfterRun??!1,scheduleKind:e.schedule.kind,scheduleAt:``,everyAmount:t.everyAmount,everyUnit:t.everyUnit,cronExpr:t.cronExpr,cronTz:``,scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`,jobType:D({sessionTarget:e.sessionTarget,payloadKind:e.payload.kind}),sessionTarget:e.sessionTarget,wakeMode:e.wakeMode,payloadKind:e.payload.kind,payloadText:e.payload.kind===`systemEvent`?e.payload.text:e.payload.kind===`agentTurn`?e.payload.message:``,payloadModel:e.payload.kind===`agentTurn`?e.payload.model??``:``,payloadThinking:e.payload.kind===`agentTurn`?e.payload.thinking??``:``,payloadLightContext:e.payload.kind===`agentTurn`&&e.payload.lightContext===!0,wakeGateKind:e.payload.kind===`wakeGate`?e.payload.gate.kind:`command`,wakeGateCommand:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`command`?e.payload.gate.command:``,wakeGateModel:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`model`?e.payload.gate.model??``:``,wakeGateProvider:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`model`?e.payload.gate.provider??``:``,wakeGatePrompt:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`model`?e.payload.gate.prompt??``:``,wakeGateReason:e.payload.kind===`wakeGate`?e.payload.reason??``:``,deliveryMode:e.delivery?.mode??`none`,deliveryChannel:e.delivery?.channel??`last`,deliveryTo:e.delivery?.to??``,deliveryAccountId:e.delivery?.accountId??``,deliveryBestEffort:e.delivery?.bestEffort??!1,failureAlertMode:n===!1?`disabled`:n&&typeof n==`object`?`custom`:`inherit`,failureAlertAfter:n&&typeof n==`object`&&typeof n.after==`number`?String(n.after):C.failureAlertAfter,failureAlertCooldownSeconds:n&&typeof n==`object`&&typeof n.cooldownMs==`number`?String(Math.floor(n.cooldownMs/1e3)):C.failureAlertCooldownSeconds,failureAlertChannel:n&&typeof n==`object`?n.channel??`last`:S,failureAlertTo:n&&typeof n==`object`?n.to??``:``,failureAlertDeliveryMode:n&&typeof n==`object`?n.mode??`announce`:`announce`,failureAlertAccountId:n&&typeof n==`object`?n.accountId??``:``,failureDestinationChannel:e.delivery?.failureDestination?.channel??`last`,failureDestinationTo:e.delivery?.failureDestination?.to??``,failureDestinationAccountId:e.delivery?.failureDestination?.accountId??``,failureDestinationMode:e.delivery?.failureDestination?.mode??`announce`,timeoutSeconds:e.payload.kind===`agentTurn`&&typeof e.payload.timeoutSeconds==`number`?String(e.payload.timeoutSeconds):``};if(e.schedule.kind===`at`)r.scheduleAt=M(e.schedule.at);else if(e.schedule.kind===`every`){let t=N(e.schedule.everyMs);r.everyAmount=t.everyAmount,r.everyUnit=t.everyUnit}else{r.cronExpr=e.schedule.expr,r.cronTz=e.schedule.tz??``;let t=P(e.schedule.staggerMs);r.scheduleExact=t.scheduleExact,r.staggerAmount=t.staggerAmount,r.staggerUnit=t.staggerUnit}return k(r)}function I(e){if(e.scheduleKind===`at`){let t=Date.parse(e.scheduleAt);if(!Number.isFinite(t))throw Error(`Enter a valid run time.`);return{kind:`at`,at:new Date(t).toISOString()}}if(e.scheduleKind===`every`){let t=w(e.everyAmount,0);if(t<=0)throw Error(`Interval must be greater than zero.`);let n=e.everyUnit;return{kind:`every`,everyMs:t*(n===`minutes`?6e4:n===`hours`?36e5:864e5)}}let t=e.cronExpr.trim();if(!t)throw Error(`Cron expression is required.`);if(e.scheduleExact)return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0,staggerMs:0};let n=e.staggerAmount.trim();if(!n)return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0};let r=w(n,0);if(r<=0)throw Error(`Stagger must be greater than zero.`);let i=e.staggerUnit===`minutes`?r*6e4:r*1e3;return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0,staggerMs:i}}function ne(e){if(e.payloadKind===`wakeGate`){let t=e.wakeGateReason.trim()||void 0;if(e.wakeGateKind===`command`){let n=e.wakeGateCommand.trim();if(!n)throw Error(`Gate command is required.`);return{kind:`wakeGate`,gate:{kind:`command`,command:n},reason:t}}let n={kind:`model`},r=e.wakeGateModel.trim();r&&(n.model=r);let i=e.wakeGateProvider.trim();i&&(n.provider=i);let a=e.wakeGatePrompt.trim();return a&&(n.prompt=a),{kind:`wakeGate`,gate:n,reason:t}}if(e.payloadKind===`systemEvent`){let t=e.payloadText.trim();if(!t)throw Error(`System event text is required.`);return{kind:`systemEvent`,text:t}}let t=e.payloadText.trim();if(!t)throw Error(`Agent message is required.`);let n={kind:`agentTurn`,message:t},r=e.payloadModel.trim();r&&(n.model=r);let i=e.payloadThinking.trim();i&&(n.thinking=i);let a=w(e.timeoutSeconds,0);return a>0&&(n.timeoutSeconds=a),e.payloadLightContext&&(n.lightContext=!0),n}function L(e){if(e.failureAlertMode===`disabled`)return!1;if(e.failureAlertMode!==`custom`)return;let t=w(e.failureAlertAfter.trim(),0),n=e.failureAlertCooldownSeconds.trim(),r=n.length>0?w(n,0):void 0,i=r!==void 0&&Number.isFinite(r)&&r>=0?Math.floor(r*1e3):void 0,a=e.failureAlertAccountId.trim();return{after:t>0?Math.floor(t):void 0,channel:e.failureAlertChannel.trim()||`last`,to:e.failureAlertTo.trim()||void 0,...i===void 0?{}:{cooldownMs:i},mode:e.failureAlertDeliveryMode,accountId:a||void 0}}function R(e,t={}){let n=k(e),r=t.editingJob??null,i=I(n),a=ne(n);if(a.kind===`agentTurn`){let e=r?.payload.kind===`agentTurn`?r.payload.lightContext:void 0;!n.payloadLightContext&&r&&e!==void 0&&(a.lightContext=!1)}let o=n.deliveryMode,s=n.sessionTarget===`isolated`||o===`webhook`,c=n.failureDestinationTo.trim()||n.failureDestinationAccountId.trim(),l=s&&c?{channel:n.failureDestinationChannel.trim()||void 0,to:n.failureDestinationTo.trim()||void 0,accountId:n.failureDestinationAccountId.trim()||void 0,mode:n.failureDestinationMode}:void 0,u=o&&o!==`none`?{mode:o,channel:o===`announce`?n.deliveryChannel.trim()||`last`:void 0,to:n.deliveryTo.trim()||void 0,accountId:o===`announce`?n.deliveryAccountId.trim():void 0,bestEffort:n.deliveryBestEffort,...l?{failureDestination:l}:{}}:o===`none`?{mode:`none`}:void 0,d=L(n),f=n.clearAgent?null:n.agentId.trim(),p=n.sessionKey.trim()||(r?.sessionKey?null:void 0),m=(te(n)?n.identity.trim():``)||(r?.identity?null:void 0);return{name:n.name.trim(),description:n.description.trim(),agentId:f===null?null:f||void 0,sessionKey:p,identity:m,enabled:n.enabled,deleteAfterRun:n.deleteAfterRun,schedule:i,sessionTarget:n.sessionTarget,wakeMode:n.wakeMode,payload:a,delivery:u,failureAlert:d}}function z(e,t){let n=e.trim()||`Job`,r=`${n} copy`;if(!t.has(r.toLowerCase()))return r;let i=2;for(;i<1e3;){let e=`${n} copy ${i}`;if(!t.has(e.toLowerCase()))return e;i+=1}return`${n} copy ${Date.now()}`}function re(e,t,n){return e.filter(e=>!(t!==`all`&&e.schedule.kind!==t||n!==`all`&&e.state?.lastStatus!==n))}function ie(e){let t=e.schedule;if(t.kind===`at`)return`at ${M(t.at)||t.at}`;if(t.kind===`every`){let e=N(t.everyMs);return`every ${e.everyAmount} ${e.everyUnit}`}let n=t.staggerMs===0,r=typeof t.staggerMs==`number`&&t.staggerMs>0?` (stagger ${Math.round(t.staggerMs/1e3)}s)`:``;return`${t.expr}${t.tz?` (${t.tz})`:``}${n?` (exact)`:r}`}var B={"cron.errors.nameRequired":`Name is required.`,"cron.errors.scheduleAtInvalid":`Enter a valid run time.`,"cron.errors.everyAmountInvalid":`Interval must be greater than zero.`,"cron.errors.cronExprRequired":`Cron expression is required.`,"cron.errors.staggerAmountInvalid":`Stagger must be greater than zero.`,"cron.errors.mainJobPayload":`Main-session jobs need a system event or wake-gate payload.`,"cron.errors.mainJobAgent":`Main-session jobs run on the default agent.`,"cron.errors.isolatedJobPayload":`Isolated jobs need an agent turn payload.`,"cron.errors.systemTextRequired":`System event text is required.`,"cron.errors.agentMessageRequired":`Agent message is required.`,"cron.errors.timeoutInvalid":`Timeout must be greater than zero.`,"cron.errors.webhookUrlRequired":`Webhook URL is required.`,"cron.errors.webhookUrlInvalid":`Webhook URL must start with http:// or https://.`,"cron.errors.failureAlertAfterInvalid":`Alert threshold must be greater than zero.`,"cron.errors.failureAlertCooldownInvalid":`Cooldown cannot be negative.`},ae={timelineMessage:`Timeline message`,assistantTask:`Assistant task`,wakeGateCheck:`Check first, then nudge`},V={ok:`OK`,error:`Error`,skipped:`Skipped`},oe={delivered:`Delivered`,"not-delivered":`Not delivered`,unknown:`Delivery unknown`,"not-requested":`Delivery not requested`},H={ok:`ok`,error:`danger`,skipped:`warn`},se={delivered:`ok`,"not-delivered":`danger`,unknown:`warn`,"not-requested":`neutral`},U={ok:`ok`,error:`danger`,skipped:`warn`};function W(e){return ae[D({sessionTarget:e.sessionTarget,payloadKind:e.payload.kind})]}function G(e){return e?e.clientDisplayName?`${e.clientId}/${e.clientDisplayName}`:e.clientId:null}function K(e){return e.summary??e.error??`No summary.`}function ce(e){return e?typeof e.total_tokens==`number`?`${e.total_tokens} tokens`:typeof e.input_tokens==`number`&&typeof e.output_tokens==`number`?`${e.input_tokens} in / ${e.output_tokens} out`:null:null}var q=t(),le=[{value:`all`,label:`All`},{value:`enabled`,label:`Enabled`},{value:`disabled`,label:`Disabled`}],ue=[{value:`all`,label:`All`},{value:`at`,label:`At`},{value:`every`,label:`Every`},{value:`cron`,label:`Cron`}],de=[{value:`all`,label:`All`},{value:`ok`,label:`OK`},{value:`error`,label:`Error`},{value:`skipped`,label:`Skipped`}],fe={nextRunAtMs:`Next run`,updatedAtMs:`Recently updated`,name:`Name`},pe={query:``,enabled:`all`,kind:`all`,lastStatus:`all`,sortBy:`nextRunAtMs`,sortDir:`asc`};function me(e){let t=e=>e.stopPropagation();return[{key:`name`,label:`Name`,render:e=>(0,q.jsxs)(`div`,{className:`ct-cell-stack`,children:[(0,q.jsx)(`span`,{className:`ct-cell-stack__main`,children:e.name}),e.description?(0,q.jsx)(`span`,{className:`ct-cell-stack__sub`,children:e.description}):null]})},{key:`schedule`,label:`Schedule`,render:ie},{key:`type`,label:`Type`,render:e=>(0,q.jsx)(h,{tone:`neutral`,children:W(e)})},{key:`status`,label:`Status`,render:e=>(0,q.jsxs)(`span`,{className:`ct-cron-state-row`,children:[(0,q.jsx)(h,{tone:e.enabled?`ok`:`neutral`,children:e.enabled?`Enabled`:`Disabled`}),e.state?.lastStatus?(0,q.jsx)(b,{tone:U[e.state.lastStatus],label:`Last run ${V[e.state.lastStatus]}`}):null]})},{key:`last`,label:`Last run`,render:e=>r(e.state?.lastRunAtMs)},{key:`next`,label:`Next run`,render:e=>r(e.state?.nextRunAtMs)},{key:`actions`,label:`Actions`,render:n=>{let r=e.busyId===n.id,i=n.payload.kind===`wakeGate`;return(0,q.jsxs)(`div`,{className:`ct-cron-row-actions`,children:[(0,q.jsx)(d,{size:`sm`,disabled:r,onClick:r=>{t(r),e.onEdit(n)},children:`Edit`}),(0,q.jsx)(d,{size:`sm`,disabled:r,onClick:r=>{t(r),e.onClone(n)},children:`Clone`}),(0,q.jsx)(d,{size:`sm`,disabled:r,title:i?`Evaluates the wake check now; may skip with wake-gate-empty.`:`Ignores the schedule and runs immediately.`,onClick:r=>{t(r),e.onRun(n)},children:r?`Running…`:i?`Test check`:`Run now`}),(0,q.jsx)(d,{size:`sm`,disabled:r,onClick:r=>{t(r),e.onToggle(n,!n.enabled)},children:n.enabled?`Disable`:`Enable`}),(0,q.jsx)(d,{size:`sm`,variant:`danger`,disabled:r,onClick:r=>{t(r),e.onRemove(n)},children:`Delete`})]})}}]}var J=[`off`,`minimal`,`low`,`medium`,`high`];function Y({code:e}){return(0,q.jsx)(`div`,{className:`ct-field-error`,children:B[e]??e})}function X({id:e,label:t,help:n,checked:r,onChange:i}){return(0,q.jsxs)(`div`,{className:`ct-check`,children:[(0,q.jsxs)(`label`,{htmlFor:e,children:[(0,q.jsx)(`input`,{id:e,type:`checkbox`,checked:r,onChange:e=>i(e.target.checked)}),(0,q.jsx)(`span`,{children:t})]}),n?(0,q.jsx)(`div`,{className:`ct-help`,children:n}):null]})}function Z(e,t){return n=>t({...e,...n})}function he({form:e,fieldErrors:t,onFormChange:n}){let r=Z(e,n),i=p(`models.list`,{}),a=e.payloadKind===`agentTurn`,o=e.payloadKind===`wakeGate`,s=(0,x.useMemo)(()=>{let e=(i.data?.models??[]).map(e=>e.id).filter(e=>e.length>0).toSorted((e,t)=>e.localeCompare(t));return Array.from(new Set(e))},[i.data]);return(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Execution`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[e.sessionTarget===`isolated`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-wake-mode`,children:`Wake mode`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-wake-mode`,value:e.wakeMode,onChange:e=>r({wakeMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`now`,children:`Now`}),(0,q.jsx)(`option`,{value:`next-heartbeat`,children:`Next heartbeat`})]})})]}):null,o?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-gate-kind`,children:`Gate type`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-gate-kind`,value:e.wakeGateKind,onChange:e=>r({wakeGateKind:e.target.value}),children:[(0,q.jsx)(`option`,{value:`command`,children:`Command`}),(0,q.jsx)(`option`,{value:`model`,children:`Model`})]})}),e.wakeGateKind===`command`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-gate-command`,children:`Gate command`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`textarea`,{id:`cron-gate-command`,rows:3,value:e.wakeGateCommand,"aria-invalid":t.wakeGateCommand?!0:void 0,onChange:e=>r({wakeGateCommand:e.target.value})}),t.wakeGateCommand?(0,q.jsx)(Y,{code:t.wakeGateCommand}):null]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-gate-model`,children:`Gate model`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-gate-model`,value:e.wakeGateModel,onChange:e=>r({wakeGateModel:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-gate-provider`,children:`Gate provider`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-gate-provider`,value:e.wakeGateProvider,onChange:e=>r({wakeGateProvider:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-gate-prompt`,children:`Gate prompt`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`textarea`,{id:`cron-gate-prompt`,rows:3,value:e.wakeGatePrompt,onChange:e=>r({wakeGatePrompt:e.target.value})})})]}),(0,q.jsx)(`label`,{htmlFor:`cron-gate-reason`,children:`Nudge reason`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-gate-reason`,value:e.wakeGateReason,onChange:e=>r({wakeGateReason:e.target.value}),placeholder:`e.g., inbox, calendar, weather`})})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-payload-text`,children:e.payloadKind===`systemEvent`?`Main timeline message`:`Assistant task prompt`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`textarea`,{id:`cron-payload-text`,rows:4,value:e.payloadText,"aria-invalid":t.payloadText?!0:void 0,onChange:e=>r({payloadText:e.target.value})}),t.payloadText?(0,q.jsx)(Y,{code:t.payloadText}):null]})]}),a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-payload-model`,children:`Model`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-payload-model`,value:e.payloadModel,list:`cron-model-suggestions`,onChange:e=>r({payloadModel:e.target.value}),placeholder:`Agent default`}),(0,q.jsx)(`datalist`,{id:`cron-model-suggestions`,children:s.map(e=>(0,q.jsx)(`option`,{value:e},e))})]}),(0,q.jsx)(`label`,{htmlFor:`cron-payload-thinking`,children:`Thinking`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-payload-thinking`,value:e.payloadThinking,list:`cron-thinking-suggestions`,onChange:e=>r({payloadThinking:e.target.value}),placeholder:`low`}),(0,q.jsx)(`datalist`,{id:`cron-thinking-suggestions`,children:J.map(e=>(0,q.jsx)(`option`,{value:e},e))})]}),(0,q.jsx)(`label`,{htmlFor:`cron-timeout-seconds`,children:`Timeout (seconds)`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-timeout-seconds`,value:e.timeoutSeconds,"aria-invalid":t.timeoutSeconds?!0:void 0,onChange:e=>r({timeoutSeconds:e.target.value}),placeholder:`Optional, e.g. 90`}),t.timeoutSeconds?(0,q.jsx)(Y,{code:t.timeoutSeconds}):null]}),(0,q.jsx)(X,{id:`cron-light-context`,label:`Use shorter startup context`,checked:e.payloadLightContext,onChange:e=>r({payloadLightContext:e})})]}):null]})]})}function ge({form:e,fieldErrors:t,onFormChange:n}){let r=Z(e,n),i=O(e),a=e.sessionTarget===`isolated`||e.deliveryMode===`webhook`;return(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Delivery`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-delivery-mode`,children:`Where summaries go`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-delivery-mode`,value:e.deliveryMode,onChange:e=>r({deliveryMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`none`,children:`None (internal)`}),i?(0,q.jsx)(`option`,{value:`announce`,children:`Announce summary`}):null,(0,q.jsx)(`option`,{value:`webhook`,children:`Webhook POST`})]})}),e.deliveryMode===`announce`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-delivery-channel`,children:`Channel`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-delivery-channel`,value:e.deliveryChannel,onChange:e=>r({deliveryChannel:e.target.value}),placeholder:`last`})}),(0,q.jsx)(`label`,{htmlFor:`cron-delivery-account`,children:`Account ID`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-delivery-account`,value:e.deliveryAccountId,onChange:e=>r({deliveryAccountId:e.target.value})})})]}):null,e.deliveryMode===`none`?null:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-delivery-to`,children:e.deliveryMode===`webhook`?`Webhook URL`:`To`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-delivery-to`,value:e.deliveryTo,"aria-invalid":t.deliveryTo?!0:void 0,onChange:e=>r({deliveryTo:e.target.value}),placeholder:e.deliveryMode===`webhook`?`https://example.com/cron`:`+1555... or chat id`}),t.deliveryTo?(0,q.jsx)(Y,{code:t.deliveryTo}):null]})]}),e.deliveryMode===`announce`?(0,q.jsx)(X,{id:`cron-best-effort`,label:`Best effort delivery`,help:`Do not fail the job if delivery itself fails.`,checked:e.deliveryBestEffort,onChange:e=>r({deliveryBestEffort:e})}):null,a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-fd-to`,children:`Failure destination to`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-fd-to`,value:e.failureDestinationTo,onChange:e=>r({failureDestinationTo:e.target.value}),placeholder:`Separate recipient for failure notifications`})}),(0,q.jsx)(`label`,{htmlFor:`cron-fd-channel`,children:`Failure destination channel`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-fd-channel`,value:e.failureDestinationChannel,onChange:e=>r({failureDestinationChannel:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-fd-account`,children:`Failure destination account ID`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-fd-account`,value:e.failureDestinationAccountId,onChange:e=>r({failureDestinationAccountId:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-fd-mode`,children:`Failure destination mode`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-fd-mode`,value:e.failureDestinationMode,onChange:e=>r({failureDestinationMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`announce`,children:`Announce (via channel)`}),(0,q.jsx)(`option`,{value:`webhook`,children:`Webhook (HTTP POST)`})]})})]}):null]})]})}function Q({form:e,fieldErrors:t,onFormChange:n}){let r=Z(e,n);return(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Failure alerts`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-alert-mode`,children:`Alert mode`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-alert-mode`,value:e.failureAlertMode,onChange:e=>r({failureAlertMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`inherit`,children:`Inherit global setting`}),(0,q.jsx)(`option`,{value:`disabled`,children:`Disable for this job`}),(0,q.jsx)(`option`,{value:`custom`,children:`Custom per-job settings`})]})}),e.failureAlertMode===`custom`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-alert-after`,children:`Alert after`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-alert-after`,value:e.failureAlertAfter,"aria-invalid":t.failureAlertAfter?!0:void 0,onChange:e=>r({failureAlertAfter:e.target.value})}),t.failureAlertAfter?(0,q.jsx)(Y,{code:t.failureAlertAfter}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-cooldown`,children:`Cooldown (seconds)`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-alert-cooldown`,value:e.failureAlertCooldownSeconds,"aria-invalid":t.failureAlertCooldownSeconds?!0:void 0,onChange:e=>r({failureAlertCooldownSeconds:e.target.value})}),t.failureAlertCooldownSeconds?(0,q.jsx)(Y,{code:t.failureAlertCooldownSeconds}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-channel`,children:`Alert channel`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-alert-channel`,value:e.failureAlertChannel,onChange:e=>r({failureAlertChannel:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-to`,children:`Alert to`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-alert-to`,value:e.failureAlertTo,onChange:e=>r({failureAlertTo:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-account`,children:`Alert account ID`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-alert-account`,value:e.failureAlertAccountId,onChange:e=>r({failureAlertAccountId:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-delivery`,children:`Alert delivery`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-alert-delivery`,value:e.failureAlertDeliveryMode,onChange:e=>r({failureAlertDeliveryMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`announce`,children:`Announce (via channel)`}),(0,q.jsx)(`option`,{value:`webhook`,children:`Webhook (HTTP POST)`})]})})]}):null]})]})}function _e({form:e,fieldErrors:t,busy:n,error:r,editing:i,onFormChange:a,onSubmit:o,onClose:s}){let c=t=>a({...e,...t}),l=te(e);return(0,q.jsxs)(f,{open:!0,title:i?`Edit job`:`New job`,onClose:s,width:`lg`,children:[(0,q.jsxs)(`div`,{className:`ct-cron-form`,children:[(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Basics`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-name`,children:`Name`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-name`,value:e.name,"aria-invalid":t.name?!0:void 0,onChange:e=>c({name:e.target.value}),placeholder:`Morning brief`}),t.name?(0,q.jsx)(Y,{code:t.name}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-description`,children:`Description`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-description`,value:e.description,onChange:e=>c({description:e.target.value}),placeholder:`Optional context for this job`})}),(0,q.jsx)(`label`,{htmlFor:`cron-job-type`,children:`Job type`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-job-type`,value:e.jobType,onChange:t=>a(E(e,t.target.value)),children:[(0,q.jsx)(`option`,{value:`assistantTask`,children:`Assistant task`}),(0,q.jsx)(`option`,{value:`timelineMessage`,children:`Timeline message`}),(0,q.jsx)(`option`,{value:`wakeGateCheck`,children:`Check first, then nudge`})]})}),(0,q.jsx)(`label`,{htmlFor:`cron-agent-id`,children:`Agent ID`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-agent-id`,value:e.agentId,disabled:e.clearAgent,"aria-invalid":t.agentId?!0:void 0,onChange:e=>c({agentId:e.target.value}),placeholder:`main or ops`}),t.agentId?(0,q.jsx)(Y,{code:t.agentId}):null]}),(0,q.jsx)(X,{id:`cron-clear-agent`,label:`Use default agent`,checked:e.clearAgent,onChange:e=>c({clearAgent:e})}),l?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-identity`,children:`Attributed user`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-identity`,value:e.identity,onChange:e=>c({identity:e.target.value}),placeholder:`identityLinks key, e.g. YourName`})})]}):null,e.sessionTarget===`isolated`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-session-key`,children:`Agent/session route`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-session-key`,value:e.sessionKey,onChange:e=>c({sessionKey:e.target.value}),placeholder:`Optional routing key`})})]}):null,(0,q.jsx)(X,{id:`cron-enabled`,label:`Enabled`,checked:e.enabled,onChange:e=>c({enabled:e})}),(0,q.jsx)(X,{id:`cron-delete-after-run`,label:`Remove after successful one-shot run`,checked:e.deleteAfterRun,onChange:e=>c({deleteAfterRun:e})})]})]}),(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Schedule`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-schedule-kind`,children:`Repeats`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-schedule-kind`,value:e.scheduleKind,onChange:e=>c({scheduleKind:e.target.value}),children:[(0,q.jsx)(`option`,{value:`every`,children:`Every`}),(0,q.jsx)(`option`,{value:`at`,children:`At`}),(0,q.jsx)(`option`,{value:`cron`,children:`Cron`})]})}),e.scheduleKind===`at`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-schedule-at`,children:`Run at`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-schedule-at`,type:`datetime-local`,value:e.scheduleAt,"aria-invalid":t.scheduleAt?!0:void 0,onChange:e=>c({scheduleAt:e.target.value})}),t.scheduleAt?(0,q.jsx)(Y,{code:t.scheduleAt}):null]})]}):null,e.scheduleKind===`every`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-every-amount`,children:`Every`}),(0,q.jsxs)(`div`,{className:`ct-cron-inline`,children:[(0,q.jsx)(`input`,{id:`cron-every-amount`,value:e.everyAmount,"aria-invalid":t.everyAmount?!0:void 0,onChange:e=>c({everyAmount:e.target.value}),placeholder:`30`}),(0,q.jsxs)(`select`,{"aria-label":`Every unit`,value:e.everyUnit,onChange:e=>c({everyUnit:e.target.value}),children:[(0,q.jsx)(`option`,{value:`minutes`,children:`Minutes`}),(0,q.jsx)(`option`,{value:`hours`,children:`Hours`}),(0,q.jsx)(`option`,{value:`days`,children:`Days`})]})]}),t.everyAmount?(0,q.jsx)(Y,{code:t.everyAmount}):null]}):null,e.scheduleKind===`cron`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-expr`,children:`Expression`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-expr`,value:e.cronExpr,"aria-invalid":t.cronExpr?!0:void 0,onChange:e=>c({cronExpr:e.target.value}),placeholder:`0 7 * * *`}),t.cronExpr?(0,q.jsx)(Y,{code:t.cronExpr}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-tz`,children:`Timezone (optional)`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-tz`,value:e.cronTz,onChange:e=>c({cronTz:e.target.value}),placeholder:`America/Los_Angeles`})}),(0,q.jsx)(X,{id:`cron-exact`,label:`Run at the exact scheduled time`,checked:e.scheduleExact,onChange:e=>c({scheduleExact:e})}),(0,q.jsx)(`label`,{htmlFor:`cron-stagger-amount`,children:`Stagger window`}),(0,q.jsxs)(`div`,{className:`ct-cron-inline`,children:[(0,q.jsx)(`input`,{id:`cron-stagger-amount`,value:e.staggerAmount,disabled:e.scheduleExact,"aria-invalid":t.staggerAmount?!0:void 0,onChange:e=>c({staggerAmount:e.target.value}),placeholder:`30`}),(0,q.jsxs)(`select`,{"aria-label":`Stagger unit`,value:e.staggerUnit,disabled:e.scheduleExact,onChange:e=>c({staggerUnit:e.target.value}),children:[(0,q.jsx)(`option`,{value:`seconds`,children:`Seconds`}),(0,q.jsx)(`option`,{value:`minutes`,children:`Minutes`})]})]}),t.staggerAmount?(0,q.jsx)(Y,{code:t.staggerAmount}):null]}):null]})]}),(0,q.jsx)(he,{form:e,fieldErrors:t,onFormChange:a}),(0,q.jsx)(ge,{form:e,fieldErrors:t,onFormChange:a}),(0,q.jsx)(Q,{form:e,fieldErrors:t,onFormChange:a})]}),r?(0,q.jsx)(`div`,{className:`ct-cron-callout`,role:`alert`,children:r}):null,(0,q.jsxs)(`footer`,{className:`ct-cron-actions`,children:[(0,q.jsx)(d,{onClick:s,disabled:n,children:`Close`}),(0,q.jsx)(d,{variant:`primary`,onClick:o,disabled:n,children:n?`Saving…`:i?`Save changes`:`Add job`})]})]})}var $=[{value:`all`,label:`All statuses`},{value:`ok`,label:`OK runs`},{value:`error`,label:`Failed runs`},{value:`skipped`,label:`Skipped runs`}],ve=[{value:`all`,label:`All delivery`},{value:`delivered`,label:`Delivered`},{value:`not-delivered`,label:`Not delivered`},{value:`unknown`,label:`Delivery unknown`},{value:`not-requested`,label:`Not requested`}],ye=[{key:`when`,label:`When`,render:e=>(0,q.jsx)(`span`,{title:new Date(e.ts).toISOString(),children:r(e.ts)})},{key:`job`,label:`Job`,mono:!0,render:e=>e.jobName??e.jobId},{key:`status`,label:`Status`,render:e=>(0,q.jsx)(h,{tone:H[e.status??`skipped`],children:e.status?V[e.status]:`Unknown`})},{key:`delivery`,label:`Delivery`,render:e=>e.deliveryStatus?(0,q.jsx)(h,{tone:se[e.deliveryStatus],children:oe[e.deliveryStatus]}):`—`},{key:`duration`,label:`Duration`,align:`end`,render:e=>a(e.durationMs)},{key:`summary`,label:`Summary`,render:e=>(0,q.jsx)(`span`,{className:`ct-cron-run-summary`,children:K(e)})}];function be({job:e}){let t=e.state??{},n=G(e.createdBy);return(0,q.jsxs)(`div`,{className:`ct-cron-inspect`,"data-testid":`cron-selected-job`,children:[(0,q.jsxs)(`div`,{className:`ct-cron-inspect__main`,children:[(0,q.jsx)(`div`,{className:`ct-cron-inspect__title`,children:e.name}),(0,q.jsxs)(`div`,{className:`ct-cron-inspect__sub`,children:[W(e),` · `,ie(e)]}),(0,q.jsxs)(`div`,{className:`ct-cron-inspect__meta`,children:[e.agentId?(0,q.jsxs)(`span`,{children:[`Agent: `,e.agentId]}):null,e.sessionKey?(0,q.jsx)(_,{to:l.session(e.sessionKey),children:(0,q.jsx)(`span`,{className:`ct-mono`,children:e.sessionKey})}):null,n?(0,q.jsxs)(`span`,{children:[`Created by: `,n]}):null]})]}),(0,q.jsxs)(`dl`,{className:`ct-cron-inspect__state`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Status`}),(0,q.jsx)(`dd`,{children:(0,q.jsxs)(`span`,{className:`ct-cron-state-row`,children:[(0,q.jsx)(b,{tone:t.lastStatus?H[t.lastStatus]:`neutral`,label:t.lastStatus?V[t.lastStatus]:`No runs yet`}),t.lastStatus?V[t.lastStatus]:`No runs yet`]})})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Next`}),(0,q.jsx)(`dd`,{title:t.nextRunAtMs?new Date(t.nextRunAtMs).toISOString():void 0,children:r(t.nextRunAtMs)})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Last`}),(0,q.jsx)(`dd`,{title:t.lastRunAtMs?new Date(t.lastRunAtMs).toISOString():void 0,children:r(t.lastRunAtMs)})]}),t.lastError?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Last error`}),(0,q.jsx)(`dd`,{className:`ct-cron-inspect__error`,children:t.lastError})]}):null]})]})}function xe({entry:e}){let t=ce(e.usage);return(0,q.jsxs)(`div`,{className:`ct-cron-run-details`,"data-testid":`cron-run-details`,children:[(0,q.jsxs)(`div`,{className:`ct-cron-run-details__head`,children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__title`,children:K(e)}),(0,q.jsx)(`span`,{className:`ct-muted`,children:new Date(e.ts).toISOString()})]}),e.error?(0,q.jsx)(`div`,{className:`ct-cron-run-details__error`,children:e.error}):null,e.deliveryError?(0,q.jsxs)(`div`,{className:`ct-cron-run-details__error`,children:[`Delivery: `,e.deliveryError]}):null,(0,q.jsxs)(`div`,{className:`ct-cron-run-details__grid`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Run at`}),(0,q.jsx)(`span`,{children:typeof e.runAtMs==`number`?new Date(e.runAtMs).toISOString():`—`})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Duration`}),(0,q.jsx)(`span`,{children:a(e.durationMs)})]}),typeof e.nextRunAtMs==`number`?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Next run`}),(0,q.jsx)(`span`,{children:r(e.nextRunAtMs)})]}):null,e.model?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Model`}),(0,q.jsxs)(`span`,{children:[e.model,e.provider?` (${e.provider})`:``]})]}):null,t?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Usage`}),(0,q.jsx)(`span`,{children:t})]}):null,e.sessionKey?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Session`}),(0,q.jsx)(_,{to:l.session(e.sessionKey),children:(0,q.jsx)(`span`,{className:`ct-mono`,children:e.sessionKey})})]}):null]})]})}function Se({selectedJob:e,entries:t,total:n,hasMore:r,loading:i,error:a,scopeAll:s,statusFilter:c,deliveryFilter:l,query:u,sortDir:f,onScopeChange:p,onStatusFilterChange:m,onDeliveryFilterChange:h,onQueryChange:_,onSortDirChange:v,onLoadMore:b}){let S=e=>`${e.jobId}:${e.ts}`,[C,w]=(0,x.useState)(null);(0,x.useEffect)(()=>{w(null)},[s?`all`:e?.id??`none`]);let T=C===null?null:t.find(e=>S(e)===C)??null;return(0,q.jsxs)(g,{title:`Run history`,sub:s?`All jobs`:e?.name??`Select a job`,testId:`cron-runs`,children:[e?(0,q.jsx)(be,{job:e}):null,(0,q.jsxs)(`div`,{className:`ct-cron-run-filters`,children:[(0,q.jsx)(y,{label:`Run scope`,value:s?`all`:`job`,options:[{value:`all`,label:`All jobs`},{value:`job`,label:`This job`,disabled:e==null}],onChange:e=>p(e===`all`)}),(0,q.jsxs)(`label`,{className:`ct-search`,children:[(0,q.jsx)(`span`,{className:`ct-muted`,children:`Search`}),(0,q.jsx)(`input`,{className:`ct-search__input`,value:u,placeholder:`Search runs`,"aria-label":`Search runs`,onChange:e=>_(e.target.value)})]}),(0,q.jsx)(y,{label:`Run order`,value:f,options:[{value:`desc`,label:`Newest first`},{value:`asc`,label:`Oldest first`}],onChange:v})]}),(0,q.jsxs)(`div`,{className:`ct-cron-run-filters`,children:[(0,q.jsx)(y,{label:`Run status filter`,value:c,options:$,onChange:m}),(0,q.jsx)(y,{label:`Delivery filter`,value:l,options:ve,onChange:h})]}),a?(0,q.jsx)(o,{tone:`error`,message:a}):null,!a&&i&&t.length===0?(0,q.jsx)(o,{tone:`loading`,message:`Loading run history…`}):null,!a&&!i&&t.length===0?(0,q.jsx)(o,{message:`No runs match the current filters.`}):null,t.length>0?(0,q.jsx)(ee,{label:`Run history`,columns:ye,rows:t,rowKey:S,onRowClick:e=>w(S(e)),selectedKey:C}):null,T?(0,q.jsx)(xe,{entry:T}):null,(0,q.jsxs)(`div`,{className:`ct-cron-run-foot`,children:[(0,q.jsxs)(`span`,{className:`ct-muted`,children:[`Showing `,t.length,` of `,n]}),r?(0,q.jsx)(d,{size:`sm`,onClick:b,children:`Load more`}):null]})]})}var Ce=200;function we(e,t,n){let r=i(e=>e.request),[a,o]=(0,x.useState)(null),[c,l]=(0,x.useState)(null),u=(0,x.useRef)(null),d=e!==null&&t.some(t=>t.id===e);return(0,x.useEffect)(()=>{if(!e||n)return;if(d||a?.id===e){l(null);return}if(u.current===e)return;let t=!1;return l(null),(async()=>{for(let n=0;;n+=Ce)try{let i=await r(`cron.list`,{includeDisabled:!0,limit:Ce,offset:n,sortBy:`nextRunAtMs`,sortDir:`asc`});if(t)return;let a=(i.jobs??[]).find(t=>t.id===e);if(a){u.current=e,o(a);return}if(i.hasMore===!1||(i.jobs?.length??0)===0){u.current=e,l(`Job ${e} not found.`);return}}catch(e){t||l(s(e));return}})(),()=>{t=!0}},[e,n,d,a,r]),{job:a,error:c}}function Te(e){let[t,n]=(0,x.useState)(null),[r,i]=(0,x.useState)({}),[a,o]=(0,x.useState)(!1),[l,u]=(0,x.useState)(null),d=(0,x.useRef)(C),{jobParam:f,jobsQueryLoading:p,allJobs:m,deepLinkJob:h,onDeepLinkOpen:g}=e;return(0,x.useEffect)(()=>{if(!f||t||p)return;let e=m.find(e=>e.id===f)??(h?.id===f?h:null);e&&(g(e.id),i({}),u(null),n({mode:`edit`,job:e,form:F(e,d.current)}))},[f,t,p,m,h,g]),{drawer:t,setDrawer:n,drawerErrors:r,setDrawerErrors:i,drawerError:l,setDrawerError:u,drawerBusy:a,submitDrawer:async()=>{if(!t||a)return;let r=A(t.form,{defaultAgentId:e.defaultAgentId});if(i(r),j(r))return;let l=t.mode===`edit`?t.job:null,p=R(t.form,{editingJob:l});o(!0),u(null);try{l?await e.request(`cron.update`,{id:l.id,patch:p}):await e.request(`cron.add`,p),d.current=t.form,n(null),i({}),f!==null&&c(`automations`,{}),e.onSaved()}catch(e){u(s(e))}finally{o(!1)}},closeDrawer:()=>{t&&(d.current=t.form),n(null),i({}),u(null),f!==null&&c(`automations`,{})},openEdit:e=>{i({}),u(null),n({mode:`edit`,job:e,form:F(e,d.current)})},openClone:t=>{let r=new Set;for(let t of e.listJobs)r.add(t.name.trim().toLowerCase());i({}),u(null),n({mode:`create`,job:null,form:{...F(t,d.current),name:z(t.name,r)}})}}}function Ee(e){let t=(0,x.useRef)(e);t.current=e;let[n,r]=(0,x.useState)([]),[i,a]=(0,x.useState)(!1),[o,c]=(0,x.useState)(null),[l,u]=(0,x.useState)(!1),d=(0,x.useRef)(0),f=(0,x.useCallback)(()=>{d.current+=1,r([]),a(!1),c(null),u(!1)},[]);return(0,x.useEffect)(()=>{f()},[e.resetKey,f]),{rows:(0,x.useMemo)(()=>n.flat(),[n]),hasMore:e.baseHasMore&&!i,busy:l,loadMore:async()=>{if(l)return;let e=t.current,n=d.current,i=o??e.baseNextOffset??e.fallbackOffset;u(!0);try{let t=await e.fetchPage({...e.params,offset:i});if(n!==d.current)return;r(e=>[...e,t.rows]),t.hasMore?c(t.nextOffset??i+t.rows.length):(a(!0),c(null))}catch(t){n===d.current&&e.onError(s(t))}finally{n===d.current&&u(!1)}},reset:f}}function De(){let e=u(),t=i(e=>e.request),n=e.params.get(`job`),[a,c]=(0,x.useState)(null),[l,h]=(0,x.useState)(null),[_,b]=(0,x.useState)(null),S=p(`cron.status`,{},{refreshMs:m,invalidateOn:[`cron`]}),w=p(`agents.list`,{}),[T,E]=(0,x.useState)(pe),D=(0,x.useMemo)(()=>({includeDisabled:T.enabled===`all`,limit:50,offset:0,query:T.query.trim()||void 0,enabled:T.enabled,sortBy:T.sortBy,sortDir:T.sortDir}),[T]),O=p(`cron.list`,D,{refreshMs:m,invalidateOn:[`cron`]}),te=JSON.stringify(D),[k,A]=(0,x.useState)(null),j=O.data?.jobs??[],M=Ee({params:D,fetchPage:e=>t(`cron.list`,e).then(e=>({rows:e.jobs??[],hasMore:e.hasMore===!0,nextOffset:e.nextOffset??null})),resetKey:te,baseHasMore:O.data?.hasMore===!0,baseNextOffset:O.data?.nextOffset??null,fallbackOffset:0,onError:h}),N=(0,x.useMemo)(()=>{let e=new Set;return[...j,...M.rows].filter(t=>!e.has(t.id)&&e.add(t.id))},[j,M.rows]),P=we(n,N,O.loading),F=P.job,I=(0,x.useMemo)(()=>(F?[...N,F]:N).find(e=>e.id===k)??null,[N,F,k]),[ne,L]=(0,x.useState)(!0),R=!ne&&I!==null,[z,ie]=(0,x.useState)(``),[B,ae]=(0,x.useState)(`all`),[V,oe]=(0,x.useState)(`all`),[H,se]=(0,x.useState)(`desc`),U=(0,x.useMemo)(()=>({scope:R?`job`:`all`,id:R?I?.id??void 0:void 0,limit:50,offset:0,status:B===`all`?void 0:B,deliveryStatuses:V===`all`?void 0:[V],query:z.trim()||void 0,sortDir:H}),[R,I,B,V,z,H]),W=p(`cron.runs`,U,{refreshMs:m,invalidateOn:[`cron`]}),G=Ee({params:U,fetchPage:e=>t(`cron.runs`,e).then(e=>({rows:e.entries??[],hasMore:e.hasMore===!0,nextOffset:e.nextOffset??null})),resetKey:JSON.stringify(U),baseHasMore:W.data?.hasMore===!0,baseNextOffset:W.data?.nextOffset??null,fallbackOffset:0,onError:h}),K=(0,x.useRef)({status:S,jobsQuery:O,runs:W});K.current={status:S,jobsQuery:O,runs:W};let ce=(0,x.useCallback)(e=>{A(e),L(!1)},[]),J=Te({jobParam:n,jobsQueryLoading:O.loading,allJobs:N,listJobs:j,deepLinkJob:F,defaultAgentId:w.data?.defaultId??null,request:t,onSaved:Q,onDeepLinkOpen:ce}),Y=re(N,T.kind,T.lastStatus),X=O.data?.total??j.length,Z=M.hasMore,he=W.data?.entries??[],ge=(0,x.useMemo)(()=>{let e=new Set,t=[];for(let n of[...he,...G.rows]){let r=`${n.jobId}:${n.ts}`;e.has(r)||(e.add(r),t.push(n))}return t},[he,G.rows]);function Q(){M.reset(),G.reset();let e=K.current;e.status.reload(),e.jobsQuery.reload(),e.runs.reload()}let $=async(e,n,r)=>{c(e),h(null);try{await t(n,r)}catch(e){h(s(e))}finally{c(null),Q()}},ve=async()=>{let e=_;e&&(b(null),J.drawer?.job?.id===e.id&&J.closeDrawer(),await $(e.id,`cron.remove`,{id:e.id}))},ye=e=>{A(e.id),L(!1)},be=me({onEdit:J.openEdit,onClone:J.openClone,onToggle:(e,t)=>void $(e.id,`cron.update`,{id:e.id,patch:{enabled:t}}),onRun:e=>{A(e.id),L(!1),$(e.id,`cron.run`,{id:e.id,mode:`force`})},onRemove:b,busyId:a});return(0,q.jsxs)(`div`,{className:`ct-page`,"data-testid":`automations-view`,children:[(0,q.jsxs)(g,{title:`Automations`,sub:`Scheduled wakeups, agent runs and wake-gate checks.`,testId:`cron-status`,actions:(0,q.jsx)(d,{size:`sm`,onClick:()=>Q(),children:`Refresh`}),children:[(0,q.jsxs)(`div`,{className:`ct-cron-summary`,children:[(0,q.jsx)(v,{label:`Scheduler`,tone:S.data?.enabled?`ok`:`danger`,value:S.data?S.data.enabled?`On`:`Off`:`—`}),(0,q.jsx)(v,{label:`Jobs`,value:S.data?S.data.jobs:`—`}),(0,q.jsx)(v,{label:`Next wake`,value:r(S.data?.nextWakeAtMs??null)})]}),S.error?(0,q.jsx)(o,{tone:`error`,message:S.error}):null,S.loading&&!S.data?(0,q.jsx)(o,{tone:`loading`,message:`Loading scheduler status…`}):null]}),(0,q.jsxs)(g,{title:`Jobs`,sub:`Showing ${Y.length} of ${X}`,testId:`automations-jobs`,actions:(0,q.jsx)(d,{variant:`primary`,size:`sm`,onClick:()=>{J.setDrawerErrors({}),J.setDrawerError(null),J.setDrawer({mode:`create`,job:null,form:{...C}})},children:`New job`}),children:[(0,q.jsxs)(`div`,{className:`ct-cron-filters`,children:[(0,q.jsxs)(`label`,{className:`ct-search`,children:[(0,q.jsx)(`span`,{className:`ct-muted`,children:`Search`}),(0,q.jsx)(`input`,{className:`ct-search__input`,value:T.query,placeholder:`Search jobs`,"aria-label":`Search jobs`,onChange:e=>E(t=>({...t,query:e.target.value}))})]}),(0,q.jsx)(y,{label:`Enabled filter`,value:T.enabled,options:le,onChange:e=>E(t=>({...t,enabled:e}))}),(0,q.jsx)(y,{label:`Schedule kind filter`,value:T.kind,options:ue,onChange:e=>E(t=>({...t,kind:e}))}),(0,q.jsx)(y,{label:`Last status filter`,value:T.lastStatus,options:de,onChange:e=>E(t=>({...t,lastStatus:e}))}),(0,q.jsxs)(`label`,{className:`ct-cron-sort`,children:[(0,q.jsx)(`span`,{className:`ct-muted`,children:`Sort`}),(0,q.jsx)(`select`,{"aria-label":`Sort jobs by`,value:T.sortBy,onChange:e=>E(t=>({...t,sortBy:e.target.value})),children:Object.keys(fe).map(e=>(0,q.jsx)(`option`,{value:e,children:fe[e]},e))})]}),(0,q.jsx)(y,{label:`Sort direction`,value:T.sortDir,options:[{value:`asc`,label:`Ascending`},{value:`desc`,label:`Descending`}],onChange:e=>E(t=>({...t,sortDir:e}))})]}),O.error?(0,q.jsx)(o,{tone:`error`,message:O.error}):null,P.error?(0,q.jsx)(`div`,{className:`ct-cron-callout`,role:`alert`,children:P.error}):null,O.loading&&!O.data?(0,q.jsx)(o,{tone:`loading`,message:`Loading jobs…`}):null,!O.error&&!O.loading&&j.length===0?(0,q.jsx)(o,{message:`No automations configured`,hint:`Create a job to run prompts on a schedule.`}):null,!O.error&&j.length>0&&Y.length===0?(0,q.jsx)(o,{message:`No jobs match the current filters.`}):null,Y.length>0?(0,q.jsx)(ee,{label:`Automations`,columns:be,rows:Y,rowKey:e=>e.id,onRowClick:ye,selectedKey:k}):null,Z?(0,q.jsx)(`div`,{className:`ct-load-more`,children:(0,q.jsx)(d,{size:`sm`,disabled:M.busy||O.loading,onClick:()=>void M.loadMore(),children:M.busy?`Loading…`:`Load more`})}):null,l?(0,q.jsx)(`div`,{className:`ct-cron-callout`,role:`alert`,children:l}):null]}),(0,q.jsx)(Se,{selectedJob:I,entries:ge,total:W.data?.total??ge.length,hasMore:G.hasMore,loading:W.loading,error:W.error,scopeAll:!R,statusFilter:B,deliveryFilter:V,query:z,sortDir:H,onScopeChange:L,onStatusFilterChange:ae,onDeliveryFilterChange:oe,onQueryChange:ie,onSortDirChange:se,onLoadMore:()=>void G.loadMore()}),J.drawer?(0,q.jsx)(_e,{form:J.drawer.form,fieldErrors:J.drawerErrors,busy:J.drawerBusy,error:J.drawerError,editing:J.drawer.mode===`edit`,onFormChange:e=>J.setDrawer(t=>t&&{...t,form:e}),onSubmit:()=>void J.submitDrawer(),onClose:J.closeDrawer}):null,(0,q.jsx)(f,{open:_!==null,title:`Remove job`,width:`sm`,onClose:()=>b(null),footer:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(d,{onClick:()=>b(null),children:`Cancel`}),(0,q.jsx)(d,{variant:`danger`,onClick:()=>void ve(),children:`Remove`})]}),children:(0,q.jsxs)(`p`,{children:[`Remove `,(0,q.jsx)(`strong`,{children:_?.name}),`? Its schedule and run history stop immediately. This cannot be undone.`]})})]})}export{De as default};
|
|
1
|
+
import{_ as e,c as t,h as n,i as r,l as i,r as a,s as o,t as s}from"./format-CGs6a1G6.js";import{a as c,n as l,o as u}from"./links-DlVrQOFC.js";import{t as d}from"./Button-CGdLofSY.js";import{t as f}from"./Dialog-CQE8Pvh6.js";import{n as p,t as m}from"./use-gateway-query-D25QZANO.js";import{t as h}from"./Badge-CB5TWfdz.js";import{t as g}from"./Panel-9wOynsWc.js";import{t as _}from"./EntityLink-BO2oG3y8.js";import{t as v}from"./Stat-BZwg1PGE.js";import{t as ee}from"./DataTable-CSi930kO.js";import{t as y}from"./FilterPills-9pNaAyrL.js";import{t as b}from"./StatusDot-DHhJ1VpB.js";var x=e(n(),1),S=`last`,C={name:``,description:``,agentId:``,sessionKey:``,identity:``,clearAgent:!1,enabled:!0,deleteAfterRun:!0,scheduleKind:`every`,scheduleAt:``,everyAmount:`30`,everyUnit:`minutes`,cronExpr:`0 7 * * *`,cronTz:``,scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`,jobType:`assistantTask`,sessionTarget:`isolated`,wakeMode:`now`,payloadKind:`agentTurn`,wakeGateKind:`command`,wakeGateCommand:``,wakeGateModel:``,wakeGateProvider:``,wakeGatePrompt:``,wakeGateReason:``,payloadText:``,payloadModel:``,payloadThinking:``,payloadLightContext:!1,deliveryMode:`announce`,deliveryChannel:S,deliveryTo:``,deliveryAccountId:``,deliveryBestEffort:!1,failureAlertMode:`inherit`,failureAlertAfter:`2`,failureAlertCooldownSeconds:`3600`,failureAlertChannel:S,failureAlertTo:``,failureAlertDeliveryMode:`announce`,failureAlertAccountId:``,failureDestinationChannel:`last`,failureDestinationTo:``,failureDestinationAccountId:``,failureDestinationMode:`announce`,timeoutSeconds:``};function w(e,t){let n=Number(e);return Number.isFinite(n)?n:t}function T(e){let t=(e??``).trim();return t&&t.toLowerCase().replaceAll(/[^a-z0-9_-]+/g,`-`).replaceAll(/^-+|-+$/g,``).slice(0,64)||`main`}function E(e,t){return t===`timelineMessage`?{...e,jobType:t,sessionTarget:`main`,payloadKind:`systemEvent`,deliveryMode:`none`,identity:``}:t===`wakeGateCheck`?{...e,jobType:t,sessionTarget:`main`,payloadKind:`wakeGate`,deliveryMode:`none`,identity:``}:{...e,jobType:t,sessionTarget:`isolated`,payloadKind:`agentTurn`}}function D(e){return e.sessionTarget===`main`&&e.payloadKind===`systemEvent`?`timelineMessage`:e.sessionTarget===`main`&&e.payloadKind===`wakeGate`?`wakeGateCheck`:`assistantTask`}function O(e){return e.sessionTarget===`isolated`&&e.payloadKind===`agentTurn`}function te(e){return e.sessionTarget===`isolated`&&e.payloadKind===`agentTurn`}function k(e){return e.deliveryMode!==`announce`||O(e)?e:{...e,deliveryMode:`none`}}function A(e,t={}){let n={};if(e.name.trim()||(n.name=`cron.errors.nameRequired`),e.scheduleKind===`at`){let t=Date.parse(e.scheduleAt);Number.isFinite(t)||(n.scheduleAt=`cron.errors.scheduleAtInvalid`)}else if(e.scheduleKind===`every`)w(e.everyAmount,0)<=0&&(n.everyAmount=`cron.errors.everyAmountInvalid`);else if(e.cronExpr.trim()||(n.cronExpr=`cron.errors.cronExprRequired`),!e.scheduleExact){let t=e.staggerAmount.trim();t&&w(t,0)<=0&&(n.staggerAmount=`cron.errors.staggerAmountInvalid`)}if(e.sessionTarget===`main`){e.payloadKind!==`systemEvent`&&e.payloadKind!==`wakeGate`&&(n.payloadText=`cron.errors.mainJobPayload`);let r=e.clearAgent?``:e.agentId.trim(),i=t.defaultAgentId?.trim()||`main`;r&&T(r)!==T(i)&&!n.payloadText&&(n.agentId=`cron.errors.mainJobAgent`)}else e.payloadKind===`systemEvent`?n.payloadText=`cron.errors.isolatedJobPayload`:e.payloadKind===`wakeGate`&&(n.wakeGateCommand=`cron.errors.isolatedJobPayload`);if(e.payloadKind===`wakeGate`?e.wakeGateKind===`command`&&!e.wakeGateCommand.trim()&&!n.wakeGateCommand&&(n.wakeGateCommand=`cron.errors.systemTextRequired`):!e.payloadText.trim()&&!n.payloadText&&(n.payloadText=e.payloadKind===`systemEvent`?`cron.errors.systemTextRequired`:`cron.errors.agentMessageRequired`),e.payloadKind===`agentTurn`){let t=e.timeoutSeconds.trim();t&&w(t,0)<=0&&(n.timeoutSeconds=`cron.errors.timeoutInvalid`)}if(e.deliveryMode===`webhook`){let t=e.deliveryTo.trim();t?/^https?:\/\//i.test(t)||(n.deliveryTo=`cron.errors.webhookUrlInvalid`):n.deliveryTo=`cron.errors.webhookUrlRequired`}if(e.failureAlertMode===`custom`){let t=e.failureAlertAfter.trim();if(t){let e=w(t,0);(!Number.isFinite(e)||e<=0)&&(n.failureAlertAfter=`cron.errors.failureAlertAfterInvalid`)}let r=e.failureAlertCooldownSeconds.trim();if(r){let e=w(r,-1);(!Number.isFinite(e)||e<0)&&(n.failureAlertCooldownSeconds=`cron.errors.failureAlertCooldownInvalid`)}}return n}function j(e){return Object.keys(e).length>0}function M(e){let t=Date.parse(e);if(!Number.isFinite(t))return``;let n=new Date(t);return`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,`0`)}-${String(n.getDate()).padStart(2,`0`)}T${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`}function N(e){if(e%864e5==0)return{everyAmount:String(Math.max(1,e/864e5)),everyUnit:`days`};if(e%36e5==0)return{everyAmount:String(Math.max(1,e/36e5)),everyUnit:`hours`};let t=Math.max(1,Math.ceil(e/6e4));return{everyAmount:String(t),everyUnit:`minutes`}}function P(e){return e===0?{scheduleExact:!0,staggerAmount:``,staggerUnit:`seconds`}:typeof e!=`number`||!Number.isFinite(e)||e<0?{scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`}:e%6e4==0?{scheduleExact:!1,staggerAmount:String(Math.max(1,e/6e4)),staggerUnit:`minutes`}:{scheduleExact:!1,staggerAmount:String(Math.max(1,Math.ceil(e/1e3))),staggerUnit:`seconds`}}function F(e,t){let n=e.failureAlert,r={...t,name:e.name,description:e.description??``,agentId:e.agentId??``,sessionKey:e.sessionKey??``,identity:e.identity??``,clearAgent:!1,enabled:e.enabled,deleteAfterRun:e.deleteAfterRun??!1,scheduleKind:e.schedule.kind,scheduleAt:``,everyAmount:t.everyAmount,everyUnit:t.everyUnit,cronExpr:t.cronExpr,cronTz:``,scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`,jobType:D({sessionTarget:e.sessionTarget,payloadKind:e.payload.kind}),sessionTarget:e.sessionTarget,wakeMode:e.wakeMode,payloadKind:e.payload.kind,payloadText:e.payload.kind===`systemEvent`?e.payload.text:e.payload.kind===`agentTurn`?e.payload.message:``,payloadModel:e.payload.kind===`agentTurn`?e.payload.model??``:``,payloadThinking:e.payload.kind===`agentTurn`?e.payload.thinking??``:``,payloadLightContext:e.payload.kind===`agentTurn`&&e.payload.lightContext===!0,wakeGateKind:e.payload.kind===`wakeGate`?e.payload.gate.kind:`command`,wakeGateCommand:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`command`?e.payload.gate.command:``,wakeGateModel:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`model`?e.payload.gate.model??``:``,wakeGateProvider:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`model`?e.payload.gate.provider??``:``,wakeGatePrompt:e.payload.kind===`wakeGate`&&e.payload.gate.kind===`model`?e.payload.gate.prompt??``:``,wakeGateReason:e.payload.kind===`wakeGate`?e.payload.reason??``:``,deliveryMode:e.delivery?.mode??`none`,deliveryChannel:e.delivery?.channel??`last`,deliveryTo:e.delivery?.to??``,deliveryAccountId:e.delivery?.accountId??``,deliveryBestEffort:e.delivery?.bestEffort??!1,failureAlertMode:n===!1?`disabled`:n&&typeof n==`object`?`custom`:`inherit`,failureAlertAfter:n&&typeof n==`object`&&typeof n.after==`number`?String(n.after):C.failureAlertAfter,failureAlertCooldownSeconds:n&&typeof n==`object`&&typeof n.cooldownMs==`number`?String(Math.floor(n.cooldownMs/1e3)):C.failureAlertCooldownSeconds,failureAlertChannel:n&&typeof n==`object`?n.channel??`last`:S,failureAlertTo:n&&typeof n==`object`?n.to??``:``,failureAlertDeliveryMode:n&&typeof n==`object`?n.mode??`announce`:`announce`,failureAlertAccountId:n&&typeof n==`object`?n.accountId??``:``,failureDestinationChannel:e.delivery?.failureDestination?.channel??`last`,failureDestinationTo:e.delivery?.failureDestination?.to??``,failureDestinationAccountId:e.delivery?.failureDestination?.accountId??``,failureDestinationMode:e.delivery?.failureDestination?.mode??`announce`,timeoutSeconds:e.payload.kind===`agentTurn`&&typeof e.payload.timeoutSeconds==`number`?String(e.payload.timeoutSeconds):``};if(e.schedule.kind===`at`)r.scheduleAt=M(e.schedule.at);else if(e.schedule.kind===`every`){let t=N(e.schedule.everyMs);r.everyAmount=t.everyAmount,r.everyUnit=t.everyUnit}else{r.cronExpr=e.schedule.expr,r.cronTz=e.schedule.tz??``;let t=P(e.schedule.staggerMs);r.scheduleExact=t.scheduleExact,r.staggerAmount=t.staggerAmount,r.staggerUnit=t.staggerUnit}return k(r)}function I(e){if(e.scheduleKind===`at`){let t=Date.parse(e.scheduleAt);if(!Number.isFinite(t))throw Error(`Enter a valid run time.`);return{kind:`at`,at:new Date(t).toISOString()}}if(e.scheduleKind===`every`){let t=w(e.everyAmount,0);if(t<=0)throw Error(`Interval must be greater than zero.`);let n=e.everyUnit;return{kind:`every`,everyMs:t*(n===`minutes`?6e4:n===`hours`?36e5:864e5)}}let t=e.cronExpr.trim();if(!t)throw Error(`Cron expression is required.`);if(e.scheduleExact)return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0,staggerMs:0};let n=e.staggerAmount.trim();if(!n)return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0};let r=w(n,0);if(r<=0)throw Error(`Stagger must be greater than zero.`);let i=e.staggerUnit===`minutes`?r*6e4:r*1e3;return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0,staggerMs:i}}function ne(e){if(e.payloadKind===`wakeGate`){let t=e.wakeGateReason.trim()||void 0;if(e.wakeGateKind===`command`){let n=e.wakeGateCommand.trim();if(!n)throw Error(`Gate command is required.`);return{kind:`wakeGate`,gate:{kind:`command`,command:n},reason:t}}let n={kind:`model`},r=e.wakeGateModel.trim();r&&(n.model=r);let i=e.wakeGateProvider.trim();i&&(n.provider=i);let a=e.wakeGatePrompt.trim();return a&&(n.prompt=a),{kind:`wakeGate`,gate:n,reason:t}}if(e.payloadKind===`systemEvent`){let t=e.payloadText.trim();if(!t)throw Error(`System event text is required.`);return{kind:`systemEvent`,text:t}}let t=e.payloadText.trim();if(!t)throw Error(`Agent message is required.`);let n={kind:`agentTurn`,message:t},r=e.payloadModel.trim();r&&(n.model=r);let i=e.payloadThinking.trim();i&&(n.thinking=i);let a=w(e.timeoutSeconds,0);return a>0&&(n.timeoutSeconds=a),e.payloadLightContext&&(n.lightContext=!0),n}function L(e){if(e.failureAlertMode===`disabled`)return!1;if(e.failureAlertMode!==`custom`)return;let t=w(e.failureAlertAfter.trim(),0),n=e.failureAlertCooldownSeconds.trim(),r=n.length>0?w(n,0):void 0,i=r!==void 0&&Number.isFinite(r)&&r>=0?Math.floor(r*1e3):void 0,a=e.failureAlertAccountId.trim();return{after:t>0?Math.floor(t):void 0,channel:e.failureAlertChannel.trim()||`last`,to:e.failureAlertTo.trim()||void 0,...i===void 0?{}:{cooldownMs:i},mode:e.failureAlertDeliveryMode,accountId:a||void 0}}function R(e,t={}){let n=k(e),r=t.editingJob??null,i=I(n),a=ne(n);if(a.kind===`agentTurn`){let e=r?.payload.kind===`agentTurn`?r.payload.lightContext:void 0;!n.payloadLightContext&&r&&e!==void 0&&(a.lightContext=!1)}let o=n.deliveryMode,s=n.sessionTarget===`isolated`||o===`webhook`,c=n.failureDestinationTo.trim()||n.failureDestinationAccountId.trim(),l=s&&c?{channel:n.failureDestinationChannel.trim()||void 0,to:n.failureDestinationTo.trim()||void 0,accountId:n.failureDestinationAccountId.trim()||void 0,mode:n.failureDestinationMode}:void 0,u=o&&o!==`none`?{mode:o,channel:o===`announce`?n.deliveryChannel.trim()||`last`:void 0,to:n.deliveryTo.trim()||void 0,accountId:o===`announce`?n.deliveryAccountId.trim():void 0,bestEffort:n.deliveryBestEffort,...l?{failureDestination:l}:{}}:o===`none`?{mode:`none`}:void 0,d=L(n),f=n.clearAgent?null:n.agentId.trim(),p=n.sessionKey.trim()||(r?.sessionKey?null:void 0),m=(te(n)?n.identity.trim():``)||(r?.identity?null:void 0);return{name:n.name.trim(),description:n.description.trim(),agentId:f===null?null:f||void 0,sessionKey:p,identity:m,enabled:n.enabled,deleteAfterRun:n.deleteAfterRun,schedule:i,sessionTarget:n.sessionTarget,wakeMode:n.wakeMode,payload:a,delivery:u,failureAlert:d}}function z(e,t){let n=e.trim()||`Job`,r=`${n} copy`;if(!t.has(r.toLowerCase()))return r;let i=2;for(;i<1e3;){let e=`${n} copy ${i}`;if(!t.has(e.toLowerCase()))return e;i+=1}return`${n} copy ${Date.now()}`}function re(e,t,n){return e.filter(e=>!(t!==`all`&&e.schedule.kind!==t||n!==`all`&&e.state?.lastStatus!==n))}function ie(e){let t=e.schedule;if(t.kind===`at`)return`at ${M(t.at)||t.at}`;if(t.kind===`every`){let e=N(t.everyMs);return`every ${e.everyAmount} ${e.everyUnit}`}let n=t.staggerMs===0,r=typeof t.staggerMs==`number`&&t.staggerMs>0?` (stagger ${Math.round(t.staggerMs/1e3)}s)`:``;return`${t.expr}${t.tz?` (${t.tz})`:``}${n?` (exact)`:r}`}var B={"cron.errors.nameRequired":`Name is required.`,"cron.errors.scheduleAtInvalid":`Enter a valid run time.`,"cron.errors.everyAmountInvalid":`Interval must be greater than zero.`,"cron.errors.cronExprRequired":`Cron expression is required.`,"cron.errors.staggerAmountInvalid":`Stagger must be greater than zero.`,"cron.errors.mainJobPayload":`Main-session jobs need a system event or wake-gate payload.`,"cron.errors.mainJobAgent":`Main-session jobs run on the default agent.`,"cron.errors.isolatedJobPayload":`Isolated jobs need an agent turn payload.`,"cron.errors.systemTextRequired":`System event text is required.`,"cron.errors.agentMessageRequired":`Agent message is required.`,"cron.errors.timeoutInvalid":`Timeout must be greater than zero.`,"cron.errors.webhookUrlRequired":`Webhook URL is required.`,"cron.errors.webhookUrlInvalid":`Webhook URL must start with http:// or https://.`,"cron.errors.failureAlertAfterInvalid":`Alert threshold must be greater than zero.`,"cron.errors.failureAlertCooldownInvalid":`Cooldown cannot be negative.`},ae={timelineMessage:`Timeline message`,assistantTask:`Assistant task`,wakeGateCheck:`Check first, then nudge`},V={ok:`OK`,error:`Error`,skipped:`Skipped`},oe={delivered:`Delivered`,"not-delivered":`Not delivered`,unknown:`Delivery unknown`,"not-requested":`Delivery not requested`},H={ok:`ok`,error:`danger`,skipped:`warn`},se={delivered:`ok`,"not-delivered":`danger`,unknown:`warn`,"not-requested":`neutral`},U={ok:`ok`,error:`danger`,skipped:`warn`};function W(e){return ae[D({sessionTarget:e.sessionTarget,payloadKind:e.payload.kind})]}function G(e){return e?e.clientDisplayName?`${e.clientId}/${e.clientDisplayName}`:e.clientId:null}function K(e){return e.summary??e.error??`No summary.`}function ce(e){return e?typeof e.total_tokens==`number`?`${e.total_tokens} tokens`:typeof e.input_tokens==`number`&&typeof e.output_tokens==`number`?`${e.input_tokens} in / ${e.output_tokens} out`:null:null}var q=t(),le=[{value:`all`,label:`All`},{value:`enabled`,label:`Enabled`},{value:`disabled`,label:`Disabled`}],ue=[{value:`all`,label:`All`},{value:`at`,label:`At`},{value:`every`,label:`Every`},{value:`cron`,label:`Cron`}],de=[{value:`all`,label:`All`},{value:`ok`,label:`OK`},{value:`error`,label:`Error`},{value:`skipped`,label:`Skipped`}],fe={nextRunAtMs:`Next run`,updatedAtMs:`Recently updated`,name:`Name`},pe={query:``,enabled:`all`,kind:`all`,lastStatus:`all`,sortBy:`nextRunAtMs`,sortDir:`asc`};function me(e){let t=e=>e.stopPropagation();return[{key:`name`,label:`Name`,render:e=>(0,q.jsxs)(`div`,{className:`ct-cell-stack`,children:[(0,q.jsx)(`span`,{className:`ct-cell-stack__main`,children:e.name}),e.description?(0,q.jsx)(`span`,{className:`ct-cell-stack__sub`,children:e.description}):null]})},{key:`schedule`,label:`Schedule`,render:ie},{key:`type`,label:`Type`,render:e=>(0,q.jsx)(h,{tone:`neutral`,children:W(e)})},{key:`status`,label:`Status`,render:e=>(0,q.jsxs)(`span`,{className:`ct-cron-state-row`,children:[(0,q.jsx)(h,{tone:e.enabled?`ok`:`neutral`,children:e.enabled?`Enabled`:`Disabled`}),e.state?.lastStatus?(0,q.jsx)(b,{tone:U[e.state.lastStatus],label:`Last run ${V[e.state.lastStatus]}`}):null]})},{key:`last`,label:`Last run`,render:e=>r(e.state?.lastRunAtMs)},{key:`next`,label:`Next run`,render:e=>r(e.state?.nextRunAtMs)},{key:`actions`,label:`Actions`,render:n=>{let r=e.busyId===n.id,i=n.payload.kind===`wakeGate`;return(0,q.jsxs)(`div`,{className:`ct-cron-row-actions`,children:[(0,q.jsx)(d,{size:`sm`,disabled:r,onClick:r=>{t(r),e.onEdit(n)},children:`Edit`}),(0,q.jsx)(d,{size:`sm`,disabled:r,onClick:r=>{t(r),e.onClone(n)},children:`Clone`}),(0,q.jsx)(d,{size:`sm`,disabled:r,title:i?`Evaluates the wake check now; may skip with wake-gate-empty.`:`Ignores the schedule and runs immediately.`,onClick:r=>{t(r),e.onRun(n)},children:r?`Running…`:i?`Test check`:`Run now`}),(0,q.jsx)(d,{size:`sm`,disabled:r,onClick:r=>{t(r),e.onToggle(n,!n.enabled)},children:n.enabled?`Disable`:`Enable`}),(0,q.jsx)(d,{size:`sm`,variant:`danger`,disabled:r,onClick:r=>{t(r),e.onRemove(n)},children:`Delete`})]})}}]}var J=[`off`,`minimal`,`low`,`medium`,`high`];function Y({code:e}){return(0,q.jsx)(`div`,{className:`ct-field-error`,children:B[e]??e})}function X({id:e,label:t,help:n,checked:r,onChange:i}){return(0,q.jsxs)(`div`,{className:`ct-check`,children:[(0,q.jsxs)(`label`,{htmlFor:e,children:[(0,q.jsx)(`input`,{id:e,type:`checkbox`,checked:r,onChange:e=>i(e.target.checked)}),(0,q.jsx)(`span`,{children:t})]}),n?(0,q.jsx)(`div`,{className:`ct-help`,children:n}):null]})}function Z(e,t){return n=>t({...e,...n})}function he({form:e,fieldErrors:t,onFormChange:n}){let r=Z(e,n),i=p(`models.list`,{}),a=e.payloadKind===`agentTurn`,o=e.payloadKind===`wakeGate`,s=(0,x.useMemo)(()=>{let e=(i.data?.models??[]).map(e=>e.id).filter(e=>e.length>0).toSorted((e,t)=>e.localeCompare(t));return Array.from(new Set(e))},[i.data]);return(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Execution`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[e.sessionTarget===`isolated`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-wake-mode`,children:`Wake mode`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-wake-mode`,value:e.wakeMode,onChange:e=>r({wakeMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`now`,children:`Now`}),(0,q.jsx)(`option`,{value:`next-heartbeat`,children:`Next heartbeat`})]})})]}):null,o?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-gate-kind`,children:`Gate type`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-gate-kind`,value:e.wakeGateKind,onChange:e=>r({wakeGateKind:e.target.value}),children:[(0,q.jsx)(`option`,{value:`command`,children:`Command`}),(0,q.jsx)(`option`,{value:`model`,children:`Model`})]})}),e.wakeGateKind===`command`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-gate-command`,children:`Gate command`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`textarea`,{id:`cron-gate-command`,rows:3,value:e.wakeGateCommand,"aria-invalid":t.wakeGateCommand?!0:void 0,onChange:e=>r({wakeGateCommand:e.target.value})}),t.wakeGateCommand?(0,q.jsx)(Y,{code:t.wakeGateCommand}):null]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-gate-model`,children:`Gate model`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-gate-model`,value:e.wakeGateModel,onChange:e=>r({wakeGateModel:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-gate-provider`,children:`Gate provider`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-gate-provider`,value:e.wakeGateProvider,onChange:e=>r({wakeGateProvider:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-gate-prompt`,children:`Gate prompt`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`textarea`,{id:`cron-gate-prompt`,rows:3,value:e.wakeGatePrompt,onChange:e=>r({wakeGatePrompt:e.target.value})})})]}),(0,q.jsx)(`label`,{htmlFor:`cron-gate-reason`,children:`Nudge reason`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-gate-reason`,value:e.wakeGateReason,onChange:e=>r({wakeGateReason:e.target.value}),placeholder:`e.g., inbox, calendar, weather`})})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-payload-text`,children:e.payloadKind===`systemEvent`?`Main timeline message`:`Assistant task prompt`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`textarea`,{id:`cron-payload-text`,rows:4,value:e.payloadText,"aria-invalid":t.payloadText?!0:void 0,onChange:e=>r({payloadText:e.target.value})}),t.payloadText?(0,q.jsx)(Y,{code:t.payloadText}):null]})]}),a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-payload-model`,children:`Model`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-payload-model`,value:e.payloadModel,list:`cron-model-suggestions`,onChange:e=>r({payloadModel:e.target.value}),placeholder:`Agent default`}),(0,q.jsx)(`datalist`,{id:`cron-model-suggestions`,children:s.map(e=>(0,q.jsx)(`option`,{value:e},e))})]}),(0,q.jsx)(`label`,{htmlFor:`cron-payload-thinking`,children:`Thinking`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-payload-thinking`,value:e.payloadThinking,list:`cron-thinking-suggestions`,onChange:e=>r({payloadThinking:e.target.value}),placeholder:`low`}),(0,q.jsx)(`datalist`,{id:`cron-thinking-suggestions`,children:J.map(e=>(0,q.jsx)(`option`,{value:e},e))})]}),(0,q.jsx)(`label`,{htmlFor:`cron-timeout-seconds`,children:`Timeout (seconds)`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-timeout-seconds`,value:e.timeoutSeconds,"aria-invalid":t.timeoutSeconds?!0:void 0,onChange:e=>r({timeoutSeconds:e.target.value}),placeholder:`Optional, e.g. 90`}),t.timeoutSeconds?(0,q.jsx)(Y,{code:t.timeoutSeconds}):null]}),(0,q.jsx)(X,{id:`cron-light-context`,label:`Use shorter startup context`,checked:e.payloadLightContext,onChange:e=>r({payloadLightContext:e})})]}):null]})]})}function ge({form:e,fieldErrors:t,onFormChange:n}){let r=Z(e,n),i=O(e),a=e.sessionTarget===`isolated`||e.deliveryMode===`webhook`;return(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Delivery`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-delivery-mode`,children:`Where summaries go`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-delivery-mode`,value:e.deliveryMode,onChange:e=>r({deliveryMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`none`,children:`None (internal)`}),i?(0,q.jsx)(`option`,{value:`announce`,children:`Announce summary`}):null,(0,q.jsx)(`option`,{value:`webhook`,children:`Webhook POST`})]})}),e.deliveryMode===`announce`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-delivery-channel`,children:`Channel`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-delivery-channel`,value:e.deliveryChannel,onChange:e=>r({deliveryChannel:e.target.value}),placeholder:`last`})}),(0,q.jsx)(`label`,{htmlFor:`cron-delivery-account`,children:`Account ID`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-delivery-account`,value:e.deliveryAccountId,onChange:e=>r({deliveryAccountId:e.target.value})})})]}):null,e.deliveryMode===`none`?null:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-delivery-to`,children:e.deliveryMode===`webhook`?`Webhook URL`:`To`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-delivery-to`,value:e.deliveryTo,"aria-invalid":t.deliveryTo?!0:void 0,onChange:e=>r({deliveryTo:e.target.value}),placeholder:e.deliveryMode===`webhook`?`https://example.com/cron`:`+1555... or chat id`}),t.deliveryTo?(0,q.jsx)(Y,{code:t.deliveryTo}):null]})]}),e.deliveryMode===`announce`?(0,q.jsx)(X,{id:`cron-best-effort`,label:`Best effort delivery`,help:`Do not fail the job if delivery itself fails.`,checked:e.deliveryBestEffort,onChange:e=>r({deliveryBestEffort:e})}):null,a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-fd-to`,children:`Failure destination to`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-fd-to`,value:e.failureDestinationTo,onChange:e=>r({failureDestinationTo:e.target.value}),placeholder:`Separate recipient for failure notifications`})}),(0,q.jsx)(`label`,{htmlFor:`cron-fd-channel`,children:`Failure destination channel`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-fd-channel`,value:e.failureDestinationChannel,onChange:e=>r({failureDestinationChannel:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-fd-account`,children:`Failure destination account ID`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-fd-account`,value:e.failureDestinationAccountId,onChange:e=>r({failureDestinationAccountId:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-fd-mode`,children:`Failure destination mode`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-fd-mode`,value:e.failureDestinationMode,onChange:e=>r({failureDestinationMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`announce`,children:`Announce (via channel)`}),(0,q.jsx)(`option`,{value:`webhook`,children:`Webhook (HTTP POST)`})]})})]}):null]})]})}function Q({form:e,fieldErrors:t,onFormChange:n}){let r=Z(e,n);return(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Failure alerts`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-alert-mode`,children:`Alert mode`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-alert-mode`,value:e.failureAlertMode,onChange:e=>r({failureAlertMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`inherit`,children:`Inherit global setting`}),(0,q.jsx)(`option`,{value:`disabled`,children:`Disable for this job`}),(0,q.jsx)(`option`,{value:`custom`,children:`Custom per-job settings`})]})}),e.failureAlertMode===`custom`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-alert-after`,children:`Alert after`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-alert-after`,value:e.failureAlertAfter,"aria-invalid":t.failureAlertAfter?!0:void 0,onChange:e=>r({failureAlertAfter:e.target.value})}),t.failureAlertAfter?(0,q.jsx)(Y,{code:t.failureAlertAfter}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-cooldown`,children:`Cooldown (seconds)`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-alert-cooldown`,value:e.failureAlertCooldownSeconds,"aria-invalid":t.failureAlertCooldownSeconds?!0:void 0,onChange:e=>r({failureAlertCooldownSeconds:e.target.value})}),t.failureAlertCooldownSeconds?(0,q.jsx)(Y,{code:t.failureAlertCooldownSeconds}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-channel`,children:`Alert channel`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-alert-channel`,value:e.failureAlertChannel,onChange:e=>r({failureAlertChannel:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-to`,children:`Alert to`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-alert-to`,value:e.failureAlertTo,onChange:e=>r({failureAlertTo:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-account`,children:`Alert account ID`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-alert-account`,value:e.failureAlertAccountId,onChange:e=>r({failureAlertAccountId:e.target.value})})}),(0,q.jsx)(`label`,{htmlFor:`cron-alert-delivery`,children:`Alert delivery`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-alert-delivery`,value:e.failureAlertDeliveryMode,onChange:e=>r({failureAlertDeliveryMode:e.target.value}),children:[(0,q.jsx)(`option`,{value:`announce`,children:`Announce (via channel)`}),(0,q.jsx)(`option`,{value:`webhook`,children:`Webhook (HTTP POST)`})]})})]}):null]})]})}function _e({form:e,fieldErrors:t,busy:n,error:r,editing:i,onFormChange:a,onSubmit:o,onClose:s}){let c=t=>a({...e,...t}),l=te(e);return(0,q.jsxs)(f,{open:!0,title:i?`Edit job`:`New job`,onClose:s,width:`lg`,children:[(0,q.jsxs)(`div`,{className:`ct-cron-form`,children:[(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Basics`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-name`,children:`Name`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-name`,value:e.name,"aria-invalid":t.name?!0:void 0,onChange:e=>c({name:e.target.value}),placeholder:`Morning brief`}),t.name?(0,q.jsx)(Y,{code:t.name}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-description`,children:`Description`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-description`,value:e.description,onChange:e=>c({description:e.target.value}),placeholder:`Optional context for this job`})}),(0,q.jsx)(`label`,{htmlFor:`cron-job-type`,children:`Job type`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-job-type`,value:e.jobType,onChange:t=>a(E(e,t.target.value)),children:[(0,q.jsx)(`option`,{value:`assistantTask`,children:`Assistant task`}),(0,q.jsx)(`option`,{value:`timelineMessage`,children:`Timeline message`}),(0,q.jsx)(`option`,{value:`wakeGateCheck`,children:`Check first, then nudge`})]})}),(0,q.jsx)(`label`,{htmlFor:`cron-agent-id`,children:`Agent ID`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-agent-id`,value:e.agentId,disabled:e.clearAgent,"aria-invalid":t.agentId?!0:void 0,onChange:e=>c({agentId:e.target.value}),placeholder:`main or ops`}),t.agentId?(0,q.jsx)(Y,{code:t.agentId}):null]}),(0,q.jsx)(X,{id:`cron-clear-agent`,label:`Use default agent`,checked:e.clearAgent,onChange:e=>c({clearAgent:e})}),l?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-identity`,children:`Attributed user`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-identity`,value:e.identity,onChange:e=>c({identity:e.target.value}),placeholder:`identityLinks key, e.g. YourName`})})]}):null,e.sessionTarget===`isolated`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-session-key`,children:`Agent/session route`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-session-key`,value:e.sessionKey,onChange:e=>c({sessionKey:e.target.value}),placeholder:`Optional routing key`})})]}):null,(0,q.jsx)(X,{id:`cron-enabled`,label:`Enabled`,checked:e.enabled,onChange:e=>c({enabled:e})}),(0,q.jsx)(X,{id:`cron-delete-after-run`,label:`Remove after successful one-shot run`,checked:e.deleteAfterRun,onChange:e=>c({deleteAfterRun:e})})]})]}),(0,q.jsxs)(`section`,{className:`ct-cron-section`,children:[(0,q.jsx)(`h3`,{children:`Schedule`}),(0,q.jsxs)(`div`,{className:`ct-cron-grid`,children:[(0,q.jsx)(`label`,{htmlFor:`cron-schedule-kind`,children:`Repeats`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`select`,{id:`cron-schedule-kind`,value:e.scheduleKind,onChange:e=>c({scheduleKind:e.target.value}),children:[(0,q.jsx)(`option`,{value:`every`,children:`Every`}),(0,q.jsx)(`option`,{value:`at`,children:`At`}),(0,q.jsx)(`option`,{value:`cron`,children:`Cron`})]})}),e.scheduleKind===`at`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-schedule-at`,children:`Run at`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-schedule-at`,type:`datetime-local`,value:e.scheduleAt,"aria-invalid":t.scheduleAt?!0:void 0,onChange:e=>c({scheduleAt:e.target.value})}),t.scheduleAt?(0,q.jsx)(Y,{code:t.scheduleAt}):null]})]}):null,e.scheduleKind===`every`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-every-amount`,children:`Every`}),(0,q.jsxs)(`div`,{className:`ct-cron-inline`,children:[(0,q.jsx)(`input`,{id:`cron-every-amount`,value:e.everyAmount,"aria-invalid":t.everyAmount?!0:void 0,onChange:e=>c({everyAmount:e.target.value}),placeholder:`30`}),(0,q.jsxs)(`select`,{"aria-label":`Every unit`,value:e.everyUnit,onChange:e=>c({everyUnit:e.target.value}),children:[(0,q.jsx)(`option`,{value:`minutes`,children:`Minutes`}),(0,q.jsx)(`option`,{value:`hours`,children:`Hours`}),(0,q.jsx)(`option`,{value:`days`,children:`Days`})]})]}),t.everyAmount?(0,q.jsx)(Y,{code:t.everyAmount}):null]}):null,e.scheduleKind===`cron`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`label`,{htmlFor:`cron-expr`,children:`Expression`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`input`,{id:`cron-expr`,value:e.cronExpr,"aria-invalid":t.cronExpr?!0:void 0,onChange:e=>c({cronExpr:e.target.value}),placeholder:`0 7 * * *`}),t.cronExpr?(0,q.jsx)(Y,{code:t.cronExpr}):null]}),(0,q.jsx)(`label`,{htmlFor:`cron-tz`,children:`Timezone (optional)`}),(0,q.jsx)(`div`,{children:(0,q.jsx)(`input`,{id:`cron-tz`,value:e.cronTz,onChange:e=>c({cronTz:e.target.value}),placeholder:`America/Los_Angeles`})}),(0,q.jsx)(X,{id:`cron-exact`,label:`Run at the exact scheduled time`,checked:e.scheduleExact,onChange:e=>c({scheduleExact:e})}),(0,q.jsx)(`label`,{htmlFor:`cron-stagger-amount`,children:`Stagger window`}),(0,q.jsxs)(`div`,{className:`ct-cron-inline`,children:[(0,q.jsx)(`input`,{id:`cron-stagger-amount`,value:e.staggerAmount,disabled:e.scheduleExact,"aria-invalid":t.staggerAmount?!0:void 0,onChange:e=>c({staggerAmount:e.target.value}),placeholder:`30`}),(0,q.jsxs)(`select`,{"aria-label":`Stagger unit`,value:e.staggerUnit,disabled:e.scheduleExact,onChange:e=>c({staggerUnit:e.target.value}),children:[(0,q.jsx)(`option`,{value:`seconds`,children:`Seconds`}),(0,q.jsx)(`option`,{value:`minutes`,children:`Minutes`})]})]}),t.staggerAmount?(0,q.jsx)(Y,{code:t.staggerAmount}):null]}):null]})]}),(0,q.jsx)(he,{form:e,fieldErrors:t,onFormChange:a}),(0,q.jsx)(ge,{form:e,fieldErrors:t,onFormChange:a}),(0,q.jsx)(Q,{form:e,fieldErrors:t,onFormChange:a})]}),r?(0,q.jsx)(`div`,{className:`ct-cron-callout`,role:`alert`,children:r}):null,(0,q.jsxs)(`footer`,{className:`ct-cron-actions`,children:[(0,q.jsx)(d,{onClick:s,disabled:n,children:`Close`}),(0,q.jsx)(d,{variant:`primary`,onClick:o,disabled:n,children:n?`Saving…`:i?`Save changes`:`Add job`})]})]})}var $=[{value:`all`,label:`All statuses`},{value:`ok`,label:`OK runs`},{value:`error`,label:`Failed runs`},{value:`skipped`,label:`Skipped runs`}],ve=[{value:`all`,label:`All delivery`},{value:`delivered`,label:`Delivered`},{value:`not-delivered`,label:`Not delivered`},{value:`unknown`,label:`Delivery unknown`},{value:`not-requested`,label:`Not requested`}],ye=[{key:`when`,label:`When`,render:e=>(0,q.jsx)(`span`,{title:new Date(e.ts).toISOString(),children:r(e.ts)})},{key:`job`,label:`Job`,mono:!0,render:e=>e.jobName??e.jobId},{key:`status`,label:`Status`,render:e=>(0,q.jsx)(h,{tone:H[e.status??`skipped`],children:e.status?V[e.status]:`Unknown`})},{key:`delivery`,label:`Delivery`,render:e=>e.deliveryStatus?(0,q.jsx)(h,{tone:se[e.deliveryStatus],children:oe[e.deliveryStatus]}):`—`},{key:`duration`,label:`Duration`,align:`end`,render:e=>a(e.durationMs)},{key:`summary`,label:`Summary`,render:e=>(0,q.jsx)(`span`,{className:`ct-cron-run-summary`,children:K(e)})}];function be({job:e}){let t=e.state??{},n=G(e.createdBy);return(0,q.jsxs)(`div`,{className:`ct-cron-inspect`,"data-testid":`cron-selected-job`,children:[(0,q.jsxs)(`div`,{className:`ct-cron-inspect__main`,children:[(0,q.jsx)(`div`,{className:`ct-cron-inspect__title`,children:e.name}),(0,q.jsxs)(`div`,{className:`ct-cron-inspect__sub`,children:[W(e),` · `,ie(e)]}),(0,q.jsxs)(`div`,{className:`ct-cron-inspect__meta`,children:[e.agentId?(0,q.jsxs)(`span`,{children:[`Agent: `,e.agentId]}):null,e.sessionKey?(0,q.jsx)(_,{to:l.session(e.sessionKey),children:(0,q.jsx)(`span`,{className:`ct-mono`,children:e.sessionKey})}):null,n?(0,q.jsxs)(`span`,{children:[`Created by: `,n]}):null]})]}),(0,q.jsxs)(`dl`,{className:`ct-cron-inspect__state`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Status`}),(0,q.jsx)(`dd`,{children:(0,q.jsxs)(`span`,{className:`ct-cron-state-row`,children:[(0,q.jsx)(b,{tone:t.lastStatus?H[t.lastStatus]:`neutral`,label:t.lastStatus?V[t.lastStatus]:`No runs yet`}),t.lastStatus?V[t.lastStatus]:`No runs yet`]})})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Next`}),(0,q.jsx)(`dd`,{title:t.nextRunAtMs?new Date(t.nextRunAtMs).toISOString():void 0,children:r(t.nextRunAtMs)})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Last`}),(0,q.jsx)(`dd`,{title:t.lastRunAtMs?new Date(t.lastRunAtMs).toISOString():void 0,children:r(t.lastRunAtMs)})]}),t.lastError?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Last error`}),(0,q.jsx)(`dd`,{className:`ct-cron-inspect__error`,children:t.lastError})]}):null]})]})}function xe({entry:e}){let t=ce(e.usage);return(0,q.jsxs)(`div`,{className:`ct-cron-run-details`,"data-testid":`cron-run-details`,children:[(0,q.jsxs)(`div`,{className:`ct-cron-run-details__head`,children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__title`,children:K(e)}),(0,q.jsx)(`span`,{className:`ct-muted`,children:new Date(e.ts).toISOString()})]}),e.error?(0,q.jsx)(`div`,{className:`ct-cron-run-details__error`,children:e.error}):null,e.deliveryError?(0,q.jsxs)(`div`,{className:`ct-cron-run-details__error`,children:[`Delivery: `,e.deliveryError]}):null,(0,q.jsxs)(`div`,{className:`ct-cron-run-details__grid`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Run at`}),(0,q.jsx)(`span`,{children:typeof e.runAtMs==`number`?new Date(e.runAtMs).toISOString():`—`})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Duration`}),(0,q.jsx)(`span`,{children:a(e.durationMs)})]}),typeof e.nextRunAtMs==`number`?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Next run`}),(0,q.jsx)(`span`,{children:r(e.nextRunAtMs)})]}):null,e.model?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Model`}),(0,q.jsxs)(`span`,{children:[e.model,e.provider?` (${e.provider})`:``]})]}):null,t?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Usage`}),(0,q.jsx)(`span`,{children:t})]}):null,e.sessionKey?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`ct-cron-run-details__key`,children:`Session`}),(0,q.jsx)(_,{to:l.session(e.sessionKey),children:(0,q.jsx)(`span`,{className:`ct-mono`,children:e.sessionKey})})]}):null]})]})}function Se({selectedJob:e,entries:t,total:n,hasMore:r,loading:i,error:a,scopeAll:s,statusFilter:c,deliveryFilter:l,query:u,sortDir:f,onScopeChange:p,onStatusFilterChange:m,onDeliveryFilterChange:h,onQueryChange:_,onSortDirChange:v,onLoadMore:b}){let S=e=>`${e.jobId}:${e.ts}`,[C,w]=(0,x.useState)(null);(0,x.useEffect)(()=>{w(null)},[s?`all`:e?.id??`none`]);let T=C===null?null:t.find(e=>S(e)===C)??null;return(0,q.jsxs)(g,{title:`Run history`,sub:s?`All jobs`:e?.name??`Select a job`,testId:`cron-runs`,children:[e?(0,q.jsx)(be,{job:e}):null,(0,q.jsxs)(`div`,{className:`ct-cron-run-filters`,children:[(0,q.jsx)(y,{label:`Run scope`,value:s?`all`:`job`,options:[{value:`all`,label:`All jobs`},{value:`job`,label:`This job`,disabled:e==null}],onChange:e=>p(e===`all`)}),(0,q.jsxs)(`label`,{className:`ct-search`,children:[(0,q.jsx)(`span`,{className:`ct-muted`,children:`Search`}),(0,q.jsx)(`input`,{className:`ct-search__input`,value:u,placeholder:`Search runs`,"aria-label":`Search runs`,onChange:e=>_(e.target.value)})]}),(0,q.jsx)(y,{label:`Run order`,value:f,options:[{value:`desc`,label:`Newest first`},{value:`asc`,label:`Oldest first`}],onChange:v})]}),(0,q.jsxs)(`div`,{className:`ct-cron-run-filters`,children:[(0,q.jsx)(y,{label:`Run status filter`,value:c,options:$,onChange:m}),(0,q.jsx)(y,{label:`Delivery filter`,value:l,options:ve,onChange:h})]}),a?(0,q.jsx)(o,{tone:`error`,message:a}):null,!a&&i&&t.length===0?(0,q.jsx)(o,{tone:`loading`,message:`Loading run history…`}):null,!a&&!i&&t.length===0?(0,q.jsx)(o,{message:`No runs match the current filters.`}):null,t.length>0?(0,q.jsx)(ee,{label:`Run history`,columns:ye,rows:t,rowKey:S,onRowClick:e=>w(S(e)),selectedKey:C}):null,T?(0,q.jsx)(xe,{entry:T}):null,(0,q.jsxs)(`div`,{className:`ct-cron-run-foot`,children:[(0,q.jsxs)(`span`,{className:`ct-muted`,children:[`Showing `,t.length,` of `,n]}),r?(0,q.jsx)(d,{size:`sm`,onClick:b,children:`Load more`}):null]})]})}var Ce=200;function we(e,t,n){let r=i(e=>e.request),[a,o]=(0,x.useState)(null),[c,l]=(0,x.useState)(null),u=(0,x.useRef)(null),d=e!==null&&t.some(t=>t.id===e);return(0,x.useEffect)(()=>{if(!e||n)return;if(d||a?.id===e){l(null);return}if(u.current===e)return;let t=!1;return l(null),(async()=>{for(let n=0;;n+=Ce)try{let i=await r(`cron.list`,{includeDisabled:!0,limit:Ce,offset:n,sortBy:`nextRunAtMs`,sortDir:`asc`});if(t)return;let a=(i.jobs??[]).find(t=>t.id===e);if(a){u.current=e,o(a);return}if(i.hasMore===!1||(i.jobs?.length??0)===0){u.current=e,l(`Job ${e} not found.`);return}}catch(e){t||l(s(e));return}})(),()=>{t=!0}},[e,n,d,a,r]),{job:a,error:c}}function Te(e){let[t,n]=(0,x.useState)(null),[r,i]=(0,x.useState)({}),[a,o]=(0,x.useState)(!1),[l,u]=(0,x.useState)(null),d=(0,x.useRef)(C),{jobParam:f,jobsQueryLoading:p,allJobs:m,deepLinkJob:h,onDeepLinkOpen:g}=e;return(0,x.useEffect)(()=>{if(!f||t||p)return;let e=m.find(e=>e.id===f)??(h?.id===f?h:null);e&&(g(e.id),i({}),u(null),n({mode:`edit`,job:e,form:F(e,d.current)}))},[f,t,p,m,h,g]),{drawer:t,setDrawer:n,drawerErrors:r,setDrawerErrors:i,drawerError:l,setDrawerError:u,drawerBusy:a,submitDrawer:async()=>{if(!t||a)return;let r=A(t.form,{defaultAgentId:e.defaultAgentId});if(i(r),j(r))return;let l=t.mode===`edit`?t.job:null,p=R(t.form,{editingJob:l});o(!0),u(null);try{l?await e.request(`cron.update`,{id:l.id,patch:p}):await e.request(`cron.add`,p),d.current=t.form,n(null),i({}),f!==null&&c(`automations`,{}),e.onSaved()}catch(e){u(s(e))}finally{o(!1)}},closeDrawer:()=>{t&&(d.current=t.form),n(null),i({}),u(null),f!==null&&c(`automations`,{})},openEdit:e=>{i({}),u(null),n({mode:`edit`,job:e,form:F(e,d.current)})},openClone:t=>{let r=new Set;for(let t of e.listJobs)r.add(t.name.trim().toLowerCase());i({}),u(null),n({mode:`create`,job:null,form:{...F(t,d.current),name:z(t.name,r)}})}}}function Ee(e){let t=(0,x.useRef)(e);t.current=e;let[n,r]=(0,x.useState)([]),[i,a]=(0,x.useState)(!1),[o,c]=(0,x.useState)(null),[l,u]=(0,x.useState)(!1),d=(0,x.useRef)(0),f=(0,x.useCallback)(()=>{d.current+=1,r([]),a(!1),c(null),u(!1)},[]);return(0,x.useEffect)(()=>{f()},[e.resetKey,f]),{rows:(0,x.useMemo)(()=>n.flat(),[n]),hasMore:e.baseHasMore&&!i,busy:l,loadMore:async()=>{if(l)return;let e=t.current,n=d.current,i=o??e.baseNextOffset??e.fallbackOffset;u(!0);try{let t=await e.fetchPage({...e.params,offset:i});if(n!==d.current)return;r(e=>[...e,t.rows]),t.hasMore?c(t.nextOffset??i+t.rows.length):(a(!0),c(null))}catch(t){n===d.current&&e.onError(s(t))}finally{n===d.current&&u(!1)}},reset:f}}function De(){let e=u(),t=i(e=>e.request),n=e.params.get(`job`),[a,c]=(0,x.useState)(null),[l,h]=(0,x.useState)(null),[_,b]=(0,x.useState)(null),S=p(`cron.status`,{},{refreshMs:m,invalidateOn:[`cron`]}),w=p(`agents.list`,{}),[T,E]=(0,x.useState)(pe),D=(0,x.useMemo)(()=>({includeDisabled:T.enabled===`all`,limit:50,offset:0,query:T.query.trim()||void 0,enabled:T.enabled,sortBy:T.sortBy,sortDir:T.sortDir}),[T]),O=p(`cron.list`,D,{refreshMs:m,invalidateOn:[`cron`]}),te=JSON.stringify(D),[k,A]=(0,x.useState)(null),j=O.data?.jobs??[],M=Ee({params:D,fetchPage:e=>t(`cron.list`,e).then(e=>({rows:e.jobs??[],hasMore:e.hasMore===!0,nextOffset:e.nextOffset??null})),resetKey:te,baseHasMore:O.data?.hasMore===!0,baseNextOffset:O.data?.nextOffset??null,fallbackOffset:0,onError:h}),N=(0,x.useMemo)(()=>{let e=new Set;return[...j,...M.rows].filter(t=>!e.has(t.id)&&e.add(t.id))},[j,M.rows]),P=we(n,N,O.loading),F=P.job,I=(0,x.useMemo)(()=>(F?[...N,F]:N).find(e=>e.id===k)??null,[N,F,k]),[ne,L]=(0,x.useState)(!0),R=!ne&&I!==null,[z,ie]=(0,x.useState)(``),[B,ae]=(0,x.useState)(`all`),[V,oe]=(0,x.useState)(`all`),[H,se]=(0,x.useState)(`desc`),U=(0,x.useMemo)(()=>({scope:R?`job`:`all`,id:R?I?.id??void 0:void 0,limit:50,offset:0,status:B===`all`?void 0:B,deliveryStatuses:V===`all`?void 0:[V],query:z.trim()||void 0,sortDir:H}),[R,I,B,V,z,H]),W=p(`cron.runs`,U,{refreshMs:m,invalidateOn:[`cron`]}),G=Ee({params:U,fetchPage:e=>t(`cron.runs`,e).then(e=>({rows:e.entries??[],hasMore:e.hasMore===!0,nextOffset:e.nextOffset??null})),resetKey:JSON.stringify(U),baseHasMore:W.data?.hasMore===!0,baseNextOffset:W.data?.nextOffset??null,fallbackOffset:0,onError:h}),K=(0,x.useRef)({status:S,jobsQuery:O,runs:W});K.current={status:S,jobsQuery:O,runs:W};let ce=(0,x.useCallback)(e=>{A(e),L(!1)},[]),J=Te({jobParam:n,jobsQueryLoading:O.loading,allJobs:N,listJobs:j,deepLinkJob:F,defaultAgentId:w.data?.defaultId??null,request:t,onSaved:Q,onDeepLinkOpen:ce}),Y=re(N,T.kind,T.lastStatus),X=O.data?.total??j.length,Z=M.hasMore,he=W.data?.entries??[],ge=(0,x.useMemo)(()=>{let e=new Set,t=[];for(let n of[...he,...G.rows]){let r=`${n.jobId}:${n.ts}`;e.has(r)||(e.add(r),t.push(n))}return t},[he,G.rows]);function Q(){M.reset(),G.reset();let e=K.current;e.status.reload(),e.jobsQuery.reload(),e.runs.reload()}let $=async(e,n,r)=>{c(e),h(null);try{await t(n,r)}catch(e){h(s(e))}finally{c(null),Q()}},ve=async()=>{let e=_;e&&(b(null),J.drawer?.job?.id===e.id&&J.closeDrawer(),await $(e.id,`cron.remove`,{id:e.id}))},ye=e=>{A(e.id),L(!1)},be=me({onEdit:J.openEdit,onClone:J.openClone,onToggle:(e,t)=>void $(e.id,`cron.update`,{id:e.id,patch:{enabled:t}}),onRun:e=>{A(e.id),L(!1),$(e.id,`cron.run`,{id:e.id,mode:`force`})},onRemove:b,busyId:a});return(0,q.jsxs)(`div`,{className:`ct-page`,"data-testid":`automations-view`,children:[(0,q.jsxs)(g,{title:`Automations`,sub:`Scheduled wakeups, agent runs and wake-gate checks.`,testId:`cron-status`,actions:(0,q.jsx)(d,{size:`sm`,onClick:()=>Q(),children:`Refresh`}),children:[(0,q.jsxs)(`div`,{className:`ct-cron-summary`,children:[(0,q.jsx)(v,{label:`Scheduler`,tone:S.data?.enabled?`ok`:`danger`,value:S.data?S.data.enabled?`On`:`Off`:`—`}),(0,q.jsx)(v,{label:`Jobs`,value:S.data?S.data.jobs:`—`}),(0,q.jsx)(v,{label:`Next wake`,value:r(S.data?.nextWakeAtMs??null)})]}),S.error?(0,q.jsx)(o,{tone:`error`,message:S.error}):null,S.loading&&!S.data?(0,q.jsx)(o,{tone:`loading`,message:`Loading scheduler status…`}):null]}),(0,q.jsxs)(g,{title:`Jobs`,sub:`Showing ${Y.length} of ${X}`,testId:`automations-jobs`,actions:(0,q.jsx)(d,{variant:`primary`,size:`sm`,onClick:()=>{J.setDrawerErrors({}),J.setDrawerError(null),J.setDrawer({mode:`create`,job:null,form:{...C}})},children:`New job`}),children:[(0,q.jsxs)(`div`,{className:`ct-cron-filters`,children:[(0,q.jsxs)(`label`,{className:`ct-search`,children:[(0,q.jsx)(`span`,{className:`ct-muted`,children:`Search`}),(0,q.jsx)(`input`,{className:`ct-search__input`,value:T.query,placeholder:`Search jobs`,"aria-label":`Search jobs`,onChange:e=>E(t=>({...t,query:e.target.value}))})]}),(0,q.jsx)(y,{label:`Enabled filter`,value:T.enabled,options:le,onChange:e=>E(t=>({...t,enabled:e}))}),(0,q.jsx)(y,{label:`Schedule kind filter`,value:T.kind,options:ue,onChange:e=>E(t=>({...t,kind:e}))}),(0,q.jsx)(y,{label:`Last status filter`,value:T.lastStatus,options:de,onChange:e=>E(t=>({...t,lastStatus:e}))}),(0,q.jsxs)(`label`,{className:`ct-cron-sort`,children:[(0,q.jsx)(`span`,{className:`ct-muted`,children:`Sort`}),(0,q.jsx)(`select`,{"aria-label":`Sort jobs by`,value:T.sortBy,onChange:e=>E(t=>({...t,sortBy:e.target.value})),children:Object.keys(fe).map(e=>(0,q.jsx)(`option`,{value:e,children:fe[e]},e))})]}),(0,q.jsx)(y,{label:`Sort direction`,value:T.sortDir,options:[{value:`asc`,label:`Ascending`},{value:`desc`,label:`Descending`}],onChange:e=>E(t=>({...t,sortDir:e}))})]}),O.error?(0,q.jsx)(o,{tone:`error`,message:O.error}):null,P.error?(0,q.jsx)(`div`,{className:`ct-cron-callout`,role:`alert`,children:P.error}):null,O.loading&&!O.data?(0,q.jsx)(o,{tone:`loading`,message:`Loading jobs…`}):null,!O.error&&!O.loading&&j.length===0?(0,q.jsx)(o,{message:`No automations configured`,hint:`Create a job to run prompts on a schedule.`}):null,!O.error&&j.length>0&&Y.length===0?(0,q.jsx)(o,{message:`No jobs match the current filters.`}):null,Y.length>0?(0,q.jsx)(ee,{label:`Automations`,columns:be,rows:Y,rowKey:e=>e.id,onRowClick:ye,selectedKey:k}):null,Z?(0,q.jsx)(`div`,{className:`ct-load-more`,children:(0,q.jsx)(d,{size:`sm`,disabled:M.busy||O.loading,onClick:()=>void M.loadMore(),children:M.busy?`Loading…`:`Load more`})}):null,l?(0,q.jsx)(`div`,{className:`ct-cron-callout`,role:`alert`,children:l}):null]}),(0,q.jsx)(Se,{selectedJob:I,entries:ge,total:W.data?.total??ge.length,hasMore:G.hasMore,loading:W.loading,error:W.error,scopeAll:!R,statusFilter:B,deliveryFilter:V,query:z,sortDir:H,onScopeChange:L,onStatusFilterChange:ae,onDeliveryFilterChange:oe,onQueryChange:ie,onSortDirChange:se,onLoadMore:()=>void G.loadMore()}),J.drawer?(0,q.jsx)(_e,{form:J.drawer.form,fieldErrors:J.drawerErrors,busy:J.drawerBusy,error:J.drawerError,editing:J.drawer.mode===`edit`,onFormChange:e=>J.setDrawer(t=>t&&{...t,form:e}),onSubmit:()=>void J.submitDrawer(),onClose:J.closeDrawer}):null,(0,q.jsx)(f,{open:_!==null,title:`Remove job`,width:`sm`,onClose:()=>b(null),footer:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(d,{onClick:()=>b(null),children:`Cancel`}),(0,q.jsx)(d,{variant:`danger`,onClick:()=>void ve(),children:`Remove`})]}),children:(0,q.jsxs)(`p`,{children:[`Remove `,(0,q.jsx)(`strong`,{children:_?.name}),`? Its schedule and run history stop immediately. This cannot be undone.`]})})]})}export{De as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e}from"./format-CGs6a1G6.js";var t=e();function n({tone:e=`neutral`,children:n}){return(0,t.jsx)(`span`,{className:`ct-badge ct-badge--${e}`,children:n})}export{n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e}from"./format-
|
|
1
|
+
import{c as e}from"./format-CGs6a1G6.js";var t=e();function n({variant:e=`secondary`,size:n=`md`,className:r,type:i=`button`,children:a,...o}){return(0,t.jsx)(`button`,{type:i,className:[`ct-btn`,`ct-btn--${e}`,n===`sm`?`ct-btn--sm`:null,r].filter(Boolean).join(` `),...o,children:a})}export{n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t,h as n,i as r,l as i,r as a,s as o,t as s}from"./format-dlOOV12I.js";import{t as c}from"./Button-DL76WqX4.js";import{r as l}from"./config-store-27hOx1yp.js";import{n as u,t as d}from"./use-gateway-query-CF94JYnM.js";import{t as f}from"./Panel-CyfpswdJ.js";import{t as p}from"./ConfigForm-CbvOdyOA.js";import{t as m}from"./ConfirmDialog-DGHQXUr5.js";var h=e(n(),1),g=[`whatsapp`,`telegram`,`discord`,`googlechat`,`slack`,`signal`,`imessage`,`nostr`],_=600*1e3;function v(e,t){let n=e?.channels?.[t];return typeof n==`object`&&n?n:void 0}function y(e,t){if(!e)return!1;let n=v(e,t),r=e=>n?.[e]===!0,i=(e.channelAccounts?.[t]??[]).some(e=>e.configured||e.running||e.connected);return r(`configured`)||r(`running`)||r(`connected`)||i}function b(e){return(e?.channelMeta&&e.channelMeta.length>0?e.channelMeta.map(e=>e.id):e?.channelOrder&&e.channelOrder.length>0?e.channelOrder:g).map((t,n)=>({key:t,enabled:y(e,t),order:n})).toSorted((e,t)=>e.enabled===t.enabled?e.order-t.order:e.enabled?-1:1).map(e=>e.key)}function x(e,t){return e?.channelMeta?.find(e=>e.id===t)?.label??e?.channelLabels?.[t]??t}function S(e,t){let n=v(e,t);if(!n)return{};let r={};return typeof n.configured==`boolean`&&(r.configured=n.configured),typeof n.running==`boolean`&&(r.running=n.running),typeof n.connected==`boolean`&&(r.connected=n.connected),typeof n.lastError==`string`&&(r.lastError=n.lastError),typeof n.lastStartAt==`number`&&(r.lastStartAt=n.lastStartAt),typeof n.lastProbeAt==`number`&&(r.lastProbeAt=n.lastProbeAt),typeof n.probe==`object`&&n.probe!==null&&(r.probe=n.probe),r}var C={googlechat:[`credentialSource`,`audienceType`,`audience`],signal:[`baseUrl`]};function w(e,t){let n=v(e,t);return n?(C[t]??[]).flatMap(e=>e in n?[{label:e,value:L(n[e])}]:[]):[]}function T(e){return e==null||e===``?`n/a`:typeof e==`boolean`?e?`Yes`:`No`:typeof e!=`string`&&typeof e!=`number`?`n/a`:String(e)}function E(e){return e?r(e):`n/a`}function D(e){if(typeof e!=`object`||!e||!(`ok`in e))return null;let{ok:t,status:n,error:r}=e,i=t?`Probe ok`:`Probe failed`,a=[n,r].filter(e=>e!=null&&e!==``);return a.length>0?`${i} · ${a.join(` `)}`:i}function O(e,t=Date.now()){return e.lastInboundAt?t-e.lastInboundAt<_:!1}function k(e,t=Date.now()){return e.running?`Yes`:O(e,t)?`Active`:`No`}function A(e,t=Date.now()){return e.connected===!0?`Yes`:e.connected===!1?`No`:O(e,t)?`Active`:`n/a`}function j(e){return e?e.length<=20?e:`${e.slice(0,8)}...${e.slice(-8)}`:`n/a`}function M(e){return[...e?.lastApiRequests??[]].toReversed().find(e=>e.error)?.error??e?.lastError??null}function N(e,t,n){return e.filter(e=>e.channelCorrelation?.channel===t&&e.channelCorrelation.accountId===n)}function P(e){let t=e.channelCorrelation;return`${t?.runId??(t?.updateId===void 0?void 0:`update:${t.updateId}`)??`telegram run`} ${e.state} q:${e.queueDepth}`}var F=[`groupPolicy`,`streamMode`,`dmPolicy`];function I(e,t){if(!e)return null;let n=(e.channels??{})[t];if(n&&typeof n==`object`)return n;let r=e[t];return r&&typeof r==`object`?r:null}function L(e){if(e==null)return`n/a`;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return`n/a`}}function R(e,t){let n=I(e,t);return n?F.flatMap(e=>e in n?[{label:e,value:L(n[e])}]:[]):[]}var z=t();function B({channelId:e,onAfterSave:t,onAfterReload:n}){let r=l(e=>e.draft),i=l(e=>e.schema),a=l(e=>e.busy),o=l(e=>e.dirty),s=l(e=>e.error),u=R(r,e),d=async()=>{await l.getState().save(`set`),t()},f=async()=>{await l.getState().load(),n()};return(0,z.jsxs)(`div`,{className:`ct-channels__config`,"data-testid":`channel-config-${e}`,children:[a&&!i?(0,z.jsx)(`p`,{className:`ct-muted`,children:`Loading config schema…`}):(0,z.jsx)(p,{schema:i?.schema??null,uiHints:i?.uiHints??{},value:r,disabled:a,rootPath:[`channels`,e],onPatch:(e,t)=>l.getState().setPath(e,t)}),u.length>0?(0,z.jsx)(`dl`,{className:`ct-kv ct-channels__extras`,children:u.map(e=>(0,z.jsxs)(`div`,{className:`ct-kv__row`,children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.label))}):null,s?(0,z.jsx)(`div`,{className:`ct-channels__callout ct-channels__callout--danger`,role:`alert`,children:s}):null,(0,z.jsxs)(`div`,{className:`ct-channels__actions`,children:[(0,z.jsx)(c,{variant:`primary`,disabled:a||!o,"data-testid":`channel-config-save-${e}`,onClick:()=>void d(),children:a?`Saving…`:`Save`}),(0,z.jsx)(c,{disabled:a,onClick:()=>void f(),children:`Reload`})]})]})}function V({rows:e}){return(0,z.jsx)(`dl`,{className:`ct-kv ct-channels__status`,children:e.map(([e,t])=>(0,z.jsxs)(`div`,{className:`ct-kv__row`,children:[(0,z.jsx)(`dt`,{children:e}),(0,z.jsx)(`dd`,{children:t})]},e))})}function H({tone:e=`info`,children:t}){return(0,z.jsx)(`div`,{className:`ct-channels__callout ct-channels__callout--${e}`,role:e===`danger`?`alert`:void 0,children:t})}function U({title:e,accountId:t,rows:n,children:r}){return(0,z.jsxs)(`div`,{className:`ct-channels__account`,children:[(0,z.jsxs)(`div`,{className:`ct-channels__account-head`,children:[(0,z.jsx)(`span`,{className:`ct-channels__account-title`,children:e}),(0,z.jsx)(`span`,{className:`ct-channels__account-id ct-mono`,children:t})]}),(0,z.jsx)(V,{rows:n}),r]})}function W({id:e,label:t,flags:n,extras:r,accounts:i,probeBusy:a=!1,onProbe:o,configSection:s}){let l=D(n.probe);return(0,z.jsxs)(f,{testId:`channel-card-${e}`,title:t,sub:`Channel status and configuration.`,actions:(0,z.jsx)(c,{onClick:o,disabled:a,children:`Probe`}),children:[i.length>=2?(0,z.jsxs)(`div`,{className:`ct-channels__count`,children:[`Accounts (`,i.length,`)`]}):null,i.length>0?(0,z.jsx)(`div`,{className:`ct-channels__accounts`,children:i.map(e=>(0,z.jsx)(U,{title:e.name||e.accountId,accountId:e.accountId,rows:[[`Running`,k(e)],[`Configured`,T(e.configured)],[`Connected`,A(e)],[`Last inbound`,E(e.lastInboundAt)]],children:e.lastError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:e.lastError}):null},e.accountId))}):(0,z.jsx)(V,{rows:[[`Configured`,T(n.configured)],[`Running`,T(n.running)],[`Connected`,T(n.connected)],[`Last start`,E(n.lastStartAt)],[`Last probe`,E(n.lastProbeAt)]]}),r.length>0?(0,z.jsx)(V,{rows:r.map(e=>[e.label,e.value])}):null,n.lastError?(0,z.jsx)(H,{tone:`danger`,children:n.lastError}):null,l?(0,z.jsx)(H,{children:l}):null,s]})}var G=[`name`,`displayName`,`about`,`picture`,`banner`,`website`,`nip05`,`lud16`];function K(e){let t=Object.fromEntries(G.map(t=>[t,e?.[t]??``]));return{values:t,original:{...t},saving:!1,importing:!1,error:null,success:null,fieldErrors:{},showAdvanced:!!(e?.banner||e?.website||e?.nip05||e?.lud16)}}function q(e){return G.some(t=>e.values[t]!==e.original[t])}function J(e){return Object.fromEntries(G.map(t=>[t,e[t]]).filter(e=>e[1]!==``))}function Y(e){if(!Array.isArray(e))return{};let t={};for(let n of e){if(typeof n!=`string`)continue;let e=n.indexOf(`:`);if(e<=0)continue;let r=n.slice(0,e).trim(),i=n.slice(e+1).trim();r&&i&&(t[r]=i)}return t}function X(e,t){let n={...e.values,...t};return{values:n,showAdvanced:!!(n.banner||n.website||n.nip05||n.lud16)}}async function Z(e,t,n,r,i){let a=await fetch(`/api/channels/nostr/${encodeURIComponent(e)}${t}`,{method:n,headers:{"Content-Type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:i===void 0?void 0:JSON.stringify(i)}),o=await a.json().catch(()=>null),s=o===null?null:{...o,...o.error===void 0?{}:{error:ee(o.error,a.status)}};return{status:a.status,data:s}}function ee(e,t){if(typeof e==`string`&&e.trim().length>0)return e;if(e&&typeof e==`object`&&`message`in e){let t=e.message;if(typeof t==`string`&&t.trim().length>0)return t}return`Request failed (${t})`}function Q({label:e,value:t,multiline:n,placeholder:r,help:i,error:a,disabled:o,onChange:s}){let c={value:t,placeholder:r??``,disabled:o,onChange:e=>s(e.target.value)};return(0,z.jsxs)(`div`,{className:`ct-channels__field`,children:[(0,z.jsxs)(`label`,{children:[e,n?(0,z.jsx)(`textarea`,{...c,rows:3,maxLength:2e3}):(0,z.jsx)(`input`,{...c,type:`text`,maxLength:256})]}),i?(0,z.jsx)(`div`,{className:`ct-channels__field-help`,children:i}):null,a?(0,z.jsx)(`div`,{className:`ct-channels__field-error`,children:a}):null]})}function te({nostr:e,accounts:t,onRefresh:n,onProfilePublished:r,configSection:i}){let a=t[0],o=a?.accountId??`default`,l=e?.configured??a?.configured??!1,u=e?.lastError??a?.lastError??null,d=a?.profile??e?.profile??null,[p,m]=(0,h.useState)(null),[g,_]=(0,h.useState)(``),v=(e,t)=>{m(n=>n&&{...n,values:{...n.values,[e]:t}})},y=async()=>{if(!(!p||p.saving)){m({...p,saving:!0,error:null,success:null,fieldErrors:{}});try{let{status:e,data:t}=await Z(o,`/profile`,`PUT`,g.trim(),J(p.values));if(!t?.ok){m(n=>n&&{...n,saving:!1,error:t?.error??`Profile update failed (${e})`,fieldErrors:Y(t?.details)});return}if(!t.persisted){m(e=>e&&{...e,saving:!1,error:`Profile publish failed on all relays.`});return}m(e=>e&&{...e,saving:!1,error:null,success:`Profile published to relays.`,fieldErrors:{},original:{...e.values}}),r()}catch(e){m(t=>t&&{...t,saving:!1,error:`Profile update failed: ${s(e)}`})}}},b=async()=>{if(!(!p||p.importing||p.saving)){m({...p,importing:!0,error:null,success:null});try{let{status:e,data:t}=await Z(o,`/profile/import`,`POST`,g.trim(),{autoMerge:!0});if(!t?.ok){m(n=>n&&{...n,importing:!1,error:t?.error??`Profile import failed (${e})`});return}let n=X(p,t.merged??t.imported??null);m(e=>e&&{...e,...n,importing:!1,success:t.saved?`Profile imported from relays. Review and publish.`:`Profile imported. Review and publish.`}),t.saved&&r()}catch(e){m(t=>t&&{...t,importing:!1,error:`Profile import failed: ${s(e)}`})}}};return(0,z.jsxs)(f,{testId:`channel-card-nostr`,title:`Nostr`,sub:`Decentralized DMs via Nostr relays (NIP-04).`,actions:(0,z.jsx)(c,{onClick:n,disabled:p?.saving,children:`Refresh`}),children:[t.length>1?(0,z.jsx)(`div`,{className:`ct-channels__accounts`,children:t.map(e=>(0,z.jsx)(U,{title:e.profile?.displayName??e.profile?.name??e.name??e.accountId,accountId:e.accountId,rows:[[`Running`,T(e.running)],[`Configured`,T(e.configured)],[`Public Key`,j(e.publicKey)],[`Last inbound`,E(e.lastInboundAt)]],children:e.lastError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:e.lastError}):null},e.accountId))}):(0,z.jsx)(V,{rows:[[`Configured`,T(l)],[`Running`,T(e?.running??a?.running??!1)],[`Public Key`,j(e?.publicKey??a?.publicKey)],[`Last start`,E(e?.lastStartAt??a?.lastStartAt??null)]]}),u?(0,z.jsx)(H,{tone:`danger`,children:u}):null,(()=>{if(p)return(0,z.jsxs)(`div`,{className:`ct-channels__profile-form`,"data-testid":`nostr-profile-form`,children:[(0,z.jsxs)(`div`,{className:`ct-channels__profile-head`,children:[(0,z.jsx)(`strong`,{children:`Edit Profile`}),(0,z.jsxs)(`span`,{className:`ct-muted`,children:[`Account: `,o]})]}),p.error?(0,z.jsx)(H,{tone:`danger`,children:p.error}):null,p.success?(0,z.jsx)(H,{children:p.success}):null,(0,z.jsx)(Q,{label:`Username`,value:p.values.name??``,placeholder:`satoshi`,help:`Short username (e.g., satoshi)`,error:p.fieldErrors.name,disabled:p.saving,onChange:e=>v(`name`,e)}),(0,z.jsx)(Q,{label:`Display Name`,value:p.values.displayName??``,placeholder:`Satoshi Nakamoto`,help:`Your full display name`,error:p.fieldErrors.displayName,disabled:p.saving,onChange:e=>v(`displayName`,e)}),(0,z.jsx)(Q,{label:`Bio`,value:p.values.about??``,multiline:!0,placeholder:`Tell people about yourself...`,help:`A brief bio or description`,error:p.fieldErrors.about,disabled:p.saving,onChange:e=>v(`about`,e)}),(0,z.jsx)(Q,{label:`Avatar URL`,value:p.values.picture??``,placeholder:`https://example.com/avatar.jpg`,help:`HTTPS URL to your profile picture`,error:p.fieldErrors.picture,disabled:p.saving,onChange:e=>v(`picture`,e)}),p.showAdvanced?(0,z.jsxs)(`div`,{className:`ct-channels__profile-advanced`,children:[(0,z.jsx)(`div`,{className:`ct-muted`,children:`Advanced`}),(0,z.jsx)(Q,{label:`Banner URL`,value:p.values.banner??``,error:p.fieldErrors.banner,disabled:p.saving,onChange:e=>v(`banner`,e)}),(0,z.jsx)(Q,{label:`Website`,value:p.values.website??``,error:p.fieldErrors.website,disabled:p.saving,onChange:e=>v(`website`,e)}),(0,z.jsx)(Q,{label:`NIP-05 Identifier`,value:p.values.nip05??``,placeholder:`you@example.com`,help:`Verifiable identifier (e.g., you@domain.com)`,error:p.fieldErrors.nip05,disabled:p.saving,onChange:e=>v(`nip05`,e)}),(0,z.jsx)(Q,{label:`Lightning Address`,value:p.values.lud16??``,placeholder:`you@getalby.com`,help:`Lightning address for tips (LUD-16)`,error:p.fieldErrors.lud16,disabled:p.saving,onChange:e=>v(`lud16`,e)})]}):null,(0,z.jsxs)(`div`,{className:`ct-channels__field`,children:[(0,z.jsxs)(`label`,{htmlFor:`nostr-gateway-credential`,children:[`Gateway token or password`,(0,z.jsx)(`input`,{id:`nostr-gateway-credential`,type:`password`,autoComplete:`off`,placeholder:`Required on token/password gateways`,value:g,disabled:p.saving||p.importing,onChange:e=>_(e.target.value)})]}),(0,z.jsx)(`div`,{className:`ct-channels__field-help`,children:`Sent only as this request's Authorization header; never stored.`})]}),(0,z.jsxs)(`div`,{className:`ct-channels__actions`,children:[(0,z.jsx)(c,{variant:`primary`,disabled:p.saving||!q(p),onClick:()=>void y(),children:p.saving?`Saving…`:`Save & Publish`}),(0,z.jsx)(c,{disabled:p.importing||p.saving,onClick:()=>void b(),children:p.importing?`Importing…`:`Import from Relays`}),(0,z.jsx)(c,{onClick:()=>m({...p,showAdvanced:!p.showAdvanced}),children:p.showAdvanced?`Hide Advanced`:`Show Advanced`}),(0,z.jsx)(c,{disabled:p.saving,onClick:()=>{m(null),_(``)},children:`Cancel`})]}),q(p)?(0,z.jsx)(`div`,{className:`ct-channels__field-help`,children:`You have unsaved changes`}):null]});let{name:e,displayName:t,about:n,nip05:r}=d??{};return(0,z.jsxs)(`div`,{className:`ct-channels__profile`,"data-testid":`nostr-profile`,children:[(0,z.jsxs)(`div`,{className:`ct-channels__profile-head`,children:[(0,z.jsx)(`strong`,{children:`Profile`}),l?(0,z.jsx)(c,{size:`sm`,onClick:()=>m(K(d??void 0)),children:`Edit Profile`}):null]}),e||t||n||r?(0,z.jsx)(V,{rows:[[`Name`,T(e)],[`Display Name`,T(t)],[`About`,n??`n/a`],[`NIP-05`,T(r)]]}):(0,z.jsx)(`p`,{className:`ct-muted`,children:`No profile set. Click "Edit Profile" to add your name, bio, and avatar.`})]})})(),i]})}function ne({telegram:e,accounts:t,activeRuns:n,probeBusy:r=!1,onProbe:i,configSection:a}){let o=t.length>0,s=e=>{let t=e.application?.telegram??null,r=t?.poll,i=t?.webhook,a=t?.delivery,o=e.probe?.bot?.username,s=N(n,`telegram`,e.accountId),c=[[`Running`,T(e.running)],[`Configured`,T(e.configured)],[`Mode`,T(t?.mode??e.mode)],[`State`,T(t?.state)],[`Owner`,T(t?.owner??r?.owner)],[`Last poll`,E(r?.lastPollAt)],[`Webhook`,T(i?.lastRequestOutcome??i?.path)],[`Webhook receipt`,E(i?.lastRequestAt)],[`Pending updates`,T(i?.pendingUpdateCount)],[`Retry`,T(t?.retryAt??a?.nextRetryAt)],[`Queue`,T(a?.queueDepth)],[`Last delivery`,T(a?.lastDeliveryStatus)],[`Last inbound`,E(e.lastInboundAt)],[`Last outbound`,E(e.lastOutboundAt)],[`Last API error`,T(M(t))]];return s.length>0&&c.push([`Active runs`,s.map(e=>P(e)).join(`, `)]),(0,z.jsxs)(U,{title:o?`@${o}`:e.name||e.accountId,accountId:e.accountId,rows:c,children:[a?.lastDeliveryError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:a.lastDeliveryError}):null,t?.lastError||e.lastError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:t?.lastError??e.lastError}):null]},e.accountId)},l=D(e?.probe);return(0,z.jsxs)(f,{testId:`channel-card-telegram`,title:`Telegram`,sub:`Bot status and channel configuration.`,actions:(0,z.jsx)(c,{onClick:i,disabled:r,children:`Probe`}),children:[o?(0,z.jsx)(`div`,{className:`ct-channels__accounts`,children:t.map(s)}):(0,z.jsx)(V,{rows:[[`Configured`,T(e?.configured)],[`Running`,T(e?.running)],[`Mode`,T(e?.mode)],[`Last start`,E(e?.lastStartAt)],[`Last probe`,E(e?.lastProbeAt)]]}),e?.lastError?(0,z.jsx)(H,{tone:`danger`,children:e.lastError}):null,l?(0,z.jsx)(H,{children:l}):null,a]})}function re({whatsapp:e,login:t,onShowQr:n,onRelink:r,onWait:i,onLogout:o,onRefresh:s,configSection:l}){let[u,d]=(0,h.useState)(!1),p=t.busy;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(f,{testId:`channel-card-whatsapp`,title:`WhatsApp`,sub:`Link WhatsApp Web and monitor connection health.`,children:[(0,z.jsx)(V,{rows:[[`Configured`,T(e?.configured)],[`Linked`,T(e?.linked)],[`Running`,T(e?.running)],[`Connected`,T(e?.connected)],[`Last connect`,E(e?.lastConnectedAt)],[`Last message`,E(e?.lastMessageAt)],[`Auth age`,e?.authAgeMs==null?`n/a`:a(e.authAgeMs)]]}),e?.lastError?(0,z.jsx)(H,{tone:`danger`,children:e.lastError}):null,t.message?(0,z.jsx)(H,{children:t.message}):null,t.qrDataUrl?(0,z.jsx)(`div`,{className:`ct-channels__qr`,children:(0,z.jsx)(`img`,{src:t.qrDataUrl,alt:`WhatsApp QR`,"data-testid":`whatsapp-qr`})}):null,(0,z.jsxs)(`div`,{className:`ct-channels__actions`,children:[(0,z.jsx)(c,{variant:`primary`,disabled:p,onClick:n,children:p?`Working…`:`Show QR`}),(0,z.jsx)(c,{disabled:p,onClick:r,children:`Relink`}),(0,z.jsx)(c,{disabled:p,onClick:i,children:`Wait for scan`}),(0,z.jsx)(c,{variant:`danger`,disabled:p,onClick:()=>d(!0),children:`Logout`}),(0,z.jsx)(c,{onClick:s,children:`Refresh`})]}),l]}),(0,z.jsx)(m,{open:u,title:`Log out of WhatsApp`,body:`Log this WhatsApp account out? The linked session is disconnected and you will need to scan the QR code again to relink.`,confirmLabel:`Log out`,danger:!0,busy:p,bodyClassName:`ct-channels__confirm-body`,onConfirm:()=>{d(!1),o()},onCancel:()=>d(!1)})]})}var $=8e3,ie={busy:!1,message:null,qrDataUrl:null,connected:null};function ae(){let e=i(e=>e.request),t=u(`channels.status`,{probe:!1,timeoutMs:$},{refreshMs:d}),[n,r]=(0,h.useState)(null),[a,f]=(0,h.useState)(null),[p,m]=(0,h.useState)(ie),[g,_]=(0,h.useState)([]),v=n??t.data;(0,h.useEffect)(()=>{r(null)},[t.data]),(0,h.useEffect)(()=>{let e=l.getState();(!e.snapshot||!e.schema)&&e.load()},[]),(0,h.useEffect)(()=>{let{subscribe:e}=i.getState();return e(`sessions.runsUpdate`,e=>{let t=e?.runs;Array.isArray(t)&&_(t)})},[]);let y=(0,h.useCallback)(async t=>{try{let n=await e(`channels.status`,{probe:t,timeoutMs:$});r(n),f(null)}catch(e){f(s(e))}},[e]),C=async(t,n,r)=>{m(e=>({...e,busy:!0}));try{let i=await e(t,n);m(e=>r(i,e))}catch(e){m(t=>({busy:!1,message:s(e),qrDataUrl:t.qrDataUrl,connected:null}))}y(!0)},T=()=>void C(`web.login.start`,{force:!1,timeoutMs:3e4},e=>({busy:!1,message:e.message??null,qrDataUrl:e.qrDataUrl??null,connected:null})),E=()=>void C(`web.login.start`,{force:!0,timeoutMs:3e4},e=>({busy:!1,message:e.message??null,qrDataUrl:e.qrDataUrl??null,connected:null})),D=()=>void C(`web.login.wait`,{timeoutMs:12e4},(e,t)=>({busy:!1,message:e.message??null,qrDataUrl:e.connected?null:t.qrDataUrl,connected:e.connected??null})),O=()=>void C(`channels.logout`,{channel:`whatsapp`},()=>({busy:!1,message:`Logged out.`,qrDataUrl:null,connected:null})),k=e=>{let t=v?.channels??{},n=v?.channelAccounts?.[e]??[],r=(0,z.jsx)(B,{channelId:e,onAfterSave:()=>void y(!0),onAfterReload:()=>void y(!0)});if(e===`whatsapp`){let n=t.whatsapp;return(0,z.jsx)(re,{whatsapp:n,login:p,onShowQr:T,onRelink:E,onWait:D,onLogout:O,onRefresh:()=>void y(!0),configSection:r},e)}return e===`telegram`?(0,z.jsx)(ne,{telegram:t.telegram,accounts:n,activeRuns:g,onProbe:()=>void y(!0),configSection:r},e):e===`nostr`?(0,z.jsx)(te,{nostr:t.nostr,accounts:n,onRefresh:()=>void y(!1),onProfilePublished:()=>void y(!0),configSection:r},e):(0,z.jsx)(W,{id:e,label:x(v,e),flags:S(v,e),extras:w(v,e),accounts:n,onProbe:()=>void y(!0),configSection:r},e)},A=v?b(v):[];return(0,z.jsxs)(`div`,{className:`ct-page`,"data-testid":`channels-view`,children:[(0,z.jsx)(`header`,{className:`ct-page__head`,children:(0,z.jsxs)(`div`,{className:`ct-page__head-text`,children:[(0,z.jsx)(`h1`,{className:`ct-page__title`,children:`Channels`}),(0,z.jsx)(`p`,{className:`ct-page__sub`,children:`Messaging channels, their connection health and per-channel configuration.`})]})}),a?(0,z.jsx)(`div`,{className:`ct-channels__callout ct-channels__callout--danger`,role:`alert`,children:a}):null,!v&&t.loading?(0,z.jsx)(o,{tone:`loading`,message:`Loading channels…`}):null,!v&&t.error?(0,z.jsx)(o,{tone:`error`,message:t.error,hint:(0,z.jsx)(c,{onClick:t.reload,children:`Retry`})}):null,v&&A.length===0?(0,z.jsx)(o,{message:`No channels are configured on this gateway.`}):null,v&&A.length>0?(0,z.jsx)(`div`,{className:`ct-channels__grid`,children:A.map(k)}):null]})}export{ae as default};
|
|
1
|
+
import{_ as e,c as t,h as n,i as r,l as i,r as a,s as o,t as s}from"./format-CGs6a1G6.js";import{t as c}from"./Button-CGdLofSY.js";import{r as l}from"./config-store-XvvVJ8Fq.js";import{n as u,t as d}from"./use-gateway-query-D25QZANO.js";import{t as f}from"./Panel-9wOynsWc.js";import{t as p}from"./ConfigForm-D8_bqW8x.js";import{t as m}from"./ConfirmDialog-B7aotBjN.js";var h=e(n(),1),g=[`whatsapp`,`telegram`,`discord`,`googlechat`,`slack`,`signal`,`imessage`,`nostr`],_=600*1e3;function v(e,t){let n=e?.channels?.[t];return typeof n==`object`&&n?n:void 0}function y(e,t){if(!e)return!1;let n=v(e,t),r=e=>n?.[e]===!0,i=(e.channelAccounts?.[t]??[]).some(e=>e.configured||e.running||e.connected);return r(`configured`)||r(`running`)||r(`connected`)||i}function b(e){return(e?.channelMeta&&e.channelMeta.length>0?e.channelMeta.map(e=>e.id):e?.channelOrder&&e.channelOrder.length>0?e.channelOrder:g).map((t,n)=>({key:t,enabled:y(e,t),order:n})).toSorted((e,t)=>e.enabled===t.enabled?e.order-t.order:e.enabled?-1:1).map(e=>e.key)}function x(e,t){return e?.channelMeta?.find(e=>e.id===t)?.label??e?.channelLabels?.[t]??t}function S(e,t){let n=v(e,t);if(!n)return{};let r={};return typeof n.configured==`boolean`&&(r.configured=n.configured),typeof n.running==`boolean`&&(r.running=n.running),typeof n.connected==`boolean`&&(r.connected=n.connected),typeof n.lastError==`string`&&(r.lastError=n.lastError),typeof n.lastStartAt==`number`&&(r.lastStartAt=n.lastStartAt),typeof n.lastProbeAt==`number`&&(r.lastProbeAt=n.lastProbeAt),typeof n.probe==`object`&&n.probe!==null&&(r.probe=n.probe),r}var C={googlechat:[`credentialSource`,`audienceType`,`audience`],signal:[`baseUrl`]};function w(e,t){let n=v(e,t);return n?(C[t]??[]).flatMap(e=>e in n?[{label:e,value:L(n[e])}]:[]):[]}function T(e){return e==null||e===``?`n/a`:typeof e==`boolean`?e?`Yes`:`No`:typeof e!=`string`&&typeof e!=`number`?`n/a`:String(e)}function E(e){return e?r(e):`n/a`}function D(e){if(typeof e!=`object`||!e||!(`ok`in e))return null;let{ok:t,status:n,error:r}=e,i=t?`Probe ok`:`Probe failed`,a=[n,r].filter(e=>e!=null&&e!==``);return a.length>0?`${i} · ${a.join(` `)}`:i}function O(e,t=Date.now()){return e.lastInboundAt?t-e.lastInboundAt<_:!1}function k(e,t=Date.now()){return e.running?`Yes`:O(e,t)?`Active`:`No`}function A(e,t=Date.now()){return e.connected===!0?`Yes`:e.connected===!1?`No`:O(e,t)?`Active`:`n/a`}function j(e){return e?e.length<=20?e:`${e.slice(0,8)}...${e.slice(-8)}`:`n/a`}function M(e){return[...e?.lastApiRequests??[]].toReversed().find(e=>e.error)?.error??e?.lastError??null}function N(e,t,n){return e.filter(e=>e.channelCorrelation?.channel===t&&e.channelCorrelation.accountId===n)}function P(e){let t=e.channelCorrelation;return`${t?.runId??(t?.updateId===void 0?void 0:`update:${t.updateId}`)??`telegram run`} ${e.state} q:${e.queueDepth}`}var F=[`groupPolicy`,`streamMode`,`dmPolicy`];function I(e,t){if(!e)return null;let n=(e.channels??{})[t];if(n&&typeof n==`object`)return n;let r=e[t];return r&&typeof r==`object`?r:null}function L(e){if(e==null)return`n/a`;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return`n/a`}}function R(e,t){let n=I(e,t);return n?F.flatMap(e=>e in n?[{label:e,value:L(n[e])}]:[]):[]}var z=t();function B({channelId:e,onAfterSave:t,onAfterReload:n}){let r=l(e=>e.draft),i=l(e=>e.schema),a=l(e=>e.busy),o=l(e=>e.dirty),s=l(e=>e.error),u=R(r,e),d=async()=>{await l.getState().save(`set`),t()},f=async()=>{await l.getState().load(),n()};return(0,z.jsxs)(`div`,{className:`ct-channels__config`,"data-testid":`channel-config-${e}`,children:[a&&!i?(0,z.jsx)(`p`,{className:`ct-muted`,children:`Loading config schema…`}):(0,z.jsx)(p,{schema:i?.schema??null,uiHints:i?.uiHints??{},value:r,disabled:a,rootPath:[`channels`,e],onPatch:(e,t)=>l.getState().setPath(e,t)}),u.length>0?(0,z.jsx)(`dl`,{className:`ct-kv ct-channels__extras`,children:u.map(e=>(0,z.jsxs)(`div`,{className:`ct-kv__row`,children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.label))}):null,s?(0,z.jsx)(`div`,{className:`ct-channels__callout ct-channels__callout--danger`,role:`alert`,children:s}):null,(0,z.jsxs)(`div`,{className:`ct-channels__actions`,children:[(0,z.jsx)(c,{variant:`primary`,disabled:a||!o,"data-testid":`channel-config-save-${e}`,onClick:()=>void d(),children:a?`Saving…`:`Save`}),(0,z.jsx)(c,{disabled:a,onClick:()=>void f(),children:`Reload`})]})]})}function V({rows:e}){return(0,z.jsx)(`dl`,{className:`ct-kv ct-channels__status`,children:e.map(([e,t])=>(0,z.jsxs)(`div`,{className:`ct-kv__row`,children:[(0,z.jsx)(`dt`,{children:e}),(0,z.jsx)(`dd`,{children:t})]},e))})}function H({tone:e=`info`,children:t}){return(0,z.jsx)(`div`,{className:`ct-channels__callout ct-channels__callout--${e}`,role:e===`danger`?`alert`:void 0,children:t})}function U({title:e,accountId:t,rows:n,children:r}){return(0,z.jsxs)(`div`,{className:`ct-channels__account`,children:[(0,z.jsxs)(`div`,{className:`ct-channels__account-head`,children:[(0,z.jsx)(`span`,{className:`ct-channels__account-title`,children:e}),(0,z.jsx)(`span`,{className:`ct-channels__account-id ct-mono`,children:t})]}),(0,z.jsx)(V,{rows:n}),r]})}function W({id:e,label:t,flags:n,extras:r,accounts:i,probeBusy:a=!1,onProbe:o,configSection:s}){let l=D(n.probe);return(0,z.jsxs)(f,{testId:`channel-card-${e}`,title:t,sub:`Channel status and configuration.`,actions:(0,z.jsx)(c,{onClick:o,disabled:a,children:`Probe`}),children:[i.length>=2?(0,z.jsxs)(`div`,{className:`ct-channels__count`,children:[`Accounts (`,i.length,`)`]}):null,i.length>0?(0,z.jsx)(`div`,{className:`ct-channels__accounts`,children:i.map(e=>(0,z.jsx)(U,{title:e.name||e.accountId,accountId:e.accountId,rows:[[`Running`,k(e)],[`Configured`,T(e.configured)],[`Connected`,A(e)],[`Last inbound`,E(e.lastInboundAt)]],children:e.lastError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:e.lastError}):null},e.accountId))}):(0,z.jsx)(V,{rows:[[`Configured`,T(n.configured)],[`Running`,T(n.running)],[`Connected`,T(n.connected)],[`Last start`,E(n.lastStartAt)],[`Last probe`,E(n.lastProbeAt)]]}),r.length>0?(0,z.jsx)(V,{rows:r.map(e=>[e.label,e.value])}):null,n.lastError?(0,z.jsx)(H,{tone:`danger`,children:n.lastError}):null,l?(0,z.jsx)(H,{children:l}):null,s]})}var G=[`name`,`displayName`,`about`,`picture`,`banner`,`website`,`nip05`,`lud16`];function K(e){let t=Object.fromEntries(G.map(t=>[t,e?.[t]??``]));return{values:t,original:{...t},saving:!1,importing:!1,error:null,success:null,fieldErrors:{},showAdvanced:!!(e?.banner||e?.website||e?.nip05||e?.lud16)}}function q(e){return G.some(t=>e.values[t]!==e.original[t])}function J(e){return Object.fromEntries(G.map(t=>[t,e[t]]).filter(e=>e[1]!==``))}function Y(e){if(!Array.isArray(e))return{};let t={};for(let n of e){if(typeof n!=`string`)continue;let e=n.indexOf(`:`);if(e<=0)continue;let r=n.slice(0,e).trim(),i=n.slice(e+1).trim();r&&i&&(t[r]=i)}return t}function X(e,t){let n={...e.values,...t};return{values:n,showAdvanced:!!(n.banner||n.website||n.nip05||n.lud16)}}async function Z(e,t,n,r,i){let a=await fetch(`/api/channels/nostr/${encodeURIComponent(e)}${t}`,{method:n,headers:{"Content-Type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:i===void 0?void 0:JSON.stringify(i)}),o=await a.json().catch(()=>null),s=o===null?null:{...o,...o.error===void 0?{}:{error:ee(o.error,a.status)}};return{status:a.status,data:s}}function ee(e,t){if(typeof e==`string`&&e.trim().length>0)return e;if(e&&typeof e==`object`&&`message`in e){let t=e.message;if(typeof t==`string`&&t.trim().length>0)return t}return`Request failed (${t})`}function Q({label:e,value:t,multiline:n,placeholder:r,help:i,error:a,disabled:o,onChange:s}){let c={value:t,placeholder:r??``,disabled:o,onChange:e=>s(e.target.value)};return(0,z.jsxs)(`div`,{className:`ct-channels__field`,children:[(0,z.jsxs)(`label`,{children:[e,n?(0,z.jsx)(`textarea`,{...c,rows:3,maxLength:2e3}):(0,z.jsx)(`input`,{...c,type:`text`,maxLength:256})]}),i?(0,z.jsx)(`div`,{className:`ct-channels__field-help`,children:i}):null,a?(0,z.jsx)(`div`,{className:`ct-channels__field-error`,children:a}):null]})}function te({nostr:e,accounts:t,onRefresh:n,onProfilePublished:r,configSection:i}){let a=t[0],o=a?.accountId??`default`,l=e?.configured??a?.configured??!1,u=e?.lastError??a?.lastError??null,d=a?.profile??e?.profile??null,[p,m]=(0,h.useState)(null),[g,_]=(0,h.useState)(``),v=(e,t)=>{m(n=>n&&{...n,values:{...n.values,[e]:t}})},y=async()=>{if(!(!p||p.saving)){m({...p,saving:!0,error:null,success:null,fieldErrors:{}});try{let{status:e,data:t}=await Z(o,`/profile`,`PUT`,g.trim(),J(p.values));if(!t?.ok){m(n=>n&&{...n,saving:!1,error:t?.error??`Profile update failed (${e})`,fieldErrors:Y(t?.details)});return}if(!t.persisted){m(e=>e&&{...e,saving:!1,error:`Profile publish failed on all relays.`});return}m(e=>e&&{...e,saving:!1,error:null,success:`Profile published to relays.`,fieldErrors:{},original:{...e.values}}),r()}catch(e){m(t=>t&&{...t,saving:!1,error:`Profile update failed: ${s(e)}`})}}},b=async()=>{if(!(!p||p.importing||p.saving)){m({...p,importing:!0,error:null,success:null});try{let{status:e,data:t}=await Z(o,`/profile/import`,`POST`,g.trim(),{autoMerge:!0});if(!t?.ok){m(n=>n&&{...n,importing:!1,error:t?.error??`Profile import failed (${e})`});return}let n=X(p,t.merged??t.imported??null);m(e=>e&&{...e,...n,importing:!1,success:t.saved?`Profile imported from relays. Review and publish.`:`Profile imported. Review and publish.`}),t.saved&&r()}catch(e){m(t=>t&&{...t,importing:!1,error:`Profile import failed: ${s(e)}`})}}};return(0,z.jsxs)(f,{testId:`channel-card-nostr`,title:`Nostr`,sub:`Decentralized DMs via Nostr relays (NIP-04).`,actions:(0,z.jsx)(c,{onClick:n,disabled:p?.saving,children:`Refresh`}),children:[t.length>1?(0,z.jsx)(`div`,{className:`ct-channels__accounts`,children:t.map(e=>(0,z.jsx)(U,{title:e.profile?.displayName??e.profile?.name??e.name??e.accountId,accountId:e.accountId,rows:[[`Running`,T(e.running)],[`Configured`,T(e.configured)],[`Public Key`,j(e.publicKey)],[`Last inbound`,E(e.lastInboundAt)]],children:e.lastError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:e.lastError}):null},e.accountId))}):(0,z.jsx)(V,{rows:[[`Configured`,T(l)],[`Running`,T(e?.running??a?.running??!1)],[`Public Key`,j(e?.publicKey??a?.publicKey)],[`Last start`,E(e?.lastStartAt??a?.lastStartAt??null)]]}),u?(0,z.jsx)(H,{tone:`danger`,children:u}):null,(()=>{if(p)return(0,z.jsxs)(`div`,{className:`ct-channels__profile-form`,"data-testid":`nostr-profile-form`,children:[(0,z.jsxs)(`div`,{className:`ct-channels__profile-head`,children:[(0,z.jsx)(`strong`,{children:`Edit Profile`}),(0,z.jsxs)(`span`,{className:`ct-muted`,children:[`Account: `,o]})]}),p.error?(0,z.jsx)(H,{tone:`danger`,children:p.error}):null,p.success?(0,z.jsx)(H,{children:p.success}):null,(0,z.jsx)(Q,{label:`Username`,value:p.values.name??``,placeholder:`satoshi`,help:`Short username (e.g., satoshi)`,error:p.fieldErrors.name,disabled:p.saving,onChange:e=>v(`name`,e)}),(0,z.jsx)(Q,{label:`Display Name`,value:p.values.displayName??``,placeholder:`Satoshi Nakamoto`,help:`Your full display name`,error:p.fieldErrors.displayName,disabled:p.saving,onChange:e=>v(`displayName`,e)}),(0,z.jsx)(Q,{label:`Bio`,value:p.values.about??``,multiline:!0,placeholder:`Tell people about yourself...`,help:`A brief bio or description`,error:p.fieldErrors.about,disabled:p.saving,onChange:e=>v(`about`,e)}),(0,z.jsx)(Q,{label:`Avatar URL`,value:p.values.picture??``,placeholder:`https://example.com/avatar.jpg`,help:`HTTPS URL to your profile picture`,error:p.fieldErrors.picture,disabled:p.saving,onChange:e=>v(`picture`,e)}),p.showAdvanced?(0,z.jsxs)(`div`,{className:`ct-channels__profile-advanced`,children:[(0,z.jsx)(`div`,{className:`ct-muted`,children:`Advanced`}),(0,z.jsx)(Q,{label:`Banner URL`,value:p.values.banner??``,error:p.fieldErrors.banner,disabled:p.saving,onChange:e=>v(`banner`,e)}),(0,z.jsx)(Q,{label:`Website`,value:p.values.website??``,error:p.fieldErrors.website,disabled:p.saving,onChange:e=>v(`website`,e)}),(0,z.jsx)(Q,{label:`NIP-05 Identifier`,value:p.values.nip05??``,placeholder:`you@example.com`,help:`Verifiable identifier (e.g., you@domain.com)`,error:p.fieldErrors.nip05,disabled:p.saving,onChange:e=>v(`nip05`,e)}),(0,z.jsx)(Q,{label:`Lightning Address`,value:p.values.lud16??``,placeholder:`you@getalby.com`,help:`Lightning address for tips (LUD-16)`,error:p.fieldErrors.lud16,disabled:p.saving,onChange:e=>v(`lud16`,e)})]}):null,(0,z.jsxs)(`div`,{className:`ct-channels__field`,children:[(0,z.jsxs)(`label`,{htmlFor:`nostr-gateway-credential`,children:[`Gateway token or password`,(0,z.jsx)(`input`,{id:`nostr-gateway-credential`,type:`password`,autoComplete:`off`,placeholder:`Required on token/password gateways`,value:g,disabled:p.saving||p.importing,onChange:e=>_(e.target.value)})]}),(0,z.jsx)(`div`,{className:`ct-channels__field-help`,children:`Sent only as this request's Authorization header; never stored.`})]}),(0,z.jsxs)(`div`,{className:`ct-channels__actions`,children:[(0,z.jsx)(c,{variant:`primary`,disabled:p.saving||!q(p),onClick:()=>void y(),children:p.saving?`Saving…`:`Save & Publish`}),(0,z.jsx)(c,{disabled:p.importing||p.saving,onClick:()=>void b(),children:p.importing?`Importing…`:`Import from Relays`}),(0,z.jsx)(c,{onClick:()=>m({...p,showAdvanced:!p.showAdvanced}),children:p.showAdvanced?`Hide Advanced`:`Show Advanced`}),(0,z.jsx)(c,{disabled:p.saving,onClick:()=>{m(null),_(``)},children:`Cancel`})]}),q(p)?(0,z.jsx)(`div`,{className:`ct-channels__field-help`,children:`You have unsaved changes`}):null]});let{name:e,displayName:t,about:n,nip05:r}=d??{};return(0,z.jsxs)(`div`,{className:`ct-channels__profile`,"data-testid":`nostr-profile`,children:[(0,z.jsxs)(`div`,{className:`ct-channels__profile-head`,children:[(0,z.jsx)(`strong`,{children:`Profile`}),l?(0,z.jsx)(c,{size:`sm`,onClick:()=>m(K(d??void 0)),children:`Edit Profile`}):null]}),e||t||n||r?(0,z.jsx)(V,{rows:[[`Name`,T(e)],[`Display Name`,T(t)],[`About`,n??`n/a`],[`NIP-05`,T(r)]]}):(0,z.jsx)(`p`,{className:`ct-muted`,children:`No profile set. Click "Edit Profile" to add your name, bio, and avatar.`})]})})(),i]})}function ne({telegram:e,accounts:t,activeRuns:n,probeBusy:r=!1,onProbe:i,configSection:a}){let o=t.length>0,s=e=>{let t=e.application?.telegram??null,r=t?.poll,i=t?.webhook,a=t?.delivery,o=e.probe?.bot?.username,s=N(n,`telegram`,e.accountId),c=[[`Running`,T(e.running)],[`Configured`,T(e.configured)],[`Mode`,T(t?.mode??e.mode)],[`State`,T(t?.state)],[`Owner`,T(t?.owner??r?.owner)],[`Last poll`,E(r?.lastPollAt)],[`Webhook`,T(i?.lastRequestOutcome??i?.path)],[`Webhook receipt`,E(i?.lastRequestAt)],[`Pending updates`,T(i?.pendingUpdateCount)],[`Retry`,T(t?.retryAt??a?.nextRetryAt)],[`Queue`,T(a?.queueDepth)],[`Last delivery`,T(a?.lastDeliveryStatus)],[`Last inbound`,E(e.lastInboundAt)],[`Last outbound`,E(e.lastOutboundAt)],[`Last API error`,T(M(t))]];return s.length>0&&c.push([`Active runs`,s.map(e=>P(e)).join(`, `)]),(0,z.jsxs)(U,{title:o?`@${o}`:e.name||e.accountId,accountId:e.accountId,rows:c,children:[a?.lastDeliveryError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:a.lastDeliveryError}):null,t?.lastError||e.lastError?(0,z.jsx)(`div`,{className:`ct-channels__account-error`,children:t?.lastError??e.lastError}):null]},e.accountId)},l=D(e?.probe);return(0,z.jsxs)(f,{testId:`channel-card-telegram`,title:`Telegram`,sub:`Bot status and channel configuration.`,actions:(0,z.jsx)(c,{onClick:i,disabled:r,children:`Probe`}),children:[o?(0,z.jsx)(`div`,{className:`ct-channels__accounts`,children:t.map(s)}):(0,z.jsx)(V,{rows:[[`Configured`,T(e?.configured)],[`Running`,T(e?.running)],[`Mode`,T(e?.mode)],[`Last start`,E(e?.lastStartAt)],[`Last probe`,E(e?.lastProbeAt)]]}),e?.lastError?(0,z.jsx)(H,{tone:`danger`,children:e.lastError}):null,l?(0,z.jsx)(H,{children:l}):null,a]})}function re({whatsapp:e,login:t,onShowQr:n,onRelink:r,onWait:i,onLogout:o,onRefresh:s,configSection:l}){let[u,d]=(0,h.useState)(!1),p=t.busy;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(f,{testId:`channel-card-whatsapp`,title:`WhatsApp`,sub:`Link WhatsApp Web and monitor connection health.`,children:[(0,z.jsx)(V,{rows:[[`Configured`,T(e?.configured)],[`Linked`,T(e?.linked)],[`Running`,T(e?.running)],[`Connected`,T(e?.connected)],[`Last connect`,E(e?.lastConnectedAt)],[`Last message`,E(e?.lastMessageAt)],[`Auth age`,e?.authAgeMs==null?`n/a`:a(e.authAgeMs)]]}),e?.lastError?(0,z.jsx)(H,{tone:`danger`,children:e.lastError}):null,t.message?(0,z.jsx)(H,{children:t.message}):null,t.qrDataUrl?(0,z.jsx)(`div`,{className:`ct-channels__qr`,children:(0,z.jsx)(`img`,{src:t.qrDataUrl,alt:`WhatsApp QR`,"data-testid":`whatsapp-qr`})}):null,(0,z.jsxs)(`div`,{className:`ct-channels__actions`,children:[(0,z.jsx)(c,{variant:`primary`,disabled:p,onClick:n,children:p?`Working…`:`Show QR`}),(0,z.jsx)(c,{disabled:p,onClick:r,children:`Relink`}),(0,z.jsx)(c,{disabled:p,onClick:i,children:`Wait for scan`}),(0,z.jsx)(c,{variant:`danger`,disabled:p,onClick:()=>d(!0),children:`Logout`}),(0,z.jsx)(c,{onClick:s,children:`Refresh`})]}),l]}),(0,z.jsx)(m,{open:u,title:`Log out of WhatsApp`,body:`Log this WhatsApp account out? The linked session is disconnected and you will need to scan the QR code again to relink.`,confirmLabel:`Log out`,danger:!0,busy:p,bodyClassName:`ct-channels__confirm-body`,onConfirm:()=>{d(!1),o()},onCancel:()=>d(!1)})]})}var $=8e3,ie={busy:!1,message:null,qrDataUrl:null,connected:null};function ae(){let e=i(e=>e.request),t=u(`channels.status`,{probe:!1,timeoutMs:$},{refreshMs:d}),[n,r]=(0,h.useState)(null),[a,f]=(0,h.useState)(null),[p,m]=(0,h.useState)(ie),[g,_]=(0,h.useState)([]),v=n??t.data;(0,h.useEffect)(()=>{r(null)},[t.data]),(0,h.useEffect)(()=>{let e=l.getState();(!e.snapshot||!e.schema)&&e.load()},[]),(0,h.useEffect)(()=>{let{subscribe:e}=i.getState();return e(`sessions.runsUpdate`,e=>{let t=e?.runs;Array.isArray(t)&&_(t)})},[]);let y=(0,h.useCallback)(async t=>{try{let n=await e(`channels.status`,{probe:t,timeoutMs:$});r(n),f(null)}catch(e){f(s(e))}},[e]),C=async(t,n,r)=>{m(e=>({...e,busy:!0}));try{let i=await e(t,n);m(e=>r(i,e))}catch(e){m(t=>({busy:!1,message:s(e),qrDataUrl:t.qrDataUrl,connected:null}))}y(!0)},T=()=>void C(`web.login.start`,{force:!1,timeoutMs:3e4},e=>({busy:!1,message:e.message??null,qrDataUrl:e.qrDataUrl??null,connected:null})),E=()=>void C(`web.login.start`,{force:!0,timeoutMs:3e4},e=>({busy:!1,message:e.message??null,qrDataUrl:e.qrDataUrl??null,connected:null})),D=()=>void C(`web.login.wait`,{timeoutMs:12e4},(e,t)=>({busy:!1,message:e.message??null,qrDataUrl:e.connected?null:t.qrDataUrl,connected:e.connected??null})),O=()=>void C(`channels.logout`,{channel:`whatsapp`},()=>({busy:!1,message:`Logged out.`,qrDataUrl:null,connected:null})),k=e=>{let t=v?.channels??{},n=v?.channelAccounts?.[e]??[],r=(0,z.jsx)(B,{channelId:e,onAfterSave:()=>void y(!0),onAfterReload:()=>void y(!0)});if(e===`whatsapp`){let n=t.whatsapp;return(0,z.jsx)(re,{whatsapp:n,login:p,onShowQr:T,onRelink:E,onWait:D,onLogout:O,onRefresh:()=>void y(!0),configSection:r},e)}return e===`telegram`?(0,z.jsx)(ne,{telegram:t.telegram,accounts:n,activeRuns:g,onProbe:()=>void y(!0),configSection:r},e):e===`nostr`?(0,z.jsx)(te,{nostr:t.nostr,accounts:n,onRefresh:()=>void y(!1),onProfilePublished:()=>void y(!0),configSection:r},e):(0,z.jsx)(W,{id:e,label:x(v,e),flags:S(v,e),extras:w(v,e),accounts:n,onProbe:()=>void y(!0),configSection:r},e)},A=v?b(v):[];return(0,z.jsxs)(`div`,{className:`ct-page`,"data-testid":`channels-view`,children:[(0,z.jsx)(`header`,{className:`ct-page__head`,children:(0,z.jsxs)(`div`,{className:`ct-page__head-text`,children:[(0,z.jsx)(`h1`,{className:`ct-page__title`,children:`Channels`}),(0,z.jsx)(`p`,{className:`ct-page__sub`,children:`Messaging channels, their connection health and per-channel configuration.`})]})}),a?(0,z.jsx)(`div`,{className:`ct-channels__callout ct-channels__callout--danger`,role:`alert`,children:a}):null,!v&&t.loading?(0,z.jsx)(o,{tone:`loading`,message:`Loading channels…`}):null,!v&&t.error?(0,z.jsx)(o,{tone:`error`,message:t.error,hint:(0,z.jsx)(c,{onClick:t.reload,children:`Retry`})}):null,v&&A.length===0?(0,z.jsx)(o,{message:`No channels are configured on this gateway.`}):null,v&&A.length>0?(0,z.jsx)(`div`,{className:`ct-channels__grid`,children:A.map(k)}):null]})}export{ae as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t,h as n}from"./format-dlOOV12I.js";import{c as r,d as i,f as a,l as o,o as s,s as c,u as l}from"./form-utils-BkwTm73v.js";var u=e(n(),1),d={title:!0,description:!0,default:!0,nullable:!0};function f(e){return Object.keys(e??{}).every(e=>d[e])}function p(e){let t=e.filter(e=>e!=null),n=t.length!==e.length,r=[];for(let e of t)r.some(t=>Object.is(t,e))||r.push(e);return{enumValues:r,nullable:n}}function m(e){return o(e)?h(e,[]):{schema:null,unsupportedPaths:[`<root>`]}}function h(e,t){let n=new Set,r={...e},i=l(t)||`<root>`;if(e.anyOf||e.oneOf||e.allOf)return y(e,t)||{schema:e,unsupportedPaths:[i]};let s=Array.isArray(e.type)&&e.type.includes(`null`),c=a(e)??(e.properties||e.additionalProperties?`object`:void 0);if(r.type=c??e.type,r.nullable=s||e.nullable,r.enum){let{enumValues:e,nullable:t}=p(r.enum);r.enum=e,t&&(r.nullable=!0),e.length===0&&n.add(i)}if(c===`object`){let a=e.properties??{},s={};for(let[e,r]of Object.entries(a)){let i=h(r,[...t,e]);i.schema&&(s[e]=i.schema);for(let e of i.unsupportedPaths)n.add(e)}if(r.properties=s,e.additionalProperties===!0)n.add(i);else if(e.additionalProperties===!1)r.additionalProperties=!1;else if(o(e.additionalProperties)&&!f(e.additionalProperties)){let a=h(e.additionalProperties,[...t,`*`]);r.additionalProperties=a.schema??e.additionalProperties,a.unsupportedPaths.length>0&&n.add(i)}}else if(c===`array`){let a=Array.isArray(e.items)?e.items[0]:e.items;if(!a)n.add(i);else{let e=h(a,[...t,`*`]);r.items=e.schema??a,e.unsupportedPaths.length>0&&n.add(i)}}else c!==`string`&&c!==`number`&&c!==`integer`&&c!==`boolean`&&!r.enum&&n.add(i);return{schema:r,unsupportedPaths:Array.from(n)}}function g(e){if(a(e)!==`object`)return!1;let t=e.properties?.source,n=e.properties?.provider,r=e.properties?.id;return!t||!n||!r?!1:typeof t.const==`string`&&a(n)===`string`&&a(r)===`string`}function _(e){let t=e.oneOf??e.anyOf;return!t||t.length===0?!1:t.every(e=>g(e))}function v(e,t,n,r){let i=n.findIndex(e=>a(e)===`string`);if(i<0)return null;let o=n.filter((e,t)=>t!==i);return o.length!==1||!_(o[0])?null:h({...e,...n[i],nullable:r,anyOf:void 0,oneOf:void 0,allOf:void 0},t)}function y(e,t){if(e.allOf)return null;let n=e.anyOf??e.oneOf;if(!n)return null;let r=[],i=[],o=!1;for(let e of n){if(!e||typeof e!=`object`)return null;if(Array.isArray(e.enum)){let{enumValues:t,nullable:n}=p(e.enum);r.push(...t),n&&(o=!0);continue}if(`const`in e){if(e.const==null){o=!0;continue}r.push(e.const);continue}if(a(e)===`null`){o=!0;continue}i.push(e)}let s=v(e,t,i,o);if(s)return s;if(r.length>0&&i.length===0){let t=[];for(let e of r)t.some(t=>Object.is(t,e))||t.push(e);return{schema:{...e,enum:t,nullable:o,anyOf:void 0,oneOf:void 0,allOf:void 0},unsupportedPaths:[]}}if(i.length===1){let e=h(i[0],t);return e.schema&&(e.schema.nullable=o||e.schema.nullable),e}let c={string:!0,number:!0,integer:!0,boolean:!0};return i.length>0&&r.length===0&&i.every(e=>e.type&&c[String(e.type)])?{schema:{...e,nullable:o,anyOf:void 0,oneOf:void 0,allOf:void 0},unsupportedPaths:[]}:null}var b=t();function x({tags:e}){return e.length===0?null:(0,b.jsx)(`div`,{className:`cfg-tags`,children:e.map(e=>(0,b.jsx)(`span`,{className:`cfg-tag`,children:e},e))})}function S({meta:e,showLabel:t=!0,htmlFor:n}){let r=!!e.help||e.tags.length>0;return!t&&!r?null:(0,b.jsxs)(b.Fragment,{children:[t?(0,b.jsx)(`label`,{className:`cfg-field__label`,htmlFor:n,children:e.label}):null,e.help?(0,b.jsx)(`div`,{className:`cfg-field__help`,children:e.help}):null,(0,b.jsx)(x,{tags:e.tags})]})}function C(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function w(e){return e.trim().toLowerCase()}function T(e,t){let n=w(t);return n?RegExp(`(^|\\s)tag:${C(n)}(?=\\s|$)`,`i`).test(e.trim()):!1}function E(e,t){let n=w(t),r=e.trim();return n?r?T(r,n)?r:`${r} tag:${n}`:`tag:${n}`:r}function D(e,t){let n=w(t),r=e.trim();if(!n||!r)return r;let i=RegExp(`(^|\\s)tag:${C(n)}(?=\\s|$)`,`ig`);return r.replace(i,` `).replace(/\s+/g,` `).trim()}function O(e,t){return T(e,t)?D(e,t):E(e,t)}function k(e){let t=[],n=new Set;return{text:e.trim().replace(/(^|\s)tag:([^\s]+)/gi,(e,r,i)=>{let a=i.trim().toLowerCase();return a&&!n.has(a)&&(n.add(a),t.push(a)),r}).trim().toLowerCase(),tags:t}}function A(e){return!!(e&&(e.text.length>0||e.tags.length>0))}function j(e,t){if(!e)return!0;for(let n of t)if(n&&n.toLowerCase().includes(e))return!0;return!1}function M(e,t){if(e.length===0)return!0;let n=new Set(t.map(e=>e.toLowerCase()));return e.every(e=>n.has(e))}function N(e){let{schema:t,path:n,hints:r,criteria:a}=e;if(!A(a))return!0;let{label:o,help:s,tags:c}=i(n,t,r);if(!M(a.tags,c))return!1;if(!a.text)return!0;let l=n.filter(e=>typeof e==`string`).join(`.`),u=t.enum&&t.enum.length>0?t.enum.map(e=>String(e)).join(` `):``;return j(a.text,[o,s,t.title,t.description,l,u])}function P(e){let{schema:t,value:n,path:r,hints:i,criteria:s}=e;if(!A(s)||N({schema:t,path:r,hints:i,criteria:s}))return!0;let c=a(t);if(c===`object`){let e=n??t.default,a=o(e)?e:{},c=t.properties??{};for(let[e,t]of Object.entries(c))if(P({schema:t,value:a[e],path:[...r,e],hints:i,criteria:s}))return!0;let l=t.additionalProperties;if(l&&typeof l==`object`){let e=new Set(Object.keys(c));for(let[t,n]of Object.entries(a))if(!e.has(t)&&P({schema:l,value:n,path:[...r,t],hints:i,criteria:s}))return!0}return!1}if(c===`array`){let e=Array.isArray(t.items)?t.items[0]:t.items;if(!e)return!1;let a=Array.isArray(n)?n:Array.isArray(t.default)?t.default:[];if(a.length===0)return!1;for(let t=0;t<a.length;t+=1)if(P({schema:e,value:a[t],path:[...r,t],hints:i,criteria:s}))return!0}return!1}function F(e){let{schema:t,value:n,path:r,hints:a,disabled:o}=e,c=e.showLabel??!0,l=i(r,t,a),u=e.searchCriteria,d=u&&A(u)&&N({schema:t,path:r,hints:a,criteria:u})?void 0:u,f=Array.isArray(t.items)?t.items[0]:t.items;if(!f)return(0,b.jsxs)(`div`,{className:`cfg-field cfg-field--error`,children:[(0,b.jsx)(`div`,{className:`cfg-field__label`,children:l.label}),(0,b.jsx)(`div`,{className:`cfg-field__error`,children:`Unsupported array schema. Edit in raw mode.`})]});let p=Array.isArray(n)?n:Array.isArray(t.default)?t.default:[];return(0,b.jsxs)(`div`,{className:`cfg-array`,children:[(0,b.jsxs)(`div`,{className:`cfg-array__header`,children:[(0,b.jsxs)(`div`,{className:`cfg-array__title`,children:[c?(0,b.jsx)(`span`,{className:`cfg-array__label`,children:l.label}):null,l.tags.length>0?(0,b.jsx)(`span`,{className:`cfg-tag`,children:l.tags.join(` `)}):null]}),(0,b.jsxs)(`span`,{className:`cfg-array__count`,children:[p.length,` item`,p.length===1?``:`s`]}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-array__add`,"aria-label":`Add`,disabled:o,onClick:()=>{e.onPatch(r,[...p,s(f)])},children:`+ Add`})]}),l.help?(0,b.jsx)(`div`,{className:`cfg-array__help`,children:l.help}):null,p.length===0?(0,b.jsx)(`div`,{className:`cfg-array__empty`,children:`No items yet. Use “Add” to create one.`}):(0,b.jsx)(`div`,{className:`cfg-array__items`,children:p.map((t,n)=>(0,b.jsxs)(`div`,{className:`cfg-array__item`,children:[(0,b.jsxs)(`div`,{className:`cfg-array__item-header`,children:[(0,b.jsxs)(`span`,{className:`cfg-array__item-index`,children:[`#`,n+1]}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-array__item-remove`,"aria-label":`Remove item ${n+1}`,title:`Remove item`,disabled:o,onClick:()=>{let t=[...p];t.splice(n,1),e.onPatch(r,t)},children:`✕`})]}),(0,b.jsx)(`div`,{className:`cfg-array__item-content`,children:(0,b.jsx)(Y,{schema:f,value:t,path:[...r,n],hints:a,unsupported:e.unsupported,disabled:o,searchCriteria:d,showLabel:!1,ariaLabel:`${l.label} item ${n+1}`,onPatch:e.onPatch})})]},n))})]})}function I(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)??``}catch{return``}}function L({entryKey:e,disabled:t,onRename:n}){let[r,i]=(0,u.useState)(e);return(0,u.useEffect)(()=>{i(e)},[e]),(0,b.jsx)(`input`,{type:`text`,className:`cfg-input cfg-input--sm`,placeholder:`Key`,"aria-label":`Key for ${e}`,value:r,disabled:t,onChange:e=>i(e.target.value),onBlur:()=>{let t=r.trim();if(!t||t===e){i(e);return}n(t),i(e)}})}function R({entryKey:e,text:t,disabled:n,onCommit:r}){let[i,a]=(0,u.useState)(t);return(0,u.useEffect)(()=>{a(t)},[t]),(0,b.jsx)(`textarea`,{className:`cfg-textarea cfg-textarea--sm`,placeholder:`JSON value`,rows:2,"aria-label":`JSON value for ${e}`,value:i,disabled:n,onChange:e=>a(e.target.value),onBlur:()=>{let e=i.trim();if(!e){r(void 0);return}try{r(JSON.parse(e))}catch{a(t)}}})}function z({schema:e,value:t,path:n,hints:a,unsupported:o,disabled:c,reservedKeys:l,searchCriteria:u,onPatch:d}){let f=r(e),p=Object.entries(t).filter(([e])=>!l.has(e)),m=u&&A(u)?p.filter(([t,r])=>P({schema:e,value:r,path:[...n,t],hints:a,criteria:u})):p;return(0,b.jsxs)(`div`,{className:`cfg-map`,children:[(0,b.jsxs)(`div`,{className:`cfg-map__header`,children:[(0,b.jsx)(`span`,{className:`cfg-map__label`,children:`Custom entries`}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-map__add`,"aria-label":`Add Entry`,disabled:c,onClick:()=>{let r={...t},i=1,a=`custom-${i}`;for(;a in r;)i+=1,a=`custom-${i}`;r[a]=f?{}:s(e),d(n,r)},children:`+ Add Entry`})]}),m.length===0?(0,b.jsx)(`div`,{className:`cfg-map__empty`,children:`No custom entries.`}):(0,b.jsx)(`div`,{className:`cfg-map__items`,children:m.map(([r,s])=>{let l=[...n,r],p=i(l,e,a);return(0,b.jsxs)(`div`,{className:`cfg-map__item`,children:[(0,b.jsxs)(`div`,{className:`cfg-map__item-header`,children:[(0,b.jsx)(L,{entryKey:r,disabled:c,onRename:e=>{let i={...t};e in i||(i[e]=i[r],delete i[r],d(n,i))}}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-map__item-remove`,"aria-label":`Remove entry ${r}`,title:`Remove entry`,disabled:c,onClick:()=>{let e={...t};delete e[r],d(n,e)},children:`✕`})]}),(0,b.jsx)(`div`,{className:`cfg-map__item-value`,children:f?(0,b.jsx)(R,{entryKey:r,text:I(s),disabled:c,onCommit:e=>d(l,e)}):(0,b.jsx)(Y,{schema:e,value:s,path:l,hints:a,unsupported:o,disabled:c,searchCriteria:u,showLabel:!1,ariaLabel:p.label,onPatch:d})})]},r)})})]})}function B(e){let{schema:t,value:n,path:r,hints:a,disabled:s}=e,l=e.showLabel??!0,u=i(r,t,a),d=e.searchCriteria,f=d&&A(d)&&N({schema:t,path:r,hints:a,criteria:d})?void 0:d,p=n??t.default,m=o(p)?p:{},h=t.properties??{},g=Object.entries(h).toSorted((e,t)=>{let n=c([...r,e[0]],a)?.order??0,i=c([...r,t[0]],a)?.order??0;return n===i?e[0].localeCompare(t[0]):n-i}),_=t.additionalProperties,v=o(_),y=new Set(Object.keys(h)),S=(0,b.jsxs)(b.Fragment,{children:[g.map(([t,n])=>(0,b.jsx)(Y,{schema:n,value:m[t],path:[...r,t],hints:a,unsupported:e.unsupported,disabled:s,searchCriteria:f,onPatch:e.onPatch},t)),v?(0,b.jsx)(z,{schema:_,value:m,path:r,hints:a,unsupported:e.unsupported,disabled:s,reservedKeys:y,searchCriteria:f,onPatch:e.onPatch}):null]});return r.length<=1||!l?(0,b.jsx)(`div`,{className:r.length<=1?`cfg-fields`:`cfg-fields cfg-fields--inline`,children:S}):(0,b.jsxs)(`details`,{className:`cfg-object`,open:r.length<=2,children:[(0,b.jsxs)(`summary`,{className:`cfg-object__header`,children:[(0,b.jsxs)(`span`,{className:`cfg-object__title-wrap`,children:[(0,b.jsx)(`span`,{className:`cfg-object__title`,children:u.label}),(0,b.jsx)(x,{tags:u.tags})]}),(0,b.jsx)(`span`,{className:`cfg-object__chevron`,"aria-hidden":`true`,children:`▾`})]}),u.help?(0,b.jsx)(`div`,{className:`cfg-object__help`,children:u.help}):null,(0,b.jsx)(`div`,{className:`cfg-object__content`,children:S})]})}function V(e){if(e==null)return``;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)??``}catch{return``}}function H({label:e}){return(0,b.jsxs)(`div`,{className:`cfg-field cfg-field--error`,children:[(0,b.jsx)(`div`,{className:`cfg-field__label`,children:e}),(0,b.jsx)(`div`,{className:`cfg-field__error`,children:`Edit in raw mode`})]})}function U(e){if(e.const!==void 0)return e.const;if(e.enum&&e.enum.length===1)return e.enum[0]}function W({params:e,meta:t,ariaLabel:n,options:r,resolved:i}){return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:t,showLabel:e.showLabel??!0}),(0,b.jsx)(`div`,{className:`cfg-segmented`,role:`group`,"aria-label":n,children:r.map(t=>{let n=t===i||String(t)===String(i);return(0,b.jsx)(`button`,{type:`button`,className:n?`cfg-segmented__btn cfg-segmented__btn--active`:`cfg-segmented__btn`,"aria-pressed":n,disabled:e.disabled,onClick:()=>e.onPatch(e.path,t),children:String(t)},String(t))})})]})}function G({params:e,meta:t,ariaLabel:n,options:r,resolved:i}){let a=(0,u.useId)(),o=r.findIndex(e=>e===i||String(e)===String(i)),s=`__unset__`;return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:t,showLabel:e.showLabel??!0,htmlFor:a}),(0,b.jsxs)(`select`,{id:a,className:`cfg-select`,"aria-label":n,disabled:e.disabled,value:o>=0?String(o):s,onChange:t=>{let n=t.target.value;e.onPatch(e.path,n===s?void 0:r[Number(n)])},children:[(0,b.jsx)(`option`,{value:s,children:`Select...`}),r.map((e,t)=>(0,b.jsx)(`option`,{value:String(t),children:String(e)},String(t)))]})]})}function K(e){let{schema:t,value:n,path:r,hints:a,disabled:o,onPatch:s,inputType:l}=e,d=(0,u.useId)(),f=i(r,t,a),p=e.ariaLabel??f.label,m=c(r,a),h=(m?.sensitive??!1)&&!/^\$\{[^}]*\}$/.test(V(n).trim()),g=t.default===void 0?``:V(t.default),_=m?.placeholder??(h?`••••`:g&&`Default: ${g}`);return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:f,showLabel:e.showLabel??!0,htmlFor:d}),(0,b.jsxs)(`div`,{className:`cfg-input-wrap`,children:[(0,b.jsx)(`input`,{id:d,type:h?`password`:l,className:`cfg-input`,"aria-label":p,placeholder:_,value:V(n),disabled:o,onChange:e=>{let t=e.target.value;if(l===`number`){if(t.trim()===``){s(r,void 0);return}let e=Number(t);s(r,Number.isNaN(e)?t:e);return}s(r,t)}}),t.default===void 0?null:(0,b.jsx)(`button`,{type:`button`,className:`cfg-input__reset`,title:`Reset to default`,"aria-label":`Reset ${p} to default`,disabled:o,onClick:()=>s(r,t.default),children:`↺`})]})]})}function q(e){let{schema:t,value:n,path:r,disabled:a}=e,o=(0,u.useId)(),s=i(r,t,e.hints),c=e.ariaLabel??s.label,l=n??t.default??``,d=typeof l==`number`?l:0;return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:s,showLabel:e.showLabel??!0,htmlFor:o}),(0,b.jsxs)(`div`,{className:`cfg-number`,children:[(0,b.jsx)(`button`,{type:`button`,className:`cfg-number__btn`,"aria-label":`Decrease ${c}`,disabled:a,onClick:()=>e.onPatch(r,d-1),children:`−`}),(0,b.jsx)(`input`,{id:o,type:`number`,className:`cfg-number__input`,"aria-label":c,value:V(l),disabled:a,onChange:t=>{let n=t.target.value;e.onPatch(r,n===``?void 0:Number(n))}}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-number__btn`,"aria-label":`Increase ${c}`,disabled:a,onClick:()=>e.onPatch(r,d+1),children:`+`})]})]})}function J(e){let{schema:t,value:n,path:r,disabled:a}=e,o=(0,u.useId)(),s=i(r,t,e.hints),c=e.ariaLabel??s.label,l=typeof n==`boolean`?n:typeof t.default==`boolean`&&t.default;return(0,b.jsxs)(`label`,{className:a?`cfg-toggle-row cfg-toggle-row--disabled`:`cfg-toggle-row`,children:[(0,b.jsxs)(`span`,{className:`cfg-toggle-row__content`,children:[(e.showLabel??!0)||!e.ariaLabel?(0,b.jsx)(`span`,{className:`cfg-toggle-row__label`,children:s.label}):null,s.help?(0,b.jsx)(`span`,{className:`cfg-toggle-row__help`,children:s.help}):null,(0,b.jsx)(x,{tags:s.tags})]}),(0,b.jsx)(`input`,{id:o,type:`checkbox`,className:`cfg-toggle`,"aria-label":c,checked:l,disabled:a,onChange:t=>e.onPatch(r,t.target.checked)})]})}function Y(e){let{schema:t,value:n,path:r,hints:o,unsupported:s}=e,c=i(r,t,o),u=e.ariaLabel??c.label,d=e.searchCriteria;if(s.has(l(r)))return(0,b.jsx)(H,{label:c.label});if(d&&A(d)&&!P({schema:t,value:n,path:r,hints:o,criteria:d}))return null;if(t.anyOf||t.oneOf){let r=(t.anyOf??t.oneOf??[]).filter(e=>!(e.type===`null`||Array.isArray(e.type)&&e.type.includes(`null`)));if(r.length===1)return(0,b.jsx)(Y,{...e,schema:r[0]});let i=r.map(U);if(i.length>0&&i.every(e=>e!==void 0)){let r=n??t.default;return i.length<=5?(0,b.jsx)(W,{params:e,meta:c,ariaLabel:u,options:i,resolved:r}):(0,b.jsx)(G,{params:e,meta:c,ariaLabel:u,options:i,resolved:r})}let o={string:!0,number:!0,boolean:!0},s=new Set(r.map(e=>a(e)).filter(e=>!!e).map(e=>e===`integer`?`number`:e));if(s.size>0&&[...s].every(e=>o[e])){let n=s.has(`boolean`),r=s.has(`string`),i=s.has(`number`);if(n&&s.size===1)return(0,b.jsx)(Y,{...e,schema:{...t,type:`boolean`,anyOf:void 0,oneOf:void 0}});if(r||i)return(0,b.jsx)(K,{...e,inputType:i&&!r?`number`:`text`})}}if(t.enum){let r=n??t.default;return t.enum.length<=5?(0,b.jsx)(W,{params:e,meta:c,ariaLabel:u,options:t.enum,resolved:r}):(0,b.jsx)(G,{params:e,meta:c,ariaLabel:u,options:t.enum,resolved:r})}let f=a(t);return f===`object`?(0,b.jsx)(B,{...e}):f===`array`?(0,b.jsx)(F,{...e}):f===`boolean`?(0,b.jsx)(J,{...e}):f===`number`||f===`integer`?(0,b.jsx)(q,{...e}):f===`string`?(0,b.jsx)(K,{...e,inputType:`text`}):(0,b.jsxs)(`div`,{className:`cfg-field cfg-field--error`,children:[(0,b.jsx)(`div`,{className:`cfg-field__label`,children:c.label}),(0,b.jsxs)(`div`,{className:`cfg-field__error`,children:[`Unsupported type: `,f??`unknown`,`. Edit in raw mode.`]})]})}var X={env:{label:`Environment Variables`,description:`Environment variables passed to the gateway process`},update:{label:`Updates`,description:`Auto-update settings and release channel`},agents:{label:`Agents`,description:`Agent configurations, models, and identities`},auth:{label:`Authentication`,description:`API keys and authentication profiles`},channels:{label:`Channels`,description:`Messaging channels (Telegram, Discord, Slack, etc.)`},messages:{label:`Messages`,description:`Message handling and routing settings`},commands:{label:`Commands`,description:`Custom slash commands`},hooks:{label:`Hooks`,description:`Webhooks and event hooks`},skills:{label:`Skills`,description:`Skill packs and capabilities`},tools:{label:`Tools`,description:`Tool configurations (browser, search, etc.)`},gateway:{label:`Gateway`,description:`Gateway server settings (port, auth, binding)`},wizard:{label:`Setup Wizard`,description:`Setup wizard state and history`},meta:{label:`Metadata`,description:`Gateway metadata and version information`},logging:{label:`Logging`,description:`Log levels and output configuration`},browser:{label:`Browser`,description:`Browser automation settings`},ui:{label:`UI`,description:`User interface preferences`},models:{label:`Models`,description:`AI model configurations and providers`},bindings:{label:`Bindings`,description:`Key bindings and shortcuts`},broadcast:{label:`Broadcast`,description:`Broadcast and notification settings`},audio:{label:`Audio`,description:`Audio input/output settings`},session:{label:`Session`,description:`Session management and persistence`},cron:{label:`Cron`,description:`Scheduled tasks and automation`},web:{label:`Web`,description:`Web server and API settings`},discovery:{label:`Discovery`,description:`Service discovery and networking`},canvasHost:{label:`Canvas Host`,description:`Canvas rendering and display`},talk:{label:`Talk`,description:`Voice and speech settings`},plugins:{label:`Plugins`,description:`Plugin management and extensions`}};function Z(e){return X[e]?.label??e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t){return X[e]?.description??t.description??``}function $(e){if(!e.query)return!0;let t=k(e.query),n=t.text,r=X[e.key];return t.tags.length===0&&(n&&e.key.toLowerCase().includes(n)||n&&r&&(r.label.toLowerCase().includes(n)||r.description.toLowerCase().includes(n)))?!0:P({schema:e.schema,value:e.sectionValue,path:[e.key],hints:e.uiHints,criteria:t})}function ee(e,t){let n=e;for(let e of t){if(!n)return;if(typeof e==`number`){n=Array.isArray(n.items)?n.items[0]:n.items;continue}let t=n.properties;if(t&&t[e]){n=t[e];continue}let r=n.additionalProperties;n=o(r)?r:void 0}return n}function te(e,t){let n=e;for(let e of t)if(o(n))n=n[e];else if(Array.isArray(n)&&typeof e==`number`)n=n[e];else return;return n}function ne(e){let t=ee(e.schema,e.rootPath);return t?(0,b.jsx)(Y,{schema:t,value:te(e.value??{},e.rootPath),path:e.rootPath,hints:e.uiHints,unsupported:e.unsupported,disabled:e.disabled,searchCriteria:e.search?k(e.search):void 0,showLabel:!1,onPatch:e.onPatch}):(0,b.jsx)(`div`,{className:`cfg-empty-note`,children:`No settings match this selection`})}function re(e){let t=(0,u.useMemo)(()=>e.unsupportedPaths?new Set(e.unsupportedPaths):new Set(e.schema?m(e.schema).unsupportedPaths:[]),[e.schema,e.unsupportedPaths]);if(!e.schema)return(0,b.jsx)(`div`,{className:`cfg-schema-empty`,children:`Schema unavailable.`});if(a(e.schema)!==`object`||!e.schema.properties)return(0,b.jsx)(`div`,{className:`cfg-callout cfg-callout--danger`,children:`Unsupported schema. Use Raw.`});let n=e.search??``,r=n?k(n):void 0;if(e.rootPath)return(0,b.jsx)(`div`,{className:`cfg-form`,children:(0,b.jsx)(ne,{schema:e.schema,rootPath:e.rootPath,value:e.value,uiHints:e.uiHints,disabled:e.disabled??!1,unsupported:t,search:n||void 0,onPatch:e.onPatch})});let i=e.value??{},o=Object.entries(e.schema.properties).toSorted((t,n)=>{let r=c([t[0]],e.uiHints)?.order??50,i=c([n[0]],e.uiHints)?.order??50;return r===i?t[0].localeCompare(n[0]):r-i}).filter(([t,r])=>$({key:t,schema:r,sectionValue:i[t],uiHints:e.uiHints,query:n}));return o.length===0?(0,b.jsx)(`div`,{className:`cfg-form`,children:(0,b.jsx)(`div`,{className:`cfg-empty-note`,children:n?`No settings match "${n}"`:`No settings in this section`})}):(0,b.jsx)(`div`,{className:`cfg-form`,children:o.map(([n,a])=>(0,b.jsxs)(`section`,{className:`cfg-section`,id:`cfg-section-${n}`,children:[(0,b.jsx)(`header`,{className:`cfg-section__header`,children:(0,b.jsxs)(`div`,{className:`cfg-section__titles`,children:[(0,b.jsx)(`h3`,{className:`cfg-section__title`,children:Z(n)}),Q(n,a)?(0,b.jsx)(`p`,{className:`cfg-section__desc`,children:Q(n,a)}):null]})}),(0,b.jsx)(`div`,{className:`cfg-section__content`,children:(0,b.jsx)(Y,{schema:a,value:i[n],path:[n],hints:e.uiHints,unsupported:t,disabled:e.disabled??!1,searchCriteria:r,showLabel:!1,onPatch:e.onPatch})})]},n))})}export{O as i,Z as n,T as r,re as t};
|
|
1
|
+
import{_ as e,c as t,h as n}from"./format-CGs6a1G6.js";import{c as r,d as i,f as a,l as o,o as s,s as c,u as l}from"./form-utils-BkwTm73v.js";var u=e(n(),1),d={title:!0,description:!0,default:!0,nullable:!0};function f(e){return Object.keys(e??{}).every(e=>d[e])}function p(e){let t=e.filter(e=>e!=null),n=t.length!==e.length,r=[];for(let e of t)r.some(t=>Object.is(t,e))||r.push(e);return{enumValues:r,nullable:n}}function m(e){return o(e)?h(e,[]):{schema:null,unsupportedPaths:[`<root>`]}}function h(e,t){let n=new Set,r={...e},i=l(t)||`<root>`;if(e.anyOf||e.oneOf||e.allOf)return y(e,t)||{schema:e,unsupportedPaths:[i]};let s=Array.isArray(e.type)&&e.type.includes(`null`),c=a(e)??(e.properties||e.additionalProperties?`object`:void 0);if(r.type=c??e.type,r.nullable=s||e.nullable,r.enum){let{enumValues:e,nullable:t}=p(r.enum);r.enum=e,t&&(r.nullable=!0),e.length===0&&n.add(i)}if(c===`object`){let a=e.properties??{},s={};for(let[e,r]of Object.entries(a)){let i=h(r,[...t,e]);i.schema&&(s[e]=i.schema);for(let e of i.unsupportedPaths)n.add(e)}if(r.properties=s,e.additionalProperties===!0)n.add(i);else if(e.additionalProperties===!1)r.additionalProperties=!1;else if(o(e.additionalProperties)&&!f(e.additionalProperties)){let a=h(e.additionalProperties,[...t,`*`]);r.additionalProperties=a.schema??e.additionalProperties,a.unsupportedPaths.length>0&&n.add(i)}}else if(c===`array`){let a=Array.isArray(e.items)?e.items[0]:e.items;if(!a)n.add(i);else{let e=h(a,[...t,`*`]);r.items=e.schema??a,e.unsupportedPaths.length>0&&n.add(i)}}else c!==`string`&&c!==`number`&&c!==`integer`&&c!==`boolean`&&!r.enum&&n.add(i);return{schema:r,unsupportedPaths:Array.from(n)}}function g(e){if(a(e)!==`object`)return!1;let t=e.properties?.source,n=e.properties?.provider,r=e.properties?.id;return!t||!n||!r?!1:typeof t.const==`string`&&a(n)===`string`&&a(r)===`string`}function _(e){let t=e.oneOf??e.anyOf;return!t||t.length===0?!1:t.every(e=>g(e))}function v(e,t,n,r){let i=n.findIndex(e=>a(e)===`string`);if(i<0)return null;let o=n.filter((e,t)=>t!==i);return o.length!==1||!_(o[0])?null:h({...e,...n[i],nullable:r,anyOf:void 0,oneOf:void 0,allOf:void 0},t)}function y(e,t){if(e.allOf)return null;let n=e.anyOf??e.oneOf;if(!n)return null;let r=[],i=[],o=!1;for(let e of n){if(!e||typeof e!=`object`)return null;if(Array.isArray(e.enum)){let{enumValues:t,nullable:n}=p(e.enum);r.push(...t),n&&(o=!0);continue}if(`const`in e){if(e.const==null){o=!0;continue}r.push(e.const);continue}if(a(e)===`null`){o=!0;continue}i.push(e)}let s=v(e,t,i,o);if(s)return s;if(r.length>0&&i.length===0){let t=[];for(let e of r)t.some(t=>Object.is(t,e))||t.push(e);return{schema:{...e,enum:t,nullable:o,anyOf:void 0,oneOf:void 0,allOf:void 0},unsupportedPaths:[]}}if(i.length===1){let e=h(i[0],t);return e.schema&&(e.schema.nullable=o||e.schema.nullable),e}let c={string:!0,number:!0,integer:!0,boolean:!0};return i.length>0&&r.length===0&&i.every(e=>e.type&&c[String(e.type)])?{schema:{...e,nullable:o,anyOf:void 0,oneOf:void 0,allOf:void 0},unsupportedPaths:[]}:null}var b=t();function x({tags:e}){return e.length===0?null:(0,b.jsx)(`div`,{className:`cfg-tags`,children:e.map(e=>(0,b.jsx)(`span`,{className:`cfg-tag`,children:e},e))})}function S({meta:e,showLabel:t=!0,htmlFor:n}){let r=!!e.help||e.tags.length>0;return!t&&!r?null:(0,b.jsxs)(b.Fragment,{children:[t?(0,b.jsx)(`label`,{className:`cfg-field__label`,htmlFor:n,children:e.label}):null,e.help?(0,b.jsx)(`div`,{className:`cfg-field__help`,children:e.help}):null,(0,b.jsx)(x,{tags:e.tags})]})}function C(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function w(e){return e.trim().toLowerCase()}function T(e,t){let n=w(t);return n?RegExp(`(^|\\s)tag:${C(n)}(?=\\s|$)`,`i`).test(e.trim()):!1}function E(e,t){let n=w(t),r=e.trim();return n?r?T(r,n)?r:`${r} tag:${n}`:`tag:${n}`:r}function D(e,t){let n=w(t),r=e.trim();if(!n||!r)return r;let i=RegExp(`(^|\\s)tag:${C(n)}(?=\\s|$)`,`ig`);return r.replace(i,` `).replace(/\s+/g,` `).trim()}function O(e,t){return T(e,t)?D(e,t):E(e,t)}function k(e){let t=[],n=new Set;return{text:e.trim().replace(/(^|\s)tag:([^\s]+)/gi,(e,r,i)=>{let a=i.trim().toLowerCase();return a&&!n.has(a)&&(n.add(a),t.push(a)),r}).trim().toLowerCase(),tags:t}}function A(e){return!!(e&&(e.text.length>0||e.tags.length>0))}function j(e,t){if(!e)return!0;for(let n of t)if(n&&n.toLowerCase().includes(e))return!0;return!1}function M(e,t){if(e.length===0)return!0;let n=new Set(t.map(e=>e.toLowerCase()));return e.every(e=>n.has(e))}function N(e){let{schema:t,path:n,hints:r,criteria:a}=e;if(!A(a))return!0;let{label:o,help:s,tags:c}=i(n,t,r);if(!M(a.tags,c))return!1;if(!a.text)return!0;let l=n.filter(e=>typeof e==`string`).join(`.`),u=t.enum&&t.enum.length>0?t.enum.map(e=>String(e)).join(` `):``;return j(a.text,[o,s,t.title,t.description,l,u])}function P(e){let{schema:t,value:n,path:r,hints:i,criteria:s}=e;if(!A(s)||N({schema:t,path:r,hints:i,criteria:s}))return!0;let c=a(t);if(c===`object`){let e=n??t.default,a=o(e)?e:{},c=t.properties??{};for(let[e,t]of Object.entries(c))if(P({schema:t,value:a[e],path:[...r,e],hints:i,criteria:s}))return!0;let l=t.additionalProperties;if(l&&typeof l==`object`){let e=new Set(Object.keys(c));for(let[t,n]of Object.entries(a))if(!e.has(t)&&P({schema:l,value:n,path:[...r,t],hints:i,criteria:s}))return!0}return!1}if(c===`array`){let e=Array.isArray(t.items)?t.items[0]:t.items;if(!e)return!1;let a=Array.isArray(n)?n:Array.isArray(t.default)?t.default:[];if(a.length===0)return!1;for(let t=0;t<a.length;t+=1)if(P({schema:e,value:a[t],path:[...r,t],hints:i,criteria:s}))return!0}return!1}function F(e){let{schema:t,value:n,path:r,hints:a,disabled:o}=e,c=e.showLabel??!0,l=i(r,t,a),u=e.searchCriteria,d=u&&A(u)&&N({schema:t,path:r,hints:a,criteria:u})?void 0:u,f=Array.isArray(t.items)?t.items[0]:t.items;if(!f)return(0,b.jsxs)(`div`,{className:`cfg-field cfg-field--error`,children:[(0,b.jsx)(`div`,{className:`cfg-field__label`,children:l.label}),(0,b.jsx)(`div`,{className:`cfg-field__error`,children:`Unsupported array schema. Edit in raw mode.`})]});let p=Array.isArray(n)?n:Array.isArray(t.default)?t.default:[];return(0,b.jsxs)(`div`,{className:`cfg-array`,children:[(0,b.jsxs)(`div`,{className:`cfg-array__header`,children:[(0,b.jsxs)(`div`,{className:`cfg-array__title`,children:[c?(0,b.jsx)(`span`,{className:`cfg-array__label`,children:l.label}):null,l.tags.length>0?(0,b.jsx)(`span`,{className:`cfg-tag`,children:l.tags.join(` `)}):null]}),(0,b.jsxs)(`span`,{className:`cfg-array__count`,children:[p.length,` item`,p.length===1?``:`s`]}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-array__add`,"aria-label":`Add`,disabled:o,onClick:()=>{e.onPatch(r,[...p,s(f)])},children:`+ Add`})]}),l.help?(0,b.jsx)(`div`,{className:`cfg-array__help`,children:l.help}):null,p.length===0?(0,b.jsx)(`div`,{className:`cfg-array__empty`,children:`No items yet. Use “Add” to create one.`}):(0,b.jsx)(`div`,{className:`cfg-array__items`,children:p.map((t,n)=>(0,b.jsxs)(`div`,{className:`cfg-array__item`,children:[(0,b.jsxs)(`div`,{className:`cfg-array__item-header`,children:[(0,b.jsxs)(`span`,{className:`cfg-array__item-index`,children:[`#`,n+1]}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-array__item-remove`,"aria-label":`Remove item ${n+1}`,title:`Remove item`,disabled:o,onClick:()=>{let t=[...p];t.splice(n,1),e.onPatch(r,t)},children:`✕`})]}),(0,b.jsx)(`div`,{className:`cfg-array__item-content`,children:(0,b.jsx)(Y,{schema:f,value:t,path:[...r,n],hints:a,unsupported:e.unsupported,disabled:o,searchCriteria:d,showLabel:!1,ariaLabel:`${l.label} item ${n+1}`,onPatch:e.onPatch})})]},n))})]})}function I(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)??``}catch{return``}}function L({entryKey:e,disabled:t,onRename:n}){let[r,i]=(0,u.useState)(e);return(0,u.useEffect)(()=>{i(e)},[e]),(0,b.jsx)(`input`,{type:`text`,className:`cfg-input cfg-input--sm`,placeholder:`Key`,"aria-label":`Key for ${e}`,value:r,disabled:t,onChange:e=>i(e.target.value),onBlur:()=>{let t=r.trim();if(!t||t===e){i(e);return}n(t),i(e)}})}function R({entryKey:e,text:t,disabled:n,onCommit:r}){let[i,a]=(0,u.useState)(t);return(0,u.useEffect)(()=>{a(t)},[t]),(0,b.jsx)(`textarea`,{className:`cfg-textarea cfg-textarea--sm`,placeholder:`JSON value`,rows:2,"aria-label":`JSON value for ${e}`,value:i,disabled:n,onChange:e=>a(e.target.value),onBlur:()=>{let e=i.trim();if(!e){r(void 0);return}try{r(JSON.parse(e))}catch{a(t)}}})}function z({schema:e,value:t,path:n,hints:a,unsupported:o,disabled:c,reservedKeys:l,searchCriteria:u,onPatch:d}){let f=r(e),p=Object.entries(t).filter(([e])=>!l.has(e)),m=u&&A(u)?p.filter(([t,r])=>P({schema:e,value:r,path:[...n,t],hints:a,criteria:u})):p;return(0,b.jsxs)(`div`,{className:`cfg-map`,children:[(0,b.jsxs)(`div`,{className:`cfg-map__header`,children:[(0,b.jsx)(`span`,{className:`cfg-map__label`,children:`Custom entries`}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-map__add`,"aria-label":`Add Entry`,disabled:c,onClick:()=>{let r={...t},i=1,a=`custom-${i}`;for(;a in r;)i+=1,a=`custom-${i}`;r[a]=f?{}:s(e),d(n,r)},children:`+ Add Entry`})]}),m.length===0?(0,b.jsx)(`div`,{className:`cfg-map__empty`,children:`No custom entries.`}):(0,b.jsx)(`div`,{className:`cfg-map__items`,children:m.map(([r,s])=>{let l=[...n,r],p=i(l,e,a);return(0,b.jsxs)(`div`,{className:`cfg-map__item`,children:[(0,b.jsxs)(`div`,{className:`cfg-map__item-header`,children:[(0,b.jsx)(L,{entryKey:r,disabled:c,onRename:e=>{let i={...t};e in i||(i[e]=i[r],delete i[r],d(n,i))}}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-map__item-remove`,"aria-label":`Remove entry ${r}`,title:`Remove entry`,disabled:c,onClick:()=>{let e={...t};delete e[r],d(n,e)},children:`✕`})]}),(0,b.jsx)(`div`,{className:`cfg-map__item-value`,children:f?(0,b.jsx)(R,{entryKey:r,text:I(s),disabled:c,onCommit:e=>d(l,e)}):(0,b.jsx)(Y,{schema:e,value:s,path:l,hints:a,unsupported:o,disabled:c,searchCriteria:u,showLabel:!1,ariaLabel:p.label,onPatch:d})})]},r)})})]})}function B(e){let{schema:t,value:n,path:r,hints:a,disabled:s}=e,l=e.showLabel??!0,u=i(r,t,a),d=e.searchCriteria,f=d&&A(d)&&N({schema:t,path:r,hints:a,criteria:d})?void 0:d,p=n??t.default,m=o(p)?p:{},h=t.properties??{},g=Object.entries(h).toSorted((e,t)=>{let n=c([...r,e[0]],a)?.order??0,i=c([...r,t[0]],a)?.order??0;return n===i?e[0].localeCompare(t[0]):n-i}),_=t.additionalProperties,v=o(_),y=new Set(Object.keys(h)),S=(0,b.jsxs)(b.Fragment,{children:[g.map(([t,n])=>(0,b.jsx)(Y,{schema:n,value:m[t],path:[...r,t],hints:a,unsupported:e.unsupported,disabled:s,searchCriteria:f,onPatch:e.onPatch},t)),v?(0,b.jsx)(z,{schema:_,value:m,path:r,hints:a,unsupported:e.unsupported,disabled:s,reservedKeys:y,searchCriteria:f,onPatch:e.onPatch}):null]});return r.length<=1||!l?(0,b.jsx)(`div`,{className:r.length<=1?`cfg-fields`:`cfg-fields cfg-fields--inline`,children:S}):(0,b.jsxs)(`details`,{className:`cfg-object`,open:r.length<=2,children:[(0,b.jsxs)(`summary`,{className:`cfg-object__header`,children:[(0,b.jsxs)(`span`,{className:`cfg-object__title-wrap`,children:[(0,b.jsx)(`span`,{className:`cfg-object__title`,children:u.label}),(0,b.jsx)(x,{tags:u.tags})]}),(0,b.jsx)(`span`,{className:`cfg-object__chevron`,"aria-hidden":`true`,children:`▾`})]}),u.help?(0,b.jsx)(`div`,{className:`cfg-object__help`,children:u.help}):null,(0,b.jsx)(`div`,{className:`cfg-object__content`,children:S})]})}function V(e){if(e==null)return``;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)??``}catch{return``}}function H({label:e}){return(0,b.jsxs)(`div`,{className:`cfg-field cfg-field--error`,children:[(0,b.jsx)(`div`,{className:`cfg-field__label`,children:e}),(0,b.jsx)(`div`,{className:`cfg-field__error`,children:`Edit in raw mode`})]})}function U(e){if(e.const!==void 0)return e.const;if(e.enum&&e.enum.length===1)return e.enum[0]}function W({params:e,meta:t,ariaLabel:n,options:r,resolved:i}){return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:t,showLabel:e.showLabel??!0}),(0,b.jsx)(`div`,{className:`cfg-segmented`,role:`group`,"aria-label":n,children:r.map(t=>{let n=t===i||String(t)===String(i);return(0,b.jsx)(`button`,{type:`button`,className:n?`cfg-segmented__btn cfg-segmented__btn--active`:`cfg-segmented__btn`,"aria-pressed":n,disabled:e.disabled,onClick:()=>e.onPatch(e.path,t),children:String(t)},String(t))})})]})}function G({params:e,meta:t,ariaLabel:n,options:r,resolved:i}){let a=(0,u.useId)(),o=r.findIndex(e=>e===i||String(e)===String(i)),s=`__unset__`;return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:t,showLabel:e.showLabel??!0,htmlFor:a}),(0,b.jsxs)(`select`,{id:a,className:`cfg-select`,"aria-label":n,disabled:e.disabled,value:o>=0?String(o):s,onChange:t=>{let n=t.target.value;e.onPatch(e.path,n===s?void 0:r[Number(n)])},children:[(0,b.jsx)(`option`,{value:s,children:`Select...`}),r.map((e,t)=>(0,b.jsx)(`option`,{value:String(t),children:String(e)},String(t)))]})]})}function K(e){let{schema:t,value:n,path:r,hints:a,disabled:o,onPatch:s,inputType:l}=e,d=(0,u.useId)(),f=i(r,t,a),p=e.ariaLabel??f.label,m=c(r,a),h=(m?.sensitive??!1)&&!/^\$\{[^}]*\}$/.test(V(n).trim()),g=t.default===void 0?``:V(t.default),_=m?.placeholder??(h?`••••`:g&&`Default: ${g}`);return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:f,showLabel:e.showLabel??!0,htmlFor:d}),(0,b.jsxs)(`div`,{className:`cfg-input-wrap`,children:[(0,b.jsx)(`input`,{id:d,type:h?`password`:l,className:`cfg-input`,"aria-label":p,placeholder:_,value:V(n),disabled:o,onChange:e=>{let t=e.target.value;if(l===`number`){if(t.trim()===``){s(r,void 0);return}let e=Number(t);s(r,Number.isNaN(e)?t:e);return}s(r,t)}}),t.default===void 0?null:(0,b.jsx)(`button`,{type:`button`,className:`cfg-input__reset`,title:`Reset to default`,"aria-label":`Reset ${p} to default`,disabled:o,onClick:()=>s(r,t.default),children:`↺`})]})]})}function q(e){let{schema:t,value:n,path:r,disabled:a}=e,o=(0,u.useId)(),s=i(r,t,e.hints),c=e.ariaLabel??s.label,l=n??t.default??``,d=typeof l==`number`?l:0;return(0,b.jsxs)(`div`,{className:`cfg-field`,children:[(0,b.jsx)(S,{meta:s,showLabel:e.showLabel??!0,htmlFor:o}),(0,b.jsxs)(`div`,{className:`cfg-number`,children:[(0,b.jsx)(`button`,{type:`button`,className:`cfg-number__btn`,"aria-label":`Decrease ${c}`,disabled:a,onClick:()=>e.onPatch(r,d-1),children:`−`}),(0,b.jsx)(`input`,{id:o,type:`number`,className:`cfg-number__input`,"aria-label":c,value:V(l),disabled:a,onChange:t=>{let n=t.target.value;e.onPatch(r,n===``?void 0:Number(n))}}),(0,b.jsx)(`button`,{type:`button`,className:`cfg-number__btn`,"aria-label":`Increase ${c}`,disabled:a,onClick:()=>e.onPatch(r,d+1),children:`+`})]})]})}function J(e){let{schema:t,value:n,path:r,disabled:a}=e,o=(0,u.useId)(),s=i(r,t,e.hints),c=e.ariaLabel??s.label,l=typeof n==`boolean`?n:typeof t.default==`boolean`&&t.default;return(0,b.jsxs)(`label`,{className:a?`cfg-toggle-row cfg-toggle-row--disabled`:`cfg-toggle-row`,children:[(0,b.jsxs)(`span`,{className:`cfg-toggle-row__content`,children:[(e.showLabel??!0)||!e.ariaLabel?(0,b.jsx)(`span`,{className:`cfg-toggle-row__label`,children:s.label}):null,s.help?(0,b.jsx)(`span`,{className:`cfg-toggle-row__help`,children:s.help}):null,(0,b.jsx)(x,{tags:s.tags})]}),(0,b.jsx)(`input`,{id:o,type:`checkbox`,className:`cfg-toggle`,"aria-label":c,checked:l,disabled:a,onChange:t=>e.onPatch(r,t.target.checked)})]})}function Y(e){let{schema:t,value:n,path:r,hints:o,unsupported:s}=e,c=i(r,t,o),u=e.ariaLabel??c.label,d=e.searchCriteria;if(s.has(l(r)))return(0,b.jsx)(H,{label:c.label});if(d&&A(d)&&!P({schema:t,value:n,path:r,hints:o,criteria:d}))return null;if(t.anyOf||t.oneOf){let r=(t.anyOf??t.oneOf??[]).filter(e=>!(e.type===`null`||Array.isArray(e.type)&&e.type.includes(`null`)));if(r.length===1)return(0,b.jsx)(Y,{...e,schema:r[0]});let i=r.map(U);if(i.length>0&&i.every(e=>e!==void 0)){let r=n??t.default;return i.length<=5?(0,b.jsx)(W,{params:e,meta:c,ariaLabel:u,options:i,resolved:r}):(0,b.jsx)(G,{params:e,meta:c,ariaLabel:u,options:i,resolved:r})}let o={string:!0,number:!0,boolean:!0},s=new Set(r.map(e=>a(e)).filter(e=>!!e).map(e=>e===`integer`?`number`:e));if(s.size>0&&[...s].every(e=>o[e])){let n=s.has(`boolean`),r=s.has(`string`),i=s.has(`number`);if(n&&s.size===1)return(0,b.jsx)(Y,{...e,schema:{...t,type:`boolean`,anyOf:void 0,oneOf:void 0}});if(r||i)return(0,b.jsx)(K,{...e,inputType:i&&!r?`number`:`text`})}}if(t.enum){let r=n??t.default;return t.enum.length<=5?(0,b.jsx)(W,{params:e,meta:c,ariaLabel:u,options:t.enum,resolved:r}):(0,b.jsx)(G,{params:e,meta:c,ariaLabel:u,options:t.enum,resolved:r})}let f=a(t);return f===`object`?(0,b.jsx)(B,{...e}):f===`array`?(0,b.jsx)(F,{...e}):f===`boolean`?(0,b.jsx)(J,{...e}):f===`number`||f===`integer`?(0,b.jsx)(q,{...e}):f===`string`?(0,b.jsx)(K,{...e,inputType:`text`}):(0,b.jsxs)(`div`,{className:`cfg-field cfg-field--error`,children:[(0,b.jsx)(`div`,{className:`cfg-field__label`,children:c.label}),(0,b.jsxs)(`div`,{className:`cfg-field__error`,children:[`Unsupported type: `,f??`unknown`,`. Edit in raw mode.`]})]})}var X={env:{label:`Environment Variables`,description:`Environment variables passed to the gateway process`},update:{label:`Updates`,description:`Auto-update settings and release channel`},agents:{label:`Agents`,description:`Agent configurations, models, and identities`},auth:{label:`Authentication`,description:`API keys and authentication profiles`},channels:{label:`Channels`,description:`Messaging channels (Telegram, Discord, Slack, etc.)`},messages:{label:`Messages`,description:`Message handling and routing settings`},commands:{label:`Commands`,description:`Custom slash commands`},hooks:{label:`Hooks`,description:`Webhooks and event hooks`},skills:{label:`Skills`,description:`Skill packs and capabilities`},tools:{label:`Tools`,description:`Tool configurations (browser, search, etc.)`},gateway:{label:`Gateway`,description:`Gateway server settings (port, auth, binding)`},wizard:{label:`Setup Wizard`,description:`Setup wizard state and history`},meta:{label:`Metadata`,description:`Gateway metadata and version information`},logging:{label:`Logging`,description:`Log levels and output configuration`},browser:{label:`Browser`,description:`Browser automation settings`},ui:{label:`UI`,description:`User interface preferences`},models:{label:`Models`,description:`AI model configurations and providers`},bindings:{label:`Bindings`,description:`Key bindings and shortcuts`},broadcast:{label:`Broadcast`,description:`Broadcast and notification settings`},audio:{label:`Audio`,description:`Audio input/output settings`},session:{label:`Session`,description:`Session management and persistence`},cron:{label:`Cron`,description:`Scheduled tasks and automation`},web:{label:`Web`,description:`Web server and API settings`},discovery:{label:`Discovery`,description:`Service discovery and networking`},canvasHost:{label:`Canvas Host`,description:`Canvas rendering and display`},talk:{label:`Talk`,description:`Voice and speech settings`},plugins:{label:`Plugins`,description:`Plugin management and extensions`}};function Z(e){return X[e]?.label??e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t){return X[e]?.description??t.description??``}function $(e){if(!e.query)return!0;let t=k(e.query),n=t.text,r=X[e.key];return t.tags.length===0&&(n&&e.key.toLowerCase().includes(n)||n&&r&&(r.label.toLowerCase().includes(n)||r.description.toLowerCase().includes(n)))?!0:P({schema:e.schema,value:e.sectionValue,path:[e.key],hints:e.uiHints,criteria:t})}function ee(e,t){let n=e;for(let e of t){if(!n)return;if(typeof e==`number`){n=Array.isArray(n.items)?n.items[0]:n.items;continue}let t=n.properties;if(t&&t[e]){n=t[e];continue}let r=n.additionalProperties;n=o(r)?r:void 0}return n}function te(e,t){let n=e;for(let e of t)if(o(n))n=n[e];else if(Array.isArray(n)&&typeof e==`number`)n=n[e];else return;return n}function ne(e){let t=ee(e.schema,e.rootPath);return t?(0,b.jsx)(Y,{schema:t,value:te(e.value??{},e.rootPath),path:e.rootPath,hints:e.uiHints,unsupported:e.unsupported,disabled:e.disabled,searchCriteria:e.search?k(e.search):void 0,showLabel:!1,onPatch:e.onPatch}):(0,b.jsx)(`div`,{className:`cfg-empty-note`,children:`No settings match this selection`})}function re(e){let t=(0,u.useMemo)(()=>e.unsupportedPaths?new Set(e.unsupportedPaths):new Set(e.schema?m(e.schema).unsupportedPaths:[]),[e.schema,e.unsupportedPaths]);if(!e.schema)return(0,b.jsx)(`div`,{className:`cfg-schema-empty`,children:`Schema unavailable.`});if(a(e.schema)!==`object`||!e.schema.properties)return(0,b.jsx)(`div`,{className:`cfg-callout cfg-callout--danger`,children:`Unsupported schema. Use Raw.`});let n=e.search??``,r=n?k(n):void 0;if(e.rootPath)return(0,b.jsx)(`div`,{className:`cfg-form`,children:(0,b.jsx)(ne,{schema:e.schema,rootPath:e.rootPath,value:e.value,uiHints:e.uiHints,disabled:e.disabled??!1,unsupported:t,search:n||void 0,onPatch:e.onPatch})});let i=e.value??{},o=Object.entries(e.schema.properties).toSorted((t,n)=>{let r=c([t[0]],e.uiHints)?.order??50,i=c([n[0]],e.uiHints)?.order??50;return r===i?t[0].localeCompare(n[0]):r-i}).filter(([t,r])=>$({key:t,schema:r,sectionValue:i[t],uiHints:e.uiHints,query:n}));return o.length===0?(0,b.jsx)(`div`,{className:`cfg-form`,children:(0,b.jsx)(`div`,{className:`cfg-empty-note`,children:n?`No settings match "${n}"`:`No settings in this section`})}):(0,b.jsx)(`div`,{className:`cfg-form`,children:o.map(([n,a])=>(0,b.jsxs)(`section`,{className:`cfg-section`,id:`cfg-section-${n}`,children:[(0,b.jsx)(`header`,{className:`cfg-section__header`,children:(0,b.jsxs)(`div`,{className:`cfg-section__titles`,children:[(0,b.jsx)(`h3`,{className:`cfg-section__title`,children:Z(n)}),Q(n,a)?(0,b.jsx)(`p`,{className:`cfg-section__desc`,children:Q(n,a)}):null]})}),(0,b.jsx)(`div`,{className:`cfg-section__content`,children:(0,b.jsx)(Y,{schema:a,value:i[n],path:[n],hints:e.uiHints,unsupported:t,disabled:e.disabled??!1,searchCriteria:r,showLabel:!1,onPatch:e.onPatch})})]},n))})}export{O as i,Z as n,T as r,re as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e}from"./format-
|
|
1
|
+
import{c as e}from"./format-CGs6a1G6.js";import{t}from"./Button-CGdLofSY.js";import{t as n}from"./Dialog-CQE8Pvh6.js";var r=e();function i({open:e,title:i,body:a,confirmLabel:o,danger:s=!1,busy:c=!1,testId:l,bodyClassName:u,onConfirm:d,onCancel:f}){return(0,r.jsx)(n,{open:e,title:i,onClose:c?()=>{}:f,width:`sm`,footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t,{onClick:f,disabled:c,children:`Cancel`}),(0,r.jsx)(t,{variant:s?`danger`:`primary`,onClick:d,disabled:c,"data-testid":l,children:c?`Working…`:o})]}),children:(0,r.jsx)(`p`,{className:u,children:a})})}export{i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e}from"./format-
|
|
1
|
+
import{c as e}from"./format-CGs6a1G6.js";var t=e();function n({columns:e,rows:n,rowKey:r,empty:i,onRowClick:a,selectedKey:o,label:s}){return n.length===0&&i!==void 0?(0,t.jsx)(`div`,{className:`ct-table__empty`,children:i}):(0,t.jsx)(`div`,{className:`ct-table__scroll`,children:(0,t.jsxs)(`table`,{className:`ct-table`,"aria-label":s,children:[(0,t.jsx)(`thead`,{children:(0,t.jsx)(`tr`,{children:e.map(e=>(0,t.jsx)(`th`,{scope:`col`,className:e.align===`end`?`ct-table__end`:void 0,children:e.label},e.key))})}),(0,t.jsx)(`tbody`,{children:n.map(n=>{let i=r(n),s=o===i;return(0,t.jsx)(`tr`,{className:[a?`ct-table__row--clickable`:null,s?`ct-table__row--selected`:null].filter(Boolean).join(` `),"aria-selected":a?s:void 0,tabIndex:a?0:void 0,onClick:a?()=>a(n):void 0,onKeyDown:a?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),a(n))}:void 0,children:e.map(e=>(0,t.jsx)(`td`,{className:[e.mono?`ct-mono`:null,e.align===`end`?`ct-table__end`:null].filter(Boolean).join(` `)||void 0,children:e.render(n)},e.key))},i)})})]})})}export{n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t,h as n,l as r,s as i,t as a,u as o}from"./format-
|
|
1
|
+
import{_ as e,c as t,h as n,l as r,s as i,t as a,u as o}from"./format-CGs6a1G6.js";import{t as s}from"./Button-CGdLofSY.js";import{o as c,s as l}from"./index-BvXiY83i.js";import{n as u,t as d}from"./use-gateway-query-D25QZANO.js";import{t as f}from"./Panel-9wOynsWc.js";var p=e(n(),1),m=t();function h(){let e=l(e=>e.status),t=l(e=>e.plugins),n=l(e=>e.failures),r=l(e=>e.gatewayUrl);if(e===`unavailable`||(e===`ready`||e===`cross-origin`)&&t.length===0&&n.length===0)return null;let a=c(r??``),o=n.filter(e=>e.pluginId===`*`);return(0,m.jsxs)(f,{title:`Plugin UI`,sub:`Console modules from allowed plugins.`,testId:`plugin-ui-status`,children:[e===`cross-origin`?(0,m.jsxs)(`p`,{className:`ct-debug__callout`,"data-testid":`plugin-ui-cross-origin`,children:[`Plugin views load only in the console served by the gateway at`,` `,a??`the gateway origin`,`.`]}):null,e===`idle`?(0,m.jsx)(i,{message:`Plugin UI has not loaded yet.`}):null,e===`loading`?(0,m.jsx)(i,{tone:`loading`,message:`Loading plugin UI…`}):null,t.map(t=>{let r=n.find(e=>e.pluginId===t.id);return(0,m.jsxs)(`div`,{className:`ct-plugin-status__row`,"data-testid":`plugin-ui-row`,children:[(0,m.jsx)(`span`,{className:`ct-plugin-status__name`,children:t.name}),t.version===null?null:(0,m.jsx)(`span`,{className:`ct-plugin-status__version ct-mono`,children:t.version}),r?(0,m.jsx)(`span`,{className:`ct-plugin-status__state ct-plugin-status__state--error`,children:r.message}):(0,m.jsx)(`span`,{className:`ct-plugin-status__state`,children:e===`ready`?`Loaded`:e===`loading`?`Loading…`:`Not loaded`})]},t.id)}),o.map((e,t)=>(0,m.jsx)(`p`,{className:`ct-debug__callout`,role:`alert`,"data-testid":`plugin-ui-list-error`,children:e.message},`${e.message}:${t}`))]})}function g(e){let t=e.trim();if(t.length===0)return{ok:!0,params:{}};let n;try{n=JSON.parse(t)}catch(e){return{ok:!1,error:`Params are not valid JSON: ${a(e)}`}}return typeof n!=`object`||!n||Array.isArray(n)?{ok:!1,error:`Params must be a JSON object.`}:{ok:!0,params:n}}function _(e){return JSON.stringify(e,null,2)}function v(e){let t=e?.securityAudit?.summary??null;if(!t)return null;let n=t.critical??0,r=t.warn??0,i=t.info??0;return{tone:n>0?`danger`:r>0?`warn`:`success`,label:n>0?`${n} critical`:r>0?`${r} warnings`:`No critical issues`,info:i}}function y(e){if(e==null)return``;try{return JSON.stringify(e,null,2)}catch{return`<unserialisable payload>`}}function b({label:e,title:t,sub:n,data:r,loading:a,error:o,callout:s}){return(0,m.jsxs)(f,{title:t,sub:n,children:[s,o?(0,m.jsx)(i,{tone:`error`,message:o}):null,a&&!r?(0,m.jsx)(i,{tone:`loading`,message:`Loading…`}):null,!o&&r===null&&!a?(0,m.jsx)(i,{message:`No data.`}):null,r===null?null:(0,m.jsx)(`pre`,{className:`ct-debug__code`,"aria-label":e,children:_(r)})]})}function x(){let e=r(e=>e.request),t=u(`status`,{},{refreshMs:d}),n=u(`health`,{},{refreshMs:d}),c=u(`last-heartbeat`,{},{refreshMs:d}),l=u(`models.list`,{},{refreshMs:d}),x=o(e=>e.entries),[S,C]=(0,p.useState)(``),[w,T]=(0,p.useState)(``),[E,D]=(0,p.useState)(null),[O,k]=(0,p.useState)(null),[A,j]=(0,p.useState)(!1),M=async()=>{let t=S.trim();if(t.length===0){D(`Method is required.`),k(null);return}let n=g(w);if(!n.ok){D(n.error),k(null);return}j(!0),D(null),k(null);try{let r=await e(t,n.params);k(_(r))}catch(e){D(a(e))}finally{j(!1)}},N=v(t.data);return(0,m.jsxs)(`div`,{className:`ct-page`,"data-testid":`debug-view`,children:[(0,m.jsxs)(`header`,{className:`ct-page__head`,children:[(0,m.jsxs)(`div`,{className:`ct-page__head-text`,children:[(0,m.jsx)(`h1`,{className:`ct-page__title`,children:`Debug`}),(0,m.jsx)(`p`,{className:`ct-page__sub`,children:`Gateway snapshots and a raw RPC console.`})]}),(0,m.jsx)(s,{onClick:()=>{t.reload(),n.reload(),c.reload(),l.reload()},disabled:t.loading||n.loading||c.loading||l.loading,children:`Refresh`})]}),(0,m.jsxs)(`div`,{className:`ct-debug__grid`,children:[(0,m.jsx)(b,{label:`Status snapshot`,title:`Status`,sub:`Summary from the gateway status call.`,data:t.data,loading:t.loading,error:t.error,callout:N?(0,m.jsxs)(`p`,{className:`ct-debug__audit ct-debug__audit--${N.tone}`,"data-testid":`security-callout`,children:[`Security audit: `,N.label,N.info>0?` · ${N.info} info`:``,`. Run`,` `,(0,m.jsx)(`span`,{className:`ct-mono`,children:`openclaw security audit --deep`}),` for details.`]}):null}),(0,m.jsx)(b,{label:`Health snapshot`,title:`Health`,sub:`Health snapshot.`,data:n.data,loading:n.loading,error:n.error}),(0,m.jsx)(b,{label:`Last heartbeat snapshot`,title:`Last heartbeat`,sub:`The most recent heartbeat record.`,data:c.data,loading:c.loading,error:c.error})]}),(0,m.jsx)(h,{}),(0,m.jsxs)(f,{title:`Manual RPC`,sub:`Send a raw gateway method with JSON params.`,children:[(0,m.jsx)(`p`,{className:`ct-debug__note`,children:`Calls run with this console's operator scopes.`}),(0,m.jsxs)(`div`,{className:`ct-debug__form`,children:[(0,m.jsxs)(`label`,{className:`ct-debug__field`,children:[(0,m.jsx)(`span`,{children:`Method`}),(0,m.jsx)(`input`,{type:`text`,value:S,placeholder:`system-presence`,onChange:e=>C(e.target.value)})]}),(0,m.jsxs)(`label`,{className:`ct-debug__field`,children:[(0,m.jsx)(`span`,{children:`Params (JSON)`}),(0,m.jsx)(`textarea`,{rows:6,value:w,onChange:e=>T(e.target.value)})]})]}),(0,m.jsx)(s,{variant:`primary`,onClick:()=>void M(),disabled:A,children:A?`Calling…`:`Call`}),E?(0,m.jsx)(`p`,{className:`ct-debug__callout`,role:`alert`,children:E}):null,O===null?null:(0,m.jsx)(`pre`,{className:`ct-debug__code ct-debug__result`,"data-testid":`rpc-result`,children:O})]}),(0,m.jsx)(b,{label:`Models snapshot`,title:`Models`,sub:`Catalog from models.list.`,data:l.data,loading:l.loading,error:l.error}),(0,m.jsx)(f,{title:`Event Log`,sub:`Latest gateway events, newest first.`,className:`ct-debug__events`,children:x.length===0?(0,m.jsx)(i,{message:`No events yet.`}):(0,m.jsx)(`div`,{className:`ct-debug__event-list`,"data-testid":`event-log`,role:`list`,children:x.map(e=>(0,m.jsxs)(`div`,{className:`ct-debug__event`,role:`listitem`,"data-testid":`event-log-row`,children:[(0,m.jsxs)(`div`,{className:`ct-debug__event-main`,children:[(0,m.jsx)(`div`,{className:`ct-debug__event-name`,children:e.event}),(0,m.jsx)(`div`,{className:`ct-debug__event-time`,children:new Date(e.ts).toLocaleTimeString()})]}),(0,m.jsx)(`pre`,{className:`ct-debug__code ct-debug__event-payload`,children:y(e.payload)})]},e.id))})})]})}export{x as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t,h as n}from"./format-
|
|
1
|
+
import{_ as e,c as t,h as n}from"./format-CGs6a1G6.js";var r=e(n(),1),i=[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`);function a(e,t){if(t.key!==`Tab`)return;let n=[...e.querySelectorAll(i)],r=document.activeElement,a=r instanceof HTMLElement?n.indexOf(r):-1;if(a===-1){t.preventDefault(),(t.shiftKey?n[n.length-1]:n[0])?.focus();return}t.shiftKey&&a===0?(t.preventDefault(),n[n.length-1]?.focus()):!t.shiftKey&&a===n.length-1&&(t.preventDefault(),n[0]?.focus())}var o=t();function s({open:e,title:t,onClose:n,children:i,footer:s,width:c=`md`}){let l=(0,r.useId)(),u=(0,r.useRef)(null),d=(0,r.useRef)(n);return d.current=n,(0,r.useEffect)(()=>{if(!e)return;let t=document.activeElement instanceof HTMLElement?document.activeElement:null;u.current?.focus();let n=e=>{e.key===`Escape`?(e.preventDefault(),d.current()):e.key===`Tab`&&u.current&&a(u.current,e)};return window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`keydown`,n),t?.focus()}},[e]),e?(0,o.jsx)(`div`,{className:`ct-dialog__backdrop`,onClick:e=>{e.target===e.currentTarget&&n()},children:(0,o.jsxs)(`div`,{ref:u,className:`ct-dialog ct-dialog--${c}`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":l,tabIndex:-1,children:[(0,o.jsx)(`header`,{className:`ct-dialog__head`,children:(0,o.jsx)(`h2`,{id:l,className:`ct-dialog__title`,children:t})}),(0,o.jsx)(`div`,{className:`ct-dialog__body`,children:i}),s?(0,o.jsx)(`footer`,{className:`ct-dialog__foot`,children:s}):null]})}):null}export{a as n,s as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{_ as e,c as t,h as n,i as r,l as i,s as a,t as o}from"./format-
|
|
1
|
+
import{_ as e,c as t,h as n,i as r,l as i,s as a,t as o}from"./format-CGs6a1G6.js";import{n as s}from"./gateway-features-BZH74_Oc.js";import{n as c}from"./use-gateway-query-D25QZANO.js";import{t as l}from"./Badge-CB5TWfdz.js";import{t as u}from"./Panel-9wOynsWc.js";import{t as d}from"./DataTable-CSi930kO.js";var f=3e4,p=`learning-core.produce`,m=`learning-core.consolidation`,h=`learning-core.distill`,g={completed:!0,failed:!0,dlq:!0,preempted:!0,preempted_ceiling:!0,rolled_back:!0,cancelled:!0};function _(e){let t=null;for(let n of e??[])n.kind===`metrics`&&(t=n);return t}function v(e){return(e??[]).filter(e=>e.kind===`outcome`)}function y(e){return e.startedAt??e.completedAt??e.updatedAt}function b(e,t,n,r=Date.now(),i=!1){if(t===void 0)return`not_loaded`;let a=_(t);if(a)return a.measurementState===`unavailable`?`unavailable`:`complete`;if(t.length===0&&n!==null){let t=Date.parse(e.completedAt??e.updatedAt);if(Number.isFinite(t)&&r-t>n*864e5)return`pruned`}return v(t).some(e=>e.denial)?`denied`:!g[e.status]&&e.status!==`deferred`?`in_progress`:i?`truncated`:`missing`}function x(e,t){return e.mode===`dry_run`||_(t)?.mode===`dry_run`}function S(e){let t=null;for(let n of v(e))n.preemption?.reason&&(t=n.preemption.reason);return t}function C(e,t,n){let r=[...e,...t].toSorted((e,t)=>y(t).localeCompare(y(e))),i=[],a=0;for(let e of r){let t=n[e.taskRunId];if(x(e,t))continue;if(e.taskId===`learning-core.consolidation`){i.push({run:e,events:t});continue}let r=_(t);if(!r){g[e.status]&&(a+=1);continue}r.items?.producer===`consolidation`&&i.push({run:e,events:t})}return{runs:i,unclassifiedRecovered:a}}function w(e){let t=[];for(let{run:n,events:r}of e){let e=_(r)?.qualityScore;typeof e==`number`&&Number.isFinite(e)&&t.push({taskRunId:n.taskRunId,taskId:n.taskId,at:y(n),qualityScore:e})}return t.toSorted((e,t)=>e.at.localeCompare(t.at))}function T(e){let t=0,n=0;for(let{run:r,events:i}of e){if(r.status===`preempted_ceiling`){t+=1;continue}if(r.status===`preempted`){if(S(i)===`shutdown`){n+=1;continue}t+=1}}return{preempted:t,total:e.length,shutdownExcluded:n}}function E(e,t,n){return b(e,t,n)===`pruned`}function D(e,t,n){let r=e.toSorted((e,t)=>y(t).localeCompare(y(e)));for(let e of r){let r=t[e.taskRunId];if(x(e,r)||e.status===`deferred`||E(e,r,n)||v(r).some(e=>e.denial))continue;let i=_(r)?.authoring;if(i)return{taskRunId:e.taskRunId,at:y(e),authoring:i}}return null}async function O(e,t){let n=[...new Set(t)],r=[];for(let e=0;e<n.length;e+=50)r.push(n.slice(e,e+50));let i=await Promise.all(r.map(t=>e(`tasks.runEvents`,{taskRunIds:t}))),a=Object.create(null),o=Object.create(null),s=null;for(let e of i){s??=typeof e.retentionDays==`number`?e.retentionDays:null;for(let t of Object.keys(e.events??{}))a[t]=e.events[t]??[];for(let t of Object.keys(e.truncated??{})){let n=e.truncated?.[t];n&&(o[t]=n)}}return{events:a,truncated:o,retentionDays:s}}var k=e(n(),1),A={events:{},truncated:{},retentionDays:null,error:null};function j(e,t){let n=i(e=>e.request),r=i(e=>e.status===`connected`),[a,s]=(0,k.useState)(A),c=t.map(e=>`${e.taskRunId}\t${e.status}\t${e.updatedAt}`).join(`
|
|
2
2
|
`);return(0,k.useEffect)(()=>{if(!e||!r)return;let t=c.length>0?c.split(`
|
|
3
3
|
`).map(e=>e.split(` `)[0]):[];if(t.length===0){s(A);return}let i=!0;return O(n,t).then(e=>{i&&s({...e,error:null})}).catch(e=>{i&&s({...A,error:o(e)})}),()=>{i=!1}},[e,r,c,n]),a}var M=t();function N(){let e=c(`learning.overview`,{},{refreshMs:f,invalidateOn:[`dreams.update`]});if(e.error&&!e.data)return(0,M.jsx)(a,{message:e.error,tone:`error`,testId:`dreams-overview-error`});if(e.loading&&!e.data)return null;let t=e.data;return t?(0,M.jsxs)(`div`,{className:`ct-dreams__health-item`,"data-testid":`dreams-learning-overview`,children:[(0,M.jsx)(`h3`,{className:`ct-dreams__health-title`,children:`Learning`}),(0,M.jsxs)(`p`,{children:[t.lessons,` lessons · `,t.proposals.pending,` pending proposals`,t.truncated?` (truncated)`:``]})]}):null}function P({hasRunEvents:e,hasLearningOverview:t}){let n=c(`tasks.status`,{taskId:p,limit:50},{refreshMs:f,invalidateOn:[`dreams.update`]}),i=c(`tasks.status`,{taskId:m,limit:50},{refreshMs:f,invalidateOn:[`dreams.update`]}),o=c(`tasks.status`,{taskId:h,status:`completed`,limit:20},{refreshMs:f,invalidateOn:[`dreams.update`]}),s=[...n.data?.runs??[],...i.data?.runs??[]],d=j(e,s),g=o.data?.runs??[],_=j(e,g),v=n.loading&&!n.data||i.loading&&!i.data||o.loading&&!o.data,y=n.error??i.error??o.error,b=n.data?.runsAvailable===!1||i.data?.runsAvailable===!1||o.data?.runsAvailable===!1,x=n.data?.runsError??i.data?.runsError??o.data?.runsError??null,S=[n.error,i.error,o.error].filter(e=>e!==null),E;if(y&&!n.data&&!i.data&&!o.data)E=(0,M.jsx)(a,{message:y,tone:`error`,testId:`dreams-health-error`});else if(v)E=(0,M.jsx)(a,{message:`Loading consolidation health…`,tone:`loading`});else if(b)E=(0,M.jsx)(a,{message:x??`runs store unavailable`,tone:`error`,testId:`dreams-health-unavailable`});else{let o=C(n.data?.runs??[],i.data?.runs??[],d.events),c=w(o.runs),u=T(o.runs),f=D(g,_.events,_.retentionDays);E=(0,M.jsxs)(`div`,{className:`ct-dreams__health`,children:[S.map((e,t)=>(0,M.jsx)(a,{message:e,tone:`error`,testId:`dreams-health-read-error`},`${t}-${e}`)),t?(0,M.jsx)(N,{}):(0,M.jsx)(a,{message:`learning.overview is not enabled on this gateway.`,testId:`dreams-overview-disabled`}),s.length>0&&!e?(0,M.jsx)(a,{message:`tasks.runEvents is not enabled on this gateway.`,testId:`dreams-health-events-degraded`}):null,d.error?(0,M.jsx)(a,{message:d.error,tone:`error`,testId:`dreams-classify-error`}):null,(0,M.jsxs)(`div`,{className:`ct-dreams__health-grid`,children:[(0,M.jsxs)(`div`,{className:`ct-dreams__health-item`,"data-testid":`dreams-quality`,children:[(0,M.jsx)(`h3`,{className:`ct-dreams__health-title`,children:`Quality trend`}),c.length===0?(0,M.jsx)(`p`,{className:`ct-dreams__muted`,children:`No scored consolidation runs in view.`}):(0,M.jsx)(`p`,{className:`ct-dreams__trend`,children:c.map(e=>e.qualityScore.toFixed(2)).join(` → `)}),o.unclassifiedRecovered>0?(0,M.jsxs)(`p`,{className:`ct-dreams__muted`,children:[o.unclassifiedRecovered,` recovered runs without metrics could not be classified.`]}):null]}),(0,M.jsxs)(`div`,{className:`ct-dreams__health-item`,"data-testid":`dreams-preemption`,children:[(0,M.jsx)(`h3`,{className:`ct-dreams__health-title`,children:`Preemptions`}),(0,M.jsxs)(`p`,{children:[u.preempted,` of `,u.total,` runs preempted`,u.shutdownExcluded>0?` (${u.shutdownExcluded} shutdown excluded)`:``]})]}),(0,M.jsxs)(`div`,{className:`ct-dreams__health-item`,"data-testid":`dreams-authoring`,children:[(0,M.jsx)(`h3`,{className:`ct-dreams__health-title`,children:`Distill authoring`}),f?(0,M.jsxs)(`p`,{children:[(0,M.jsx)(l,{tone:`accent`,children:f.authoring}),` `,(0,M.jsx)(`span`,{className:`ct-dreams__muted`,children:r(f.at)})]}):(0,M.jsx)(`p`,{className:`ct-dreams__muted`,children:`No authored distill run in view.`})]})]})]})}return(0,M.jsx)(u,{title:`Consolidation health`,testId:`dreams-health`,children:E})}var F={complete:`ok`,unavailable:`warn`,truncated:`warn`,pruned:`neutral`,denied:`warn`,missing:`neutral`,in_progress:`accent`,not_loaded:`neutral`},I=`tasks.runEvents is not enabled on this gateway.`;function L({budget:e}){return e?e.available?(0,M.jsxs)(`p`,{className:`ct-dreams__budget`,"data-testid":`dreams-budget`,children:[(0,M.jsxs)(`span`,{children:[e.windowUsageUnits,` of `,e.cap,` units`]}),` `,`· `,e.windowHours??`?`,`h window · `,e.scopeKind,` · `,e.totalDenied,` denied`]}):(0,M.jsxs)(`p`,{className:`ct-dreams__budget`,"data-testid":`dreams-budget`,children:[`Budget unavailable: `,e.error??`unknown`]}):(0,M.jsx)(`p`,{className:`ct-dreams__budget`,children:`No budget window reported.`})}function R({hasRunEvents:e}){let t=c(`tasks.status`,{limit:50},{refreshMs:f,invalidateOn:[`dreams.update`]}),n=t.data?.runs??[],i=j(e,n),o=t.error&&!t.data?(0,M.jsx)(a,{message:t.error,tone:`error`,testId:`dreams-runs-error`}):t.loading&&!t.data?(0,M.jsx)(a,{message:`Loading runs…`,tone:`loading`}):t.data?.runsAvailable===!1?(0,M.jsx)(a,{message:t.data.runsError??`Task run store is not available.`,tone:`error`,testId:`dreams-runs-unavailable`}):(0,M.jsxs)(M.Fragment,{children:[t.data?.runsError?(0,M.jsx)(`p`,{className:`ct-dreams__callout`,role:`alert`,children:t.data.runsError}):null,n.length>0&&!e?(0,M.jsx)(a,{message:I,testId:`dreams-events-degraded`}):null,i.error?(0,M.jsx)(a,{message:i.error,tone:`error`,testId:`dreams-events-error`}):null,(0,M.jsx)(d,{columns:[{key:`id`,label:`Run`,mono:!0,render:e=>e.taskRunId},{key:`task`,label:`Task`,render:e=>e.taskId},{key:`status`,label:`Status`,render:e=>(0,M.jsx)(l,{children:e.status})},{key:`mode`,label:`Mode`,render:e=>x(e,i.events[e.taskRunId])?(0,M.jsx)(l,{tone:`accent`,children:`dry-run`}):`normal`},{key:`measurement`,label:`Measurement`,render:t=>{let n=b(t,e?i.events[t.taskRunId]:void 0,i.retentionDays,Date.now(),i.truncated[t.taskRunId]!==void 0);return(0,M.jsx)(l,{tone:F[n],children:n})}},{key:`started`,label:`Started`,render:e=>r(y(e))}],rows:n,rowKey:e=>e.taskRunId,label:`Dream runs`,empty:(0,M.jsx)(a,{message:`No recent runs.`,testId:`dreams-runs-empty`})})]});return(0,M.jsxs)(u,{title:`Runs`,testId:`dreams-runs`,children:[(0,M.jsx)(L,{budget:t.data?.budgetWindow}),o]})}function z({method:e,testId:t}){return(0,M.jsx)(a,{message:`${e} is not enabled on this gateway.`,testId:t})}function B(){let e=c(`dream.status`,{},{refreshMs:f,invalidateOn:[`dreams.update`]});if(e.error&&!e.data)return(0,M.jsx)(a,{message:e.error,tone:`error`,testId:`dream-status-error`});if(e.loading&&!e.data)return(0,M.jsx)(a,{message:`Loading dream state…`,tone:`loading`});let t=e.data;return t?(0,M.jsxs)(`div`,{className:`ct-dreams__card`,"data-testid":`dream-status-card`,children:[(0,M.jsxs)(`div`,{className:`ct-dreams__card-head`,children:[(0,M.jsx)(l,{tone:t.enabled?`ok`:`warn`,children:t.enabled?`cycle enabled`:`cycle paused`}),(0,M.jsxs)(`span`,{className:`ct-dreams__muted`,children:[t.questionCount,t.questionCountTruncated?`+`:``,` questions`]}),(0,M.jsxs)(`span`,{className:`ct-dreams__muted`,children:[t.candidateCount,t.candidateCountTruncated?`+`:``,` candidates`]})]}),(0,M.jsx)(`ul`,{className:`ct-dreams__stages`,children:t.stages.map(e=>(0,M.jsxs)(`li`,{children:[(0,M.jsx)(`span`,{children:e.name}),(0,M.jsx)(`span`,{className:`ct-dreams__muted`,children:e.lastCompleted?r(e.lastCompleted):`not yet run`})]},e.name))}),(t.activeCycles?.length??0)>0?(0,M.jsx)(`ul`,{className:`ct-dreams__cycles`,children:(t.activeCycles??[]).map(e=>(0,M.jsxs)(`li`,{children:[(0,M.jsx)(`span`,{className:`ct-mono`,children:e.cycleKey}),` at `,e.currentStage,`,`,` `,e.pendingPassCount,` pass(es) pending`,e.failedStages.length>0?`, failed: ${e.failedStages.join(`, `)}`:``]},e.cycleKey))}):null]}):null}function V(){let e=c(`dream.weights`,{},{refreshMs:f,invalidateOn:[`dreams.update`]});return e.error&&!e.data?(0,M.jsx)(a,{message:e.error,tone:`error`,testId:`dream-weights-error`}):e.loading&&!e.data?(0,M.jsx)(a,{message:`Loading weights…`,tone:`loading`}):(0,M.jsxs)(`div`,{className:`ct-dreams__card`,"data-testid":`dream-weights-card`,children:[(0,M.jsx)(d,{columns:[{key:`agent`,label:`Agent`,render:e=>e.agentId},{key:`rate`,label:`Success rate`,render:e=>`${Math.round(e.successRate*100)}%`},{key:`totals`,label:`Runs`,render:e=>`${e.totals.completed} completed, ${e.totals.failed} failed`},{key:`updated`,label:`Updated`,render:e=>r(e.updatedAt)}],rows:e.data?.weights??[],rowKey:e=>e.agentId,label:`Dream weights`,empty:(0,M.jsx)(a,{message:`No weights recorded yet.`,testId:`dream-weights-empty`})}),e.data?.truncated?(0,M.jsx)(`p`,{className:`ct-dreams__muted`,children:`Weights list truncated; showing the newest agents.`}):null]})}function H(){let e=c(`dream.candidates`,{limit:50},{refreshMs:f,invalidateOn:[`dreams.update`]});if(e.error&&!e.data)return(0,M.jsx)(a,{message:e.error,tone:`error`,testId:`dream-candidates-error`});if(e.loading&&!e.data)return(0,M.jsx)(a,{message:`Loading candidates…`,tone:`loading`});let t=e.data?.candidates??[];return(0,M.jsxs)(`div`,{className:`ct-dreams__card`,"data-testid":`dream-candidates-card`,children:[(0,M.jsx)(d,{columns:[{key:`signature`,label:`Signature`,mono:!0,render:e=>e.signature??`—`},{key:`task`,label:`Task`,render:e=>e.taskId??`—`},{key:`seen`,label:`First seen`,render:e=>e.firstSeenAt?r(e.firstSeenAt):`—`}],rows:t,rowKey:e=>JSON.stringify([e.signature,e.taskId,e.firstSeenAt]),label:`Dream candidates`,empty:(0,M.jsx)(a,{message:`No candidate questions.`,testId:`dream-candidates-empty`})}),e.data?.truncated?(0,M.jsxs)(`p`,{className:`ct-dreams__muted`,children:[`Showing the `,t.length,` newest of more candidates.`]}):null]})}function U(){let e=s(`tasks.status`),t=s(`tasks.runEvents`),n=s(`dream.status`),r=s(`dream.weights`),i=s(`dream.candidates`),a=s(`learning.overview`);return(0,M.jsxs)(`div`,{className:`ct-page`,"data-testid":`dreams-view`,children:[(0,M.jsx)(`header`,{className:`ct-page__head`,children:(0,M.jsxs)(`div`,{className:`ct-page__head-text`,children:[(0,M.jsx)(`h1`,{className:`ct-page__title`,children:`Dreams`}),(0,M.jsx)(`p`,{className:`ct-page__sub`,children:`Consolidation cycles, weights and run health.`})]})}),(0,M.jsxs)(u,{title:`Dream state`,testId:`dream-state-panel`,children:[n?(0,M.jsx)(B,{}):(0,M.jsx)(z,{method:`dream.status`,testId:`dream-status-disabled`}),r?(0,M.jsx)(V,{}):(0,M.jsx)(z,{method:`dream.weights`,testId:`dream-weights-disabled`}),i?(0,M.jsx)(H,{}):(0,M.jsx)(z,{method:`dream.candidates`,testId:`dream-candidates-disabled`})]}),e?(0,M.jsx)(R,{hasRunEvents:t}):(0,M.jsx)(u,{title:`Runs`,testId:`dreams-runs`,children:(0,M.jsx)(z,{method:`tasks.status`,testId:`dreams-runs-disabled`})}),e?(0,M.jsx)(P,{hasRunEvents:t,hasLearningOverview:a}):(0,M.jsx)(u,{title:`Consolidation health`,testId:`dreams-health`,children:(0,M.jsx)(z,{method:`tasks.status`,testId:`dreams-health-disabled`})})]})}export{U as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e}from"./format-
|
|
1
|
+
import{c as e}from"./format-CGs6a1G6.js";import{i as t,t as n}from"./links-DlVrQOFC.js";var r=e();function i({to:e,children:i,className:a,testId:o}){return(0,r.jsx)(`a`,{className:a?`ct-link ${a}`:`ct-link`,href:t(e.view,e.params),"data-testid":o,onClick:t=>{t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||(t.preventDefault(),n(e))},children:i})}export{i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e}from"./format-
|
|
1
|
+
import{c as e}from"./format-CGs6a1G6.js";var t=e();function n({value:e,options:n,onChange:r,label:i}){return(0,t.jsx)(`div`,{className:`ct-pills`,role:`group`,"aria-label":i,children:n.map(n=>{let i=n.value===e;return(0,t.jsxs)(`button`,{type:`button`,className:i?`ct-pill ct-pill--active`:`ct-pill`,"aria-pressed":i,"aria-label":n.label,disabled:n.disabled,onClick:()=>r(n.value),children:[n.label,n.count===void 0?null:(0,t.jsx)(`span`,{className:`ct-pill__count`,"aria-hidden":`true`,children:n.count})]},n.value)})})}export{n as t};
|