@mndrk/agx 2.0.0-next.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -5
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/app-path-routes-manifest.json +9 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/prerender-manifest.json +27 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/routes-manifest.json +57 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route/build-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route.js +7 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/file-search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/health/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/history/route.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/learnings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/memories/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route/build-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route.js +8 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route/build-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route.js +8 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route/build-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route.js +8 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route/build-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route.js +8 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/cancel/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/signal/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/system/db-status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/pause/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/heartbeat/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/user-settings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/board.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/status/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/build-manifest.json +18 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/next-font-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/react-loadable-manifest.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page.js +16 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/build-manifest.json +18 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/next-font-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/react-loadable-manifest.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page.js +16 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/build-manifest.json +18 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/next-font-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/react-loadable-manifest.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js +15 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.html +9 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.meta +15 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.rsc +23 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_full.segment.rsc +23 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_head.segment.rsc +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_index.segment.rsc +9 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_tree.segment.rsc +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +9 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/welcome.segment.rsc +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app-paths-manifest.json +9 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/7e210_Agents_agx-cloud__next-internal_server_app_api_daemon_route_actions_460dc557.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_ef3cf579._.js +8 -8
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_lib_6a5d1c80._.js +11 -11
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_lib_7eefb426._.js +10 -10
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__1f176ebf._.js +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__22d0d2cc._.js +10 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__26bfcde9._.js +7 -7
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__27e9e463._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__299302d8._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__2ed85740._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__33e7bfc0._.js +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__8f9b0934._.js +28 -28
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__9b8efd58._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__a7a82510._.js +7 -7
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__bea8711d._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__ec8bbb77._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/a2576__next-internal_server_app_api_notification-outbox_[id]_route_actions_c429c549.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/a2576__next-internal_server_app_api_notifications_[id]_read_route_actions_615ae13d.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/a2576__next-internal_server_app_api_notifications_unread-count_route_actions_b61a9301.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ad555_agx-cloud__next-internal_server_app_api_notifications_route_actions_06dbcdc4.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ae43b_next_dist_esm_build_templates_app-route_122e31fe.js +28 -24
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/7e210_Agents_agx-cloud__next-internal_server_app_welcome_page_actions_5176f4d4.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_033373a0._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_039c43e5._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_0562c9cd._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_0cf15b7b._.js +8 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_0d91718c._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_1e1c23f7._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_502ede06._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_68972519._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_69570e90._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_6cbdc6fd._.js +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_82783170._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_a0e26bca._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_a2a39dbe._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_aaa774d8._.js +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_afe007c2._.js +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_b2707e4d._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_components_chat-ui_f59beea5._.js +95 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{Projects_Agents_agx-cloud_e7635878._.js → Projects_Agents_agx-cloud_dc82c7bf._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_ef6ea3fc._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_ff11dd7c._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__9d72d782._.js → [root-of-the-server]__00507cd5._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__24a978df._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__523e8b0b._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__546c34e3._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__807e5ecc._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__9668fae0._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__97870484._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__657b446b._.js → [root-of-the-server]__99fa92e8._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__a4a5c57b._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__b549e8c2._.js +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__5dace3c6._.js → [root-of-the-server]__d78dfcf2._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__e915acb2._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/a2576__next-internal_server_app_w_[workspaceId]_[threadId]_page_actions_f668795b.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ad555_agx-cloud__next-internal_server_app_w_[workspaceId]_page_actions_8ade5a6c.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_@dnd-kit_core_dist_core_esm_e4fe20d7.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_db3f38e3._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_lucide-react_dist_esm_63b016a6._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_next_dist_2cd20dd7._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_next_dist_832595f2._.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_next_dist_esm_build_templates_app-page_e4003e94.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/functions-config-manifest.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/next-font-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/next-font-manifest.json +12 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/404.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/0804e1cf36ac4c40.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/245ea04687930f1c.css +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/2f63efec13a9346a.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/54fbb309ba7c2b4b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/55f8c843a8037ac8.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/5eda5cd286808293.js +93 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/6bfec2ea0d682ffc.js +18 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/7d2c10033c8a8554.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{b47938cee3a79764.js → 822bd641355a9397.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{49b2630db3ff37fe.js → 8dad5ee086c3d46d.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/c6ed4939c63ba444.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/e4b656247e95267b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/ef426b92c6ce58a5.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/daemon/route.ts +55 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notification-outbox/[id]/route.ts +42 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notifications/[id]/read/route.ts +43 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notifications/route.ts +46 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notifications/unread-count/route.ts +24 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/participants/route.ts +13 -6
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/system/db-status/route.ts +23 -15
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/projects/[slug]/layout.tsx +28 -10
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/w/[workspaceId]/[threadId]/page.tsx +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/w/[workspaceId]/layout.tsx +7 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/w/[workspaceId]/page.tsx +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/welcome/page.tsx +117 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Layout.tsx +4 -6
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/NotificationBell.tsx +62 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/NotificationItem.tsx +96 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/NotificationsPanel.tsx +127 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/index.ts +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/WorkspaceNav.tsx +67 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ChatContainer.tsx +181 -122
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ChatPreview.tsx +85 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/MessageBubble.tsx +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/MessageList.tsx +3 -16
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ParticipantBar.tsx +41 -86
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ThreadView.tsx +4 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/thread/ThreadItem.tsx +9 -9
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/thread/ThreadList.tsx +15 -15
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/thread/ThreadSidebar.tsx +34 -34
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/db/sqlite/001_agx_board_schema.sql +52 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/hooks/useNotifications.ts +115 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/hooks/useThreadState.ts +85 -85
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/cli-runner.ts +6 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/db/cursors.js +75 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/db/notifications.js +70 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/db/preferences.js +110 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/demo-threads.ts +76 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/jobs/pruneNotifications.js +87 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/participants-store.ts +7 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/projectors/notificationProjector.js +351 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/storage/index.ts +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/storage/local-thread-adapter.ts +27 -27
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/storage/thread-adapter.ts +31 -31
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/stream-multiplexer.ts +45 -9
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/types.ts +7 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/migrations/sqlite_schema.sql +45 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/script.txt +111 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/services/threadService.ts +32 -32
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/state/threadSelection.test.ts +30 -30
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/state/threadSelection.ts +21 -21
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/state/uiSettings.ts +14 -11
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/_helpers.js +68 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/crash.test.js +139 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/duplicate.test.js +111 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/flood.test.js +162 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/replay.test.js +107 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tsconfig.tsbuildinfo +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/types/userPreferences.ts +12 -8
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/worker/index.js +5 -1
- package/lib/cli/daemon.js +7 -1
- package/lib/cli/onboarding.js +71 -1
- package/lib/cli/providers.js +5 -5
- package/lib/cli/runCli.js +12 -1
- package/lib/commands/chat.js +8 -2
- package/lib/executor.js +56 -3
- package/lib/proc/commandExists.js +14 -8
- package/package.json +1 -1
- package/scripts/postinstall.js +19 -7
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_215731e9._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_2b2a91e2._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_a7533794._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_e1b68242._.js +0 -8
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__0d6259d5._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__13df20fe._.js +0 -95
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__c76acf29._.js +0 -4
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__e5a1e0b5._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_lucide-react_dist_esm_6c755856._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_lucide-react_dist_esm_icons_search_04b9412a.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/0d58db99a936501d.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/20d98b7f52e93d14.js +0 -18
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/216d8e2f28fa9ab1.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/5d94ba021f22122d.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/5e2849404c532f70.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/81d22c5173d36098.js +0 -93
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/9b2c429432840844.css +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/9fa263ad20d27969.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/dc534541f2bd6342.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-board.db +0 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-board.db-shm +0 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-board.db-wal +0 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-queue.db +0 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-queue.db-shm +0 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-queue.db-wal +0 -0
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{m5R8F5c1zxb5EWbYNiR5n → UBZZwc9vLlz1xCm5PYCTc}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{m5R8F5c1zxb5EWbYNiR5n → UBZZwc9vLlz1xCm5PYCTc}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{m5R8F5c1zxb5EWbYNiR5n → UBZZwc9vLlz1xCm5PYCTc}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { GroupMessage, Participant } from "@/lib/types";
|
|
2
|
+
|
|
3
|
+
export const DEMO_PARTICIPANTS: Participant[] = [
|
|
4
|
+
{ id: "jane", name: "Jane", provider: "claude", model: "claude-opus-4-6", color: "#6366f1" },
|
|
5
|
+
{ id: "cody", name: "Cody", provider: "claude", model: "gpt-5.3", color: "#f59e0b" },
|
|
6
|
+
{ id: "flint", name: "Flint", provider: "ollama", model: "gemini-3.1-pro", color: "#10b981" },
|
|
7
|
+
{ id: "jewel", name: "Jewel", provider: "claude", model: "glm-5", color: "#ec4899" },
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
const now = Date.now();
|
|
11
|
+
|
|
12
|
+
export const DEMO_MESSAGES: GroupMessage[] = [
|
|
13
|
+
{
|
|
14
|
+
id: "demo-0",
|
|
15
|
+
role: "user",
|
|
16
|
+
participantId: null,
|
|
17
|
+
content: "We're losing 40% of users at the onboarding config screen. How should we fix this?",
|
|
18
|
+
timestamp: now - 9000,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "demo-1",
|
|
22
|
+
role: "assistant",
|
|
23
|
+
participantId: "jane",
|
|
24
|
+
content: "The core problem is we're asking for setup before showing value. Users don't know *why* they need an API key yet. Flip the order — let them see the product working first, then ask for config when they actually need it.",
|
|
25
|
+
timestamp: now - 8000,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: "demo-2",
|
|
29
|
+
role: "assistant",
|
|
30
|
+
participantId: "cody",
|
|
31
|
+
content: "We can prove that with a zero-config starter task: detect `package.json` or `.git` on load, run a local project analysis. No API key needed, instant result. That alone should cut the drop-off significantly.",
|
|
32
|
+
timestamp: now - 7000,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "demo-3",
|
|
36
|
+
role: "assistant",
|
|
37
|
+
participantId: "flint",
|
|
38
|
+
content: "Risk: if we defer config entirely, the *second* interaction fails when there's no provider configured. We'd just move the drop-off from step 1 to step 2. Need to handle that transition carefully.",
|
|
39
|
+
timestamp: now - 6000,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: "demo-4",
|
|
43
|
+
role: "assistant",
|
|
44
|
+
participantId: "jewel",
|
|
45
|
+
content: "Graduated fidelity solves this. First task is local-only and always succeeds. When they trigger something that needs an LLM, prompt for the key *inline* — right where they need it, not on a separate page. Context-sensitive setup.",
|
|
46
|
+
timestamp: now - 5000,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: "demo-5",
|
|
50
|
+
role: "assistant",
|
|
51
|
+
participantId: "jane",
|
|
52
|
+
content: "Exactly. Setup instructions are only useful at the moment you need them. Front-loading them is just anxiety. I'd also suggest we track `welcome_view → first_action → first_result` to measure the actual impact.",
|
|
53
|
+
timestamp: now - 4000,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: "demo-6",
|
|
57
|
+
role: "assistant",
|
|
58
|
+
participantId: "cody",
|
|
59
|
+
content: "Here's a concrete implementation plan:\n1. Add framework detection on page load\n2. Show \"Map this project\" as default starter task\n3. Run it client-side with zero dependencies\n4. Persist the result so they land in a live session, not a blank page",
|
|
60
|
+
timestamp: now - 3000,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: "demo-7",
|
|
64
|
+
role: "assistant",
|
|
65
|
+
participantId: "flint",
|
|
66
|
+
content: "One more thing — keep state from that first task. When they transition to the real workspace, they should land mid-session. Starting over after the demo kills momentum and trust.",
|
|
67
|
+
timestamp: now - 2000,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: "demo-8",
|
|
71
|
+
role: "assistant",
|
|
72
|
+
participantId: "jewel",
|
|
73
|
+
content: "Summary: land → see agents working → join with one click → first task runs instantly → setup happens only when needed. Every step earns the next. Shall I draft the implementation spec?",
|
|
74
|
+
timestamp: now - 1000,
|
|
75
|
+
},
|
|
76
|
+
];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* lib/jobs/pruneNotifications.js
|
|
5
|
+
*
|
|
6
|
+
* Scheduled job that prunes old notifications from the read-model table.
|
|
7
|
+
*
|
|
8
|
+
* Retention policy:
|
|
9
|
+
* - Read notifications older than TTL_DAYS_MIN (60 days) are deleted.
|
|
10
|
+
* - All notifications older than TTL_DAYS_MAX (90 days) are deleted.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const pruneJob = require('./pruneNotifications');
|
|
14
|
+
* pruneJob.start(); // begin scheduled runs
|
|
15
|
+
* pruneJob.stop(); // cancel scheduled runs
|
|
16
|
+
* pruneJob.runOnce(); // run immediately (useful in tests / CLI)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const { pruneOldNotifications } = require('../db/notifications');
|
|
20
|
+
|
|
21
|
+
// ── Configuration ────────────────────────────────────────────────────────────
|
|
22
|
+
|
|
23
|
+
const TTL_DAYS_MIN = 60; // delete read notifications older than this
|
|
24
|
+
const TTL_DAYS_MAX = 90; // delete all notifications older than this
|
|
25
|
+
const DEFAULT_INTERVAL_MS = 6 * 60 * 60 * 1000; // 6 hours
|
|
26
|
+
|
|
27
|
+
// ── Job implementation ───────────────────────────────────────────────────────
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Run the prune job once and log the outcome.
|
|
31
|
+
*
|
|
32
|
+
* @returns {{ deleted: number }}
|
|
33
|
+
*/
|
|
34
|
+
function runOnce() {
|
|
35
|
+
try {
|
|
36
|
+
const { deleted } = pruneOldNotifications({ minDays: TTL_DAYS_MIN, maxDays: TTL_DAYS_MAX });
|
|
37
|
+
if (deleted > 0) {
|
|
38
|
+
console.log(`[pruneNotifications] deleted ${deleted} notifications (min=${TTL_DAYS_MIN}d, max=${TTL_DAYS_MAX}d)`);
|
|
39
|
+
} else {
|
|
40
|
+
console.debug('[pruneNotifications] nothing to prune');
|
|
41
|
+
}
|
|
42
|
+
return { deleted };
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.error('[pruneNotifications] error during prune run', err);
|
|
45
|
+
return { deleted: 0 };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ── Scheduler ────────────────────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
let _timer = null;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Start the scheduled prune job.
|
|
55
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
56
|
+
*
|
|
57
|
+
* @param {object} [opts]
|
|
58
|
+
* @param {number} [opts.intervalMs] - override the default 6-hour interval
|
|
59
|
+
*/
|
|
60
|
+
function start({ intervalMs = DEFAULT_INTERVAL_MS } = {}) {
|
|
61
|
+
if (_timer) return;
|
|
62
|
+
|
|
63
|
+
// Run once immediately on start, then on interval
|
|
64
|
+
runOnce();
|
|
65
|
+
|
|
66
|
+
_timer = setInterval(() => {
|
|
67
|
+
runOnce();
|
|
68
|
+
}, intervalMs);
|
|
69
|
+
|
|
70
|
+
// Allow the process to exit even if this timer is still active
|
|
71
|
+
if (_timer.unref) _timer.unref();
|
|
72
|
+
|
|
73
|
+
console.log(`[pruneNotifications] scheduler started (interval=${intervalMs}ms)`);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Stop the scheduled prune job.
|
|
78
|
+
*/
|
|
79
|
+
function stop() {
|
|
80
|
+
if (_timer) {
|
|
81
|
+
clearInterval(_timer);
|
|
82
|
+
_timer = null;
|
|
83
|
+
console.log('[pruneNotifications] scheduler stopped');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
module.exports = { start, stop, runOnce, TTL_DAYS_MIN, TTL_DAYS_MAX };
|
|
@@ -255,9 +255,13 @@ export function loadParticipants(): Participant[] {
|
|
|
255
255
|
skills: (() => {
|
|
256
256
|
try {
|
|
257
257
|
const parsed = JSON.parse(r.skills_json);
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
258
|
+
if (!Array.isArray(parsed)) return [];
|
|
259
|
+
// Support both legacy string[] and new {file,condition}[] formats
|
|
260
|
+
return parsed.map((item: unknown) =>
|
|
261
|
+
typeof item === "string"
|
|
262
|
+
? { file: item, condition: "" }
|
|
263
|
+
: (item as { file: string; condition: string })
|
|
264
|
+
);
|
|
261
265
|
} catch {
|
|
262
266
|
return [];
|
|
263
267
|
}
|
package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/projectors/notificationProjector.js
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib/projectors/notificationProjector.js
|
|
3
|
+
*
|
|
4
|
+
* Notification projector — consumes the task_audit_log event stream and
|
|
5
|
+
* materialises rows into the notifications + notification_outbox tables.
|
|
6
|
+
*
|
|
7
|
+
* Design goals:
|
|
8
|
+
* - Durable per-consumer cursor (restarts from last position after crash)
|
|
9
|
+
* - Idempotent via UNIQUE (event_id, user_id, type) → INSERT OR IGNORE
|
|
10
|
+
* - 5-second debounce for blocked↔running state flapping
|
|
11
|
+
* - Notification + outbox written in a single SQLite transaction
|
|
12
|
+
* - TTL prune job (60-90 days retention) callable on demand or on a schedule
|
|
13
|
+
* - At-least-once from event stream; exactly-once effect via DB unique key
|
|
14
|
+
*
|
|
15
|
+
* Event source: task_audit_log (rowid used as sequence number / cursor position)
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* const projector = require('./notificationProjector');
|
|
19
|
+
* projector.start(); // begin polling loop
|
|
20
|
+
* projector.stop(); // graceful shutdown
|
|
21
|
+
* projector.runOnce(); // process pending events once (testing / CLI)
|
|
22
|
+
* projector.pruneOld(); // delete notifications older than TTL
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
'use strict';
|
|
26
|
+
|
|
27
|
+
const { getSQLiteDb } = require('../sqlite-query-adapter');
|
|
28
|
+
const { readCursor, advanceCursorInTxn } = require('../db/cursors');
|
|
29
|
+
const { shouldNotify } = require('../db/preferences');
|
|
30
|
+
const { pruneOldNotifications } = require('../db/notifications');
|
|
31
|
+
const pruneJob = require('../jobs/pruneNotifications');
|
|
32
|
+
|
|
33
|
+
// ── Constants ───────────────────────────────────────────────────────────────
|
|
34
|
+
|
|
35
|
+
const CONSUMER_ID = 'notification_projector';
|
|
36
|
+
const POLL_INTERVAL_MS = 2000; // how often to poll for new events
|
|
37
|
+
const BATCH_SIZE = 100; // events per poll cycle
|
|
38
|
+
const DEBOUNCE_MS = 5000; // 5 s debounce for blocked↔running flap
|
|
39
|
+
const TTL_DAYS_MIN = 60;
|
|
40
|
+
const TTL_DAYS_MAX = 90;
|
|
41
|
+
const MAX_UNREAD_PER_USER = 500; // cap on unread notifications per user
|
|
42
|
+
|
|
43
|
+
// Mapping from task_audit_log.action → notification type + tier + title template
|
|
44
|
+
const ACTION_MAP = {
|
|
45
|
+
complete: { type: 'task.completed', tier: 'success', titleFn: (t) => `Task completed: ${t.title || t.id}` },
|
|
46
|
+
fail: { type: 'task.failed', tier: 'error', titleFn: (t) => `Task failed: ${t.title || t.id}` },
|
|
47
|
+
reject: { type: 'task.rejected', tier: 'warning', titleFn: (t) => `Task rejected: ${t.title || t.id}` },
|
|
48
|
+
dispatch: { type: 'task.created', tier: 'info', titleFn: (t) => `Task created: ${t.title || t.id}` },
|
|
49
|
+
execute: { type: 'task.started', tier: 'info', titleFn: (t) => `Task started: ${t.title || t.id}` },
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// Actions that are subject to debounce (blocked↔running flapping)
|
|
53
|
+
const DEBOUNCE_ACTIONS = new Set(['execute']); // running state
|
|
54
|
+
const DEBOUNCE_PAIR = new Set(['execute']); // keep symmetric for future blocked action
|
|
55
|
+
|
|
56
|
+
// ── Debounce state machine ──────────────────────────────────────────────────
|
|
57
|
+
// In-memory map: taskId → { lastAction, lastTs }
|
|
58
|
+
// Scoped to this module; reset on process restart (safe — DB unique key is the guard)
|
|
59
|
+
|
|
60
|
+
const _debounceState = new Map(); // taskId → { action, ts }
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Check if an event should be suppressed by the debounce window.
|
|
64
|
+
* We suppress a `blocked` event that follows a `running` event (or vice versa)
|
|
65
|
+
* within DEBOUNCE_MS of the previous one.
|
|
66
|
+
*
|
|
67
|
+
* For simplicity, we track the last emitted action per task and suppress if
|
|
68
|
+
* the new action is in {blocked, running} and the previous was too, within 5s.
|
|
69
|
+
*
|
|
70
|
+
* @param {string} taskId
|
|
71
|
+
* @param {string} action - audit log action
|
|
72
|
+
* @param {number} eventTs - epoch ms of the event
|
|
73
|
+
* @returns {boolean} true if this event should be dropped (debounced)
|
|
74
|
+
*/
|
|
75
|
+
function isDebounced(taskId, action, eventTs) {
|
|
76
|
+
const FLAP_ACTIONS = new Set(['execute']); // 'blocked' is not in audit_log; extend here when added
|
|
77
|
+
if (!FLAP_ACTIONS.has(action)) return false;
|
|
78
|
+
|
|
79
|
+
const prev = _debounceState.get(taskId);
|
|
80
|
+
if (!prev) {
|
|
81
|
+
_debounceState.set(taskId, { action, ts: eventTs });
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const elapsed = eventTs - prev.ts;
|
|
86
|
+
if (FLAP_ACTIONS.has(prev.action) && elapsed < DEBOUNCE_MS) {
|
|
87
|
+
// Same class of flapping event within window — suppress
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
_debounceState.set(taskId, { action, ts: eventTs });
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ── Core projection logic ───────────────────────────────────────────────────
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Fetch up to BATCH_SIZE unprocessed events from task_audit_log after cursor.
|
|
99
|
+
*
|
|
100
|
+
* @param {import('better-sqlite3').Database} db
|
|
101
|
+
* @param {number} afterRowid
|
|
102
|
+
* @returns {Array<{rowid, id, task_id, user_id, action, payload, dispatched_at}>}
|
|
103
|
+
*/
|
|
104
|
+
function fetchEvents(db, afterRowid) {
|
|
105
|
+
return db.prepare(`
|
|
106
|
+
SELECT
|
|
107
|
+
rowid,
|
|
108
|
+
id,
|
|
109
|
+
task_id,
|
|
110
|
+
user_id,
|
|
111
|
+
action,
|
|
112
|
+
payload,
|
|
113
|
+
dispatched_at
|
|
114
|
+
FROM task_audit_log
|
|
115
|
+
WHERE rowid > ?
|
|
116
|
+
ORDER BY rowid ASC
|
|
117
|
+
LIMIT ?
|
|
118
|
+
`).all(afterRowid, BATCH_SIZE);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Fetch task metadata needed for notification title/body.
|
|
123
|
+
* Returns null if the task no longer exists.
|
|
124
|
+
*
|
|
125
|
+
* @param {import('better-sqlite3').Database} db
|
|
126
|
+
* @param {string} taskId
|
|
127
|
+
* @returns {{id, title, slug, user_id}|null}
|
|
128
|
+
*/
|
|
129
|
+
function getTask(db, taskId) {
|
|
130
|
+
return db.prepare(
|
|
131
|
+
'SELECT id, title, slug, user_id FROM tasks WHERE id = ?'
|
|
132
|
+
).get(taskId) || null;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// shouldNotify is imported from ../db/preferences — see that module for resolution order:
|
|
136
|
+
// 1. Task-level (tasks.stage_decisions.notifications[type])
|
|
137
|
+
// 2. User-level (user_settings.notification_prefs[type])
|
|
138
|
+
// 3. Global default → true
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Write one notification + its outbox row atomically.
|
|
142
|
+
* Uses INSERT OR IGNORE so duplicate event_id+user_id+type is a no-op.
|
|
143
|
+
*
|
|
144
|
+
* @param {import('better-sqlite3').Database} db
|
|
145
|
+
* @param {{ eventId, userId, taskId, type, tier, title, body, payload }} row
|
|
146
|
+
*/
|
|
147
|
+
function insertNotificationAndOutbox(db, { eventId, userId, taskId, type, tier, title, body, payload }) {
|
|
148
|
+
// INSERT OR IGNORE — idempotent via UNIQUE(event_id, user_id, type)
|
|
149
|
+
const result = db.prepare(`
|
|
150
|
+
INSERT OR IGNORE INTO notifications (user_id, task_id, event_id, type, tier, title, body)
|
|
151
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
152
|
+
`).run(userId, taskId, eventId, type, tier, title, body ?? null);
|
|
153
|
+
|
|
154
|
+
// Only write outbox if a row was actually inserted (changes = 1)
|
|
155
|
+
if (result.changes > 0) {
|
|
156
|
+
const notifRow = db.prepare(
|
|
157
|
+
'SELECT id FROM notifications WHERE event_id = ? AND user_id = ? AND type = ?'
|
|
158
|
+
).get(eventId, userId, type);
|
|
159
|
+
|
|
160
|
+
if (notifRow) {
|
|
161
|
+
db.prepare(`
|
|
162
|
+
INSERT INTO notification_outbox (notification_id, payload)
|
|
163
|
+
VALUES (?, ?)
|
|
164
|
+
`).run(notifRow.id, JSON.stringify(payload));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Cap unread notifications per user to MAX_UNREAD_PER_USER by marking
|
|
171
|
+
* the oldest ones as read. Runs inside the same transaction.
|
|
172
|
+
*
|
|
173
|
+
* @param {import('better-sqlite3').Database} db
|
|
174
|
+
* @param {string} userId
|
|
175
|
+
*/
|
|
176
|
+
function capUnread(db, userId) {
|
|
177
|
+
const count = db.prepare(
|
|
178
|
+
'SELECT COUNT(*) AS n FROM notifications WHERE user_id = ? AND read_at IS NULL'
|
|
179
|
+
).get(userId)?.n ?? 0;
|
|
180
|
+
|
|
181
|
+
if (count > MAX_UNREAD_PER_USER) {
|
|
182
|
+
const excess = count - MAX_UNREAD_PER_USER;
|
|
183
|
+
db.prepare(`
|
|
184
|
+
UPDATE notifications SET read_at = strftime('%Y-%m-%dT%H:%M:%fZ','now')
|
|
185
|
+
WHERE id IN (
|
|
186
|
+
SELECT id FROM notifications
|
|
187
|
+
WHERE user_id = ? AND read_at IS NULL
|
|
188
|
+
ORDER BY created_at ASC
|
|
189
|
+
LIMIT ?
|
|
190
|
+
)
|
|
191
|
+
`).run(userId, excess);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Process one batch of events. Returns the number of events processed.
|
|
197
|
+
*
|
|
198
|
+
* @returns {number}
|
|
199
|
+
*/
|
|
200
|
+
function processBatch() {
|
|
201
|
+
const db = getSQLiteDb();
|
|
202
|
+
const cursor = readCursor(CONSUMER_ID);
|
|
203
|
+
const events = fetchEvents(db, cursor);
|
|
204
|
+
|
|
205
|
+
if (events.length === 0) return 0;
|
|
206
|
+
|
|
207
|
+
let lastRowid = cursor;
|
|
208
|
+
const affectedUsers = new Set();
|
|
209
|
+
|
|
210
|
+
// Use a single transaction for the entire batch
|
|
211
|
+
const runBatch = db.transaction(() => {
|
|
212
|
+
for (const event of events) {
|
|
213
|
+
lastRowid = event.rowid;
|
|
214
|
+
|
|
215
|
+
const mapping = ACTION_MAP[event.action];
|
|
216
|
+
if (!mapping) continue; // unrecognised action — skip but advance cursor
|
|
217
|
+
|
|
218
|
+
const taskId = event.task_id;
|
|
219
|
+
const userId = event.user_id;
|
|
220
|
+
if (!taskId || !userId) continue;
|
|
221
|
+
|
|
222
|
+
const task = getTask(db, taskId);
|
|
223
|
+
if (!task) continue; // task deleted — skip
|
|
224
|
+
|
|
225
|
+
const eventTs = event.dispatched_at
|
|
226
|
+
? new Date(event.dispatched_at).getTime()
|
|
227
|
+
: Date.now();
|
|
228
|
+
|
|
229
|
+
// Debounce check for flapping states
|
|
230
|
+
if (isDebounced(taskId, event.action, eventTs)) continue;
|
|
231
|
+
|
|
232
|
+
// Task-level / user-level preference check (lib/db/preferences.js)
|
|
233
|
+
if (!shouldNotify(db, taskId, userId, mapping.type)) continue;
|
|
234
|
+
|
|
235
|
+
const title = mapping.titleFn(task);
|
|
236
|
+
let payload;
|
|
237
|
+
try {
|
|
238
|
+
payload = typeof event.payload === 'string' ? JSON.parse(event.payload) : (event.payload || {});
|
|
239
|
+
} catch {
|
|
240
|
+
payload = {};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const outboxPayload = {
|
|
244
|
+
eventType: mapping.type,
|
|
245
|
+
taskId,
|
|
246
|
+
userId,
|
|
247
|
+
title,
|
|
248
|
+
slug: task.slug || null,
|
|
249
|
+
timestamp: event.dispatched_at || new Date().toISOString(),
|
|
250
|
+
details: payload,
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
insertNotificationAndOutbox(db, {
|
|
254
|
+
eventId: event.id, // audit log UUID — stable dedup key
|
|
255
|
+
userId,
|
|
256
|
+
taskId,
|
|
257
|
+
type: mapping.type,
|
|
258
|
+
tier: mapping.tier,
|
|
259
|
+
title,
|
|
260
|
+
body: payload.error || payload.reason || null,
|
|
261
|
+
payload: outboxPayload,
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
affectedUsers.add(userId);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Cap unread per user after batch
|
|
268
|
+
for (const uid of affectedUsers) {
|
|
269
|
+
capUnread(db, uid);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Advance cursor atomically with the inserts
|
|
273
|
+
advanceCursorInTxn(db, CONSUMER_ID, lastRowid);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
runBatch();
|
|
277
|
+
return events.length;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// ── TTL / prune job ─────────────────────────────────────────────────────────
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Delete notifications older than TTL_DAYS_MIN (60) days.
|
|
284
|
+
* Runs a second pass to also prune read notifications older than TTL_DAYS_MAX (90) days.
|
|
285
|
+
* Safe to call at any time — does not interact with the cursor.
|
|
286
|
+
*
|
|
287
|
+
* @returns {{ deleted: number }}
|
|
288
|
+
*/
|
|
289
|
+
function pruneOld() {
|
|
290
|
+
const { deleted } = pruneOldNotifications({ minDays: TTL_DAYS_MIN, maxDays: TTL_DAYS_MAX });
|
|
291
|
+
if (deleted > 0) {
|
|
292
|
+
console.log(`[notificationProjector] pruned ${deleted} old notifications`);
|
|
293
|
+
}
|
|
294
|
+
return { deleted };
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// ── Polling loop ────────────────────────────────────────────────────────────
|
|
298
|
+
|
|
299
|
+
let _timer = null;
|
|
300
|
+
let _running = false;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Start the projector polling loop.
|
|
304
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
305
|
+
*/
|
|
306
|
+
function start() {
|
|
307
|
+
if (_running) return;
|
|
308
|
+
_running = true;
|
|
309
|
+
console.log(`[notificationProjector] starting (consumer=${CONSUMER_ID}, poll=${POLL_INTERVAL_MS}ms)`);
|
|
310
|
+
pruneJob.start();
|
|
311
|
+
|
|
312
|
+
const tick = () => {
|
|
313
|
+
if (!_running) return;
|
|
314
|
+
try {
|
|
315
|
+
const n = processBatch();
|
|
316
|
+
if (n > 0) {
|
|
317
|
+
console.debug(`[notificationProjector] processed ${n} events`);
|
|
318
|
+
}
|
|
319
|
+
} catch (err) {
|
|
320
|
+
console.error('[notificationProjector] error in batch', err);
|
|
321
|
+
}
|
|
322
|
+
if (_running) {
|
|
323
|
+
_timer = setTimeout(tick, POLL_INTERVAL_MS);
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
_timer = setTimeout(tick, 0);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Stop the projector polling loop gracefully.
|
|
332
|
+
*/
|
|
333
|
+
function stop() {
|
|
334
|
+
_running = false;
|
|
335
|
+
if (_timer) {
|
|
336
|
+
clearTimeout(_timer);
|
|
337
|
+
_timer = null;
|
|
338
|
+
}
|
|
339
|
+
pruneJob.stop();
|
|
340
|
+
console.log('[notificationProjector] stopped');
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Run a single batch synchronously (useful for tests and CLI replay).
|
|
345
|
+
* @returns {number} number of events processed
|
|
346
|
+
*/
|
|
347
|
+
function runOnce() {
|
|
348
|
+
return processBatch();
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
module.exports = { start, stop, runOnce, pruneOld, CONSUMER_ID };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./thread-adapter";
|
|
2
|
-
export {
|
|
2
|
+
export { LocalWorkspaceAdapter } from "./local-thread-adapter";
|
package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/storage/local-thread-adapter.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ListWorkspacesResult, SaveWorkspaceInput, Workspace, WorkspaceAdapter, WorkspaceListOptions } from "./thread-adapter";
|
|
2
2
|
|
|
3
3
|
const STORAGE_KEY = "agx-chat:threads";
|
|
4
4
|
|
|
5
|
-
interface
|
|
6
|
-
threads: Record<string,
|
|
5
|
+
interface LocalWorkspaceState {
|
|
6
|
+
threads: Record<string, Workspace>;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
function getStorage(): Storage {
|
|
10
10
|
const globalStorage = (globalThis as typeof globalThis & { localStorage?: Storage }).localStorage;
|
|
11
11
|
if (!globalStorage) {
|
|
12
12
|
throw new Error(
|
|
13
|
-
"
|
|
13
|
+
"LocalWorkspaceAdapter requires a browser-like environment with `localStorage`."
|
|
14
14
|
);
|
|
15
15
|
}
|
|
16
16
|
return globalStorage;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
function readState():
|
|
19
|
+
function readState(): LocalWorkspaceState {
|
|
20
20
|
const storage = getStorage();
|
|
21
21
|
const raw = storage.getItem(STORAGE_KEY);
|
|
22
22
|
if (!raw) {
|
|
@@ -29,7 +29,7 @@ function readState(): LocalThreadState {
|
|
|
29
29
|
threads: Object.fromEntries(
|
|
30
30
|
Object.entries(parsed.threads).map(([id, value]) => [
|
|
31
31
|
id,
|
|
32
|
-
|
|
32
|
+
sanitizeStoredWorkspace(id, value),
|
|
33
33
|
])
|
|
34
34
|
),
|
|
35
35
|
};
|
|
@@ -40,38 +40,38 @@ function readState(): LocalThreadState {
|
|
|
40
40
|
return { threads: {} };
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
function writeState(state:
|
|
43
|
+
function writeState(state: LocalWorkspaceState): void {
|
|
44
44
|
getStorage().setItem(STORAGE_KEY, JSON.stringify(state));
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
function
|
|
48
|
-
const base = value as Partial<
|
|
47
|
+
function sanitizeStoredWorkspace(id: string, value: unknown): Workspace {
|
|
48
|
+
const base = value as Partial<Workspace> | undefined;
|
|
49
49
|
return {
|
|
50
50
|
id,
|
|
51
51
|
title: base?.title,
|
|
52
|
-
messages: Array.isArray(base?.messages) ? [...(base!.messages as
|
|
52
|
+
messages: Array.isArray(base?.messages) ? [...(base!.messages as Workspace["messages"])] : [],
|
|
53
53
|
createdAt: typeof base?.createdAt === "number" ? base.createdAt : Date.now(),
|
|
54
54
|
updatedAt: typeof base?.updatedAt === "number" ? base.updatedAt : Date.now(),
|
|
55
55
|
metadata: base?.metadata,
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
function
|
|
59
|
+
function cloneWorkspace(workspace: Workspace): Workspace {
|
|
60
60
|
return {
|
|
61
|
-
...
|
|
62
|
-
messages:
|
|
63
|
-
metadata:
|
|
61
|
+
...workspace,
|
|
62
|
+
messages: workspace.messages.map((msg) => ({ ...msg })),
|
|
63
|
+
metadata: workspace.metadata ? { ...workspace.metadata } : undefined,
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
export class
|
|
68
|
-
async
|
|
67
|
+
export class LocalWorkspaceAdapter implements WorkspaceAdapter {
|
|
68
|
+
async saveWorkspace(input: SaveWorkspaceInput): Promise<Workspace> {
|
|
69
69
|
const now = Date.now();
|
|
70
70
|
const state = readState();
|
|
71
71
|
const existing = state.threads[input.id];
|
|
72
72
|
const createdAt = existing?.createdAt ?? input.createdAt ?? now;
|
|
73
73
|
const updatedAt = input.updatedAt ?? now;
|
|
74
|
-
const
|
|
74
|
+
const workspace: Workspace = {
|
|
75
75
|
id: input.id,
|
|
76
76
|
title: input.title,
|
|
77
77
|
messages: input.messages.map((msg) => ({ ...msg })),
|
|
@@ -79,18 +79,18 @@ export class LocalThreadAdapter implements ThreadAdapter {
|
|
|
79
79
|
createdAt,
|
|
80
80
|
updatedAt,
|
|
81
81
|
};
|
|
82
|
-
state.threads[input.id] =
|
|
82
|
+
state.threads[input.id] = workspace;
|
|
83
83
|
writeState(state);
|
|
84
|
-
return
|
|
84
|
+
return cloneWorkspace(workspace);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
async
|
|
87
|
+
async loadWorkspace(workspaceId: string): Promise<Workspace | null> {
|
|
88
88
|
const state = readState();
|
|
89
|
-
const
|
|
90
|
-
return
|
|
89
|
+
const workspace = state.threads[workspaceId];
|
|
90
|
+
return workspace ? cloneWorkspace(workspace) : null;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
async
|
|
93
|
+
async listWorkspaces(options?: WorkspaceListOptions): Promise<ListWorkspacesResult> {
|
|
94
94
|
const state = readState();
|
|
95
95
|
const all = Object.values(state.threads);
|
|
96
96
|
const order = options?.order ?? "desc";
|
|
@@ -104,14 +104,14 @@ export class LocalThreadAdapter implements ThreadAdapter {
|
|
|
104
104
|
: sorted.slice(offset);
|
|
105
105
|
return {
|
|
106
106
|
total: all.length,
|
|
107
|
-
|
|
107
|
+
workspaces: page.map(cloneWorkspace),
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
async
|
|
111
|
+
async deleteWorkspace(workspaceId: string): Promise<void> {
|
|
112
112
|
const state = readState();
|
|
113
|
-
if (state.threads[
|
|
114
|
-
delete state.threads[
|
|
113
|
+
if (state.threads[workspaceId]) {
|
|
114
|
+
delete state.threads[workspaceId];
|
|
115
115
|
writeState(state);
|
|
116
116
|
}
|
|
117
117
|
}
|