Schema for the `ScheduleEntry` type. The removed entry, or omitted if no entry matched.
| 6116 | # Experimental: this type is part of an experimental API and may change or be removed. |
| 6117 | @dataclass |
| 6118 | class ScheduleEntry: |
| 6119 | """Schema for the `ScheduleEntry` type. |
| 6120 | |
| 6121 | The removed entry, or omitted if no entry matched. |
| 6122 | """ |
| 6123 | id: int |
| 6124 | """Sequential id assigned by the runtime within the session. Stable across resumes (rebuilt |
| 6125 | from the event log). |
| 6126 | """ |
| 6127 | next_run_at: datetime |
| 6128 | """ISO 8601 timestamp when the next tick is scheduled to fire.""" |
| 6129 | |
| 6130 | prompt: str |
| 6131 | """Prompt text that gets enqueued on every tick.""" |
| 6132 | |
| 6133 | recurring: bool |
| 6134 | """Whether the schedule re-arms after each tick (`/every`) or fires once (`/after`).""" |
| 6135 | |
| 6136 | at: int | None = None |
| 6137 | """Absolute fire time (epoch milliseconds) for a one-shot calendar schedule.""" |
| 6138 | |
| 6139 | cron: str | None = None |
| 6140 | """5-field cron expression for a recurring calendar schedule, evaluated in `tz`.""" |
| 6141 | |
| 6142 | display_prompt: str | None = None |
| 6143 | """Display-only label for the prompt as shown in the UI (e.g. `/skill-name` for a |
| 6144 | skill-invocation schedule). The actual enqueued prompt is `prompt`. |
| 6145 | """ |
| 6146 | interval_ms: int | None = None |
| 6147 | """Interval between scheduled ticks, in milliseconds (relative-interval schedules).""" |
| 6148 | |
| 6149 | self_paced: bool | None = None |
| 6150 | """True for a self-paced (`dynamic`) schedule: no fixed cadence; the model arms each next |
| 6151 | run via the `manage_schedule` `wakeup` action. `nextRunAt` is model-controlled. |
| 6152 | """ |
| 6153 | tz: str | None = None |
| 6154 | """IANA timezone the `cron` expression is evaluated in.""" |
| 6155 | |
| 6156 | @staticmethod |
| 6157 | def from_dict(obj: Any) -> 'ScheduleEntry': |
| 6158 | assert isinstance(obj, dict) |
| 6159 | id = from_int(obj.get("id")) |
| 6160 | next_run_at = from_datetime(obj.get("nextRunAt")) |
| 6161 | prompt = from_str(obj.get("prompt")) |
| 6162 | recurring = from_bool(obj.get("recurring")) |
| 6163 | at = from_union([from_int, from_none], obj.get("at")) |
| 6164 | cron = from_union([from_str, from_none], obj.get("cron")) |
| 6165 | display_prompt = from_union([from_str, from_none], obj.get("displayPrompt")) |
| 6166 | interval_ms = from_union([from_int, from_none], obj.get("intervalMs")) |
| 6167 | self_paced = from_union([from_bool, from_none], obj.get("selfPaced")) |
| 6168 | tz = from_union([from_str, from_none], obj.get("tz")) |
| 6169 | return ScheduleEntry(id, next_run_at, prompt, recurring, at, cron, display_prompt, interval_ms, self_paced, tz) |
| 6170 | |
| 6171 | def to_dict(self) -> dict: |
| 6172 | result: dict = {} |
| 6173 | result["id"] = from_int(self.id) |
| 6174 | result["nextRunAt"] = self.next_run_at.isoformat() |
| 6175 | result["prompt"] = from_str(self.prompt) |
no outgoing calls
no test coverage detected
searching dependent graphs…