@mndrk/agx 2.0.48 → 2.0.49
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 +2 -2
- package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
- 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.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.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 +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 +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 +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/chat/route.js +13 -7
- package/cloud-runtime/standalone/.next/server/app/api/chat/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/health/route.js +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/knowledge-notes/route.js +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 +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/linear/callback/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/memories/route.js +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/orchestrator/tasks/[taskId]/start/route.js +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 +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 +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 +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]/migrate-v1/route.js +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 +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 +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 +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 +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 +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 +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/agents/route.js +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 +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/providers/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js +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 +2 -2
- package/cloud-runtime/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js +14 -6
- 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 +13 -5
- package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js +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/tasks/[id]/comments/[commentId]/route.js +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 +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 +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 +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 +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 +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 +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/replan/route.js +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 +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 +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 +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 +3 -4
- 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 +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 +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 +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]/history/route.js +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 +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]/nodes/[nodeId]/comments/route.js +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 +3 -4
- 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 +3 -4
- 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 +3 -4
- 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 +3 -4
- 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 +3 -4
- 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 +4 -5
- 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 +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 +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 +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 +2 -2
- package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js +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 +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 +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.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.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.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/folders.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/folders.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.segments/folders/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.segments/folders.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- 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_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
- 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.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.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.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.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_client-reference-manifest.js +1 -1
- 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]__a300f072._.js → [root-of-the-server]__02a4a323._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__05dedbe1._.js +64 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__4ce74056._.js → [root-of-the-server]__05f0bfbf._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c22dd3a6._.js → [root-of-the-server]__08c82fe8._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__3fae531a._.js → [root-of-the-server]__09e37b59._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__1a1f66b1._.js → [root-of-the-server]__0e83aabc._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__27da58f0._.js +67 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__9ffa67b7._.js → [root-of-the-server]__2ae8b938._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__2cfd21b8._.js +108 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__f9f7f2df._.js → [root-of-the-server]__3c1403f2._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__143fdf69._.js → [root-of-the-server]__40e9e2e8._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__42e602eb._.js +49 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a7b2350e._.js → [root-of-the-server]__456840d0._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__5c2848bb._.js +64 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__667c658f._.js +52 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6a92b882._.js +49 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6c9baa7c._.js +64 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c21747df._.js → [root-of-the-server]__719eddc2._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__36d15de5._.js → [root-of-the-server]__7ee3dfe1._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d324f8a1._.js → [root-of-the-server]__80964fad._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__bab85495._.js → [root-of-the-server]__862cf77d._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a280fa63._.js → [root-of-the-server]__8b5b9860._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__3170b7bf._.js → [root-of-the-server]__8d475640._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__958dded3._.js +49 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ab655b9f._.js → [root-of-the-server]__96c424d5._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__5c55f67a._.js → [root-of-the-server]__976ebe46._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__179cb224._.js → [root-of-the-server]__a1cab8fe._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__20a2cb22._.js → [root-of-the-server]__a31dd756._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a3955224._.js → [root-of-the-server]__ad53dc3f._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ac6326b6._.js → [root-of-the-server]__b8eeb177._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__fcfa3690._.js → [root-of-the-server]__c10e827d._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__e58e9f91._.js → [root-of-the-server]__c11e0040._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c40b6f69._.js +49 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c7d3c7ab._.js +52 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__cdc52544._.js +49 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__8cbd8c56._.js → [root-of-the-server]__d1c698b6._.js} +12 -12
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__d9ea98bd._.js +52 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ef27f8cd._.js → [root-of-the-server]__df886e3c._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ca4987eb._.js → [root-of-the-server]__e0b6f424._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c8890cd6._.js → [root-of-the-server]__f43ecbc2._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f51c7b72._.js +5 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f662fd1e._.js +20 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__538b0bdd._.js → [root-of-the-server]__f961230c._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__b627cb83._.js → [root-of-the-server]__feec5b54._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d16caed5._.js → [root-of-the-server]__ff6ce4b1._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__ff9ce15e._.js +5 -0
- package/cloud-runtime/standalone/.next/server/chunks/_26ffc857._.js +121 -0
- package/cloud-runtime/standalone/.next/server/chunks/_4d07f8db._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/_66d0cf73._.js +6 -0
- package/cloud-runtime/standalone/.next/server/chunks/_9b10087f._.js +3 -2
- package/cloud-runtime/standalone/.next/server/chunks/_a13c0bef._.js +121 -0
- package/cloud-runtime/standalone/.next/server/chunks/{lib_98ae187c._.js → lib_2cd3429c._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/lib_a2a83df5._.js +55 -0
- package/cloud-runtime/standalone/.next/server/chunks/lib_a658c9ef._.js +34 -0
- package/cloud-runtime/standalone/.next/server/chunks/lib_ba38ea08._.js +55 -0
- package/cloud-runtime/standalone/.next/server/chunks/lib_orchestrator_chat-processor_ts_4c335719._.js +27 -29
- package/cloud-runtime/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_371d0bff.js +6 -102
- package/cloud-runtime/standalone/.next/server/chunks/src_graph_schedule-runner_ts_43a13c69._.js +13 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +1 -1
- 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/{442eb8ef62bef9f9.js → 5545da2ad239c0b6.js} +3 -3
- package/cloud-runtime/standalone/app/api/chat/route.ts +5 -163
- package/cloud-runtime/standalone/app/api/schedules/route.ts +11 -2
- package/cloud-runtime/standalone/components/chat-ui/ChatContainer.tsx +0 -13
- package/cloud-runtime/standalone/lib/chat/project-context.ts +169 -0
- package/cloud-runtime/standalone/lib/orchestrator/runtime.ts +2 -0
- package/cloud-runtime/standalone/lib/orchestrator/schedule-runtime.ts +76 -0
- package/cloud-runtime/standalone/src/graph/internal-function-dispatcher.ts +201 -16
- package/cloud-runtime/standalone/src/graph/work-dispatcher.ts +128 -35
- package/cloud-runtime/standalone/state/automations/.state/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.json +4 -4
- package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
- package/cloud-runtime/standalone/vault/agx/issues/ESO-327/design-doc.md +202 -0
- package/cloud-runtime/standalone/worker/index.js +34516 -1717
- package/cloud-runtime/standalone/worker/index.ts +3 -0
- package/package.json +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__067034dd._.js +0 -67
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__152b2000._.js +0 -61
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__33865410._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6c53437e._.js +0 -110
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6dbe939c._.js +0 -49
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__7012e83d._.js +0 -66
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__da645a5e._.js +0 -15
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f4b3df16._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/_2a5aeb76._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/_4689976f._.js +0 -6
- package/cloud-runtime/standalone/.next/server/chunks/_682c9d81._.js +0 -6
- package/cloud-runtime/standalone/.next/server/chunks/_6e7f0ae4._.js +0 -6
- package/cloud-runtime/standalone/.next/server/chunks/_a32a5cdd._.js +0 -6
- package/cloud-runtime/standalone/.next/server/chunks/_af7bd752._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/_fe32a267._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/lib_2492d514._.js +0 -55
- package/cloud-runtime/standalone/.next/server/chunks/lib_3c080873._.js +0 -34
- package/cloud-runtime/standalone/.next/server/chunks/lib_9f439b27._.js +0 -70
- package/cloud-runtime/standalone/.next/server/chunks/src_graph_12d46a92._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/src_graph_executor_ts_55c06268._.js +0 -8
- /package/cloud-runtime/standalone/.next/static/{gty0FO80D_lbq3o9lSpQQ → ZkFZnP5h74O7GgdHudXgH}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/.next/static/{gty0FO80D_lbq3o9lSpQQ → ZkFZnP5h74O7GgdHudXgH}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/.next/static/{gty0FO80D_lbq3o9lSpQQ → ZkFZnP5h74O7GgdHudXgH}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { FunctionDispatchResult } from "./function-executor";
|
|
2
2
|
import type { ExecutionGraph, FunctionNode, WorkNode } from "./types";
|
|
3
|
-
import {
|
|
3
|
+
import { LOCAL_USER } from "@/lib/auth-mode";
|
|
4
|
+
import { loadDbParticipants } from "@/lib/agent-participants";
|
|
5
|
+
import { resolveProjectContext } from "@/lib/chat/project-context";
|
|
6
|
+
import { writeDebugLog } from "@/lib/debug-log";
|
|
7
|
+
import { ensureOrchestratorRuntime } from "@/lib/orchestrator/runtime";
|
|
8
|
+
import type { ChatRunJobData, ChatRunPayload } from "@/lib/orchestrator/chat-types";
|
|
9
|
+
import { getQueue, QUEUE_NAMES } from "@/lib/queue/boss";
|
|
10
|
+
import type { GroupMessage } from "@/lib/types";
|
|
11
|
+
|
|
12
|
+
const ACTIVE_PROCESS_STATUSES = new Set(["running", "working"]);
|
|
13
|
+
const RECENT_STEER_HISTORY_LIMIT = 20;
|
|
14
|
+
const STEER_DUPLICATE_WINDOW_MS = 15 * 60 * 1000;
|
|
15
|
+
const SHIP_MODE_MAX_ROUNDS = 10;
|
|
4
16
|
|
|
5
17
|
function getRootMessageId(node: FunctionNode, graph: ExecutionGraph): string {
|
|
6
18
|
const fromArgs = typeof node.args?.rootMessageId === "string" ? node.args.rootMessageId.trim() : "";
|
|
@@ -30,27 +42,86 @@ function getSteerOutput(
|
|
|
30
42
|
};
|
|
31
43
|
}
|
|
32
44
|
|
|
33
|
-
function
|
|
34
|
-
return
|
|
45
|
+
function normalizeSteerText(content: string): string {
|
|
46
|
+
return content.replace(/\s+/g, " ").trim();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function getSpeakerLabel(message: GroupMessage, participantNames: Record<string, string>): string {
|
|
50
|
+
if (message.role === "user") return "User";
|
|
51
|
+
if (!message.participantId) return "Assistant";
|
|
52
|
+
return participantNames[message.participantId] || message.participantId;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function buildRecentHistory(
|
|
56
|
+
history: GroupMessage[],
|
|
57
|
+
rootMessageId: string,
|
|
58
|
+
participantNames: Record<string, string>
|
|
59
|
+
): Array<{ id: string; name: string; content: string }> {
|
|
60
|
+
return history
|
|
61
|
+
.filter((message) => message.id === rootMessageId || message.rootMessageId === rootMessageId)
|
|
62
|
+
.slice(-RECENT_STEER_HISTORY_LIMIT)
|
|
63
|
+
.map((message) => ({
|
|
64
|
+
id: message.id,
|
|
65
|
+
name: getSpeakerLabel(message, participantNames),
|
|
66
|
+
content: message.content,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function hasRecentDuplicateSteer(
|
|
71
|
+
history: GroupMessage[],
|
|
72
|
+
rootMessageId: string,
|
|
73
|
+
candidate: string,
|
|
74
|
+
participantId: string | null
|
|
75
|
+
): boolean {
|
|
76
|
+
const normalizedCandidate = normalizeSteerText(candidate);
|
|
77
|
+
if (!normalizedCandidate) return false;
|
|
78
|
+
const cutoff = Date.now() - STEER_DUPLICATE_WINDOW_MS;
|
|
79
|
+
|
|
80
|
+
return history
|
|
81
|
+
.filter((message) => message.id === rootMessageId || message.rootMessageId === rootMessageId)
|
|
82
|
+
.some((message) => {
|
|
83
|
+
if (message.role !== "assistant") return false;
|
|
84
|
+
if (message.timestamp < cutoff) return false;
|
|
85
|
+
if (participantId && message.participantId !== participantId) return false;
|
|
86
|
+
return normalizeSteerText(message.content) === normalizedCandidate;
|
|
87
|
+
});
|
|
35
88
|
}
|
|
36
89
|
|
|
37
|
-
async function
|
|
90
|
+
async function getThreadProjectContext(threadId: string): Promise<{
|
|
91
|
+
projectSlug: string | null;
|
|
92
|
+
projectAgentIds: string[];
|
|
93
|
+
}> {
|
|
38
94
|
try {
|
|
39
95
|
const { getSQLiteDb } = await import("@/lib/sqlite-query-adapter");
|
|
40
96
|
const db = getSQLiteDb();
|
|
41
97
|
const projectRow = db
|
|
42
|
-
.prepare(
|
|
43
|
-
|
|
44
|
-
|
|
98
|
+
.prepare(
|
|
99
|
+
`SELECT pt.project_id AS project_id, p.slug AS project_slug
|
|
100
|
+
FROM project_threads pt
|
|
101
|
+
JOIN projects p ON p.id = pt.project_id
|
|
102
|
+
WHERE pt.thread_id = ?
|
|
103
|
+
ORDER BY pt.created_at ASC
|
|
104
|
+
LIMIT 1`
|
|
105
|
+
)
|
|
106
|
+
.get(threadId) as { project_id: string; project_slug: string | null } | undefined;
|
|
107
|
+
if (!projectRow?.project_id) {
|
|
108
|
+
return { projectSlug: null, projectAgentIds: [] };
|
|
109
|
+
}
|
|
45
110
|
|
|
46
|
-
const
|
|
111
|
+
const agentRows = db
|
|
47
112
|
.prepare(
|
|
48
|
-
"SELECT agent_id FROM project_agents WHERE project_id = ? ORDER BY routing_order ASC, created_at ASC
|
|
113
|
+
"SELECT agent_id FROM project_agents WHERE project_id = ? ORDER BY routing_order ASC, created_at ASC",
|
|
49
114
|
)
|
|
50
|
-
.
|
|
51
|
-
|
|
115
|
+
.all(projectRow.project_id) as Array<{ agent_id: string }>;
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
projectSlug: projectRow.project_slug?.trim() || null,
|
|
119
|
+
projectAgentIds: agentRows
|
|
120
|
+
.map((row) => row.agent_id?.trim())
|
|
121
|
+
.filter((agentId): agentId is string => Boolean(agentId)),
|
|
122
|
+
};
|
|
52
123
|
} catch {
|
|
53
|
-
return null;
|
|
124
|
+
return { projectSlug: null, projectAgentIds: [] };
|
|
54
125
|
}
|
|
55
126
|
}
|
|
56
127
|
|
|
@@ -76,7 +147,7 @@ async function dispatchThreadStatus(node: FunctionNode, graph: ExecutionGraph):
|
|
|
76
147
|
});
|
|
77
148
|
|
|
78
149
|
const activeProcessCount = snapshot.processes.filter(
|
|
79
|
-
(process: { status: string }) => process.status
|
|
150
|
+
(process: { status: string }) => ACTIVE_PROCESS_STATUSES.has(process.status),
|
|
80
151
|
).length;
|
|
81
152
|
|
|
82
153
|
return {
|
|
@@ -101,7 +172,18 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
|
|
|
101
172
|
return { status: "failure", message: "Unable to read steer node output" };
|
|
102
173
|
}
|
|
103
174
|
|
|
104
|
-
|
|
175
|
+
if (!normalizeSteerText(steer.message)) {
|
|
176
|
+
return { status: "failure", message: "Ship mode produced an empty steer message" };
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const {
|
|
180
|
+
createChatRun,
|
|
181
|
+
getThreadStatusSnapshot,
|
|
182
|
+
getMessageThread,
|
|
183
|
+
loadHistory,
|
|
184
|
+
saveMessages,
|
|
185
|
+
updateMessageStatus,
|
|
186
|
+
} = await import("@/lib/history-store");
|
|
105
187
|
const { deactivateSchedulesByRootMessageId } = await import("./store");
|
|
106
188
|
const threadRef = await getMessageThread(rootMessageId);
|
|
107
189
|
if (!threadRef) {
|
|
@@ -112,6 +194,23 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
|
|
|
112
194
|
}
|
|
113
195
|
|
|
114
196
|
if (steer.isDone) {
|
|
197
|
+
const snapshot = await getThreadStatusSnapshot({
|
|
198
|
+
threadId: threadRef.threadId,
|
|
199
|
+
rootMessageId,
|
|
200
|
+
});
|
|
201
|
+
const activeProcessCount = snapshot.processes.filter((process: { status: string }) =>
|
|
202
|
+
ACTIVE_PROCESS_STATUSES.has(process.status)
|
|
203
|
+
).length;
|
|
204
|
+
if (activeProcessCount > 0) {
|
|
205
|
+
return {
|
|
206
|
+
status: "success",
|
|
207
|
+
output: {
|
|
208
|
+
done: false,
|
|
209
|
+
action: "completion_deferred_active_work",
|
|
210
|
+
activeProcessCount,
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
}
|
|
115
214
|
deactivateSchedulesByRootMessageId(rootMessageId);
|
|
116
215
|
await updateMessageStatus(threadRef.threadId, rootMessageId, "in-review", null);
|
|
117
216
|
return {
|
|
@@ -120,7 +219,25 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
|
|
|
120
219
|
};
|
|
121
220
|
}
|
|
122
221
|
|
|
123
|
-
const
|
|
222
|
+
const participantLibrary = await loadDbParticipants();
|
|
223
|
+
const participantNames = Object.fromEntries(
|
|
224
|
+
participantLibrary.map((participant) => [participant.id, participant.name])
|
|
225
|
+
);
|
|
226
|
+
const { projectSlug, projectAgentIds } = await getThreadProjectContext(threadRef.threadId);
|
|
227
|
+
const threadHistory = await loadHistory(threadRef.threadId);
|
|
228
|
+
const defaultAgent = projectAgentIds[0] ?? participantLibrary[0]?.id ?? null;
|
|
229
|
+
|
|
230
|
+
if (hasRecentDuplicateSteer(threadHistory, rootMessageId, steer.message, defaultAgent)) {
|
|
231
|
+
return {
|
|
232
|
+
status: "success",
|
|
233
|
+
output: {
|
|
234
|
+
done: false,
|
|
235
|
+
action: "duplicate_next_steps_skipped",
|
|
236
|
+
sender: defaultAgent,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
|
|
124
241
|
const messageId = crypto.randomUUID();
|
|
125
242
|
await saveMessages(threadRef.threadId, [
|
|
126
243
|
{
|
|
@@ -135,13 +252,81 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
|
|
|
135
252
|
},
|
|
136
253
|
]);
|
|
137
254
|
|
|
255
|
+
const orderedParticipantIds = (projectAgentIds.length > 0
|
|
256
|
+
? projectAgentIds
|
|
257
|
+
: participantLibrary.map((participant) => participant.id))
|
|
258
|
+
.filter((participantId, index, allIds) => participantId && allIds.indexOf(participantId) === index);
|
|
259
|
+
const responderIds = orderedParticipantIds.filter((participantId) => participantId !== defaultAgent);
|
|
260
|
+
const runParticipantIds = (responderIds.length > 0 ? responderIds : orderedParticipantIds).filter((participantId) =>
|
|
261
|
+
participantLibrary.some((participant) => participant.id === participantId)
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
if (runParticipantIds.length === 0) {
|
|
265
|
+
return {
|
|
266
|
+
status: "success",
|
|
267
|
+
output: {
|
|
268
|
+
done: false,
|
|
269
|
+
action: "sent_next_steps_only",
|
|
270
|
+
sender: defaultAgent,
|
|
271
|
+
messageId,
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const runParticipants = participantLibrary.filter((participant) => runParticipantIds.includes(participant.id));
|
|
277
|
+
const projectContext = projectSlug
|
|
278
|
+
? await resolveProjectContext(projectSlug, [], runParticipants)
|
|
279
|
+
: undefined;
|
|
280
|
+
const chatRunId = crypto.randomUUID();
|
|
281
|
+
const chatRunPayload: ChatRunPayload = {
|
|
282
|
+
threadId: threadRef.threadId,
|
|
283
|
+
prompt: steer.message,
|
|
284
|
+
projectContext,
|
|
285
|
+
mentionedIds: [],
|
|
286
|
+
initialParallelIds: [],
|
|
287
|
+
maxRounds: SHIP_MODE_MAX_ROUNDS,
|
|
288
|
+
recentHistory: buildRecentHistory(threadHistory, rootMessageId, participantNames),
|
|
289
|
+
currentUserMessageId: messageId,
|
|
290
|
+
rootMessageId,
|
|
291
|
+
participantIds: runParticipantIds,
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
await createChatRun({
|
|
295
|
+
id: chatRunId,
|
|
296
|
+
threadId: threadRef.threadId,
|
|
297
|
+
rootMessageId,
|
|
298
|
+
userId: LOCAL_USER.id,
|
|
299
|
+
projectSlug: projectSlug ?? null,
|
|
300
|
+
maxSteps: SHIP_MODE_MAX_ROUNDS,
|
|
301
|
+
activeParticipantIds: runParticipantIds,
|
|
302
|
+
payload: chatRunPayload as unknown as Record<string, unknown>,
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
await ensureOrchestratorRuntime();
|
|
306
|
+
const queue = await getQueue();
|
|
307
|
+
await queue.send<ChatRunJobData>(QUEUE_NAMES.CHAT_RUN_PROCESS, {
|
|
308
|
+
chatRunId,
|
|
309
|
+
userId: LOCAL_USER.id,
|
|
310
|
+
signal: "start",
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
writeDebugLog("ship_mode.steer.enqueued", {
|
|
314
|
+
rootMessageId,
|
|
315
|
+
threadId: threadRef.threadId,
|
|
316
|
+
chatRunId,
|
|
317
|
+
authorId: defaultAgent,
|
|
318
|
+
participantIds: runParticipantIds,
|
|
319
|
+
projectSlug: projectSlug ?? null,
|
|
320
|
+
});
|
|
321
|
+
|
|
138
322
|
return {
|
|
139
323
|
status: "success",
|
|
140
324
|
output: {
|
|
141
325
|
done: false,
|
|
142
|
-
action: "
|
|
326
|
+
action: "sent_next_steps_and_started_chat_run",
|
|
143
327
|
sender: defaultAgent,
|
|
144
328
|
messageId,
|
|
329
|
+
chatRunId,
|
|
145
330
|
},
|
|
146
331
|
};
|
|
147
332
|
}
|
|
@@ -15,19 +15,16 @@ import type { WorkNode, ExecutionGraph } from './types';
|
|
|
15
15
|
import type { WorkDispatchResult } from './executor';
|
|
16
16
|
import type { ChatProvider } from '@/lib/types';
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
You MUST respond with ONLY a JSON object, no markdown fences, no extra text:
|
|
18
|
+
const ACTIVE_PROCESS_STATUSES = new Set(['running', 'working']);
|
|
19
|
+
const DEFAULT_STEER_DIRECTIVE = `Review the thread, assess whether the work is complete enough to move into review, and if not, produce one concise steering message that combines:
|
|
20
|
+
1. what has been accomplished vs. what remains
|
|
21
|
+
2. the concrete next steps needed to move toward shipping`;
|
|
22
|
+
const STEER_OUTPUT_CONTRACT = `You MUST respond with ONLY a JSON object, no markdown fences, no extra text:
|
|
23
23
|
{"isDone": true/false, "message": "your assessment"}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
If
|
|
27
|
-
|
|
28
|
-
- the concrete next steps for the team
|
|
29
|
-
|
|
30
|
-
Do not produce separate status and instruction messages.`;
|
|
25
|
+
Set isDone=true only when the thread is genuinely ready to stop ship mode and move into review.
|
|
26
|
+
If isDone=false, message must be a single concise steering note with both status and next steps.
|
|
27
|
+
The message must not be empty.`;
|
|
31
28
|
|
|
32
29
|
/**
|
|
33
30
|
* Read agx config to get the default provider name.
|
|
@@ -55,6 +52,59 @@ function resolveProvider(raw: string): ChatProvider {
|
|
|
55
52
|
}
|
|
56
53
|
}
|
|
57
54
|
|
|
55
|
+
async function getSteeringAgentConfig(threadId: string): Promise<{ provider: ChatProvider; model: string | null }> {
|
|
56
|
+
try {
|
|
57
|
+
const [{ getSQLiteDb }, { loadDbParticipants }] = await Promise.all([
|
|
58
|
+
import('@/lib/sqlite-query-adapter'),
|
|
59
|
+
import('@/lib/agent-participants'),
|
|
60
|
+
]);
|
|
61
|
+
const sqlite = getSQLiteDb();
|
|
62
|
+
const projectRow = sqlite
|
|
63
|
+
.prepare(
|
|
64
|
+
`SELECT pt.project_id AS project_id
|
|
65
|
+
FROM project_threads pt
|
|
66
|
+
WHERE pt.thread_id = ?
|
|
67
|
+
ORDER BY pt.created_at ASC
|
|
68
|
+
LIMIT 1`
|
|
69
|
+
)
|
|
70
|
+
.get(threadId) as { project_id: string } | undefined;
|
|
71
|
+
if (!projectRow?.project_id) {
|
|
72
|
+
return { provider: resolveProvider(getDefaultProvider()), model: null };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const agentRow = sqlite
|
|
76
|
+
.prepare(
|
|
77
|
+
`SELECT agent_id
|
|
78
|
+
FROM project_agents
|
|
79
|
+
WHERE project_id = ?
|
|
80
|
+
ORDER BY routing_order ASC, created_at ASC
|
|
81
|
+
LIMIT 1`
|
|
82
|
+
)
|
|
83
|
+
.get(projectRow.project_id) as { agent_id: string } | undefined;
|
|
84
|
+
if (!agentRow?.agent_id) {
|
|
85
|
+
return { provider: resolveProvider(getDefaultProvider()), model: null };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const participants = await loadDbParticipants();
|
|
89
|
+
const agent = participants.find((participant) => participant.id === agentRow.agent_id);
|
|
90
|
+
if (!agent) {
|
|
91
|
+
return { provider: resolveProvider(getDefaultProvider()), model: null };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
provider: resolveProvider(agent.provider),
|
|
96
|
+
model: agent.model,
|
|
97
|
+
};
|
|
98
|
+
} catch {
|
|
99
|
+
return { provider: resolveProvider(getDefaultProvider()), model: null };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function buildSteerSystemPrompt(node: WorkNode): string {
|
|
104
|
+
const steerDirective = node.description?.trim() || DEFAULT_STEER_DIRECTIVE;
|
|
105
|
+
return `${steerDirective}\n\n${STEER_OUTPUT_CONTRACT}`;
|
|
106
|
+
}
|
|
107
|
+
|
|
58
108
|
/**
|
|
59
109
|
* Create a dispatchWork implementation for schedule-driven graphs.
|
|
60
110
|
*
|
|
@@ -97,15 +147,30 @@ export function createDispatchWork(): (
|
|
|
97
147
|
});
|
|
98
148
|
|
|
99
149
|
const activeProcessCount = snapshot.processes.filter(
|
|
100
|
-
(p: { status: string }) => p.status
|
|
150
|
+
(p: { status: string }) => ACTIVE_PROCESS_STATUSES.has(p.status),
|
|
101
151
|
).length;
|
|
152
|
+
const rootStatus = snapshot.rootMessage?.threadStatus ?? 'active';
|
|
153
|
+
const processSummary = snapshot.processes
|
|
154
|
+
.slice(0, 8)
|
|
155
|
+
.map((process: {
|
|
156
|
+
agent: string;
|
|
157
|
+
status: string;
|
|
158
|
+
responseTo?: string;
|
|
159
|
+
responseContent?: string | null;
|
|
160
|
+
}) => {
|
|
161
|
+
const details = [`${process.agent}: ${process.status}`];
|
|
162
|
+
if (process.responseTo) details.push(`replying to "${process.responseTo.slice(0, 140)}"`);
|
|
163
|
+
if (process.responseContent) details.push(`latest response "${process.responseContent.slice(0, 140)}"`);
|
|
164
|
+
return `- ${details.join(' | ')}`;
|
|
165
|
+
})
|
|
166
|
+
.join('\n');
|
|
102
167
|
|
|
103
168
|
// Build a summary of recent messages for context
|
|
104
169
|
const recentMessages = (snapshot.messages ?? [])
|
|
105
|
-
.slice(-
|
|
170
|
+
.slice(-15)
|
|
106
171
|
.map((m: { role?: string; content?: string; participantId?: string | null }) => {
|
|
107
172
|
const sender = m.participantId ?? m.role ?? '?';
|
|
108
|
-
const text = (m.content ?? '').slice(0,
|
|
173
|
+
const text = (m.content ?? '').slice(0, 600);
|
|
109
174
|
return `[${sender}]: ${text}`;
|
|
110
175
|
})
|
|
111
176
|
.join('\n');
|
|
@@ -115,27 +180,37 @@ export function createDispatchWork(): (
|
|
|
115
180
|
// 2. Build assessment prompt
|
|
116
181
|
const assessPrompt = [
|
|
117
182
|
'--- THREAD STATE ---',
|
|
183
|
+
`Root request: ${snapshot.rootMessage?.content ?? '(missing root message)'}`,
|
|
184
|
+
`Thread status: ${rootStatus}`,
|
|
118
185
|
`Active agents: ${activeProcessCount}`,
|
|
119
186
|
`Total messages: ${snapshot.messages?.length ?? 0}`,
|
|
187
|
+
snapshot.lastUpdatedAt ? `Last updated at: ${new Date(snapshot.lastUpdatedAt).toISOString()}` : null,
|
|
188
|
+
'',
|
|
189
|
+
'Current process state:',
|
|
190
|
+
processSummary || '- none',
|
|
120
191
|
'',
|
|
121
192
|
'Recent messages:',
|
|
122
|
-
recentMessages,
|
|
193
|
+
recentMessages || '- none',
|
|
123
194
|
'--- END THREAD STATE ---',
|
|
124
195
|
'',
|
|
125
196
|
'Assess the progress and respond with the JSON object.',
|
|
126
|
-
]
|
|
197
|
+
]
|
|
198
|
+
.filter(Boolean)
|
|
199
|
+
.join('\n');
|
|
127
200
|
|
|
128
201
|
// 3. Call provider directly via runCliResponse (same path as chat endpoint)
|
|
129
202
|
const { runCliResponse } = await import('@/lib/cli-runner');
|
|
130
|
-
const
|
|
131
|
-
console.log(
|
|
203
|
+
const steeringAgent = await getSteeringAgentConfig(threadRef.threadId);
|
|
204
|
+
console.log(
|
|
205
|
+
`[work-dispatch] Calling ${steeringAgent.provider} via runCliResponse (prompt length: ${assessPrompt.length})...`
|
|
206
|
+
);
|
|
132
207
|
|
|
133
208
|
let fullResponse = '';
|
|
134
209
|
await runCliResponse({
|
|
135
|
-
provider,
|
|
136
|
-
model:
|
|
210
|
+
provider: steeringAgent.provider,
|
|
211
|
+
model: steeringAgent.model,
|
|
137
212
|
prompt: assessPrompt,
|
|
138
|
-
systemContext:
|
|
213
|
+
systemContext: buildSteerSystemPrompt(node),
|
|
139
214
|
onDelta: (chunk: string) => {
|
|
140
215
|
fullResponse += chunk;
|
|
141
216
|
},
|
|
@@ -148,11 +223,18 @@ export function createDispatchWork(): (
|
|
|
148
223
|
|
|
149
224
|
// 4. Parse structured output
|
|
150
225
|
const parsed = parseSteerResponse(fullResponse.trim());
|
|
226
|
+
if (!parsed.ok) {
|
|
227
|
+
return {
|
|
228
|
+
status: 'failure' as const,
|
|
229
|
+
transient: false,
|
|
230
|
+
message: parsed.error,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
151
233
|
console.log(`[work-dispatch] Parsed result:`, parsed);
|
|
152
234
|
|
|
153
235
|
return {
|
|
154
236
|
status: 'success' as const,
|
|
155
|
-
output: parsed,
|
|
237
|
+
output: parsed.value,
|
|
156
238
|
};
|
|
157
239
|
} catch (err) {
|
|
158
240
|
console.error(`[work-dispatch] Steer dispatch failed:`, err);
|
|
@@ -167,26 +249,37 @@ export function createDispatchWork(): (
|
|
|
167
249
|
|
|
168
250
|
/**
|
|
169
251
|
* Parse the steer agent's response into { isDone, message }.
|
|
170
|
-
* Tries JSON parse first, falls back to heuristic detection.
|
|
171
252
|
*/
|
|
172
|
-
function parseSteerResponse(
|
|
173
|
-
|
|
253
|
+
function parseSteerResponse(
|
|
254
|
+
raw: string
|
|
255
|
+
):
|
|
256
|
+
| { ok: true; value: { isDone: boolean; message: string } }
|
|
257
|
+
| { ok: false; error: string } {
|
|
174
258
|
const jsonMatch = raw.match(/\{[\s\S]*?"isDone"\s*:\s*(true|false)[\s\S]*?\}/);
|
|
175
259
|
if (jsonMatch) {
|
|
176
260
|
try {
|
|
177
261
|
const parsed = JSON.parse(jsonMatch[0]);
|
|
262
|
+
const message = String(parsed.message ?? '').trim();
|
|
263
|
+
if (!message) {
|
|
264
|
+
return { ok: false, error: 'Ship mode response JSON did not include a non-empty message.' };
|
|
265
|
+
}
|
|
178
266
|
return {
|
|
179
|
-
|
|
180
|
-
|
|
267
|
+
ok: true,
|
|
268
|
+
value: {
|
|
269
|
+
isDone: Boolean(parsed.isDone),
|
|
270
|
+
message,
|
|
271
|
+
},
|
|
181
272
|
};
|
|
182
|
-
} catch {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
273
|
+
} catch (error) {
|
|
274
|
+
return {
|
|
275
|
+
ok: false,
|
|
276
|
+
error: error instanceof Error ? error.message : String(error),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
188
279
|
}
|
|
189
280
|
|
|
190
|
-
|
|
191
|
-
|
|
281
|
+
return {
|
|
282
|
+
ok: false,
|
|
283
|
+
error: 'Ship mode response was not valid JSON with isDone/message fields.',
|
|
284
|
+
};
|
|
192
285
|
}
|
package/cloud-runtime/standalone/state/automations/.state/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"scheduleHash": "218b10daaa347ad14c3a8fbaabee0cff119839d6f5b6c5c3aaf7ed2eac4484f1",
|
|
3
|
-
"nextRunAt":
|
|
4
|
-
"lastRunAt":
|
|
5
|
-
"lastOutcome":
|
|
3
|
+
"nextRunAt": 1775664900000,
|
|
4
|
+
"lastRunAt": 1775661402987,
|
|
5
|
+
"lastOutcome": "success",
|
|
6
6
|
"lastError": null,
|
|
7
|
-
"updatedAt": "2026-04-
|
|
7
|
+
"updatedAt": "2026-04-08T15:16:42.988Z"
|
|
8
8
|
}
|