@mndrk/agx 2.0.38 → 2.0.39
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/cloud-runtime/standalone/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/.next/build-manifest.json +4 -4
- package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/.next/required-server-files.json +4 -4
- package/cloud-runtime/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents/[id]/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/agents/export/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/automations/create/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/automations/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/chat-runs/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/chat-runs/[id]/signal/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/chat-runs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/graphs/[graphId]/nodes/[nodeId]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/history/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/knowledge-notes/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/learnings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/logs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/memories/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/messages/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/migrate/teams-to-projects/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/migrate/workspaces-to-projects/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/cancel/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/signal/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/participants/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/agents/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/memory/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/skills/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/threads/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/variables/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/cancel/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/runs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/agents/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/reactions/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/repos/[id]/knowledge/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/schedules/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/skills/assign/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/skills/available/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/skills/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/skills/learn/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/skills/unlearn/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/system/db-status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/task-drafts/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/pause/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/schedule/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/heartbeat/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/extract/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/thread-repos/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/threads/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/user-settings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/knowledge/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/skills.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/skills.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/thread/[id]/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome/page/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__01cd082e._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__0936925d._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__0c3dd73b._.js +6 -6
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__1b0bb735._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__1c86bf6e._.js +5 -5
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__20c58b41._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__2126c763._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__255b11f2._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__277ed37d._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__2f06f568._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__30bd0c87._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__374cd94c._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__3785024c._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__379604d4._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__3c8f1de6._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__3d0df5a8._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__4014ed70._.js +7 -7
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__42fcb81c._.js +16 -16
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__4a3cd6ac._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__4bce7db7._.js +23 -23
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__4e522535._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__50c24784._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__50ddd3ce._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__529a6e1c._.js +12 -12
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__59d1cdd8._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__628d686b._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__644e6285._.js +3 -3
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__65755104._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__73c20995._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__762ab29c._.js +3 -3
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__8125bbc3._.js +6 -6
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__85275b88._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__89666394._.js +3 -3
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__8c0fb154._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__8f5cac13._.js +3 -3
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__91b22098._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__92924218._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__96ae701e._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__98ce983b._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__9a9fd39f._.js +6 -6
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__9ad4e385._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__a01ddd0b._.js +3 -3
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__a099c992._.js +14 -14
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__a9b949c3._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__af7a73fd._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__bd43017b._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__bf6fb108._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c122c54a._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c4ea4921._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__d57e800e._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__db469f1b._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__dec3e1b7._.js +4 -4
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f1147a4a._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f5597fea._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f8c94cb3._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f9f7f2df._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__fa79d53f._.js +11 -11
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__fb14cd4a._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__fcf0b40a._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__ffb21023._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/_17e53c87._.js +1 -1
- package/cloud-runtime/standalone/.next/server/middleware-build-manifest.js +2 -2
- package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
- package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/{dfff51033c303fc7.js → ee5f1457fbc593e1.js} +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/{turbopack-22475f0dd0c18f92.js → turbopack-e1d640f2fbe4fa5e.js} +1 -1
- package/cloud-runtime/standalone/coverage/clover.xml +1208 -0
- package/cloud-runtime/standalone/coverage/coverage-final.json +29 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/audit/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/audit/route.ts.html +208 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/auth/[...nextauth]/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/auth/[...nextauth]/route.ts.html +166 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/auth/daemon-secret/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/auth/daemon-secret/route.ts.html +532 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/auth/status/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/auth/status/route.ts.html +178 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/learnings/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/learnings/route.ts.html +262 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/logs/stream/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/logs/stream/route.ts.html +448 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/queue/complete/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/queue/complete/route.ts.html +331 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/queue/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/queue/route.ts.html +505 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/stage-prompts/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/stage-prompts/route.ts.html +412 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/[id]/advance/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/[id]/advance/route.ts.html +304 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/[id]/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/[id]/logs/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/[id]/logs/route.ts.html +202 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/[id]/route.ts.html +373 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/route.ts.html +499 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/stream/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/app/api/tasks/stream/route.ts.html +349 -0
- package/cloud-runtime/standalone/coverage/lcov-report/base.css +224 -0
- package/cloud-runtime/standalone/coverage/lcov-report/block-navigation.js +87 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/AuthProvider.tsx.html +259 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/ChatInterface.tsx.html +1228 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/KanbanBoard.tsx.html +1024 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/Layout.tsx.html +211 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/LearningsPanel.tsx.html +535 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/LogTimeline.tsx.html +415 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/SortableTaskCard.tsx.html +358 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/StagePills.tsx.html +439 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/TaskCard.tsx.html +514 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/TaskCardOverlay.tsx.html +256 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/TaskDetail.tsx.html +622 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/TaskList.tsx.html +253 -0
- package/cloud-runtime/standalone/coverage/lcov-report/components/index.html +281 -0
- package/cloud-runtime/standalone/coverage/lcov-report/favicon.png +0 -0
- package/cloud-runtime/standalone/coverage/lcov-report/hooks/index.html +116 -0
- package/cloud-runtime/standalone/coverage/lcov-report/hooks/useTasks.ts.html +1042 -0
- package/cloud-runtime/standalone/coverage/lcov-report/index.html +341 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/auth-client.ts.html +202 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/auth-server.ts.html +172 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/auth.ts.html +265 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/db.ts.html +1252 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/index.html +131 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/orchestrator.ts.html +409 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/security.ts.html +1165 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/supabase-server.ts.html +175 -0
- package/cloud-runtime/standalone/coverage/lcov-report/lib/supabase.ts.html +157 -0
- package/cloud-runtime/standalone/coverage/lcov-report/prettify.css +1 -0
- package/cloud-runtime/standalone/coverage/lcov-report/prettify.js +2 -0
- package/cloud-runtime/standalone/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/cloud-runtime/standalone/coverage/lcov-report/sorter.js +210 -0
- package/cloud-runtime/standalone/coverage/lcov.info +2386 -0
- package/cloud-runtime/standalone/docs/LIMITS.md +63 -0
- package/cloud-runtime/standalone/docs/architecture/ADR-001-hybrid-to-full-sqlite.md +345 -0
- package/cloud-runtime/standalone/docs/baseline/baseline-report.json +1009 -0
- package/cloud-runtime/standalone/docs/baseline/critical-queries.md +105 -0
- package/cloud-runtime/standalone/docs/baseline/lock-metrics.json +21 -0
- package/cloud-runtime/standalone/docs/baseline/read-latency.json +146 -0
- package/cloud-runtime/standalone/docs/baseline/restore-time.json +10 -0
- package/cloud-runtime/standalone/docs/baseline/write-metrics.json +803 -0
- package/cloud-runtime/standalone/docs/decisions/sqlite-migration-adr.md +327 -0
- package/cloud-runtime/standalone/docs/error-code-mapping.md +74 -0
- package/cloud-runtime/standalone/docs/migration-plan.md +120 -0
- package/cloud-runtime/standalone/docs/migration-spec.md +345 -0
- package/cloud-runtime/standalone/docs/pg-sqlite-compatibility-matrix.md +554 -0
- package/cloud-runtime/standalone/docs/project-agent-migration-status.md +229 -0
- package/cloud-runtime/standalone/docs/runbook-shadow-read.md +66 -0
- package/cloud-runtime/standalone/docs/runbook.md +155 -0
- package/cloud-runtime/standalone/docs/specs/cli-postgres-removal.md +69 -0
- package/cloud-runtime/standalone/docs/specs/thread-mentions.md +53 -0
- package/cloud-runtime/standalone/docs/superpowers/plans/2026-04-01-prompt-scheduler.md +1907 -0
- package/cloud-runtime/standalone/docs/superpowers/plans/2026-04-02-sqlite-migration.md +1047 -0
- package/cloud-runtime/standalone/docs/transcript.txt +282 -0
- package/cloud-runtime/standalone/docs/ux/GlobalChatFlow.storyboard +23 -0
- package/cloud-runtime/standalone/docs/ux/assistant-chat-cli.md +32 -0
- package/cloud-runtime/standalone/instrumentation.ts +32 -0
- package/cloud-runtime/standalone/mcp/dist/constants.js +66 -0
- package/cloud-runtime/standalone/mcp/dist/db.js +220 -0
- package/cloud-runtime/standalone/mcp/dist/index.js +7 -0
- package/cloud-runtime/standalone/mcp/dist/security.js +18 -0
- package/cloud-runtime/standalone/mcp/dist/server.js +240 -0
- package/cloud-runtime/standalone/mcp/dist/task-context.js +287 -0
- package/cloud-runtime/standalone/mcp/dist/test-client.js +82 -0
- package/cloud-runtime/standalone/mcp/dist/tools/audit.js +69 -0
- package/cloud-runtime/standalone/mcp/dist/tools/learnings.js +88 -0
- package/cloud-runtime/standalone/mcp/dist/tools/queue.js +312 -0
- package/cloud-runtime/standalone/mcp/dist/tools/tasks.js +244 -0
- package/cloud-runtime/standalone/mcp/dist/types.js +74 -0
- package/cloud-runtime/standalone/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
- package/cloud-runtime/standalone/node_modules/@img/{sharp-linux-x64 → sharp-darwin-arm64}/package.json +7 -13
- package/cloud-runtime/standalone/node_modules/@img/{sharp-libvips-linux-x64 → sharp-libvips-darwin-arm64}/README.md +2 -2
- package/cloud-runtime/standalone/node_modules/@img/{sharp-libvips-linux-x64 → sharp-libvips-darwin-arm64}/lib/glib-2.0/include/glibconfig.h +8 -9
- package/cloud-runtime/standalone/node_modules/@img/{sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 → sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib} +0 -0
- package/cloud-runtime/standalone/node_modules/@img/{sharp-libvips-linux-x64 → sharp-libvips-darwin-arm64}/package.json +5 -11
- package/cloud-runtime/standalone/notes/comments-context-demo.md +141 -0
- package/cloud-runtime/standalone/notes/comments-context-plan.md +119 -0
- package/cloud-runtime/standalone/notes/context-audit.md +21 -0
- package/cloud-runtime/standalone/notes/project-layer-plan.md +30 -0
- package/cloud-runtime/standalone/notes/project-layer.md +123 -0
- package/cloud-runtime/standalone/notes/temporal-migration-design.md +199 -0
- package/cloud-runtime/standalone/playwright-report/data/00d55996f37c1506b90144c85493dd85032c13e5.png +0 -0
- package/cloud-runtime/standalone/playwright-report/data/0b9d409e57237ae111d7ba258d3dfe64dc368456.png +0 -0
- package/cloud-runtime/standalone/playwright-report/data/b33d5e80a15bd1deda4415b9d318ef73f581c950.png +0 -0
- package/cloud-runtime/standalone/playwright-report/data/b55684161aa440d0614595e13c91338f0420abbb.md +131 -0
- package/cloud-runtime/standalone/playwright-report/data/b9913957ae07e7565c38ddd71215be79b1ceb017.png +0 -0
- package/cloud-runtime/standalone/playwright-report/data/c3538be8ebbebc9fe4a7df8f12f04483af4a0d91.png +0 -0
- package/cloud-runtime/standalone/playwright-report/data/fe638f64ff5e36f1c30325564565662d3f57da87.md +180 -0
- package/cloud-runtime/standalone/playwright-report/index.html +85 -0
- package/cloud-runtime/standalone/server.js +1 -1
- package/cloud-runtime/standalone/test-results/auth-Authentication-Flow-S-aff25-sion-across-page-navigation-chromium/test-failed-1.png +0 -0
- package/cloud-runtime/standalone/test-results/comments-Task-comments-add-4dc59-nd-persists-it-for-the-task-chromium/error-context.md +131 -0
- package/cloud-runtime/standalone/test-results/comments-Task-comments-add-4dc59-nd-persists-it-for-the-task-chromium/test-failed-1.png +0 -0
- package/cloud-runtime/standalone/test-results/kanban-Kanban-Board-Stage--4082a-er-planning-after-ideation--chromium/error-context.md +180 -0
- package/cloud-runtime/standalone/test-results/kanban-Kanban-Board-Stage--4082a-er-planning-after-ideation--chromium/test-failed-1.png +0 -0
- package/cloud-runtime/standalone/test-results/kanban-Kanban-Board-Stage-Columns-displays-all-9-SDLC-stages-chromium/error-context.md +180 -0
- package/cloud-runtime/standalone/test-results/kanban-Kanban-Board-Stage-Columns-displays-all-9-SDLC-stages-chromium/test-failed-1.png +0 -0
- package/cloud-runtime/standalone/test-results/kanban-Kanban-Board-Task-D-b6d98-ys-tasks-in-correct-columns-chromium/error-context.md +180 -0
- package/cloud-runtime/standalone/test-results/kanban-Kanban-Board-Task-D-b6d98-ys-tasks-in-correct-columns-chromium/test-failed-1.png +0 -0
- package/cloud-runtime/standalone/test-results/kanban-Kanban-Board-Task-Display-shows-task-count-per-column-chromium/test-failed-1.png +0 -0
- package/cloud-runtime/standalone/test-results/kanban-Task-Lifecycle-can-advance-task-through-all-stages-chromium/test-failed-1.png +0 -0
- package/cloud-runtime/standalone/tsconfig.json +1 -2
- package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
- package/cloud-runtime/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
- package/cloud-runtime/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
- package/cloud-runtime/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
- package/cloud-runtime/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/cloud-runtime/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
- package/cloud-runtime/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
- package/cloud-runtime/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
- package/cloud-runtime/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
- package/cloud-runtime/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
- /package/cloud-runtime/standalone/.next/static/{V5ruh627UpcC-LTWDgYk8 → 9PXl40CrFxI8nirdJ1A-T}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/.next/static/{V5ruh627UpcC-LTWDgYk8 → 9PXl40CrFxI8nirdJ1A-T}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/.next/static/{V5ruh627UpcC-LTWDgYk8 → 9PXl40CrFxI8nirdJ1A-T}/_ssgManifest.js +0 -0
- /package/cloud-runtime/standalone/node_modules/@img/{sharp-libvips-linux-x64 → sharp-libvips-darwin-arm64}/lib/index.js +0 -0
- /package/cloud-runtime/standalone/node_modules/@img/{sharp-libvips-linux-x64 → sharp-libvips-darwin-arm64}/versions.json +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getSupabase } from "../db.js";
|
|
3
|
+
// ============ SCHEMAS ============
|
|
4
|
+
export const learningsAddSchema = z.object({
|
|
5
|
+
scope: z.enum(["task", "project", "global"]).describe("Learning scope"),
|
|
6
|
+
content: z.string().min(1).describe("Learning content"),
|
|
7
|
+
scopeId: z.string().optional().describe("Task ID or project name (for task/project scope)"),
|
|
8
|
+
userId: z.string().uuid().optional().describe("User ID"),
|
|
9
|
+
});
|
|
10
|
+
export const learningsListSchema = z.object({
|
|
11
|
+
scope: z.enum(["task", "project", "global"]).default("global").describe("Filter by scope"),
|
|
12
|
+
scopeId: z.string().optional().describe("Filter by scope ID (task ID or project name)"),
|
|
13
|
+
userId: z.string().uuid().optional().describe("Filter by user ID"),
|
|
14
|
+
limit: z.number().int().min(1).max(100).default(50).describe("Max results"),
|
|
15
|
+
});
|
|
16
|
+
export const learningsSearchSchema = z.object({
|
|
17
|
+
query: z.string().min(1).describe("Search query"),
|
|
18
|
+
scope: z.enum(["task", "project", "global"]).optional().describe("Filter by scope"),
|
|
19
|
+
userId: z.string().uuid().optional().describe("Filter by user ID"),
|
|
20
|
+
limit: z.number().int().min(1).max(100).default(20).describe("Max results"),
|
|
21
|
+
});
|
|
22
|
+
// ============ HANDLERS ============
|
|
23
|
+
export async function learningsAdd(args) {
|
|
24
|
+
const supabase = getSupabase();
|
|
25
|
+
// Validate scopeId requirement
|
|
26
|
+
if (args.scope === "task" && !args.scopeId) {
|
|
27
|
+
throw new Error("scopeId (task ID) is required for task-level learnings");
|
|
28
|
+
}
|
|
29
|
+
if (args.scope === "project" && !args.scopeId) {
|
|
30
|
+
throw new Error("scopeId (project name) is required for project-level learnings");
|
|
31
|
+
}
|
|
32
|
+
const { data, error } = await supabase
|
|
33
|
+
.from("learnings")
|
|
34
|
+
.insert({
|
|
35
|
+
scope: args.scope,
|
|
36
|
+
scope_id: args.scopeId,
|
|
37
|
+
content: args.content,
|
|
38
|
+
user_id: args.userId,
|
|
39
|
+
})
|
|
40
|
+
.select()
|
|
41
|
+
.single();
|
|
42
|
+
if (error)
|
|
43
|
+
throw new Error(`Failed to add learning: ${error.message}`);
|
|
44
|
+
return { learning: data };
|
|
45
|
+
}
|
|
46
|
+
export async function learningsList(args) {
|
|
47
|
+
const supabase = getSupabase();
|
|
48
|
+
let query = supabase
|
|
49
|
+
.from("learnings")
|
|
50
|
+
.select("*")
|
|
51
|
+
.eq("scope", args.scope)
|
|
52
|
+
.order("created_at", { ascending: false })
|
|
53
|
+
.limit(args.limit);
|
|
54
|
+
if (args.scopeId)
|
|
55
|
+
query = query.eq("scope_id", args.scopeId);
|
|
56
|
+
if (args.userId)
|
|
57
|
+
query = query.eq("user_id", args.userId);
|
|
58
|
+
const { data, error } = await query;
|
|
59
|
+
if (error)
|
|
60
|
+
throw new Error(`Failed to list learnings: ${error.message}`);
|
|
61
|
+
return {
|
|
62
|
+
learnings: data || [],
|
|
63
|
+
count: data?.length || 0,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export async function learningsSearch(args) {
|
|
67
|
+
const supabase = getSupabase();
|
|
68
|
+
// Simple text search using ILIKE
|
|
69
|
+
// For true semantic search, would need vector embeddings + pgvector
|
|
70
|
+
let query = supabase
|
|
71
|
+
.from("learnings")
|
|
72
|
+
.select("*")
|
|
73
|
+
.ilike("content", `%${args.query}%`)
|
|
74
|
+
.order("created_at", { ascending: false })
|
|
75
|
+
.limit(args.limit);
|
|
76
|
+
if (args.scope)
|
|
77
|
+
query = query.eq("scope", args.scope);
|
|
78
|
+
if (args.userId)
|
|
79
|
+
query = query.eq("user_id", args.userId);
|
|
80
|
+
const { data, error } = await query;
|
|
81
|
+
if (error)
|
|
82
|
+
throw new Error(`Failed to search learnings: ${error.message}`);
|
|
83
|
+
return {
|
|
84
|
+
learnings: data || [],
|
|
85
|
+
count: data?.length || 0,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=learnings.js.map
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getSupabase, fetchStageConfig } from "../db.js";
|
|
3
|
+
import { parseFrontmatter, buildContent, getNextStage, } from "../types.js";
|
|
4
|
+
import { buildTaskContext } from "../task-context.js";
|
|
5
|
+
import { signTask } from "../security.js";
|
|
6
|
+
// ============ SCHEMAS ============
|
|
7
|
+
export const queuePullSchema = z.object({
|
|
8
|
+
userId: z.string().uuid().describe("User ID to pull tasks for"),
|
|
9
|
+
engine: z.string().optional().describe("Filter by AI engine (e.g. claude, gemini)"),
|
|
10
|
+
});
|
|
11
|
+
export const queueCompleteSchema = z.object({
|
|
12
|
+
taskId: z.string().uuid().describe("Task ID"),
|
|
13
|
+
log: z.string().optional().describe("Optional agent comment from completion run"),
|
|
14
|
+
final_result: z.string().optional().describe("Final result message from aggregator"),
|
|
15
|
+
decision: z.enum(["done", "blocked", "not_done", "failed"]).optional().describe("Aggregator decision"),
|
|
16
|
+
explanation: z.string().optional().describe("Aggregator explanation for decision"),
|
|
17
|
+
});
|
|
18
|
+
export const queueFailSchema = z.object({
|
|
19
|
+
taskId: z.string().uuid().describe("Task ID"),
|
|
20
|
+
error: z.string().describe("Error message"),
|
|
21
|
+
log: z.string().optional().describe("Additional error context/log"),
|
|
22
|
+
});
|
|
23
|
+
function isMissingStageDecisionsError(error) {
|
|
24
|
+
if (!error || typeof error !== "object")
|
|
25
|
+
return false;
|
|
26
|
+
const code = "code" in error ? String(error.code) : "";
|
|
27
|
+
const message = "message" in error ? String(error.message).toLowerCase() : "";
|
|
28
|
+
return (code === "PGRST204" || code === "42703") && message.includes("stage_decisions");
|
|
29
|
+
}
|
|
30
|
+
// ============ HANDLERS ============
|
|
31
|
+
export async function queuePull(args) {
|
|
32
|
+
const supabase = getSupabase();
|
|
33
|
+
let query = supabase
|
|
34
|
+
.from("tasks")
|
|
35
|
+
.select("*")
|
|
36
|
+
.eq("user_id", args.userId)
|
|
37
|
+
.eq("status", "queued")
|
|
38
|
+
.order("priority", { ascending: true, nullsFirst: false })
|
|
39
|
+
.order("created_at", { ascending: true })
|
|
40
|
+
.limit(1);
|
|
41
|
+
if (args.engine) {
|
|
42
|
+
query = query.eq("engine", args.engine);
|
|
43
|
+
}
|
|
44
|
+
const { data: tasks, error } = await query;
|
|
45
|
+
if (error)
|
|
46
|
+
throw new Error(`Failed to pull from queue: ${error.message}`);
|
|
47
|
+
const task = tasks?.[0];
|
|
48
|
+
if (!task) {
|
|
49
|
+
return { task: null, message: "No tasks in queue" };
|
|
50
|
+
}
|
|
51
|
+
// Mark task as in_progress
|
|
52
|
+
const { frontmatter, body } = parseFrontmatter(task.content);
|
|
53
|
+
frontmatter.status = "in_progress";
|
|
54
|
+
const updatedContent = buildContent(frontmatter, body);
|
|
55
|
+
const { data: updatedTask, error: updateError } = await supabase
|
|
56
|
+
.from("tasks")
|
|
57
|
+
.update({
|
|
58
|
+
content: updatedContent,
|
|
59
|
+
status: "in_progress",
|
|
60
|
+
updated_at: new Date().toISOString(),
|
|
61
|
+
})
|
|
62
|
+
.eq("id", task.id)
|
|
63
|
+
.select()
|
|
64
|
+
.single();
|
|
65
|
+
if (updateError)
|
|
66
|
+
throw new Error(`Failed to update task status: ${updateError.message}`);
|
|
67
|
+
const context = await buildTaskContext(updatedTask);
|
|
68
|
+
const { comments_digest: commentsDigest } = context;
|
|
69
|
+
let signature = updatedTask.signature || task.signature || undefined;
|
|
70
|
+
const ownerId = updatedTask.user_id || task.user_id;
|
|
71
|
+
if (ownerId) {
|
|
72
|
+
const { data: secretData } = await supabase
|
|
73
|
+
.from("user_secrets")
|
|
74
|
+
.select("daemon_secret_hash")
|
|
75
|
+
.eq("user_id", ownerId)
|
|
76
|
+
.single();
|
|
77
|
+
if (secretData?.daemon_secret_hash) {
|
|
78
|
+
const newSignature = signTask({
|
|
79
|
+
id: updatedTask.id,
|
|
80
|
+
user_id: ownerId,
|
|
81
|
+
content: updatedTask.content,
|
|
82
|
+
stage: updatedTask.stage,
|
|
83
|
+
engine: updatedTask.engine,
|
|
84
|
+
provider: updatedTask.provider,
|
|
85
|
+
model: updatedTask.model,
|
|
86
|
+
swarm: updatedTask.swarm,
|
|
87
|
+
swarm_models: updatedTask.swarm_models,
|
|
88
|
+
created_at: updatedTask.created_at,
|
|
89
|
+
comments_digest: commentsDigest,
|
|
90
|
+
}, secretData.daemon_secret_hash);
|
|
91
|
+
if (newSignature !== signature) {
|
|
92
|
+
await supabase
|
|
93
|
+
.from("tasks")
|
|
94
|
+
.update({ signature: newSignature })
|
|
95
|
+
.eq("id", updatedTask.id);
|
|
96
|
+
signature = newSignature;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
signature = newSignature;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
task: {
|
|
105
|
+
...updatedTask,
|
|
106
|
+
signature,
|
|
107
|
+
...context,
|
|
108
|
+
},
|
|
109
|
+
message: `Pulled task: ${task.title || task.id}`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export async function queueComplete(args) {
|
|
113
|
+
const supabase = getSupabase();
|
|
114
|
+
// Get current task
|
|
115
|
+
const { data: task, error: getError } = await supabase
|
|
116
|
+
.from("tasks")
|
|
117
|
+
.select("*")
|
|
118
|
+
.eq("id", args.taskId)
|
|
119
|
+
.single();
|
|
120
|
+
if (getError) {
|
|
121
|
+
if (getError.code === "PGRST116") {
|
|
122
|
+
throw new Error(`Task not found: ${args.taskId}`);
|
|
123
|
+
}
|
|
124
|
+
throw new Error(`Failed to get task: ${getError.message}`);
|
|
125
|
+
}
|
|
126
|
+
const { frontmatter, body } = parseFrontmatter(task.content);
|
|
127
|
+
const currentStage = frontmatter.stage || "ideation";
|
|
128
|
+
const nextStage = getNextStage(currentStage);
|
|
129
|
+
const finalResultRaw = typeof args.final_result === "string" ? args.final_result.trim() : "";
|
|
130
|
+
const decisionRaw = typeof args.decision === "string" ? args.decision.trim() : "";
|
|
131
|
+
const explanationRaw = typeof args.explanation === "string" ? args.explanation.trim() : "";
|
|
132
|
+
const missingAggregator = !finalResultRaw || !decisionRaw || !explanationRaw;
|
|
133
|
+
const missingAggregatorMessage = "Aggregator output unavailable; manual action required.";
|
|
134
|
+
const finalResult = missingAggregator ? missingAggregatorMessage : finalResultRaw;
|
|
135
|
+
const outcome = (missingAggregator ? "blocked" : decisionRaw);
|
|
136
|
+
const explanationFinal = missingAggregator ? missingAggregatorMessage : explanationRaw;
|
|
137
|
+
const MAX_RETRIES = 3;
|
|
138
|
+
const currentRetryCount = typeof task.retry_count === "number" ? task.retry_count : 0;
|
|
139
|
+
const existingStageDecisions = task.stage_decisions && typeof task.stage_decisions === "object" ? task.stage_decisions : {};
|
|
140
|
+
const nextStageDecisions = {
|
|
141
|
+
...existingStageDecisions,
|
|
142
|
+
[currentStage]: {
|
|
143
|
+
decision: outcome,
|
|
144
|
+
rationale: explanationFinal,
|
|
145
|
+
final_result: finalResult,
|
|
146
|
+
decided_at: new Date().toISOString(),
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
// Add agent completion comment if provided
|
|
150
|
+
if (args.log) {
|
|
151
|
+
const { error: commentError } = await supabase
|
|
152
|
+
.from("task_comments")
|
|
153
|
+
.insert({ task_id: args.taskId, content: args.log, author_type: "agent" });
|
|
154
|
+
if (commentError) {
|
|
155
|
+
console.error("Failed to add agent comment:", commentError);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
let updatedStage = currentStage;
|
|
159
|
+
let updatedStatus = task.status ?? "queued";
|
|
160
|
+
let updatedRetryCount = currentRetryCount;
|
|
161
|
+
let errorValue = null;
|
|
162
|
+
if (outcome === "done") {
|
|
163
|
+
if (nextStage) {
|
|
164
|
+
updatedStage = nextStage;
|
|
165
|
+
updatedStatus = "queued";
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
updatedStage = "done";
|
|
169
|
+
updatedStatus = "completed";
|
|
170
|
+
}
|
|
171
|
+
updatedRetryCount = 0;
|
|
172
|
+
const { error: completionLogError } = await supabase
|
|
173
|
+
.from("task_logs")
|
|
174
|
+
.insert({ task_id: args.taskId, content: `Stage completed: ${currentStage}`, log_type: "checkpoint" });
|
|
175
|
+
if (completionLogError)
|
|
176
|
+
throw new Error(`Failed to add completion log: ${completionLogError.message}`);
|
|
177
|
+
}
|
|
178
|
+
else if (outcome === "blocked") {
|
|
179
|
+
updatedStage = currentStage;
|
|
180
|
+
updatedStatus = "blocked";
|
|
181
|
+
const blockedMessage = explanationFinal || "Blocked: additional input required.";
|
|
182
|
+
const { error: blockedLogError } = await supabase
|
|
183
|
+
.from("task_logs")
|
|
184
|
+
.insert({ task_id: args.taskId, content: blockedMessage, log_type: "system" });
|
|
185
|
+
if (blockedLogError)
|
|
186
|
+
throw new Error(`Failed to add blocked log: ${blockedLogError.message}`);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
const nextRetryCount = currentRetryCount + 1;
|
|
190
|
+
if (nextRetryCount <= MAX_RETRIES) {
|
|
191
|
+
updatedStage = currentStage;
|
|
192
|
+
updatedStatus = "queued";
|
|
193
|
+
updatedRetryCount = nextRetryCount;
|
|
194
|
+
const retryMessage = `Retrying (${nextRetryCount}/${MAX_RETRIES}) for stage ${currentStage}.`;
|
|
195
|
+
const { error: retryLogError } = await supabase
|
|
196
|
+
.from("task_logs")
|
|
197
|
+
.insert({ task_id: args.taskId, content: retryMessage, log_type: "system" });
|
|
198
|
+
if (retryLogError)
|
|
199
|
+
throw new Error(`Failed to add retry log: ${retryLogError.message}`);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
updatedStage = currentStage;
|
|
203
|
+
updatedStatus = "failed";
|
|
204
|
+
errorValue = explanationFinal || "Task failed.";
|
|
205
|
+
const { error: failedLogError } = await supabase
|
|
206
|
+
.from("task_logs")
|
|
207
|
+
.insert({ task_id: args.taskId, content: errorValue, log_type: "error" });
|
|
208
|
+
if (failedLogError)
|
|
209
|
+
throw new Error(`Failed to add failure log: ${failedLogError.message}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
frontmatter.result = finalResult;
|
|
213
|
+
frontmatter.stage = updatedStage;
|
|
214
|
+
frontmatter.status = updatedStatus;
|
|
215
|
+
if (errorValue) {
|
|
216
|
+
frontmatter.error = errorValue;
|
|
217
|
+
}
|
|
218
|
+
else if ("error" in frontmatter) {
|
|
219
|
+
delete frontmatter.error;
|
|
220
|
+
}
|
|
221
|
+
const updatedContent = buildContent(frontmatter, body);
|
|
222
|
+
const taskUpdatePayload = {
|
|
223
|
+
content: updatedContent,
|
|
224
|
+
stage: updatedStage,
|
|
225
|
+
status: updatedStatus,
|
|
226
|
+
retry_count: updatedRetryCount,
|
|
227
|
+
error: errorValue,
|
|
228
|
+
updated_at: new Date().toISOString(),
|
|
229
|
+
};
|
|
230
|
+
let { data: updatedTask, error: updateError } = await supabase
|
|
231
|
+
.from("tasks")
|
|
232
|
+
.update({
|
|
233
|
+
...taskUpdatePayload,
|
|
234
|
+
stage_decisions: nextStageDecisions,
|
|
235
|
+
})
|
|
236
|
+
.eq("id", args.taskId)
|
|
237
|
+
.select()
|
|
238
|
+
.single();
|
|
239
|
+
if (updateError && isMissingStageDecisionsError(updateError)) {
|
|
240
|
+
({ data: updatedTask, error: updateError } = await supabase
|
|
241
|
+
.from("tasks")
|
|
242
|
+
.update(taskUpdatePayload)
|
|
243
|
+
.eq("id", args.taskId)
|
|
244
|
+
.select()
|
|
245
|
+
.single());
|
|
246
|
+
}
|
|
247
|
+
if (updateError)
|
|
248
|
+
throw new Error(`Failed to complete stage: ${updateError.message}`);
|
|
249
|
+
if (finalResult) {
|
|
250
|
+
const commentContent = finalResult;
|
|
251
|
+
const { error: commentError } = await supabase
|
|
252
|
+
.from("task_comments")
|
|
253
|
+
.insert({ task_id: args.taskId, content: commentContent, author_type: "agent" });
|
|
254
|
+
if (commentError)
|
|
255
|
+
throw new Error(`Failed to add agent comment: ${commentError.message}`);
|
|
256
|
+
}
|
|
257
|
+
// Fetch stage prompt for new stage (or done)
|
|
258
|
+
let stagePromptStr;
|
|
259
|
+
const stageConfig = await fetchStageConfig(supabase, updatedStage, updatedTask.user_id);
|
|
260
|
+
stagePromptStr = stageConfig?.prompt || undefined;
|
|
261
|
+
return {
|
|
262
|
+
task: { ...updatedTask, stage_prompt: stagePromptStr },
|
|
263
|
+
previousStage: currentStage,
|
|
264
|
+
newStage: updatedStage,
|
|
265
|
+
completed: updatedStage === "done" && updatedStatus === "completed",
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
export async function queueFail(args) {
|
|
269
|
+
const supabase = getSupabase();
|
|
270
|
+
// Get current task
|
|
271
|
+
const { data: task, error: getError } = await supabase
|
|
272
|
+
.from("tasks")
|
|
273
|
+
.select("*")
|
|
274
|
+
.eq("id", args.taskId)
|
|
275
|
+
.single();
|
|
276
|
+
if (getError) {
|
|
277
|
+
if (getError.code === "PGRST116") {
|
|
278
|
+
throw new Error(`Task not found: ${args.taskId}`);
|
|
279
|
+
}
|
|
280
|
+
throw new Error(`Failed to get task: ${getError.message}`);
|
|
281
|
+
}
|
|
282
|
+
// Add error log
|
|
283
|
+
const logContent = args.log
|
|
284
|
+
? `ERROR: ${args.error}\n\n${args.log}`
|
|
285
|
+
: `ERROR: ${args.error}`;
|
|
286
|
+
const { error: logError } = await supabase
|
|
287
|
+
.from("task_logs")
|
|
288
|
+
.insert({ task_id: args.taskId, content: logContent });
|
|
289
|
+
if (logError) {
|
|
290
|
+
console.error("Failed to add error log:", logError);
|
|
291
|
+
}
|
|
292
|
+
// Update task status
|
|
293
|
+
const { frontmatter, body } = parseFrontmatter(task.content);
|
|
294
|
+
frontmatter.status = "failed";
|
|
295
|
+
frontmatter.error = args.error;
|
|
296
|
+
const updatedContent = buildContent(frontmatter, body);
|
|
297
|
+
const { data: updatedTask, error: updateError } = await supabase
|
|
298
|
+
.from("tasks")
|
|
299
|
+
.update({
|
|
300
|
+
content: updatedContent,
|
|
301
|
+
status: "failed",
|
|
302
|
+
error: args.error,
|
|
303
|
+
updated_at: new Date().toISOString(),
|
|
304
|
+
})
|
|
305
|
+
.eq("id", args.taskId)
|
|
306
|
+
.select()
|
|
307
|
+
.single();
|
|
308
|
+
if (updateError)
|
|
309
|
+
throw new Error(`Failed to mark task as failed: ${updateError.message}`);
|
|
310
|
+
return { task: updatedTask };
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getSupabase } from "../db.js";
|
|
3
|
+
import { buildTaskContext } from "../task-context.js";
|
|
4
|
+
import { signTask } from "../security.js";
|
|
5
|
+
import { STAGE_ORDER, parseFrontmatter, buildContent, resolveTaskConfig, } from "../types.js";
|
|
6
|
+
// ============ SCHEMAS ============
|
|
7
|
+
export const tasksListSchema = z.object({
|
|
8
|
+
userId: z.string().uuid().optional().describe("Filter by user ID"),
|
|
9
|
+
project: z.string().optional().describe("Filter by project name"),
|
|
10
|
+
status: z.enum(["queued", "in_progress", "blocked", "completed", "failed"])
|
|
11
|
+
.optional().describe("Filter by status"),
|
|
12
|
+
stage: z.enum(STAGE_ORDER).optional().describe("Filter by SDLC stage"),
|
|
13
|
+
limit: z.number().int().min(1).max(100).default(50).describe("Max results"),
|
|
14
|
+
});
|
|
15
|
+
export const tasksGetSchema = z.object({
|
|
16
|
+
id: z.string().uuid().describe("Task ID"),
|
|
17
|
+
includeLogs: z.boolean().default(false).describe("Include task logs"),
|
|
18
|
+
});
|
|
19
|
+
export const tasksCreateSchema = z.object({
|
|
20
|
+
title: z.string().min(1).describe("Task title"),
|
|
21
|
+
description: z.string().optional().describe("Task description"),
|
|
22
|
+
project: z.string().optional().describe("Project name"),
|
|
23
|
+
priority: z.number().int().min(1).max(5).default(3).describe("Priority (1=highest, 5=lowest)"),
|
|
24
|
+
engine: z.enum(["claude", "gemini", "ollama"]).default("claude").describe("AI engine to use"),
|
|
25
|
+
provider: z.string().optional().describe("Provider/runtime to use (e.g. cao, claude_code)"),
|
|
26
|
+
model: z.string().optional().describe("Model to use (e.g. claude-3-5-sonnet)"),
|
|
27
|
+
swarm: z.boolean().optional().describe("Route task to swarm/CAO runtime"),
|
|
28
|
+
stage: z.enum(STAGE_ORDER).default("ideation").describe("Initial SDLC stage"),
|
|
29
|
+
userId: z.string().uuid().optional().describe("Owner user ID"),
|
|
30
|
+
});
|
|
31
|
+
export const tasksUpdateSchema = z.object({
|
|
32
|
+
id: z.string().uuid().describe("Task ID"),
|
|
33
|
+
status: z.enum(["queued", "in_progress", "blocked", "completed", "failed"]).optional(),
|
|
34
|
+
stage: z.enum(STAGE_ORDER).optional(),
|
|
35
|
+
priority: z.number().int().min(1).max(5).optional(),
|
|
36
|
+
project: z.string().optional(),
|
|
37
|
+
progress: z.number().int().min(0).max(100).optional().describe("Progress percentage (0-100)"),
|
|
38
|
+
result: z.string().optional().describe("Result/output summary"),
|
|
39
|
+
swarm: z.boolean().optional(),
|
|
40
|
+
});
|
|
41
|
+
export const tasksLogSchema = z.object({
|
|
42
|
+
taskId: z.string().uuid().describe("Task ID"),
|
|
43
|
+
content: z.string().min(1).describe("Log content"),
|
|
44
|
+
});
|
|
45
|
+
// ============ HANDLERS ============
|
|
46
|
+
export async function tasksList(args) {
|
|
47
|
+
const supabase = getSupabase();
|
|
48
|
+
const activeQueueStatuses = ["queued", "in_progress"];
|
|
49
|
+
let query = supabase
|
|
50
|
+
.from("tasks")
|
|
51
|
+
.select("*")
|
|
52
|
+
.order("priority", { ascending: true, nullsFirst: false })
|
|
53
|
+
.order("created_at", { ascending: false })
|
|
54
|
+
.limit(args.limit);
|
|
55
|
+
if (args.userId)
|
|
56
|
+
query = query.eq("user_id", args.userId);
|
|
57
|
+
if (args.project)
|
|
58
|
+
query = query.eq("project", args.project);
|
|
59
|
+
if (args.status)
|
|
60
|
+
query = query.eq("status", args.status);
|
|
61
|
+
if (args.stage && !args.status)
|
|
62
|
+
query = query.in("status", activeQueueStatuses);
|
|
63
|
+
if (args.stage)
|
|
64
|
+
query = query.eq("stage", args.stage);
|
|
65
|
+
const { data, error } = await query;
|
|
66
|
+
if (error)
|
|
67
|
+
throw new Error(`Failed to list tasks: ${error.message}`);
|
|
68
|
+
return {
|
|
69
|
+
tasks: data || [],
|
|
70
|
+
count: data?.length || 0,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export async function tasksGet(args) {
|
|
74
|
+
const supabase = getSupabase();
|
|
75
|
+
const { data: task, error } = await supabase
|
|
76
|
+
.from("tasks")
|
|
77
|
+
.select("*")
|
|
78
|
+
.eq("id", args.id)
|
|
79
|
+
.single();
|
|
80
|
+
if (error) {
|
|
81
|
+
if (error.code === "PGRST116") {
|
|
82
|
+
throw new Error(`Task not found: ${args.id}`);
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`Failed to get task: ${error.message}`);
|
|
85
|
+
}
|
|
86
|
+
// Fetch stage prompt
|
|
87
|
+
const context = await buildTaskContext(task);
|
|
88
|
+
const { comments_digest: commentsDigest, stage_config } = context;
|
|
89
|
+
// Resolve configuration (Task > Stage)
|
|
90
|
+
const resolvedConfig = resolveTaskConfig(task, stage_config);
|
|
91
|
+
let signature = task.signature;
|
|
92
|
+
if (task.user_id) {
|
|
93
|
+
const { data: secretData } = await supabase
|
|
94
|
+
.from("user_secrets")
|
|
95
|
+
.select("daemon_secret_hash")
|
|
96
|
+
.eq("user_id", task.user_id)
|
|
97
|
+
.single();
|
|
98
|
+
if (secretData?.daemon_secret_hash) {
|
|
99
|
+
const newSignature = signTask({
|
|
100
|
+
id: task.id,
|
|
101
|
+
user_id: task.user_id,
|
|
102
|
+
content: task.content,
|
|
103
|
+
stage: task.stage || "ideation",
|
|
104
|
+
engine: task.engine || "claude",
|
|
105
|
+
provider: resolvedConfig.provider,
|
|
106
|
+
model: resolvedConfig.model,
|
|
107
|
+
swarm: resolvedConfig.swarm,
|
|
108
|
+
swarm_models: resolvedConfig.swarm_models,
|
|
109
|
+
created_at: task.created_at,
|
|
110
|
+
comments_digest: commentsDigest,
|
|
111
|
+
}, secretData.daemon_secret_hash);
|
|
112
|
+
if (newSignature !== signature) {
|
|
113
|
+
await supabase
|
|
114
|
+
.from("tasks")
|
|
115
|
+
.update({ signature: newSignature })
|
|
116
|
+
.eq("id", task.id);
|
|
117
|
+
}
|
|
118
|
+
signature = newSignature;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const result = {
|
|
122
|
+
task: { ...task, ...resolvedConfig, signature, ...context },
|
|
123
|
+
};
|
|
124
|
+
if (args.includeLogs) {
|
|
125
|
+
const { data: logs, error: logsError } = await supabase
|
|
126
|
+
.from("task_logs")
|
|
127
|
+
.select("*")
|
|
128
|
+
.eq("task_id", args.id)
|
|
129
|
+
.order("created_at", { ascending: true });
|
|
130
|
+
if (logsError) {
|
|
131
|
+
throw new Error(`Failed to get task logs: ${logsError.message}`);
|
|
132
|
+
}
|
|
133
|
+
result.logs = logs || [];
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
export async function tasksCreate(args) {
|
|
138
|
+
const supabase = getSupabase();
|
|
139
|
+
// Build markdown content with frontmatter
|
|
140
|
+
const frontmatter = {
|
|
141
|
+
status: "queued",
|
|
142
|
+
stage: args.stage,
|
|
143
|
+
engine: args.engine,
|
|
144
|
+
priority: args.priority,
|
|
145
|
+
};
|
|
146
|
+
if (args.provider)
|
|
147
|
+
frontmatter.provider = args.provider;
|
|
148
|
+
if (args.model)
|
|
149
|
+
frontmatter.model = args.model;
|
|
150
|
+
if (typeof args.swarm === "boolean")
|
|
151
|
+
frontmatter.swarm = args.swarm;
|
|
152
|
+
if (args.project)
|
|
153
|
+
frontmatter.project = args.project;
|
|
154
|
+
const body = `# ${args.title}\n\n${args.description || ""}`;
|
|
155
|
+
const content = buildContent(frontmatter, body);
|
|
156
|
+
const { data, error } = await supabase
|
|
157
|
+
.from("tasks")
|
|
158
|
+
.insert({
|
|
159
|
+
content,
|
|
160
|
+
title: args.title,
|
|
161
|
+
status: "queued",
|
|
162
|
+
stage: args.stage,
|
|
163
|
+
project: args.project,
|
|
164
|
+
priority: args.priority,
|
|
165
|
+
engine: args.engine,
|
|
166
|
+
provider: args.provider,
|
|
167
|
+
model: args.model,
|
|
168
|
+
swarm: args.swarm,
|
|
169
|
+
user_id: args.userId,
|
|
170
|
+
})
|
|
171
|
+
.select()
|
|
172
|
+
.single();
|
|
173
|
+
if (error)
|
|
174
|
+
throw new Error(`Failed to create task: ${error.message}`);
|
|
175
|
+
return { task: data };
|
|
176
|
+
}
|
|
177
|
+
export async function tasksUpdate(args) {
|
|
178
|
+
const supabase = getSupabase();
|
|
179
|
+
// Get current task
|
|
180
|
+
const { data: task, error: getError } = await supabase
|
|
181
|
+
.from("tasks")
|
|
182
|
+
.select("*")
|
|
183
|
+
.eq("id", args.id)
|
|
184
|
+
.single();
|
|
185
|
+
if (getError) {
|
|
186
|
+
if (getError.code === "PGRST116") {
|
|
187
|
+
throw new Error(`Task not found: ${args.id}`);
|
|
188
|
+
}
|
|
189
|
+
throw new Error(`Failed to get task: ${getError.message}`);
|
|
190
|
+
}
|
|
191
|
+
// Parse and update frontmatter
|
|
192
|
+
const { frontmatter, body } = parseFrontmatter(task.content);
|
|
193
|
+
if (args.status !== undefined)
|
|
194
|
+
frontmatter.status = args.status;
|
|
195
|
+
if (args.stage !== undefined)
|
|
196
|
+
frontmatter.stage = args.stage;
|
|
197
|
+
if (args.priority !== undefined)
|
|
198
|
+
frontmatter.priority = args.priority;
|
|
199
|
+
if (args.project !== undefined)
|
|
200
|
+
frontmatter.project = args.project;
|
|
201
|
+
if (args.progress !== undefined)
|
|
202
|
+
frontmatter.progress = args.progress;
|
|
203
|
+
if (args.result !== undefined)
|
|
204
|
+
frontmatter.result = args.result;
|
|
205
|
+
if (args.swarm !== undefined)
|
|
206
|
+
frontmatter.swarm = args.swarm;
|
|
207
|
+
const updatedContent = buildContent(frontmatter, body);
|
|
208
|
+
// Build update object
|
|
209
|
+
const updates = {
|
|
210
|
+
content: updatedContent,
|
|
211
|
+
updated_at: new Date().toISOString(),
|
|
212
|
+
};
|
|
213
|
+
if (args.status !== undefined)
|
|
214
|
+
updates.status = args.status;
|
|
215
|
+
if (args.stage !== undefined)
|
|
216
|
+
updates.stage = args.stage;
|
|
217
|
+
if (args.priority !== undefined)
|
|
218
|
+
updates.priority = args.priority;
|
|
219
|
+
if (args.project !== undefined)
|
|
220
|
+
updates.project = args.project;
|
|
221
|
+
if (args.swarm !== undefined)
|
|
222
|
+
updates.swarm = args.swarm;
|
|
223
|
+
const { data: updatedTask, error: updateError } = await supabase
|
|
224
|
+
.from("tasks")
|
|
225
|
+
.update(updates)
|
|
226
|
+
.eq("id", args.id)
|
|
227
|
+
.select()
|
|
228
|
+
.single();
|
|
229
|
+
if (updateError)
|
|
230
|
+
throw new Error(`Failed to update task: ${updateError.message}`);
|
|
231
|
+
return { task: updatedTask };
|
|
232
|
+
}
|
|
233
|
+
export async function tasksLog(args) {
|
|
234
|
+
const supabase = getSupabase();
|
|
235
|
+
const { data, error } = await supabase
|
|
236
|
+
.from("task_logs")
|
|
237
|
+
.insert({ task_id: args.taskId, content: args.content })
|
|
238
|
+
.select()
|
|
239
|
+
.single();
|
|
240
|
+
if (error)
|
|
241
|
+
throw new Error(`Failed to add log: ${error.message}`);
|
|
242
|
+
return { log: data };
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=tasks.js.map
|