@deepseek-ai/dsh-client-ui-schedule 0.2.1-rc.4 → 0.2.2-alpha.2

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/lib/client.js CHANGED
@@ -139,92 +139,31 @@ window.__ModuleLoader__.load({
139
139
  };
140
140
  }
141
141
  //#endregion
142
- //#region lib/types/client/DeleteToast.js
142
+ //#region lib/types/client/clear-ended.js
143
143
  /**
144
- * Create the one deletion-outcome store the overlay entry shows.
145
- * @returns the observable notice with its report and dismiss actions.
146
- */
147
- function createDeleteToastSource() {
148
- let state = null;
149
- let seq = 0;
150
- const listeners = /* @__PURE__ */ new Set();
151
- const publish = (next) => {
152
- state = next;
153
- for (const listener of listeners) listener();
154
- };
155
- return {
156
- hooks: { toast: {
157
- getSnapshot: () => state,
158
- subscribe(listener) {
159
- listeners.add(listener);
160
- return () => {
161
- listeners.delete(listener);
162
- };
163
- }
164
- } },
165
- report: (outcome) => {
166
- if (outcome === "pending") return;
167
- publish({
168
- kind: outcome === "deleted" ? "deleted" : "deleteFailed",
169
- seq: ++seq
170
- });
171
- },
172
- dismiss: () => {
173
- publish(null);
174
- }
175
- };
176
- }
177
- /**
178
- * Render the current deletion notice: a success banner for a confirmed
179
- * deletion, a warning for one that could not be confirmed, or nothing.
180
- * @param props - the notice hook, its dismissal, and the locale seat.
181
- * @returns the banner on display, or null.
182
- */
183
- function ScheduleDeleteToast({ useToast, dismiss, t }) {
184
- const toast = useToast((current) => current);
185
- if (toast === null) return null;
186
- return toast.kind === "deleted" ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
187
- text: t("toast.deleted"),
188
- tone: "success",
189
- onDone: dismiss
190
- }, `schedule-delete-${String(toast.seq)}`) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
191
- text: t("toast.deleteFailed"),
192
- icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {}),
193
- onDone: dismiss
194
- }, `schedule-delete-${String(toast.seq)}`);
195
- }
196
- //#endregion
197
- //#region lib/types/client/definition.js
198
- /** This implementation's identity in the tab system: the key its body and title register under. */
199
- const SCHEDULE_TASK_ID = "@deepseek-ai/dsh-client-ui-schedule/task";
200
- /** The tab kind this package owns. */
201
- const SCHEDULE_TASK_KIND = "scheduleTask";
202
- /**
203
- * The task type's registry definition.
144
+ * Create the management page's bulk removal callback.
204
145
  *
205
- * The chip text captured here is a constant because an open names only a kind;
206
- * `ScheduleTaskTabTitle` replaces it with the shown task's stored title.
207
- * @param t - namespace-bound translate, read fresh on every title call.
208
- * @returns the definition to register.
209
- */
210
- function scheduleTaskDefinition(t) {
211
- return {
212
- id: SCHEDULE_TASK_ID,
213
- kind: SCHEDULE_TASK_KIND,
214
- priority: "builtin",
215
- title: () => t("detail.label")
216
- };
217
- }
218
- /**
219
- * Narrow one tab's navigation parameters to this type's task binding.
220
- * @param params - the tab record's navigation parameters.
221
- * @returns the Session and task the tab shows, or undefined for another type's parameters.
222
- */
223
- function scheduleTaskParams(params) {
224
- if (params === void 0 || !("sessionId" in params) || !("id" in params)) return void 0;
225
- return {
226
- sessionId: params.sessionId,
227
- id: params.id
146
+ * The call names no task ids: the Host owns which rows are ended, and a
147
+ * delivery can have moved the catalog between the confirmation and the
148
+ * request. The readback follows the acknowledged removal and supersedes a read
149
+ * issued before it, so the list follows the removal rather than a stale read.
150
+ * @param deps - Remote removal and its catalog readback.
151
+ * @returns a callback that resolves once the settled outcome is available.
152
+ */
153
+ function createClearEnded(deps) {
154
+ return async () => {
155
+ let result;
156
+ try {
157
+ result = await deps.removeInactive();
158
+ } catch (_error) {
159
+ return { cleared: false };
160
+ }
161
+ if (!result.ok) return { cleared: false };
162
+ await deps.refresh();
163
+ return {
164
+ cleared: true,
165
+ count: result.value.deleted
166
+ };
228
167
  };
229
168
  }
230
169
  //#endregion
@@ -870,6 +809,125 @@ window.__ModuleLoader__.load({
870
809
  throw new Error(`unreachable variant${context ? ` in ${context}` : ""}: ${rendered}`);
871
810
  }
872
811
  //#endregion
812
+ //#region lib/types/client/DeleteToast.js
813
+ /**
814
+ * Create the one deletion-outcome store the overlay entry shows.
815
+ * @returns the observable notice with its report and dismiss actions.
816
+ */
817
+ function createDeleteToastSource() {
818
+ let state = null;
819
+ let seq = 0;
820
+ const listeners = /* @__PURE__ */ new Set();
821
+ const publish = (next) => {
822
+ state = next;
823
+ for (const listener of listeners) listener();
824
+ };
825
+ return {
826
+ hooks: { toast: {
827
+ getSnapshot: () => state,
828
+ subscribe(listener) {
829
+ listeners.add(listener);
830
+ return () => {
831
+ listeners.delete(listener);
832
+ };
833
+ }
834
+ } },
835
+ report: (outcome) => {
836
+ if (outcome === "pending") return;
837
+ publish({
838
+ kind: outcome === "deleted" ? "deleted" : "deleteFailed",
839
+ seq: ++seq
840
+ });
841
+ },
842
+ reportClear: (outcome) => {
843
+ publish(outcome.cleared ? {
844
+ kind: "cleared",
845
+ count: outcome.count,
846
+ seq: ++seq
847
+ } : {
848
+ kind: "clearFailed",
849
+ seq: ++seq
850
+ });
851
+ },
852
+ dismiss: () => {
853
+ publish(null);
854
+ }
855
+ };
856
+ }
857
+ /**
858
+ * Render the current deletion notice: a success banner for a confirmed deletion
859
+ * or settled bulk removal, a warning for one that could not be confirmed, or
860
+ * nothing.
861
+ * @param props - the notice hook, its dismissal, and the locale seat.
862
+ * @returns the banner on display, or null.
863
+ */
864
+ function ScheduleDeleteToast({ useToast, dismiss, t }) {
865
+ const toast = useToast((current) => current);
866
+ if (toast === null) return null;
867
+ const key = `schedule-delete-${String(toast.seq)}`;
868
+ switch (toast.kind) {
869
+ case "deleted": return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
870
+ text: t("toast.deleted"),
871
+ tone: "success",
872
+ onDone: dismiss
873
+ }, key);
874
+ case "deleteFailed": return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
875
+ text: t("toast.deleteFailed"),
876
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {}),
877
+ onDone: dismiss
878
+ }, key);
879
+ case "cleared": return toast.count === 0 ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
880
+ text: t("toast.clearedNone"),
881
+ onDone: dismiss
882
+ }, key) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
883
+ text: t(toast.count === 1 ? "toast.cleared.one" : "toast.cleared.other", { count: toast.count }),
884
+ tone: "success",
885
+ onDone: dismiss
886
+ }, key);
887
+ case "clearFailed": return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
888
+ text: t("toast.clearFailed"),
889
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {}),
890
+ onDone: dismiss
891
+ }, key);
892
+ /* v8 ignore next -- the store publishes only the union's members, so the default holds no reachable statement. */
893
+ default: return assertNever(toast);
894
+ }
895
+ }
896
+ //#endregion
897
+ //#region lib/types/client/definition.js
898
+ /** This implementation's identity in the tab system: the key its body and title register under. */
899
+ const SCHEDULE_TASK_ID = "@deepseek-ai/dsh-client-ui-schedule/task";
900
+ /** The tab kind this package owns. */
901
+ const SCHEDULE_TASK_KIND = "scheduleTask";
902
+ /**
903
+ * The task type's registry definition.
904
+ *
905
+ * The chip text captured here is a constant because an open names only a kind;
906
+ * `ScheduleTaskTabTitle` replaces it with the shown task's stored title.
907
+ * @param t - namespace-bound translate, read fresh on every title call.
908
+ * @returns the definition to register.
909
+ */
910
+ function scheduleTaskDefinition(t) {
911
+ return {
912
+ id: SCHEDULE_TASK_ID,
913
+ kind: SCHEDULE_TASK_KIND,
914
+ priority: "builtin",
915
+ title: () => t("detail.label")
916
+ };
917
+ }
918
+ /**
919
+ * Narrow one tab's navigation parameters to this type's task binding.
920
+ * @param params - the tab record's navigation parameters.
921
+ * @returns the Session and task the tab shows, or undefined for another type's parameters.
922
+ */
923
+ function scheduleTaskParams(params) {
924
+ if (params === void 0 || !("sessionId" in params) || !("id" in params)) return void 0;
925
+ return {
926
+ sessionId: params.sessionId,
927
+ id: params.id
928
+ };
929
+ }
930
+ //#endregion
873
931
  //#region lib/types/client/task-cron.js
874
932
  /**
875
933
  * Client-side parsing, description, and structured shapes of the five-field
@@ -1781,7 +1839,7 @@ window.__ModuleLoader__.load({
1781
1839
  }
1782
1840
  //#endregion
1783
1841
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-schedule/src/client/ScheduleCatalogAction.module.css.mjs
1784
- const css$8 = ".-\\34 LnlG_root{margin-left:4px;position:relative}.-\\34 LnlG_trigger{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.-\\34 LnlG_trigger:hover,.-\\34 LnlG_trigger:focus-visible{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover)}.-\\34 LnlG_trigger svg{flex:none}.-\\34 LnlG_menu{z-index:100;box-sizing:border-box;background:var(--dsw-specific-menu);width:336px;max-width:min(336px,100vw - 32px);max-height:min(420px,100vh - 140px);backdrop-filter:var(--dsw-menu-backdrop-filter);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);box-shadow:var(--dsw-elevation-prominent);border:0;border-radius:16px;flex-direction:column;gap:1px;margin:0;padding:3px;list-style:none;display:flex;position:fixed;overflow:auto}.-\\34 LnlG_row{box-sizing:border-box;width:100%;min-height:48px;color:var(--dsw-alias-label-primary);border-radius:10px;flex-shrink:0;align-items:start;gap:2px;padding:10px 12px;display:flex}.-\\34 LnlG_rowTask{position:relative}.-\\34 LnlG_rowTask:hover{background:var(--dsw-alias-interactive-bg-hover)}.-\\34 LnlG_rowOverdue,.-\\34 LnlG_rowOverdue:hover{background:var(--dsw-alias-state-warn-tertiary)}.-\\34 LnlG_body{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.-\\34 LnlG_title{overflow-wrap:anywhere;white-space:normal;font-size:13px;line-height:18px}.-\\34 LnlG_openButton{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;display:block}.-\\34 LnlG_openButton:after{content:\"\";border-radius:10px;position:absolute;inset:0}.-\\34 LnlG_openButton:focus-visible{outline:none}.-\\34 LnlG_openButton:focus-visible:after{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.-\\34 LnlG_metadata,.-\\34 LnlG_nextRun{min-width:0;color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:4px;font-size:10px;line-height:15px;display:flex}.-\\34 LnlG_metadataOverdue{color:var(--dsw-alias-state-warn-label)}.-\\34 LnlG_nextRunRelative{overflow-wrap:anywhere;min-width:0}.-\\34 LnlG_deleteButton{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.-\\34 LnlG_deleteButton:hover,.-\\34 LnlG_deleteButton:focus-visible{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.-\\34 LnlG_deleteButton:disabled{cursor:wait}.-\\34 LnlG_trigger[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}";
1842
+ const css$8 = ".-\\34 LnlG_root{margin-left:4px;position:relative}.-\\34 LnlG_trigger{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.-\\34 LnlG_trigger:focus-visible{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover)}@media (hover:hover){.-\\34 LnlG_trigger:hover{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover)}}.-\\34 LnlG_trigger svg{flex:none}.-\\34 LnlG_menu{z-index:100;box-sizing:border-box;background:var(--dsw-specific-menu);width:336px;max-width:min(336px,100vw - 32px);max-height:min(420px,100vh - 140px);backdrop-filter:var(--dsw-menu-backdrop-filter);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);box-shadow:var(--dsw-elevation-prominent);border:0;border-radius:16px;flex-direction:column;gap:1px;margin:0;padding:3px;list-style:none;display:flex;position:fixed;overflow:auto}.-\\34 LnlG_row{box-sizing:border-box;width:100%;min-height:48px;color:var(--dsw-alias-label-primary);border-radius:10px;flex-shrink:0;align-items:start;gap:2px;padding:10px 12px;display:flex}.-\\34 LnlG_rowTask{position:relative}@media (hover:hover){.-\\34 LnlG_rowTask:hover{background:var(--dsw-alias-interactive-bg-hover)}}.-\\34 LnlG_rowOverdue{background:var(--dsw-alias-state-warn-tertiary)}@media (hover:hover){.-\\34 LnlG_rowOverdue:hover{background:var(--dsw-alias-state-warn-tertiary)}}.-\\34 LnlG_body{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.-\\34 LnlG_title{overflow-wrap:anywhere;white-space:normal;font-size:13px;line-height:18px}.-\\34 LnlG_openButton{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;display:block}.-\\34 LnlG_openButton:after{content:\"\";border-radius:10px;position:absolute;inset:0}.-\\34 LnlG_openButton:focus-visible{outline:none}.-\\34 LnlG_openButton:focus-visible:after{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.-\\34 LnlG_metadata,.-\\34 LnlG_nextRun{min-width:0;color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:4px;font-size:10px;line-height:15px;display:flex}.-\\34 LnlG_metadataOverdue{color:var(--dsw-alias-state-warn-label)}.-\\34 LnlG_nextRunRelative{overflow-wrap:anywhere;min-width:0}.-\\34 LnlG_deleteButton{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.-\\34 LnlG_deleteButton:focus-visible{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}@media (hover:hover){.-\\34 LnlG_deleteButton:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}}.-\\34 LnlG_deleteButton:disabled{cursor:wait}.-\\34 LnlG_trigger[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}";
1785
1843
  const tagId$8 = "@deepseek-ai/dsh-client-ui-schedule/ScheduleCatalogAction.module.css";
1786
1844
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
1787
1845
  const tag = document.createElement("style");
@@ -1814,8 +1872,16 @@ window.__ModuleLoader__.load({
1814
1872
  left: 0,
1815
1873
  top: 0
1816
1874
  };
1817
- /** Current-Session reminder catalog with durable deletion. */
1818
- function ScheduleCatalogAction({ useSession, useCatalog, onDelete, onRetry, openTaskDetail, t }) {
1875
+ /**
1876
+ * Current-Session reminder catalog with durable deletion, rendered only while
1877
+ * the current Peer may list this Session's reminders.
1878
+ * @param props - the Session seats, the injected catalog and verbs, and localized copy.
1879
+ * @returns the reminder catalog action, or nothing without access.
1880
+ */
1881
+ function ScheduleCatalogAction(props) {
1882
+ return props.useAccess("schedule/list") ? (0, react_jsx_runtime.jsx)(SessionScheduleCatalog, { ...props }) : null;
1883
+ }
1884
+ function SessionScheduleCatalog({ useSession, useCatalog, onDelete, onRetry, openTaskDetail, t }) {
1819
1885
  const openState = useSession((snapshot) => snapshot.openState);
1820
1886
  const { records, status, deleting } = useCatalog((value) => value);
1821
1887
  const visible = openState === "open";
@@ -2104,7 +2170,7 @@ window.__ModuleLoader__.load({
2104
2170
  }
2105
2171
  //#endregion
2106
2172
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-schedule/src/client/ScheduleCreateCard.module.css.mjs
2107
- const css$7 = ".Ww4dvW_card{--card-fill:var(--dsw-static-neutral-50);--card-hover:var(--dsw-static-neutral-100);box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-lg);background:var(--card-fill);width:100%;color:var(--dsw-alias-label-primary);flex-direction:column;gap:6px;padding:8px 10px;transition:background-color .12s;display:flex;position:relative;overflow:hidden}body[data-ds-dark-theme] .Ww4dvW_card{--card-fill:var(--dsw-static-neutral-850);--card-hover:var(--dsw-static-neutral-800)}.Ww4dvW_card:has(.Ww4dvW_cardOpen):hover{background:var(--card-hover)}.Ww4dvW_cardOpen{z-index:1;border-radius:inherit;cursor:pointer;background:0 0;border:0;width:100%;padding:0;position:absolute;inset:0}.Ww4dvW_cardOpen:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}.Ww4dvW_row{z-index:2;pointer-events:none;align-items:center;gap:10px;min-width:0;min-height:44px;display:flex;position:relative}.Ww4dvW_leading{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-static-neutral-00) 50%, transparent);width:40px;height:40px;color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;place-items:center;display:grid}body[data-ds-dark-theme] .Ww4dvW_leading{background:color-mix(in srgb, var(--dsw-static-neutral-00) 5%, transparent)}.Ww4dvW_leading svg{flex:none}.Ww4dvW_body{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.Ww4dvW_title{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.Ww4dvW_frequency{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:16px;overflow:hidden}.Ww4dvW_status{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:20px;overflow:hidden}.Ww4dvW_openButton{pointer-events:auto;flex:none}.Ww4dvW_fallback{z-index:2;color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:11px;line-height:16px;position:relative;overflow:hidden}";
2173
+ const css$7 = ".Ww4dvW_card{--card-fill:var(--dsw-static-neutral-50);--card-hover:var(--dsw-static-neutral-100);box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-lg);background:var(--card-fill);width:100%;color:var(--dsw-alias-label-primary);flex-direction:column;gap:6px;padding:8px 10px;transition:background-color .12s;display:flex;position:relative;overflow:hidden}body[data-ds-dark-theme] .Ww4dvW_card{--card-fill:var(--dsw-static-neutral-850);--card-hover:var(--dsw-static-neutral-800)}@media (hover:hover){.Ww4dvW_card:has(.Ww4dvW_cardOpen):hover{background:var(--card-hover)}}.Ww4dvW_cardOpen{z-index:1;border-radius:inherit;cursor:pointer;background:0 0;border:0;width:100%;padding:0;position:absolute;inset:0}.Ww4dvW_cardOpen:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}.Ww4dvW_row{z-index:2;pointer-events:none;align-items:center;gap:10px;min-width:0;min-height:44px;display:flex;position:relative}.Ww4dvW_leading{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-static-neutral-00) 50%, transparent);width:40px;height:40px;color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;place-items:center;display:grid}body[data-ds-dark-theme] .Ww4dvW_leading{background:color-mix(in srgb, var(--dsw-static-neutral-00) 5%, transparent)}.Ww4dvW_leading svg{flex:none}.Ww4dvW_body{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.Ww4dvW_title{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.Ww4dvW_frequency{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:16px;overflow:hidden}.Ww4dvW_status{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:20px;overflow:hidden}.Ww4dvW_openButton{pointer-events:auto;flex:none}.Ww4dvW_fallback{z-index:2;color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:11px;line-height:16px;position:relative;overflow:hidden}";
2108
2174
  const tagId$7 = "@deepseek-ai/dsh-client-ui-schedule/ScheduleCreateCard.module.css";
2109
2175
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) {
2110
2176
  const tag = document.createElement("style");
@@ -2430,7 +2496,7 @@ window.__ModuleLoader__.load({
2430
2496
  }
2431
2497
  //#endregion
2432
2498
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-schedule/src/client/TaskManagerPage.module.css.mjs
2433
- const css$5 = ".t-XoWW_page{width:100%;min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font-size:14px;line-height:1.6;display:flex;overflow:hidden}.t-XoWW_listPane{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.t-XoWW_pageScroll{scrollbar-gutter:stable;--dsh-scrollbar-width:9px;--dsh-scrollbar-thumb-border:2px;flex:1;min-height:0;overflow:auto}.t-XoWW_pageContent{max-width:960px;margin:0 auto;padding:0 clamp(24px,4vw,48px) 48px}.t-XoWW_pageHeading{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;padding-top:28px;display:flex}[data-platform=darwin] .t-XoWW_pageHeading{padding-top:calc(28px + var(--dsh-frame-top-clearance,0px))}.t-XoWW_pageHeading h1{flex:0 auto;min-width:0;max-width:100%;margin:0;font-size:20px;font-weight:500;line-height:28px}.t-XoWW_creationActions{white-space:nowrap;flex:none;align-items:center;gap:16px;display:flex}.t-XoWW_newButton{border-radius:16px;height:32px;padding:0 12px;font-size:13px;line-height:20px}.t-XoWW_filters{flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:14px;display:flex}.t-XoWW_filterTabs{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.t-XoWW_filterTab{height:28px;color:var(--dsw-alias-label-tertiary);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:14px;flex:none;align-items:center;padding:0 10px;font-size:14px;line-height:22px;display:inline-flex}.t-XoWW_filterTab:hover{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_filterTabActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.t-XoWW_searchField{border:.5px solid var(--dsw-alias-border-l3);height:36px;color:var(--dsw-alias-label-tertiary);border-radius:12px;align-items:center;margin:0 0 16px;padding:0 10px;transition:border-color .15s;display:flex}.t-XoWW_searchField:hover{border-color:var(--dsw-alias-border-l2)}.t-XoWW_searchField:focus-within{border-color:var(--dsw-alias-state-business-primary)}.t-XoWW_searchField>:first-child{background:0 0;border:0;border-radius:0;flex:1;min-width:0;height:100%;padding:0}.t-XoWW_searchField>:first-child:focus-within{border-color:#0000}.t-XoWW_searchField>:first-child svg{width:14px;height:14px}.t-XoWW_searchField input::placeholder{color:var(--dsw-alias-label-caption)}.t-XoWW_searchField input:focus-visible{outline:none}.t-XoWW_searchField input::-webkit-search-cancel-button{display:none}.t-XoWW_searchClear{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);flex:none;margin-right:-6px;padding:0}.t-XoWW_searchClear svg{width:14px;height:14px}.t-XoWW_list{display:block}.t-XoWW_listRows{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.t-XoWW_row{text-align:left;white-space:normal;border-radius:12px;justify-content:flex-start;align-items:flex-start;gap:12px;width:100%;height:auto;padding:8px;display:flex}.t-XoWW_row:hover{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_rowGlyph{width:16px;height:20px;color:var(--dsw-alias-label-tertiary);flex:none;margin-top:2px}.t-XoWW_rowContent{flex-direction:column;flex:1;min-width:0;display:flex}.t-XoWW_rowTitle{text-overflow:ellipsis;white-space:nowrap;font-weight:500;line-height:23px;overflow:hidden}.t-XoWW_rowSummary{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin-top:2px;font-size:13px;line-height:21px;display:block}.t-XoWW_metadata{color:inherit;overflow-wrap:anywhere;font-size:13px;line-height:21px}.t-XoWW_metadata+.t-XoWW_metadata:before{content:\" · \";padding:0 2px}.t-XoWW_selectedRow{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_endedRow .t-XoWW_rowTitle{color:var(--dsw-alias-label-tertiary)}.t-XoWW_endedRow .t-XoWW_rowSummary{color:var(--dsw-alias-label-caption)}.t-XoWW_endedRow:hover .t-XoWW_rowTitle,.t-XoWW_endedRow.t-XoWW_selectedRow .t-XoWW_rowTitle{color:inherit}.t-XoWW_endedRow:hover .t-XoWW_rowSummary,.t-XoWW_endedRow.t-XoWW_selectedRow .t-XoWW_rowSummary{color:var(--dsw-alias-label-tertiary)}.t-XoWW_notice{background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-secondary);border-radius:10px;flex-wrap:wrap;align-items:flex-start;gap:9px;margin:0 0 20px;padding:12px 14px;font-size:12px;line-height:20px;display:flex}.t-XoWW_notice p{flex:1;margin:0}.t-XoWW_empty{text-align:center;color:var(--dsw-alias-label-tertiary);flex-direction:column;align-items:center;padding:48px 20px;font-size:14px;display:flex}.t-XoWW_empty h2,.t-XoWW_empty h3,.t-XoWW_empty .t-XoWW_emptyTitle,.t-XoWW_empty p{margin:0}.t-XoWW_empty h2,.t-XoWW_empty h3,.t-XoWW_empty .t-XoWW_emptyTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:8px;font-size:14px;font-weight:400;line-height:1.6}.t-XoWW_emptyGlyph{color:var(--dsw-alias-label-caption);margin-bottom:12px}.t-XoWW_emptyAction{margin-top:16px}.t-XoWW_detail{--detail-gutter:24px;border-left:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-base);flex-direction:column;flex:0 0 47%;min-width:0;min-height:0;display:flex;position:relative}.t-XoWW_detail:focus-visible{outline:none}.t-XoWW_tabBody{flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex}.t-XoWW_tabBody>.t-XoWW_detail{border-left:0;flex:auto}.t-XoWW_tabBody>.t-XoWW_empty{flex:auto;justify-content:center}.t-XoWW_tabBody>.t-XoWW_detail .t-XoWW_detailTabsBar{height:37px;min-height:37px}.t-XoWW_tabBody>.t-XoWW_detail .t-XoWW_detailTab{padding-bottom:9px}.t-XoWW_tabBody>.t-XoWW_detail .t-XoWW_detailActions{margin-right:calc(6px - var(--detail-gutter))}.t-XoWW_detailHeader{align-items:flex-start;gap:10px;margin-bottom:4px;display:flex}.t-XoWW_editName{width:100%;min-width:0;min-height:32px;color:var(--dsw-alias-label-primary);background:0 0;border:0;outline:0;flex:1;padding:0;font-size:20px;font-weight:500;line-height:28px}.t-XoWW_editName:hover{box-shadow:0 1px var(--dsw-alias-border-l3)}.t-XoWW_editName:focus{box-shadow:0 1px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}.t-XoWW_readonlyName{overflow-wrap:anywhere;flex:1;min-width:0;margin:0;padding:2px 0;font-size:20px;font-weight:500;line-height:28px}.t-XoWW_nextRun{min-height:20px;color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;margin-bottom:20px;font-size:13px;line-height:20px;display:flex}.t-XoWW_nextRun p{overflow-wrap:anywhere;min-width:0;margin:0}.t-XoWW_nextRunRelative{color:inherit}.t-XoWW_tabTitleIcon{color:var(--dsw-alias-label-secondary);flex:none}.t-XoWW_detailTabsBar{height:44px;min-height:44px;padding:0 var(--detail-gutter);border-bottom:.5px solid var(--dsw-alias-border-l3);flex-shrink:0;justify-content:space-between;align-items:center;gap:20px;display:flex}.t-XoWW_detailTabs{scrollbar-width:none;flex:auto;align-self:flex-end;gap:36px;min-width:0;margin-bottom:-1px;padding-bottom:1px;display:flex;overflow-x:auto}.t-XoWW_detailTabs::-webkit-scrollbar{display:none}.t-XoWW_detailActions{flex:none;align-items:center;margin-right:-8px}.t-XoWW_detailIconButton{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);flex:none;padding:0}.t-XoWW_detailTab{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;flex:none;padding:0 0 13px;font-size:13px;font-weight:500;line-height:16px;position:relative}.t-XoWW_detailTab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:-1px;left:0;right:0}.t-XoWW_detailTab[aria-selected=true]{color:var(--dsw-alias-state-business-primary)}.t-XoWW_detailTab[aria-selected=true]:after{background:var(--dsw-alias-state-business-primary)}.t-XoWW_detailScroll{min-height:0;padding:24px var(--detail-gutter) 28px;scrollbar-gutter:stable;--dsh-scrollbar-width:9px;--dsh-scrollbar-thumb-border:2px;flex:1;overflow:auto}.t-XoWW_detailRecords{scrollbar-gutter:auto;flex-direction:column;padding:0;display:flex;overflow:hidden}.t-XoWW_detailRecords>.t-XoWW_notice{margin:24px var(--detail-gutter) 0}.t-XoWW_recordsPanel:not([hidden]),.t-XoWW_deliveryHistory{flex-direction:column;flex:1;min-height:0;display:flex}.t-XoWW_retentionEnd{padding:0 var(--detail-gutter) 16px;color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:20px}.t-XoWW_retentionLine{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.t-XoWW_retentionInfo{width:24px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:5px;display:inline-flex}.t-XoWW_retentionInfo:hover{color:var(--dsw-alias-label-primary)}.t-XoWW_retentionInfo:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.t-XoWW_retentionRule{background:var(--dsw-alias-bg-layer-1);border-radius:8px;margin-top:12px;padding:12px 14px}.t-XoWW_retentionRule p{margin:0}.t-XoWW_retentionRule p+p{margin-top:6px}.t-XoWW_ruleCard{margin-top:28px}.t-XoWW_ruleCard h3{color:var(--dsw-alias-label-tertiary);margin:0 0 8px 10px;font-size:13px;font-weight:400;line-height:20px}.t-XoWW_ruleRows{border:.5px solid var(--dsw-alias-border-l3);border-radius:16px;flex-direction:column;padding:0 12px;display:flex}.t-XoWW_menuGuard{display:contents}.t-XoWW_zoneMenu.t-XoWW_zoneMenu{height:min(420px,100dvh - 48px);max-height:min(420px,100dvh - 48px)}.t-XoWW_zoneMenu [role=separator]{background:var(--dsw-alias-border-l3);height:.5px;margin:6px 4px}.t-XoWW_ruleRow,.t-XoWW_ruleRowMenu{border-bottom:.5px solid var(--dsw-alias-border-l3);width:100%;display:flex}.t-XoWW_ruleRow{justify-content:space-between;align-items:center;gap:12px;min-height:48px}.t-XoWW_ruleRows>:last-child,.t-XoWW_ruleRows>:last-child>.t-XoWW_ruleRowMenu{border-bottom:0}.t-XoWW_ruleLabel{color:var(--dsw-alias-label-primary);flex:none;font-size:14px;line-height:1.6}.t-XoWW_ruleControl{margin-right:0}.t-XoWW_ruleRows .t-XoWW_ruleControl:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.t-XoWW_ruleValue{width:100%;min-height:48px;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:none;justify-content:space-between;align-items:center;gap:12px;margin:0;padding:0;font-size:14px;line-height:1.6;display:flex}.t-XoWW_ruleValueFace{border-radius:18px;flex:0 auto;align-items:center;gap:6px;min-width:0;min-height:32px;padding:0 8px;transition:background .15s;display:flex}.t-XoWW_ruleValue:not(:disabled):hover .t-XoWW_ruleValueFace{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_ruleRows .t-XoWW_ruleValue:focus-visible{outline:none}.t-XoWW_ruleValue:focus-visible .t-XoWW_ruleValueFace{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.t-XoWW_ruleValueFace>svg{color:var(--dsw-alias-label-tertiary);flex:none}.t-XoWW_ruleValue:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.t-XoWW_ruleCurrent{text-align:right;text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}.t-XoWW_zoneSearch{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;outline:none;padding:6px 8px;font-size:13px;line-height:20px}.t-XoWW_zoneSearch:focus{border-color:var(--dsw-alias-state-business-primary)}.t-XoWW_ruleWeekdays{flex-wrap:wrap;justify-content:flex-end;gap:4px;padding:6px 0;display:flex}.t-XoWW_ruleMonthDays{grid-template-columns:repeat(7,minmax(36px,max-content));justify-content:flex-end;gap:4px;padding:6px 0;display:grid}.t-XoWW_ruleMonthDays>*{justify-content:center;justify-self:stretch}.t-XoWW_ruleInput{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:right;background:0 0;border:none;border-radius:18px;flex:0 58%;margin-right:0;padding:5px 8px;font-size:14px;transition:background .15s}.t-XoWW_ruleInput:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_ruleInput:disabled{color:var(--dsw-alias-label-tertiary)}.t-XoWW_ruleInterval{flex:none;align-items:center;gap:8px;min-width:0;display:flex}.t-XoWW_ruleIntervalStepper{background:var(--dsw-alias-bg-module-platform);border-radius:18px;justify-content:center;align-items:center;min-width:72px;height:36px;display:inline-flex;position:relative}.t-XoWW_ruleIntervalInput{box-sizing:border-box;width:calc(var(--interval-digits,1) * 1ch + 52px);appearance:textfield;border-radius:inherit;font-variant-numeric:tabular-nums;text-align:center;flex:0 auto;min-width:72px;height:100%;padding:0 26px}.t-XoWW_ruleIntervalInput::-webkit-outer-spin-button,.t-XoWW_ruleIntervalInput::-webkit-inner-spin-button{appearance:none;margin:0}.t-XoWW_ruleIntervalInput:not(:disabled):hover{background:0 0}.t-XoWW_ruleRows .t-XoWW_ruleIntervalInput:focus-visible{outline:none}.t-XoWW_ruleIntervalArrows{opacity:0;flex-direction:column;gap:2px;display:flex;position:absolute;right:8px}.t-XoWW_ruleIntervalStepper:hover .t-XoWW_ruleIntervalArrows,.t-XoWW_ruleIntervalStepper:focus-within .t-XoWW_ruleIntervalArrows{opacity:1}.t-XoWW_ruleIntervalArrow{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 75%, transparent);width:17px;height:12px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:3px;justify-content:center;align-items:center;padding:0;display:inline-flex}.t-XoWW_ruleIntervalArrow:hover:not(:disabled){background:var(--dsw-alias-bg-layer-1)}.t-XoWW_ruleIntervalArrow:disabled{color:var(--dsw-alias-label-caption);cursor:default}.t-XoWW_ruleIntervalUnit{color:var(--dsw-alias-label-primary);flex:none;font-size:14px}.t-XoWW_pickerTrigger{cursor:pointer;flex:0 auto;justify-content:flex-end;align-items:center;gap:6px;display:inline-flex}.t-XoWW_pickerTrigger:disabled{cursor:default}.t-XoWW_pickerIcon{color:var(--dsw-alias-label-tertiary);flex:none}.t-XoWW_ruleHint{color:var(--dsw-alias-label-tertiary);margin:8px 0 0 10px;font-size:13px;line-height:1.6}.t-XoWW_ruleHintError{color:var(--dsw-alias-state-error-primary)}.t-XoWW_instruction{box-sizing:border-box;field-sizing:content;border:.5px solid var(--dsw-alias-border-l3);background:var(--dsw-alias-bg-base);width:100%;max-width:100%;min-height:112px;max-height:160px;color:var(--dsw-alias-label-primary);font:inherit;resize:none;--dsh-scrollbar-width:9px;--dsh-scrollbar-thumb-border:2px;--dsh-scrollbar-track-margin:12px;border-radius:16px;outline:0;margin:0;padding:12px;font-size:14px;line-height:24px;transition:border-color .15s;display:block}.t-XoWW_instruction:hover{border-color:var(--dsw-alias-border-l2)}.t-XoWW_instruction:focus{border-color:var(--dsw-alias-state-business-primary)}.t-XoWW_readonlyPrompt{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:14px;line-height:24px}.t-XoWW_delivery{border-radius:8px;align-items:flex-start;gap:12px;margin:0 -8px;padding:14px 8px;font-size:14px;line-height:22px;display:flex;position:relative}.t-XoWW_delivery:first-of-type{padding-top:0}.t-XoWW_delivery:before,.t-XoWW_delivery:after{background:var(--dsw-alias-border-l3);width:.5px;position:absolute;left:15.75px}.t-XoWW_delivery:not(:first-of-type):before{content:\"\";height:14px;top:0}.t-XoWW_delivery:not(:last-of-type):after{content:\"\";top:42px;bottom:0}.t-XoWW_delivery:first-of-type:not(:last-of-type):after{top:28px}.t-XoWW_deliveryGlyph{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:6px}.t-XoWW_deliveryBody{flex:1;min-width:0;padding:2px 0}.t-XoWW_deliveryHead{align-items:center;gap:10px;display:flex}.t-XoWW_deliveryTime{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px;display:block}.t-XoWW_confirmTitle{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.t-XoWW_savedPrompt{-webkit-line-clamp:2;line-clamp:2;color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;overflow-wrap:anywhere;-webkit-box-orient:vertical;margin:6px 0 0;font-size:13px;line-height:22px;display:-webkit-box;overflow:hidden}.t-XoWW_savedPrompt[data-expanded]{-webkit-line-clamp:none;line-clamp:none;display:block}.t-XoWW_savedPromptToggle{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:2px;margin:2px 0 0 -6px;padding:1px 6px;font-size:12px;line-height:20px;display:inline-flex}.t-XoWW_savedPromptToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_savedPromptToggle:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.t-XoWW_detailActions,.t-XoWW_confirmActions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.t-XoWW_detailHeader{flex-shrink:0}.t-XoWW_detailContext{flex:none;align-items:center;min-width:0;max-width:200px;display:flex}.t-XoWW_detailContext:has(>button:disabled){cursor:not-allowed}.t-XoWW_detailContext>button:disabled{pointer-events:none}.t-XoWW_saveFooter{padding:20px var(--detail-gutter);border-top:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-base);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;display:flex}.t-XoWW_saveFooter>button{height:32px;font-size:13px}.t-XoWW_saveFooter>:last-child{margin-right:-8px}.t-XoWW_saveNotice{color:var(--dsw-alias-label-tertiary);margin-right:auto;font-size:12px}.t-XoWW_saveFailure{padding:12px var(--detail-gutter) 0;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-state-error-primary);flex-shrink:0;margin:0;font-size:12px;line-height:1.6}.t-XoWW_linkedSession{text-align:left;border:0;border-radius:14px;flex:0 auto;align-items:center;gap:6px;min-width:0;max-width:100%;height:28px;padding:0 8px;display:flex}.t-XoWW_linkedSession:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.t-XoWW_detailNotice{padding:0 var(--detail-gutter) 6px;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;background:var(--dsw-alias-bg-base);flex-shrink:0;margin:0;font-size:12px}.t-XoWW_linkedSessionLabel{color:var(--dsw-alias-label-secondary);flex-shrink:0;font-size:13px}.t-XoWW_linkedSessionTarget{justify-content:flex-end;align-items:center;gap:4px;min-width:0;display:flex;overflow:hidden}.t-XoWW_linkedSessionName{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;font-size:12px;position:absolute;overflow:hidden}.t-XoWW_confirmDialog{box-sizing:border-box;max-height:calc(100dvh - 48px)}.t-XoWW_confirmContent{overscroll-behavior:contain;--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);min-height:0;overflow-y:auto}.t-XoWW_confirmDialog>:last-child{flex-shrink:0}.t-XoWW_deleteButton{color:var(--dsw-alias-state-error-primary)}.t-XoWW_page :focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.t-XoWW_page .t-XoWW_editName:focus-visible,.t-XoWW_page .t-XoWW_instruction:focus-visible{outline:none}@media (width<=1100px){.t-XoWW_detail{--detail-gutter:20px}}@media (width<=760px){.t-XoWW_hasDetails .t-XoWW_listPane{display:none}.t-XoWW_detail{border-left:0;flex-basis:100%}.t-XoWW_detailScroll{padding-top:20px}.t-XoWW_saveNotice{display:none}}@media (width<=400px){.t-XoWW_detail{--detail-gutter:16px}.t-XoWW_detailTabsBar{gap:16px}.t-XoWW_detailActions{gap:0}}";
2499
+ const css$5 = ".t-XoWW_page{width:100%;min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font-size:14px;line-height:1.6;display:flex;overflow:hidden}.t-XoWW_listPane{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.t-XoWW_pageScroll{scrollbar-gutter:stable;--dsh-scrollbar-width:9px;--dsh-scrollbar-thumb-border:2px;flex:1;min-height:0;overflow:auto}.t-XoWW_pageContent{max-width:960px;margin:0 auto;padding:0 clamp(24px,4vw,48px) 48px}.t-XoWW_pageHeading{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;padding-top:28px;display:flex}[data-platform=darwin] .t-XoWW_pageHeading{padding-top:calc(28px + var(--dsh-frame-top-clearance,0px))}.t-XoWW_pageHeading h1{flex:0 auto;min-width:0;max-width:100%;margin:0;font-size:20px;font-weight:500;line-height:28px}.t-XoWW_creationActions{white-space:nowrap;flex:none;align-items:center;gap:16px;display:flex}.t-XoWW_headerAction{border-radius:16px;height:32px;padding:0 12px;font-size:13px;line-height:20px}.t-XoWW_filters{flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:14px;display:flex}.t-XoWW_filterTabs{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.t-XoWW_filterTab{height:28px;color:var(--dsw-alias-label-tertiary);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:14px;flex:none;align-items:center;padding:0 10px;font-size:14px;line-height:22px;display:inline-flex}@media (hover:hover){.t-XoWW_filterTab:hover{background:var(--dsw-alias-interactive-bg-hover)}}.t-XoWW_filterTabActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.t-XoWW_searchTools{--task-search-height:36px;align-items:center;gap:8px;margin-bottom:16px;display:flex}.t-XoWW_catalogActions{flex:none}.t-XoWW_catalogMore{width:var(--task-search-height);height:var(--task-search-height);padding:0}.t-XoWW_catalogMore[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_searchField{box-sizing:border-box;min-width:0;height:var(--task-search-height);border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-tertiary);border-radius:12px;flex:1;align-items:center;margin:0;padding:0 10px;transition:border-color .15s;display:flex}@media (hover:hover){.t-XoWW_searchField:hover{border-color:var(--dsw-alias-border-l2)}}.t-XoWW_searchField:focus-within{border-color:var(--dsw-alias-state-business-primary)}.t-XoWW_searchField>:first-child{background:0 0;border:0;border-radius:0;flex:1;min-width:0;height:100%;padding:0}.t-XoWW_searchField>:first-child:focus-within{border-color:#0000}.t-XoWW_searchField>:first-child svg{width:14px;height:14px}.t-XoWW_searchField input::placeholder{color:var(--dsw-alias-label-caption)}.t-XoWW_searchField input:focus-visible{outline:none}.t-XoWW_searchField input::-webkit-search-cancel-button{display:none}.t-XoWW_searchClear{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);flex:none;margin-right:-6px;padding:0}.t-XoWW_searchClear svg{width:14px;height:14px}.t-XoWW_list{display:block}.t-XoWW_listRows{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.t-XoWW_row{text-align:left;white-space:normal;border-radius:12px;justify-content:flex-start;align-items:flex-start;gap:12px;width:100%;height:auto;padding:8px;display:flex}@media (hover:hover){.t-XoWW_row:hover{background:var(--dsw-alias-interactive-bg-hover)}}.t-XoWW_rowGlyph{width:16px;height:20px;color:var(--dsw-alias-label-tertiary);flex:none;margin-top:2px}.t-XoWW_rowContent{flex-direction:column;flex:1;min-width:0;display:flex}.t-XoWW_rowTitle{text-overflow:ellipsis;white-space:nowrap;font-weight:500;line-height:23px;overflow:hidden}.t-XoWW_rowSummary{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin-top:2px;font-size:13px;line-height:21px;display:block}.t-XoWW_metadata{color:inherit;overflow-wrap:anywhere;font-size:13px;line-height:21px}.t-XoWW_metadata+.t-XoWW_metadata:before{content:\" · \";padding:0 2px}.t-XoWW_selectedRow{background:var(--dsw-alias-interactive-bg-hover)}.t-XoWW_endedRow .t-XoWW_rowTitle{color:var(--dsw-alias-label-tertiary)}.t-XoWW_endedRow .t-XoWW_rowSummary{color:var(--dsw-alias-label-caption)}@media (hover:hover){.t-XoWW_endedRow:hover .t-XoWW_rowTitle{color:inherit}}.t-XoWW_endedRow.t-XoWW_selectedRow .t-XoWW_rowTitle{color:inherit}@media (hover:hover){.t-XoWW_endedRow:hover .t-XoWW_rowSummary{color:var(--dsw-alias-label-tertiary)}}.t-XoWW_endedRow.t-XoWW_selectedRow .t-XoWW_rowSummary{color:var(--dsw-alias-label-tertiary)}.t-XoWW_notice{background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-secondary);border-radius:10px;flex-wrap:wrap;align-items:flex-start;gap:9px;margin:0 0 20px;padding:12px 14px;font-size:12px;line-height:20px;display:flex}.t-XoWW_notice p{flex:1;margin:0}.t-XoWW_empty{text-align:center;color:var(--dsw-alias-label-tertiary);flex-direction:column;align-items:center;padding:48px 20px;font-size:14px;display:flex}.t-XoWW_empty h2,.t-XoWW_empty h3,.t-XoWW_empty .t-XoWW_emptyTitle,.t-XoWW_empty p{margin:0}.t-XoWW_empty h2,.t-XoWW_empty h3,.t-XoWW_empty .t-XoWW_emptyTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:8px;font-size:14px;font-weight:400;line-height:1.6}.t-XoWW_emptyGlyph{color:var(--dsw-alias-label-caption);margin-bottom:12px}.t-XoWW_emptyIllustration{flex:none;width:110px;max-width:100%;height:auto;margin-bottom:12px}.t-XoWW_emptyAction{margin-top:16px}.t-XoWW_detail{--detail-gutter:24px;border-left:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-base);flex-direction:column;flex:0 0 47%;min-width:0;min-height:0;display:flex;position:relative}.t-XoWW_detail:focus-visible{outline:none}.t-XoWW_tabBody{flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex}.t-XoWW_tabBody>.t-XoWW_detail{border-left:0;flex:auto}.t-XoWW_tabBody>.t-XoWW_empty{flex:auto;justify-content:center}.t-XoWW_tabBody>.t-XoWW_detail .t-XoWW_detailTabsBar{height:37px;min-height:37px}.t-XoWW_tabBody>.t-XoWW_detail .t-XoWW_detailTab{padding-bottom:9px}.t-XoWW_tabBody>.t-XoWW_detail .t-XoWW_detailActions{margin-right:calc(6px - var(--detail-gutter))}.t-XoWW_detailHeader{align-items:flex-start;gap:10px;margin-bottom:4px;display:flex}.t-XoWW_editName{width:100%;min-width:0;min-height:32px;color:var(--dsw-alias-label-primary);background:0 0;border:0;outline:0;flex:1;padding:0;font-size:20px;font-weight:500;line-height:28px}@media (hover:hover){.t-XoWW_editName:hover{box-shadow:0 1px var(--dsw-alias-border-l3)}}.t-XoWW_editName:focus{box-shadow:0 1px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}.t-XoWW_readonlyName{overflow-wrap:anywhere;flex:1;min-width:0;margin:0;padding:2px 0;font-size:20px;font-weight:500;line-height:28px}.t-XoWW_nextRun{min-height:20px;color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;margin-bottom:20px;font-size:13px;line-height:20px;display:flex}.t-XoWW_nextRun p{overflow-wrap:anywhere;min-width:0;margin:0}.t-XoWW_nextRunRelative{color:inherit}.t-XoWW_tabTitleIcon{color:var(--dsw-alias-label-secondary);flex:none}.t-XoWW_detailTabsBar{height:44px;min-height:44px;padding:0 var(--detail-gutter);border-bottom:.5px solid var(--dsw-alias-border-l3);flex-shrink:0;justify-content:space-between;align-items:center;gap:20px;display:flex}.t-XoWW_detailTabs{scrollbar-width:none;flex:auto;align-self:flex-end;gap:36px;min-width:0;margin-bottom:-1px;padding-bottom:1px;display:flex;overflow-x:auto}.t-XoWW_detailTabs::-webkit-scrollbar{display:none}.t-XoWW_detailActions{flex:none;align-items:center;margin-right:-8px}.t-XoWW_detailIconButton{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);flex:none;padding:0}.t-XoWW_detailTab{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;flex:none;padding:0 0 13px;font-size:13px;font-weight:500;line-height:16px;position:relative}.t-XoWW_detailTab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:-1px;left:0;right:0}.t-XoWW_detailTab[aria-selected=true]{color:var(--dsw-alias-state-business-primary)}.t-XoWW_detailTab[aria-selected=true]:after{background:var(--dsw-alias-state-business-primary)}.t-XoWW_detailScroll{min-height:0;padding:24px var(--detail-gutter) 28px;scrollbar-gutter:stable;--dsh-scrollbar-width:9px;--dsh-scrollbar-thumb-border:2px;flex:1;overflow:auto}.t-XoWW_detailRecords{scrollbar-gutter:auto;flex-direction:column;padding:0;display:flex;overflow:hidden}.t-XoWW_detailRecords>.t-XoWW_notice{margin:24px var(--detail-gutter) 0}.t-XoWW_recordsPanel:not([hidden]),.t-XoWW_deliveryHistory{flex-direction:column;flex:1;min-height:0;display:flex}.t-XoWW_retentionEnd{padding:0 var(--detail-gutter) 16px;color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:20px}.t-XoWW_retentionLine{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.t-XoWW_retentionInfo{width:24px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:5px;display:inline-flex}@media (hover:hover){.t-XoWW_retentionInfo:hover{color:var(--dsw-alias-label-primary)}}.t-XoWW_retentionInfo:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.t-XoWW_retentionRule{background:var(--dsw-alias-bg-layer-1);border-radius:8px;margin-top:12px;padding:12px 14px}.t-XoWW_retentionRule p{margin:0}.t-XoWW_retentionRule p+p{margin-top:6px}.t-XoWW_ruleCard{margin-top:28px}.t-XoWW_ruleCard h3{color:var(--dsw-alias-label-tertiary);margin:0 0 8px 10px;font-size:13px;font-weight:400;line-height:20px}.t-XoWW_ruleRows{border:.5px solid var(--dsw-alias-border-l3);border-radius:16px;flex-direction:column;padding:0 12px;display:flex}.t-XoWW_menuGuard{display:contents}.t-XoWW_zoneMenu.t-XoWW_zoneMenu{height:min(420px,100dvh - 48px);max-height:min(420px,100dvh - 48px)}.t-XoWW_zoneMenu [role=separator]{background:var(--dsw-alias-border-l3);height:.5px;margin:6px 4px}.t-XoWW_ruleRow,.t-XoWW_ruleRowMenu{border-bottom:.5px solid var(--dsw-alias-border-l3);width:100%;display:flex}.t-XoWW_ruleRow{justify-content:space-between;align-items:center;gap:12px;min-height:48px}.t-XoWW_ruleRows>:last-child,.t-XoWW_ruleRows>:last-child>.t-XoWW_ruleRowMenu{border-bottom:0}.t-XoWW_ruleLabel{color:var(--dsw-alias-label-primary);flex:none;font-size:14px;line-height:1.6}.t-XoWW_ruleControl{margin-right:0}.t-XoWW_ruleRows .t-XoWW_ruleControl:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.t-XoWW_ruleValue{width:100%;min-height:48px;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:none;justify-content:space-between;align-items:center;gap:12px;margin:0;padding:0;font-size:14px;line-height:1.6;display:flex}.t-XoWW_ruleValueFace{border-radius:18px;flex:0 auto;align-items:center;gap:6px;min-width:0;min-height:32px;padding:0 8px;transition:background .15s;display:flex}@media (hover:hover){.t-XoWW_ruleValue:not(:disabled):hover .t-XoWW_ruleValueFace{background:var(--dsw-alias-interactive-bg-hover)}}.t-XoWW_ruleRows .t-XoWW_ruleValue:focus-visible{outline:none}.t-XoWW_ruleValue:focus-visible .t-XoWW_ruleValueFace{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.t-XoWW_ruleValueFace>svg{color:var(--dsw-alias-label-tertiary);flex:none}.t-XoWW_ruleValue:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.t-XoWW_ruleCurrent{text-align:right;text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}.t-XoWW_zoneSearch{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;outline:none;padding:6px 8px;font-size:13px;line-height:20px}.t-XoWW_zoneSearch:focus{border-color:var(--dsw-alias-state-business-primary)}.t-XoWW_ruleWeekdays{flex-wrap:wrap;justify-content:flex-end;gap:4px;padding:6px 0;display:flex}.t-XoWW_ruleMonthDays{grid-template-columns:repeat(7,minmax(36px,max-content));justify-content:flex-end;gap:4px;padding:6px 0;display:grid}.t-XoWW_ruleMonthDays>*{justify-content:center;justify-self:stretch}.t-XoWW_ruleInput{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:right;background:0 0;border:none;border-radius:18px;flex:0 58%;margin-right:0;padding:5px 8px;font-size:14px;transition:background .15s}@media (hover:hover){.t-XoWW_ruleInput:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}}.t-XoWW_ruleInput:disabled{color:var(--dsw-alias-label-tertiary)}.t-XoWW_ruleInterval{flex:none;align-items:center;gap:8px;min-width:0;display:flex}.t-XoWW_ruleIntervalStepper{background:var(--dsw-alias-bg-module-platform);border-radius:18px;justify-content:center;align-items:center;min-width:72px;height:36px;display:inline-flex;position:relative}.t-XoWW_ruleIntervalInput{box-sizing:border-box;width:calc(var(--interval-digits,1) * 1ch + 52px);appearance:textfield;border-radius:inherit;font-variant-numeric:tabular-nums;text-align:center;flex:0 auto;min-width:72px;height:100%;padding:0 26px}.t-XoWW_ruleIntervalInput::-webkit-outer-spin-button,.t-XoWW_ruleIntervalInput::-webkit-inner-spin-button{appearance:none;margin:0}@media (hover:hover){.t-XoWW_ruleIntervalInput:not(:disabled):hover{background:0 0}}.t-XoWW_ruleRows .t-XoWW_ruleIntervalInput:focus-visible{outline:none}.t-XoWW_ruleIntervalArrows{opacity:0;flex-direction:column;gap:2px;display:flex;position:absolute;right:8px}@media (hover:hover){.t-XoWW_ruleIntervalStepper:hover .t-XoWW_ruleIntervalArrows{opacity:1}}.t-XoWW_ruleIntervalStepper:focus-within .t-XoWW_ruleIntervalArrows{opacity:1}@media (hover:none){.t-XoWW_ruleIntervalArrows{opacity:1}}.t-XoWW_ruleIntervalArrow{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 75%, transparent);width:17px;height:12px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:3px;justify-content:center;align-items:center;padding:0;display:inline-flex}@media (hover:hover){.t-XoWW_ruleIntervalArrow:hover:not(:disabled){background:var(--dsw-alias-bg-layer-1)}}.t-XoWW_ruleIntervalArrow:disabled{color:var(--dsw-alias-label-caption);cursor:default}.t-XoWW_ruleIntervalUnit{color:var(--dsw-alias-label-primary);flex:none;font-size:14px}.t-XoWW_pickerTrigger{cursor:pointer;flex:0 auto;justify-content:flex-end;align-items:center;gap:6px;display:inline-flex}.t-XoWW_pickerTrigger:disabled{cursor:default}.t-XoWW_pickerIcon{color:var(--dsw-alias-label-tertiary);flex:none}.t-XoWW_ruleHint{color:var(--dsw-alias-label-tertiary);margin:8px 0 0 10px;font-size:13px;line-height:1.6}.t-XoWW_ruleHintError{color:var(--dsw-alias-state-error-primary)}.t-XoWW_instruction{box-sizing:border-box;field-sizing:content;border:.5px solid var(--dsw-alias-border-l3);background:var(--dsw-alias-bg-base);width:100%;max-width:100%;min-height:112px;max-height:160px;color:var(--dsw-alias-label-primary);font:inherit;resize:none;--dsh-scrollbar-width:9px;--dsh-scrollbar-thumb-border:2px;--dsh-scrollbar-track-margin:12px;border-radius:16px;outline:0;margin:0;padding:12px;font-size:14px;line-height:24px;transition:border-color .15s;display:block}@media (hover:hover){.t-XoWW_instruction:hover{border-color:var(--dsw-alias-border-l2)}}.t-XoWW_instruction:focus{border-color:var(--dsw-alias-state-business-primary)}.t-XoWW_readonlyPrompt{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:14px;line-height:24px}.t-XoWW_delivery{border-radius:8px;align-items:flex-start;gap:12px;margin:0 -8px;padding:14px 8px;font-size:14px;line-height:22px;display:flex;position:relative}.t-XoWW_delivery:first-of-type{padding-top:0}.t-XoWW_delivery:before,.t-XoWW_delivery:after{background:var(--dsw-alias-border-l3);width:.5px;position:absolute;left:15.75px}.t-XoWW_delivery:not(:first-of-type):before{content:\"\";height:14px;top:0}.t-XoWW_delivery:not(:last-of-type):after{content:\"\";top:42px;bottom:0}.t-XoWW_delivery:first-of-type:not(:last-of-type):after{top:28px}.t-XoWW_deliveryGlyph{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:6px}.t-XoWW_deliveryBody{flex:1;min-width:0;padding:2px 0}.t-XoWW_deliveryHead{align-items:center;gap:10px;display:flex}.t-XoWW_deliveryTime{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px;display:block}.t-XoWW_confirmTitle{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.t-XoWW_savedPrompt{-webkit-line-clamp:2;line-clamp:2;color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;overflow-wrap:anywhere;-webkit-box-orient:vertical;margin:6px 0 0;font-size:13px;line-height:22px;display:-webkit-box;overflow:hidden}.t-XoWW_savedPrompt[data-expanded]{-webkit-line-clamp:none;line-clamp:none;display:block}.t-XoWW_savedPromptToggle{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:2px;margin:2px 0 0 -6px;padding:1px 6px;font-size:12px;line-height:20px;display:inline-flex}@media (hover:hover){.t-XoWW_savedPromptToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}}.t-XoWW_savedPromptToggle:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.t-XoWW_detailActions,.t-XoWW_confirmActions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.t-XoWW_detailHeader{flex-shrink:0}.t-XoWW_detailContext{flex:none;align-items:center;min-width:0;max-width:200px;display:flex}.t-XoWW_detailContext:has(>button:disabled){cursor:not-allowed}.t-XoWW_detailContext>button:disabled{pointer-events:none}.t-XoWW_saveFooter{padding:20px var(--detail-gutter);border-top:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-base);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;display:flex}.t-XoWW_saveFooter>button{height:32px;font-size:13px}.t-XoWW_saveFooter>:last-child{margin-right:-8px}.t-XoWW_saveNotice{color:var(--dsw-alias-label-tertiary);margin-right:auto;font-size:12px}.t-XoWW_saveFailure{padding:12px var(--detail-gutter) 0;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-state-error-primary);flex-shrink:0;margin:0;font-size:12px;line-height:1.6}.t-XoWW_linkedSession{text-align:left;border:0;border-radius:14px;flex:0 auto;align-items:center;gap:6px;min-width:0;max-width:100%;height:28px;padding:0 8px;display:flex}.t-XoWW_linkedSession:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.t-XoWW_detailNotice{padding:0 var(--detail-gutter) 6px;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;background:var(--dsw-alias-bg-base);flex-shrink:0;margin:0;font-size:12px}.t-XoWW_linkedSessionLabel{color:var(--dsw-alias-label-secondary);flex-shrink:0;font-size:13px}.t-XoWW_linkedSessionTarget{justify-content:flex-end;align-items:center;gap:4px;min-width:0;display:flex;overflow:hidden}.t-XoWW_linkedSessionName{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;font-size:12px;position:absolute;overflow:hidden}.t-XoWW_confirmDialog{box-sizing:border-box;max-height:calc(100dvh - 48px)}.t-XoWW_confirmContent{overscroll-behavior:contain;--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);min-height:0;overflow-y:auto}.t-XoWW_confirmDialog>:last-child{flex-shrink:0}.t-XoWW_deleteButton{color:var(--dsw-alias-state-error-primary);--dsh-button-outline-color:var(--dsw-alias-state-error-primary)}.t-XoWW_page :focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.t-XoWW_page .t-XoWW_editName:focus-visible,.t-XoWW_page .t-XoWW_instruction:focus-visible{outline:none}@media (width<=1100px){.t-XoWW_detail{--detail-gutter:20px}}@media (width<=760px){.t-XoWW_hasDetails .t-XoWW_listPane{display:none}.t-XoWW_detail{border-left:0;flex-basis:100%}.t-XoWW_detailScroll{padding-top:20px}.t-XoWW_saveNotice{display:none}}@media (width<=400px){.t-XoWW_detail{--detail-gutter:16px}.t-XoWW_detailTabsBar{gap:16px}.t-XoWW_detailActions{gap:0}}@media (pointer:coarse){.t-XoWW_searchField input,.t-XoWW_instruction,.t-XoWW_ruleInput,.t-XoWW_zoneSearch{font-size:16px}}";
2434
2500
  const tagId$5 = "@deepseek-ai/dsh-client-ui-schedule/TaskManagerPage.module.css";
2435
2501
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
2436
2502
  const tag = document.createElement("style");
@@ -2440,6 +2506,8 @@ window.__ModuleLoader__.load({
2440
2506
  document.head.appendChild(tag);
2441
2507
  }
2442
2508
  var TaskManagerPage_module_css_default = {
2509
+ "catalogActions": "t-XoWW_catalogActions",
2510
+ "catalogMore": "t-XoWW_catalogMore",
2443
2511
  "confirmActions": "t-XoWW_confirmActions",
2444
2512
  "confirmContent": "t-XoWW_confirmContent",
2445
2513
  "confirmDialog": "t-XoWW_confirmDialog",
@@ -2467,6 +2535,7 @@ window.__ModuleLoader__.load({
2467
2535
  "empty": "t-XoWW_empty",
2468
2536
  "emptyAction": "t-XoWW_emptyAction",
2469
2537
  "emptyGlyph": "t-XoWW_emptyGlyph",
2538
+ "emptyIllustration": "t-XoWW_emptyIllustration",
2470
2539
  "emptyTitle": "t-XoWW_emptyTitle",
2471
2540
  "endedRow": "t-XoWW_endedRow",
2472
2541
  "filterTab": "t-XoWW_filterTab",
@@ -2474,6 +2543,7 @@ window.__ModuleLoader__.load({
2474
2543
  "filterTabs": "t-XoWW_filterTabs",
2475
2544
  "filters": "t-XoWW_filters",
2476
2545
  "hasDetails": "t-XoWW_hasDetails",
2546
+ "headerAction": "t-XoWW_headerAction",
2477
2547
  "instruction": "t-XoWW_instruction",
2478
2548
  "linkedSession": "t-XoWW_linkedSession",
2479
2549
  "linkedSessionLabel": "t-XoWW_linkedSessionLabel",
@@ -2484,7 +2554,6 @@ window.__ModuleLoader__.load({
2484
2554
  "listRows": "t-XoWW_listRows",
2485
2555
  "menuGuard": "t-XoWW_menuGuard",
2486
2556
  "metadata": "t-XoWW_metadata",
2487
- "newButton": "t-XoWW_newButton",
2488
2557
  "nextRun": "t-XoWW_nextRun",
2489
2558
  "nextRunRelative": "t-XoWW_nextRunRelative",
2490
2559
  "notice": "t-XoWW_notice",
@@ -2533,6 +2602,7 @@ window.__ModuleLoader__.load({
2533
2602
  "savedPromptToggle": "t-XoWW_savedPromptToggle",
2534
2603
  "searchClear": "t-XoWW_searchClear",
2535
2604
  "searchField": "t-XoWW_searchField",
2605
+ "searchTools": "t-XoWW_searchTools",
2536
2606
  "selectedRow": "t-XoWW_selectedRow",
2537
2607
  "tabBody": "t-XoWW_tabBody",
2538
2608
  "tabTitleIcon": "t-XoWW_tabTitleIcon",
@@ -2916,7 +2986,7 @@ window.__ModuleLoader__.load({
2916
2986
  }
2917
2987
  //#endregion
2918
2988
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-schedule/src/client/ClockPicker.module.css.mjs
2919
- const css$3 = ".fonIYG_clock{flex-direction:row;gap:2px;padding:3px}.fonIYG_column{overscroll-behavior:contain;flex-direction:column;width:52px;max-height:216px;display:flex;overflow-y:auto}.fonIYG_option{min-height:32px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;cursor:pointer;border-radius:10px;outline:none;flex:none;justify-content:center;align-items:center;font-size:13px;line-height:1.6;display:flex}.fonIYG_option:hover{background:var(--dsw-alias-interactive-bg-hover)}.fonIYG_option:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.fonIYG_selected{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-ghost-active-fill);box-shadow:inset 0 0 0 1px var(--dsw-alias-button-ghost-active-border)}";
2989
+ const css$3 = ".fonIYG_clock{flex-direction:row;gap:2px;padding:3px}.fonIYG_column{overscroll-behavior:contain;flex-direction:column;width:52px;max-height:216px;display:flex;overflow-y:auto}.fonIYG_option{min-height:32px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;cursor:pointer;border-radius:10px;outline:none;flex:none;justify-content:center;align-items:center;font-size:13px;line-height:1.6;display:flex}@media (hover:hover){.fonIYG_option:hover{background:var(--dsw-alias-interactive-bg-hover)}}.fonIYG_option:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.fonIYG_selected{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-ghost-active-fill);box-shadow:inset 0 0 0 1px var(--dsw-alias-button-ghost-active-border)}";
2920
2990
  const tagId$3 = "@deepseek-ai/dsh-client-ui-schedule/ClockPicker.module.css";
2921
2991
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
2922
2992
  const tag = document.createElement("style");
@@ -3111,7 +3181,7 @@ window.__ModuleLoader__.load({
3111
3181
  }
3112
3182
  //#endregion
3113
3183
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-schedule/src/client/DatePicker.module.css.mjs
3114
- const css$2 = ".nRqoaa_calendar{flex-direction:column;gap:4px;width:232px;padding:8px}.nRqoaa_head{justify-content:space-between;align-items:center;gap:4px;display:flex}.nRqoaa_title{color:var(--dsw-alias-label-primary);text-align:center;flex:auto;font-size:13px;line-height:1.6}.nRqoaa_nav{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.nRqoaa_nav:hover{background:var(--dsw-alias-interactive-bg-hover)}.nRqoaa_nav:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.nRqoaa_grid{flex-direction:column;gap:2px;display:flex}.nRqoaa_week{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.nRqoaa_weekday{height:22px;color:var(--dsw-alias-label-tertiary);justify-content:center;align-items:center;font-size:11px;line-height:1.6;display:flex}.nRqoaa_cell{height:28px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;cursor:pointer;border-radius:8px;outline:none;justify-content:center;align-items:center;font-size:13px;line-height:1.6;display:flex}.nRqoaa_cell:hover{background:var(--dsw-alias-interactive-bg-hover)}.nRqoaa_cell:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.nRqoaa_cell[aria-current=date]{box-shadow:inset 0 0 0 .5px var(--dsw-alias-border-l3)}.nRqoaa_selected{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-ghost-active-fill);box-shadow:inset 0 0 0 1px var(--dsw-alias-button-ghost-active-border)}.nRqoaa_blank{height:28px}";
3184
+ const css$2 = ".nRqoaa_calendar{flex-direction:column;gap:4px;width:232px;padding:8px}.nRqoaa_head{justify-content:space-between;align-items:center;gap:4px;display:flex}.nRqoaa_title{color:var(--dsw-alias-label-primary);text-align:center;flex:auto;font-size:13px;line-height:1.6}.nRqoaa_nav{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}@media (hover:hover){.nRqoaa_nav:hover{background:var(--dsw-alias-interactive-bg-hover)}}.nRqoaa_nav:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.nRqoaa_grid{flex-direction:column;gap:2px;display:flex}.nRqoaa_week{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.nRqoaa_weekday{height:22px;color:var(--dsw-alias-label-tertiary);justify-content:center;align-items:center;font-size:11px;line-height:1.6;display:flex}.nRqoaa_cell{height:28px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;cursor:pointer;border-radius:8px;outline:none;justify-content:center;align-items:center;font-size:13px;line-height:1.6;display:flex}@media (hover:hover){.nRqoaa_cell:hover{background:var(--dsw-alias-interactive-bg-hover)}}.nRqoaa_cell:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.nRqoaa_cell[aria-current=date]{box-shadow:inset 0 0 0 .5px var(--dsw-alias-border-l3)}.nRqoaa_selected{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-ghost-active-fill);box-shadow:inset 0 0 0 1px var(--dsw-alias-button-ghost-active-border)}.nRqoaa_blank{height:28px}";
3115
3185
  const tagId$2 = "@deepseek-ai/dsh-client-ui-schedule/DatePicker.module.css";
3116
3186
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
3117
3187
  const tag = document.createElement("style");
@@ -3721,7 +3791,7 @@ window.__ModuleLoader__.load({
3721
3791
  }
3722
3792
  //#endregion
3723
3793
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-schedule/src/client/TaskMenu.module.css.mjs
3724
- const css$1 = ".JYBKaa_root{display:inline-flex;position:relative}.JYBKaa_list{box-sizing:border-box;border-radius:var(--dsw-radius-lg);background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);box-shadow:var(--dsw-elevation-prominent);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);z-index:100;border:0;flex-direction:column;gap:0;min-width:144px;max-width:360px;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0}.JYBKaa_portal{z-index:1100;position:fixed;top:auto;left:auto}.JYBKaa_alignEnd{left:auto;right:0}.JYBKaa_scrollable{max-height:calc(100vh - 12px - max(12px, var(--dsh-frame-overlay-top,12px)))}.JYBKaa_viewport{flex-direction:column;min-height:0;display:flex}.JYBKaa_scrollable .JYBKaa_viewport{overflow-y:auto}.JYBKaa_header{border-bottom:.5px solid var(--dsw-alias-border-l2);flex:none;padding:5px}.JYBKaa_itemWrap{position:relative}.JYBKaa_item{border-radius:var(--dsw-radius-md);cursor:pointer;width:100%;min-height:34px;color:var(--dsw-alias-label-primary);text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:6px 8px;font-size:13px;line-height:20px;display:flex}.JYBKaa_item:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.JYBKaa_item:focus-visible:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);outline:none}.JYBKaa_item:disabled{opacity:.4;cursor:not-allowed}.JYBKaa_itemIcon{width:14px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.JYBKaa_itemIcon svg,.JYBKaa_check{width:14px;height:14px}.JYBKaa_itemLabel{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.JYBKaa_check{color:var(--dsw-alias-label-primary);flex:none}.JYBKaa_selected{background:0 0}.JYBKaa_danger,.JYBKaa_danger .JYBKaa_itemIcon{color:var(--dsw-alias-state-error-primary)}.JYBKaa_danger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger)}.JYBKaa_danger:focus-visible:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger);outline:none}.JYBKaa_label{color:var(--dsw-alias-label-tertiary);padding:6px 8px;font-size:11px;line-height:15px}.JYBKaa_separator{background:var(--dsw-alias-border-l2);height:.5px;margin:3px 2px}.JYBKaa_separator+.JYBKaa_separator{display:none}";
3794
+ const css$1 = ".JYBKaa_root{display:inline-flex;position:relative}.JYBKaa_list{box-sizing:border-box;border-radius:var(--dsw-radius-lg);background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);box-shadow:var(--dsw-elevation-prominent);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);z-index:100;border:0;flex-direction:column;gap:0;min-width:144px;max-width:360px;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0}.JYBKaa_portal{z-index:1100;position:fixed;top:auto;left:auto}.JYBKaa_alignEnd{left:auto;right:0}.JYBKaa_scrollable{max-height:calc(100vh - 12px - max(12px, var(--dsh-frame-overlay-top,12px)))}.JYBKaa_viewport{flex-direction:column;min-height:0;display:flex}.JYBKaa_scrollable .JYBKaa_viewport{overflow-y:auto}.JYBKaa_header{border-bottom:.5px solid var(--dsw-alias-border-l2);flex:none;padding:5px}.JYBKaa_itemWrap{position:relative}.JYBKaa_item{border-radius:var(--dsw-radius-md);cursor:pointer;width:100%;min-height:34px;color:var(--dsw-alias-label-primary);text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:6px 8px;font-size:13px;line-height:20px;display:flex}@media (hover:hover){.JYBKaa_item:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}}.JYBKaa_item:focus-visible:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);outline:none}.JYBKaa_item:disabled{opacity:.4;cursor:not-allowed}.JYBKaa_itemIcon{width:14px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.JYBKaa_itemIcon svg,.JYBKaa_check{width:14px;height:14px}.JYBKaa_itemLabel{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.JYBKaa_check{color:var(--dsw-alias-label-primary);flex:none}.JYBKaa_selected{background:0 0}.JYBKaa_danger,.JYBKaa_danger .JYBKaa_itemIcon{color:var(--dsw-alias-state-error-primary)}@media (hover:hover){.JYBKaa_danger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger)}}.JYBKaa_danger:focus-visible:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger);outline:none}.JYBKaa_label{color:var(--dsw-alias-label-tertiary);padding:6px 8px;font-size:11px;line-height:15px}.JYBKaa_separator{background:var(--dsw-alias-border-l2);height:.5px;margin:3px 2px}.JYBKaa_separator+.JYBKaa_separator{display:none}";
3725
3795
  const tagId$1 = "@deepseek-ai/dsh-client-ui-schedule/TaskMenu.module.css";
3726
3796
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
3727
3797
  const tag = document.createElement("style");
@@ -3800,8 +3870,9 @@ window.__ModuleLoader__.load({
3800
3870
  * @param props.portal - render the list into document.body, fixed-positioned
3801
3871
  * from the anchor rect (follows scroll and resize while open).
3802
3872
  * @param props.header - owner content pinned above the scrolling rows; a control
3803
- * it marks `data-menu-field` takes the keyboard once the list is placed, which
3804
- * is the frame a portaled list becomes focusable in.
3873
+ * it marks `data-menu-field` takes the keyboard on desktop once the list is placed,
3874
+ * which is the frame a portaled list becomes focusable in. Phones and tablets
3875
+ * require explicit field focus.
3805
3876
  * @param props.className - extra class on the anchor wrapper span.
3806
3877
  * @param props.listClassName - extra class on the dropdown card itself.
3807
3878
  * @returns the anchor wrapper with the conditional list.
@@ -3856,7 +3927,7 @@ window.__ModuleLoader__.load({
3856
3927
  handedOver.current = false;
3857
3928
  return;
3858
3929
  }
3859
- if (handedOver.current) return;
3930
+ if (handedOver.current || (0, _deepseek_ai_dsh_client_ui_primitives.isMobileDevice)()) return;
3860
3931
  const list = listRef.current;
3861
3932
  /* v8 ignore next -- the list is rendered in the same commit that sets `open`, before this effect runs. */
3862
3933
  if (list === null) return;
@@ -6633,6 +6704,106 @@ window.__ModuleLoader__.load({
6633
6704
  }
6634
6705
  };
6635
6706
  //#endregion
6707
+ //#region lib/types/client/ScheduleEmptyIllustration.js
6708
+ /**
6709
+ * Render the empty-state illustration without adding an accessible announcement.
6710
+ * @param props - optional CSS class applied to the root SVG.
6711
+ * @returns the decorative inline SVG element.
6712
+ */
6713
+ function ScheduleEmptyIllustration({ className }) {
6714
+ return (0, react_jsx_runtime.jsxs)("svg", {
6715
+ className,
6716
+ width: "170",
6717
+ height: "170",
6718
+ viewBox: "0 0 170 170",
6719
+ fill: "none",
6720
+ "aria-hidden": "true",
6721
+ focusable: "false",
6722
+ children: [
6723
+ (0, react_jsx_runtime.jsx)("path", {
6724
+ d: "M163.819 97.9382C163.819 126.572 144.48 135.329 115.847 135.329C87.2129 135.329 60.1276 126.572 60.1276 97.9382C60.1276 69.3047 101.003 46.0927 129.637 46.0927C158.27 46.0927 163.819 69.3047 163.819 97.9382Z",
6725
+ fill: "var(--dsw-alias-illustration-background)"
6726
+ }),
6727
+ (0, react_jsx_runtime.jsx)("path", {
6728
+ d: "M9.49521 88.6735C20.8278 111.218 39.5801 110.429 62.2137 99.0519C84.8474 87.6748 102.791 70.018 91.4589 47.4731C80.1263 24.9282 38.6291 22.8935 15.9955 34.2706C-6.63818 45.6478 -1.83735 66.1286 9.49521 88.6735Z",
6729
+ fill: "var(--dsw-alias-illustration-background)"
6730
+ }),
6731
+ (0, react_jsx_runtime.jsx)("path", {
6732
+ d: "M25.2636 34.442C24.727 29.8132 28.0445 25.6258 32.6733 25.0893L101.373 17.126C106.002 16.5895 110.189 19.9069 110.726 24.5358L120.107 105.466C120.643 110.095 117.326 114.282 112.697 114.818L43.9972 122.782C39.3684 123.318 35.181 120.001 34.6445 115.372L25.2636 34.442Z",
6733
+ fill: "var(--dsw-alias-illustration-backing)"
6734
+ }),
6735
+ (0, react_jsx_runtime.jsx)("path", {
6736
+ d: "M40.169 25.1368C40.169 20.477 43.9466 16.6995 48.6064 16.6995H117.766C122.426 16.6995 126.204 20.477 126.204 25.1368V106.609C126.204 111.268 122.426 115.046 117.766 115.046H48.6064C43.9466 115.046 40.169 111.268 40.169 106.609V25.1368Z",
6737
+ fill: "var(--dsw-alias-illustration-surface)"
6738
+ }),
6739
+ (0, react_jsx_runtime.jsx)("path", {
6740
+ d: "M110.258 44.9883V50.3516H72.0831V44.9883H110.258Z",
6741
+ fill: "var(--dsw-alias-illustration-detail)"
6742
+ }),
6743
+ (0, react_jsx_runtime.jsx)("path", {
6744
+ d: "M110.258 63.2803V68.6436H72.0831V63.2803H110.258Z",
6745
+ fill: "var(--dsw-alias-illustration-detail)"
6746
+ }),
6747
+ (0, react_jsx_runtime.jsx)("path", {
6748
+ d: "M91.171 81.5713V86.9346H72.0831V81.5713H91.171Z",
6749
+ fill: "var(--dsw-alias-illustration-detail)"
6750
+ }),
6751
+ (0, react_jsx_runtime.jsx)("path", {
6752
+ d: "M56.1124 43.4998H64.0964V51.4838H56.1124V43.4998Z",
6753
+ fill: "var(--dsw-alias-illustration-detail)"
6754
+ }),
6755
+ (0, react_jsx_runtime.jsx)("path", {
6756
+ d: "M56.1124 61.97H64.0964V69.954H56.1124V61.97Z",
6757
+ fill: "var(--dsw-alias-illustration-detail)"
6758
+ }),
6759
+ (0, react_jsx_runtime.jsx)("path", {
6760
+ d: "M56.1124 80.2607H64.0964V88.2448H56.1124V80.2607Z",
6761
+ fill: "var(--dsw-alias-illustration-detail)"
6762
+ }),
6763
+ (0, react_jsx_runtime.jsx)("path", {
6764
+ d: "M126.205 148.002C126.205 149.615 105.321 150.923 79.5592 150.923C53.7973 150.923 32.9132 149.615 32.9132 148.002C32.9132 146.388 53.7973 145.08 79.5592 145.08C105.321 145.08 126.205 146.388 126.205 148.002Z",
6765
+ fill: "var(--dsw-alias-illustration-shadow)"
6766
+ }),
6767
+ (0, react_jsx_runtime.jsx)("path", {
6768
+ d: "M13.1544 119.318C14.7101 119.318 16.2657 119.43 17.8214 119.656C17.9942 119.682 18.1671 119.709 18.3399 119.737V120.238C18.1671 120.266 17.9942 120.293 17.8214 120.319C16.2657 120.545 14.7101 120.657 13.1544 120.657C11.5986 120.657 10.0423 120.545 8.48643 120.319C8.31357 120.293 8.14073 120.266 7.96787 120.238V119.737C8.14073 119.709 8.31357 119.682 8.48643 119.656C10.0423 119.43 11.5986 119.318 13.1544 119.318Z",
6769
+ fill: "var(--dsw-alias-illustration-detail)"
6770
+ }),
6771
+ (0, react_jsx_runtime.jsx)("path", {
6772
+ d: "M125.197 2.96338C126.287 2.96338 127.378 3.076 128.468 3.30225C128.589 3.32738 128.71 3.3544 128.831 3.38232V3.88428C128.71 3.9122 128.589 3.93922 128.468 3.96436C127.378 4.1906 126.287 4.30322 125.197 4.30322C124.108 4.30319 123.018 4.19057 121.928 3.96436C121.807 3.93922 121.686 3.91221 121.565 3.88428V3.38232C121.686 3.3544 121.807 3.32738 121.928 3.30225C123.018 3.07603 124.108 2.96341 125.197 2.96338Z",
6773
+ fill: "var(--dsw-alias-illustration-detail)"
6774
+ }),
6775
+ (0, react_jsx_runtime.jsx)("path", {
6776
+ d: "M145.187 32.6399C146.742 32.6399 148.298 32.7525 149.854 32.9788C150.026 33.0039 150.199 33.0309 150.372 33.0588V33.5608C150.199 33.5887 150.026 33.6157 149.854 33.6409C148.298 33.8671 146.742 33.9797 145.187 33.9797C143.631 33.9797 142.074 33.8671 140.519 33.6409C140.346 33.6157 140.173 33.5887 140 33.5608V33.0588C140.173 33.0309 140.346 33.0039 140.519 32.9788C142.074 32.7525 143.631 32.6399 145.187 32.6399Z",
6777
+ fill: "var(--dsw-alias-illustration-detail)"
6778
+ }),
6779
+ (0, react_jsx_runtime.jsx)("path", {
6780
+ d: "M12.4776 119.987C12.4777 118.431 12.5903 116.875 12.8165 115.32C12.8416 115.147 12.8687 114.974 12.8966 114.801H13.3985C13.4265 114.974 13.4535 115.147 13.4786 115.32C13.7048 116.875 13.8175 118.431 13.8175 119.987C13.8175 121.542 13.7049 123.099 13.4786 124.654C13.4535 124.827 13.4265 125 13.3985 125.173H12.8966C12.8687 125 12.8416 124.827 12.8165 124.654C12.5903 123.099 12.4776 121.542 12.4776 119.987Z",
6781
+ fill: "var(--dsw-alias-illustration-detail)"
6782
+ }),
6783
+ (0, react_jsx_runtime.jsx)("path", {
6784
+ d: "M124.522 3.63379C124.522 2.54381 124.634 1.45326 124.86 0.363281C124.886 0.242199 124.913 0.121083 124.941 2.19411e-08L125.442 0C125.47 0.121082 125.497 0.242199 125.523 0.363281C125.749 1.45326 125.861 2.54381 125.861 3.63379C125.861 4.72362 125.749 5.81349 125.523 6.90332C125.497 7.02442 125.47 7.1455 125.442 7.2666H124.941C124.913 7.1455 124.886 7.02442 124.86 6.90332C124.634 5.81349 124.522 4.72362 124.522 3.63379Z",
6785
+ fill: "var(--dsw-alias-illustration-detail)"
6786
+ }),
6787
+ (0, react_jsx_runtime.jsx)("path", {
6788
+ d: "M144.509 33.3101C144.509 31.7544 144.622 30.1987 144.848 28.6431C144.873 28.4702 144.9 28.2974 144.928 28.1245H145.43C145.458 28.2974 145.485 28.4702 145.51 28.6431C145.736 30.1987 145.849 31.7544 145.849 33.3101C145.849 34.8659 145.736 36.4222 145.51 37.978C145.485 38.1509 145.458 38.3237 145.43 38.4966H144.928C144.9 38.3237 144.873 38.1509 144.848 37.978C144.622 36.4222 144.509 34.8659 144.509 33.3101Z",
6789
+ fill: "var(--dsw-alias-illustration-detail)"
6790
+ }),
6791
+ (0, react_jsx_runtime.jsx)("path", {
6792
+ d: "M149.05 98.8527C149.05 112.66 137.857 123.853 124.05 123.853C110.242 123.853 99.0496 112.66 99.0496 98.8527C99.0496 85.0455 110.242 73.8527 124.05 73.8527C137.857 73.8527 149.05 85.0455 149.05 98.8527Z",
6793
+ fill: "var(--dsw-alias-illustration-detail)"
6794
+ }),
6795
+ (0, react_jsx_runtime.jsx)("path", {
6796
+ d: "M144.192 98.8529C144.192 109.978 135.174 118.997 124.049 118.997C112.923 118.997 103.905 109.978 103.905 98.8529C103.905 87.7278 112.923 78.709 124.049 78.709C135.174 78.709 144.192 87.7278 144.192 98.8529Z",
6797
+ fill: "var(--dsw-alias-illustration-inset)"
6798
+ }),
6799
+ (0, react_jsx_runtime.jsx)("path", {
6800
+ d: "M125.124 86.7281L125.123 99.2824L134.923 104.132L132.824 108.375L122.76 103.395C121.309 102.677 120.39 101.197 120.39 99.5782L120.389 86.7275L125.124 86.7281Z",
6801
+ fill: "var(--dsw-alias-illustration-detail)"
6802
+ })
6803
+ ]
6804
+ });
6805
+ }
6806
+ //#endregion
6636
6807
  //#region lib/types/client/TaskManagerPage.js
6637
6808
  /** Cross-session retained reminders with local search and selection. */
6638
6809
  /**
@@ -6641,18 +6812,25 @@ window.__ModuleLoader__.load({
6641
6812
  * @returns the searchable task list beside the selected task's detail.
6642
6813
  */
6643
6814
  function TaskManagerPage(props) {
6644
- const { useCatalog, onNewTask, onRetry, t } = props;
6815
+ const { useCatalog, onNewTask, onClearEnded, onRetry, t } = props;
6645
6816
  const catalog = useCatalog((snapshot) => snapshot);
6646
6817
  const { records, status } = catalog;
6647
6818
  const [search, setSearch] = (0, react.useState)("");
6648
- const [statusFilter, setStatusFilter] = (0, react.useState)("all");
6819
+ const [statusFilter, setStatusFilter] = (0, react.useState)("active");
6649
6820
  const [selectedId, setSelectedId] = (0, react.useState)(null);
6821
+ const [clearConfirm, setClearConfirm] = (0, react.useState)(false);
6822
+ const [clearMenu, setClearMenu] = (0, react.useState)(false);
6823
+ const [clearing, setClearing] = (0, react.useState)(false);
6650
6824
  const now = useRelativeClock();
6651
6825
  const detail = useTaskDetail(props, catalog, selectedId ?? void 0);
6652
6826
  const { record: catalogRecord, task: selected, id: detailId, confirmId, setConfirmId, setTab } = detail;
6653
6827
  const rowRef = (0, react.useRef)(null);
6654
6828
  const headingRef = (0, react.useRef)(null);
6829
+ const clearTriggerRef = (0, react.useRef)(null);
6830
+ const clearFocusPending = (0, react.useRef)(false);
6831
+ const clearSettled = (0, react.useRef)(false);
6655
6832
  const confirming = records.find((record) => record.id === confirmId);
6833
+ const endedCount = (0, react.useMemo)(() => records.filter((record) => record.status === "inactive").length, [records]);
6656
6834
  const rows = (0, react.useMemo)(() => {
6657
6835
  const query = search.trim().toLowerCase();
6658
6836
  return records.filter((record) => (statusFilter === "all" || record.status === statusFilter) && (record.prompt.toLowerCase().includes(query) || record.sessionId.toLowerCase().includes(query) || taskName(record).toLowerCase().includes(query))).toSorted((left, right) => Date.parse(left.scheduledAt) - Date.parse(right.scheduledAt));
@@ -6668,12 +6846,12 @@ window.__ModuleLoader__.load({
6668
6846
  };
6669
6847
  const frequency = (record) => formatScheduleFrequency(record, t, frequencyZone);
6670
6848
  (0, react.useEffect)(() => {
6671
- if (selectedId !== null) return;
6849
+ if (selectedId !== null || clearConfirm) return;
6672
6850
  if (rowRef.current !== null) {
6673
6851
  (rowRef.current.isConnected ? rowRef.current : headingRef.current)?.focus();
6674
6852
  rowRef.current = null;
6675
6853
  }
6676
- }, [selectedId]);
6854
+ }, [selectedId, clearConfirm]);
6677
6855
  (0, react.useEffect)(() => {
6678
6856
  if (status !== "ready") return;
6679
6857
  if (selectedId !== null && selected === void 0) setSelectedId(null);
@@ -6688,176 +6866,271 @@ window.__ModuleLoader__.load({
6688
6866
  const closeDetails = () => {
6689
6867
  setSelectedId(null);
6690
6868
  };
6869
+ (0, react.useEffect)(() => {
6870
+ if (clearConfirm) return;
6871
+ if (clearFocusPending.current) {
6872
+ clearFocusPending.current = false;
6873
+ const trigger = clearTriggerRef.current;
6874
+ if (trigger?.isConnected === true) {
6875
+ trigger.focus();
6876
+ return;
6877
+ }
6878
+ clearSettled.current = false;
6879
+ headingRef.current?.focus();
6880
+ return;
6881
+ }
6882
+ if (!clearSettled.current || endedCount > 0 || document.activeElement !== document.body) return;
6883
+ clearSettled.current = false;
6884
+ headingRef.current?.focus();
6885
+ }, [clearConfirm, endedCount]);
6886
+ const confirmClearEnded = () => {
6887
+ if (clearing) return;
6888
+ setClearing(true);
6889
+ onClearEnded().finally(() => {
6890
+ clearSettled.current = true;
6891
+ setClearing(false);
6892
+ setClearConfirm(false);
6893
+ });
6894
+ };
6691
6895
  return (0, react_jsx_runtime.jsxs)("section", {
6692
6896
  className: clsx(TaskManagerPage_module_css_default.page, selected !== void 0 && TaskManagerPage_module_css_default.hasDetails),
6693
6897
  "aria-label": t("title"),
6694
6898
  "data-testid": "task-manager-page",
6695
6899
  onKeyDown: (event) => {
6696
- if (event.key !== "Escape" || event.defaultPrevented || confirmId !== null || selectedId === null) return;
6900
+ if (event.key !== "Escape" || event.defaultPrevented || confirmId !== null || clearConfirm || selectedId === null) return;
6697
6901
  event.preventDefault();
6698
6902
  event.stopPropagation();
6699
6903
  closeDetails();
6700
6904
  },
6701
- children: [(0, react_jsx_runtime.jsx)("div", {
6702
- className: TaskManagerPage_module_css_default.listPane,
6703
- children: (0, react_jsx_runtime.jsx)("div", {
6704
- className: TaskManagerPage_module_css_default.pageScroll,
6705
- children: (0, react_jsx_runtime.jsxs)("div", {
6706
- className: TaskManagerPage_module_css_default.pageContent,
6707
- children: [
6708
- (0, react_jsx_runtime.jsxs)("div", {
6709
- className: TaskManagerPage_module_css_default.pageHeading,
6710
- children: [(0, react_jsx_runtime.jsx)("h1", {
6711
- ref: headingRef,
6712
- tabIndex: -1,
6713
- children: t("title")
6714
- }), (0, react_jsx_runtime.jsx)("div", {
6715
- className: TaskManagerPage_module_css_default.creationActions,
6716
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6717
- variant: "primary",
6718
- size: "sm",
6719
- className: TaskManagerPage_module_css_default.newButton,
6720
- icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
6721
- onClick: onNewTask,
6722
- children: t("new.action")
6905
+ children: [
6906
+ (0, react_jsx_runtime.jsx)("div", {
6907
+ className: TaskManagerPage_module_css_default.listPane,
6908
+ children: (0, react_jsx_runtime.jsx)("div", {
6909
+ className: TaskManagerPage_module_css_default.pageScroll,
6910
+ children: (0, react_jsx_runtime.jsxs)("div", {
6911
+ className: TaskManagerPage_module_css_default.pageContent,
6912
+ children: [
6913
+ (0, react_jsx_runtime.jsxs)("div", {
6914
+ className: TaskManagerPage_module_css_default.pageHeading,
6915
+ children: [(0, react_jsx_runtime.jsx)("h1", {
6916
+ ref: headingRef,
6917
+ tabIndex: -1,
6918
+ children: t("title")
6919
+ }), (0, react_jsx_runtime.jsx)("div", {
6920
+ className: TaskManagerPage_module_css_default.creationActions,
6921
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6922
+ variant: "primary",
6923
+ size: "sm",
6924
+ className: TaskManagerPage_module_css_default.headerAction,
6925
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
6926
+ onClick: onNewTask,
6927
+ children: t("new.action")
6928
+ })
6929
+ })]
6930
+ }),
6931
+ (0, react_jsx_runtime.jsx)("div", {
6932
+ className: TaskManagerPage_module_css_default.filters,
6933
+ children: (0, react_jsx_runtime.jsx)("div", {
6934
+ className: TaskManagerPage_module_css_default.filterTabs,
6935
+ role: "group",
6936
+ "aria-label": t("statusFilter.label"),
6937
+ children: [
6938
+ "active",
6939
+ "inactive",
6940
+ "all"
6941
+ ].map((value) => (0, react_jsx_runtime.jsx)("button", {
6942
+ type: "button",
6943
+ className: clsx(TaskManagerPage_module_css_default.filterTab, statusFilter === value && TaskManagerPage_module_css_default.filterTabActive),
6944
+ "aria-pressed": statusFilter === value,
6945
+ onClick: () => {
6946
+ setStatusFilter(value);
6947
+ },
6948
+ children: t(value === "all" ? "statusFilter.all" : `status.${value}`)
6949
+ }, value))
6723
6950
  })
6724
- })]
6725
- }),
6726
- (0, react_jsx_runtime.jsx)("div", {
6727
- className: TaskManagerPage_module_css_default.filters,
6728
- children: (0, react_jsx_runtime.jsx)("div", {
6729
- className: TaskManagerPage_module_css_default.filterTabs,
6730
- role: "group",
6731
- "aria-label": t("statusFilter.label"),
6732
- children: [
6733
- "all",
6734
- "active",
6735
- "inactive"
6736
- ].map((value) => (0, react_jsx_runtime.jsx)("button", {
6737
- type: "button",
6738
- className: clsx(TaskManagerPage_module_css_default.filterTab, statusFilter === value && TaskManagerPage_module_css_default.filterTabActive),
6739
- "aria-pressed": statusFilter === value,
6740
- onClick: () => {
6741
- setStatusFilter(value);
6951
+ }),
6952
+ (0, react_jsx_runtime.jsxs)("div", {
6953
+ className: TaskManagerPage_module_css_default.searchTools,
6954
+ children: [(0, react_jsx_runtime.jsxs)("div", {
6955
+ className: TaskManagerPage_module_css_default.searchField,
6956
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Input, {
6957
+ type: "search",
6958
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, {}),
6959
+ "aria-label": t("search.label"),
6960
+ placeholder: t("search.placeholder"),
6961
+ value: search,
6962
+ onChange: (event) => {
6963
+ setSearch(event.target.value);
6964
+ }
6965
+ }), search !== "" && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6966
+ size: "sm",
6967
+ className: TaskManagerPage_module_css_default.searchClear,
6968
+ "aria-label": t("search.clear"),
6969
+ onClick: () => {
6970
+ setSearch("");
6971
+ },
6972
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, {})
6973
+ })]
6974
+ }), statusFilter !== "active" && endedCount > 0 && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
6975
+ open: clearMenu,
6976
+ onClose: () => {
6977
+ setClearMenu(false);
6742
6978
  },
6743
- children: t(value === "all" ? "statusFilter.all" : `status.${value}`)
6744
- }, value))
6745
- })
6746
- }),
6747
- (0, react_jsx_runtime.jsxs)("div", {
6748
- className: TaskManagerPage_module_css_default.searchField,
6749
- children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Input, {
6750
- type: "search",
6751
- icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, {}),
6752
- "aria-label": t("search.label"),
6753
- placeholder: t("search.placeholder"),
6754
- value: search,
6755
- onChange: (event) => {
6756
- setSearch(event.target.value);
6757
- }
6758
- }), search !== "" && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6759
- size: "sm",
6760
- className: TaskManagerPage_module_css_default.searchClear,
6761
- "aria-label": t("search.clear"),
6762
- onClick: () => {
6763
- setSearch("");
6764
- },
6765
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, {})
6766
- })]
6767
- }),
6768
- (0, react_jsx_runtime.jsxs)("div", {
6769
- className: TaskManagerPage_module_css_default.list,
6770
- children: [
6771
- selected === void 0 && (0, react_jsx_runtime.jsx)(CatalogFeedback, {
6772
- status,
6773
- populated: rows.length > 0,
6774
- onRetry,
6775
- t
6776
- }),
6777
- status === "ready" && rows.length === 0 && (0, react_jsx_runtime.jsxs)("div", {
6778
- className: TaskManagerPage_module_css_default.empty,
6779
- role: "status",
6780
- children: [
6781
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconClockOutlineRegular, {
6782
- size: 24,
6783
- className: TaskManagerPage_module_css_default.emptyGlyph
6784
- }),
6785
- (0, react_jsx_runtime.jsx)("h2", { children: t(emptyTitle) }),
6786
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6979
+ align: "end",
6980
+ portal: true,
6981
+ items: [{
6982
+ id: "clear-inactive",
6983
+ label: t(clearing ? "clear.pending" : "clear.action"),
6984
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, {}),
6985
+ danger: true,
6986
+ disabled: clearing || status !== "ready"
6987
+ }],
6988
+ onSelect: () => {
6989
+ setClearMenu(false);
6990
+ clearFocusPending.current = true;
6991
+ setClearConfirm(true);
6992
+ },
6993
+ anchor: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
6994
+ label: t("list.more"),
6995
+ side: "bottom",
6996
+ portal: true,
6997
+ disabled: clearMenu,
6998
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6999
+ ref: clearTriggerRef,
6787
7000
  variant: "outline",
6788
- className: TaskManagerPage_module_css_default.emptyAction,
6789
- onClick: onNewTask,
6790
- children: t("empty.action")
6791
- })
6792
- ]
6793
- }),
6794
- (0, react_jsx_runtime.jsx)("ul", {
6795
- className: TaskManagerPage_module_css_default.listRows,
6796
- "aria-label": t("list.label"),
6797
- "aria-busy": status === "loading",
6798
- children: rows.map((record) => {
6799
- const nextRun = nextRunParts(record.scheduledAt, t("time.locale"), now, t);
6800
- return (0, react_jsx_runtime.jsx)("li", { children: (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6801
- className: clsx(TaskManagerPage_module_css_default.row, selectedId === record.id && TaskManagerPage_module_css_default.selectedRow, record.status === "inactive" && TaskManagerPage_module_css_default.endedRow),
6802
- "aria-label": taskName(record),
6803
- "aria-describedby": `${detailId}-metadata-${record.id}`,
6804
- "aria-expanded": selectedId === record.id,
6805
- "aria-controls": selectedId === record.id ? detailId : void 0,
6806
- onClick: (event) => {
6807
- rowRef.current = event.currentTarget;
6808
- setSelectedId(record.id);
6809
- setTab("rule");
7001
+ className: TaskManagerPage_module_css_default.catalogMore,
7002
+ "aria-label": t("list.more"),
7003
+ "aria-haspopup": "menu",
7004
+ "aria-expanded": clearMenu,
7005
+ "aria-busy": clearing,
7006
+ onClick: () => {
7007
+ setClearMenu((value) => !value);
6810
7008
  },
6811
- children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconClockOutlineRegular, { className: TaskManagerPage_module_css_default.rowGlyph }), (0, react_jsx_runtime.jsxs)("span", {
6812
- className: TaskManagerPage_module_css_default.rowContent,
6813
- children: [(0, react_jsx_runtime.jsx)("span", {
6814
- className: TaskManagerPage_module_css_default.rowTitle,
6815
- children: taskName(record)
6816
- }), (0, react_jsx_runtime.jsxs)("span", {
6817
- className: TaskManagerPage_module_css_default.rowSummary,
6818
- id: `${detailId}-metadata-${record.id}`,
6819
- children: [
6820
- record.status === "inactive" && (0, react_jsx_runtime.jsx)("span", {
6821
- className: TaskManagerPage_module_css_default.metadata,
6822
- children: t("status.inactive")
6823
- }),
6824
- (0, react_jsx_runtime.jsx)("span", {
6825
- className: TaskManagerPage_module_css_default.metadata,
6826
- children: frequency(record)
6827
- }),
6828
- record.status === "active" && (0, react_jsx_runtime.jsxs)("span", {
6829
- className: TaskManagerPage_module_css_default.metadata,
6830
- children: [
6831
- t("list.nextPrefix"),
6832
- (0, react_jsx_runtime.jsx)("time", {
6833
- dateTime: record.scheduledAt,
6834
- children: nextRun.absolute
6835
- }),
6836
- " ",
6837
- (0, react_jsx_runtime.jsx)("span", {
6838
- className: TaskManagerPage_module_css_default.nextRunRelative,
6839
- children: nextRun.relative
6840
- })
6841
- ]
6842
- })
6843
- ]
7009
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEllipsisOutlineRegular, {})
7010
+ })
7011
+ })
7012
+ })]
7013
+ }),
7014
+ (0, react_jsx_runtime.jsxs)("div", {
7015
+ className: TaskManagerPage_module_css_default.list,
7016
+ children: [
7017
+ selected === void 0 && (0, react_jsx_runtime.jsx)(CatalogFeedback, {
7018
+ status,
7019
+ populated: rows.length > 0,
7020
+ onRetry,
7021
+ t
7022
+ }),
7023
+ status === "ready" && rows.length === 0 && (0, react_jsx_runtime.jsxs)("div", {
7024
+ className: TaskManagerPage_module_css_default.empty,
7025
+ role: "status",
7026
+ children: [
7027
+ (0, react_jsx_runtime.jsx)(ScheduleEmptyIllustration, { className: TaskManagerPage_module_css_default.emptyIllustration }),
7028
+ (0, react_jsx_runtime.jsx)("h2", { children: t(emptyTitle) }),
7029
+ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7030
+ variant: "outline",
7031
+ className: TaskManagerPage_module_css_default.emptyAction,
7032
+ onClick: onNewTask,
7033
+ children: t("empty.action")
7034
+ })
7035
+ ]
7036
+ }),
7037
+ (0, react_jsx_runtime.jsx)("ul", {
7038
+ className: TaskManagerPage_module_css_default.listRows,
7039
+ "aria-label": t("list.label"),
7040
+ "aria-busy": status === "loading",
7041
+ children: rows.map((record) => {
7042
+ const nextRun = nextRunParts(record.scheduledAt, t("time.locale"), now, t);
7043
+ return (0, react_jsx_runtime.jsx)("li", { children: (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7044
+ className: clsx(TaskManagerPage_module_css_default.row, selectedId === record.id && TaskManagerPage_module_css_default.selectedRow, record.status === "inactive" && TaskManagerPage_module_css_default.endedRow),
7045
+ "aria-label": taskName(record),
7046
+ "aria-describedby": `${detailId}-metadata-${record.id}`,
7047
+ "aria-expanded": selectedId === record.id,
7048
+ "aria-controls": selectedId === record.id ? detailId : void 0,
7049
+ onClick: (event) => {
7050
+ rowRef.current = event.currentTarget;
7051
+ setSelectedId(record.id);
7052
+ setTab("rule");
7053
+ },
7054
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconClockOutlineRegular, { className: TaskManagerPage_module_css_default.rowGlyph }), (0, react_jsx_runtime.jsxs)("span", {
7055
+ className: TaskManagerPage_module_css_default.rowContent,
7056
+ children: [(0, react_jsx_runtime.jsx)("span", {
7057
+ className: TaskManagerPage_module_css_default.rowTitle,
7058
+ children: taskName(record)
7059
+ }), (0, react_jsx_runtime.jsxs)("span", {
7060
+ className: TaskManagerPage_module_css_default.rowSummary,
7061
+ id: `${detailId}-metadata-${record.id}`,
7062
+ children: [
7063
+ record.status === "inactive" && (0, react_jsx_runtime.jsx)("span", {
7064
+ className: TaskManagerPage_module_css_default.metadata,
7065
+ children: t("status.inactive")
7066
+ }),
7067
+ (0, react_jsx_runtime.jsx)("span", {
7068
+ className: TaskManagerPage_module_css_default.metadata,
7069
+ children: frequency(record)
7070
+ }),
7071
+ record.status === "active" && (0, react_jsx_runtime.jsxs)("span", {
7072
+ className: TaskManagerPage_module_css_default.metadata,
7073
+ children: [
7074
+ t("list.nextPrefix"),
7075
+ (0, react_jsx_runtime.jsx)("time", {
7076
+ dateTime: record.scheduledAt,
7077
+ children: nextRun.absolute
7078
+ }),
7079
+ " ",
7080
+ (0, react_jsx_runtime.jsx)("span", {
7081
+ className: TaskManagerPage_module_css_default.nextRunRelative,
7082
+ children: nextRun.relative
7083
+ })
7084
+ ]
7085
+ })
7086
+ ]
7087
+ })]
6844
7088
  })]
6845
- })]
6846
- }) }, record.id);
7089
+ }) }, record.id);
7090
+ })
6847
7091
  })
6848
- })
6849
- ]
6850
- })
6851
- ]
7092
+ ]
7093
+ })
7094
+ ]
7095
+ })
7096
+ })
7097
+ }),
7098
+ selected !== void 0 && (0, react_jsx_runtime.jsx)(TaskDetail, {
7099
+ ...detail.props,
7100
+ task: selected,
7101
+ authoritative: catalogRecord !== void 0,
7102
+ onDeleted: closeDetails,
7103
+ onClose: closeDetails
7104
+ }),
7105
+ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
7106
+ className: TaskManagerPage_module_css_default.confirmDialog,
7107
+ contentClassName: TaskManagerPage_module_css_default.confirmContent,
7108
+ open: clearConfirm,
7109
+ title: t("clear.title", { count: endedCount }),
7110
+ description: t("clear.description"),
7111
+ closeLabel: t("clear.close"),
7112
+ onClose: () => {
7113
+ if (!clearing) setClearConfirm(false);
7114
+ },
7115
+ footer: (0, react_jsx_runtime.jsxs)("div", {
7116
+ className: TaskManagerPage_module_css_default.confirmActions,
7117
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7118
+ variant: "outline",
7119
+ disabled: clearing,
7120
+ onClick: () => {
7121
+ setClearConfirm(false);
7122
+ },
7123
+ children: t("delete.cancel")
7124
+ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7125
+ variant: "outline",
7126
+ className: TaskManagerPage_module_css_default.deleteButton,
7127
+ "aria-disabled": clearing,
7128
+ onClick: confirmClearEnded,
7129
+ children: t(clearing ? "clear.pending" : "clear.confirm")
7130
+ })]
6852
7131
  })
6853
7132
  })
6854
- }), selected !== void 0 && (0, react_jsx_runtime.jsx)(TaskDetail, {
6855
- ...detail.props,
6856
- task: selected,
6857
- authoritative: catalogRecord !== void 0,
6858
- onDeleted: closeDetails,
6859
- onClose: closeDetails
6860
- })]
7133
+ ]
6861
7134
  });
6862
7135
  }
6863
7136
  //#endregion
@@ -7001,6 +7274,348 @@ window.__ModuleLoader__.load({
7001
7274
  "relative.future": "in {value} {unit}",
7002
7275
  "relative.overdue": "{value} {unit} overdue"
7003
7276
  };
7277
+ /** Japanese copy, checked against the English keys. */
7278
+ const frequencyJa = {
7279
+ "time.locale": "ja-JP",
7280
+ "time.utcPrefix": "UTC",
7281
+ "frequency.daily": "毎日 {time} ({timeZone})",
7282
+ "frequency.dailyLocal": "毎日 {time}",
7283
+ "frequency.weekly": "毎週 {weekdays} の {time} ({timeZone})",
7284
+ "frequency.weeklyLocal": "毎週 {weekdays} の {time}",
7285
+ "frequency.cron": "Cron {expression} ({timeZone})",
7286
+ "frequency.cronLocal": "Cron {expression}",
7287
+ "frequency.cronRule": "{rule} ({timeZone})",
7288
+ "cron.list.join": "、",
7289
+ "cron.part.join": " ",
7290
+ "cron.weekday.name": "{weekday}",
7291
+ "cron.weekday.range": "{from}〜{to}",
7292
+ "cron.months": " {months}",
7293
+ "cron.day.every": "毎日{months}",
7294
+ "cron.day.weekdays": "{weekdays}{months}",
7295
+ "cron.day.monthDays": "毎月{days}日{months}",
7296
+ "cron.day.both": "毎月{days}日または{weekdays}{months}",
7297
+ "cron.day.bothStarred": "毎月{days}日と{weekdays}{months}",
7298
+ "cron.hours.range": "{from}〜{to}",
7299
+ "cron.hours.list": "{hours}",
7300
+ "cron.time.everyMinute": "毎分",
7301
+ "cron.time.everyMinutes": "{step}分ごと",
7302
+ "cron.time.joinedEveryMinute": "毎分",
7303
+ "cron.time.joinedEveryMinutes": "{step}分ごと",
7304
+ "cron.time.everyHour": "毎時",
7305
+ "cron.time.joinedEveryHour": "毎時",
7306
+ "cron.time.everyNHours": "{count}時間ごと",
7307
+ "cron.time.joinedEveryNHours": "{count}時間ごと",
7308
+ "cron.time.hourlyAt": "毎時{minutes}分",
7309
+ "cron.time.joinedHourlyAt": "毎時{minutes}分",
7310
+ "cron.time.hoursEveryMinute": "{hours}時の毎分",
7311
+ "cron.time.hoursEveryMinutes": "{hours}時の{step}分ごと",
7312
+ "cron.time.at": "{times}に",
7313
+ "cron.time.hoursAt": "{hours}時の{minutes}分に",
7314
+ "frequency.weekday.join": "、",
7315
+ "frequency.weekday.1": "月",
7316
+ "frequency.weekday.2": "火",
7317
+ "frequency.weekday.3": "水",
7318
+ "frequency.weekday.4": "木",
7319
+ "frequency.weekday.5": "金",
7320
+ "frequency.weekday.6": "土",
7321
+ "frequency.weekday.7": "日",
7322
+ "unit.day.one": "日",
7323
+ "unit.day.other": "日",
7324
+ "unit.hour.one": "時間",
7325
+ "unit.hour.other": "時間",
7326
+ "unit.minute.one": "分",
7327
+ "unit.minute.other": "分",
7328
+ "unit.second.one": "秒",
7329
+ "unit.second.other": "秒",
7330
+ "relative.now": "まもなく期限",
7331
+ "relative.future": "{value}{unit}後",
7332
+ "relative.overdue": "{value}{unit}超過"
7333
+ };
7334
+ /** Spanish dictionary, checked against the English keys. */
7335
+ const frequencyEs = {
7336
+ "time.locale": "en",
7337
+ "time.utcPrefix": "UTC",
7338
+ "frequency.daily": "Diariamente en {time} ({timeZone})",
7339
+ "frequency.dailyLocal": "Diariamente en {time}",
7340
+ "frequency.weekly": "Semanalmente en {weekdays} en {time} ({timeZone})",
7341
+ "frequency.weeklyLocal": "Semanalmente en {weekdays} en {time}",
7342
+ "frequency.cron": "Cron {expression} ({timeZone})",
7343
+ "frequency.cronLocal": "Cron {expression}",
7344
+ "frequency.cronRule": "{rule} ({timeZone})",
7345
+ "cron.list.join": ", ",
7346
+ "cron.part.join": " ",
7347
+ "cron.weekday.name": "{weekday}",
7348
+ "cron.weekday.range": "{from}–{to}",
7349
+ "cron.months": " en {months}",
7350
+ "cron.day.every": "Todos los días{months}",
7351
+ "cron.day.weekdays": "{weekdays}{months}",
7352
+ "cron.day.monthDays": "Día {days} de cada mes{months}",
7353
+ "cron.day.both": "Día {days} de cada mes o {weekdays}{months}",
7354
+ "cron.day.bothStarred": "Día {days} de cada mes y {weekdays}{months}",
7355
+ "cron.hours.range": "{from}–{to}",
7356
+ "cron.hours.list": "{hours}",
7357
+ "cron.time.everyMinute": "cada minuto",
7358
+ "cron.time.everyMinutes": "Cada minutos {step}",
7359
+ "cron.time.joinedEveryMinute": "cada minuto",
7360
+ "cron.time.joinedEveryMinutes": "cada {step} minutos",
7361
+ "cron.time.everyHour": "cada hora",
7362
+ "cron.time.joinedEveryHour": "cada hora",
7363
+ "cron.time.everyNHours": "Cada horas {count}",
7364
+ "cron.time.joinedEveryNHours": "cada horas {count}",
7365
+ "cron.time.hourlyAt": "Cada hora al minuto {minutes}",
7366
+ "cron.time.joinedHourlyAt": "cada hora al minuto {minutes}",
7367
+ "cron.time.hoursEveryMinute": "cada minuto durante las horas {hours}",
7368
+ "cron.time.hoursEveryMinutes": "cada {step} minutos durante las horas {hours}",
7369
+ "cron.time.at": "en {times}",
7370
+ "cron.time.hoursAt": "al minuto {minutes} de horas {hours}",
7371
+ "frequency.weekday.join": ", ",
7372
+ "frequency.weekday.1": "lun",
7373
+ "frequency.weekday.2": "mar",
7374
+ "frequency.weekday.3": "mié",
7375
+ "frequency.weekday.4": "jueves",
7376
+ "frequency.weekday.5": "viernes",
7377
+ "frequency.weekday.6": "sábado",
7378
+ "frequency.weekday.7": "sol",
7379
+ "unit.day.one": "dia",
7380
+ "unit.day.other": "dias",
7381
+ "unit.hour.one": "hora",
7382
+ "unit.hour.other": "horas",
7383
+ "unit.minute.one": "minuto",
7384
+ "unit.minute.other": "minutos",
7385
+ "unit.second.one": "segundo",
7386
+ "unit.second.other": "segundos",
7387
+ "relative.now": "Vencimiento ahora",
7388
+ "relative.future": "en {value} {unit}",
7389
+ "relative.overdue": "{value} {unit} vencido"
7390
+ };
7391
+ /** French dictionary, checked against the English keys. */
7392
+ const frequencyFr = {
7393
+ "time.locale": "en",
7394
+ "time.utcPrefix": "UTC",
7395
+ "frequency.daily": "Tous les jours à {time} ({timeZone})",
7396
+ "frequency.dailyLocal": "Tous les jours à {time}",
7397
+ "frequency.weekly": "Hebdomadaire sur {weekdays} à {time} ({timeZone})",
7398
+ "frequency.weeklyLocal": "Hebdomadaire sur {weekdays} à {time}",
7399
+ "frequency.cron": "Cron {expression} ({timeZone})",
7400
+ "frequency.cronLocal": "Cron {expression}",
7401
+ "frequency.cronRule": "{rule} ({timeZone})",
7402
+ "cron.list.join": ", ",
7403
+ "cron.part.join": " ",
7404
+ "cron.weekday.name": "{weekday}",
7405
+ "cron.weekday.range": "{from}–{to}",
7406
+ "cron.months": " dans {months}",
7407
+ "cron.day.every": "Chaque jour{months}",
7408
+ "cron.day.weekdays": "{weekdays}{months}",
7409
+ "cron.day.monthDays": "Jour {days} de chaque mois{months}",
7410
+ "cron.day.both": "Jour {days} de chaque mois ou {weekdays}{months}",
7411
+ "cron.day.bothStarred": "Jour {days} de chaque mois et {weekdays}{months}",
7412
+ "cron.hours.range": "{from}–{to}",
7413
+ "cron.hours.list": "{hours}",
7414
+ "cron.time.everyMinute": "Chaque minute",
7415
+ "cron.time.everyMinutes": "Toutes les minutes {step}",
7416
+ "cron.time.joinedEveryMinute": "chaque minute",
7417
+ "cron.time.joinedEveryMinutes": "toutes les minutes {step}",
7418
+ "cron.time.everyHour": "Toutes les heures",
7419
+ "cron.time.joinedEveryHour": "toutes les heures",
7420
+ "cron.time.everyNHours": "Toutes les heures {count}",
7421
+ "cron.time.joinedEveryNHours": "toutes les heures {count}",
7422
+ "cron.time.hourlyAt": "Toutes les heures à la minute {minutes}",
7423
+ "cron.time.joinedHourlyAt": "toutes les heures à la minute {minutes}",
7424
+ "cron.time.hoursEveryMinute": "toutes les minutes pendant les heures {hours}",
7425
+ "cron.time.hoursEveryMinutes": "toutes les minutes {step} pendant les heures {hours}",
7426
+ "cron.time.at": "chez {times}",
7427
+ "cron.time.hoursAt": "à la minute {minutes} des heures {hours}",
7428
+ "frequency.weekday.join": ", ",
7429
+ "frequency.weekday.1": "lundi",
7430
+ "frequency.weekday.2": "mar.",
7431
+ "frequency.weekday.3": "mer",
7432
+ "frequency.weekday.4": "jeu.",
7433
+ "frequency.weekday.5": "vendredi",
7434
+ "frequency.weekday.6": "Samedi",
7435
+ "frequency.weekday.7": "Soleil",
7436
+ "unit.day.one": "jour",
7437
+ "unit.day.other": "jours",
7438
+ "unit.hour.one": "heure",
7439
+ "unit.hour.other": "heures",
7440
+ "unit.minute.one": "minute",
7441
+ "unit.minute.other": "minutes",
7442
+ "unit.second.one": "seconde",
7443
+ "unit.second.other": "secondes",
7444
+ "relative.now": "À rendre maintenant",
7445
+ "relative.future": "dans {value} {unit}",
7446
+ "relative.overdue": "{value} {unit} en retard"
7447
+ };
7448
+ /** German dictionary, checked against the English keys. */
7449
+ const frequencyDe = {
7450
+ "time.locale": "en",
7451
+ "time.utcPrefix": "UTC",
7452
+ "frequency.daily": "Täglich um {time} ({timeZone})",
7453
+ "frequency.dailyLocal": "Täglich um {time}",
7454
+ "frequency.weekly": "Wöchentlich auf {weekdays} um {time} ({timeZone})",
7455
+ "frequency.weeklyLocal": "Wöchentlich auf {weekdays} und {time}",
7456
+ "frequency.cron": "Cron {expression} ({timeZone})",
7457
+ "frequency.cronLocal": "Cron {expression}",
7458
+ "frequency.cronRule": "{rule} ({timeZone})",
7459
+ "cron.list.join": ", ",
7460
+ "cron.part.join": " ",
7461
+ "cron.weekday.name": "{weekday}",
7462
+ "cron.weekday.range": "{from}–{to}",
7463
+ "cron.months": " in {months}",
7464
+ "cron.day.every": "Jeden Tag{months}",
7465
+ "cron.day.weekdays": "{weekdays}{months}",
7466
+ "cron.day.monthDays": "Tag {days} jedes Monats{months}",
7467
+ "cron.day.both": "Tag {days} eines jeden Monats oder {weekdays}{months}",
7468
+ "cron.day.bothStarred": "Tag {days} jedes Monats und {weekdays}{months}",
7469
+ "cron.hours.range": "{from}–{to}",
7470
+ "cron.hours.list": "{hours}",
7471
+ "cron.time.everyMinute": "Jede Minute",
7472
+ "cron.time.everyMinutes": "Alle {step} Minuten",
7473
+ "cron.time.joinedEveryMinute": "jede Minute",
7474
+ "cron.time.joinedEveryMinutes": "alle {step} Minuten",
7475
+ "cron.time.everyHour": "Jede Stunde",
7476
+ "cron.time.joinedEveryHour": "jede Stunde",
7477
+ "cron.time.everyNHours": "Alle {count} Stunden",
7478
+ "cron.time.joinedEveryNHours": "alle {count} Stunden",
7479
+ "cron.time.hourlyAt": "Jede Stunde im Minutentakt {minutes}",
7480
+ "cron.time.joinedHourlyAt": "jede Stunde im Minutentakt {minutes}",
7481
+ "cron.time.hoursEveryMinute": "jede Minute während der Stunden {hours}",
7482
+ "cron.time.hoursEveryMinutes": "alle {step} Minuten während der Stunden {hours}",
7483
+ "cron.time.at": "bei {times}",
7484
+ "cron.time.hoursAt": "zur Minute {minutes} der Stunden {hours}",
7485
+ "frequency.weekday.join": ", ",
7486
+ "frequency.weekday.1": "Mo",
7487
+ "frequency.weekday.2": "Di",
7488
+ "frequency.weekday.3": "Mi",
7489
+ "frequency.weekday.4": "Do",
7490
+ "frequency.weekday.5": "Fr",
7491
+ "frequency.weekday.6": "Sa",
7492
+ "frequency.weekday.7": "Sonne",
7493
+ "unit.day.one": "Tag",
7494
+ "unit.day.other": "Tage",
7495
+ "unit.hour.one": "Stunde",
7496
+ "unit.hour.other": "Stunden",
7497
+ "unit.minute.one": "Minute",
7498
+ "unit.minute.other": "Minuten",
7499
+ "unit.second.one": "zweitens",
7500
+ "unit.second.other": "Sekunden",
7501
+ "relative.now": "Jetzt fällig",
7502
+ "relative.future": "in {value} {unit}",
7503
+ "relative.overdue": "{value} {unit} überfällig"
7504
+ };
7505
+ /** Russian dictionary, checked against the English keys. */
7506
+ const frequencyRu = {
7507
+ "time.locale": "en",
7508
+ "time.utcPrefix": "UTC",
7509
+ "frequency.daily": "Ежедневно по адресу {time} ({timeZone})",
7510
+ "frequency.dailyLocal": "Ежедневно в {time}",
7511
+ "frequency.weekly": "Еженедельно на {weekdays} по адресу {time} ({timeZone})",
7512
+ "frequency.weeklyLocal": "Еженедельно на {weekdays} по адресу {time}",
7513
+ "frequency.cron": "Крон {expression} ({timeZone})",
7514
+ "frequency.cronLocal": "Крон {expression}",
7515
+ "frequency.cronRule": "{rule} ({timeZone})",
7516
+ "cron.list.join": ", ",
7517
+ "cron.part.join": " ",
7518
+ "cron.weekday.name": "{weekday}",
7519
+ "cron.weekday.range": "{from} – {to}",
7520
+ "cron.months": " в {months}",
7521
+ "cron.day.every": "Каждый день{months}",
7522
+ "cron.day.weekdays": "{weekdays}{months}",
7523
+ "cron.day.monthDays": "День {days} каждого месяца{months}",
7524
+ "cron.day.both": "День {days} каждого месяца или {weekdays}{months}.",
7525
+ "cron.day.bothStarred": "День {days} каждого месяца и {weekdays}{months}.",
7526
+ "cron.hours.range": "{from} – {to}",
7527
+ "cron.hours.list": "{hours}",
7528
+ "cron.time.everyMinute": "Каждую минуту",
7529
+ "cron.time.everyMinutes": "Каждые {step} минут",
7530
+ "cron.time.joinedEveryMinute": "каждую минуту",
7531
+ "cron.time.joinedEveryMinutes": "каждые {step} минут",
7532
+ "cron.time.everyHour": "Каждый час",
7533
+ "cron.time.joinedEveryHour": "каждый час",
7534
+ "cron.time.everyNHours": "Каждые {count} часов",
7535
+ "cron.time.joinedEveryNHours": "каждые {count} часов",
7536
+ "cron.time.hourlyAt": "Каждый час в минуту {minutes}",
7537
+ "cron.time.joinedHourlyAt": "каждый час в минуту {minutes}",
7538
+ "cron.time.hoursEveryMinute": "каждую минуту в течение часов {hours}",
7539
+ "cron.time.hoursEveryMinutes": "каждые {step} минуты в течение часов {hours}",
7540
+ "cron.time.at": "в {times}",
7541
+ "cron.time.hoursAt": "в минуту {minutes} часов {hours}",
7542
+ "frequency.weekday.join": ", ",
7543
+ "frequency.weekday.1": "Пн.",
7544
+ "frequency.weekday.2": "Вт",
7545
+ "frequency.weekday.3": "ср.",
7546
+ "frequency.weekday.4": "Чт",
7547
+ "frequency.weekday.5": "Пт",
7548
+ "frequency.weekday.6": "Суббота",
7549
+ "frequency.weekday.7": "Солнце",
7550
+ "unit.day.one": "день",
7551
+ "unit.day.other": "дни",
7552
+ "unit.hour.one": "час",
7553
+ "unit.hour.other": "часы",
7554
+ "unit.minute.one": "минута",
7555
+ "unit.minute.other": "минуты",
7556
+ "unit.second.one": "второй",
7557
+ "unit.second.other": "секунды",
7558
+ "relative.now": "Срок оплаты сейчас",
7559
+ "relative.future": "в {value} {unit}",
7560
+ "relative.overdue": "{value} {unit} просрочен"
7561
+ };
7562
+ /** Portuguese dictionary, checked against the English keys. */
7563
+ const frequencyPt = {
7564
+ "time.locale": "en",
7565
+ "time.utcPrefix": "UTC",
7566
+ "frequency.daily": "Diariamente às {time} ({timeZone})",
7567
+ "frequency.dailyLocal": "Diariamente às {time}",
7568
+ "frequency.weekly": "Semanalmente em {weekdays} às {time} ({timeZone})",
7569
+ "frequency.weeklyLocal": "Semanalmente em {weekdays} às {time}",
7570
+ "frequency.cron": "Cron {expression} ({timeZone})",
7571
+ "frequency.cronLocal": "Cron {expression}",
7572
+ "frequency.cronRule": "{rule} ({timeZone})",
7573
+ "cron.list.join": ", ",
7574
+ "cron.part.join": " ",
7575
+ "cron.weekday.name": "{weekday}",
7576
+ "cron.weekday.range": "{from}–{to}",
7577
+ "cron.months": " em {months}",
7578
+ "cron.day.every": "Todos os dias{months}",
7579
+ "cron.day.weekdays": "{weekdays}{months}",
7580
+ "cron.day.monthDays": "Dia {days} de cada mês{months}",
7581
+ "cron.day.both": "Dia {days} de cada mês ou {weekdays}{months}",
7582
+ "cron.day.bothStarred": "Dia {days} de cada mês e {weekdays}{months}",
7583
+ "cron.hours.range": "{from}–{to}",
7584
+ "cron.hours.list": "{hours}",
7585
+ "cron.time.everyMinute": "Cada minuto",
7586
+ "cron.time.everyMinutes": "A cada {step} minutos",
7587
+ "cron.time.joinedEveryMinute": "cada minuto",
7588
+ "cron.time.joinedEveryMinutes": "a cada {step} minutos",
7589
+ "cron.time.everyHour": "A cada hora",
7590
+ "cron.time.joinedEveryHour": "a cada hora",
7591
+ "cron.time.everyNHours": "A cada {count} horas",
7592
+ "cron.time.joinedEveryNHours": "a cada {count} horas",
7593
+ "cron.time.hourlyAt": "A cada hora, minuto {minutes}",
7594
+ "cron.time.joinedHourlyAt": "a cada hora por minuto {minutes}",
7595
+ "cron.time.hoursEveryMinute": "a cada minuto durante horas {hours}",
7596
+ "cron.time.hoursEveryMinutes": "a cada {step} minutos durante horas {hours}",
7597
+ "cron.time.at": "em {times}",
7598
+ "cron.time.hoursAt": "no minuto {minutes} das horas {hours}",
7599
+ "frequency.weekday.join": ", ",
7600
+ "frequency.weekday.1": "segunda-feira",
7601
+ "frequency.weekday.2": "Terça",
7602
+ "frequency.weekday.3": "Quarta",
7603
+ "frequency.weekday.4": "Qui",
7604
+ "frequency.weekday.5": "Sexta-feira",
7605
+ "frequency.weekday.6": "Sábado",
7606
+ "frequency.weekday.7": "Sol",
7607
+ "unit.day.one": "dia",
7608
+ "unit.day.other": "dias",
7609
+ "unit.hour.one": "hora",
7610
+ "unit.hour.other": "horas",
7611
+ "unit.minute.one": "minuto",
7612
+ "unit.minute.other": "minutos",
7613
+ "unit.second.one": "segundo",
7614
+ "unit.second.other": "segundos",
7615
+ "relative.now": "Vencimento agora",
7616
+ "relative.future": "em {value} {unit}",
7617
+ "relative.overdue": "{value} {unit} atrasado"
7618
+ };
7004
7619
  //#endregion
7005
7620
  //#region lib/types/client/locales.js
7006
7621
  /**
@@ -7049,6 +7664,126 @@ window.__ModuleLoader__.load({
7049
7664
  "mark.aria": "{count} scheduled tasks",
7050
7665
  "hover.more": "{count} more"
7051
7666
  };
7667
+ /** Japanese copy, checked against the English keys. */
7668
+ const ja$1 = {
7669
+ ...frequencyJa,
7670
+ "trigger.label": "リマインダー",
7671
+ "list.loading": "リマインダーを読み込み中…",
7672
+ "list.error": "リマインダーを読み込めませんでした。",
7673
+ "list.retry": "再試行",
7674
+ "delete.action": "削除",
7675
+ "delete.pending": "削除中…",
7676
+ "delete.label": "リマインダーを削除: {title}",
7677
+ "list.open": "リマインダーの詳細を開く: {title}",
7678
+ "trigger.one": "{count}件のリマインダー",
7679
+ "trigger.other": "{count}件のリマインダー",
7680
+ "list.aria": "有効なリマインダー",
7681
+ "list.nextRun": "次回実行",
7682
+ "frequency.once": "1回のみ",
7683
+ "frequency.every": "{value}{unit}ごと",
7684
+ "mark.aria": "スケジュールされたタスク {count}件",
7685
+ "hover.more": "他 {count}件"
7686
+ };
7687
+ /** Spanish dictionary, checked against the English keys. */
7688
+ const es$1 = {
7689
+ "trigger.label": "Recordatorios",
7690
+ "list.loading": "Cargando recordatorios…",
7691
+ "list.error": "No se pudieron cargar los recordatorios.",
7692
+ "list.retry": "Reintentar",
7693
+ "delete.action": "Eliminar",
7694
+ "delete.pending": "Eliminando…",
7695
+ "delete.label": "Eliminar recordatorio: {title}",
7696
+ "list.open": "Abrir detalles del recordatorio: {title}",
7697
+ "trigger.one": "Recordatorio de {count}",
7698
+ "trigger.other": "Recordatorios de {count}",
7699
+ "list.aria": "Recordatorios activos",
7700
+ "list.nextRun": "Próxima ejecución",
7701
+ "frequency.once": "una vez",
7702
+ "frequency.every": "Cada {value} {unit}",
7703
+ ...frequencyEs,
7704
+ "mark.aria": "Tareas programadas {count}",
7705
+ "hover.more": "{count} más"
7706
+ };
7707
+ /** French dictionary, checked against the English keys. */
7708
+ const fr$1 = {
7709
+ "trigger.label": "Rappels",
7710
+ "list.loading": "Chargement des rappels…",
7711
+ "list.error": "Impossible de charger les rappels.",
7712
+ "list.retry": "Réessayer",
7713
+ "delete.action": "Supprimer",
7714
+ "delete.pending": "Suppression…",
7715
+ "delete.label": "Supprimer le rappel\xA0: {title}",
7716
+ "list.open": "Détails du rappel ouvert\xA0: {title}",
7717
+ "trigger.one": "Rappel {count}",
7718
+ "trigger.other": "Rappels {count}",
7719
+ "list.aria": "Rappels actifs",
7720
+ "list.nextRun": "Prochaine exécution",
7721
+ "frequency.once": "Une fois",
7722
+ "frequency.every": "Chaque {value} {unit}",
7723
+ ...frequencyFr,
7724
+ "mark.aria": "Tâches planifiées {count}",
7725
+ "hover.more": "{count} plus"
7726
+ };
7727
+ /** German dictionary, checked against the English keys. */
7728
+ const de$1 = {
7729
+ "trigger.label": "Erinnerungen",
7730
+ "list.loading": "Erinnerungen werden geladen…",
7731
+ "list.error": "Erinnerungen konnten nicht geladen werden.",
7732
+ "list.retry": "Erneut versuchen",
7733
+ "delete.action": "Löschen",
7734
+ "delete.pending": "Löschen…",
7735
+ "delete.label": "Erinnerung löschen: {title}",
7736
+ "list.open": "Offene Erinnerungsdetails: {title}",
7737
+ "trigger.one": "{count} Erinnerung",
7738
+ "trigger.other": "{count} Erinnerungen",
7739
+ "list.aria": "Aktive Erinnerungen",
7740
+ "list.nextRun": "Nächster Lauf",
7741
+ "frequency.once": "Einmal",
7742
+ "frequency.every": "Jeder {value} {unit}",
7743
+ ...frequencyDe,
7744
+ "mark.aria": "{count} geplante Aufgaben",
7745
+ "hover.more": "{count} mehr"
7746
+ };
7747
+ /** Russian dictionary, checked against the English keys. */
7748
+ const ru$1 = {
7749
+ "trigger.label": "Напоминания",
7750
+ "list.loading": "Загрузка напоминаний…",
7751
+ "list.error": "Не удалось загрузить напоминания.",
7752
+ "list.retry": "Повторить",
7753
+ "delete.action": "Удалить",
7754
+ "delete.pending": "Удаление…",
7755
+ "delete.label": "Удалить напоминание: {title}",
7756
+ "list.open": "Открыть детали напоминания: {title}.",
7757
+ "trigger.one": "{count} напоминание",
7758
+ "trigger.other": "{count} напоминания",
7759
+ "list.aria": "Активные напоминания",
7760
+ "list.nextRun": "Следующий запуск",
7761
+ "frequency.once": "Однажды",
7762
+ "frequency.every": "Каждый {value} {unit}",
7763
+ ...frequencyRu,
7764
+ "mark.aria": "{count} запланированные задачи",
7765
+ "hover.more": "{count} подробнее"
7766
+ };
7767
+ /** Portuguese dictionary, checked against the English keys. */
7768
+ const pt$1 = {
7769
+ "trigger.label": "Lembretes",
7770
+ "list.loading": "Carregando lembretes…",
7771
+ "list.error": "Não foi possível carregar os lembretes.",
7772
+ "list.retry": "Tentar novamente",
7773
+ "delete.action": "Excluir",
7774
+ "delete.pending": "Excluindo…",
7775
+ "delete.label": "Excluir lembrete: {title}",
7776
+ "list.open": "Detalhes do lembrete aberto: {title}",
7777
+ "trigger.one": "{count} lembrete",
7778
+ "trigger.other": "{count} lembretes",
7779
+ "list.aria": "Lembretes ativos",
7780
+ "list.nextRun": "Próxima execução",
7781
+ "frequency.once": "Uma vez",
7782
+ "frequency.every": "A cada {value} {unit}",
7783
+ ...frequencyPt,
7784
+ "mark.aria": "{count} tarefas agendadas",
7785
+ "hover.more": "{count} mais"
7786
+ };
7052
7787
  //#endregion
7053
7788
  //#region lib/types/client/task-manager-locales.js
7054
7789
  /** Copy for the retained-reminder task manager's `schedule.manager` namespace. */
@@ -7183,8 +7918,19 @@ window.__ModuleLoader__.load({
7183
7918
  "delete.cancel": "Cancel",
7184
7919
  "delete.close": "Close deletion confirmation",
7185
7920
  "delete.pending": "Deleting…",
7921
+ "list.more": "More task actions",
7922
+ "clear.action": "Clear all inactive tasks",
7923
+ "clear.title": "Clear inactive tasks ({count})?",
7924
+ "clear.description": "These tasks and their saved delivery records will be permanently deleted. Enabled tasks, original sessions, and queued messages are not affected.",
7925
+ "clear.confirm": "Clear tasks",
7926
+ "clear.pending": "Clearing…",
7927
+ "clear.close": "Close clear confirmation",
7186
7928
  "toast.deleted": "Task deleted.",
7187
7929
  "toast.deleteFailed": "Could not delete the task.",
7930
+ "toast.cleared.one": "Cleared {count} inactive task.",
7931
+ "toast.cleared.other": "Cleared {count} inactive tasks.",
7932
+ "toast.clearedNone": "No inactive tasks to clear.",
7933
+ "toast.clearFailed": "Could not clear tasks.",
7188
7934
  "card.open": "Open",
7189
7935
  "card.openLabel": "Open task details: {title}",
7190
7936
  "card.deleted": "Deleted",
@@ -7321,13 +8067,918 @@ window.__ModuleLoader__.load({
7321
8067
  "delete.cancel": "取消",
7322
8068
  "delete.close": "关闭删除确认",
7323
8069
  "delete.pending": "正在删除…",
8070
+ "list.more": "更多任务操作",
8071
+ "clear.action": "清除全部已结束任务",
8072
+ "clear.title": "清除 {count} 个已结束任务?",
8073
+ "clear.description": "这些任务及其运行记录将被永久删除,已开启任务、原会话和已排队消息等不受影响。",
8074
+ "clear.confirm": "确认清除",
8075
+ "clear.pending": "正在清理…",
8076
+ "clear.close": "关闭清理确认",
7324
8077
  "toast.deleted": "任务已删除",
7325
8078
  "toast.deleteFailed": "无法删除任务",
8079
+ "toast.cleared.one": "已清除 {count} 个已结束任务",
8080
+ "toast.cleared.other": "已清除 {count} 个已结束任务",
8081
+ "toast.clearedNone": "没有可清理的已结束任务",
8082
+ "toast.clearFailed": "清除任务失败",
7326
8083
  "card.open": "打开",
7327
8084
  "card.openLabel": "打开任务详情:{title}",
7328
8085
  "card.deleted": "已删除",
7329
8086
  "tool.invoked": "已调用 {name}"
7330
8087
  };
8088
+ /** Japanese copy, checked against the English keys. */
8089
+ const ja = {
8090
+ ...frequencyJa,
8091
+ "panel": "自動化タスク",
8092
+ "title": "自動化タスク",
8093
+ "new.action": "新規",
8094
+ "list.label": "タスク一覧",
8095
+ "list.nextPrefix": "次回予定日時: ",
8096
+ "list.loading": "タスクを読み込み中…",
8097
+ "list.error": "タスクを読み込めませんでした。",
8098
+ "list.retry": "再試行",
8099
+ "list.empty": "タスクはまだありません。セッションで作成したタスクがここに表示されます。",
8100
+ "list.emptyInactive": "無効な自動化タスクはありません",
8101
+ "list.noMatches": "一致するタスクはありません",
8102
+ "search.label": "タスクを検索",
8103
+ "search.placeholder": "自動化タスクを検索",
8104
+ "search.clear": "検索をクリア",
8105
+ "empty.action": "新規自動化タスク",
8106
+ "statusFilter.label": "タスクの状態",
8107
+ "statusFilter.all": "すべて",
8108
+ "status.active": "有効",
8109
+ "status.inactive": "無効",
8110
+ "detail.label": "タスクの詳細",
8111
+ "detail.close": "詳細を閉じる",
8112
+ "detail.more": "自動化タスクの操作",
8113
+ "detail.nextRun": "次回実行",
8114
+ "detail.tabs": "タスク詳細ビュー",
8115
+ "detail.rule": "ルール",
8116
+ "detail.records": "記録",
8117
+ "delivery.empty": "配信記録はありません",
8118
+ "delivery.loading": "配信記録を読み込み中…",
8119
+ "delivery.error": "配信記録を読み込めませんでした。",
8120
+ "delivery.notFound": "このタスクは利用できなくなりました。",
8121
+ "delivery.cursorError": "記録が更新されました。",
8122
+ "delivery.retry": "再試行",
8123
+ "delivery.refresh": "更新",
8124
+ "delivery.loadMore": "さらに読み込む",
8125
+ "delivery.expand": "展開",
8126
+ "delivery.collapse": "折りたたむ",
8127
+ "delivery.pruned": "以前の配信記録は削除されました",
8128
+ "delivery.retention": "保持ルール",
8129
+ "delivery.retentionBounds": "各タスクは過去 {days} 日間の配信記録を最大 {records} 件保持します。",
8130
+ "delivery.retentionExplanation": "新しい記録を保存すると、これらの上限を超えた古い記録は自動的に削除されます。記録を削除してもタスクは停止しません。",
8131
+ "detail.name": "自動化タスク名",
8132
+ "detail.instruction": "自動化タスクの指示",
8133
+ "detail.status": "状態",
8134
+ "detail.next": "次回予定日時",
8135
+ "detail.frequency": "頻度",
8136
+ "detail.id": "タスク ID",
8137
+ "detail.session": "リンクされたセッション",
8138
+ "detail.openSession": "リンクされたセッション: 元のセッションを開く",
8139
+ "detail.openSessionTitle": "リンクされたセッション {title}: 元のセッションを開く",
8140
+ "detail.sessionLoading": "元のセッション情報を読み込み中。",
8141
+ "detail.sessionArchived": "元のセッションはアーカイブされています。",
8142
+ "detail.sessionUnavailable": "元のセッションは利用できません。",
8143
+ "detail.missing": "タスクを利用できません。削除された可能性があります。",
8144
+ "delivery.label": "保存済みの配信記録",
8145
+ "frequency.once": "1回のみ",
8146
+ "frequency.every": "{value}{unit}ごと",
8147
+ "timing.date": "日付",
8148
+ "timing.time": "時刻",
8149
+ "timing.hour": "時",
8150
+ "timing.minute": "分",
8151
+ "timing.second": "秒",
8152
+ "timing.prevMonth": "前月",
8153
+ "timing.nextMonth": "翌月",
8154
+ "timing.zone": "タイムゾーン",
8155
+ "timing.zoneSearch": "UTCオフセット、IANA ID、都市名で検索",
8156
+ "timing.zoneNoResults": "一致するタイムゾーンがありません",
8157
+ "timing.interval": "繰り返し間隔",
8158
+ "timing.intervalIncrease": "間隔を増やす",
8159
+ "timing.intervalDecrease": "間隔を減らす",
8160
+ "timing.unit.hour": "時間",
8161
+ "timing.unit.minute": "分",
8162
+ "timing.unit.second": "秒",
8163
+ "timing.intervalHint.hour": "1時間以上を指定してください。間隔はタスクの作成時または最後のルール変更時から数え、タイムゾーンには依存しません。",
8164
+ "timing.intervalHint.minute": "1分以上を指定してください。間隔はタスクの作成時または最後のルール変更時から数え、タイムゾーンには依存しません。",
8165
+ "timing.intervalHint.second": "60秒以上を指定してください。間隔はタスクの作成時または最後のルール変更時から数え、タイムゾーンには依存しません。",
8166
+ "timing.zoneNoStored": "1回のみのタスクは実行時刻のみを保存し、タイムゾーンは保存しません。日付と時刻は選択したタイムゾーンで解釈されます。",
8167
+ "timing.inactive": "無効なタスクは読み取り専用です。タイミングは編集できません。",
8168
+ "timing.conflict": "編集中にこのタスクが変更されました。下書きは保持されています。最新のルールを編集するには、キャンセルして再読み込み後に開き直してください。",
8169
+ "timing.notFound": "このタスクは利用できなくなりました。下書きは保持されています。キャンセルするとエディターを閉じます。",
8170
+ "timing.subagentSession": "このセッションはサブエージェントのものであり、配信リマインダーを受け取りません。",
8171
+ "timing.invalid": "有効な日付と時刻を入力するか、タイミングの各項目を確認してください。",
8172
+ "timing.invalidZone": "有効なIANAタイムゾーンを入力してください(例: Asia/Shanghai)。",
8173
+ "timing.notFuture": "未来の日付と時刻を選択してください。",
8174
+ "timing.invalidInterval": "1分以上の間隔を入力してください。",
8175
+ "timing.invalidInterval.hour": "1時間以上の間隔を入力してください。",
8176
+ "timing.invalidInterval.minute": "1分以上の間隔を入力してください。",
8177
+ "timing.invalidInterval.second": "60秒以上の間隔を入力してください。",
8178
+ "timing.error": "タイミングの更新を確認できませんでした。下書きは保持されています。タスクを確認してから再試行してください。",
8179
+ "rule.title": "実行時刻",
8180
+ "rule.repeat": "繰り返し",
8181
+ "rule.weekday": "曜日",
8182
+ "rule.weekdayOption": "{weekday}曜日",
8183
+ "rule.unsaved": "未保存の変更",
8184
+ "rule.save": "変更を保存",
8185
+ "rule.saving": "保存中…",
8186
+ "rule.cancel": "キャンセル",
8187
+ "rule.invalidTitle": "タスク名は120文字以内で入力してください。",
8188
+ "rule.invalidPrompt": "タスクの指示を入力してください。",
8189
+ "rule.once": "1回のみ",
8190
+ "rule.everyMinutes": "N分ごと",
8191
+ "rule.everyHours": "N時間ごと",
8192
+ "rule.everySeconds": "N秒ごと",
8193
+ "rule.daily": "毎日",
8194
+ "rule.weekdays": "月曜日から金曜日",
8195
+ "rule.weekly": "毎週",
8196
+ "rule.cron": "カスタム",
8197
+ "rule.cronLabel": "Cron式",
8198
+ "rule.cronInvalid": "5フィールドのCron式を入力してください(例: 0 9 * * 1-5)。",
8199
+ "cronForm.frequency": "頻度",
8200
+ "cronForm.monthly": "毎月",
8201
+ "cronForm.weekly": "毎週",
8202
+ "cronForm.daily": "毎日",
8203
+ "cronForm.dates": "日付指定",
8204
+ "cronForm.dateOption": "{day}日",
8205
+ "cronForm.atMinute": "分",
8206
+ "cronForm.minuteIncrease": "分を増やす",
8207
+ "cronForm.minuteDecrease": "分を減らす",
8208
+ "rule.zone.system": "(システム)",
8209
+ "rule.error.conflict": "更新の保存前にこのタスクが変更されました。行には保存済みのルールが表示されています。もう一度お試しください。",
8210
+ "rule.error.notFound": "このタスクは利用できなくなりました。",
8211
+ "rule.error.unknown": "ルールの更新を確認できませんでした。行には保存済みのルールが表示されています。",
8212
+ "delete.action": "タスクを削除",
8213
+ "delete.title": "このタスクを削除しますか?",
8214
+ "delete.description": "タスクの実行が停止し、保存済みの配信記録とともに削除されます。元のセッションとそのメッセージは残り、キューに入ったメッセージは取り消されません。",
8215
+ "delete.confirm": "削除を確定",
8216
+ "delete.cancel": "キャンセル",
8217
+ "delete.close": "削除確認を閉じる",
8218
+ "delete.pending": "削除中…",
8219
+ "list.more": "その他のタスク操作",
8220
+ "clear.action": "終了済みタスクをすべてクリア",
8221
+ "clear.title": "終了済みタスク {count} 件をクリアしますか?",
8222
+ "clear.description": "これらのタスクと実行履歴は完全に削除されます。実行中のタスク、元のセッション、キューに入ったメッセージなどは影響を受けません。",
8223
+ "clear.confirm": "クリアする",
8224
+ "clear.pending": "クリア中…",
8225
+ "clear.close": "クリア確認を閉じる",
8226
+ "toast.deleted": "タスクを削除しました。",
8227
+ "toast.deleteFailed": "タスクを削除できませんでした。",
8228
+ "toast.cleared.one": "終了したタスクを {count} 件クリアしました。",
8229
+ "toast.cleared.other": "終了したタスクを {count} 件クリアしました。",
8230
+ "toast.clearedNone": "クリアする終了済みタスクはありません。",
8231
+ "toast.clearFailed": "タスクをクリアできませんでした。",
8232
+ "card.open": "開く",
8233
+ "card.openLabel": "タスクの詳細を開く: {title}",
8234
+ "card.deleted": "削除済み",
8235
+ "tool.invoked": "{name} を実行しました"
8236
+ };
8237
+ /** Spanish dictionary, checked against the English keys. */
8238
+ const es = {
8239
+ "panel": "Tareas de automatización",
8240
+ "title": "Tareas de automatización",
8241
+ "new.action": "Nuevo",
8242
+ "list.label": "Catálogo de tareas",
8243
+ "list.nextPrefix": "Próxima hora prevista: ",
8244
+ "list.loading": "Cargando tareas…",
8245
+ "list.error": "No se pudieron cargar las tareas.",
8246
+ "list.retry": "Reintentar",
8247
+ "list.empty": "Aún no hay tareas. Las tareas creadas en tus sesiones aparecen aquí.",
8248
+ "list.emptyInactive": "Sin tareas de automatización inactivas",
8249
+ "list.noMatches": "No hay tareas coincidentes",
8250
+ "search.label": "Tareas de búsqueda",
8251
+ "search.placeholder": "Tareas de automatización de búsqueda",
8252
+ "search.clear": "Borrar búsqueda",
8253
+ "empty.action": "Nueva tarea de automatización",
8254
+ "statusFilter.label": "Estado de la tarea",
8255
+ "statusFilter.all": "Todos",
8256
+ "status.active": "Habilitado",
8257
+ "status.inactive": "Inactivo",
8258
+ "detail.label": "Detalles de la tarea",
8259
+ "detail.close": "Cerrar detalles",
8260
+ "detail.more": "Acciones de tareas de automatización",
8261
+ "detail.nextRun": "Próxima ejecución",
8262
+ "detail.tabs": "Vistas de detalles de tareas",
8263
+ "detail.rule": "Reglas",
8264
+ "detail.records": "Registros",
8265
+ "delivery.empty": "No hay registro de entrega disponible",
8266
+ "delivery.loading": "Cargando registros de entrega…",
8267
+ "delivery.error": "No se pudieron cargar los registros de entrega.",
8268
+ "delivery.notFound": "Esta tarea ya no está disponible.",
8269
+ "delivery.cursorError": "Se actualizaron los registros.",
8270
+ "delivery.retry": "Reintentar",
8271
+ "delivery.refresh": "Actualizar",
8272
+ "delivery.loadMore": "Cargar más",
8273
+ "delivery.expand": "Expandir",
8274
+ "delivery.collapse": "Contraer",
8275
+ "delivery.pruned": "Se han borrado los registros de entrega anteriores.",
8276
+ "delivery.retention": "Reglas de retención",
8277
+ "delivery.retentionBounds": "Cada tarea mantiene registros de entrega hasta {records} de los últimos días {days}.",
8278
+ "delivery.retentionExplanation": "Cuando se guarda un nuevo registro, los registros más antiguos que estén fuera de estos límites se borran automáticamente. Borrar registros no detiene la tarea.",
8279
+ "detail.name": "Nombre de la tarea de automatización",
8280
+ "detail.instruction": "Instrucción de tarea de automatización",
8281
+ "detail.status": "Estado",
8282
+ "detail.next": "Próxima hora programada",
8283
+ "detail.frequency": "Frecuencia",
8284
+ "detail.id": "ID de tarea",
8285
+ "detail.session": "Sesión vinculada",
8286
+ "detail.openSession": "Sesión vinculada: abrir sesión original",
8287
+ "detail.openSessionTitle": "Sesión vinculada {title}: abrir sesión original",
8288
+ "detail.sessionLoading": "Cargando información de la sesión original.",
8289
+ "detail.sessionArchived": "La sesión original está archivada.",
8290
+ "detail.sessionUnavailable": "La sesión original no está disponible.",
8291
+ "detail.missing": "Tarea no disponible. Es posible que haya sido eliminado.",
8292
+ "delivery.label": "Registro de entrega guardado",
8293
+ "frequency.once": "una vez",
8294
+ "frequency.every": "Cada {value} {unit}",
8295
+ ...frequencyEs,
8296
+ "timing.date": "Fecha",
8297
+ "timing.time": "tiempo",
8298
+ "timing.hour": "Hora",
8299
+ "timing.minute": "Minuto",
8300
+ "timing.second": "segundo",
8301
+ "timing.prevMonth": "Mes anterior",
8302
+ "timing.nextMonth": "El próximo mes",
8303
+ "timing.zone": "Zona horaria",
8304
+ "timing.zoneSearch": "Buscar por desplazamiento UTC, ID de IANA o ciudad",
8305
+ "timing.zoneNoResults": "No hay zonas horarias coincidentes",
8306
+ "timing.interval": "Repetir cada",
8307
+ "timing.intervalIncrease": "aumentar el intervalo",
8308
+ "timing.intervalDecrease": "Intervalo de disminución",
8309
+ "timing.unit.hour": "horas",
8310
+ "timing.unit.minute": "minutos",
8311
+ "timing.unit.second": "segundos",
8312
+ "timing.intervalHint.hour": "Al menos 1 hora. El intervalo cuenta desde la creación de la tarea o el último cambio de regla y es independiente de las zonas horarias.",
8313
+ "timing.intervalHint.minute": "Al menos 1 minuto. El intervalo cuenta desde la creación de la tarea o el último cambio de regla y es independiente de las zonas horarias.",
8314
+ "timing.intervalHint.second": "Al menos 60 segundos. El intervalo cuenta desde la creación de la tarea o el último cambio de regla y es independiente de las zonas horarias.",
8315
+ "timing.zoneNoStored": "Una tarea única almacena sólo su momento objetivo, no una zona horaria. La fecha y la hora se interpretan en la zona horaria seleccionada.",
8316
+ "timing.inactive": "Las tareas inactivas son de solo lectura. Su sincronización no se puede editar.",
8317
+ "timing.conflict": "Esta tarea cambió mientras estabas editando. Su borrador se conserva. Cancele y vuelva a abrir después de actualizar para editar la regla más reciente.",
8318
+ "timing.notFound": "Esta tarea ya no está disponible. Su borrador se conserva; cancelar para cerrar el editor.",
8319
+ "timing.subagentSession": "Esta sesión pertenece a un subagente, que nunca recibe recordatorios entregados.",
8320
+ "timing.invalid": "Ingrese una fecha y hora válidas, o verifique los campos de tiempo.",
8321
+ "timing.invalidZone": "Ingrese una zona horaria IANA válida, por ejemplo Asia/Shanghai.",
8322
+ "timing.notFuture": "Elija una fecha y hora en el futuro.",
8323
+ "timing.invalidInterval": "Introduzca un intervalo de al menos 1 minuto.",
8324
+ "timing.invalidInterval.hour": "Introduzca un intervalo de al menos 1 hora.",
8325
+ "timing.invalidInterval.minute": "Introduzca un intervalo de al menos 1 minuto.",
8326
+ "timing.invalidInterval.second": "Introduzca un intervalo de al menos 60 segundos.",
8327
+ "timing.error": "No se pudo confirmar la actualización del tiempo. Su borrador se conserva. Verifique la tarea antes de volver a intentarlo.",
8328
+ "rule.title": "tiempo de ejecución",
8329
+ "rule.repeat": "repetir",
8330
+ "rule.weekday": "Día laborable",
8331
+ "rule.weekdayOption": "Día laborable {weekday}",
8332
+ "rule.unsaved": "Cambios no guardados",
8333
+ "rule.save": "Guardar cambios",
8334
+ "rule.saving": "Guardando…",
8335
+ "rule.cancel": "Cancelar",
8336
+ "rule.invalidTitle": "Introduzca un nombre de tarea de como máximo 120 caracteres.",
8337
+ "rule.invalidPrompt": "Introduzca una instrucción de tarea.",
8338
+ "rule.once": "una vez",
8339
+ "rule.everyMinutes": "Cada N minutos",
8340
+ "rule.everyHours": "Cada N horas",
8341
+ "rule.everySeconds": "Cada N segundos",
8342
+ "rule.daily": "todos los dias",
8343
+ "rule.weekdays": "lunes a viernes",
8344
+ "rule.weekly": "Semanal",
8345
+ "rule.cron": "personalizado",
8346
+ "rule.cronLabel": "expresión cron",
8347
+ "rule.cronInvalid": "Ingrese una expresión cron de cinco campos, por ejemplo 0 9 * * 1-5.",
8348
+ "cronForm.frequency": "Frecuencia",
8349
+ "cronForm.monthly": "Mensual",
8350
+ "cronForm.weekly": "Semanal",
8351
+ "cronForm.daily": "todos los dias",
8352
+ "cronForm.dates": "en fechas",
8353
+ "cronForm.dateOption": "Día {day}",
8354
+ "cronForm.atMinute": "al minuto",
8355
+ "cronForm.minuteIncrease": "aumentar minuto",
8356
+ "cronForm.minuteDecrease": "Disminuir minuto",
8357
+ "rule.zone.system": " (sistema)",
8358
+ "rule.error.conflict": "Esta tarea cambió antes de que se guardara la actualización. La fila muestra la regla guardada; intentar otra vez.",
8359
+ "rule.error.notFound": "Esta tarea ya no está disponible.",
8360
+ "rule.error.unknown": "No se pudo confirmar la actualización de la regla. La fila muestra la regla guardada.",
8361
+ "delete.action": "Eliminar tarea",
8362
+ "delete.title": "¿Eliminar esta tarea?",
8363
+ "delete.description": "Esto evita que la tarea se active y la elimina junto con sus registros de entrega guardados. La sesión original y sus mensajes permanecen; los mensajes en cola no se retiran.",
8364
+ "delete.confirm": "Confirmar eliminación",
8365
+ "delete.cancel": "Cancelar",
8366
+ "delete.close": "Cerrar confirmación de eliminación",
8367
+ "delete.pending": "Eliminando…",
8368
+ "list.more": "Más acciones de tareas",
8369
+ "clear.action": "Borrar todas las tareas inactivas",
8370
+ "clear.title": "¿Borrar las tareas inactivas ({count})?",
8371
+ "clear.description": "Estas tareas y sus registros de entrega guardados se eliminarán permanentemente. Las tareas habilitadas, las sesiones originales y los mensajes en cola no se verán afectados.",
8372
+ "clear.confirm": "Borrar tareas",
8373
+ "clear.pending": "Borrando…",
8374
+ "clear.close": "Cerrar confirmación de borrado",
8375
+ "toast.cleared.one": "Se ha borrado {count} tarea inactiva.",
8376
+ "toast.cleared.other": "Se han borrado {count} tareas inactivas.",
8377
+ "toast.clearedNone": "No hay tareas inactivas que borrar.",
8378
+ "toast.clearFailed": "No se pudieron borrar las tareas.",
8379
+ "toast.deleted": "Tarea eliminada.",
8380
+ "toast.deleteFailed": "No se pudo eliminar la tarea.",
8381
+ "card.open": "Abrir",
8382
+ "card.openLabel": "Abrir detalles de la tarea: {title}",
8383
+ "card.deleted": "Eliminado",
8384
+ "tool.invoked": "Invocado {name}"
8385
+ };
8386
+ /** French dictionary, checked against the English keys. */
8387
+ const fr = {
8388
+ "panel": "Tâches d'automatisation",
8389
+ "title": "Tâches d'automatisation",
8390
+ "new.action": "Nouveau",
8391
+ "list.label": "Catalogue de tâches",
8392
+ "list.nextPrefix": "Prochaine heure programmée\xA0: ",
8393
+ "list.loading": "Chargement des tâches…",
8394
+ "list.error": "Impossible de charger les tâches.",
8395
+ "list.retry": "Réessayer",
8396
+ "list.empty": "Aucune tâche pour l'instant. Les tâches créées dans vos sessions apparaissent ici.",
8397
+ "list.emptyInactive": "Aucune tâche d'automatisation inactive",
8398
+ "list.noMatches": "Aucune tâche correspondante",
8399
+ "search.label": "Tâches de recherche",
8400
+ "search.placeholder": "Tâches d'automatisation de la recherche",
8401
+ "search.clear": "Effacer la recherche",
8402
+ "empty.action": "Nouvelle tâche d'automatisation",
8403
+ "statusFilter.label": "Statut de la tâche",
8404
+ "statusFilter.all": "Tout",
8405
+ "status.active": "Activé",
8406
+ "status.inactive": "Inactif",
8407
+ "detail.label": "Détails de la tâche",
8408
+ "detail.close": "Fermer les détails",
8409
+ "detail.more": "Actions des tâches d'automatisation",
8410
+ "detail.nextRun": "Prochaine exécution",
8411
+ "detail.tabs": "Vues détaillées des tâches",
8412
+ "detail.rule": "Règles",
8413
+ "detail.records": "Enregistrements",
8414
+ "delivery.empty": "Aucun historique de livraison disponible",
8415
+ "delivery.loading": "Chargement des enregistrements de livraison…",
8416
+ "delivery.error": "Impossible de charger les enregistrements de livraison.",
8417
+ "delivery.notFound": "Cette tâche n'est plus disponible.",
8418
+ "delivery.cursorError": "Les dossiers ont été mis à jour.",
8419
+ "delivery.retry": "Réessayer",
8420
+ "delivery.refresh": "Actualiser",
8421
+ "delivery.loadMore": "Charger plus",
8422
+ "delivery.expand": "Développer",
8423
+ "delivery.collapse": "Réduire",
8424
+ "delivery.pruned": "Les enregistrements de livraison antérieurs ont été effacés",
8425
+ "delivery.retention": "Règles de conservation",
8426
+ "delivery.retentionBounds": "Chaque tâche conserve jusqu'à {records} enregistrements de livraison des derniers jours {days}.",
8427
+ "delivery.retentionExplanation": "Lorsqu'un nouvel enregistrement est enregistré, les enregistrements plus anciens en dehors de ces limites sont automatiquement effacés. La suppression des enregistrements n'arrête pas la tâche.",
8428
+ "detail.name": "Nom de la tâche d'automatisation",
8429
+ "detail.instruction": "Instruction de tâche d'automatisation",
8430
+ "detail.status": "Statut",
8431
+ "detail.next": "Prochaine heure programmée",
8432
+ "detail.frequency": "Fréquence",
8433
+ "detail.id": "ID de tâche",
8434
+ "detail.session": "Séance liée",
8435
+ "detail.openSession": "Session liée\xA0: ouvrir la session originale",
8436
+ "detail.openSessionTitle": "Session liée {title}\xA0: ouvrir la session originale",
8437
+ "detail.sessionLoading": "Chargement des informations de session originales.",
8438
+ "detail.sessionArchived": "La session originale est archivée.",
8439
+ "detail.sessionUnavailable": "La session originale n'est pas disponible.",
8440
+ "detail.missing": "Tâche indisponible. Il a peut-être été supprimé.",
8441
+ "delivery.label": "Dossier de livraison enregistré",
8442
+ "frequency.once": "Une fois",
8443
+ "frequency.every": "Chaque {value} {unit}",
8444
+ ...frequencyFr,
8445
+ "timing.date": "Date",
8446
+ "timing.time": "Temps",
8447
+ "timing.hour": "Heure",
8448
+ "timing.minute": "Minutes",
8449
+ "timing.second": "Seconde",
8450
+ "timing.prevMonth": "Mois précédent",
8451
+ "timing.nextMonth": "Le mois prochain",
8452
+ "timing.zone": "Fuseau horaire",
8453
+ "timing.zoneSearch": "Recherche par décalage UTC, ID IANA ou ville",
8454
+ "timing.zoneNoResults": "Aucun fuseau horaire correspondant",
8455
+ "timing.interval": "Répétez tous les",
8456
+ "timing.intervalIncrease": "Augmenter l'intervalle",
8457
+ "timing.intervalDecrease": "Diminuer l'intervalle",
8458
+ "timing.unit.hour": "heures",
8459
+ "timing.unit.minute": "minutes",
8460
+ "timing.unit.second": "secondes",
8461
+ "timing.intervalHint.hour": "Au moins 1 heure. L'intervalle compte à partir de la création de la tâche ou du dernier changement de règle et est indépendant des fuseaux horaires.",
8462
+ "timing.intervalHint.minute": "Au moins 1 minute. L'intervalle compte à partir de la création de la tâche ou du dernier changement de règle et est indépendant des fuseaux horaires.",
8463
+ "timing.intervalHint.second": "Au moins 60 secondes. L'intervalle compte à partir de la création de la tâche ou du dernier changement de règle et est indépendant des fuseaux horaires.",
8464
+ "timing.zoneNoStored": "Une tâche ponctuelle stocke uniquement son moment cible, pas un fuseau horaire. La date et l'heure sont interprétées dans le fuseau horaire sélectionné.",
8465
+ "timing.inactive": "Les tâches inactives sont en lecture seule. Leur timing ne peut pas être modifié.",
8466
+ "timing.conflict": "Cette tâche a changé pendant que vous effectuiez la modification. Votre brouillon est conservé. Annulez et rouvrez après l'actualisation pour modifier la dernière règle.",
8467
+ "timing.notFound": "Cette tâche n'est plus disponible. Votre brouillon est conservé\xA0; annuler pour fermer l'éditeur.",
8468
+ "timing.subagentSession": "Cette session appartient à un sous-agent, qui ne reçoit jamais de rappels délivrés.",
8469
+ "timing.invalid": "Entrez une date et une heure valides ou vérifiez les champs de synchronisation.",
8470
+ "timing.invalidZone": "Saisissez un fuseau horaire IANA valide, par exemple Asie/Shanghai.",
8471
+ "timing.notFuture": "Choisissez une date et une heure dans le futur.",
8472
+ "timing.invalidInterval": "Entrez un intervalle d'au moins 1 minute.",
8473
+ "timing.invalidInterval.hour": "Entrez un intervalle d'au moins 1 heure.",
8474
+ "timing.invalidInterval.minute": "Entrez un intervalle d'au moins 1 minute.",
8475
+ "timing.invalidInterval.second": "Entrez un intervalle d'au moins 60 secondes.",
8476
+ "timing.error": "Impossible de confirmer la mise à jour du timing. Votre brouillon est conservé. Vérifiez la tâche avant de réessayer.",
8477
+ "rule.title": "Temps d'exécution",
8478
+ "rule.repeat": "Répéter",
8479
+ "rule.weekday": "Jour de la semaine",
8480
+ "rule.weekdayOption": "Jour de la semaine {weekday}",
8481
+ "rule.unsaved": "Modifications non enregistrées",
8482
+ "rule.save": "Enregistrer les modifications",
8483
+ "rule.saving": "Sauvegarde…",
8484
+ "rule.cancel": "Annuler",
8485
+ "rule.invalidTitle": "Saisissez un nom de tâche comportant au maximum 120\xA0caractères.",
8486
+ "rule.invalidPrompt": "Entrez une instruction de tâche.",
8487
+ "rule.once": "Une fois",
8488
+ "rule.everyMinutes": "Toutes les N minutes",
8489
+ "rule.everyHours": "Toutes les N heures",
8490
+ "rule.everySeconds": "Toutes les N secondes",
8491
+ "rule.daily": "Chaque jour",
8492
+ "rule.weekdays": "Du lundi au vendredi",
8493
+ "rule.weekly": "Hebdomadaire",
8494
+ "rule.cron": "Personnalisé",
8495
+ "rule.cronLabel": "Expression Cron",
8496
+ "rule.cronInvalid": "Entrez une expression cron à cinq champs, par exemple 0 9 * * 1-5.",
8497
+ "cronForm.frequency": "Fréquence",
8498
+ "cronForm.monthly": "Mensuel",
8499
+ "cronForm.weekly": "Hebdomadaire",
8500
+ "cronForm.daily": "Chaque jour",
8501
+ "cronForm.dates": "Aux dates",
8502
+ "cronForm.dateOption": "Jour {day}",
8503
+ "cronForm.atMinute": "À la minute",
8504
+ "cronForm.minuteIncrease": "Augmenter les minutes",
8505
+ "cronForm.minuteDecrease": "Diminuer les minutes",
8506
+ "rule.zone.system": " (système)",
8507
+ "rule.error.conflict": "Cette tâche a changé avant l'enregistrement de la mise à jour. La ligne affiche la règle enregistrée\xA0; essayer à nouveau.",
8508
+ "rule.error.notFound": "Cette tâche n'est plus disponible.",
8509
+ "rule.error.unknown": "Impossible de confirmer la mise à jour de la règle. La ligne affiche la règle enregistrée.",
8510
+ "delete.action": "Supprimer la tâche",
8511
+ "delete.title": "Supprimer cette tâche\xA0?",
8512
+ "delete.description": "Cela empêche le déclenchement de la tâche et la supprime ainsi que ses enregistrements de livraison enregistrés. La session d'origine et ses messages restent conservés\xA0; les messages en file d'attente ne sont pas retirés.",
8513
+ "delete.confirm": "Confirmer la suppression",
8514
+ "delete.cancel": "Annuler",
8515
+ "delete.close": "Fermer la confirmation de suppression",
8516
+ "delete.pending": "Suppression…",
8517
+ "list.more": "Autres actions sur les tâches",
8518
+ "clear.action": "Effacer toutes les tâches inactives",
8519
+ "clear.title": "Effacer les tâches inactives ({count}) ?",
8520
+ "clear.description": "Ces tâches et leurs enregistrements de livraison seront définitivement supprimés. Les tâches activées, les sessions originales et les messages en file d'attente ne sont pas affectés.",
8521
+ "clear.confirm": "Effacer les tâches",
8522
+ "clear.pending": "Effacement…",
8523
+ "clear.close": "Fermer la confirmation d'effacement",
8524
+ "toast.cleared.one": "{count} tâche inactive effacée.",
8525
+ "toast.cleared.other": "{count} tâches inactives effacées.",
8526
+ "toast.clearedNone": "Aucune tâche inactive à effacer.",
8527
+ "toast.clearFailed": "Impossible d'effacer les tâches.",
8528
+ "toast.deleted": "Tâche supprimée.",
8529
+ "toast.deleteFailed": "Impossible de supprimer la tâche.",
8530
+ "card.open": "Ouvrir",
8531
+ "card.openLabel": "Détails de la tâche ouverte\xA0: {title}",
8532
+ "card.deleted": "Supprimé",
8533
+ "tool.invoked": "{name} invoqué"
8534
+ };
8535
+ /** German dictionary, checked against the English keys. */
8536
+ const de = {
8537
+ "panel": "Automatisierungsaufgaben",
8538
+ "title": "Automatisierungsaufgaben",
8539
+ "new.action": "Neu",
8540
+ "list.label": "Aufgabenkatalog",
8541
+ "list.nextPrefix": "Nächste geplante Zeit: ",
8542
+ "list.loading": "Aufgaben werden geladen…",
8543
+ "list.error": "Aufgaben konnten nicht geladen werden.",
8544
+ "list.retry": "Erneut versuchen",
8545
+ "list.empty": "Noch keine Aufgaben. Hier werden die in Ihren Sitzungen erstellten Aufgaben angezeigt.",
8546
+ "list.emptyInactive": "Keine inaktiven Automatisierungsaufgaben",
8547
+ "list.noMatches": "Keine passenden Aufgaben",
8548
+ "search.label": "Suchaufgaben",
8549
+ "search.placeholder": "Suchautomatisierungsaufgaben",
8550
+ "search.clear": "Suche löschen",
8551
+ "empty.action": "Neue Automatisierungsaufgabe",
8552
+ "statusFilter.label": "Aufgabenstatus",
8553
+ "statusFilter.all": "Alle",
8554
+ "status.active": "Aktiviert",
8555
+ "status.inactive": "Inaktiv",
8556
+ "detail.label": "Aufgabendetails",
8557
+ "detail.close": "Details schließen",
8558
+ "detail.more": "Aktionen der Automatisierungsaufgabe",
8559
+ "detail.nextRun": "Nächster Lauf",
8560
+ "detail.tabs": "Aufgabendetailansichten",
8561
+ "detail.rule": "Regeln",
8562
+ "detail.records": "Aufzeichnungen",
8563
+ "delivery.empty": "Kein Lieferprotokoll verfügbar",
8564
+ "delivery.loading": "Lieferdatensätze werden geladen…",
8565
+ "delivery.error": "Lieferdatensätze konnten nicht geladen werden.",
8566
+ "delivery.notFound": "Diese Aufgabe ist nicht mehr verfügbar.",
8567
+ "delivery.cursorError": "Die Datensätze wurden aktualisiert.",
8568
+ "delivery.retry": "Erneut versuchen",
8569
+ "delivery.refresh": "Aktualisieren",
8570
+ "delivery.loadMore": "Mehr laden",
8571
+ "delivery.expand": "Ausklappen",
8572
+ "delivery.collapse": "Einklappen",
8573
+ "delivery.pruned": "Frühere Lieferaufzeichnungen wurden gelöscht",
8574
+ "delivery.retention": "Aufbewahrungsregeln",
8575
+ "delivery.retentionBounds": "Jede Aufgabe verwaltet bis zu {records}-Lieferaufzeichnungen der letzten {days}-Tage.",
8576
+ "delivery.retentionExplanation": "Wenn ein neuer Datensatz gespeichert wird, werden ältere Datensätze außerhalb dieser Grenzen automatisch gelöscht. Durch das Löschen von Datensätzen wird die Aufgabe nicht gestoppt.",
8577
+ "detail.name": "Name der Automatisierungsaufgabe",
8578
+ "detail.instruction": "Anleitung zur Automatisierungsaufgabe",
8579
+ "detail.status": "Status",
8580
+ "detail.next": "Nächste geplante Zeit",
8581
+ "detail.frequency": "Häufigkeit",
8582
+ "detail.id": "Aufgaben-ID",
8583
+ "detail.session": "Verknüpfte Sitzung",
8584
+ "detail.openSession": "Verknüpfte Sitzung: Originalsitzung öffnen",
8585
+ "detail.openSessionTitle": "Verknüpfte Sitzung {title}: Originalsitzung öffnen",
8586
+ "detail.sessionLoading": "Laden der ursprünglichen Sitzungsinformationen.",
8587
+ "detail.sessionArchived": "Die ursprüngliche Sitzung wird archiviert.",
8588
+ "detail.sessionUnavailable": "Die ursprüngliche Sitzung ist nicht verfügbar.",
8589
+ "detail.missing": "Aufgabe nicht verfügbar. Möglicherweise wurde es gelöscht.",
8590
+ "delivery.label": "Lieferdatensatz gespeichert",
8591
+ "frequency.once": "Einmal",
8592
+ "frequency.every": "Jeder {value} {unit}",
8593
+ ...frequencyDe,
8594
+ "timing.date": "Datum",
8595
+ "timing.time": "Zeit",
8596
+ "timing.hour": "Stunde",
8597
+ "timing.minute": "Minute",
8598
+ "timing.second": "Sekunde",
8599
+ "timing.prevMonth": "Vorheriger Monat",
8600
+ "timing.nextMonth": "Nächsten Monat",
8601
+ "timing.zone": "Zeitzone",
8602
+ "timing.zoneSearch": "Suche nach UTC-Offset, IANA-ID oder Stadt",
8603
+ "timing.zoneNoResults": "Keine passenden Zeitzonen",
8604
+ "timing.interval": "Wiederholen Sie alle",
8605
+ "timing.intervalIncrease": "Intervall erhöhen",
8606
+ "timing.intervalDecrease": "Intervall verringern",
8607
+ "timing.unit.hour": "Stunden",
8608
+ "timing.unit.minute": "Minuten",
8609
+ "timing.unit.second": "Sekunden",
8610
+ "timing.intervalHint.hour": "Mindestens 1 Stunde. Das Intervall zählt ab der Aufgabenerstellung oder der letzten Regeländerung und ist unabhängig von Zeitzonen.",
8611
+ "timing.intervalHint.minute": "Mindestens 1 Minute. Das Intervall zählt ab der Aufgabenerstellung oder der letzten Regeländerung und ist unabhängig von Zeitzonen.",
8612
+ "timing.intervalHint.second": "Mindestens 60 Sekunden. Das Intervall zählt ab der Aufgabenerstellung oder der letzten Regeländerung und ist unabhängig von Zeitzonen.",
8613
+ "timing.zoneNoStored": "Eine einmalige Aufgabe speichert nur ihren Zielzeitpunkt, keine Zeitzone. Datum und Uhrzeit werden in der gewählten Zeitzone interpretiert.",
8614
+ "timing.inactive": "Inaktive Aufgaben sind schreibgeschützt. Ihr Timing kann nicht bearbeitet werden.",
8615
+ "timing.conflict": "Diese Aufgabe hat sich während der Bearbeitung geändert. Ihr Entwurf bleibt erhalten. Abbrechen und nach der Aktualisierung erneut öffnen, um die neueste Regel zu bearbeiten.",
8616
+ "timing.notFound": "Diese Aufgabe ist nicht mehr verfügbar. Ihr Entwurf bleibt erhalten; Abbrechen, um den Editor zu schließen.",
8617
+ "timing.subagentSession": "Diese Sitzung gehört einem Subagenten, der niemals zugestellte Erinnerungen erhält.",
8618
+ "timing.invalid": "Geben Sie ein gültiges Datum und eine gültige Uhrzeit ein oder überprüfen Sie die Zeitfelder.",
8619
+ "timing.invalidZone": "Geben Sie eine gültige IANA-Zeitzone ein, zum Beispiel Asien/Shanghai.",
8620
+ "timing.notFuture": "Wählen Sie ein Datum und eine Uhrzeit in der Zukunft.",
8621
+ "timing.invalidInterval": "Geben Sie ein Intervall von mindestens 1 Minute ein.",
8622
+ "timing.invalidInterval.hour": "Geben Sie ein Intervall von mindestens 1 Stunde ein.",
8623
+ "timing.invalidInterval.minute": "Geben Sie ein Intervall von mindestens 1 Minute ein.",
8624
+ "timing.invalidInterval.second": "Geben Sie ein Intervall von mindestens 60 Sekunden ein.",
8625
+ "timing.error": "Das Timing-Update konnte nicht bestätigt werden. Ihr Entwurf bleibt erhalten. Überprüfen Sie die Aufgabe, bevor Sie es erneut versuchen.",
8626
+ "rule.title": "Laufzeit",
8627
+ "rule.repeat": "Wiederholen",
8628
+ "rule.weekday": "Wochentag",
8629
+ "rule.weekdayOption": "Wochentag {weekday}",
8630
+ "rule.unsaved": "Nicht gespeicherte Änderungen",
8631
+ "rule.save": "Änderungen speichern",
8632
+ "rule.saving": "Speichern…",
8633
+ "rule.cancel": "Abbrechen",
8634
+ "rule.invalidTitle": "Geben Sie einen Aufgabennamen mit maximal 120 Zeichen ein.",
8635
+ "rule.invalidPrompt": "Geben Sie eine Aufgabenanweisung ein.",
8636
+ "rule.once": "Einmal",
8637
+ "rule.everyMinutes": "Alle N Minuten",
8638
+ "rule.everyHours": "Alle N Stunden",
8639
+ "rule.everySeconds": "Alle N Sekunden",
8640
+ "rule.daily": "Jeden Tag",
8641
+ "rule.weekdays": "Montag bis Freitag",
8642
+ "rule.weekly": "Wöchentlich",
8643
+ "rule.cron": "Benutzerdefiniert",
8644
+ "rule.cronLabel": "Cron-Ausdruck",
8645
+ "rule.cronInvalid": "Geben Sie einen Cron-Ausdruck mit fünf Feldern ein, zum Beispiel 0 9 * * 1-5.",
8646
+ "cronForm.frequency": "Häufigkeit",
8647
+ "cronForm.monthly": "Monatlich",
8648
+ "cronForm.weekly": "Wöchentlich",
8649
+ "cronForm.daily": "Jeden Tag",
8650
+ "cronForm.dates": "An Terminen",
8651
+ "cronForm.dateOption": "Tag {day}",
8652
+ "cronForm.atMinute": "Im Moment",
8653
+ "cronForm.minuteIncrease": "Minute erhöhen",
8654
+ "cronForm.minuteDecrease": "Minute verringern",
8655
+ "rule.zone.system": " (System)",
8656
+ "rule.error.conflict": "Diese Aufgabe wurde vor dem Speichern des Updates geändert. Die Zeile zeigt die gespeicherte Regel; versuchen Sie es erneut.",
8657
+ "rule.error.notFound": "Diese Aufgabe ist nicht mehr verfügbar.",
8658
+ "rule.error.unknown": "Die Regelaktualisierung konnte nicht bestätigt werden. Die Zeile zeigt die gespeicherte Regel.",
8659
+ "delete.action": "Aufgabe löschen",
8660
+ "delete.title": "Diese Aufgabe löschen?",
8661
+ "delete.description": "Dadurch wird verhindert, dass die Aufgabe ausgelöst wird, und sie wird zusammen mit den gespeicherten Lieferdatensätzen gelöscht. Die ursprüngliche Sitzung und ihre Nachrichten bleiben erhalten; Nachrichten in der Warteschlange werden nicht zurückgezogen.",
8662
+ "delete.confirm": "Bestätigen Sie den Löschvorgang",
8663
+ "delete.cancel": "Abbrechen",
8664
+ "delete.close": "Löschbestätigung schließen",
8665
+ "delete.pending": "Löschen…",
8666
+ "list.more": "Weitere Aufgabenaktionen",
8667
+ "clear.action": "Alle inaktiven Aufgaben löschen",
8668
+ "clear.title": "Inaktive Aufgaben löschen ({count})?",
8669
+ "clear.description": "Diese Aufgaben und ihre gespeicherten Lieferdatensätze werden dauerhaft gelöscht. Aktivierte Aufgaben, ursprüngliche Sitzungen und Nachrichten in der Warteschlange sind nicht betroffen.",
8670
+ "clear.confirm": "Aufgaben löschen",
8671
+ "clear.pending": "Wird gelöscht…",
8672
+ "clear.close": "Löschbestätigung schließen",
8673
+ "toast.cleared.one": "{count} inaktive Aufgabe gelöscht.",
8674
+ "toast.cleared.other": "{count} inaktive Aufgaben gelöscht.",
8675
+ "toast.clearedNone": "Keine inaktiven Aufgaben zum Löschen.",
8676
+ "toast.clearFailed": "Aufgaben konnten nicht gelöscht werden.",
8677
+ "toast.deleted": "Aufgabe gelöscht.",
8678
+ "toast.deleteFailed": "Die Aufgabe konnte nicht gelöscht werden.",
8679
+ "card.open": "Öffnen",
8680
+ "card.openLabel": "Aufgabendetails öffnen: {title}",
8681
+ "card.deleted": "Gelöscht",
8682
+ "tool.invoked": "{name} aufgerufen"
8683
+ };
8684
+ /** Russian dictionary, checked against the English keys. */
8685
+ const ru = {
8686
+ "panel": "Задачи автоматизации",
8687
+ "title": "Задачи автоматизации",
8688
+ "new.action": "Новый",
8689
+ "list.label": "Каталог задач",
8690
+ "list.nextPrefix": "Следующее запланированное время: ",
8691
+ "list.loading": "Загрузка задач…",
8692
+ "list.error": "Не удалось загрузить задачи.",
8693
+ "list.retry": "Повторить",
8694
+ "list.empty": "Заданий пока нет. Здесь отображаются задачи, созданные в ваших сеансах.",
8695
+ "list.emptyInactive": "Нет неактивных задач автоматизации",
8696
+ "list.noMatches": "Нет подходящих задач",
8697
+ "search.label": "Поиск задач",
8698
+ "search.placeholder": "Задачи автоматизации поиска",
8699
+ "search.clear": "Очистить поиск",
8700
+ "empty.action": "Новая задача автоматизации",
8701
+ "statusFilter.label": "Статус задачи",
8702
+ "statusFilter.all": "Все",
8703
+ "status.active": "Включено",
8704
+ "status.inactive": "Неактивный",
8705
+ "detail.label": "Подробности задачи",
8706
+ "detail.close": "Закрыть детали",
8707
+ "detail.more": "Действия задачи автоматизации",
8708
+ "detail.nextRun": "Следующий запуск",
8709
+ "detail.tabs": "Просмотр сведений о задаче",
8710
+ "detail.rule": "Правила",
8711
+ "detail.records": "Рекорды",
8712
+ "delivery.empty": "Нет записи о доставке",
8713
+ "delivery.loading": "Загрузка записей о доставке…",
8714
+ "delivery.error": "Не удалось загрузить записи о доставке.",
8715
+ "delivery.notFound": "Эта задача больше не доступна.",
8716
+ "delivery.cursorError": "Записи обновлены.",
8717
+ "delivery.retry": "Повторить",
8718
+ "delivery.refresh": "Обновить",
8719
+ "delivery.loadMore": "Загрузить больше",
8720
+ "delivery.expand": "Развернуть",
8721
+ "delivery.collapse": "Свернуть",
8722
+ "delivery.pruned": "Записи о предыдущих поставках удалены.",
8723
+ "delivery.retention": "Правила хранения",
8724
+ "delivery.retentionBounds": "Каждая задача сохраняет записи о доставке до {records} за последние дни {days}.",
8725
+ "delivery.retentionExplanation": "При сохранении новой записи более старые записи, выходящие за эти пределы, автоматически удаляются. Очистка записей не останавливает выполнение задачи.",
8726
+ "detail.name": "Название задачи автоматизации",
8727
+ "detail.instruction": "Инструкция по задаче автоматизации",
8728
+ "detail.status": "Статус",
8729
+ "detail.next": "Следующее запланированное время",
8730
+ "detail.frequency": "Частота",
8731
+ "detail.id": "Идентификатор задачи",
8732
+ "detail.session": "Связанный сеанс",
8733
+ "detail.openSession": "Связанный сеанс: открыть исходный сеанс.",
8734
+ "detail.openSessionTitle": "Связанный сеанс {title}: открыть исходный сеанс.",
8735
+ "detail.sessionLoading": "Загрузка исходной информации о сеансе.",
8736
+ "detail.sessionArchived": "Исходный сеанс архивируется.",
8737
+ "detail.sessionUnavailable": "Исходный сеанс недоступен.",
8738
+ "detail.missing": "Задача недоступна. Возможно, оно было удалено.",
8739
+ "delivery.label": "Сохраненная запись о доставке",
8740
+ "frequency.once": "Однажды",
8741
+ "frequency.every": "Каждый {value} {unit}",
8742
+ ...frequencyRu,
8743
+ "timing.date": "Дата",
8744
+ "timing.time": "Время",
8745
+ "timing.hour": "Час",
8746
+ "timing.minute": "минута",
8747
+ "timing.second": "Секунда",
8748
+ "timing.prevMonth": "Предыдущий месяц",
8749
+ "timing.nextMonth": "В следующем месяце",
8750
+ "timing.zone": "Часовой пояс",
8751
+ "timing.zoneSearch": "Поиск по смещению UTC, идентификатору IANA или городу.",
8752
+ "timing.zoneNoResults": "Нет подходящих часовых поясов",
8753
+ "timing.interval": "Повторяйте каждые",
8754
+ "timing.intervalIncrease": "Увеличить интервал",
8755
+ "timing.intervalDecrease": "Уменьшить интервал",
8756
+ "timing.unit.hour": "часы",
8757
+ "timing.unit.minute": "минуты",
8758
+ "timing.unit.second": "секунды",
8759
+ "timing.intervalHint.hour": "Минимум 1 час. Интервал отсчитывается с момента создания задачи или последнего изменения правила и не зависит от часовых поясов.",
8760
+ "timing.intervalHint.minute": "Минимум 1 минута. Интервал отсчитывается с момента создания задачи или последнего изменения правила и не зависит от часовых поясов.",
8761
+ "timing.intervalHint.second": "Минимум 60 секунд. Интервал отсчитывается с момента создания задачи или последнего изменения правила и не зависит от часовых поясов.",
8762
+ "timing.zoneNoStored": "Одноразовая задача сохраняет только целевой момент, а не часовой пояс. Дата и время интерпретируются в выбранном часовом поясе.",
8763
+ "timing.inactive": "Неактивные задачи доступны только для чтения. Их время не может быть отредактировано.",
8764
+ "timing.conflict": "Эта задача изменилась во время редактирования. Ваш черновик сохранен. Отмените и снова откройте после обновления, чтобы изменить последнее правило.",
8765
+ "timing.notFound": "Эта задача больше не доступна. Ваш черновик сохраняется; отмените, чтобы закрыть редактор.",
8766
+ "timing.subagentSession": "Этот сеанс принадлежит субагенту, который никогда не получает напоминания.",
8767
+ "timing.invalid": "Введите действительные дату и время или проверьте поля времени.",
8768
+ "timing.invalidZone": "Введите действительный часовой пояс IANA, например Азия/Шанхай.",
8769
+ "timing.notFuture": "Выберите дату и время в будущем.",
8770
+ "timing.invalidInterval": "Введите интервал не менее 1 минуты.",
8771
+ "timing.invalidInterval.hour": "Введите интервал не менее 1 часа.",
8772
+ "timing.invalidInterval.minute": "Введите интервал не менее 1 минуты.",
8773
+ "timing.invalidInterval.second": "Введите интервал не менее 60 секунд.",
8774
+ "timing.error": "Не удалось подтвердить обновление времени. Ваш черновик сохранен. Проверьте задачу, прежде чем повторить попытку.",
8775
+ "rule.title": "Время выполнения",
8776
+ "rule.repeat": "Повторить",
8777
+ "rule.weekday": "Будний день",
8778
+ "rule.weekdayOption": "День недели {weekday}",
8779
+ "rule.unsaved": "Несохраненные изменения",
8780
+ "rule.save": "Сохранить изменения",
8781
+ "rule.saving": "Сохранение…",
8782
+ "rule.cancel": "Отмена",
8783
+ "rule.invalidTitle": "Введите имя задачи длиной не более 120 символов.",
8784
+ "rule.invalidPrompt": "Введите инструкцию задачи.",
8785
+ "rule.once": "Однажды",
8786
+ "rule.everyMinutes": "Каждые N минут",
8787
+ "rule.everyHours": "Каждые N часов",
8788
+ "rule.everySeconds": "Каждые N секунд",
8789
+ "rule.daily": "Каждый день",
8790
+ "rule.weekdays": "С понедельника по пятницу",
8791
+ "rule.weekly": "Еженедельно",
8792
+ "rule.cron": "Пользовательский",
8793
+ "rule.cronLabel": "Выражение Cron",
8794
+ "rule.cronInvalid": "Введите выражение cron из пяти полей, например 0 9 * * 1-5.",
8795
+ "cronForm.frequency": "Частота",
8796
+ "cronForm.monthly": "Ежемесячно",
8797
+ "cronForm.weekly": "Еженедельно",
8798
+ "cronForm.daily": "Каждый день",
8799
+ "cronForm.dates": "По датам",
8800
+ "cronForm.dateOption": "День {day}",
8801
+ "cronForm.atMinute": "В минуту",
8802
+ "cronForm.minuteIncrease": "Увеличить минуту",
8803
+ "cronForm.minuteDecrease": "Уменьшить минуту",
8804
+ "rule.zone.system": " (система)",
8805
+ "rule.error.conflict": "Эта задача изменилась до сохранения обновления. В строке отображается сохраненное правило; Попробуйте еще раз.",
8806
+ "rule.error.notFound": "Эта задача больше не доступна.",
8807
+ "rule.error.unknown": "Не удалось подтвердить обновление правила. В строке отображается сохраненное правило.",
8808
+ "delete.action": "Удалить задачу",
8809
+ "delete.title": "Удалить эту задачу?",
8810
+ "delete.description": "Это останавливает запуск задачи и удаляет ее вместе с сохраненными записями о доставке. Исходный сеанс и его сообщения остаются; сообщения в очереди не изымаются.",
8811
+ "delete.confirm": "Подтвердить удаление",
8812
+ "delete.cancel": "Отмена",
8813
+ "delete.close": "Закрыть подтверждение удаления",
8814
+ "delete.pending": "Удаление…",
8815
+ "list.more": "Другие действия с задачами",
8816
+ "clear.action": "Удалить все неактивные задачи",
8817
+ "clear.title": "Удалить неактивные задачи ({count})?",
8818
+ "clear.description": "Эти задачи и сохранённые записи доставки будут удалены безвозвратно. Включённые задачи, исходные сеансы и сообщения в очереди не затрагиваются.",
8819
+ "clear.confirm": "Удалить задачи",
8820
+ "clear.pending": "Удаление…",
8821
+ "clear.close": "Закрыть подтверждение удаления",
8822
+ "toast.cleared.one": "Удалено неактивных задач: {count}.",
8823
+ "toast.cleared.other": "Удалено неактивных задач: {count}.",
8824
+ "toast.clearedNone": "Нет неактивных задач для удаления.",
8825
+ "toast.clearFailed": "Не удалось удалить задачи.",
8826
+ "toast.deleted": "Задача удалена.",
8827
+ "toast.deleteFailed": "Не удалось удалить задачу.",
8828
+ "card.open": "Открыть",
8829
+ "card.openLabel": "Открыть сведения о задаче: {title}.",
8830
+ "card.deleted": "Удалено",
8831
+ "tool.invoked": "Вызван {name}"
8832
+ };
8833
+ /** Portuguese dictionary, checked against the English keys. */
8834
+ const pt = {
8835
+ "panel": "Tarefas de automação",
8836
+ "title": "Tarefas de automação",
8837
+ "new.action": "Novo",
8838
+ "list.label": "Catálogo de tarefas",
8839
+ "list.nextPrefix": "Próximo horário agendado: ",
8840
+ "list.loading": "Carregando tarefas…",
8841
+ "list.error": "Não foi possível carregar tarefas.",
8842
+ "list.retry": "Tentar novamente",
8843
+ "list.empty": "Nenhuma tarefa ainda. As tarefas criadas nas suas sessões aparecem aqui.",
8844
+ "list.emptyInactive": "Nenhuma tarefa de automação inativa",
8845
+ "list.noMatches": "Nenhuma tarefa correspondente",
8846
+ "search.label": "Tarefas de pesquisa",
8847
+ "search.placeholder": "Tarefas de automação de pesquisa",
8848
+ "search.clear": "Limpar pesquisa",
8849
+ "empty.action": "Nova tarefa de automação",
8850
+ "statusFilter.label": "Status da tarefa",
8851
+ "statusFilter.all": "Todos",
8852
+ "status.active": "Habilitado",
8853
+ "status.inactive": "Inativo",
8854
+ "detail.label": "Detalhes da tarefa",
8855
+ "detail.close": "Fechar detalhes",
8856
+ "detail.more": "Ações de tarefas de automação",
8857
+ "detail.nextRun": "Próxima execução",
8858
+ "detail.tabs": "Visualizações de detalhes da tarefa",
8859
+ "detail.rule": "Regras",
8860
+ "detail.records": "Registros",
8861
+ "delivery.empty": "Nenhum registro de entrega disponível",
8862
+ "delivery.loading": "Carregando registros de entrega…",
8863
+ "delivery.error": "Não foi possível carregar os registros de entrega.",
8864
+ "delivery.notFound": "Esta tarefa não está mais disponível.",
8865
+ "delivery.cursorError": "Os registros foram atualizados.",
8866
+ "delivery.retry": "Tentar novamente",
8867
+ "delivery.refresh": "Atualizar",
8868
+ "delivery.loadMore": "Carregar mais",
8869
+ "delivery.expand": "Expandir",
8870
+ "delivery.collapse": "Recolher",
8871
+ "delivery.pruned": "Registros de entrega anteriores foram apagados",
8872
+ "delivery.retention": "Regras de retenção",
8873
+ "delivery.retentionBounds": "Cada tarefa mantém até {records} registros de entrega dos últimos {days} dias.",
8874
+ "delivery.retentionExplanation": "Quando um novo registro é salvo, os registros mais antigos fora desses limites são apagados automaticamente. A limpeza de registros não interrompe a tarefa.",
8875
+ "detail.name": "Nome da tarefa de automação",
8876
+ "detail.instruction": "Instrução de tarefa de automação",
8877
+ "detail.status": "Estado",
8878
+ "detail.next": "Próximo horário agendado",
8879
+ "detail.frequency": "Frequência",
8880
+ "detail.id": "ID da tarefa",
8881
+ "detail.session": "Sessão vinculada",
8882
+ "detail.openSession": "Sessão vinculada: sessão original aberta",
8883
+ "detail.openSessionTitle": "Sessão vinculada {title}: sessão original aberta",
8884
+ "detail.sessionLoading": "Carregando informações originais da sessão.",
8885
+ "detail.sessionArchived": "A sessão original é arquivada.",
8886
+ "detail.sessionUnavailable": "A sessão original não está disponível.",
8887
+ "detail.missing": "Tarefa indisponível. Pode ter sido excluído.",
8888
+ "delivery.label": "Registro de entrega salvo",
8889
+ "frequency.once": "Uma vez",
8890
+ "frequency.every": "A cada {value} {unit}",
8891
+ ...frequencyPt,
8892
+ "timing.date": "Data",
8893
+ "timing.time": "Hora",
8894
+ "timing.hour": "Hora",
8895
+ "timing.minute": "Minuto",
8896
+ "timing.second": "Segundo",
8897
+ "timing.prevMonth": "Mês anterior",
8898
+ "timing.nextMonth": "No próximo mês",
8899
+ "timing.zone": "Fuso horário",
8900
+ "timing.zoneSearch": "Pesquise por deslocamento UTC, ID IANA ou cidade",
8901
+ "timing.zoneNoResults": "Nenhum fuso horário correspondente",
8902
+ "timing.interval": "Repita cada",
8903
+ "timing.intervalIncrease": "Aumentar intervalo",
8904
+ "timing.intervalDecrease": "Diminuir intervalo",
8905
+ "timing.unit.hour": "horas",
8906
+ "timing.unit.minute": "minutos",
8907
+ "timing.unit.second": "segundos",
8908
+ "timing.intervalHint.hour": "Pelo menos 1 hora. O intervalo conta a partir da criação da tarefa ou da última alteração de regra e é independente dos fusos horários.",
8909
+ "timing.intervalHint.minute": "Pelo menos 1 minuto. O intervalo conta a partir da criação da tarefa ou da última alteração de regra e é independente dos fusos horários.",
8910
+ "timing.intervalHint.second": "Pelo menos 60 segundos. O intervalo conta a partir da criação da tarefa ou da última alteração de regra e é independente dos fusos horários.",
8911
+ "timing.zoneNoStored": "Uma tarefa única armazena apenas o momento alvo, não um fuso horário. A data e a hora são interpretadas no fuso horário selecionado.",
8912
+ "timing.inactive": "As tarefas inativas são somente leitura. O tempo deles não pode ser editado.",
8913
+ "timing.conflict": "Esta tarefa mudou enquanto você estava editando. Seu rascunho foi mantido. Cancele e reabra após a atualização para editar a regra mais recente.",
8914
+ "timing.notFound": "Esta tarefa não está mais disponível. Seu rascunho foi retido; cancelar para fechar o editor.",
8915
+ "timing.subagentSession": "Esta sessão pertence a um subagente, que nunca recebe lembretes entregues.",
8916
+ "timing.invalid": "Insira uma data e hora válidas ou verifique os campos de horário.",
8917
+ "timing.invalidZone": "Insira um fuso horário IANA válido, por exemplo Ásia/Xangai.",
8918
+ "timing.notFuture": "Escolha uma data e hora no futuro.",
8919
+ "timing.invalidInterval": "Insira um intervalo de pelo menos 1 minuto.",
8920
+ "timing.invalidInterval.hour": "Insira um intervalo de pelo menos 1 hora.",
8921
+ "timing.invalidInterval.minute": "Insira um intervalo de pelo menos 1 minuto.",
8922
+ "timing.invalidInterval.second": "Insira um intervalo de pelo menos 60 segundos.",
8923
+ "timing.error": "Não foi possível confirmar a atualização de tempo. Seu rascunho foi mantido. Verifique a tarefa antes de tentar novamente.",
8924
+ "rule.title": "Tempo de execução",
8925
+ "rule.repeat": "Repetir",
8926
+ "rule.weekday": "Dia da semana",
8927
+ "rule.weekdayOption": "Dia da semana {weekday}",
8928
+ "rule.unsaved": "Alterações não salvas",
8929
+ "rule.save": "Salvar alterações",
8930
+ "rule.saving": "Salvando…",
8931
+ "rule.cancel": "Cancelar",
8932
+ "rule.invalidTitle": "Insira um nome de tarefa com no máximo 120 caracteres.",
8933
+ "rule.invalidPrompt": "Insira uma instrução de tarefa.",
8934
+ "rule.once": "Uma vez",
8935
+ "rule.everyMinutes": "A cada N minutos",
8936
+ "rule.everyHours": "A cada N horas",
8937
+ "rule.everySeconds": "A cada N segundos",
8938
+ "rule.daily": "Todos os dias",
8939
+ "rule.weekdays": "Segunda a sexta",
8940
+ "rule.weekly": "Semanalmente",
8941
+ "rule.cron": "Personalizado",
8942
+ "rule.cronLabel": "Expressão Cron",
8943
+ "rule.cronInvalid": "Insira uma expressão cron de cinco campos, por exemplo 0 9 * * 1-5.",
8944
+ "cronForm.frequency": "Frequência",
8945
+ "cronForm.monthly": "Mensalmente",
8946
+ "cronForm.weekly": "Semanalmente",
8947
+ "cronForm.daily": "Todos os dias",
8948
+ "cronForm.dates": "Em datas",
8949
+ "cronForm.dateOption": "Dia {day}",
8950
+ "cronForm.atMinute": "No minuto",
8951
+ "cronForm.minuteIncrease": "Aumentar minuto",
8952
+ "cronForm.minuteDecrease": "Diminuir minuto",
8953
+ "rule.zone.system": " (sistema)",
8954
+ "rule.error.conflict": "Esta tarefa foi alterada antes da atualização ser salva. A linha mostra a regra salva; tente novamente.",
8955
+ "rule.error.notFound": "Esta tarefa não está mais disponível.",
8956
+ "rule.error.unknown": "Não foi possível confirmar a atualização da regra. A linha mostra a regra salva.",
8957
+ "delete.action": "Excluir tarefa",
8958
+ "delete.title": "Excluir esta tarefa?",
8959
+ "delete.description": "Isso interrompe o acionamento da tarefa e a exclui junto com seus registros de entrega salvos. A sessão original e suas mensagens permanecem; mensagens enfileiradas não são retiradas.",
8960
+ "delete.confirm": "Confirmar exclusão",
8961
+ "delete.cancel": "Cancelar",
8962
+ "delete.close": "Fechar confirmação de exclusão",
8963
+ "delete.pending": "Excluindo…",
8964
+ "list.more": "Mais ações de tarefas",
8965
+ "clear.action": "Limpar todas as tarefas inativas",
8966
+ "clear.title": "Limpar as tarefas inativas ({count})?",
8967
+ "clear.description": "Estas tarefas e seus registros de entrega salvos serão excluídos permanentemente. As tarefas habilitadas, as sessões originais e as mensagens na fila não serão afetadas.",
8968
+ "clear.confirm": "Limpar tarefas",
8969
+ "clear.pending": "Limpando…",
8970
+ "clear.close": "Fechar confirmação de limpeza",
8971
+ "toast.cleared.one": "{count} tarefa inativa limpa.",
8972
+ "toast.cleared.other": "{count} tarefas inativas limpas.",
8973
+ "toast.clearedNone": "Não há tarefas inativas para limpar.",
8974
+ "toast.clearFailed": "Não foi possível limpar as tarefas.",
8975
+ "toast.deleted": "Tarefa excluída.",
8976
+ "toast.deleteFailed": "Não foi possível excluir a tarefa.",
8977
+ "card.open": "Abrir",
8978
+ "card.openLabel": "Detalhes da tarefa aberta: {title}",
8979
+ "card.deleted": "Excluído",
8980
+ "tool.invoked": "Invocado {name}"
8981
+ };
7331
8982
  //#endregion
7332
8983
  //#region lib/types/client/index.js
7333
8984
  /**
@@ -7361,7 +9012,7 @@ window.__ModuleLoader__.load({
7361
9012
  */
7362
9013
  const MANAGER_NS = "schedule.manager";
7363
9014
  const PANEL_ID = "schedules";
7364
- /** Required services for catalogs, ambient Session marks, the right Sidebar, Remote queries, and original-Session navigation. */
9015
+ /** Required services for catalogs, ambient Session marks, the right Sidebar, Remote queries, original-Session navigation, and access. */
7365
9016
  const inject = [
7366
9017
  "slots",
7367
9018
  "locale",
@@ -7373,172 +9024,203 @@ window.__ModuleLoader__.load({
7373
9024
  "sessions",
7374
9025
  "workspaces",
7375
9026
  "sidebarRightTabs",
7376
- "sidebarRight"
9027
+ "sidebarRight",
9028
+ "remoteAccess"
7377
9029
  ];
7378
9030
  /**
7379
9031
  * Register the Host task page, the Session-header reminder catalog, the
7380
9032
  * right-Sidebar page that shows one task's detail, and the transcript card of
7381
- * one created task.
9033
+ * one created task while the current Peer may read the task catalog.
7382
9034
  * @param ctx - browser services used by these contributions.
7383
9035
  */
7384
9036
  function apply(ctx) {
7385
9037
  ctx.effect(() => ctx.locale.register(NS, {
7386
9038
  zh: zh$1,
7387
- en: en$1
9039
+ en: en$1,
9040
+ ja: ja$1,
9041
+ es: es$1,
9042
+ fr: fr$1,
9043
+ de: de$1,
9044
+ ru: ru$1,
9045
+ pt: pt$1
7388
9046
  }), "ui-schedule: dictionaries");
7389
- ctx.effect(() => ctx.locale.register(MANAGER_NS, {
9047
+ const managerDictionaries = {
7390
9048
  zh,
7391
- en
7392
- }), "ui-schedule: manager dictionaries");
7393
- const t = ctx.locale.bind(MANAGER_NS);
7394
- const manager = createCatalogSource({
7395
- list: () => ctx.remote.schedule.catalog(),
7396
- remove: async (id) => {
7397
- const record = manager.hooks.catalog.getSnapshot().records.find((item) => item.id === id);
7398
- if (record === void 0) return {
7399
- ok: true,
7400
- value: {
7401
- id,
7402
- deleted: false,
7403
- code: "schedule_not_found"
7404
- }
7405
- };
7406
- return ctx.remote.schedule.delete({
7407
- sessionId: record.sessionId,
7408
- id
7409
- });
7410
- },
7411
- subscribeChanged: (listener) => ctx.remote.$on("schedule/changed", listener),
7412
- subscribeReset: (listener) => ctx.on("connection/reset", listener)
7413
- });
7414
- const deleteToast = createDeleteToastSource();
7415
- const reportedDelete = (onDelete) => async (id) => {
7416
- const outcome = await onDelete(id);
7417
- deleteToast.report(outcome);
7418
- return outcome;
9049
+ en,
9050
+ ja,
9051
+ es,
9052
+ fr,
9053
+ de,
9054
+ ru,
9055
+ pt
7419
9056
  };
7420
- ctx.slots.inject("shell.overlay", () => ctx.slots.register({
7421
- name: "shell.overlay",
7422
- id: "schedule.delete-toast",
7423
- locale: MANAGER_NS,
7424
- inject: () => ({
7425
- hooks: deleteToast.hooks,
7426
- dismiss: deleteToast.dismiss
7427
- })
7428
- }, ScheduleDeleteToast));
7429
- /**
7430
- * Forward one compare-and-update request, which may replace the task name,
7431
- * the instruction, and/or the timing, and refresh the authoritative catalog
7432
- * after an accepted or stale outcome.
7433
- * @param request - complete expected record with the optional content and timing change.
7434
- * @returns the original Remote mutation result.
7435
- */
7436
- const updateTask = async (request) => {
7437
- const result = await ctx.remote.schedule.update(request);
7438
- if (result.ok && ("record" in result.value || result.value.code === "schedule_conflict" || result.value.code === "schedule_ended" || result.value.code === "schedule_not_found")) await manager.onRetry(manager.hooks.catalog.getSnapshot().readRequest);
7439
- return result;
7440
- };
7441
- const loadHistory = (request) => ctx.remote.schedule.history(request);
7442
- const openSession = (id) => {
7443
- if (sessionLinkState(id, ctx.sessions.list.getSnapshot(), ctx.workspaces.list.getSnapshot()) === "available") ctx.uiWorkspace.openSession(id);
7444
- };
7445
- const detail = {
7446
- hooks: manager.hooks,
7447
- onDelete: reportedDelete(manager.onDelete),
7448
- onRetry: manager.onRetry,
7449
- onUpdateTiming: updateTask,
7450
- loadHistory,
7451
- onOpenSession: openSession
7452
- };
7453
- const taskBindings = new TaskTabBindings((sessionId) => ctx.sidebarRight.tabsIn(sessionId).map((tab) => tab.id));
9057
+ ctx.effect(() => ctx.locale.register(MANAGER_NS, managerDictionaries), "ui-schedule: manager dictionaries");
9058
+ const t = ctx.locale.bind(MANAGER_NS);
7454
9059
  ctx.effect(() => ctx.sidebarRightTabs.register(scheduleTaskDefinition(t)), "ui-schedule: task tab type");
7455
- ctx.slots.inject("sidebar.right.pane.tab", () => ctx.slots.register({
7456
- name: "sidebar.right.pane.tab",
7457
- key: SCHEDULE_TASK_ID,
7458
- locale: MANAGER_NS,
7459
- inject: () => ({
7460
- ...detail,
7461
- taskBindings
7462
- })
7463
- }, ScheduleTaskTab));
7464
- ctx.slots.inject("sidebar.right.pane.tab.title", () => ctx.slots.register({
7465
- name: "sidebar.right.pane.tab.title",
7466
- key: SCHEDULE_TASK_ID,
7467
- locale: MANAGER_NS,
7468
- inject: () => ({
7469
- hooks: detail.hooks,
7470
- taskBindings
7471
- })
7472
- }, ScheduleTaskTabTitle));
7473
- ctx.slots.inject("main", () => ctx.slots.register({
7474
- name: "main",
7475
- key: PANEL_ID,
7476
- locale: MANAGER_NS,
7477
- inject: () => ({
7478
- ...detail,
7479
- onNewTask: () => {
7480
- ctx.uiWorkspace.startSession();
7481
- }
7482
- })
7483
- }, TaskManagerPage));
7484
- ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({
7485
- name: "sidebar.panellist",
7486
- id: PANEL_ID,
7487
- order: 10,
7488
- locale: MANAGER_NS,
7489
- label: () => t("panel")
7490
- }, TaskManagerIcon));
7491
9060
  ctx.uiConversation.events.register(scheduleTurnDefinition);
7492
- ctx.slots.inject("conversation.chat.turnTail", () => ctx.slots.register({
7493
- name: "conversation.chat.turnTail",
7494
- id: "schedule-created",
7495
- order: 20,
7496
- locale: MANAGER_NS,
7497
- inject: (sessionId) => ({
7498
- hooks: { catalog: manager.hooks.catalog },
7499
- onRetry: manager.onRetry,
7500
- openTaskDetail: (id) => {
7501
- ctx.sidebarRight.openTab(SCHEDULE_TASK_KIND, { params: {
7502
- sessionId,
9061
+ ctx.remoteAccess.whenAccess("schedule/catalog", function* () {
9062
+ const manager = createCatalogSource({
9063
+ list: () => ctx.remote.schedule.catalog(),
9064
+ remove: async (id) => {
9065
+ const record = manager.hooks.catalog.getSnapshot().records.find((item) => item.id === id);
9066
+ if (record === void 0) return {
9067
+ ok: true,
9068
+ value: {
9069
+ id,
9070
+ deleted: false,
9071
+ code: "schedule_not_found"
9072
+ }
9073
+ };
9074
+ return ctx.remote.schedule.delete({
9075
+ sessionId: record.sessionId,
7503
9076
  id
7504
- } });
7505
- }
7506
- })
7507
- }, ScheduleTurnCard));
7508
- const createSource = (sessionId) => createSessionScheduleSource(ctx, sessionId);
7509
- ctx.slots.inject("conversation.session.header.utilities", () => ctx.slots.register({
7510
- name: "conversation.session.header.utilities",
7511
- id: "schedule-catalog",
7512
- order: -5,
7513
- locale: NS,
7514
- inject: (sessionId) => {
7515
- const source = createSource(sessionId);
7516
- return {
7517
- ...source,
7518
- onDelete: reportedDelete(source.onDelete),
9077
+ });
9078
+ },
9079
+ subscribeChanged: (listener) => ctx.remote.$on("schedule/changed", listener),
9080
+ subscribeReset: (listener) => ctx.on("connection/reset", listener)
9081
+ });
9082
+ const deleteToast = createDeleteToastSource();
9083
+ const reportedDelete = (onDelete) => async (id) => {
9084
+ const outcome = await onDelete(id);
9085
+ deleteToast.report(outcome);
9086
+ return outcome;
9087
+ };
9088
+ yield ctx.slots.inject("shell.overlay", () => ctx.slots.register({
9089
+ name: "shell.overlay",
9090
+ id: "schedule.delete-toast",
9091
+ locale: MANAGER_NS,
9092
+ inject: () => ({
9093
+ hooks: deleteToast.hooks,
9094
+ dismiss: deleteToast.dismiss
9095
+ })
9096
+ }, ScheduleDeleteToast));
9097
+ /**
9098
+ * Forward one compare-and-update request, which may replace the task name,
9099
+ * the instruction, and/or the timing, and refresh the authoritative catalog
9100
+ * after an accepted or stale outcome.
9101
+ * @param request - complete expected record with the optional content and timing change.
9102
+ * @returns the original Remote mutation result.
9103
+ */
9104
+ const updateTask = async (request) => {
9105
+ const result = await ctx.remote.schedule.update(request);
9106
+ if (result.ok && ("record" in result.value || result.value.code === "schedule_conflict" || result.value.code === "schedule_ended" || result.value.code === "schedule_not_found")) await manager.onRetry(manager.hooks.catalog.getSnapshot().readRequest);
9107
+ return result;
9108
+ };
9109
+ const loadHistory = (request) => ctx.remote.schedule.history(request);
9110
+ const openSession = (id) => {
9111
+ if (sessionLinkState(id, ctx.sessions.list.getSnapshot(), ctx.workspaces.list.getSnapshot()) === "available") ctx.uiWorkspace.openSession(id);
9112
+ };
9113
+ /**
9114
+ * Remove every ended Host task and read the catalog back.
9115
+ *
9116
+ * The readback names every request seen so far, so it supersedes a read sent
9117
+ * before the removal instead of joining it.
9118
+ * @returns the settled bulk-removal outcome.
9119
+ */
9120
+ const clearEnded = createClearEnded({
9121
+ removeInactive: () => ctx.remote.schedule.deleteInactive(),
9122
+ refresh: () => manager.onRetry(manager.hooks.catalog.getSnapshot().readRequest)
9123
+ });
9124
+ const detail = {
9125
+ hooks: manager.hooks,
9126
+ onDelete: reportedDelete(manager.onDelete),
9127
+ onRetry: manager.onRetry,
9128
+ onUpdateTiming: updateTask,
9129
+ loadHistory,
9130
+ onOpenSession: openSession
9131
+ };
9132
+ const taskBindings = new TaskTabBindings((sessionId) => ctx.sidebarRight.tabsIn(sessionId).map((tab) => tab.id));
9133
+ yield ctx.slots.inject("sidebar.right.pane.tab", () => ctx.slots.register({
9134
+ name: "sidebar.right.pane.tab",
9135
+ key: SCHEDULE_TASK_ID,
9136
+ locale: MANAGER_NS,
9137
+ inject: () => ({
9138
+ ...detail,
9139
+ taskBindings
9140
+ })
9141
+ }, ScheduleTaskTab));
9142
+ yield ctx.slots.inject("sidebar.right.pane.tab.title", () => ctx.slots.register({
9143
+ name: "sidebar.right.pane.tab.title",
9144
+ key: SCHEDULE_TASK_ID,
9145
+ locale: MANAGER_NS,
9146
+ inject: () => ({
9147
+ hooks: detail.hooks,
9148
+ taskBindings
9149
+ })
9150
+ }, ScheduleTaskTabTitle));
9151
+ yield ctx.slots.inject("main", () => ctx.slots.register({
9152
+ name: "main",
9153
+ key: PANEL_ID,
9154
+ locale: MANAGER_NS,
9155
+ inject: () => ({
9156
+ ...detail,
9157
+ onNewTask: () => {
9158
+ ctx.uiWorkspace.startSession();
9159
+ },
9160
+ onClearEnded: async () => {
9161
+ const outcome = await clearEnded();
9162
+ deleteToast.reportClear(outcome);
9163
+ }
9164
+ })
9165
+ }, TaskManagerPage));
9166
+ yield ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({
9167
+ name: "sidebar.panellist",
9168
+ id: PANEL_ID,
9169
+ order: 10,
9170
+ locale: MANAGER_NS,
9171
+ label: () => t("panel")
9172
+ }, TaskManagerIcon));
9173
+ yield ctx.slots.inject("conversation.chat.turnTail", () => ctx.slots.register({
9174
+ name: "conversation.chat.turnTail",
9175
+ id: "schedule-created",
9176
+ order: 20,
9177
+ locale: MANAGER_NS,
9178
+ inject: (sessionId) => ({
9179
+ hooks: { catalog: manager.hooks.catalog },
9180
+ onRetry: manager.onRetry,
7519
9181
  openTaskDetail: (id) => {
7520
9182
  ctx.sidebarRight.openTab(SCHEDULE_TASK_KIND, { params: {
7521
9183
  sessionId,
7522
9184
  id
7523
9185
  } });
7524
9186
  }
7525
- };
7526
- }
7527
- }, ScheduleCatalogAction));
7528
- ctx.slots.inject("sidebar.session.row.leading", () => ctx.slots.register({
7529
- name: "sidebar.session.row.leading",
7530
- id: "schedule-mark",
7531
- order: 10,
7532
- locale: NS,
7533
- inject: () => ({ hooks: { catalog: manager.hooks.catalog } })
7534
- }, SessionScheduleMark));
7535
- ctx.slots.inject("sidebar.session.row.hover", () => ctx.slots.register({
7536
- name: "sidebar.session.row.hover",
7537
- id: "schedule-tasks",
7538
- order: 10,
7539
- locale: NS,
7540
- inject: () => ({ hooks: { catalog: manager.hooks.catalog } })
7541
- }, SessionScheduleHover));
9187
+ })
9188
+ }, ScheduleTurnCard));
9189
+ const createSource = (sessionId) => createSessionScheduleSource(ctx, sessionId);
9190
+ yield ctx.slots.inject("conversation.session.header.utilities", () => ctx.slots.register({
9191
+ name: "conversation.session.header.utilities",
9192
+ id: "schedule-catalog",
9193
+ order: -5,
9194
+ locale: NS,
9195
+ inject: (sessionId) => {
9196
+ const source = createSource(sessionId);
9197
+ return {
9198
+ ...source,
9199
+ onDelete: reportedDelete(source.onDelete),
9200
+ openTaskDetail: (id) => {
9201
+ ctx.sidebarRight.openTab(SCHEDULE_TASK_KIND, { params: {
9202
+ sessionId,
9203
+ id
9204
+ } });
9205
+ }
9206
+ };
9207
+ }
9208
+ }, ScheduleCatalogAction));
9209
+ yield ctx.slots.inject("sidebar.session.row.leading", () => ctx.slots.register({
9210
+ name: "sidebar.session.row.leading",
9211
+ id: "schedule-mark",
9212
+ order: 10,
9213
+ locale: NS,
9214
+ inject: () => ({ hooks: { catalog: manager.hooks.catalog } })
9215
+ }, SessionScheduleMark));
9216
+ yield ctx.slots.inject("sidebar.session.row.hover", () => ctx.slots.register({
9217
+ name: "sidebar.session.row.hover",
9218
+ id: "schedule-tasks",
9219
+ order: 10,
9220
+ locale: NS,
9221
+ inject: () => ({ hooks: { catalog: manager.hooks.catalog } })
9222
+ }, SessionScheduleHover));
9223
+ });
7542
9224
  }
7543
9225
  //#endregion
7544
9226
  exports.apply = apply;