Commit Graph
26 Commits
Author SHA1 Message Date
santhrealandXubin Ren f7bf4c972e fix(pairing): treat null approved/pending maps as empty 2026-07-27 00:46:40 +08:00
santhrealandXubin Ren 07c3e02d5c fix(triggers): treat null runHistory as empty when loading triggers 2026-07-26 23:33:28 +08:00
santhrealandXubin Ren aaf2eef568 fix(feishu): tolerate null multi_url and list fields in card extract 2026-07-26 23:19:35 +08:00
santhrealandXubin Ren 1e505ff405 fix(triggers): coerce string lastRunAtMs when loading local triggers 2026-07-26 23:05:19 +08:00
santhrealandXubin Ren a7cac65c76 fix(feishu): move post extract test import to module top 2026-07-26 22:51:49 +08:00
santhrealandXubin Ren fb88154377 fix(feishu): tolerate null text fields when extracting post content 2026-07-26 22:51:49 +08:00
santhrealandchengyongru 7c94ba9643 fix(session): coerce null session metadata to empty dict 2026-07-26 17:47:16 +08:00
santhrealandchengyongru 745757cc37 fix(memory): skip non-dict history.jsonl lines when reading 2026-07-26 17:45:51 +08:00
santhrealandchengyongru 259d8a018c fix(skills): tolerate null requires/bins/env in skill metadata 2026-07-26 17:44:41 +08:00
santhrealandchengyongru 7e9426d9bd fix(telegram): hard-cut when fence body cut lands on the prefix
A leading space in the fenced body made the soft cut land at min_code_pos
and re-emit the same fence forever. Require progress past the fence line.
2026-07-23 23:56:18 +08:00
santhrealandchengyongru 98d661775e fix(telegram): hard-cut fence splits when the closer cannot fit
Adaptive HTML limits can shrink max_len to the fence prefix size. Treat
budget <= min_code_pos as a hard cut so the splitter still advances.
2026-07-23 23:56:18 +08:00
santhrealandchengyongru 017a4946e2 fix(telegram): advance markdown split on long single-line fences
When a fenced code body has no interior newlines, the splitter cut at the
opening fence line and re-emitted the same content forever. Prefer breaks
inside the body after the fence so long JSON/minified blocks still split.
2026-07-23 23:56:18 +08:00
santhrealandchengyongru 299bcf491b fix(cron): skip null runHistory elements when loading jobs.json
Null entries in state.runHistory raised TypeError and quarantined the
store. Skip non-dict elements like LocalTrigger.from_dict already does.
2026-07-23 14:07:06 +08:00
santhrealandchengyongru 0191c0db73 fix(pairing): treat null approved channel lists as empty
pairing.json with "telegram": null crashed is_approved during load.
Treat non-list channel entries as an empty allow-list.
2026-07-23 14:04:53 +08:00
santhrealandchengyongru 5851bd432a fix(slack): keep fenced markdown tables intact in _to_mrkdwn 2026-07-23 14:03:09 +08:00
santhrealandchengyongru 8195181783 fix(feishu): keep fenced markdown tables out of card tables 2026-07-23 14:02:33 +08:00
santhrealandXubin Ren b81c05581f fix(cron): coerce string schedule/state ms fields from jobs.json
jobs.json can store everyMs/atMs and next/last run timestamps as strings.
Loading left them as str, so _compute_next_run compared str to int and raised TypeError.
Coerce with an optional-int helper at from_store_dict, matching runHistory int() paths.
2026-07-21 19:07:45 +08:00
santhrealandXubin Ren 28102382af fix(config): write config.json atomically via temp+replace
save_config truncated config.json in place on crash mid-write.
Route through _write_text_atomic like the pairing store so a failed write leaves the prior file intact.
2026-07-21 17:33:39 +08:00
santhrealandXubin Ren b6156fdd79 fix(cron): also coerce null createdAtMs/updatedAtMs on load
Same present-null footgun as runHistory; route all required store
ints through _store_int.
2026-07-21 13:45:02 +08:00
santhrealandXubin Ren 0b1b02f187 fix(cron): coerce null runHistory ms fields from jobs.json
Explicit JSON null for runAtMs/durationMs bypassed the missing-key
default and raised TypeError on load. Treat null/blank like missing.
2026-07-21 13:45:02 +08:00
santhrealandchengyongru c2071594cf fix(triggers): rename coerce helper to _store_int
Match the cron store-load naming and cover null attempts on deliveries.
2026-07-19 15:46:00 +08:00
santhrealandchengyongru cf96c4d5e9 fix(triggers): coerce null ms fields when loading local triggers
Explicit JSON null for runAtMs/createdAtMs raised TypeError and could
quarantine triggers.json. Treat null/blank like a missing key (0).
2026-07-19 15:46:00 +08:00
santhrealandXubin Ren afed32b013 fix(cron): dual-case keys when loading jobs.json
jobs.json hand-edits and asdict-style snake_case for schedule intervals and
runHistory crashed or silently disabled cron. Deserialize via Cron* from_store_dict
and shared get_camel_snake (also used by local triggers).
2026-07-18 17:39:06 +08:00
santhrealandXubin Ren 7ac9a46978 fix(utils): avoid hang in split_message when max_len <= 0
When max_len is 0 or negative the cut pointer never advances, so the loop hangs. Return the content unsplit, matching truncate_text_to_tokens for non-positive budgets.
2026-07-18 17:24:12 +08:00
santhrealandXubin Ren fe0e65928d fix(utils): coerce Tavily usage counters to int
JSON APIs sometimes return numeric fields as strings; subtracting them raised TypeError and /status dropped the usage block.
2026-07-18 17:23:26 +08:00
santhrealandXubin Ren 85097aa143 fix(utils): handle empty commit messages in CommitInfo.format
Empty git commit messages made splitlines()[0] raise IndexError in format() and /dream-restore list rendering.
2026-07-18 17:22:16 +08:00