@deepseek-ai/dsh-client-ui-schedule 0.1.7-alpha.2 → 0.1.7-rc.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/README.i18n.yaml +39 -5
- package/README.md +36 -39
- package/README.zh.md +42 -45
- package/lib/client.js +6735 -171
- package/lib/index.js +1 -1
- package/lib/types/client/CalendarIcon.d.ts +17 -0
- package/lib/types/client/CatalogFeedback.d.ts +28 -0
- package/lib/types/client/ClockPicker.d.ts +33 -0
- package/lib/types/client/DatePicker.d.ts +27 -0
- package/lib/types/client/DeleteToast.d.ts +47 -0
- package/lib/types/client/DeliveryHistory.d.ts +29 -0
- package/lib/types/client/PickerPopover.d.ts +27 -0
- package/lib/types/client/ScheduleCatalogAction.d.ts +12 -13
- package/lib/types/client/ScheduleCreateCard.d.ts +37 -0
- package/lib/types/client/ScheduleTaskTab.d.ts +36 -0
- package/lib/types/client/ScheduleTaskTabTitle.d.ts +21 -0
- package/lib/types/client/ScheduleTurnCard.d.ts +25 -0
- package/lib/types/client/SessionScheduleHover.d.ts +34 -0
- package/lib/types/client/SessionScheduleMark.d.ts +31 -0
- package/lib/types/client/TaskDetail.d.ts +158 -0
- package/lib/types/client/TaskManagerIcon.d.ts +11 -0
- package/lib/types/client/TaskManagerPage.d.ts +25 -0
- package/lib/types/client/TaskMenu.d.ts +76 -0
- package/lib/types/client/catalog-source.d.ts +91 -0
- package/lib/types/client/definition.d.ts +40 -0
- package/lib/types/client/frequency-locales.d.ts +71 -0
- package/lib/types/client/index.d.ts +40 -4
- package/lib/types/client/locales.d.ts +59 -8
- package/lib/types/client/recent-time-zones.d.ts +15 -0
- package/lib/types/client/relative-clock.d.ts +26 -0
- package/lib/types/client/schedule-create-card.d.ts +46 -0
- package/lib/types/client/schedule-format.d.ts +177 -0
- package/lib/types/client/schedule-turn.d.ts +63 -0
- package/lib/types/client/session-link.d.ts +41 -0
- package/lib/types/client/session-schedule-state.d.ts +62 -0
- package/lib/types/client/task-cron.d.ts +116 -0
- package/lib/types/client/task-manager-locales.d.ts +195 -0
- package/lib/types/client/task-tab-bindings.d.ts +114 -0
- package/lib/types/client/task-tab-target.d.ts +31 -0
- package/lib/types/client/task-timing.d.ts +96 -0
- package/lib/types/index.d.ts +1 -1
- package/package.json +31 -12
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/** Browser-safe formatting shared by Session and Host reminder catalogs. */
|
|
2
|
+
import type { Translate } from '@deepseek-ai/dsh-client-ui-slots';
|
|
3
|
+
import type { ScheduleRecord } from '@deepseek-ai/dsh-schedule/client';
|
|
4
|
+
import type { CronDescriptionKey } from './task-cron.ts';
|
|
5
|
+
type TimeUnit = 'day' | 'hour' | 'minute' | 'second';
|
|
6
|
+
type UnitKey = `unit.${TimeUnit}.${'one' | 'other'}`;
|
|
7
|
+
type WeekdayKey = `frequency.weekday.${1 | 2 | 3 | 4 | 5 | 6 | 7}`;
|
|
8
|
+
/** Dictionary keys required to display exact reminder frequencies. */
|
|
9
|
+
export type FrequencyKey = 'time.locale' | 'time.utcPrefix' | 'frequency.once' | 'frequency.every' | 'frequency.daily' | 'frequency.dailyLocal' | 'frequency.weekly' | 'frequency.weeklyLocal' | 'frequency.cron' | 'frequency.cronLocal' | 'frequency.cronRule' | 'frequency.weekday.join' | WeekdayKey | UnitKey | CronDescriptionKey;
|
|
10
|
+
/** Namespace-independent translator for reminder frequencies and time units. */
|
|
11
|
+
export type FrequencyTranslator = Translate<FrequencyKey>;
|
|
12
|
+
/** Dictionary keys required to localize a zone and mark the host's zone. */
|
|
13
|
+
export type ZoneLabelKey = 'time.locale' | 'time.utcPrefix' | 'rule.zone.system';
|
|
14
|
+
type ZoneLocaleKey = Extract<ZoneLabelKey, 'time.locale' | 'time.utcPrefix'>;
|
|
15
|
+
/** Universal fallback when a runtime cannot enumerate its ICU time-zone data. */
|
|
16
|
+
export declare const FALLBACK_ZONES: readonly ["UTC"];
|
|
17
|
+
/** Host-zone context a frequency line uses to omit or name a rule's stored zone. */
|
|
18
|
+
export interface FrequencyZone {
|
|
19
|
+
/** Host's current IANA zone; a rule storing this zone shows no zone. */
|
|
20
|
+
readonly system: string;
|
|
21
|
+
/** ICU-localized name and offset of one zone. */
|
|
22
|
+
readonly label: (zone: string) => string;
|
|
23
|
+
}
|
|
24
|
+
/** Dictionary keys required to display relative reminder targets. */
|
|
25
|
+
export type RelativeTimeKey = UnitKey | 'relative.now' | 'relative.future' | 'relative.overdue';
|
|
26
|
+
/**
|
|
27
|
+
* Name one task from its stored title.
|
|
28
|
+
*
|
|
29
|
+
* Every decoded Host record and catalog entry carries a title that is non-empty
|
|
30
|
+
* after trimming, so no name is derived from the instruction here. The
|
|
31
|
+
* `schedule_create` card derives one only for a result read from a Session log
|
|
32
|
+
* written before the stored field existed.
|
|
33
|
+
* @param record - task being named.
|
|
34
|
+
* @returns the stored title.
|
|
35
|
+
*/
|
|
36
|
+
export declare function taskName(record: ScheduleRecord): string;
|
|
37
|
+
/**
|
|
38
|
+
* Render the stored ISO weekday set with localized names joined in locale order.
|
|
39
|
+
* @param weekdays - Stored unique ascending ISO weekdays.
|
|
40
|
+
* @param t - frequency, join, and unit translations.
|
|
41
|
+
* @returns Localized weekday list, for example `Mon, Wed`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function formatWeekdays(weekdays: readonly number[], t: FrequencyTranslator): string;
|
|
44
|
+
/**
|
|
45
|
+
* Localize one IANA zone through the runtime's ICU/CLDR data, prefixed by its
|
|
46
|
+
* current UTC offset. The raw IANA id remains internal unless ICU cannot name
|
|
47
|
+
* a valid stored alias.
|
|
48
|
+
* @param zone - IANA zone to label.
|
|
49
|
+
* @param t - translate providing the active ICU locale.
|
|
50
|
+
* @param at - instant used to resolve the current UTC offset and zone name.
|
|
51
|
+
* @returns the UTC offset and localized zone name.
|
|
52
|
+
*/
|
|
53
|
+
export declare function zoneLabel(zone: string, t: Translate<ZoneLocaleKey>, at?: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* Name one zone and mark it when it is the host's own zone.
|
|
56
|
+
* @param zone - IANA zone to name.
|
|
57
|
+
* @param system - the host's current IANA zone.
|
|
58
|
+
* @param t - translate providing the active ICU locale and system suffix.
|
|
59
|
+
* @param at - instant used to resolve the current UTC offset and zone name.
|
|
60
|
+
* @returns UTC offset and localized zone name, with the system suffix when applicable.
|
|
61
|
+
*/
|
|
62
|
+
export declare function zoneName(zone: string, system: string, t: Translate<ZoneLabelKey>, at?: number): string;
|
|
63
|
+
/**
|
|
64
|
+
* Zones the time-zone menu offers, in menu order: the host's current zone,
|
|
65
|
+
* followed by the runtime's IANA inventory ordered by current UTC offset and
|
|
66
|
+
* canonical id, including a stored alias the inventory omits.
|
|
67
|
+
*
|
|
68
|
+
* `Intl.supportedValuesOf('timeZone')` supplies the inventory, so an engine
|
|
69
|
+
* that can enumerate zones offers all of them. When enumeration is unavailable,
|
|
70
|
+
* the menu falls back to the host zone, UTC, and any stored zone, so it is never
|
|
71
|
+
* empty. A stored zone outside the inventory is appended,
|
|
72
|
+
* so an accepted alias never disappears from the menu.
|
|
73
|
+
* @param stored - zone the shown rule stores.
|
|
74
|
+
* @param system - the host's current IANA zone.
|
|
75
|
+
* @param at - instant used to order zones by their current UTC offset.
|
|
76
|
+
* @returns IANA zones in menu order, de-duplicated.
|
|
77
|
+
*/
|
|
78
|
+
export declare function zoneChoices(stored: string, system: string, at?: number): readonly string[];
|
|
79
|
+
/**
|
|
80
|
+
* IANA zone a record's stored wall-clock rule interprets its time in.
|
|
81
|
+
*
|
|
82
|
+
* Daily, weekly, and cron records store an explicit zone. One-shot `at` and
|
|
83
|
+
* `after` records, and fixed-interval `every` records, store only the UTC
|
|
84
|
+
* instant, so they have no rule zone and their displayed time uses the browser zone.
|
|
85
|
+
* @param record - reminder whose kind determines whether a zone is stored.
|
|
86
|
+
* @returns the stored IANA zone, or undefined when the record stores none.
|
|
87
|
+
*/
|
|
88
|
+
export declare function recordTimeZone(record: ScheduleRecord): string | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Format exact intervals or wall-clock rules without changing their precision or zone.
|
|
91
|
+
*
|
|
92
|
+
* A cron rule reads as the sentence `cronPreview` derives from its expression,
|
|
93
|
+
* for example `Every day at 09:00, 15:00`. An expression this parser cannot
|
|
94
|
+
* read keeps the raw `Cron {expression}` form, so the stored rule stays visible
|
|
95
|
+
* when the Host's dialect and this parser diverge.
|
|
96
|
+
* @param record - reminder whose kind and stored rule determine its frequency.
|
|
97
|
+
* @param t - frequency, weekday, and unit translations, independent of the catalog namespace.
|
|
98
|
+
* @param zone - host-zone context; when present, a stored zone equal to `zone.system` is omitted
|
|
99
|
+
* and another zone is named by `zone.label`. Without it ICU localizes the stored zone.
|
|
100
|
+
* @returns localized one-shot, fixed-interval, daily, weekly, or cron time-and-zone text.
|
|
101
|
+
*/
|
|
102
|
+
export declare function formatScheduleFrequency(record: ScheduleRecord, t: FrequencyTranslator, zone?: FrequencyZone): string;
|
|
103
|
+
/**
|
|
104
|
+
* Format one target instant as a localized month-and-day date with its time, the
|
|
105
|
+
* form the mock's task list shows and the same `Intl` field pair the universal
|
|
106
|
+
* cards use.
|
|
107
|
+
*
|
|
108
|
+
* The month is a locale-owned name, not a zero-padded number: `en` renders
|
|
109
|
+
* `Dec 31, 9:00 AM` and `zh-CN` renders `12月31日 09:00`, so neither locale can
|
|
110
|
+
* produce a `12-31` string. The year appears only when the instant falls outside
|
|
111
|
+
* the current year in the displayed zone, so a same-year target or delivery
|
|
112
|
+
* stays compact while an older record still dates itself.
|
|
113
|
+
*
|
|
114
|
+
* `timeZone` carries the rule's own zone for a daily, weekly, or cron record, so
|
|
115
|
+
* its occurrence reads in the task's zone. A one-shot `at` or `after` record
|
|
116
|
+
* stores only the UTC instant, so callers pass no zone and it formats in the
|
|
117
|
+
* browser zone.
|
|
118
|
+
* @param scheduledAt - durable UTC target.
|
|
119
|
+
* @param locale - BCP-47 locale owning the month name, day order, and clock.
|
|
120
|
+
* @param timeZone - IANA zone of the task's own rule, or undefined for the browser zone.
|
|
121
|
+
* @returns the localized month, day, and time, with the year when it is not the
|
|
122
|
+
* current one, or the raw instant when the value cannot be parsed.
|
|
123
|
+
*/
|
|
124
|
+
export declare function formatScheduleNextRun(scheduledAt: string, locale: string, timeZone?: string): string;
|
|
125
|
+
/**
|
|
126
|
+
* Format one target as an absolute time in this device's zone.
|
|
127
|
+
*
|
|
128
|
+
* A task whose stored rule names its own zone still shows its next run in the
|
|
129
|
+
* reader's zone: the instant is the same one, and the reader compares it with
|
|
130
|
+
* their own clock. The locale owns the month name, the field order, and the
|
|
131
|
+
* separators, so the stamp reads `Sep 19, 2026, 15:51` in English and
|
|
132
|
+
* `9月19日 15:51` in Chinese.
|
|
133
|
+
*
|
|
134
|
+
* Whether a bare date reads the year is a per-language typographic choice, and
|
|
135
|
+
* the languages the design pins are stated in {@link YEAR_LANGUAGES} and
|
|
136
|
+
* {@link NO_YEAR_LANGUAGES}. Every language not listed there states the year:
|
|
137
|
+
* dropping it silently would hide the year of a target that can sit months or a
|
|
138
|
+
* year away, which is worse than one field more than the reader needs.
|
|
139
|
+
* @param scheduledAt - durable UTC target.
|
|
140
|
+
* @param locale - BCP-47 locale owning the month name, field order, and clock.
|
|
141
|
+
* @returns the localized absolute next run in the device zone, or the raw instant when it cannot be parsed.
|
|
142
|
+
*/
|
|
143
|
+
export declare function formatScheduleAbsolute(scheduledAt: string, locale: string): string;
|
|
144
|
+
/**
|
|
145
|
+
* One next-run line as its two texts: the device-zone stamp and the distance.
|
|
146
|
+
*
|
|
147
|
+
* The list rows, the detail, the Session-header catalog, and the Sidebar hover
|
|
148
|
+
* card all state this pair, so they take it from here instead of each composing
|
|
149
|
+
* it: the stamp follows the language through `formatScheduleAbsolute`, and the
|
|
150
|
+
* distance stays the reader's countdown.
|
|
151
|
+
* @param scheduledAt - durable UTC target.
|
|
152
|
+
* @param locale - BCP-47 locale owning the month name, field order, and clock.
|
|
153
|
+
* @param now - current epoch milliseconds.
|
|
154
|
+
* @param t - relative-time and unit translations.
|
|
155
|
+
* @returns the absolute stamp, and the same distance wrapped in parentheses.
|
|
156
|
+
*/
|
|
157
|
+
export declare function nextRunParts(scheduledAt: string, locale: string, now: number, t: Translate<RelativeTimeKey>): {
|
|
158
|
+
readonly absolute: string;
|
|
159
|
+
readonly relative: string;
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Format a relative target using the largest natural clock unit.
|
|
163
|
+
* @param scheduledAt - durable UTC target.
|
|
164
|
+
* @param now - current epoch milliseconds.
|
|
165
|
+
* @param t - relative-time and unit translations.
|
|
166
|
+
* @returns localized future, overdue, or due-now label.
|
|
167
|
+
*/
|
|
168
|
+
export declare function formatScheduleRelative(scheduledAt: string, now: number, t: Translate<RelativeTimeKey>): string;
|
|
169
|
+
/**
|
|
170
|
+
* Order overdue records first and future records by ascending target time.
|
|
171
|
+
* @param records - reminders to order without mutating the input.
|
|
172
|
+
* @param now - current epoch milliseconds used to identify overdue targets.
|
|
173
|
+
* @returns sorted copy preserving input order for equal targets.
|
|
174
|
+
*/
|
|
175
|
+
export declare function orderScheduleRecords(records: readonly ScheduleRecord[], now: number): ScheduleRecord[];
|
|
176
|
+
export {};
|
|
177
|
+
//# sourceMappingURL=schedule-format.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ConversationNodeDefinition, ToolResultNode, TurnLocation } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
2
|
+
/** Wire Tool name whose settled result carries one created task. */
|
|
3
|
+
export declare const SCHEDULE_CREATE_TOOL = "schedule_create";
|
|
4
|
+
/** One settled `schedule_create` result the card renders. */
|
|
5
|
+
export type ScheduleCreatedTask = ToolResultNode;
|
|
6
|
+
/** Immutable created-task facts published against one Turn. */
|
|
7
|
+
export interface ScheduleTurnData {
|
|
8
|
+
readonly created: readonly ScheduleCreatedTask[];
|
|
9
|
+
}
|
|
10
|
+
declare module '@deepseek-ai/dsh-client-ui-conversation/client' {
|
|
11
|
+
interface ConversationTurnDataMap {
|
|
12
|
+
/** `schedule_create` results settled in this Turn, in settlement order. */
|
|
13
|
+
'schedule-created': ScheduleTurnData;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Turn-tail owner currency this row reads: the closing Turn with its sequence.
|
|
18
|
+
*
|
|
19
|
+
* Structurally equal to ui-chat's `TurnTailOwnerProps`; the fields are named
|
|
20
|
+
* locally so this package keeps its existing dependency set.
|
|
21
|
+
*/
|
|
22
|
+
export interface ScheduleTurnOwner {
|
|
23
|
+
readonly turn: TurnLocation;
|
|
24
|
+
readonly seq: number;
|
|
25
|
+
readonly openFile: (path: string) => void;
|
|
26
|
+
}
|
|
27
|
+
/** One in-window root call head, kept to build its result node. */
|
|
28
|
+
interface ScheduleCall {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly argsRaw: string;
|
|
31
|
+
readonly time: number;
|
|
32
|
+
}
|
|
33
|
+
interface ScheduleTurnState {
|
|
34
|
+
readonly turn: number;
|
|
35
|
+
readonly calls: ReadonlyMap<string, ScheduleCall>;
|
|
36
|
+
readonly created: readonly ScheduleCreatedTask[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Created tasks of one Turn up to a bound sequence.
|
|
40
|
+
*
|
|
41
|
+
* The Conversation Location index owns Turn membership before this runs, so
|
|
42
|
+
* tasks cannot spill across Turns.
|
|
43
|
+
* @param data - engine-published created-task data for one Turn.
|
|
44
|
+
* @param seq - bound sequence; settlements after it are excluded.
|
|
45
|
+
* @returns created result nodes in settlement order; empty when the Turn created none.
|
|
46
|
+
*/
|
|
47
|
+
export declare function scheduleTasksForClosing(data: Readonly<ScheduleTurnData> | undefined, seq?: number): readonly ScheduleCreatedTask[];
|
|
48
|
+
/**
|
|
49
|
+
* Select the tasks one Turn created, for the Turn-tail list entry to render.
|
|
50
|
+
*
|
|
51
|
+
* The bounded sequence is the Turn's own end, not the closing Assistant text: a
|
|
52
|
+
* Turn whose last text response precedes a `schedule_create` settlement still
|
|
53
|
+
* owns that creation when it ends on a failed request or a user stop, and the
|
|
54
|
+
* turn-tail seat exists only for a completed Turn. A Turn without a recorded end
|
|
55
|
+
* falls back to the owner's own sequence.
|
|
56
|
+
* @param owner - Turn-tail owner currency for the closing Assistant.
|
|
57
|
+
* @returns created tasks, or null when the Turn created none.
|
|
58
|
+
*/
|
|
59
|
+
export declare function selectScheduleTasks(owner: ScheduleTurnOwner): ScheduleTurnData | null;
|
|
60
|
+
/** Turn-local `schedule_create` accumulator; it publishes no view Node. */
|
|
61
|
+
export declare const scheduleTurnDefinition: ConversationNodeDefinition<ScheduleTurnState>;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=schedule-turn.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Original-Session link label and availability from the current public Session and Workspace feeds. */
|
|
2
|
+
import type { SessionListState } from '@deepseek-ai/dsh-api-session-controller/client';
|
|
3
|
+
import type { WorkspaceSnapshot } from '@deepseek-ai/dsh-api-workspace-controller/client';
|
|
4
|
+
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
5
|
+
/** Navigation state shown beside the retained task's original Session id. */
|
|
6
|
+
export type SessionLinkState = 'available' | 'loading' | 'archived' | 'unavailable';
|
|
7
|
+
/**
|
|
8
|
+
* Check Host-list membership and archive state without activating or restoring anything.
|
|
9
|
+
*
|
|
10
|
+
* `SessionListState.byId` also carries local fallback rows for live Client
|
|
11
|
+
* generations, so membership comes from `ids`, the Host-list projection: a
|
|
12
|
+
* Session the Host list dropped reports unavailable even while a local row for
|
|
13
|
+
* it survives.
|
|
14
|
+
* @param id - Original Session bound to the task.
|
|
15
|
+
* @param sessions - Current Session list projection.
|
|
16
|
+
* @param workspaces - Current Workspace and archive projection.
|
|
17
|
+
* @returns availability or the reason navigation is disabled.
|
|
18
|
+
*/
|
|
19
|
+
export declare function sessionLinkState(id: SessionId, sessions: SessionListState, workspaces: WorkspaceSnapshot): SessionLinkState;
|
|
20
|
+
/** Label one linked Session shows, and whether a Session title produced it. */
|
|
21
|
+
export interface SessionLabel {
|
|
22
|
+
/** Session title from the current catalog, otherwise the Session id. */
|
|
23
|
+
readonly text: string;
|
|
24
|
+
/** Whether a catalog title produced {@link SessionLabel.text}; false when the id is shown instead. */
|
|
25
|
+
readonly titled: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the label of one linked Session from the Session catalog the calling
|
|
29
|
+
* component already projects.
|
|
30
|
+
*
|
|
31
|
+
* A catalog title renders as-is; the Session id renders while the catalog holds
|
|
32
|
+
* no row for the Session (missing or not yet loaded) or its row carries a blank
|
|
33
|
+
* title, so the label is never empty. Every surface that names a linked Session
|
|
34
|
+
* resolves the label here, so the Automation tasks rows, the task detail, and the
|
|
35
|
+
* task tab all name the same Session the same way.
|
|
36
|
+
* @param id - Original Session bound to the task.
|
|
37
|
+
* @param sessions - Current Session list projection.
|
|
38
|
+
* @returns the resolved label and whether a catalog title produced it.
|
|
39
|
+
*/
|
|
40
|
+
export declare function sessionLabel(id: SessionId, sessions: SessionListState): SessionLabel;
|
|
41
|
+
//# sourceMappingURL=session-link.d.ts.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One Session's scheduled-task state for the ambient surfaces: the Sidebar
|
|
3
|
+
* row mark and the row hover-card task section.
|
|
4
|
+
*
|
|
5
|
+
* Both project the ONE Host catalog the page already owns — `schedule/catalog()`
|
|
6
|
+
* returns active and ended tasks with their originating `sessionId` — so N
|
|
7
|
+
* visible rows share one Remote read and follow one `schedule/changed`
|
|
8
|
+
* invalidation instead of issuing a query per row. The Session-header catalog
|
|
9
|
+
* keeps its own per-Session `schedule/list` source because it also lists the
|
|
10
|
+
* open Session's tasks.
|
|
11
|
+
*/
|
|
12
|
+
import type { Context as ClientContext } from '@deepseek-ai/cordis';
|
|
13
|
+
import type { HostObservable, SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots';
|
|
14
|
+
import type { ScheduleCatalogEntry } from '@deepseek-ai/dsh-schedule/client';
|
|
15
|
+
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
16
|
+
import { type CatalogInjected, type CatalogSnapshot } from './catalog-source.ts';
|
|
17
|
+
/** Per-Session source factory handed to the Session-header catalog occupant. */
|
|
18
|
+
export type SessionScheduleSourceFactory = (sessionId: SessionId) => CatalogInjected;
|
|
19
|
+
/**
|
|
20
|
+
* Create the durable reminder source for one Session.
|
|
21
|
+
*
|
|
22
|
+
* The stored read is `schedule/list`, which admits only tasks whose durable
|
|
23
|
+
* status is active; loading and error reads carry no authoritative answer.
|
|
24
|
+
* @param ctx - client context carrying the Remote schedule face.
|
|
25
|
+
* @param sessionId - Session whose tasks are read; reading never activates it.
|
|
26
|
+
* @returns observable catalog plus its mutation callbacks.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createSessionScheduleSource(ctx: ClientContext, sessionId: SessionId): CatalogInjected;
|
|
29
|
+
/** Selector hook the renderer binds from a slot's `hooks.catalog` observable. */
|
|
30
|
+
export type SessionScheduleCatalogHook = SnapshotSelectorHook<CatalogSnapshot<ScheduleCatalogEntry>>;
|
|
31
|
+
/** Shared Host catalog observable an ambient surface injects through its slot. */
|
|
32
|
+
export type SessionScheduleCatalogObservable = HostObservable<CatalogSnapshot<ScheduleCatalogEntry>>;
|
|
33
|
+
/** One Session's active scheduled tasks as projected from the shared Host catalog. */
|
|
34
|
+
export interface SessionScheduleFacts {
|
|
35
|
+
/** Whether the settled catalog holds at least one active task for the Session. */
|
|
36
|
+
readonly hasActive: boolean;
|
|
37
|
+
/** Active tasks of the Session in catalog order; empty unless the read settled. */
|
|
38
|
+
readonly records: readonly ScheduleCatalogEntry[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Project the shared Host catalog onto one Session's active tasks.
|
|
42
|
+
*
|
|
43
|
+
* `schedule/catalog()` returns active and ended tasks for every Session, so
|
|
44
|
+
* both facts come from this one snapshot filtered by `sessionId` and
|
|
45
|
+
* `status === 'active'`. A read that never settled answers no active task; a
|
|
46
|
+
* refresh republishes `loading` over the records of the last successful read, and
|
|
47
|
+
* the Host emits `schedule/changed` after every delivery, so following `status`
|
|
48
|
+
* here would blank a Session's mark for each roundtrip. An ended-only Session
|
|
49
|
+
* lists nothing.
|
|
50
|
+
* @param snapshot - shared Host catalog snapshot.
|
|
51
|
+
* @param sessionId - Session whose facts are selected.
|
|
52
|
+
* @returns this Session's active-task facts.
|
|
53
|
+
*/
|
|
54
|
+
export declare function selectSessionScheduleFacts(snapshot: CatalogSnapshot<ScheduleCatalogEntry>, sessionId: SessionId): SessionScheduleFacts;
|
|
55
|
+
/**
|
|
56
|
+
* Select one Session's active-task facts from the shared Host catalog.
|
|
57
|
+
* @param useCatalog - selector hook bound to the shared Host catalog observable.
|
|
58
|
+
* @param sessionId - Session whose row is observed; reading activates nothing.
|
|
59
|
+
* @returns this Session's facts, stable across other Sessions' updates.
|
|
60
|
+
*/
|
|
61
|
+
export declare function useSessionScheduleFacts(useCatalog: SessionScheduleCatalogHook, sessionId: SessionId): SessionScheduleFacts;
|
|
62
|
+
//# sourceMappingURL=session-schedule-state.d.ts.map
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { Translate } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
/** ISO weekday dictionary key naming one cron day-of-week value. */
|
|
3
|
+
type CronWeekdayKey = `frequency.weekday.${1 | 2 | 3 | 4 | 5 | 6 | 7}`;
|
|
4
|
+
/** Dictionary keys the cron description renders. */
|
|
5
|
+
export type CronDescriptionKey = CronWeekdayKey | 'cron.list.join' | 'cron.part.join' | 'cron.weekday.name' | 'cron.weekday.range' | 'cron.months' | 'cron.day.every' | 'cron.day.weekdays' | 'cron.day.monthDays' | 'cron.day.both' | 'cron.day.bothStarred' | 'cron.hours.range' | 'cron.hours.list' | 'cron.time.everyMinute' | 'cron.time.everyMinutes' | 'cron.time.joinedEveryMinute' | 'cron.time.joinedEveryMinutes' | 'cron.time.everyHour' | 'cron.time.joinedEveryHour' | 'cron.time.everyNHours' | 'cron.time.joinedEveryNHours' | 'cron.time.hourlyAt' | 'cron.time.joinedHourlyAt' | 'cron.time.hoursEveryMinute' | 'cron.time.hoursEveryMinutes' | 'cron.time.at' | 'cron.time.hoursAt';
|
|
6
|
+
/** Namespace-independent translator for the cron description. */
|
|
7
|
+
export type CronDescriptionTranslator = Translate<CronDescriptionKey>;
|
|
8
|
+
/** One parsed cron field: its matched values, its Vixie star flag, and its coverage. */
|
|
9
|
+
export interface CronField {
|
|
10
|
+
/** Unique ascending matched values; Sunday 7 is folded onto 0. */
|
|
11
|
+
readonly values: readonly number[];
|
|
12
|
+
/**
|
|
13
|
+
* Whether the field text starts with `*`, which is Vixie's `DOM_STAR`/`DOW_STAR`
|
|
14
|
+
* test the Host applies: a stepped star such as `*/2` counts, while a full range
|
|
15
|
+
* written out (`1-31`) does not.
|
|
16
|
+
*/
|
|
17
|
+
readonly starred: boolean;
|
|
18
|
+
/** Whether the matched set is every value the field can take. */
|
|
19
|
+
readonly full: boolean;
|
|
20
|
+
/** Whether the field is a star field that matches every value. */
|
|
21
|
+
readonly unrestricted: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** One parsed five-field cron expression in evaluation order. */
|
|
24
|
+
export interface ParsedCron {
|
|
25
|
+
/** Unique ascending matched minutes. */
|
|
26
|
+
readonly minutes: CronField;
|
|
27
|
+
/** Unique ascending matched hours. */
|
|
28
|
+
readonly hours: CronField;
|
|
29
|
+
/** Unique ascending matched days of the month. */
|
|
30
|
+
readonly daysOfMonth: CronField;
|
|
31
|
+
/** Unique ascending matched months. */
|
|
32
|
+
readonly months: CronField;
|
|
33
|
+
/** Unique ascending matched cron weekdays, Sunday 0 through Saturday 6. */
|
|
34
|
+
readonly daysOfWeek: CronField;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse one five-field cron expression in the dialect the Host accepts.
|
|
38
|
+
* @param expression - candidate `minute hour day-of-month month day-of-week` text.
|
|
39
|
+
* @returns parsed fields, or undefined when the Host would reject the expression.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseCronExpression(expression: string): ParsedCron | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Describe one parsed cron expression as one localized sentence.
|
|
44
|
+
* @param parsed - parsed cron expression.
|
|
45
|
+
* @param t - cron translations.
|
|
46
|
+
* @param locale - active UI locale naming restricted months.
|
|
47
|
+
* @returns localized sentence, for example `Mon–Fri at 09:00` or `Every 15 minutes`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function cronPreview(parsed: ParsedCron, t: CronDescriptionTranslator, locale: string): string;
|
|
50
|
+
/** One structured cron shape the Run time card's builder edits as rows. */
|
|
51
|
+
export type CronBuilderState = {
|
|
52
|
+
/** Runs every `step` minutes of every hour and day. */
|
|
53
|
+
readonly kind: 'minutely';
|
|
54
|
+
/** Whole minutes between runs, 1 through 59. */
|
|
55
|
+
readonly step: number;
|
|
56
|
+
} | {
|
|
57
|
+
/** Runs at one minute of every `step` hours, every day. */
|
|
58
|
+
readonly kind: 'hourly';
|
|
59
|
+
/** Whole hours between runs, 1 through 23. */
|
|
60
|
+
readonly step: number;
|
|
61
|
+
/** Minute of each matched hour, 0 through 59. */
|
|
62
|
+
readonly minute: number;
|
|
63
|
+
} | {
|
|
64
|
+
/** Runs once a day at one wall-clock time. */
|
|
65
|
+
readonly kind: 'daily';
|
|
66
|
+
/** Hour of that time, 0 through 23. */
|
|
67
|
+
readonly hour: number;
|
|
68
|
+
/** Minute of that hour, 0 through 59. */
|
|
69
|
+
readonly minute: number;
|
|
70
|
+
} | {
|
|
71
|
+
/** Runs on chosen weekdays at one wall-clock time. */
|
|
72
|
+
readonly kind: 'weekly';
|
|
73
|
+
/** ISO weekdays, Monday 1 through Sunday 7; never empty. */
|
|
74
|
+
readonly weekdays: readonly number[];
|
|
75
|
+
/** Hour of that time, 0 through 23. */
|
|
76
|
+
readonly hour: number;
|
|
77
|
+
/** Minute of that hour, 0 through 59. */
|
|
78
|
+
readonly minute: number;
|
|
79
|
+
} | {
|
|
80
|
+
/** Runs on chosen days of every month at one wall-clock time. */
|
|
81
|
+
readonly kind: 'monthly';
|
|
82
|
+
/** Days of the month, 1 through 31, ascending; never empty. */
|
|
83
|
+
readonly days: readonly number[];
|
|
84
|
+
/** Hour of that time, 0 through 23. */
|
|
85
|
+
readonly hour: number;
|
|
86
|
+
/** Minute of that hour, 0 through 59. */
|
|
87
|
+
readonly minute: number;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Recognize the structured shape one parsed expression states, when one does.
|
|
91
|
+
*
|
|
92
|
+
* Every shape requires an unrestricted month. Exactly one of the two day fields
|
|
93
|
+
* may restrict: a restricted weekday beside a star day-of-month is a weekly
|
|
94
|
+
* rule, a restricted day-of-month beside a star weekday is a monthly rule, and
|
|
95
|
+
* both restricting is unrecognized because each restriction matches
|
|
96
|
+
* independently under the Host's Vixie union rule. Only a literal star states a
|
|
97
|
+
* day field with no restriction: a written-out full set such as `0-6` or `1-31`
|
|
98
|
+
* stays a weekly or monthly rule with every value selected, so toggling the
|
|
99
|
+
* last pill on never collapses its row. Stepped shapes accept any uniform
|
|
100
|
+
* full-range step on the clock, spelled with a star or written out, since both
|
|
101
|
+
* match the same minutes or hours.
|
|
102
|
+
* @param parsed - parsed cron expression.
|
|
103
|
+
* @returns the shape the builder can edit, or undefined for the raw-expression fallback.
|
|
104
|
+
*/
|
|
105
|
+
export declare function recognizeCronShape(parsed: ParsedCron): CronBuilderState | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Spell one builder shape as the five-field expression a save submits.
|
|
108
|
+
*
|
|
109
|
+
* `recognizeCronShape` recognizes every expression this returns as the same
|
|
110
|
+
* shape, so a builder edit never falls back to the raw-expression row.
|
|
111
|
+
* @param state - builder shape to spell.
|
|
112
|
+
* @returns the expression stating that shape.
|
|
113
|
+
*/
|
|
114
|
+
export declare function cronShapeExpression(state: CronBuilderState): string;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=task-cron.d.ts.map
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/** English task-manager dictionary and key domain. */
|
|
2
|
+
export declare const en: {
|
|
3
|
+
readonly 'timing.date': "Date";
|
|
4
|
+
readonly 'timing.time': "Time";
|
|
5
|
+
readonly 'timing.hour': "Hour";
|
|
6
|
+
readonly 'timing.minute': "Minute";
|
|
7
|
+
readonly 'timing.second': "Second";
|
|
8
|
+
readonly 'timing.prevMonth': "Previous month";
|
|
9
|
+
readonly 'timing.nextMonth': "Next month";
|
|
10
|
+
readonly 'timing.zone': "Time zone";
|
|
11
|
+
readonly 'timing.zoneSearch': "Search by UTC offset, IANA ID, or city";
|
|
12
|
+
readonly 'timing.zoneNoResults': "No matching time zones";
|
|
13
|
+
readonly 'timing.interval': "Repeat every";
|
|
14
|
+
readonly 'timing.intervalIncrease': "Increase interval";
|
|
15
|
+
readonly 'timing.intervalDecrease': "Decrease interval";
|
|
16
|
+
readonly 'timing.unit.hour': "hours";
|
|
17
|
+
readonly 'timing.unit.minute': "minutes";
|
|
18
|
+
readonly 'timing.unit.second': "seconds";
|
|
19
|
+
readonly 'timing.intervalHint.hour': "At least 1 hour. The interval counts from task creation or the last rule change and is independent of time zones.";
|
|
20
|
+
readonly 'timing.intervalHint.minute': "At least 1 minute. The interval counts from task creation or the last rule change and is independent of time zones.";
|
|
21
|
+
readonly 'timing.intervalHint.second': "At least 60 seconds. The interval counts from task creation or the last rule change and is independent of time zones.";
|
|
22
|
+
readonly 'timing.zoneNoStored': "A one-time task stores only its target moment, not a time zone. The date and time are interpreted in the selected time zone.";
|
|
23
|
+
readonly 'timing.inactive': "Inactive tasks are read-only. Their timing cannot be edited.";
|
|
24
|
+
readonly 'timing.conflict': string;
|
|
25
|
+
readonly 'timing.notFound': "This task is no longer available. Your draft is retained; cancel to close the editor.";
|
|
26
|
+
readonly 'timing.invalid': "Enter a valid date and time, or check the timing fields.";
|
|
27
|
+
readonly 'timing.invalidZone': "Enter a valid IANA time zone, for example Asia/Shanghai.";
|
|
28
|
+
readonly 'timing.notFuture': "Choose a date and time in the future.";
|
|
29
|
+
readonly 'timing.invalidInterval': "Enter an interval of at least 1 minute.";
|
|
30
|
+
readonly 'timing.invalidInterval.hour': "Enter an interval of at least 1 hour.";
|
|
31
|
+
readonly 'timing.invalidInterval.minute': "Enter an interval of at least 1 minute.";
|
|
32
|
+
readonly 'timing.invalidInterval.second': "Enter an interval of at least 60 seconds.";
|
|
33
|
+
readonly 'timing.error': "Could not confirm the timing update. Your draft is retained. Check the task before retrying.";
|
|
34
|
+
readonly 'rule.title': "Run time";
|
|
35
|
+
readonly 'rule.repeat': "Repeat";
|
|
36
|
+
readonly 'rule.weekday': "Weekday";
|
|
37
|
+
readonly 'rule.weekdayOption': "Weekday {weekday}";
|
|
38
|
+
readonly 'rule.unsaved': "Unsaved changes";
|
|
39
|
+
readonly 'rule.save': "Save changes";
|
|
40
|
+
readonly 'rule.saving': "Saving…";
|
|
41
|
+
readonly 'rule.cancel': "Cancel";
|
|
42
|
+
readonly 'rule.invalidTitle': "Enter a task name of at most 120 characters.";
|
|
43
|
+
readonly 'rule.invalidPrompt': "Enter a task instruction.";
|
|
44
|
+
readonly 'rule.once': "Once";
|
|
45
|
+
readonly 'rule.everyMinutes': "Every N minutes";
|
|
46
|
+
readonly 'rule.everyHours': "Every N hours";
|
|
47
|
+
readonly 'rule.everySeconds': "Every N seconds";
|
|
48
|
+
readonly 'rule.daily': "Every day";
|
|
49
|
+
readonly 'rule.weekdays': "Monday to Friday";
|
|
50
|
+
readonly 'rule.weekly': "Weekly";
|
|
51
|
+
readonly 'rule.cron': "Custom";
|
|
52
|
+
readonly 'rule.cronLabel': "Cron expression";
|
|
53
|
+
readonly 'rule.cronInvalid': "Enter a five-field cron expression, for example 0 9 * * 1-5.";
|
|
54
|
+
readonly 'cronForm.frequency': "Frequency";
|
|
55
|
+
readonly 'cronForm.monthly': "Monthly";
|
|
56
|
+
readonly 'cronForm.weekly': "Weekly";
|
|
57
|
+
readonly 'cronForm.daily': "Every day";
|
|
58
|
+
readonly 'cronForm.dates': "On dates";
|
|
59
|
+
readonly 'cronForm.dateOption': "Day {day}";
|
|
60
|
+
readonly 'cronForm.atMinute': "At minute";
|
|
61
|
+
readonly 'cronForm.minuteIncrease': "Increase minute";
|
|
62
|
+
readonly 'cronForm.minuteDecrease': "Decrease minute";
|
|
63
|
+
readonly 'rule.zone.system': " (system)";
|
|
64
|
+
readonly 'rule.error.conflict': "This task changed before the update was saved. The row shows the saved rule; try again.";
|
|
65
|
+
readonly 'rule.error.notFound': "This task is no longer available.";
|
|
66
|
+
readonly 'rule.error.unknown': "Could not confirm the rule update. The row shows the saved rule.";
|
|
67
|
+
readonly 'delete.action': "Delete task";
|
|
68
|
+
readonly 'delete.title': "Delete this task?";
|
|
69
|
+
readonly 'delete.description': string;
|
|
70
|
+
readonly 'delete.confirm': "Confirm deletion";
|
|
71
|
+
readonly 'delete.cancel': "Cancel";
|
|
72
|
+
readonly 'delete.close': "Close deletion confirmation";
|
|
73
|
+
readonly 'delete.pending': "Deleting…";
|
|
74
|
+
readonly 'toast.deleted': "Task deleted.";
|
|
75
|
+
readonly 'toast.deleteFailed': "Could not delete the task.";
|
|
76
|
+
readonly 'card.open': "Open";
|
|
77
|
+
readonly 'card.openLabel': "Open task details: {title}";
|
|
78
|
+
readonly 'card.deleted': "Deleted";
|
|
79
|
+
readonly 'tool.invoked': "Invoked {name}";
|
|
80
|
+
readonly "time.locale": string;
|
|
81
|
+
readonly "time.utcPrefix": string;
|
|
82
|
+
readonly "frequency.daily": string;
|
|
83
|
+
readonly "frequency.dailyLocal": string;
|
|
84
|
+
readonly "frequency.weekly": string;
|
|
85
|
+
readonly "frequency.weeklyLocal": string;
|
|
86
|
+
readonly "frequency.cron": string;
|
|
87
|
+
readonly "frequency.cronLocal": string;
|
|
88
|
+
readonly "frequency.cronRule": string;
|
|
89
|
+
readonly "cron.list.join": string;
|
|
90
|
+
readonly "cron.part.join": string;
|
|
91
|
+
readonly "cron.weekday.name": string;
|
|
92
|
+
readonly "cron.weekday.range": string;
|
|
93
|
+
readonly "cron.months": string;
|
|
94
|
+
readonly "cron.day.every": string;
|
|
95
|
+
readonly "cron.day.weekdays": string;
|
|
96
|
+
readonly "cron.day.monthDays": string;
|
|
97
|
+
readonly "cron.day.both": string;
|
|
98
|
+
readonly "cron.day.bothStarred": string;
|
|
99
|
+
readonly "cron.hours.range": string;
|
|
100
|
+
readonly "cron.hours.list": string;
|
|
101
|
+
readonly "cron.time.everyMinute": string;
|
|
102
|
+
readonly "cron.time.everyMinutes": string;
|
|
103
|
+
readonly "cron.time.joinedEveryMinute": string;
|
|
104
|
+
readonly "cron.time.joinedEveryMinutes": string;
|
|
105
|
+
readonly "cron.time.everyHour": string;
|
|
106
|
+
readonly "cron.time.joinedEveryHour": string;
|
|
107
|
+
readonly "cron.time.everyNHours": string;
|
|
108
|
+
readonly "cron.time.joinedEveryNHours": string;
|
|
109
|
+
readonly "cron.time.hourlyAt": string;
|
|
110
|
+
readonly "cron.time.joinedHourlyAt": string;
|
|
111
|
+
readonly "cron.time.hoursEveryMinute": string;
|
|
112
|
+
readonly "cron.time.hoursEveryMinutes": string;
|
|
113
|
+
readonly "cron.time.at": string;
|
|
114
|
+
readonly "cron.time.hoursAt": string;
|
|
115
|
+
readonly "frequency.weekday.join": string;
|
|
116
|
+
readonly "frequency.weekday.1": string;
|
|
117
|
+
readonly "frequency.weekday.2": string;
|
|
118
|
+
readonly "frequency.weekday.3": string;
|
|
119
|
+
readonly "frequency.weekday.4": string;
|
|
120
|
+
readonly "frequency.weekday.5": string;
|
|
121
|
+
readonly "frequency.weekday.6": string;
|
|
122
|
+
readonly "frequency.weekday.7": string;
|
|
123
|
+
readonly "unit.day.one": string;
|
|
124
|
+
readonly "unit.day.other": string;
|
|
125
|
+
readonly "unit.hour.one": string;
|
|
126
|
+
readonly "unit.hour.other": string;
|
|
127
|
+
readonly "unit.minute.one": string;
|
|
128
|
+
readonly "unit.minute.other": string;
|
|
129
|
+
readonly "unit.second.one": string;
|
|
130
|
+
readonly "unit.second.other": string;
|
|
131
|
+
readonly "relative.now": string;
|
|
132
|
+
readonly "relative.future": string;
|
|
133
|
+
readonly "relative.overdue": string;
|
|
134
|
+
readonly panel: "Automation tasks";
|
|
135
|
+
readonly title: "Automation tasks";
|
|
136
|
+
readonly 'new.action': "New";
|
|
137
|
+
readonly 'list.label': "Task catalog";
|
|
138
|
+
readonly 'list.nextPrefix': "Next scheduled time: ";
|
|
139
|
+
readonly 'list.loading': "Loading tasks…";
|
|
140
|
+
readonly 'list.error': "Could not load tasks.";
|
|
141
|
+
readonly 'list.retry': "Retry";
|
|
142
|
+
readonly 'list.empty': "No tasks yet. Tasks created in your sessions appear here.";
|
|
143
|
+
readonly 'list.emptyInactive': "No inactive automation tasks";
|
|
144
|
+
readonly 'list.noMatches': "No matching tasks";
|
|
145
|
+
readonly 'search.label': "Search tasks";
|
|
146
|
+
readonly 'search.placeholder': "Search automation tasks";
|
|
147
|
+
readonly 'search.clear': "Clear search";
|
|
148
|
+
readonly 'empty.action': "New automation task";
|
|
149
|
+
readonly 'statusFilter.label': "Task status";
|
|
150
|
+
readonly 'statusFilter.all': "All";
|
|
151
|
+
readonly 'status.active': "Enabled";
|
|
152
|
+
readonly 'status.inactive': "Inactive";
|
|
153
|
+
readonly 'detail.label': "Task details";
|
|
154
|
+
readonly 'detail.close': "Close details";
|
|
155
|
+
readonly 'detail.more': "Automation task actions";
|
|
156
|
+
readonly 'detail.nextRun': "Next run";
|
|
157
|
+
readonly 'detail.tabs': "Task detail views";
|
|
158
|
+
readonly 'detail.rule': "Rules";
|
|
159
|
+
readonly 'detail.records': "Delivery records";
|
|
160
|
+
readonly 'delivery.empty': "No delivery record available";
|
|
161
|
+
readonly 'delivery.loading': "Loading delivery records…";
|
|
162
|
+
readonly 'delivery.error': "Could not load delivery records.";
|
|
163
|
+
readonly 'delivery.notFound': "This task is no longer available.";
|
|
164
|
+
readonly 'delivery.cursorError': "Records were updated.";
|
|
165
|
+
readonly 'delivery.retry': "Retry";
|
|
166
|
+
readonly 'delivery.refresh': "Refresh";
|
|
167
|
+
readonly 'delivery.loadMore': "Load more";
|
|
168
|
+
readonly 'delivery.expand': "Expand";
|
|
169
|
+
readonly 'delivery.collapse': "Collapse";
|
|
170
|
+
readonly 'delivery.pruned': "Earlier delivery records have been cleared";
|
|
171
|
+
readonly 'delivery.retention': "Retention rules";
|
|
172
|
+
readonly 'delivery.retentionBounds': "Each task keeps up to {records} delivery records from the last {days} days.";
|
|
173
|
+
readonly 'delivery.retentionExplanation': "When a new record is saved, older records outside these limits are cleared automatically. Clearing records does not stop the task.";
|
|
174
|
+
readonly 'detail.name': "Automation task name";
|
|
175
|
+
readonly 'detail.instruction': "Automation task instruction";
|
|
176
|
+
readonly 'detail.status': "Status";
|
|
177
|
+
readonly 'detail.next': "Next scheduled time";
|
|
178
|
+
readonly 'detail.frequency': "Frequency";
|
|
179
|
+
readonly 'detail.id': "Task ID";
|
|
180
|
+
readonly 'detail.session': "Linked session";
|
|
181
|
+
readonly 'detail.openSession': "Linked session: open original session";
|
|
182
|
+
readonly 'detail.openSessionTitle': "Linked session {title}: open original session";
|
|
183
|
+
readonly 'detail.sessionLoading': "Loading original session information.";
|
|
184
|
+
readonly 'detail.sessionArchived': "The original session is archived.";
|
|
185
|
+
readonly 'detail.sessionUnavailable': "The original session is unavailable.";
|
|
186
|
+
readonly 'detail.missing': "Task unavailable. It may have been deleted.";
|
|
187
|
+
readonly 'delivery.label': "Saved delivery record";
|
|
188
|
+
readonly 'frequency.once': "Once";
|
|
189
|
+
readonly 'frequency.every': "Every {value} {unit}";
|
|
190
|
+
};
|
|
191
|
+
/** Keys registered under `schedule.manager`. */
|
|
192
|
+
export type TaskManagerKey = keyof typeof en;
|
|
193
|
+
/** Simplified Chinese dictionary with the same keys as English. */
|
|
194
|
+
export declare const zh: Record<TaskManagerKey, string>;
|
|
195
|
+
//# sourceMappingURL=task-manager-locales.d.ts.map
|