Yichen Jiang
bb43ff4f37
feat(ui): make a session that cannot send refuse to accept one
...
A default naming a route the Models page has since removed left the
composer saying 选择模型 while the input still accepted a message, which
then failed inside the adapter mid-turn.
`session.prompt` now refuses with `model-unavailable` before opening a
turn. That is the enforcement boundary: the method stays callable no
matter what a client disables. `session.models` reports the same fact as
`routable`, and ui-model pushes a block through the new
`ctx.conversation.blocks` registry so the bar renders the disabled
textarea it already renders without a workspace, carrying the blocker's
own reason. The push direction is forced — ui-model already depends on
ui-conversation, so ui-conversation cannot read it back.
The gate is `routable`, not "matches no advertised group": catalog
membership is advisory, so a route serving a model it stopped advertising
is missing from the groups yet perfectly usable, and `null` before the
first load never blocks so a slow Host cannot lock a working composer.
The scaffold gains a route-only adapter for fixture-less keyless
scenarios. Registering zero providers is a test artifact — every product
composition mounts one — and the goldens that froze the seat's fallback
label now show the model those scenarios actually route to.
2026-08-07 15:26:42 +08:00
..
2026-08-04 18:42:13 +08:00
2026-07-24 23:43:10 +08:00
2026-08-04 18:42:13 +08:00
2026-08-05 14:02:47 +08:00
2026-08-05 14:02:47 +08:00
2026-08-05 14:02:47 +08:00
2026-08-04 17:36:14 +08:00
2026-07-23 19:33:30 +08:00
2026-08-04 17:36:14 +08:00
2026-08-06 13:44:23 +08:00
2026-08-06 13:44:23 +08:00
2026-08-06 13:44:23 +08:00
2026-08-05 07:32:27 +08:00
2026-08-05 07:32:27 +08:00
2026-08-05 07:32:27 +08:00
2026-08-06 21:38:47 +08:00
2026-08-04 22:18:35 +08:00
2026-08-06 21:38:47 +08:00
2026-08-06 10:37:43 +08:00
2026-08-06 10:37:43 +08:00
2026-08-06 10:37:43 +08:00
2026-08-06 11:42:31 +08:00
2026-07-29 20:43:31 +08:00
2026-08-06 11:25:28 +08:00
2026-08-05 13:09:53 +08:00
2026-08-04 13:49:35 +08:00
2026-08-05 13:09:53 +08:00
2026-08-05 13:09:53 +08:00
2026-07-31 19:21:16 +08:00
2026-08-05 13:09:53 +08:00
2026-08-06 13:44:23 +08:00
2026-08-06 13:44:23 +08:00
2026-08-06 13:44:23 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 21:28:13 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-24 23:43:10 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 14:19:23 +08:00
2026-08-04 14:19:23 +08:00
2026-08-04 14:19:23 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 13:49:41 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-05 15:34:19 +08:00
2026-08-05 15:34:19 +08:00
2026-08-05 15:34:19 +08:00
2026-08-04 20:54:42 +08:00
2026-07-28 10:26:15 -07:00
2026-08-04 20:54:42 +08:00
2026-08-02 12:51:09 +08:00
2026-08-02 12:51:09 +08:00
2026-08-02 12:51:09 +08:00
2026-08-04 17:36:14 +08:00
2026-07-29 21:15:42 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 20:54:42 +08:00
2026-07-27 04:14:51 +08:00
2026-08-04 20:54:42 +08:00
2026-08-04 17:36:14 +08:00
2026-07-29 22:10:26 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 23:06:00 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 02:33:29 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 21:37:30 +08:00
2026-08-04 17:36:14 +08:00
2026-08-05 13:09:53 +08:00
2026-07-31 19:21:16 +08:00
2026-08-05 13:09:53 +08:00
2026-08-05 13:09:53 +08:00
2026-08-04 13:49:35 +08:00
2026-08-05 13:09:53 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 10:26:15 -07:00
2026-08-04 17:36:14 +08:00
2026-08-05 10:57:53 +08:00
2026-07-24 01:40:25 +08:00
2026-08-05 10:57:53 +08:00
2026-08-05 13:09:53 +08:00
2026-07-31 22:52:18 +08:00
2026-08-05 13:09:53 +08:00
2026-08-05 13:09:53 +08:00
2026-08-03 10:56:09 +08:00
2026-08-05 13:09:53 +08:00
2026-08-05 13:09:53 +08:00
2026-07-31 22:52:18 +08:00
2026-08-05 13:09:53 +08:00
2026-08-05 13:09:53 +08:00
2026-07-30 13:49:57 +08:00
2026-08-05 13:09:53 +08:00
2026-08-05 13:09:53 +08:00
2026-08-04 14:09:52 +08:00
2026-08-05 13:09:53 +08:00
2026-08-04 18:42:13 +08:00
2026-07-27 21:20:06 +08:00
2026-08-04 18:42:13 +08:00
2026-08-06 17:28:58 +08:00
2026-08-06 17:28:58 +08:00
2026-08-06 17:28:58 +08:00
2026-08-02 12:51:09 +08:00
2026-08-02 12:51:09 +08:00
2026-08-02 12:51:09 +08:00
2026-08-05 13:09:53 +08:00
2026-08-03 16:04:26 +08:00
2026-08-05 13:09:53 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 14:29:52 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 14:29:52 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 14:29:52 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-29 20:10:42 +08:00
2026-08-04 17:36:14 +08:00
2026-08-03 12:25:33 +08:00
2026-08-03 10:56:09 +08:00
2026-08-03 10:56:09 +08:00
2026-08-07 00:05:43 +08:00
2026-08-07 00:05:43 +08:00
2026-08-07 00:05:43 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 20:35:38 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 21:30:28 +08:00
2026-08-04 17:36:14 +08:00
2026-08-06 14:37:56 +08:00
2026-08-06 14:37:56 +08:00
2026-08-06 14:37:56 +08:00
2026-08-04 21:04:43 +08:00
2026-08-04 21:04:43 +08:00
2026-08-04 21:04:43 +08:00
2026-08-06 14:12:46 +08:00
2026-08-06 14:12:46 +08:00
2026-08-06 14:12:46 +08:00
2026-08-02 03:56:25 +08:00
2026-08-02 03:56:25 +08:00
2026-08-02 03:56:25 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 01:16:41 +08:00
2026-08-04 17:36:14 +08:00
2026-08-05 12:50:58 +08:00
2026-07-31 15:11:11 +08:00
2026-08-05 12:50:58 +08:00
2026-07-31 18:37:34 +08:00
2026-07-31 18:37:34 +08:00
2026-07-31 18:37:34 +08:00
2026-08-04 20:54:42 +08:00
2026-07-29 00:39:56 +08:00
2026-08-04 20:54:42 +08:00
2026-07-31 18:37:34 +08:00
2026-07-31 18:37:34 +08:00
2026-07-31 18:37:34 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 22:53:47 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 02:43:34 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 04:02:38 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 15:26:52 +08:00
2026-08-04 17:36:14 +08:00
2026-08-06 14:12:46 +08:00
2026-08-06 14:12:46 +08:00
2026-08-06 14:12:46 +08:00
2026-08-05 00:31:43 +08:00
2026-08-05 00:31:43 +08:00
2026-08-05 00:31:43 +08:00
2026-07-31 19:21:16 +08:00
2026-07-31 19:21:16 +08:00
2026-07-31 19:21:16 +08:00
2026-08-05 13:09:53 +08:00
2026-07-31 22:16:40 +08:00
2026-08-05 13:09:53 +08:00
2026-08-05 15:18:38 +08:00
2026-08-05 15:18:38 +08:00
2026-08-05 15:18:38 +08:00
2026-08-04 18:42:13 +08:00
2026-07-28 01:41:32 +08:00
2026-08-04 18:42:13 +08:00
2026-08-02 16:25:02 +08:00
2026-08-02 16:25:02 +08:00
2026-08-02 16:25:02 +08:00
2026-08-03 18:06:14 +08:00
2026-08-03 16:04:26 +08:00
2026-08-03 16:04:26 +08:00
2026-08-03 13:31:19 +08:00
2026-08-03 13:31:19 +08:00
2026-08-03 13:31:19 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 18:37:34 +08:00
2026-08-04 17:36:14 +08:00
2026-08-02 12:51:10 +08:00
2026-08-02 12:51:10 +08:00
2026-08-02 12:51:10 +08:00
2026-07-31 16:49:55 +08:00
2026-07-31 16:49:55 +08:00
2026-07-31 16:49:55 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 21:04:00 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 13:20:28 +08:00
2026-08-04 13:20:28 +08:00
2026-08-04 13:20:28 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 19:43:56 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 14:24:41 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 17:36:14 +08:00
2026-07-29 14:12:01 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 20:54:42 +08:00
2026-07-29 21:09:02 +08:00
2026-08-04 20:54:42 +08:00
2026-08-06 19:52:16 +08:00
2026-08-06 19:52:16 +08:00
2026-08-06 19:52:16 +08:00
2026-08-06 17:46:18 +08:00
2026-08-06 17:46:18 +08:00
2026-08-06 17:46:18 +08:00
2026-08-02 01:29:04 +08:00
2026-08-02 01:29:04 +08:00
2026-08-02 01:29:04 +08:00
2026-08-02 20:09:05 +08:00
2026-08-02 20:09:05 +08:00
2026-08-02 20:09:05 +08:00
2026-07-31 13:49:41 +08:00
2026-07-31 13:49:41 +08:00
2026-07-31 13:49:41 +08:00
2026-08-06 11:28:46 +08:00
2026-08-06 11:28:46 +08:00
2026-08-06 11:28:46 +08:00
2026-07-31 16:20:54 +08:00
2026-07-31 16:20:54 +08:00
2026-07-31 16:20:54 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 19:38:18 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 21:02:28 +08:00
2026-08-04 21:02:28 +08:00
2026-08-04 21:02:28 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-08-03 18:35:26 +08:00
2026-08-03 18:35:26 +08:00
2026-08-03 18:35:26 +08:00
2026-07-30 17:26:44 +08:00
2026-07-30 17:26:44 +08:00
2026-07-30 17:26:44 +08:00
2026-07-30 16:20:34 +08:00
2026-07-30 16:20:34 +08:00
2026-07-30 16:20:34 +08:00
2026-07-31 15:27:24 +08:00
2026-07-31 15:27:24 +08:00
2026-07-31 15:27:24 +08:00
2026-08-03 18:06:14 +08:00
2026-08-03 16:04:26 +08:00
2026-08-03 16:04:26 +08:00
2026-08-06 11:28:46 +08:00
2026-08-06 11:28:46 +08:00
2026-08-06 11:28:46 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-07-30 20:26:33 +08:00
2026-07-30 20:26:33 +08:00
2026-07-30 20:26:33 +08:00
2026-08-03 16:35:37 +08:00
2026-08-03 16:35:37 +08:00
2026-08-03 16:35:37 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 15:25:30 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 22:49:41 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 14:23:34 +08:00
2026-08-04 14:23:34 +08:00
2026-08-04 14:23:34 +08:00
2026-07-31 15:49:59 +08:00
2026-07-31 15:49:59 +08:00
2026-07-31 15:49:59 +08:00
2026-08-06 01:38:26 +08:00
2026-08-06 01:38:26 +08:00
2026-08-06 01:38:26 +08:00
2026-08-06 06:29:06 +08:00
2026-08-06 06:29:06 +08:00
2026-08-06 06:29:06 +08:00
2026-07-31 13:24:30 +08:00
2026-07-31 13:24:30 +08:00
2026-07-31 13:24:30 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 16:13:12 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 20:39:53 +08:00
2026-07-31 20:39:53 +08:00
2026-07-31 20:39:53 +08:00
2026-07-31 14:08:13 +08:00
2026-07-31 14:08:13 +08:00
2026-07-31 14:08:13 +08:00
2026-07-31 14:28:03 +08:00
2026-07-31 14:28:03 +08:00
2026-07-31 14:28:03 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 02:34:52 -07:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 16:34:16 +08:00
2026-08-04 17:36:14 +08:00
2026-08-01 06:15:16 -07:00
2026-08-01 06:15:16 -07:00
2026-08-01 06:15:16 -07:00
2026-08-04 15:18:48 +08:00
2026-08-04 15:18:48 +08:00
2026-08-04 15:18:48 +08:00
2026-08-06 06:29:06 +08:00
2026-08-06 06:29:06 +08:00
2026-08-06 06:29:06 +08:00
2026-08-02 14:18:55 +08:00
2026-08-02 14:18:55 +08:00
2026-08-02 14:18:55 +08:00
2026-08-05 02:05:06 +08:00
2026-08-05 02:05:06 +08:00
2026-08-05 02:05:06 +08:00
2026-08-06 06:29:06 +08:00
2026-08-06 06:29:06 +08:00
2026-08-06 06:29:06 +08:00
2026-08-02 05:29:25 -07:00
2026-08-02 05:29:25 -07:00
2026-08-02 05:29:25 -07:00
2026-08-05 00:31:43 +08:00
2026-08-05 00:31:43 +08:00
2026-08-05 00:31:43 +08:00
2026-08-03 18:58:44 +08:00
2026-08-03 18:58:44 +08:00
2026-08-03 18:58:44 +08:00
2026-08-04 15:55:07 +08:00
2026-08-04 15:55:07 +08:00
2026-08-04 15:55:07 +08:00
2026-08-06 21:38:47 +08:00
2026-08-05 07:09:16 +08:00
2026-08-06 21:38:47 +08:00
2026-08-04 15:42:39 +08:00
2026-08-04 15:42:39 +08:00
2026-08-04 15:42:39 +08:00
2026-08-04 14:14:12 +08:00
2026-08-04 14:14:12 +08:00
2026-08-04 14:14:12 +08:00
2026-08-06 11:28:48 +08:00
2026-08-06 11:28:48 +08:00
2026-08-06 11:28:48 +08:00
2026-08-06 00:21:34 +08:00
2026-08-06 00:21:34 +08:00
2026-08-06 00:21:34 +08:00
2026-08-04 21:02:03 +08:00
2026-08-04 21:02:03 +08:00
2026-08-04 21:02:03 +08:00
2026-08-05 17:00:48 +08:00
2026-08-05 17:00:48 +08:00
2026-08-05 17:00:48 +08:00
2026-08-06 11:49:03 +08:00
2026-08-06 11:49:03 +08:00
2026-08-06 11:49:03 +08:00
2026-08-05 02:05:06 +08:00
2026-08-05 02:05:06 +08:00
2026-08-05 02:05:06 +08:00
2026-08-05 23:26:39 -07:00
2026-08-05 23:26:39 -07:00
2026-08-05 23:26:39 -07:00
2026-08-06 11:12:48 +08:00
2026-08-06 11:12:48 +08:00
2026-08-06 11:12:48 +08:00
2026-08-07 15:26:42 +08:00
2026-08-07 15:26:42 +08:00
2026-08-07 15:26:42 +08:00