Bohan Jiang
cb87dd106b
feat(chat): task-owned direct-chat input batches + explicit no_response outcome (MUL-4351) ( #5195 )
...
* feat(chat): task-owned direct-chat input batches + explicit no_response outcome (MUL-4351)
Direct (web/mobile) chat no longer uses the last-assistant-row as an implicit
input cursor. Each direct send now owns an immutable input batch:
- agent_task_queue.chat_input_task_id makes a task the owner of the user
messages it must consume; the send path creates the task + user message +
attachment bindings + session touch in one transaction, and the daemon is
notified only after commit. A claim reads exactly that batch, so a message
that arrives mid-run belongs to the next task and is never absorbed.
- Auto-retry inherits the root input owner and is queued at a bumped priority,
created inside FailTask's transaction so no newer chat task can jump ahead.
- CompleteTask writes exactly one assistant outcome inside the completion
transaction: a normal message, or a visible no_response outcome (with a
non-empty English fallback) when the final output is empty. The write failing
rolls the completion back and the handler returns 5xx so the daemon retries;
the status CAS keeps it idempotent. chat:done carries message_kind.
- Web/desktop/mobile render no_response as a localized 'no text reply' state
(keeping the tool timeline), suppress Copy, keep it unread, and keep the
session-list preview non-blank.
- Legacy/channel tasks (chat_input_task_id NULL) keep the trailing-message
selector, so a rolling deploy never replays Slack/Lark history.
Co-authored-by: multica-agent <github@multica.ai >
* fix(chat): scope no_response to direct tasks; don't cancel task on input read error (MUL-4351)
Addresses PR review (Niko):
- writeChatCompletionOutcome only writes a no_response row for task-owned
direct tasks (chat_input_task_id set). Legacy/channel (Slack/Lark) tasks keep
the prior behavior: empty output writes no assistant row, so chat:done carries
empty content and the channel outbound silently drops it — the no_response
fallback body never reaches an external channel.
- The daemon claim distinguishes a genuine zero-input batch from a failed
input read: on ListChatInputMessages / ListChatMessages error it returns 5xx
and preserves the dispatched task for redelivery instead of cancelling a valid
task on a transient DB error.
Co-authored-by: multica-agent <github@multica.ai >
---------
Co-authored-by: J <j@multica.ai >
Co-authored-by: multica-agent <github@multica.ai >
2026-07-10 16:22:42 +08:00
..
2026-04-02 17:33:52 +08:00
2026-04-02 17:33:52 +08:00
2026-04-07 22:02:28 +08:00
2026-04-07 22:02:28 +08:00
2026-04-09 12:43:21 +08:00
2026-04-09 14:00:03 +08:00
2026-04-09 13:38:46 +08:00
2026-04-09 13:38:46 +08:00
2026-04-08 13:08:15 +08:00
2026-04-08 13:08:15 +08:00
2026-04-09 14:19:46 +08:00
2026-04-09 17:18:14 +08:00
2026-04-09 12:43:21 +08:00
2026-04-09 14:00:03 +08:00
2026-04-09 14:59:16 +08:00
2026-04-09 14:59:16 +08:00
2026-04-09 16:31:05 +08:00
2026-04-09 16:31:05 +08:00
2026-04-10 14:34:32 +08:00
2026-04-10 14:34:32 +08:00
2026-04-10 14:29:00 +08:00
2026-04-10 14:29:00 +08:00
2026-04-10 16:21:20 +08:00
2026-04-10 16:21:20 +08:00
2026-04-10 19:00:25 +08:00
2026-04-10 19:00:25 +08:00
2026-04-10 20:59:32 +08:00
2026-04-10 20:59:32 +08:00
2026-04-13 16:47:56 +08:00
2026-04-13 16:47:56 +08:00
2026-04-14 18:21:11 +08:00
2026-04-14 18:21:11 +08:00
2026-04-15 14:58:53 +08:00
2026-04-15 14:58:53 +08:00
2026-04-15 00:01:18 +08:00
2026-04-15 00:01:18 +08:00
2026-04-15 04:54:37 +08:00
2026-04-15 04:54:37 +08:00
2026-04-16 13:16:35 +08:00
2026-04-16 13:16:35 +08:00
2026-04-15 13:48:21 +08:00
2026-04-15 13:48:21 +08:00
2026-04-16 13:16:35 +08:00
2026-04-16 13:16:35 +08:00
2026-04-16 13:16:35 +08:00
2026-04-16 13:16:35 +08:00
2026-04-18 01:35:22 +08:00
2026-04-18 01:35:22 +08:00
2026-04-17 13:40:02 +08:00
2026-04-17 13:40:02 +08:00
2026-04-16 18:54:12 +08:00
2026-04-16 18:54:12 +08:00
2026-04-16 21:21:20 +08:00
2026-04-16 21:21:20 +08:00
2026-04-17 15:10:38 +08:00
2026-04-17 15:10:38 +08:00
2026-04-19 23:21:31 -07:00
2026-04-19 23:21:31 -07:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 00:06:34 +08:00
2026-04-21 00:06:34 +08:00
2026-04-21 14:42:52 +08:00
2026-04-21 14:42:52 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-21 20:32:33 +08:00
2026-04-22 13:08:37 +08:00
2026-04-22 13:08:37 +08:00
2026-04-22 15:08:06 +08:00
2026-04-22 15:08:06 +08:00
2026-04-23 10:35:55 +08:00
2026-04-23 10:35:55 +08:00
2026-04-24 11:05:33 +08:00
2026-04-24 11:05:33 +08:00
2026-04-27 14:23:42 +08:00
2026-04-27 14:23:42 +08:00
2026-05-06 16:16:12 +08:00
2026-05-06 16:16:12 +08:00
2026-04-29 14:50:58 +08:00
2026-04-29 14:50:58 +08:00
2026-05-03 10:51:31 +08:00
2026-05-03 10:51:31 +08:00
2026-04-29 14:05:26 +08:00
2026-04-29 14:05:26 +08:00
2026-04-29 14:50:58 +08:00
2026-04-29 14:50:58 +08:00
2026-04-29 18:29:46 +08:00
2026-04-29 18:29:46 +08:00
2026-04-29 18:29:46 +08:00
2026-04-29 18:29:46 +08:00
2026-04-29 22:51:29 +02:00
2026-04-29 22:51:29 +02:00
2026-04-30 16:05:53 +08:00
2026-04-30 16:05:53 +08:00
2026-04-30 14:00:43 +08:00
2026-04-30 14:00:43 +08:00
2026-04-30 14:17:53 +08:00
2026-04-30 14:17:53 +08:00
2026-04-30 15:50:05 +08:00
2026-04-30 15:50:05 +08:00
2026-05-06 16:27:06 +08:00
2026-05-06 16:27:06 +08:00
2026-05-09 05:49:33 +02:00
2026-05-09 05:49:33 +02:00
2026-05-07 15:45:29 +08:00
2026-05-07 15:45:29 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-08 15:35:21 +08:00
2026-05-09 15:07:57 +08:00
2026-05-09 15:07:57 +08:00
2026-05-09 14:39:10 +08:00
2026-05-09 14:39:10 +08:00
2026-05-12 13:49:03 +08:00
2026-05-12 13:49:03 +08:00
2026-05-09 15:07:57 +08:00
2026-05-09 15:07:57 +08:00
2026-05-11 14:39:35 +08:00
2026-05-11 14:39:35 +08:00
2026-05-11 14:39:35 +08:00
2026-05-11 14:39:35 +08:00
2026-05-12 10:57:54 +08:00
2026-05-12 10:57:54 +08:00
2026-05-11 22:53:07 +08:00
2026-05-11 22:53:07 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 12:51:16 +08:00
2026-05-13 12:51:16 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-13 18:46:20 +08:00
2026-05-14 14:07:26 +08:00
2026-05-14 14:07:26 +08:00
2026-05-14 15:23:36 +02:00
2026-05-14 15:23:36 +02:00
2026-05-18 12:17:39 +08:00
2026-05-18 12:17:39 +08:00
2026-05-17 15:01:38 +08:00
2026-05-17 15:01:38 +08:00
2026-05-16 21:26:30 +02:00
2026-05-16 21:26:30 +02:00
2026-05-16 21:26:30 +02:00
2026-05-16 21:26:30 +02:00
2026-05-18 14:59:40 +08:00
2026-05-18 14:59:40 +08:00
2026-05-19 05:35:18 +02:00
2026-05-19 05:35:18 +02:00
2026-05-20 12:30:10 +08:00
2026-05-20 12:30:10 +08:00
2026-05-19 18:37:48 +02:00
2026-05-19 18:37:48 +02:00
2026-05-20 05:30:13 +02:00
2026-05-20 05:30:13 +02:00
2026-06-17 09:24:15 +02:00
2026-06-17 17:53:43 +08:00
2026-05-19 19:51:28 +02:00
2026-05-19 19:51:28 +02:00
2026-05-20 15:37:23 +08:00
2026-05-20 15:37:23 +08:00
2026-05-22 13:22:36 +08:00
2026-05-22 13:22:36 +08:00
2026-05-21 19:00:26 +08:00
2026-05-21 19:00:26 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 16:26:42 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 15:33:47 +08:00
2026-05-21 16:35:45 +08:00
2026-05-21 16:35:45 +08:00
2026-05-22 12:26:56 +08:00
2026-05-22 12:26:56 +08:00
2026-05-22 14:51:43 +08:00
2026-05-22 14:51:43 +08:00
2026-05-25 18:42:48 +08:00
2026-05-25 18:42:48 +08:00
2026-05-27 13:44:31 +08:00
2026-05-27 13:44:31 +08:00
2026-05-26 17:00:01 +08:00
2026-05-26 17:00:01 +08:00
2026-05-26 16:45:46 +08:00
2026-05-26 16:45:46 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-05-27 15:47:36 +08:00
2026-05-27 15:47:36 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-01 16:48:05 +02:00
2026-06-01 16:48:05 +02:00
2026-06-03 14:34:01 +08:00
2026-06-03 14:34:01 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-05 13:46:26 +08:00
2026-06-05 13:46:26 +08:00
2026-06-04 11:21:51 +08:00
2026-06-04 11:21:51 +08:00
2026-06-04 11:21:51 +08:00
2026-06-04 11:21:51 +08:00
2026-06-05 16:03:13 +08:00
2026-06-05 16:03:13 +08:00
2026-06-08 19:29:57 +08:00
2026-06-09 19:59:20 +08:00
2026-06-09 19:59:20 +08:00
2026-06-09 19:59:20 +08:00
2026-06-12 15:53:55 +08:00
2026-06-12 15:53:55 +08:00
2026-06-18 13:33:14 +08:00
2026-06-18 13:33:14 +08:00
2026-06-17 15:18:44 +02:00
2026-06-18 13:33:14 +08:00
2026-06-17 12:26:25 +08:00
2026-06-17 12:26:25 +08:00
2026-06-17 11:32:55 +08:00
2026-06-17 11:32:55 +08:00
2026-06-17 18:23:46 +08:00
2026-06-17 18:23:46 +08:00
2026-06-22 13:34:40 +08:00
2026-06-22 13:34:40 +08:00
2026-06-23 13:17:13 +08:00
2026-06-23 13:17:13 +08:00
2026-06-23 00:14:42 +08:00
2026-06-23 00:14:42 +08:00
2026-06-24 12:01:10 +08:00
2026-06-24 12:01:10 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 18:18:06 +08:00
2026-06-23 16:19:16 +08:00
2026-06-23 16:19:16 +08:00
2026-06-23 16:19:16 +08:00
2026-06-23 16:19:16 +08:00
2026-06-24 15:15:42 +08:00
2026-06-24 15:15:42 +08:00
2026-07-05 13:30:18 +08:00
2026-07-05 13:30:18 +08:00
2026-06-26 16:01:33 +08:00
2026-06-26 16:01:33 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-06-30 12:29:11 +08:00
2026-06-30 12:29:11 +08:00
2026-06-30 12:24:57 +08:00
2026-06-30 12:24:57 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-01 15:20:22 +08:00
2026-07-01 15:20:22 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-02 17:21:50 +08:00
2026-07-02 17:21:50 +08:00
2026-07-04 23:16:01 +08:00
2026-07-04 23:16:01 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 15:03:17 +08:00
2026-07-06 15:03:17 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-07 13:20:30 +08:00
2026-07-07 13:20:30 +08:00
2026-07-07 13:20:30 +08:00
2026-07-07 13:20:30 +08:00
2026-07-08 16:00:17 +08:00
2026-07-08 16:00:17 +08:00
2026-07-09 15:10:09 +08:00
2026-07-09 15:10:09 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-10 14:10:10 +08:00
2026-07-10 14:10:10 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00