陈志谦
1b2898c367
fix(authz): cover create/run/memory/agent routes with permission checks; scope USER.md per user ( #4989 )
...
* fix(authz): cover create/run/memory/agent routes with permission checks; scope USER.md per user
Route permissions: the AuthorizationProvider model only applied to routes
carrying @require_permission, so POST /api/threads, /api/threads/search,
POST /api/runs/stream and /api/runs/wait (runs:create), every /api/memory
route and the custom-agent routes ran with authentication only — a
provider configured to deny threads:write/runs:create/... could not
enforce those decisions. Add the missing decorators (threads:write,
threads:read, runs:create, memory:read/write, agents:read/write) and
register the new permission names in authz.Permissions. No owner checks
are added: per-user data scoping stays in the repository layer.
User profile: GET/PUT /api/user-profile read and wrote a single global
{base_dir}/USER.md, so in a multi-user deployment any authenticated user
could overwrite the prompt context injected for everyone else (and read
it). Scope the file to the caller's bucket
({base_dir}/users/{user_id}/USER.md) like user-scoped skills; no other
consumer of the old global path exists in the tree (verified by grep and
the updated tests). test_put_user_profile asserted the wrong effective
user under the autouse conftest user fixture; fixed to test-user-autouse.
* fix(authz): bind positional args in require_permission; migrate legacy USER.md
Review follow-up on #4989 (willem-bd):
- require_permission's wrapper only looked for request in keyword
arguments, so direct positional calls like
create_thread(body, request) made the injected keyword stub collide
with the positional request (TypeError: multiple values). The wrapper
now binds the wrapped signature via inspect.signature().bind() and
honors a positionally-passed request (and thread_id) instead of
assuming kwargs; the test-stub injection only fires when request is
absent everywhere. The two positional callers in
tests/test_threads_router.py pass again (8/8 channel tests).
- migrate_user_isolation.py now claims the legacy global USER.md for
--user-id (default 'default') like the other unowned legacy
artifacts; without it, upgrading installs with an existing profile
would read content: null and later strand the old file beside the
new per-user one. Conflict handling mirrors migrate_memory (rename to
USER.legacy.md).
* style(scripts): keep migrate_user_isolation help within the line budget
* test(authz): give internal-request stubs realistic auth fields
The create_thread permission wrapper added in this PR authenticates
the direct calls in the internal-owner tests; their SimpleNamespace
requests had state.user but no auth_source and no cookies, so
get_current_user_from_request fell through to request.cookies.get and
raised AttributeError (verified introduced by this branch: both tests
pass on the base commit).
The stubs now carry cookies={} and
state.auth_source=AUTH_SOURCE_INTERNAL, which is exactly what
AuthMiddleware stamps on real internal requests, so state.user is
honored without the JWT path. All 80 tests in the file pass.
* fix(pat): keep memory/agent permissions out of PAT scopes by design
The route permissions exist (they guard the memory/agent routers) but PATs
govern the thread/run lifecycle only: _PAT_ROUTE_RULES default-denies those
routers for PAT callers regardless of scopes. The alignment invariant
becomes a subset check plus a pinned exclusion, and pat.py documents that
opening these scopes is a product decision requiring three synchronized
changes.
* test/docs: cover migrate_user_profile; drop the unclaimed USER.md injection wording
Five-scenario test class mirroring the sibling migration steps (move,
conflict-rename, noop, both under dry-run). The GET/PUT descriptions no
longer say USER.md is 'injected into agents' — nothing at this head consumes
it for prompts; the routes are storage/retrieval only. The memory AGENTS.md
migration pointer now enumerates skills/ and the global USER.md.
* docs(paths): align the USER.md layout comment with the injection disclaimer
* test(authz): align effective permission contracts
---------
Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-09-23 15:37:26 +08:00
..
2026-09-22 21:50:59 +08:00
2026-09-13 20:28:32 +08:00
2026-07-19 18:26:26 +08:00
2026-09-14 11:01:31 +08:00
2026-05-12 23:18:54 +08:00
2026-09-14 11:10:41 +08:00
2026-07-26 14:43:08 +08:00
2026-09-23 15:37:26 +08:00
2026-06-01 15:50:39 +08:00
2026-09-15 07:26:08 +08:00
2026-09-22 17:53:21 +08:00
2026-09-01 16:49:39 +08:00
2026-07-21 11:46:33 +08:00
2026-09-22 10:38:16 +08:00
2026-06-21 20:56:42 +08:00
2026-06-08 12:35:03 +08:00
2026-09-20 20:03:53 +08:00
2026-07-22 14:47:08 +08:00
2026-08-30 10:30:34 +08:00
2026-07-17 15:11:15 +08:00
2026-09-23 08:33:20 +08:00
2026-09-12 11:09:41 +08:00
2026-09-20 22:42:23 +08:00
2026-09-20 16:31:35 +08:00
2026-09-14 18:17:54 +08:00
2026-09-02 12:34:09 +08:00
2026-09-20 16:31:35 +08:00
2026-09-19 12:14:24 +08:00
2026-09-17 07:55:22 +08:00
2026-09-04 23:46:57 +08:00
2026-09-22 20:48:22 +08:00
2026-09-04 23:46:57 +08:00
2026-09-22 19:49:00 +08:00
2026-09-22 20:48:22 +08:00
2026-06-23 10:39:40 +08:00
2026-09-12 10:57:40 +08:00
2026-09-12 07:12:37 +08:00
2026-09-20 15:23:19 +08:00
2026-09-12 07:41:24 +08:00
2026-05-29 23:05:59 +08:00
2026-09-17 22:13:53 +08:00
2026-05-16 09:24:40 +08:00
2026-04-26 11:08:11 +08:00
2026-09-23 15:37:26 +08:00
2026-08-13 23:55:30 +08:00
2026-08-13 23:55:30 +08:00
2026-09-03 08:17:26 +08:00
2026-09-12 21:01:46 +08:00
2026-08-23 09:57:12 +08:00
2026-07-17 14:49:51 +08:00
2026-07-17 14:49:51 +08:00
2026-09-23 15:37:26 +08:00
2026-07-23 22:51:35 +08:00
2026-07-23 22:51:35 +08:00
2026-09-23 08:33:20 +08:00
2026-06-24 13:57:12 +08:00
2026-09-09 08:45:20 +08:00
2026-09-22 11:18:57 +08:00
2026-09-23 08:33:20 +08:00
2026-09-01 22:36:31 +08:00
2026-09-12 21:09:05 +08:00
2026-09-03 08:17:26 +08:00
2026-09-12 16:20:31 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-08-29 14:36:38 +08:00
2026-09-20 20:01:28 +08:00
2026-07-27 11:47:49 +08:00
2026-09-08 19:21:57 +08:00
2026-09-03 08:17:26 +08:00
2026-09-22 11:18:57 +08:00
2026-09-23 10:39:30 +08:00
2026-07-26 08:00:48 +08:00
2026-08-30 21:25:05 +08:00
2026-09-03 08:04:21 +08:00
2026-09-15 08:14:42 +08:00
2026-09-22 10:43:49 +08:00
2026-09-22 10:43:49 +08:00
2026-09-22 19:47:46 +08:00
2026-09-19 12:14:24 +08:00
2026-08-14 12:35:24 +08:00
2026-08-05 08:29:22 +08:00
2026-08-31 23:18:34 +08:00
2026-08-02 22:25:02 +08:00
2026-08-02 22:25:02 +08:00
2026-07-14 07:37:59 +08:00
2026-09-19 12:14:24 +08:00
2026-09-19 12:14:24 +08:00
2026-06-16 23:04:39 +08:00
2026-06-18 10:15:31 +08:00
2026-09-20 17:21:49 +08:00
2026-09-22 20:43:14 +08:00
2026-08-14 23:29:04 +08:00
2026-09-19 10:29:02 +08:00
2026-07-17 14:49:51 +08:00
2026-06-18 10:45:33 +08:00
2026-09-22 21:53:36 +08:00
2026-09-17 21:48:40 +08:00
2026-08-02 22:25:02 +08:00
2026-08-02 22:25:02 +08:00
2026-08-02 22:25:02 +08:00
2026-08-02 22:25:02 +08:00
2026-07-28 22:12:27 +08:00
2026-08-23 09:57:12 +08:00
2026-07-26 10:44:50 +08:00
2026-09-08 19:21:57 +08:00
2026-09-18 16:46:19 +08:00
2026-09-14 18:17:54 +08:00
2026-07-12 08:15:32 +08:00
2026-09-23 09:18:26 +08:00
2026-08-13 23:55:30 +08:00
2026-08-24 07:37:35 +08:00
2026-09-20 18:57:49 +08:00
2026-03-30 07:41:18 +08:00
2026-04-25 19:40:06 +08:00
2026-04-07 18:21:22 +08:00
2026-07-22 14:02:56 +08:00
2026-09-01 16:49:39 +08:00
2026-09-02 11:54:40 +08:00
2026-07-29 22:16:48 +08:00
2026-05-04 09:56:16 +08:00
2026-09-22 14:50:11 +08:00
2026-09-20 16:08:27 +08:00
2026-08-30 15:37:38 +08:00
2026-08-24 21:48:37 +08:00
2026-06-10 21:36:25 +08:00
2026-08-23 15:08:39 +08:00
2026-09-18 16:59:31 +08:00
2026-09-12 11:24:46 +08:00
2026-07-29 22:24:04 +08:00
2026-08-23 09:57:12 +08:00
2026-09-14 18:17:54 +08:00
2026-09-15 08:25:08 +08:00
2026-09-14 15:05:30 +08:00
2026-09-15 08:25:08 +08:00
2026-09-14 10:51:01 +08:00
2026-09-16 15:37:57 +08:00
2026-04-26 11:05:47 +08:00
2026-07-05 09:54:55 +08:00
2026-03-29 15:31:18 +08:00
2026-09-17 09:35:50 +08:00
2026-09-20 16:08:27 +08:00
2026-08-13 23:55:30 +08:00
2026-09-23 15:37:26 +08:00
2026-08-12 09:25:05 +08:00
2026-08-08 21:07:55 +08:00
2026-09-18 18:32:42 +08:00
2026-08-30 21:25:05 +08:00
2026-08-17 08:20:42 +08:00
2026-07-13 17:57:34 +08:00
2026-06-02 22:43:22 +08:00
2026-06-05 15:21:41 +08:00
2026-07-12 00:17:11 +08:00
2026-07-04 23:09:29 +08:00
2026-06-02 22:43:22 +08:00
2026-07-01 22:49:17 +08:00
2026-09-08 16:11:49 +08:00
2026-09-23 09:18:26 +08:00
2026-07-28 23:21:23 +08:00
2026-09-14 06:55:57 +08:00
2026-07-22 13:55:40 +08:00
2026-07-29 22:33:45 +08:00
2026-09-17 14:53:54 +08:00
2026-07-29 22:33:45 +08:00
2026-09-14 06:55:57 +08:00
2026-09-22 21:59:53 +08:00
2026-06-12 15:24:58 +08:00
2026-09-16 15:29:14 +08:00
2026-09-19 11:10:32 +08:00
2026-08-18 23:14:17 +08:00
2026-09-20 19:29:47 +08:00
2026-09-19 10:40:22 +08:00
2026-09-18 11:32:04 +08:00
2026-08-11 21:52:12 +08:00
2026-09-20 19:23:45 +08:00
2026-04-26 11:09:56 +08:00
2026-09-23 09:53:49 +08:00
2026-04-08 17:13:39 +08:00
2026-09-12 10:59:31 +08:00
2026-09-22 11:18:57 +08:00
2026-08-04 22:33:26 +08:00
2026-09-22 11:18:57 +08:00
2026-09-01 16:49:39 +08:00
2026-08-11 16:33:22 +08:00
2026-09-12 15:59:41 +08:00
2026-09-16 21:18:05 +08:00
2026-08-04 22:33:26 +08:00
2026-08-04 22:33:26 +08:00
2026-08-23 09:57:12 +08:00
2026-09-14 11:01:31 +08:00
2026-09-05 14:03:00 +08:00
2026-08-04 22:33:26 +08:00
2026-08-13 23:55:30 +08:00
2026-09-23 15:25:45 +08:00
2026-09-23 15:25:45 +08:00
2026-08-11 16:33:22 +08:00
2026-08-11 16:33:22 +08:00
2026-08-11 16:33:22 +08:00
2026-09-06 08:39:26 +08:00
2026-09-22 11:18:57 +08:00
2026-08-23 15:08:39 +08:00
2026-09-12 11:24:46 +08:00
2026-09-22 10:38:16 +08:00
2026-07-05 09:54:55 +08:00
2026-09-18 16:59:31 +08:00
2026-09-18 18:32:42 +08:00
2026-09-14 11:01:31 +08:00
2026-07-02 08:24:15 +08:00
2026-09-16 18:46:18 +08:00
2026-09-12 12:50:22 +08:00
2026-09-19 10:08:09 +08:00
2026-09-12 14:28:15 +08:00
2026-09-08 17:06:28 +08:00
2026-07-19 22:12:30 +08:00
2026-09-13 17:23:04 +08:00
2026-07-31 21:57:22 +08:00
2026-07-22 08:33:29 +08:00
2026-07-29 00:09:02 +08:00
2026-09-19 11:23:12 +08:00
2026-09-23 10:24:56 +08:00
2026-09-01 22:04:17 +08:00
2026-09-18 16:59:31 +08:00
2026-09-22 11:18:57 +08:00
2026-09-18 17:19:10 +08:00
2026-09-14 11:01:31 +08:00
2026-08-13 23:55:30 +08:00
2026-09-17 21:26:52 +08:00
2026-08-13 23:55:30 +08:00
2026-08-14 23:50:40 +08:00
2026-08-13 23:55:30 +08:00
2026-09-23 08:33:20 +08:00
2026-09-12 14:32:05 +08:00
2026-09-14 06:55:57 +08:00
2026-07-04 22:56:24 +08:00
2026-07-04 22:56:24 +08:00
2026-07-04 22:56:24 +08:00
2026-08-14 12:35:24 +08:00
2026-07-04 22:56:24 +08:00
2026-07-14 22:56:50 +08:00
2026-07-04 22:56:24 +08:00
2026-09-22 20:48:22 +08:00
2026-07-16 09:12:29 +08:00
2026-07-23 14:32:49 +08:00
2026-07-15 22:30:34 +08:00
2026-09-22 11:02:16 +08:00
2026-09-16 21:30:57 +08:00
2026-06-21 15:55:10 +08:00
2026-08-23 09:57:12 +08:00
2026-03-14 22:55:52 +08:00
2026-08-23 15:46:10 +08:00
2026-08-23 15:08:39 +08:00
2026-09-13 20:28:32 +08:00
2026-09-20 16:43:54 +08:00
2026-07-27 14:05:31 +08:00
2026-09-22 22:50:34 +08:00
2026-07-27 23:07:40 +08:00
2026-03-26 14:20:18 +08:00
2026-09-09 16:31:41 +08:00
2026-06-28 16:10:44 +08:00
2026-07-08 17:10:27 +08:00
2026-09-16 18:46:18 +08:00
2026-09-20 18:57:49 +08:00
2026-07-04 13:54:04 +08:00
2026-06-17 15:29:22 +08:00
2026-08-17 08:16:14 +08:00
2026-09-02 14:19:37 +08:00
2026-09-18 18:32:42 +08:00
2026-09-15 07:28:24 +08:00
2026-09-16 15:18:29 +08:00
2026-09-14 18:24:51 +08:00
2026-09-19 07:44:05 +08:00
2026-09-18 16:59:31 +08:00
2026-09-18 16:59:31 +08:00
2026-09-18 16:59:31 +08:00
2026-09-23 08:33:20 +08:00
2026-08-15 21:20:34 +08:00
2026-08-16 23:54:06 +08:00
2026-09-23 08:33:20 +08:00
2026-07-28 22:54:44 +08:00
2026-09-16 18:39:24 +08:00
2026-09-20 19:28:21 +08:00
2026-09-20 18:57:49 +08:00
2026-07-28 23:21:23 +08:00
2026-09-06 10:21:58 +08:00
2026-09-18 16:59:31 +08:00
2026-09-12 07:25:19 +08:00
2026-09-20 16:57:06 +08:00
2026-04-11 16:52:10 +08:00
2026-07-20 23:33:09 +08:00
2026-09-18 11:30:11 +08:00
2026-09-15 07:31:03 +08:00
2026-09-14 07:30:34 +08:00
2026-09-14 14:05:21 +08:00
2026-07-13 00:01:22 +08:00
2026-09-14 11:01:31 +08:00
2026-09-23 09:22:31 +08:00
2026-04-30 22:27:14 +08:00
2026-05-07 16:15:15 +08:00
2026-09-17 09:36:55 +08:00
2026-07-26 14:43:08 +08:00
2026-08-29 14:54:02 +08:00
2026-09-22 17:53:21 +08:00
2026-09-22 17:53:21 +08:00
2026-09-20 16:13:58 +08:00
2026-08-24 11:04:23 +08:00
2026-08-24 11:04:23 +08:00
2026-09-04 11:30:36 +08:00
2026-09-22 11:15:06 +08:00
2026-09-01 23:24:49 +08:00
2026-09-01 23:24:49 +08:00
2026-04-25 09:18:13 +08:00
2026-09-23 08:33:20 +08:00
2026-09-18 08:03:37 +08:00
2026-08-31 15:07:30 +08:00
2026-08-31 15:07:30 +08:00
2026-09-14 18:07:21 +08:00
2026-07-09 16:26:31 +08:00
2026-07-09 16:26:31 +08:00
2026-07-28 22:59:14 +08:00
2026-09-13 17:13:45 +08:00
2026-09-23 08:33:20 +08:00
2026-08-05 08:56:18 +08:00
2026-09-23 08:33:20 +08:00
2026-08-15 14:26:38 +08:00
2026-09-23 08:33:20 +08:00
2026-09-23 08:33:20 +08:00
2026-09-23 08:33:20 +08:00
2026-09-23 08:33:20 +08:00
2026-09-23 08:33:20 +08:00
2026-08-15 14:26:38 +08:00
2026-09-23 08:33:20 +08:00
2026-09-23 10:20:51 +08:00
2026-09-23 08:33:20 +08:00
2026-08-15 14:26:38 +08:00
2026-09-23 08:33:20 +08:00
2026-08-15 14:26:38 +08:00
2026-07-14 09:49:43 +08:00
2026-09-01 23:24:49 +08:00
2026-09-20 16:43:54 +08:00
2026-09-03 08:00:25 +08:00
2026-08-01 08:39:28 +08:00
2026-08-17 08:20:42 +08:00
2026-09-14 07:22:38 +08:00
2026-09-18 11:32:04 +08:00
2026-07-26 21:16:36 +08:00
2026-07-22 07:46:03 +08:00
2026-09-01 16:49:39 +08:00
2026-07-15 11:21:04 +08:00
2026-07-26 21:16:36 +08:00
2026-09-03 08:00:25 +08:00
2026-09-18 11:32:04 +08:00
2026-09-18 11:32:04 +08:00
2026-07-27 23:17:18 +08:00
2026-09-23 15:37:26 +08:00
2026-08-01 08:39:28 +08:00
2026-07-15 11:21:04 +08:00
2026-08-17 08:20:42 +08:00
2026-07-22 07:46:03 +08:00
2026-07-22 07:46:03 +08:00
2026-09-19 10:38:22 +08:00
2026-09-09 15:52:09 +08:00
2026-08-17 08:20:42 +08:00
2026-07-15 11:21:04 +08:00
2026-09-01 16:49:39 +08:00
2026-09-01 15:26:33 +08:00
2026-07-26 21:16:36 +08:00
2026-08-17 08:20:42 +08:00
2026-09-22 10:38:16 +08:00
2026-09-06 22:50:58 +08:00
2026-09-18 07:29:34 +08:00
2026-09-09 15:52:09 +08:00
2026-09-09 15:52:09 +08:00
2026-07-27 23:07:40 +08:00
2026-09-09 15:52:09 +08:00
2026-08-29 23:50:45 +08:00
2026-09-03 08:17:26 +08:00
2026-09-08 17:00:26 +08:00
2026-09-09 15:52:09 +08:00
2026-09-12 07:35:07 +08:00
2026-09-14 07:25:41 +08:00
2026-09-16 21:18:05 +08:00
2026-09-18 10:48:26 +08:00
2026-09-20 19:11:42 +08:00
2026-09-20 19:11:42 +08:00
2026-09-23 15:37:26 +08:00
2026-09-05 14:10:18 +08:00
2026-07-31 21:57:22 +08:00
2026-09-18 07:29:34 +08:00
2026-09-20 19:28:21 +08:00
2026-07-26 14:43:08 +08:00
2026-09-16 22:07:42 +08:00
2026-09-15 07:14:35 +08:00
2026-09-21 21:45:52 +08:00
2026-07-31 17:55:24 +08:00
2026-07-27 23:07:40 +08:00
2026-08-14 23:50:40 +08:00
2026-09-22 11:38:43 +08:00
2026-06-22 18:55:20 +08:00
2026-08-01 22:19:59 +08:00
2026-09-18 09:03:55 +08:00
2026-06-21 15:47:53 +08:00
2026-09-01 15:51:37 +08:00
2026-09-20 14:34:37 +08:00
2026-08-11 13:56:02 +08:00
2026-09-20 16:43:54 +08:00
2026-07-11 16:05:30 +08:00
2026-09-17 11:35:13 +08:00
2026-09-16 18:46:18 +08:00
2026-09-18 07:29:34 +08:00
2026-05-28 18:24:32 +08:00
2026-06-08 22:04:38 +08:00
2026-03-26 15:07:05 +08:00
2026-06-09 18:01:43 +08:00
2026-07-26 08:09:17 +08:00
2026-06-24 13:57:12 +08:00
2026-09-22 22:17:11 +08:00
2026-09-20 22:42:23 +08:00
2026-09-09 15:52:09 +08:00
2026-06-24 13:57:12 +08:00
2026-07-30 13:51:17 +08:00
2026-09-09 15:52:09 +08:00
2026-09-23 10:14:35 +08:00
2026-09-20 19:19:29 +08:00
2026-09-22 11:36:28 +08:00
2026-09-12 07:35:07 +08:00
2026-08-23 09:57:12 +08:00
2026-09-22 10:59:41 +08:00
2026-05-21 16:22:09 +08:00
2026-09-23 15:37:26 +08:00
2026-07-30 13:51:17 +08:00
2026-09-19 11:26:46 +08:00
2026-09-22 11:18:57 +08:00
2026-09-22 11:18:57 +08:00
2026-09-11 18:41:24 +08:00
2026-09-22 10:38:16 +08:00
2026-09-20 22:38:53 +08:00
2026-08-05 07:43:54 +08:00
2026-08-05 07:43:54 +08:00
2026-09-16 18:46:18 +08:00
2026-09-16 18:46:18 +08:00
2026-09-16 18:46:18 +08:00
2026-09-16 18:46:18 +08:00
2026-09-16 18:46:18 +08:00
2026-09-16 18:46:18 +08:00
2026-09-18 09:05:26 +08:00
2026-09-16 18:46:18 +08:00
2026-09-16 18:46:18 +08:00
2026-09-16 18:46:18 +08:00
2026-09-08 17:00:26 +08:00
2026-09-16 18:46:18 +08:00
2026-07-20 07:24:34 +08:00
2026-04-10 20:40:30 +08:00
2026-08-31 14:35:08 +08:00
2026-09-14 11:10:41 +08:00
2026-09-17 07:45:19 +08:00
2026-09-18 16:59:31 +08:00
2026-09-19 15:09:36 +08:00
2026-07-21 09:23:14 +08:00
2026-09-13 19:55:58 +08:00
2026-09-13 18:04:51 +08:00
2026-09-15 08:25:08 +08:00
2026-07-30 07:53:10 +08:00
2026-08-13 21:20:49 +08:00
2026-09-16 23:57:38 +08:00
2026-03-14 22:55:52 +08:00
2026-08-29 16:56:56 +08:00
2026-03-14 22:55:52 +08:00
2026-09-01 16:49:39 +08:00
2026-09-22 10:56:49 +08:00
2026-09-17 07:45:19 +08:00
2026-09-20 19:07:48 +08:00
2026-06-08 17:32:41 +08:00
2026-06-09 21:58:31 +08:00
2026-09-14 11:10:41 +08:00
2026-07-11 15:58:07 +08:00
2026-09-18 16:55:07 +08:00
2026-08-27 14:59:31 +08:00
2026-08-25 08:22:57 +08:00
2026-06-24 17:47:04 +08:00
2026-07-02 07:43:09 +08:00
2026-04-26 15:09:25 +08:00
2026-09-18 18:32:42 +08:00
2026-09-15 08:45:08 +08:00
2026-09-16 18:46:18 +08:00
2026-09-23 15:25:45 +08:00
2026-09-16 18:46:18 +08:00
2026-09-17 07:38:38 +08:00
2026-09-01 16:49:39 +08:00
2026-05-21 14:48:28 +08:00
2026-09-18 18:32:42 +08:00
2026-07-27 22:27:16 +08:00
2026-08-05 08:56:18 +08:00
2026-09-14 18:17:54 +08:00
2026-08-22 16:53:32 +08:00
2026-09-23 08:33:20 +08:00
2026-09-22 11:02:16 +08:00
2026-08-01 19:42:44 +08:00
2026-09-20 19:11:42 +08:00
2026-06-24 10:24:36 +08:00
2026-09-12 07:41:24 +08:00
2026-09-22 10:38:16 +08:00
2026-07-19 22:12:30 +08:00
2026-09-21 22:06:41 +08:00
2026-07-23 22:56:12 +08:00
2026-09-15 22:22:12 +08:00
2026-05-22 21:20:28 +08:00
2026-08-01 21:44:34 +08:00
2026-09-10 15:01:56 +08:00
2026-08-30 10:30:34 +08:00
2026-09-17 22:33:18 +08:00
2026-09-23 09:53:49 +08:00
2026-06-03 22:02:27 +08:00
2026-09-23 09:53:49 +08:00
2026-09-04 23:46:57 +08:00
2026-09-04 23:46:57 +08:00
2026-04-09 17:21:23 +08:00
2026-09-04 23:46:57 +08:00
2026-08-24 15:27:33 +08:00
2026-09-14 14:05:21 +08:00
2026-06-25 08:06:17 +08:00
2026-09-23 09:53:49 +08:00
2026-09-22 11:16:33 +08:00
2026-09-20 14:34:37 +08:00
2026-09-12 10:54:39 +08:00
2026-09-14 14:05:21 +08:00
2026-07-04 13:54:04 +08:00
2026-06-12 10:20:38 +08:00
2026-09-12 07:35:07 +08:00
2026-07-04 21:51:57 +08:00
2026-09-12 14:59:04 +08:00
2026-08-24 15:38:32 +08:00
2026-07-04 21:51:57 +08:00
2026-08-24 15:38:32 +08:00
2026-09-12 07:35:07 +08:00
2026-09-16 19:56:01 +08:00
2026-08-24 15:38:32 +08:00
2026-09-10 16:46:01 +08:00
2026-07-04 21:51:57 +08:00
2026-09-14 14:09:27 +08:00
2026-09-10 16:46:01 +08:00
2026-09-12 07:35:07 +08:00
2026-09-12 07:35:07 +08:00
2026-09-12 07:35:07 +08:00
2026-08-24 07:09:08 +08:00
2026-09-16 21:18:05 +08:00
2026-09-22 21:18:49 +08:00
2026-08-24 21:27:43 +08:00
2026-06-19 11:23:07 +08:00
2026-03-26 14:20:18 +08:00
2026-07-21 08:15:33 +08:00
2026-08-28 10:30:30 +08:00
2026-08-28 10:44:30 +08:00
2026-09-14 06:55:57 +08:00
2026-09-14 06:55:57 +08:00
2026-07-07 23:09:06 +08:00
2026-07-23 08:03:21 +08:00
2026-05-12 23:18:54 +08:00
2026-07-23 08:03:21 +08:00
2026-09-17 22:00:22 +08:00
2026-08-28 22:24:10 +08:00
2026-06-19 21:57:03 +08:00
2026-09-17 07:59:58 +08:00
2026-07-04 11:27:19 +08:00
2026-07-04 11:27:19 +08:00
2026-09-02 17:05:36 +08:00
2026-09-22 17:27:01 +08:00
2026-09-12 14:32:05 +08:00
2026-07-31 17:55:24 +08:00
2026-07-13 10:40:22 +08:00
2026-09-08 09:21:38 +08:00
2026-09-05 14:03:00 +08:00
2026-08-31 14:35:08 +08:00
2026-09-23 10:10:30 +08:00
2026-09-23 10:10:30 +08:00
2026-09-14 11:01:31 +08:00
2026-07-11 15:58:07 +08:00
2026-08-25 19:46:04 +08:00
2026-08-28 08:58:59 +08:00
2026-03-25 16:28:33 +08:00
2026-09-22 22:39:49 +08:00
2026-09-18 08:02:52 +08:00
2026-09-22 22:55:12 +08:00
2026-09-19 12:14:24 +08:00
2026-08-28 08:58:59 +08:00
2026-08-28 08:58:59 +08:00
2026-07-17 23:22:16 +08:00
2026-09-18 08:02:52 +08:00
2026-09-23 10:10:30 +08:00
2026-09-23 10:16:19 +08:00
2026-06-18 10:09:46 +08:00
2026-07-08 21:58:33 +08:00
2026-09-18 07:48:24 +08:00
2026-09-08 10:50:03 +08:00
2026-07-28 22:59:14 +08:00
2026-03-30 16:02:23 +08:00
2026-09-08 14:40:05 +08:00
2026-07-31 17:25:07 +08:00
2026-07-22 09:20:54 +08:00
2026-08-30 10:46:01 +08:00
2026-09-01 15:51:37 +08:00
2026-09-08 16:11:49 +08:00
2026-09-23 08:33:20 +08:00
2026-09-23 08:33:20 +08:00
2026-08-25 07:49:38 +08:00
2026-08-25 07:49:38 +08:00
2026-09-16 22:05:20 +08:00
2026-06-14 10:30:45 +08:00
2026-09-12 16:20:31 +08:00
2026-06-08 23:17:22 +08:00
2026-07-14 08:14:21 +08:00
2026-09-02 11:54:40 +08:00
2026-09-23 08:33:20 +08:00
2026-09-15 22:22:12 +08:00
2026-08-24 11:04:23 +08:00
2026-08-30 11:39:25 +08:00
2026-07-30 07:21:55 +08:00
2026-09-18 14:27:33 +08:00
2026-05-02 06:37:49 +08:00
2026-09-01 16:13:41 +08:00
2026-07-11 15:41:57 +08:00
2026-07-13 19:26:07 +08:00
2026-06-19 21:42:42 +08:00
2026-09-17 09:05:25 +08:00
2026-08-24 11:04:23 +08:00
2026-07-28 19:35:21 +08:00
2026-09-15 22:10:39 +08:00
2026-09-08 16:00:45 +08:00
2026-07-27 11:47:49 +08:00
2026-07-27 11:47:49 +08:00
2026-08-01 19:42:44 +08:00
2026-09-14 06:55:57 +08:00
2026-09-14 11:01:31 +08:00
2026-08-23 09:57:12 +08:00
2026-09-19 10:56:21 +08:00
2026-09-23 08:33:20 +08:00
2026-05-21 21:18:10 +08:00
2026-09-18 07:25:49 +08:00
2026-08-23 10:27:19 +08:00
2026-08-27 18:12:05 +08:00
2026-09-22 21:10:27 +08:00
2026-09-18 07:29:34 +08:00
2026-09-06 22:30:26 +08:00
2026-07-28 22:59:14 +08:00
2026-09-16 18:46:18 +08:00
2026-08-01 19:42:44 +08:00
2026-07-27 22:46:51 +08:00
2026-08-11 22:00:57 +08:00
2026-09-09 15:52:09 +08:00
2026-09-19 10:18:13 +08:00
2026-09-12 07:41:24 +08:00
2026-07-29 12:47:30 +08:00
2026-09-09 14:56:31 +08:00
2026-09-18 09:39:14 +08:00
2026-09-09 14:56:31 +08:00
2026-06-02 22:43:22 +08:00
2026-09-12 21:01:46 +08:00
2026-09-18 09:39:14 +08:00
2026-07-28 23:21:23 +08:00
2026-09-23 15:37:26 +08:00
2026-09-14 11:10:41 +08:00
2026-07-15 11:21:04 +08:00
2026-03-14 22:55:52 +08:00
2026-09-12 09:22:27 +08:00
2026-09-22 17:45:01 +08:00
2026-09-22 17:45:01 +08:00
2026-09-16 15:52:17 +08:00
2026-07-04 23:14:46 +08:00
2026-05-10 22:00:57 +08:00
2026-08-12 09:25:05 +08:00
2026-07-28 23:21:23 +08:00
2026-09-12 16:20:31 +08:00
2026-09-13 18:04:51 +08:00
2026-09-15 22:22:12 +08:00
2026-08-22 16:53:32 +08:00
2026-09-18 16:59:31 +08:00
2026-07-04 11:27:19 +08:00
2026-09-18 16:59:31 +08:00
2026-09-16 23:57:38 +08:00
2026-09-16 15:52:17 +08:00
2026-09-15 08:45:08 +08:00
2026-08-29 16:56:56 +08:00
2026-08-29 16:56:56 +08:00
2026-09-15 08:45:08 +08:00
2026-09-01 09:49:32 +08:00
2026-07-14 09:49:43 +08:00
2026-08-23 09:57:12 +08:00
2026-09-01 16:49:39 +08:00
2026-09-01 16:49:39 +08:00
2026-09-01 16:49:39 +08:00
2026-07-14 08:58:06 +08:00
2026-07-14 08:58:06 +08:00
2026-07-03 08:01:46 +08:00
2026-09-16 18:46:18 +08:00
2026-08-25 20:15:08 +08:00
2026-08-04 08:33:10 +08:00
2026-08-13 23:55:30 +08:00
2026-09-18 07:48:24 +08:00
2026-06-25 20:10:49 +08:00
2026-06-25 20:10:49 +08:00
2026-06-25 20:10:49 +08:00
2026-06-25 20:10:49 +08:00
2026-06-25 20:10:49 +08:00
2026-06-25 20:10:49 +08:00
2026-06-25 20:10:49 +08:00
2026-06-25 20:10:49 +08:00
2026-07-15 22:27:00 +08:00
2026-06-25 20:10:49 +08:00
2026-08-05 08:15:28 +08:00
2026-07-20 23:56:37 +08:00
2026-05-12 23:18:54 +08:00
2026-09-12 11:09:41 +08:00
2026-07-26 21:16:36 +08:00
2026-07-26 21:16:36 +08:00
2026-09-22 20:43:14 +08:00
2026-07-28 22:59:14 +08:00
2026-09-23 09:00:45 +08:00
2026-07-28 22:59:14 +08:00
2026-09-03 08:17:26 +08:00
2026-09-14 07:25:41 +08:00
2026-09-22 22:55:12 +08:00
2026-07-11 09:18:12 +08:00
2026-09-19 10:56:21 +08:00
2026-05-02 15:16:16 +08:00
2026-08-13 23:55:30 +08:00
2026-08-23 15:43:37 +08:00
2026-08-27 09:12:37 +08:00
2026-09-10 15:48:55 +08:00
2026-09-10 15:48:55 +08:00
2026-09-10 15:48:55 +08:00
2026-07-24 13:12:43 +08:00
2026-07-28 19:56:40 +08:00
2026-07-27 07:13:06 +08:00
2026-07-06 07:21:12 +08:00
2026-07-20 23:05:47 +08:00
2026-09-11 18:36:58 +08:00
2026-09-08 10:50:03 +08:00
2026-09-16 16:33:47 +08:00
2026-09-20 17:21:49 +08:00
2026-09-12 09:59:58 +08:00
2026-07-12 07:52:45 +08:00
2026-09-01 16:49:39 +08:00
2026-09-14 07:17:51 +08:00
2026-07-12 11:51:31 +08:00
2026-09-14 18:17:54 +08:00
2026-09-08 14:51:57 +08:00
2026-09-20 19:28:21 +08:00
2026-06-07 17:47:11 +08:00