New artifacts appear at the top of the feed without a manual refresh. - GET /feed/updates (session-authed): new artifacts since a timestamp marker, owner-scoped and filter-aware (source/label/kind/q), returned as row HTML. - Feed JS polls every 5s, paused while the tab is hidden (immediate poll on refocus). Prepends new rows into today's group without touching the selected row or the preview iframe — what you're reading stays put and selected. - Fresh rows show "now", aging into their real time after ~3 min; brief highlight on arrival. - Extracted _artifact_rows.html partial, shared by the day-group render and the updates endpoint, so live rows match exactly. - Polling chosen over SSE/WebSockets: zero infra on sync-WSGI + SQLite (see planning/next_steps for the SSE upgrade path). 142 tests pass; feed page + endpoint verified. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
31 lines
2 KiB
Python
31 lines
2 KiB
Python
from django.urls import path
|
|
|
|
from . import views
|
|
|
|
|
|
urlpatterns = [
|
|
path("", views.feed, name="feed"),
|
|
path("feed/older", views.feed_older, name="feed-older"),
|
|
path("feed/updates", views.feed_updates, name="feed-updates"),
|
|
path("a/<str:artifact_id>/read", views.mark_artifact_read, name="artifact-mark-read"),
|
|
path("a/<str:artifact_id>/keep", views.toggle_artifact_keep, name="artifact-toggle-keep"),
|
|
path("a/<str:artifact_id>/share", views.toggle_artifact_share, name="artifact-toggle-share"),
|
|
path("a/<str:artifact_id>", views.artifact_view, name="artifact"),
|
|
path("s/<str:share_token>", views.shared_artifact_view, name="artifact-shared"),
|
|
path("assets/<str:asset_id>", views.asset_view, name="asset"),
|
|
path("api/assets", views.AssetUploadView.as_view(), name="asset-upload-api"),
|
|
path("api/capabilities", views.CapabilitiesView.as_view(), name="capabilities-api"),
|
|
path("api/skill", views.SkillView.as_view(), name="skill-api"),
|
|
path("api/keys", views.ApiKeyListCreateView.as_view(), name="api-keys"),
|
|
path("api/keys/<int:key_id>", views.ApiKeyDetailView.as_view(), name="api-key-detail"),
|
|
path("api/artifacts", views.ArtifactListCreateView.as_view(), name="artifact-api"),
|
|
path("api/artifacts/<str:artifact_id>", views.ArtifactDetailView.as_view(), name="artifact-detail-api"),
|
|
path("api/artifacts/<str:artifact_id>/raw", views.ArtifactRawView.as_view(), name="artifact-raw-api"),
|
|
path("settings/", views.settings_home, name="settings-home"),
|
|
path("settings/account/", views.settings_account, name="settings-account"),
|
|
path("settings/api-keys/", views.settings_api_keys, name="settings-api-keys"),
|
|
path("settings/users/", views.settings_users, name="settings-users"),
|
|
path("settings/demo-data/", views.settings_demo_data, name="settings-demo-data"),
|
|
path("settings/storage/", views.settings_storage, name="settings-storage"),
|
|
path("settings/about/", views.settings_about, name="settings-about"),
|
|
]
|