@jiggai/kitchen 0.3.33 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +4 -0
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +4 -4
- package/.next/required-server-files.json +4 -4
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +5 -5
- package/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/agents/[agentId]/page/build-manifest.json +3 -3
- package/.next/server/app/agents/[agentId]/page.js +2 -2
- package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/add/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/file/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/route.js +1 -1
- package/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/skills/install/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
- package/.next/server/app/api/channels/bindings/route.js +1 -1
- package/.next/server/app/api/channels/bindings/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/bulk/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/cron/bulk/route/build-manifest.json +11 -0
- package/.next/server/app/api/cron/bulk/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/cron/bulk/route.js +6 -0
- package/.next/server/app/api/cron/bulk/route.js.map +5 -0
- package/.next/server/app/api/cron/bulk/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/bulk/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/cron/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/jobs/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/recipe-installed/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/worker/route.js +2 -1
- package/.next/server/app/api/cron/worker/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/promote/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/route.js.nft.json +1 -1
- package/.next/server/app/api/ids/check/route.js.nft.json +1 -1
- package/.next/server/app/api/manifest/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/manifest/route/build-manifest.json +11 -0
- package/.next/server/app/api/manifest/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/manifest/route.js +6 -0
- package/.next/server/app/api/manifest/route.js.map +5 -0
- package/.next/server/app/api/manifest/route.js.nft.json +1 -0
- package/.next/server/app/api/manifest/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/marketplace/recipes/[slug]/route.js +1 -1
- package/.next/server/app/api/marketplace/recipes/[slug]/route.js.nft.json +1 -1
- package/.next/server/app/api/marketplace/recipes/route.js +1 -1
- package/.next/server/app/api/marketplace/recipes/route.js.nft.json +1 -1
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js +2 -2
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js +1 -1
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js.nft.json +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/plugins/route.js.nft.json +1 -1
- package/.next/server/app/api/plugins/test/route.js +1 -1
- package/.next/server/app/api/plugins/test/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/custom-team/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/local-agent-catalog/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/route.js +1 -1
- package/.next/server/app/api/recipes/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/cron-installation/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/model-options/route.js +1 -1
- package/.next/server/app/api/settings/model-options/route.js.nft.json +1 -1
- package/.next/server/app/api/swarms/start/route.js +1 -1
- package/.next/server/app/api/swarms/start/route.js.nft.json +1 -1
- package/.next/server/app/api/swarms/status/route.js +1 -1
- package/.next/server/app/api/swarms/status/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/comment/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/file/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/files/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/list/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/list/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/list/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/list/route.js +6 -0
- package/.next/server/app/api/teams/list/route.js.map +5 -0
- package/.next/server/app/api/teams/list/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/list/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/meta/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/orchestrator/route.js +1 -1
- package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/remove-team/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/skills/install/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js +1 -1
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-deliverables/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-templates/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-triggers/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-triggers/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-triggers/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-triggers/route.js +6 -0
- package/.next/server/app/api/teams/workflow-triggers/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-triggers/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-triggers/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/assign/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/assignees/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/move/route.js.nft.json +1 -1
- package/.next/server/app/channels/page/build-manifest.json +3 -3
- package/.next/server/app/channels/page.js +2 -2
- package/.next/server/app/channels/page.js.nft.json +1 -1
- package/.next/server/app/channels/page_client-reference-manifest.js +1 -1
- package/.next/server/app/channels.html +2 -2
- package/.next/server/app/channels.rsc +6 -6
- package/.next/server/app/channels.segments/_full.segment.rsc +6 -6
- package/.next/server/app/channels.segments/_head.segment.rsc +1 -1
- package/.next/server/app/channels.segments/_index.segment.rsc +3 -3
- package/.next/server/app/channels.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/channels.segments/channels.segment.rsc +1 -1
- package/.next/server/app/cron-jobs/page/build-manifest.json +3 -3
- package/.next/server/app/cron-jobs/page.js +2 -2
- package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
- package/.next/server/app/cron-jobs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/[id]/page/build-manifest.json +3 -3
- package/.next/server/app/goals/[id]/page.js +2 -2
- package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
- package/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/new/page/build-manifest.json +3 -3
- package/.next/server/app/goals/new/page.js +2 -2
- package/.next/server/app/goals/new/page.js.nft.json +1 -1
- package/.next/server/app/goals/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/new.html +2 -2
- package/.next/server/app/goals/new.rsc +6 -6
- package/.next/server/app/goals/new.segments/_full.segment.rsc +6 -6
- package/.next/server/app/goals/new.segments/_head.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/_index.segment.rsc +3 -3
- package/.next/server/app/goals/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/goals/new.segments/goals/new.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/goals.segment.rsc +1 -1
- package/.next/server/app/goals/page/build-manifest.json +3 -3
- package/.next/server/app/goals/page.js +2 -2
- package/.next/server/app/goals/page.js.nft.json +1 -1
- package/.next/server/app/goals/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals.html +1 -1
- package/.next/server/app/goals.rsc +6 -6
- package/.next/server/app/goals.segments/_full.segment.rsc +6 -6
- package/.next/server/app/goals.segments/_head.segment.rsc +1 -1
- package/.next/server/app/goals.segments/_index.segment.rsc +3 -3
- package/.next/server/app/goals.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/goals.segments/goals.segment.rsc +1 -1
- package/.next/server/app/page/build-manifest.json +3 -3
- package/.next/server/app/page.js +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/[id]/page/build-manifest.json +3 -3
- package/.next/server/app/recipes/[id]/page.js +4 -4
- package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
- package/.next/server/app/recipes/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/page/build-manifest.json +3 -3
- package/.next/server/app/recipes/page.js +4 -4
- package/.next/server/app/recipes/page.js.nft.json +1 -1
- package/.next/server/app/recipes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/runs/page/build-manifest.json +3 -3
- package/.next/server/app/runs/page.js +5 -7
- package/.next/server/app/runs/page.js.nft.json +1 -1
- package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page/build-manifest.json +3 -3
- package/.next/server/app/settings/page.js +2 -2
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +6 -6
- package/.next/server/app/settings.segments/_full.segment.rsc +6 -6
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +3 -3
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/teams/[teamId]/deliverables/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/deliverables/page.js +5 -5
- package/.next/server/app/teams/[teamId]/deliverables/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/deliverables/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/page.js +5 -6
- package/.next/server/app/teams/[teamId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js +5 -6
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/runs/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/runs/page.js +2 -2
- package/.next/server/app/teams/[teamId]/runs/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js +2 -2
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/tickets/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/tickets/page.js +2 -2
- package/.next/server/app/teams/[teamId]/tickets/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/tickets/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js +5 -5
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/workflows/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/workflows/page.js +5 -5
- package/.next/server/app/teams/[teamId]/workflows/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/workflows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tickets/[ticket]/page/build-manifest.json +3 -3
- package/.next/server/app/tickets/[ticket]/page.js +2 -2
- package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/tickets/[ticket]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tickets/page/build-manifest.json +3 -3
- package/.next/server/app/tickets/page.js +2 -2
- package/.next/server/app/tickets/page.js.nft.json +1 -1
- package/.next/server/app/tickets/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +4 -0
- package/.next/server/chunks/[externals]_node:fs_ddf6f167._.js +3 -0
- package/.next/server/chunks/[externals]_node:fs_ddf6f167._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__00a30f40._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__03c5f2a6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__03c5f2a6._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__04f289da._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__08b4c8f2._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0b2c557c._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0b2c557c._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0f55461f._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1311d7a3._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1480ffda._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js → [root-of-the-server]__17fa6089._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1873f417._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1d4f6506._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1d4f6506._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1f18c0c4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1f18c0c4._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1f1e62ac._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__20b1f42d._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__21ad9eeb._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__2c207e60._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__3021a250._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__30cd38e9._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__392e585d._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__3bfad714._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__3d15e850._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__3f648b9b._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__482575d2._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__4898071c._.js +4 -4
- package/.next/server/chunks/[root-of-the-server]__497e7a9d._.js +22 -0
- package/.next/server/chunks/[root-of-the-server]__497e7a9d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__4ee12514._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__55defc7c._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js → [root-of-the-server]__5792c29e._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__5aa1dc93._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__5c5990a6._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__603cb0fa._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__636919a0._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__653d42f0._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__653d42f0._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__663e79ff._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0883634a._.js → [root-of-the-server]__68a21bb1._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0883634a._.js.map → [root-of-the-server]__68a21bb1._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__69c065ce._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__6e463e5f._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__6e463e5f._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__c1b0d50e._.js → [root-of-the-server]__7194dfe2._.js} +3 -3
- package/.next/server/chunks/{[root-of-the-server]__f45ceefb._.js → [root-of-the-server]__7347e39f._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__f45ceefb._.js.map → [root-of-the-server]__7347e39f._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__74e2a9ba._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__7bdf9f6e._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__7bdf9f6e._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__7e12b9f4._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__87875179._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__17124952._.js → [root-of-the-server]__89f2190c._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__8f8e110f._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__91d0cce1._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__91d0cce1._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__937b40e2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__937b40e2._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__9853b72d._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__9dba20b3._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__9e96d37b._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__aba68368._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__aed4e4f2._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__b6cff26d._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0bea0f71._.js → [root-of-the-server]__b986660c._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0bea0f71._.js.map → [root-of-the-server]__b986660c._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__343776df._.js → [root-of-the-server]__bbed0e46._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__c15c5141._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__c50e4bc4._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__cc0860cb._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__cc3ea05b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__cc3ea05b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__d302afb4._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__d4a8660e._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__e1432bba._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__e1432bba._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e478ef0d._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__e9acbabd._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__e9d9d570._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__f408c708._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__f4cbadf7._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__f5cd81f1._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__f85b5a70._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__f85b5a70._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__f994dc62._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__fb22e719._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__fb22e719._.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_bulk_route_actions_30f8adb9.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_bulk_route_actions_30f8adb9.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_manifest_route_actions_7f7622ff.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_manifest_route_actions_7f7622ff.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_list_route_actions_5aa8c937.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_list_route_actions_5aa8c937.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-triggers_route_actions_e86e3b38.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-triggers_route_actions_e86e3b38.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_cb6ddb24.js +13 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_cb6ddb24.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f5680d9e.js +1 -1
- package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js +1 -1
- package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__2a657095._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__2a657095._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3f55f975._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__3f55f975._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__471bc2e7._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__471bc2e7._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__4d24c088._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4d24c088._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__6390ce9c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__6390ce9c._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__7b8cdea5._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__7b8cdea5._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__7d21617d._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__7d21617d._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__8135c9d5._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__8135c9d5._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_1038a5b9._.js → [root-of-the-server]__8e8f535b._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_next_dist_1038a5b9._.js.map → [root-of-the-server]__8e8f535b._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__997aa62c._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__997aa62c._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9db1df87._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__9db1df87._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__a2e3966f._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__a2e3966f._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__af792402._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__af792402._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__becf14db._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__becf14db._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__c106a298._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__c106a298._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__cb91405c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__cb91405c._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__f59c3144._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__f59c3144._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js.map +1 -1
- package/.next/server/chunks/ssr/_1ee3bd7b._.js +1 -1
- package/.next/server/chunks/ssr/_1ee3bd7b._.js.map +1 -1
- package/.next/server/chunks/ssr/{_deb7a691._.js → _2ab986a4._.js} +2 -2
- package/.next/server/chunks/ssr/_2ab986a4._.js.map +1 -0
- package/.next/server/chunks/ssr/_2d8d7232._.js +1 -1
- package/.next/server/chunks/ssr/_2d8d7232._.js.map +1 -1
- package/.next/server/chunks/ssr/_43a80c61._.js +1 -1
- package/.next/server/chunks/ssr/_43a80c61._.js.map +1 -1
- package/.next/server/chunks/ssr/_641f29bc._.js +3 -0
- package/.next/server/chunks/ssr/_641f29bc._.js.map +1 -0
- package/.next/server/chunks/ssr/_ac993243._.js +3 -0
- package/.next/server/chunks/ssr/_ac993243._.js.map +1 -0
- package/.next/server/chunks/ssr/_f636ce67._.js +3 -0
- package/.next/server/chunks/ssr/_f636ce67._.js.map +1 -0
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js +7 -1
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js.map +1 -1
- package/.next/server/chunks/ssr/{_7f9e89d2._.js → node_modules_next_10fb6ad9._.js} +3 -3
- package/.next/server/chunks/ssr/node_modules_next_10fb6ad9._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_25a30daf._.js +1 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_compiled_bc6b8ddf._.js +1 -1
- package/.next/server/chunks/ssr/node_modules_yaml_dist_18db9ed7._.js +2 -2
- package/.next/server/chunks/ssr/src_13139e3d._.js +1 -1
- package/.next/server/chunks/ssr/src_13139e3d._.js.map +1 -1
- package/.next/server/chunks/ssr/src_2a73b867._.js +1 -1
- package/.next/server/chunks/ssr/src_2a73b867._.js.map +1 -1
- package/.next/server/chunks/ssr/src_2dbb3b7f._.js +1 -1
- package/.next/server/chunks/ssr/src_2dbb3b7f._.js.map +1 -1
- package/.next/server/chunks/ssr/src_417bc4a6._.js +1 -1
- package/.next/server/chunks/ssr/src_417bc4a6._.js.map +1 -1
- package/.next/server/chunks/ssr/src_59477309._.js +1 -1
- package/.next/server/chunks/ssr/src_59477309._.js.map +1 -1
- package/.next/server/chunks/ssr/src_79d55c05._.js +1 -1
- package/.next/server/chunks/ssr/src_79d55c05._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js +1 -1
- package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js +1 -1
- package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js +1 -1
- package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js +1 -1
- package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js +1 -1
- package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js +3 -0
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_workflows_workflows-client_tsx_12742cc9._.js +1 -1
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_workflows_workflows-client_tsx_12742cc9._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js +1 -1
- package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/001f840e2d5598af.js +10 -0
- package/.next/static/chunks/212477db59154fa7.js +3 -0
- package/.next/static/chunks/242fee5849d79d1b.js +1 -0
- package/.next/static/chunks/26d8587a145bded7.js +1 -0
- package/.next/static/chunks/{b83c1ca03c3b8c6d.js → 372ac1d07db9969a.js} +1 -1
- package/.next/static/chunks/4a0d27f3023676a5.js +1 -0
- package/.next/static/chunks/4ad57cfc54e20abd.js +1 -0
- package/.next/static/chunks/4e8866ad8f1f6b2b.js +1 -0
- package/.next/static/chunks/7d9e7a36b92578fd.js +1 -0
- package/.next/static/chunks/87f63f654bc046a2.js +3 -0
- package/.next/static/chunks/8aac543d98940eb3.js +2 -0
- package/.next/static/chunks/8acd42df55d57556.js +1 -0
- package/.next/static/chunks/95b7564f2360e762.js +1 -0
- package/.next/static/chunks/9801fc48f532d076.js +1 -0
- package/.next/static/chunks/{d6e1b7307a9274ce.js → 9c627cb11f73ac4c.js} +1 -1
- package/.next/static/chunks/ad652e4b50e1fb17.js +1 -0
- package/.next/static/chunks/aff32612e6b9d901.js +1 -0
- package/.next/static/chunks/c6c561355e97baa8.js +7 -0
- package/.next/static/chunks/d4c855575c079ffc.js +3 -0
- package/.next/static/chunks/d593ea5e91e81b45.js +1 -0
- package/.next/static/chunks/{87879d67a1601ee0.js → e0984ec981f01c0d.js} +1 -1
- package/.next/static/chunks/f5039461b97678c7.js +1 -0
- package/.next/static/chunks/f51763a2aea0a4b6.js +1 -0
- package/.next/static/chunks/f7f157ba542e1ae5.js +1 -0
- package/.next/static/chunks/fb008837ba324b34.css +3 -0
- package/.next/static/chunks/{turbopack-dbf3078dbf5863bd.js → turbopack-bdd9478663f034d6.js} +1 -1
- package/LICENSE +192 -0
- package/README.md +19 -5
- package/openclaw/index.ts +154 -5
- package/openclaw.plugin.json +2 -8
- package/package.json +5 -2
- package/.next/server/chunks/[root-of-the-server]__18423bab._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__18423bab._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__35ec765d._.js +0 -13
- package/.next/server/chunks/[root-of-the-server]__35ec765d._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__813dd669._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__813dd669._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__b457b884._.js +0 -22
- package/.next/server/chunks/[root-of-the-server]__b457b884._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__da7df58d._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__da7df58d._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__4981f370._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__4981f370._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__8f9585b9._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__8f9585b9._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9e400864._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__9e400864._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__a6348eaa._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__a6348eaa._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ad4e8478._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__ad4e8478._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b5aa14b8._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__b5aa14b8._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b8998a21._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__b8998a21._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__e9bd9b71._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__e9bd9b71._.js.map +0 -1
- package/.next/server/chunks/ssr/_32beff4b._.js +0 -3
- package/.next/server/chunks/ssr/_32beff4b._.js.map +0 -1
- package/.next/server/chunks/ssr/_7f9e89d2._.js.map +0 -1
- package/.next/server/chunks/ssr/_8538617d._.js +0 -3
- package/.next/server/chunks/ssr/_8538617d._.js.map +0 -1
- package/.next/server/chunks/ssr/_a506fcf8._.js +0 -3
- package/.next/server/chunks/ssr/_a506fcf8._.js.map +0 -1
- package/.next/server/chunks/ssr/_deb7a691._.js.map +0 -1
- package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js +0 -3
- package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_21685f67._.js +0 -3
- package/.next/server/chunks/ssr/src_app_21685f67._.js.map +0 -1
- package/.next/static/chunks/0edab8a24d59a626.js +0 -2
- package/.next/static/chunks/410dc851d0e3033d.js +0 -1
- package/.next/static/chunks/4e38b3f280ced64c.js +0 -1
- package/.next/static/chunks/4f2b8a07ace7e02b.js +0 -1
- package/.next/static/chunks/57ad5290f7e92ffd.css +0 -3
- package/.next/static/chunks/8a919077b73862da.js +0 -1
- package/.next/static/chunks/9906444fb1191bb4.js +0 -1
- package/.next/static/chunks/a625725b4cd85ea3.js +0 -1
- package/.next/static/chunks/ac32974713c57cb3.js +0 -1
- package/.next/static/chunks/bdb7ebd88ea13111.js +0 -1
- package/.next/static/chunks/bfcfbe145220d365.js +0 -1
- package/.next/static/chunks/c0d9f53d91cc65c5.js +0 -10
- package/.next/static/chunks/c0e2f959abc4cc13.js +0 -1
- package/.next/static/chunks/c822e53f79a492c7.js +0 -1
- package/.next/static/chunks/ce6b2024d13b4333.js +0 -1
- package/.next/static/chunks/d13249af74d111cf.js +0 -3
- package/.next/static/chunks/d16f64ca3a8ed208.js +0 -1
- package/.next/static/chunks/d7541a171116ec9c.js +0 -1
- package/.next/static/chunks/e03137fd069b1514.js +0 -1
- package/.next/static/chunks/e10faa9296c8b246.js +0 -1
- package/.next/static/chunks/ec24877f7b7f82c5.js +0 -3
- package/.next/static/chunks/ff3bbb5df40b2cc4.js +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js.map → [root-of-the-server]__17fa6089._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js.map → [root-of-the-server]__5792c29e._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__c1b0d50e._.js.map → [root-of-the-server]__7194dfe2._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__17124952._.js.map → [root-of-the-server]__89f2190c._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__343776df._.js.map → [root-of-the-server]__bbed0e46._.js.map} +0 -0
- /package/.next/static/{F0PhVXEIb3LrF9XQem5EQ → QPNWZUPFu-1zEy4dGcXv5}/_buildManifest.js +0 -0
- /package/.next/static/{F0PhVXEIb3LrF9XQem5EQ → QPNWZUPFu-1zEy4dGcXv5}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{F0PhVXEIb3LrF9XQem5EQ → QPNWZUPFu-1zEy4dGcXv5}/_ssgManifest.js +0 -0
package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/app/api/teams/workflow-runs/route.ts","../../../node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["import { NextResponse } from \"next/server\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { jsonOkRest, parseJsonBody } from \"@/lib/api-route-helpers\";\nimport { handleWorkflowRunsGet } from \"@/lib/workflows/api-handlers\";\nimport { errorMessage } from \"@/lib/errors\";\nimport { toolsInvoke } from \"@/lib/gateway\";\nimport { runOpenClaw } from \"@/lib/openclaw\";\nimport { assertSafeRelativeFileName, getTeamWorkspaceDir } from \"@/lib/paths\";\nimport { listWorkflowRuns, readWorkflowRun, writeWorkflowRun, appendWorkflowRunEvent, writeApprovalFile } from \"@/lib/workflows/runs-storage\";\nimport type { WorkflowRunFileV1, WorkflowRunNodeResultV1 } from \"@/lib/workflows/runs-types\";\nimport { readWorkflow } from \"@/lib/workflows/storage\";\nimport type { WorkflowFileV1 } from \"@/lib/workflows/types\";\n\nfunction nowIso() {\n return new Date().toISOString();\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return Boolean(v) && typeof v === \"object\" && !Array.isArray(v);\n}\n\nasync function appendTeamFile(teamId: string, relPath: string, content: string) {\n const safe = assertSafeRelativeFileName(relPath);\n const teamDir = await getTeamWorkspaceDir(teamId);\n const full = path.join(teamDir, safe);\n await fs.mkdir(path.dirname(full), { recursive: true });\n await fs.appendFile(full, content, \"utf8\");\n return { full };\n}\n\nfunction templateReplace(input: string, vars: Record<string, string>) {\n let out = input;\n for (const [k, v] of Object.entries(vars)) {\n out = out.replaceAll(`{{${k}}}`, v);\n }\n return out;\n}\n\n\n// v2 runner-only execution: Kitchen never executes workflow tool nodes.\n// These helpers exist only to support approval node UX (best-effort outbound notification metadata).\nasync function resolveApprovalChannel({\n workflow,\n}: {\n workflow: WorkflowFileV1;\n}): Promise<{ provider: string | null; target: string | null }> {\n // Best-effort: allow workflow.meta.approvalChannel to declare a delivery target.\n const meta = workflow.meta && typeof workflow.meta === \"object\" ? (workflow.meta as Record<string, unknown>) : {};\n const approvalChannel = typeof meta.approvalChannel === \"string\" ? meta.approvalChannel.trim() : \"\";\n if (!approvalChannel) return { provider: null, target: null };\n\n // Format: \"telegram:-100123456\" or just \"-100123456\".\n if (approvalChannel.includes(\":\")) {\n const [provider, target] = approvalChannel.split(\":\", 2);\n return { provider: provider || null, target: target || null };\n }\n\n return { provider: \"telegram\", target: approvalChannel };\n}\n\nasync function maybeSendApprovalRequest(_args: {\n teamId: string;\n workflow: WorkflowFileV1;\n run: WorkflowRunFileV1;\n approvalNodeId: string;\n}) {\n // Intentionally NO-OP for now.\n // The runner will handle any external messaging; Kitchen only records state.\n if (!_args) return;\n}\n\nfunction asStringArray(v: unknown): string[] {\n if (!Array.isArray(v)) return [];\n return v.map((x) => String(x ?? \"\").trim()).filter(Boolean);\n}\n\nfunction parseExecCommandFromArgs(\n args: Record<string, unknown>\n): { command: string; bin: string; argv?: string[] } {\n const commandArray = Array.isArray(args.commandArray) ? args.commandArray : Array.isArray(args.command) ? args.command : null;\n if (commandArray && commandArray.length) {\n const parts = commandArray.map((x: unknown) => String(x ?? \"\").trim()).filter(Boolean);\n if (!parts.length) throw new Error(\"runtime.exec requires a non-empty command\");\n return { command: parts.join(\" \"), bin: path.basename(parts[0]), argv: parts };\n }\n\n const cmd = String(args.command ?? \"\").trim();\n if (!cmd) throw new Error(\"runtime.exec requires args.command\");\n const first = cmd.split(/\\s+/)[0] || \"\";\n const bin = path.basename(first);\n return { command: cmd, bin };\n}\n\nasync function execLocal({\n command,\n argv,\n cwd,\n timeoutMs,\n}: {\n command: string;\n argv?: string[];\n cwd?: string;\n timeoutMs: number;\n}): Promise<{ stdout: string; stderr: string; exitCode: number | null; signal: string | null }> {\n // Keep this intentionally simple + safe:\n // - default to argv (no shell) when provided\n // - if only a string is provided, split on whitespace (still no shell)\n const parts = argv && argv.length ? argv : command.split(/\\s+/).filter(Boolean);\n const file = parts[0];\n const fileArgs = parts.slice(1);\n\n return await new Promise((resolve, reject) => {\n const child = spawn(file, fileArgs, {\n cwd,\n shell: false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n const maxBytes = 64 * 1024;\n child.stdout?.on(\"data\", (b: Buffer) => {\n if (stdout.length < maxBytes) stdout += b.toString(\"utf8\").slice(0, maxBytes - stdout.length);\n });\n child.stderr?.on(\"data\", (b: Buffer) => {\n if (stderr.length < maxBytes) stderr += b.toString(\"utf8\").slice(0, maxBytes - stderr.length);\n });\n\n const t = setTimeout(() => {\n child.kill(\"SIGKILL\");\n }, Math.max(0, timeoutMs));\n\n child.on(\"error\", (e) => {\n clearTimeout(t);\n reject(e);\n });\n\n child.on(\"close\", (code, signal) => {\n clearTimeout(t);\n resolve({ stdout, stderr, exitCode: code, signal });\n });\n });\n}\n\nfunction resolveExecPolicy(workflow: WorkflowFileV1, nodeCfg: Record<string, unknown>) {\n const meta = isRecord(workflow.meta) ? workflow.meta : {};\n\n const metaAllowBins = asStringArray((meta as Record<string, unknown>).execAllowBins);\n const metaAllowCommands = asStringArray((meta as Record<string, unknown>).execAllowCommands);\n\n // Node overrides/adds.\n const nodeAllowBins = asStringArray(nodeCfg.execAllowBins);\n const nodeAllowCommands = asStringArray(nodeCfg.execAllowCommands);\n\n return {\n allowBins: new Set([...metaAllowBins, ...nodeAllowBins]),\n allowCommands: new Set([...metaAllowCommands, ...nodeAllowCommands]),\n host: String(nodeCfg.execHost ?? (meta as Record<string, unknown>).execHost ?? \"gateway\"),\n security: String(nodeCfg.execSecurity ?? (meta as Record<string, unknown>).execSecurity ?? \"allowlist\"),\n ask: String(nodeCfg.execAsk ?? (meta as Record<string, unknown>).execAsk ?? \"on-miss\"),\n timeout: Number(nodeCfg.execTimeoutSeconds ?? (meta as Record<string, unknown>).execTimeoutSeconds ?? 300),\n };\n}\n\nasync function executeToolNode({\n teamId,\n workflow,\n run,\n nodeId,\n startedAt,\n endedAt,\n}: {\n teamId: string;\n workflow: WorkflowFileV1;\n run: WorkflowRunFileV1;\n nodeId: string;\n startedAt: string;\n endedAt: string;\n}): Promise<WorkflowRunNodeResultV1> {\n const wfNode = Array.isArray(workflow.nodes) ? workflow.nodes.find((n) => n.id === nodeId) : undefined;\n const cfg = wfNode?.config && typeof wfNode.config === \"object\" ? (wfNode.config as Record<string, unknown>) : {};\n const tool = typeof cfg.tool === \"string\" && cfg.tool.trim() ? cfg.tool.trim() : \"(unknown)\";\n const args = cfg.args && typeof cfg.args === \"object\" ? (cfg.args as Record<string, unknown>) : {};\n\n const vars = {\n date: endedAt,\n \"run.id\": run.id,\n \"workflow.id\": workflow.id,\n \"workflow.name\": workflow.name || workflow.id,\n };\n\n if (tool === \"fs.append\") {\n const pVal = typeof args.path === \"string\" ? args.path : \"\";\n const cVal = typeof args.content === \"string\" ? args.content : \"\";\n if (!pVal) throw new Error(\"fs.append requires args.path\");\n if (!cVal) throw new Error(\"fs.append requires args.content\");\n\n const content = templateReplace(cVal, vars);\n const { full } = await appendTeamFile(teamId, pVal, content);\n return {\n nodeId,\n status: \"success\",\n startedAt,\n endedAt,\n output: { tool, appendedTo: full, bytes: content.length },\n };\n }\n\n if (tool === \"runtime.exec\") {\n const pol = resolveExecPolicy(workflow, cfg);\n const { command, bin, argv } = parseExecCommandFromArgs(args);\n\n if (pol.allowCommands.size && !pol.allowCommands.has(command)) {\n throw new Error(`runtime.exec command not allowlisted: ${command}`);\n }\n if (!pol.allowCommands.size && (pol.allowBins.size === 0 || !pol.allowBins.has(bin))) {\n throw new Error(`runtime.exec bin not allowlisted: ${bin} (set workflow.meta.execAllowBins or node.config.execAllowBins)`);\n }\n\n const workdirRel = typeof args.cwd === \"string\" ? args.cwd : typeof args.workdir === \"string\" ? args.workdir : \"\";\n let workdir: string | undefined;\n if (workdirRel) {\n const teamDir = await getTeamWorkspaceDir(teamId);\n const resolved = path.resolve(teamDir, workdirRel);\n if (!resolved.startsWith(teamDir + path.sep) && resolved !== teamDir) {\n throw new Error(\"runtime.exec cwd must be within the team workspace\");\n }\n workdir = resolved;\n }\n\n const execEnabled = process.env.KITCHEN_ENABLE_WORKFLOW_RUNTIME_EXEC === \"1\";\n if (!execEnabled) {\n throw new Error(\"Tool not available: exec\");\n }\n\n const backend = (process.env.KITCHEN_WORKFLOW_EXEC_BACKEND || \"gateway-first\").trim();\n\n let result: unknown;\n if (backend === \"local\") {\n result = await execLocal({ command, argv, cwd: workdir, timeoutMs: pol.timeout * 1000 });\n } else {\n try {\n result = await toolsInvoke({\n tool: \"exec\",\n args: {\n command,\n workdir,\n timeout: pol.timeout,\n host: pol.host,\n security: pol.security,\n ask: pol.ask,\n },\n });\n } catch (e: unknown) {\n // For dev/testing, fall back to local execution if the gateway doesn't expose exec.\n if (backend === \"gateway-first\" && /Tool not available:\\s*exec/i.test(errorMessage(e))) {\n result = await execLocal({ command, argv, cwd: workdir, timeoutMs: pol.timeout * 1000 });\n } else {\n throw e;\n }\n }\n }\n\n return {\n nodeId,\n status: \"success\",\n startedAt,\n endedAt,\n output: { tool, command, result },\n };\n }\n\n return {\n nodeId,\n status: \"success\",\n startedAt,\n endedAt,\n output: { tool, result: \"(no-op: tool not implemented)\" },\n };\n}\n\nasync function maybeExecutePendingNodesAfterApproval({\n teamId,\n workflow,\n run,\n approvalNodeId,\n decidedAt,\n}: {\n teamId: string;\n workflow: WorkflowFileV1;\n run: WorkflowRunFileV1;\n approvalNodeId: string;\n decidedAt: string;\n}) {\n const wfNodes = Array.isArray(workflow.nodes) ? workflow.nodes : [];\n const approvalIdx = wfNodes.findIndex((n) => n.id === approvalNodeId);\n if (approvalIdx < 0) return run;\n\n const nextNodes: WorkflowRunNodeResultV1[] = Array.isArray(run.nodes)\n ? await Promise.all(\n run.nodes.map(async (n) => {\n const wfIdx = wfNodes.findIndex((wfn) => wfn.id === n.nodeId);\n const afterApproval = wfIdx >= 0 && wfIdx > approvalIdx;\n\n if (!afterApproval || n.status !== \"pending\") return n;\n\n const wfNode = wfIdx >= 0 ? wfNodes[wfIdx] : undefined;\n const startedAt = n.startedAt ?? decidedAt;\n\n if (wfNode?.type === \"tool\") {\n try {\n return await executeToolNode({\n teamId,\n workflow,\n run,\n nodeId: n.nodeId,\n startedAt,\n endedAt: decidedAt,\n });\n } catch (e: unknown) {\n return {\n ...n,\n status: \"error\",\n startedAt,\n endedAt: decidedAt,\n output: { error: errorMessage(e) },\n };\n }\n }\n\n return {\n ...n,\n status: \"success\",\n startedAt,\n endedAt: decidedAt,\n output: n.output ?? { note: \"(resumed after approval)\" },\n };\n })\n )\n : [];\n\n return { ...run, nodes: nextNodes };\n}\n\n\nexport async function GET(req: Request) {\n return handleWorkflowRunsGet(req, readWorkflowRun, listWorkflowRuns);\n}\n\nexport async function POST(req: Request) {\n const parsed = await parseJsonBody(req);\n if (parsed instanceof NextResponse) return parsed;\n const { body: o } = parsed;\n\n const teamId = String(o.teamId ?? \"\").trim();\n const workflowId = String(o.workflowId ?? \"\").trim();\n const mode = String(o.mode ?? \"\").trim();\n const action = String(o.action ?? \"\").trim();\n const modeNorm = mode || \"enqueue\";\n const runIdFromBody = String(o.runId ?? \"\").trim();\n const note = typeof o.note === \"string\" ? o.note : undefined;\n const decidedBy = typeof o.decidedBy === \"string\" ? o.decidedBy : undefined;\n\n // Canonical execution mode:\n // - enqueue: create run only\n // - run_now: create run + kick runner loop\n // (future) execute/run_now option is handled in the runner, not Kitchen.\n\n if (!teamId) return NextResponse.json({ ok: false, error: \"teamId is required\" }, { status: 400 });\n if (!workflowId) return NextResponse.json({ ok: false, error: \"workflowId is required\" }, { status: 400 });\n\n try {\n // Action mode: approve/request_changes/cancel/stop/delete updates an existing run.\n if (action) {\n if (!runIdFromBody) return NextResponse.json({ ok: false, error: \"runId is required for action\" }, { status: 400 });\n if (![\"approve\", \"request_changes\", \"cancel\", \"stop\", \"delete\"].includes(action)) {\n return NextResponse.json({ ok: false, error: `Unsupported action: ${action}` }, { status: 400 });\n }\n\n // Handle stop action\n if (action === \"stop\") {\n const existing = await readWorkflowRun(teamId, workflowId, runIdFromBody);\n const run = existing.run;\n \n // Only allow stopping runs that are active\n if (![\"queued\", \"running\", \"waiting_for_approval\", \"waiting_workers\"].includes(run.status)) {\n return NextResponse.json({ ok: false, error: `Cannot stop run with status: ${run.status}` }, { status: 400 });\n }\n\n const stoppedAt = nowIso();\n const stoppedNodes = Array.isArray(run.nodes)\n ? run.nodes.map((n) => {\n if (n.status === \"pending\" || n.status === \"running\") {\n return {\n ...n,\n status: \"skipped\" as const,\n startedAt: n.startedAt ?? stoppedAt,\n endedAt: stoppedAt,\n output: n.output ?? { note: \"skipped due to stop\" },\n };\n }\n return n;\n })\n : [];\n\n const stoppedRun: WorkflowRunFileV1 = {\n ...run,\n status: \"canceled\",\n endedAt: stoppedAt,\n nodes: stoppedNodes,\n };\n\n const writeResult = await writeWorkflowRun(teamId, workflowId, stoppedRun);\n \n // Add event to ClawRecipes event log for audit trail\n try {\n await appendWorkflowRunEvent(teamId, workflowId, run.id, {\n type: \"workflow.stopped\",\n action: \"stop\",\n stoppedAt,\n reason: \"manual_stop\"\n });\n } catch (eventError) {\n // Don't fail the request if event logging fails\n console.warn(\"Failed to log stop event:\", eventError);\n }\n\n return jsonOkRest({ ...writeResult, runId: run.id });\n }\n\n // Handle delete action\n if (action === \"delete\") {\n // Delete run directory entirely\n const teamDir = await getTeamWorkspaceDir(teamId);\n const runDir = path.join(teamDir, `shared-context/workflow-runs/${runIdFromBody}`);\n \n try {\n await fs.rm(runDir, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, continue with cleanup\n }\n \n // Also clean up legacy formats\n try {\n // Legacy flat file format\n const flatFile = path.join(teamDir, `shared-context/workflow-runs/${runIdFromBody}.run.json`);\n await fs.rm(flatFile, { force: true });\n } catch {\n // File doesn't exist, that's fine\n }\n \n try {\n // Legacy per-workflow directory\n const legacyRunDir = path.join(teamDir, `shared-context/workflows/${workflowId}/runs/${runIdFromBody}`);\n await fs.rm(legacyRunDir, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, that's fine\n }\n\n return jsonOkRest({ ok: true, deleted: true, runId: runIdFromBody });\n }\n\n const existing = await readWorkflowRun(teamId, workflowId, runIdFromBody);\n const run = existing.run;\n\n const approvalNodeId = run.approval?.nodeId || (Array.isArray(run.nodes) ? run.nodes.find((n) => n.status === \"waiting\")?.nodeId : undefined);\n if (!approvalNodeId) {\n return NextResponse.json({ ok: false, error: \"Run is not awaiting approval\" }, { status: 400 });\n }\n\n const decidedAt = nowIso();\n const nextState = action === \"approve\" ? \"approved\" : action === \"request_changes\" ? \"changes_requested\" : \"canceled\";\n\n const nextStatus: WorkflowRunFileV1[\"status\"] =\n nextState === \"approved\" ? \"success\" : nextState === \"canceled\" ? \"canceled\" : \"waiting_for_approval\";\n\n const nextNodes: WorkflowRunNodeResultV1[] = Array.isArray(run.nodes)\n ? run.nodes.map((n) => {\n if (n.nodeId === approvalNodeId) {\n const existingOutput = typeof n.output === \"object\" && n.output ? (n.output as Record<string, unknown>) : {};\n return {\n ...n,\n status: nextState === \"approved\" ? \"success\" : nextState === \"canceled\" ? \"error\" : \"waiting\",\n endedAt: nextState === \"changes_requested\" ? n.endedAt : decidedAt,\n output: {\n ...existingOutput,\n decision: nextState,\n note,\n decidedBy,\n },\n };\n }\n\n if (nextState === \"canceled\" && n.status === \"pending\") {\n return {\n ...n,\n status: \"skipped\",\n startedAt: n.startedAt ?? decidedAt,\n endedAt: decidedAt,\n output: n.output ?? { note: \"skipped due to cancel\" },\n };\n }\n\n return n;\n })\n : [];\n\n const nextRun: WorkflowRunFileV1 = {\n ...run,\n status: nextStatus,\n endedAt: nextStatus === \"success\" || nextStatus === \"canceled\" ? decidedAt : run.endedAt,\n approval: {\n nodeId: approvalNodeId,\n state: nextState,\n requestedAt: run.approval?.requestedAt,\n decidedAt: nextState === \"changes_requested\" ? undefined : decidedAt,\n note,\n decidedBy,\n },\n nodes: nextNodes,\n };\n\n\n let finalRun: WorkflowRunFileV1 = nextRun;\n\n // Best-effort: for sample runs, simulate resuming execution after approval by resolving\n // pending nodes and performing file-first writeback steps (fs.append).\n if (action === \"approve\") {\n try {\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n finalRun = await maybeExecutePendingNodesAfterApproval({\n teamId,\n workflow: wf,\n run: nextRun,\n approvalNodeId,\n decidedAt,\n });\n const hasError = Array.isArray(finalRun.nodes) && finalRun.nodes.some((n) => n.status === \"error\");\n if (hasError) {\n finalRun = { ...finalRun, status: \"error\", endedAt: decidedAt };\n }\n } catch {\n // ignore; keep file-first decision recorded\n }\n }\n\n const writeResult = await writeWorkflowRun(teamId, workflowId, finalRun);\n \n // Add event to ClawRecipes event log for audit trail\n try {\n await appendWorkflowRunEvent(teamId, workflowId, run.id, {\n type: action === \"approve\" ? \"approval.approved\" : action === \"request_changes\" ? \"approval.changes_requested\" : \"approval.canceled\",\n nodeId: approvalNodeId,\n action,\n decidedBy: decidedBy || \"unknown\",\n note: note || undefined,\n decision: nextState\n });\n } catch (eventError) {\n // Don't fail the request if event logging fails\n console.warn(\"Failed to log approval event:\", eventError);\n }\n\n // Write approval file in ClawRecipes format\n try {\n await writeApprovalFile(teamId, workflowId, run.id, approvalNodeId, {\n state: nextState,\n requestedAt: run.approval?.requestedAt,\n decidedAt: nextState === \"changes_requested\" ? undefined : decidedAt,\n note,\n decidedBy\n });\n } catch (approvalFileError) {\n // Don't fail the request if approval file writing fails\n console.warn(\"Failed to write approval file:\", approvalFileError);\n }\n\n return jsonOkRest({ ...writeResult, runId: run.id });\n }\n\n\n\n // Enqueue / run_now (canonical): delegate run creation to the CLI and return the canonical runId.\n // Kitchen must not author any run artifacts in these modes.\n if (modeNorm === \"enqueue\" || modeNorm === \"run_now\") {\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n\n // Preflight: nodes (excluding start/end/approval) must be assigned to an agent.\n const missing = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .filter((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return !String(o.agentId ?? \"\").trim();\n })\n .map((n) => String((n as { id?: unknown }).id ?? \"\"))\n .filter(Boolean);\n if (missing.length) {\n throw new Error(`All nodes must be assigned to an agent. Missing agentId on: ${missing.join(\", \")}`);\n }\n\n const workflowFile = `${workflowId}.workflow.json`;\n\n const enqueueRes = await runOpenClaw([\n \"recipes\",\n \"workflows\",\n \"run\",\n \"--team-id\",\n teamId,\n \"--workflow-file\",\n workflowFile,\n ]);\n if (!enqueueRes.ok) throw new Error(enqueueRes.stderr || enqueueRes.stdout || \"Failed to enqueue workflow run\");\n\n const enqueueJson = JSON.parse(String(enqueueRes.stdout ?? \"{}\")) as {\n ok?: boolean;\n runId?: string;\n runLogPath?: string;\n path?: string;\n };\n \n const rawRunId = String(enqueueJson.runId ?? \"\").trim();\n const runLogPath = String(enqueueJson.runLogPath ?? enqueueJson.path ?? \"\").trim();\n if (!rawRunId && !runLogPath) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const canonicalRunId = (() => {\n const p = runLogPath;\n if (p) {\n const m1 = p.match(/workflow-runs\\/([^/]+)\\/run\\.json$/);\n if (m1?.[1]) return m1[1];\n const m2 = p.match(/workflow-runs\\/([^/]+)\\.run\\.json$/);\n if (m2?.[1]) return m2[1];\n }\n return rawRunId;\n })();\n if (!canonicalRunId) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const enqRunId = canonicalRunId;\n\n if (modeNorm === \"run_now\") {\n const agentListRes = await runOpenClaw([\"agents\", \"list\", \"--json\"]);\n if (!agentListRes.ok) throw new Error(agentListRes.stderr || agentListRes.stdout || \"Failed to list agents\");\n const agentList = JSON.parse(String(agentListRes.stdout ?? \"[]\")) as Array<{ id?: unknown }>;\n const knownAgentIds = new Set(agentList.map((a) => String(a.id ?? \"\").trim()).filter(Boolean));\n\n const requiredAgentIds = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .map((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return String(o.agentId ?? \"\").trim();\n })\n .filter(Boolean);\n\n const uniq = Array.from(new Set(requiredAgentIds));\n const missingAgents = uniq.filter((id) => !knownAgentIds.has(id));\n if (missingAgents.length) {\n throw new Error(\n `Unknown agentId(s) in workflow node assignments: ${missingAgents.join(\", \")}. ` +\n `These must match real OpenClaw agent ids (see openclaw agents list).`\n );\n }\n\n // Claim specifically the run we just enqueued (--run-id prevents picking up stale runs).\n const runnerRes = await runOpenClaw([\"recipes\", \"workflows\", \"runner-once\", \"--team-id\", teamId, \"--run-id\", enqRunId]);\n if (!runnerRes.ok) throw new Error(runnerRes.stderr || runnerRes.stdout || \"Failed to run runner-once\");\n\n // Fire-and-forget: kick workers in the background so the run advances.\n // Cron workers will also pick up the work, so this is just best-effort acceleration.\n // We do NOT await this — return the runId to the UI immediately for redirect.\n const workerAgentIds = [...uniq];\n void (async () => {\n try {\n for (const agentId of workerAgentIds) {\n await runOpenClaw([\n \"recipes\", \"workflows\", \"worker-tick\",\n \"--team-id\", teamId, \"--agent-id\", agentId,\n \"--limit\", \"5\", \"--worker-id\", \"kitchen-run-now\",\n ]);\n }\n const { run: postRun } = await readWorkflowRun(teamId, workflowId, enqRunId);\n const postStatus = String((postRun as unknown as { status?: unknown }).status ?? \"\");\n if (postStatus === \"waiting_workers\") {\n for (const agentId of workerAgentIds) {\n await runOpenClaw([\n \"recipes\", \"workflows\", \"worker-tick\",\n \"--team-id\", teamId, \"--agent-id\", agentId,\n \"--limit\", \"5\", \"--worker-id\", \"kitchen-run-now-pass2\",\n ]);\n }\n }\n } catch { /* best-effort — cron workers will pick up remaining work */ }\n })();\n }\n\n return jsonOkRest({\n ok: true,\n runId: enqRunId,\n path: `shared-context/workflow-runs/${enqRunId}/run.json`,\n ...(runLogPath ? { runLogPath } : {}),\n });\n }\n // Create mode\n const run: WorkflowRunFileV1 =\n modeNorm === \"sample\"\n ? await (async () => {\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n\n const runId = `run-${nowIso().replace(/[:.]/g, \"-\")}-${crypto.randomBytes(3).toString(\"hex\")}`.toLowerCase();\n const t0 = Date.now();\n\n const templateId =\n wf.meta && typeof wf.meta === \"object\" && \"templateId\" in wf.meta ? (wf.meta as Record<string, unknown>).templateId : undefined;\n const isMarketingCadence = templateId === \"marketing-cadence-v1\";\n\n const marketingDrafts = isMarketingCadence\n ? {\n x: {\n hook: \"Stop losing hours to repetitive agent setup.\",\n body: \"ClawRecipes scaffolds entire teams of agents in one command — workflows, roles, conventions, and a human-approval gate before posting.\",\n },\n instagram: {\n hook: \"Ship agent workflows faster.\",\n body: \"From idea → drafted assets → brand QC → approval → posting. File-first workflows you can export and version.\",\n assetNotes: \"Square image: diagram of workflow nodes + approval gate.\",\n },\n tiktok: {\n hook: \"POV: you stop copy/pasting prompts.\",\n script: \"Today I’m building a marketing cadence workflow that researches, drafts, QC’s, then waits for human approval before it posts. File-first. Portable. No magic.\",\n assetNotes: \"15–25s screen recording of the canvas + approval buttons.\",\n },\n youtube: {\n hook: \"Build a marketing cadence workflow (with human approval) in 2 minutes.\",\n script: \"We’ll wire research → drafts → QC → approval → post nodes, and persist the whole thing to shared-context/workflows/*.workflow.json so it’s portable.\",\n assetNotes: \"Thumbnail: workflow canvas with 'Approve & Post' highlighted.\",\n },\n }\n : null;\n\n const approvalIdx = wf.nodes.findIndex((n) => n.type === \"human_approval\");\n const approvalNodeId = approvalIdx >= 0 ? wf.nodes[approvalIdx]?.id : undefined;\n\n const nodeResults: WorkflowRunNodeResultV1[] = wf.nodes.map((n, idx) => {\n const startedAt = new Date(t0 + idx * 350).toISOString();\n const endedAt = new Date(t0 + idx * 350 + 200).toISOString();\n\n const beforeApproval = approvalIdx < 0 ? true : idx < approvalIdx;\n const isApproval = approvalNodeId ? n.id === approvalNodeId : false;\n const afterApproval = approvalIdx >= 0 && idx > approvalIdx;\n\n const base: WorkflowRunNodeResultV1 = {\n nodeId: n.id,\n status: beforeApproval ? \"success\" : afterApproval ? \"pending\" : isApproval ? \"waiting\" : \"success\",\n startedAt,\n endedAt: beforeApproval ? endedAt : undefined,\n };\n\n if (n.type === \"llm\") {\n const marketingOutput =\n beforeApproval && isMarketingCadence\n ? n.id === \"research\"\n ? {\n model: \"(sample)\",\n kind: \"research\",\n bullets: [\n \"New agent teams are compelling when they’re portable + file-first.\",\n \"Human approval gates are mandatory for auto-post workflows.\",\n \"Cron triggers need timezone + preset suggestions.\",\n ],\n }\n : n.id === \"draft_assets\"\n ? {\n model: \"(sample)\",\n kind: \"draft_assets\",\n drafts: marketingDrafts,\n }\n : n.id === \"qc_brand\"\n ? {\n model: \"(sample)\",\n kind: \"qc_brand\",\n notes: [\n \"Keep claims concrete (no ‘magic’).\",\n \"Mention ClawRecipes before OpenClaw.\",\n \"Explicitly state: no posting without approval.\",\n ],\n }\n : {\n model: \"(sample)\",\n text: `Sample output for ${n.id}`,\n }\n : null;\n\n return {\n ...base,\n output: beforeApproval\n ? marketingOutput ?? {\n model: \"(sample)\",\n text: `Sample output for ${n.id}`,\n }\n : undefined,\n };\n }\n\n if (n.type === \"tool\") {\n const toolVal = n.config && typeof n.config === \"object\" ? (n.config as Record<string, unknown>).tool : undefined;\n const tool = typeof toolVal === \"string\" && toolVal.trim() ? toolVal.trim() : \"(unknown)\";\n return {\n ...base,\n output: beforeApproval\n ? {\n tool,\n result: \"(sample tool result)\",\n }\n : undefined,\n };\n }\n\n if (n.type === \"human_approval\") {\n const approvalPacket = isMarketingCadence\n ? {\n channel: \"(sample)\",\n decision: \"pending\",\n options: [\"approve\", \"request_changes\", \"cancel\"],\n packet: {\n templateId: \"marketing-cadence-v1\",\n note: \"Per-platform drafts (sample) — approve to post, request changes to loop, or cancel.\",\n platforms: {\n x: marketingDrafts?.x,\n instagram: marketingDrafts?.instagram,\n tiktok: marketingDrafts?.tiktok,\n youtube: marketingDrafts?.youtube,\n },\n },\n }\n : {\n channel: \"(sample)\",\n decision: \"pending\",\n options: [\"approve\", \"request_changes\", \"cancel\"],\n };\n\n return {\n ...base,\n output: approvalPacket,\n };\n }\n\n return base;\n });\n\n const status: WorkflowRunFileV1[\"status\"] = approvalNodeId ? \"waiting_for_approval\" : \"success\";\n\n const baseRun: WorkflowRunFileV1 = {\n schema: \"clawkitchen.workflow-run.v1\",\n id: runId,\n workflowId,\n startedAt: new Date(t0).toISOString(),\n endedAt: approvalNodeId ? undefined : new Date(t0 + wf.nodes.length * 350 + 200).toISOString(),\n status,\n summary: approvalNodeId\n ? \"Sample run (awaiting approval)\"\n : \"Sample run (generated by ClawKitchen UI)\",\n nodes: nodeResults,\n approval: approvalNodeId\n ? {\n nodeId: approvalNodeId,\n state: \"pending\",\n requestedAt: new Date(t0 + approvalIdx * 350).toISOString(),\n }\n : undefined,\n };\n\n if (approvalNodeId) {\n // Resolve the channel we *intend* to send to so we can record outbound metadata,\n // even though delivery is best-effort.\n const { provider, target } = await resolveApprovalChannel({ workflow: wf });\n\n if (target) {\n try {\n await maybeSendApprovalRequest({ teamId, workflow: wf, run: baseRun, approvalNodeId });\n baseRun.approval = {\n ...baseRun.approval,\n outbound: { provider, target, sentAt: nowIso() },\n } as WorkflowRunFileV1[\"approval\"];\n } catch (e: unknown) {\n baseRun.approval = {\n ...baseRun.approval,\n outbound: { provider, target, error: errorMessage(e), attemptedAt: nowIso() },\n } as WorkflowRunFileV1[\"approval\"];\n }\n }\n }\n\n return baseRun satisfies WorkflowRunFileV1;\n })()\n : await (async () => {\n\n // v2: delegate to CLI for enqueue/run-now (Kitchen should not author run artifacts).\n if (![\"execute\", \"enqueue\", \"run_now\", \"sample\"].includes(modeNorm)) {\n throw new Error(`Unsupported mode: ${modeNorm}`);\n }\n\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n\n // Preflight: nodes (excluding start/end) must be assigned to an agent.\n const missing = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .filter((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return !String(o.agentId ?? \"\").trim();\n })\n .map((n) => String((n as { id?: unknown }).id ?? \"\"))\n .filter(Boolean);\n if (missing.length) {\n throw new Error(`All nodes must be assigned to an agent. Missing agentId on: ${missing.join(\", \")}`);\n }\n\n const workflowFile = `${workflowId}.workflow.json`;\n\n // Delegate enqueue to ClawRecipes (CLI) which owns the canonical run folder/files.\n const enqueueRes = await runOpenClaw([\n \"recipes\",\n \"workflows\",\n \"run\",\n \"--team-id\",\n teamId,\n \"--workflow-file\",\n workflowFile,\n ]);\n if (!enqueueRes.ok) throw new Error(enqueueRes.stderr || enqueueRes.stdout || \"Failed to enqueue workflow run\");\n\n const enqueueJson = JSON.parse(String(enqueueRes.stdout ?? \"{}\")) as {\n ok?: boolean;\n runId?: string;\n runLogPath?: string;\n path?: string;\n };\n \n const rawRunId = String(enqueueJson.runId ?? \"\").trim();\n const runLogPath = String(enqueueJson.runLogPath ?? enqueueJson.path ?? \"\").trim();\n if (!rawRunId && !runLogPath) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const canonicalRunId = (() => {\n const p = runLogPath;\n if (p) {\n const m1 = p.match(/workflow-runs\\/([^/]+)\\/run\\.json$/);\n if (m1?.[1]) return m1[1];\n const m2 = p.match(/workflow-runs\\/([^/]+)\\.run\\.json$/);\n if (m2?.[1]) return m2[1];\n }\n return rawRunId;\n })();\n if (!canonicalRunId) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const enqRunId = canonicalRunId;\n\n if (modeNorm === \"run_now\") {\n // Run now = enqueue + runner + workers.\n // NOTE: `worker-tick --agent-id` must match a real agent id (queue file name).\n // If workflow node agentIds are aliases, we fail with a clear message.\n\n const agentListRes = await runOpenClaw([\"agents\", \"list\", \"--json\"]);\n if (!agentListRes.ok) throw new Error(agentListRes.stderr || agentListRes.stdout || \"Failed to list agents\");\n const agentList = JSON.parse(String(agentListRes.stdout ?? \"[]\")) as Array<{ id?: unknown }>;\n const knownAgentIds = new Set(agentList.map((a) => String(a.id ?? \"\").trim()).filter(Boolean));\n\n // Kick workers for all required agents referenced by the workflow file.\n const requiredAgentIds = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .map((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return String(o.agentId ?? \"\").trim();\n })\n .filter(Boolean);\n\n const uniq = Array.from(new Set(requiredAgentIds));\n const missing = uniq.filter((id) => !knownAgentIds.has(id));\n if (missing.length) {\n throw new Error(\n `Unknown agentId(s) in workflow node assignments: ${missing.join(\", \")}. ` +\n `These must match real OpenClaw agent ids (see openclaw agents list).`\n );\n }\n\n // Kick the runner. If the team queue already contains older runs, runner-once may claim\n // the oldest run first. For \"run_now\" semantics we want to ensure the *newly enqueued*\n // run gets claimed before we tick workers.\n for (let attempt = 0; attempt < 4; attempt++) {\n const runnerRes = await runOpenClaw([\"recipes\", \"workflows\", \"runner-once\", \"--team-id\", teamId]);\n if (!runnerRes.ok) throw new Error(runnerRes.stderr || runnerRes.stdout || \"Failed to run runner-once\");\n\n try {\n const { run } = await readWorkflowRun(teamId, workflowId, enqRunId);\n const statusAny = (run as unknown as { status?: unknown }).status;\n if (statusAny && String(statusAny) != \"queued\") break;\n } catch {\n // If we can't read the run yet, fall through to retry after a short delay.\n }\n\n // Give the filesystem a moment to settle (enqueue/runner writes are file-based).\n await new Promise((r) => setTimeout(r, 250));\n }\n\n // After retries, ensure our run is no longer queued.\n try {\n const { run } = await readWorkflowRun(teamId, workflowId, enqRunId);\n const statusAny = (run as unknown as { status?: unknown }).status;\n if (String(statusAny) === \"queued\") {\n throw new Error(\n `Run now enqueued runId=${enqRunId}, but runner did not claim it yet (queue may contain older runs). ` +\n `Please retry, or run: openclaw recipes workflows runner-once --team-id ${teamId}`\n );\n }\n } catch (e: unknown) {\n // If read fails, still proceed; worker-tick will be a no-op until runner claims.\n // But surface a helpful error if the read error is explicit.\n if (e instanceof Error && e.message.startsWith(\"Run now enqueued\")) throw e;\n }\n\n for (const agentId of uniq) {\n const workerRes = await runOpenClaw([\n \"recipes\",\n \"workflows\",\n \"worker-tick\",\n \"--team-id\",\n teamId,\n \"--agent-id\",\n agentId,\n \"--limit\",\n \"5\",\n \"--worker-id\",\n \"kitchen-run-now\",\n ]);\n if (!workerRes.ok) throw new Error(workerRes.stderr || workerRes.stdout || `Failed worker-tick for ${agentId}`);\n }\n }\n\n // Return a lightweight Kitchen-schema run so the UI can immediately navigate to it.\n return {\n schema: \"clawkitchen.workflow-run.v1\",\n id: enqRunId,\n workflowId,\n teamId,\n startedAt: nowIso(),\n status: \"running\",\n summary: modeNorm === \"run_now\" ? \"Queued + kicked runner/workers\" : \"Queued for workflow runner\",\n nodes: Array.isArray(wf.nodes)\n ? wf.nodes.map((n) => ({ nodeId: String(n.id), status: \"pending\" as const }))\n : [],\n meta: {\n canonicalRunId: enqRunId,\n ...(runLogPath ? { runLogPath } : {}),\n },\n } satisfies WorkflowRunFileV1;\n })();\n\n // IMPORTANT:\n // For enqueue/run_now, Kitchen delegates run creation to the CLI. In that mode,\n // Kitchen must NOT author/overwrite any workflow run artifacts. The CLI has\n // already created the canonical run folder:\n // shared-context/workflow-runs/<runId>/run.json\n // So: return the canonical runId + expected path and let the UI follow up by\n // reading from the canonical location.\n if (modeNorm === \"enqueue\" || modeNorm === \"run_now\") {\n const canonicalRunId = String((run.meta as Record<string, unknown> | undefined)?.canonicalRunId ?? run.id);\n return jsonOkRest({\n ok: true,\n runId: canonicalRunId,\n path: `shared-context/workflow-runs/${canonicalRunId}/run.json`,\n });\n }\n\n return jsonOkRest({ ...(await writeWorkflowRun(teamId, workflowId, run)), runId: run.id });\n } catch (err: unknown) {\n const msg = errorMessage(err);\n if (/^All nodes must be assigned to an agent\\./i.test(msg) || /^Unknown agentId\\(s\\)/i.test(msg)) {\n return NextResponse.json({ ok: false, error: msg }, { status: 400 });\n }\n return NextResponse.json({ ok: false, error: msg }, { status: 500 });\n }\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/teams/workflow-runs/route\",\n pathname: \"/api/teams/workflow-runs\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/app/api/teams/workflow-runs/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/teams/workflow-runs/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":[],"mappings":"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","ignoreList":[1]}
|
|
1
|
+
{"version":3,"sources":["../../../src/app/api/teams/workflow-runs/route.ts","../../../node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["import { NextResponse } from \"next/server\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { jsonOkRest, parseJsonBody } from \"@/lib/api-route-helpers\";\nimport { handleWorkflowRunsGet } from \"@/lib/workflows/api-handlers\";\nimport { errorMessage } from \"@/lib/errors\";\nimport { toolsInvoke } from \"@/lib/gateway\";\nimport { runOpenClaw } from \"@/lib/openclaw\";\nimport { assertSafeRelativeFileName, getTeamWorkspaceDir } from \"@/lib/paths\";\nimport { listWorkflowRuns, readWorkflowRun, writeWorkflowRun, appendWorkflowRunEvent, writeApprovalFile } from \"@/lib/workflows/runs-storage\";\nimport type { WorkflowRunFileV1, WorkflowRunNodeResultV1 } from \"@/lib/workflows/runs-types\";\nimport { readWorkflow } from \"@/lib/workflows/storage\";\nimport type { WorkflowFileV1 } from \"@/lib/workflows/types\";\n\nfunction nowIso() {\n return new Date().toISOString();\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return Boolean(v) && typeof v === \"object\" && !Array.isArray(v);\n}\n\nasync function appendTeamFile(teamId: string, relPath: string, content: string) {\n const safe = assertSafeRelativeFileName(relPath);\n const teamDir = await getTeamWorkspaceDir(teamId);\n const full = path.join(teamDir, safe);\n await fs.mkdir(path.dirname(full), { recursive: true });\n await fs.appendFile(full, content, \"utf8\");\n return { full };\n}\n\nfunction templateReplace(input: string, vars: Record<string, string>) {\n let out = input;\n for (const [k, v] of Object.entries(vars)) {\n out = out.replaceAll(`{{${k}}}`, v);\n }\n return out;\n}\n\n\n// v2 runner-only execution: Kitchen never executes workflow tool nodes.\n// These helpers exist only to support approval node UX (best-effort outbound notification metadata).\nasync function resolveApprovalChannel({\n workflow,\n}: {\n workflow: WorkflowFileV1;\n}): Promise<{ provider: string | null; target: string | null }> {\n // Best-effort: allow workflow.meta.approvalChannel to declare a delivery target.\n const meta = workflow.meta && typeof workflow.meta === \"object\" ? (workflow.meta as Record<string, unknown>) : {};\n const approvalChannel = typeof meta.approvalChannel === \"string\" ? meta.approvalChannel.trim() : \"\";\n if (!approvalChannel) return { provider: null, target: null };\n\n // Format: \"telegram:-100123456\" or just \"-100123456\".\n if (approvalChannel.includes(\":\")) {\n const [provider, target] = approvalChannel.split(\":\", 2);\n return { provider: provider || null, target: target || null };\n }\n\n return { provider: \"telegram\", target: approvalChannel };\n}\n\nasync function maybeSendApprovalRequest(_args: {\n teamId: string;\n workflow: WorkflowFileV1;\n run: WorkflowRunFileV1;\n approvalNodeId: string;\n}) {\n // Intentionally NO-OP for now.\n // The runner will handle any external messaging; Kitchen only records state.\n if (!_args) return;\n}\n\nfunction asStringArray(v: unknown): string[] {\n if (!Array.isArray(v)) return [];\n return v.map((x) => String(x ?? \"\").trim()).filter(Boolean);\n}\n\nfunction parseExecCommandFromArgs(\n args: Record<string, unknown>\n): { command: string; bin: string; argv?: string[] } {\n const commandArray = Array.isArray(args.commandArray) ? args.commandArray : Array.isArray(args.command) ? args.command : null;\n if (commandArray && commandArray.length) {\n const parts = commandArray.map((x: unknown) => String(x ?? \"\").trim()).filter(Boolean);\n if (!parts.length) throw new Error(\"runtime.exec requires a non-empty command\");\n return { command: parts.join(\" \"), bin: path.basename(parts[0]), argv: parts };\n }\n\n const cmd = String(args.command ?? \"\").trim();\n if (!cmd) throw new Error(\"runtime.exec requires args.command\");\n const first = cmd.split(/\\s+/)[0] || \"\";\n const bin = path.basename(first);\n return { command: cmd, bin };\n}\n\nasync function execLocal({\n command,\n argv,\n cwd,\n timeoutMs,\n}: {\n command: string;\n argv?: string[];\n cwd?: string;\n timeoutMs: number;\n}): Promise<{ stdout: string; stderr: string; exitCode: number | null; signal: string | null }> {\n // Keep this intentionally simple + safe:\n // - default to argv (no shell) when provided\n // - if only a string is provided, split on whitespace (still no shell)\n const parts = argv && argv.length ? argv : command.split(/\\s+/).filter(Boolean);\n const file = parts[0];\n const fileArgs = parts.slice(1);\n\n return await new Promise((resolve, reject) => {\n const child = spawn(file, fileArgs, {\n cwd,\n shell: false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n const maxBytes = 64 * 1024;\n child.stdout?.on(\"data\", (b: Buffer) => {\n if (stdout.length < maxBytes) stdout += b.toString(\"utf8\").slice(0, maxBytes - stdout.length);\n });\n child.stderr?.on(\"data\", (b: Buffer) => {\n if (stderr.length < maxBytes) stderr += b.toString(\"utf8\").slice(0, maxBytes - stderr.length);\n });\n\n const t = setTimeout(() => {\n child.kill(\"SIGKILL\");\n }, Math.max(0, timeoutMs));\n\n child.on(\"error\", (e) => {\n clearTimeout(t);\n reject(e);\n });\n\n child.on(\"close\", (code, signal) => {\n clearTimeout(t);\n resolve({ stdout, stderr, exitCode: code, signal });\n });\n });\n}\n\nfunction resolveExecPolicy(workflow: WorkflowFileV1, nodeCfg: Record<string, unknown>) {\n const meta = isRecord(workflow.meta) ? workflow.meta : {};\n\n const metaAllowBins = asStringArray((meta as Record<string, unknown>).execAllowBins);\n const metaAllowCommands = asStringArray((meta as Record<string, unknown>).execAllowCommands);\n\n // Node overrides/adds.\n const nodeAllowBins = asStringArray(nodeCfg.execAllowBins);\n const nodeAllowCommands = asStringArray(nodeCfg.execAllowCommands);\n\n return {\n allowBins: new Set([...metaAllowBins, ...nodeAllowBins]),\n allowCommands: new Set([...metaAllowCommands, ...nodeAllowCommands]),\n host: String(nodeCfg.execHost ?? (meta as Record<string, unknown>).execHost ?? \"gateway\"),\n security: String(nodeCfg.execSecurity ?? (meta as Record<string, unknown>).execSecurity ?? \"allowlist\"),\n ask: String(nodeCfg.execAsk ?? (meta as Record<string, unknown>).execAsk ?? \"on-miss\"),\n timeout: Number(nodeCfg.execTimeoutSeconds ?? (meta as Record<string, unknown>).execTimeoutSeconds ?? 300),\n };\n}\n\nasync function executeToolNode({\n teamId,\n workflow,\n run,\n nodeId,\n startedAt,\n endedAt,\n}: {\n teamId: string;\n workflow: WorkflowFileV1;\n run: WorkflowRunFileV1;\n nodeId: string;\n startedAt: string;\n endedAt: string;\n}): Promise<WorkflowRunNodeResultV1> {\n const wfNode = Array.isArray(workflow.nodes) ? workflow.nodes.find((n) => n.id === nodeId) : undefined;\n const cfg = wfNode?.config && typeof wfNode.config === \"object\" ? (wfNode.config as Record<string, unknown>) : {};\n const tool = typeof cfg.tool === \"string\" && cfg.tool.trim() ? cfg.tool.trim() : \"(unknown)\";\n const args = cfg.args && typeof cfg.args === \"object\" ? (cfg.args as Record<string, unknown>) : {};\n\n const vars = {\n date: endedAt,\n \"run.id\": run.id,\n \"workflow.id\": workflow.id,\n \"workflow.name\": workflow.name || workflow.id,\n };\n\n if (tool === \"fs.append\") {\n const pVal = typeof args.path === \"string\" ? args.path : \"\";\n const cVal = typeof args.content === \"string\" ? args.content : \"\";\n if (!pVal) throw new Error(\"fs.append requires args.path\");\n if (!cVal) throw new Error(\"fs.append requires args.content\");\n\n const content = templateReplace(cVal, vars);\n const { full } = await appendTeamFile(teamId, pVal, content);\n return {\n nodeId,\n status: \"success\",\n startedAt,\n endedAt,\n output: { tool, appendedTo: full, bytes: content.length },\n };\n }\n\n if (tool === \"runtime.exec\") {\n const pol = resolveExecPolicy(workflow, cfg);\n const { command, bin, argv } = parseExecCommandFromArgs(args);\n\n if (pol.allowCommands.size && !pol.allowCommands.has(command)) {\n throw new Error(`runtime.exec command not allowlisted: ${command}`);\n }\n if (!pol.allowCommands.size && (pol.allowBins.size === 0 || !pol.allowBins.has(bin))) {\n throw new Error(`runtime.exec bin not allowlisted: ${bin} (set workflow.meta.execAllowBins or node.config.execAllowBins)`);\n }\n\n const workdirRel = typeof args.cwd === \"string\" ? args.cwd : typeof args.workdir === \"string\" ? args.workdir : \"\";\n let workdir: string | undefined;\n if (workdirRel) {\n const teamDir = await getTeamWorkspaceDir(teamId);\n const resolved = path.resolve(teamDir, workdirRel);\n if (!resolved.startsWith(teamDir + path.sep) && resolved !== teamDir) {\n throw new Error(\"runtime.exec cwd must be within the team workspace\");\n }\n workdir = resolved;\n }\n\n const execEnabled = process.env.KITCHEN_ENABLE_WORKFLOW_RUNTIME_EXEC === \"1\";\n if (!execEnabled) {\n throw new Error(\"Tool not available: exec\");\n }\n\n const backend = (process.env.KITCHEN_WORKFLOW_EXEC_BACKEND || \"gateway-first\").trim();\n\n let result: unknown;\n if (backend === \"local\") {\n result = await execLocal({ command, argv, cwd: workdir, timeoutMs: pol.timeout * 1000 });\n } else {\n try {\n result = await toolsInvoke({\n tool: \"exec\",\n args: {\n command,\n workdir,\n timeout: pol.timeout,\n host: pol.host,\n security: pol.security,\n ask: pol.ask,\n },\n });\n } catch (e: unknown) {\n // For dev/testing, fall back to local execution if the gateway doesn't expose exec.\n if (backend === \"gateway-first\" && /Tool not available:\\s*exec/i.test(errorMessage(e))) {\n result = await execLocal({ command, argv, cwd: workdir, timeoutMs: pol.timeout * 1000 });\n } else {\n throw e;\n }\n }\n }\n\n return {\n nodeId,\n status: \"success\",\n startedAt,\n endedAt,\n output: { tool, command, result },\n };\n }\n\n return {\n nodeId,\n status: \"success\",\n startedAt,\n endedAt,\n output: { tool, result: \"(no-op: tool not implemented)\" },\n };\n}\n\nasync function maybeExecutePendingNodesAfterApproval({\n teamId,\n workflow,\n run,\n approvalNodeId,\n decidedAt,\n}: {\n teamId: string;\n workflow: WorkflowFileV1;\n run: WorkflowRunFileV1;\n approvalNodeId: string;\n decidedAt: string;\n}) {\n const wfNodes = Array.isArray(workflow.nodes) ? workflow.nodes : [];\n const approvalIdx = wfNodes.findIndex((n) => n.id === approvalNodeId);\n if (approvalIdx < 0) return run;\n\n const nextNodes: WorkflowRunNodeResultV1[] = Array.isArray(run.nodes)\n ? await Promise.all(\n run.nodes.map(async (n) => {\n const wfIdx = wfNodes.findIndex((wfn) => wfn.id === n.nodeId);\n const afterApproval = wfIdx >= 0 && wfIdx > approvalIdx;\n\n if (!afterApproval || n.status !== \"pending\") return n;\n\n const wfNode = wfIdx >= 0 ? wfNodes[wfIdx] : undefined;\n const startedAt = n.startedAt ?? decidedAt;\n\n if (wfNode?.type === \"tool\") {\n try {\n return await executeToolNode({\n teamId,\n workflow,\n run,\n nodeId: n.nodeId,\n startedAt,\n endedAt: decidedAt,\n });\n } catch (e: unknown) {\n return {\n ...n,\n status: \"error\",\n startedAt,\n endedAt: decidedAt,\n output: { error: errorMessage(e) },\n };\n }\n }\n\n return {\n ...n,\n status: \"success\",\n startedAt,\n endedAt: decidedAt,\n output: n.output ?? { note: \"(resumed after approval)\" },\n };\n })\n )\n : [];\n\n return { ...run, nodes: nextNodes };\n}\n\n\nexport async function GET(req: Request) {\n return handleWorkflowRunsGet(req, readWorkflowRun, listWorkflowRuns);\n}\n\nexport async function POST(req: Request) {\n const parsed = await parseJsonBody(req);\n if (parsed instanceof NextResponse) return parsed;\n const { body: o } = parsed;\n\n const teamId = String(o.teamId ?? \"\").trim();\n const workflowId = String(o.workflowId ?? \"\").trim();\n const mode = String(o.mode ?? \"\").trim();\n const action = String(o.action ?? \"\").trim();\n const modeNorm = mode || \"enqueue\";\n const runIdFromBody = String(o.runId ?? \"\").trim();\n const note = typeof o.note === \"string\" ? o.note : undefined;\n const decidedBy = typeof o.decidedBy === \"string\" ? o.decidedBy : undefined;\n\n // Canonical execution mode:\n // - enqueue: create run only\n // - run_now: create run + kick runner loop\n // (future) execute/run_now option is handled in the runner, not Kitchen.\n\n if (!teamId) return NextResponse.json({ ok: false, error: \"teamId is required\" }, { status: 400 });\n if (!workflowId) return NextResponse.json({ ok: false, error: \"workflowId is required\" }, { status: 400 });\n\n try {\n // Action mode: approve/request_changes/cancel/stop/delete updates an existing run.\n if (action) {\n if (!runIdFromBody && action !== \"bulk-delete\") return NextResponse.json({ ok: false, error: \"runId is required for action\" }, { status: 400 });\n if (![\"approve\", \"request_changes\", \"cancel\", \"stop\", \"delete\", \"bulk-delete\"].includes(action)) {\n return NextResponse.json({ ok: false, error: `Unsupported action: ${action}` }, { status: 400 });\n }\n\n // Handle bulk-delete action\n if (action === \"bulk-delete\") {\n const runIds = Array.isArray(o.runIds) ? (o.runIds as string[]).map((id) => String(id).trim()).filter(Boolean) : [];\n if (runIds.length === 0) {\n return NextResponse.json({ ok: false, error: \"runIds array is required for bulk-delete\" }, { status: 400 });\n }\n\n const teamDir = await getTeamWorkspaceDir(teamId);\n const deleted: string[] = [];\n const errors: string[] = [];\n\n for (const rid of runIds) {\n try {\n const runDir = path.join(teamDir, `shared-context/workflow-runs/${rid}`);\n await fs.rm(runDir, { recursive: true, force: true }).catch(() => {});\n const flatFile = path.join(teamDir, `shared-context/workflow-runs/${rid}.run.json`);\n await fs.rm(flatFile, { force: true }).catch(() => {});\n const legacyRunDir = path.join(teamDir, `shared-context/workflows/${workflowId}/runs/${rid}`);\n await fs.rm(legacyRunDir, { recursive: true, force: true }).catch(() => {});\n deleted.push(rid);\n } catch (err) {\n errors.push(`${rid}: ${String(err)}`);\n }\n }\n\n return jsonOkRest({ ok: true, deleted, errors, count: deleted.length });\n }\n\n // Handle stop action\n if (action === \"stop\") {\n const existing = await readWorkflowRun(teamId, workflowId, runIdFromBody);\n const run = existing.run;\n \n // Only allow stopping runs that are active\n if (![\"queued\", \"running\", \"waiting_for_approval\", \"waiting_workers\"].includes(run.status)) {\n return NextResponse.json({ ok: false, error: `Cannot stop run with status: ${run.status}` }, { status: 400 });\n }\n\n const stoppedAt = nowIso();\n const stoppedNodes = Array.isArray(run.nodes)\n ? run.nodes.map((n) => {\n if (n.status === \"pending\" || n.status === \"running\") {\n return {\n ...n,\n status: \"skipped\" as const,\n startedAt: n.startedAt ?? stoppedAt,\n endedAt: stoppedAt,\n output: n.output ?? { note: \"skipped due to stop\" },\n };\n }\n return n;\n })\n : [];\n\n const stoppedRun: WorkflowRunFileV1 = {\n ...run,\n status: \"canceled\",\n endedAt: stoppedAt,\n nodes: stoppedNodes,\n };\n\n const writeResult = await writeWorkflowRun(teamId, workflowId, stoppedRun);\n \n // Add event to ClawRecipes event log for audit trail\n try {\n await appendWorkflowRunEvent(teamId, workflowId, run.id, {\n type: \"workflow.stopped\",\n action: \"stop\",\n stoppedAt,\n reason: \"manual_stop\"\n });\n } catch (eventError) {\n // Don't fail the request if event logging fails\n console.warn(\"Failed to log stop event:\", eventError);\n }\n\n return jsonOkRest({ ...writeResult, runId: run.id });\n }\n\n // Handle delete action\n if (action === \"delete\") {\n // Delete run directory entirely\n const teamDir = await getTeamWorkspaceDir(teamId);\n const runDir = path.join(teamDir, `shared-context/workflow-runs/${runIdFromBody}`);\n \n try {\n await fs.rm(runDir, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, continue with cleanup\n }\n \n // Also clean up legacy formats\n try {\n // Legacy flat file format\n const flatFile = path.join(teamDir, `shared-context/workflow-runs/${runIdFromBody}.run.json`);\n await fs.rm(flatFile, { force: true });\n } catch {\n // File doesn't exist, that's fine\n }\n \n try {\n // Legacy per-workflow directory\n const legacyRunDir = path.join(teamDir, `shared-context/workflows/${workflowId}/runs/${runIdFromBody}`);\n await fs.rm(legacyRunDir, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, that's fine\n }\n\n return jsonOkRest({ ok: true, deleted: true, runId: runIdFromBody });\n }\n\n const existing = await readWorkflowRun(teamId, workflowId, runIdFromBody);\n const run = existing.run;\n const isRunnerManaged = \"isRunnerManaged\" in existing && existing.isRunnerManaged;\n\n const approvalNodeId = run.approval?.nodeId || (Array.isArray(run.nodes) ? run.nodes.find((n) => n.status === \"waiting\")?.nodeId : undefined);\n if (!approvalNodeId) {\n return NextResponse.json({ ok: false, error: \"Run is not awaiting approval\" }, { status: 400 });\n }\n\n // For runner-managed runs (ClawRecipes workflow engine), write the\n // approval file, log the event, then call the engine's resume command\n // to actually progress the run — mirrors what Telegram auto-approval does.\n if (isRunnerManaged) {\n const decidedAtRunner = nowIso();\n const nextStateRunner = action === \"approve\" ? \"approved\" : action === \"request_changes\" ? \"rejected\" : \"rejected\";\n\n try {\n await writeApprovalFile(teamId, workflowId, run.id, approvalNodeId, {\n state: nextStateRunner,\n requestedAt: run.approval?.requestedAt,\n decidedAt: decidedAtRunner,\n note,\n decidedBy,\n });\n } catch (e) {\n return NextResponse.json({ ok: false, error: `Failed to write approval: ${e}` }, { status: 500 });\n }\n\n try {\n await appendWorkflowRunEvent(teamId, workflowId, run.id, {\n type: action === \"approve\" ? \"approval.approved\" : \"approval.changes_requested\",\n nodeId: approvalNodeId,\n action,\n decidedBy: decidedBy || \"ClawKitchen UI\",\n note: note || undefined,\n decision: nextStateRunner,\n });\n } catch {\n // non-critical\n }\n\n // Resume the run via the engine CLI so it actually progresses —\n // same path Telegram auto-approval uses (approve + resume).\n let resumeError: string | undefined;\n try {\n const resumeRes = await runOpenClaw([\n \"recipes\", \"workflows\", \"resume\",\n \"--team-id\", teamId,\n \"--run-id\", run.id,\n ]);\n if (!resumeRes.ok) {\n resumeError = resumeRes.stderr || \"Resume command failed\";\n }\n } catch (e) {\n resumeError = String(e);\n }\n\n return jsonOkRest({\n ok: true,\n runId: run.id,\n action,\n state: nextStateRunner,\n runnerManaged: true,\n ...(resumeError ? { resumeError } : { resumed: true }),\n });\n }\n\n const decidedAt = nowIso();\n const nextState = action === \"approve\" ? \"approved\" : action === \"request_changes\" ? \"changes_requested\" : \"canceled\";\n\n const nextStatus: WorkflowRunFileV1[\"status\"] =\n nextState === \"approved\" ? \"success\" : nextState === \"canceled\" ? \"canceled\" : \"waiting_for_approval\";\n\n const nextNodes: WorkflowRunNodeResultV1[] = Array.isArray(run.nodes)\n ? run.nodes.map((n) => {\n if (n.nodeId === approvalNodeId) {\n const existingOutput = typeof n.output === \"object\" && n.output ? (n.output as Record<string, unknown>) : {};\n return {\n ...n,\n status: nextState === \"approved\" ? \"success\" : nextState === \"canceled\" ? \"error\" : \"waiting\",\n endedAt: nextState === \"changes_requested\" ? n.endedAt : decidedAt,\n output: {\n ...existingOutput,\n decision: nextState,\n note,\n decidedBy,\n },\n };\n }\n\n if (nextState === \"canceled\" && n.status === \"pending\") {\n return {\n ...n,\n status: \"skipped\",\n startedAt: n.startedAt ?? decidedAt,\n endedAt: decidedAt,\n output: n.output ?? { note: \"skipped due to cancel\" },\n };\n }\n\n return n;\n })\n : [];\n\n const nextRun: WorkflowRunFileV1 = {\n ...run,\n status: nextStatus,\n endedAt: nextStatus === \"success\" || nextStatus === \"canceled\" ? decidedAt : run.endedAt,\n approval: {\n nodeId: approvalNodeId,\n state: nextState,\n requestedAt: run.approval?.requestedAt,\n decidedAt: nextState === \"changes_requested\" ? undefined : decidedAt,\n note,\n decidedBy,\n },\n nodes: nextNodes,\n };\n\n\n let finalRun: WorkflowRunFileV1 = nextRun;\n\n // Best-effort: for sample runs, simulate resuming execution after approval by resolving\n // pending nodes and performing file-first writeback steps (fs.append).\n if (action === \"approve\") {\n try {\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n finalRun = await maybeExecutePendingNodesAfterApproval({\n teamId,\n workflow: wf,\n run: nextRun,\n approvalNodeId,\n decidedAt,\n });\n const hasError = Array.isArray(finalRun.nodes) && finalRun.nodes.some((n) => n.status === \"error\");\n if (hasError) {\n finalRun = { ...finalRun, status: \"error\", endedAt: decidedAt };\n }\n } catch {\n // ignore; keep file-first decision recorded\n }\n }\n\n const writeResult = await writeWorkflowRun(teamId, workflowId, finalRun);\n \n // Add event to ClawRecipes event log for audit trail\n try {\n await appendWorkflowRunEvent(teamId, workflowId, run.id, {\n type: action === \"approve\" ? \"approval.approved\" : action === \"request_changes\" ? \"approval.changes_requested\" : \"approval.canceled\",\n nodeId: approvalNodeId,\n action,\n decidedBy: decidedBy || \"unknown\",\n note: note || undefined,\n decision: nextState\n });\n } catch (eventError) {\n // Don't fail the request if event logging fails\n console.warn(\"Failed to log approval event:\", eventError);\n }\n\n // Write approval file in ClawRecipes format\n try {\n await writeApprovalFile(teamId, workflowId, run.id, approvalNodeId, {\n state: nextState,\n requestedAt: run.approval?.requestedAt,\n decidedAt: nextState === \"changes_requested\" ? undefined : decidedAt,\n note,\n decidedBy\n });\n } catch (approvalFileError) {\n // Don't fail the request if approval file writing fails\n console.warn(\"Failed to write approval file:\", approvalFileError);\n }\n\n return jsonOkRest({ ...writeResult, runId: run.id });\n }\n\n\n\n // Enqueue / run_now (canonical): delegate run creation to the CLI and return the canonical runId.\n // Kitchen must not author any run artifacts in these modes.\n if (modeNorm === \"enqueue\" || modeNorm === \"run_now\") {\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n\n // Preflight: nodes (excluding start/end/approval) must be assigned to an agent.\n const missing = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .filter((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return !String(o.agentId ?? \"\").trim();\n })\n .map((n) => String((n as { id?: unknown }).id ?? \"\"))\n .filter(Boolean);\n if (missing.length) {\n throw new Error(`All nodes must be assigned to an agent. Missing agentId on: ${missing.join(\", \")}`);\n }\n\n const workflowFile = `${workflowId}.workflow.json`;\n\n const enqueueRes = await runOpenClaw([\n \"recipes\",\n \"workflows\",\n \"run\",\n \"--team-id\",\n teamId,\n \"--workflow-file\",\n workflowFile,\n ]);\n if (!enqueueRes.ok) throw new Error(enqueueRes.stderr || enqueueRes.stdout || \"Failed to enqueue workflow run\");\n\n const enqueueJson = JSON.parse(String(enqueueRes.stdout ?? \"{}\")) as {\n ok?: boolean;\n runId?: string;\n runLogPath?: string;\n path?: string;\n };\n \n const rawRunId = String(enqueueJson.runId ?? \"\").trim();\n const runLogPath = String(enqueueJson.runLogPath ?? enqueueJson.path ?? \"\").trim();\n if (!rawRunId && !runLogPath) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const canonicalRunId = (() => {\n const p = runLogPath;\n if (p) {\n const m1 = p.match(/workflow-runs\\/([^/]+)\\/run\\.json$/);\n if (m1?.[1]) return m1[1];\n const m2 = p.match(/workflow-runs\\/([^/]+)\\.run\\.json$/);\n if (m2?.[1]) return m2[1];\n }\n return rawRunId;\n })();\n if (!canonicalRunId) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const enqRunId = canonicalRunId;\n\n if (modeNorm === \"run_now\") {\n const agentListRes = await runOpenClaw([\"agents\", \"list\", \"--json\"]);\n if (!agentListRes.ok) throw new Error(agentListRes.stderr || agentListRes.stdout || \"Failed to list agents\");\n const agentList = JSON.parse(String(agentListRes.stdout ?? \"[]\")) as Array<{ id?: unknown }>;\n const knownAgentIds = new Set(agentList.map((a) => String(a.id ?? \"\").trim()).filter(Boolean));\n\n const requiredAgentIds = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .map((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return String(o.agentId ?? \"\").trim();\n })\n .filter(Boolean);\n\n const uniq = Array.from(new Set(requiredAgentIds));\n const missingAgents = uniq.filter((id) => !knownAgentIds.has(id));\n if (missingAgents.length) {\n throw new Error(\n `Unknown agentId(s) in workflow node assignments: ${missingAgents.join(\", \")}. ` +\n `These must match real OpenClaw agent ids (see openclaw agents list).`\n );\n }\n\n // Claim specifically the run we just enqueued (--run-id prevents picking up stale runs).\n const runnerRes = await runOpenClaw([\"recipes\", \"workflows\", \"runner-once\", \"--team-id\", teamId, \"--run-id\", enqRunId]);\n if (!runnerRes.ok) throw new Error(runnerRes.stderr || runnerRes.stdout || \"Failed to run runner-once\");\n\n // Fire-and-forget: kick workers in the background so the run advances.\n // Cron workers will also pick up the work, so this is just best-effort acceleration.\n // We do NOT await this — return the runId to the UI immediately for redirect.\n const workerAgentIds = [...uniq];\n void (async () => {\n try {\n for (const agentId of workerAgentIds) {\n await runOpenClaw([\n \"recipes\", \"workflows\", \"worker-tick\",\n \"--team-id\", teamId, \"--agent-id\", agentId,\n \"--limit\", \"5\", \"--worker-id\", \"kitchen-run-now\",\n ]);\n }\n const { run: postRun } = await readWorkflowRun(teamId, workflowId, enqRunId);\n const postStatus = String((postRun as unknown as { status?: unknown }).status ?? \"\");\n if (postStatus === \"waiting_workers\") {\n for (const agentId of workerAgentIds) {\n await runOpenClaw([\n \"recipes\", \"workflows\", \"worker-tick\",\n \"--team-id\", teamId, \"--agent-id\", agentId,\n \"--limit\", \"5\", \"--worker-id\", \"kitchen-run-now-pass2\",\n ]);\n }\n }\n } catch { /* best-effort — cron workers will pick up remaining work */ }\n })();\n }\n\n return jsonOkRest({\n ok: true,\n runId: enqRunId,\n path: `shared-context/workflow-runs/${enqRunId}/run.json`,\n ...(runLogPath ? { runLogPath } : {}),\n });\n }\n // Create mode\n const run: WorkflowRunFileV1 =\n modeNorm === \"sample\"\n ? await (async () => {\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n\n const runId = `run-${nowIso().replace(/[:.]/g, \"-\")}-${crypto.randomBytes(3).toString(\"hex\")}`.toLowerCase();\n const t0 = Date.now();\n\n const templateId =\n wf.meta && typeof wf.meta === \"object\" && \"templateId\" in wf.meta ? (wf.meta as Record<string, unknown>).templateId : undefined;\n const isMarketingCadence = templateId === \"marketing-cadence-v1\";\n\n const marketingDrafts = isMarketingCadence\n ? {\n x: {\n hook: \"Stop losing hours to repetitive agent setup.\",\n body: \"ClawRecipes scaffolds entire teams of agents in one command — workflows, roles, conventions, and a human-approval gate before posting.\",\n },\n instagram: {\n hook: \"Ship agent workflows faster.\",\n body: \"From idea → drafted assets → brand QC → approval → posting. File-first workflows you can export and version.\",\n assetNotes: \"Square image: diagram of workflow nodes + approval gate.\",\n },\n tiktok: {\n hook: \"POV: you stop copy/pasting prompts.\",\n script: \"Today I’m building a marketing cadence workflow that researches, drafts, QC’s, then waits for human approval before it posts. File-first. Portable. No magic.\",\n assetNotes: \"15–25s screen recording of the canvas + approval buttons.\",\n },\n youtube: {\n hook: \"Build a marketing cadence workflow (with human approval) in 2 minutes.\",\n script: \"We’ll wire research → drafts → QC → approval → post nodes, and persist the whole thing to shared-context/workflows/*.workflow.json so it’s portable.\",\n assetNotes: \"Thumbnail: workflow canvas with 'Approve & Post' highlighted.\",\n },\n }\n : null;\n\n const approvalIdx = wf.nodes.findIndex((n) => n.type === \"human_approval\");\n const approvalNodeId = approvalIdx >= 0 ? wf.nodes[approvalIdx]?.id : undefined;\n\n const nodeResults: WorkflowRunNodeResultV1[] = wf.nodes.map((n, idx) => {\n const startedAt = new Date(t0 + idx * 350).toISOString();\n const endedAt = new Date(t0 + idx * 350 + 200).toISOString();\n\n const beforeApproval = approvalIdx < 0 ? true : idx < approvalIdx;\n const isApproval = approvalNodeId ? n.id === approvalNodeId : false;\n const afterApproval = approvalIdx >= 0 && idx > approvalIdx;\n\n const base: WorkflowRunNodeResultV1 = {\n nodeId: n.id,\n status: beforeApproval ? \"success\" : afterApproval ? \"pending\" : isApproval ? \"waiting\" : \"success\",\n startedAt,\n endedAt: beforeApproval ? endedAt : undefined,\n };\n\n if (n.type === \"llm\") {\n const marketingOutput =\n beforeApproval && isMarketingCadence\n ? n.id === \"research\"\n ? {\n model: \"(sample)\",\n kind: \"research\",\n bullets: [\n \"New agent teams are compelling when they’re portable + file-first.\",\n \"Human approval gates are mandatory for auto-post workflows.\",\n \"Cron triggers need timezone + preset suggestions.\",\n ],\n }\n : n.id === \"draft_assets\"\n ? {\n model: \"(sample)\",\n kind: \"draft_assets\",\n drafts: marketingDrafts,\n }\n : n.id === \"qc_brand\"\n ? {\n model: \"(sample)\",\n kind: \"qc_brand\",\n notes: [\n \"Keep claims concrete (no ‘magic’).\",\n \"Mention ClawRecipes before OpenClaw.\",\n \"Explicitly state: no posting without approval.\",\n ],\n }\n : {\n model: \"(sample)\",\n text: `Sample output for ${n.id}`,\n }\n : null;\n\n return {\n ...base,\n output: beforeApproval\n ? marketingOutput ?? {\n model: \"(sample)\",\n text: `Sample output for ${n.id}`,\n }\n : undefined,\n };\n }\n\n if (n.type === \"tool\") {\n const toolVal = n.config && typeof n.config === \"object\" ? (n.config as Record<string, unknown>).tool : undefined;\n const tool = typeof toolVal === \"string\" && toolVal.trim() ? toolVal.trim() : \"(unknown)\";\n return {\n ...base,\n output: beforeApproval\n ? {\n tool,\n result: \"(sample tool result)\",\n }\n : undefined,\n };\n }\n\n if (n.type === \"human_approval\") {\n const approvalPacket = isMarketingCadence\n ? {\n channel: \"(sample)\",\n decision: \"pending\",\n options: [\"approve\", \"request_changes\", \"cancel\"],\n packet: {\n templateId: \"marketing-cadence-v1\",\n note: \"Per-platform drafts (sample) — approve to post, request changes to loop, or cancel.\",\n platforms: {\n x: marketingDrafts?.x,\n instagram: marketingDrafts?.instagram,\n tiktok: marketingDrafts?.tiktok,\n youtube: marketingDrafts?.youtube,\n },\n },\n }\n : {\n channel: \"(sample)\",\n decision: \"pending\",\n options: [\"approve\", \"request_changes\", \"cancel\"],\n };\n\n return {\n ...base,\n output: approvalPacket,\n };\n }\n\n return base;\n });\n\n const status: WorkflowRunFileV1[\"status\"] = approvalNodeId ? \"waiting_for_approval\" : \"success\";\n\n const baseRun: WorkflowRunFileV1 = {\n schema: \"clawkitchen.workflow-run.v1\",\n id: runId,\n workflowId,\n startedAt: new Date(t0).toISOString(),\n endedAt: approvalNodeId ? undefined : new Date(t0 + wf.nodes.length * 350 + 200).toISOString(),\n status,\n summary: approvalNodeId\n ? \"Sample run (awaiting approval)\"\n : \"Sample run (generated by ClawKitchen UI)\",\n nodes: nodeResults,\n approval: approvalNodeId\n ? {\n nodeId: approvalNodeId,\n state: \"pending\",\n requestedAt: new Date(t0 + approvalIdx * 350).toISOString(),\n }\n : undefined,\n };\n\n if (approvalNodeId) {\n // Resolve the channel we *intend* to send to so we can record outbound metadata,\n // even though delivery is best-effort.\n const { provider, target } = await resolveApprovalChannel({ workflow: wf });\n\n if (target) {\n try {\n await maybeSendApprovalRequest({ teamId, workflow: wf, run: baseRun, approvalNodeId });\n baseRun.approval = {\n ...baseRun.approval,\n outbound: { provider, target, sentAt: nowIso() },\n } as WorkflowRunFileV1[\"approval\"];\n } catch (e: unknown) {\n baseRun.approval = {\n ...baseRun.approval,\n outbound: { provider, target, error: errorMessage(e), attemptedAt: nowIso() },\n } as WorkflowRunFileV1[\"approval\"];\n }\n }\n }\n\n return baseRun satisfies WorkflowRunFileV1;\n })()\n : await (async () => {\n\n // v2: delegate to CLI for enqueue/run-now (Kitchen should not author run artifacts).\n if (![\"execute\", \"enqueue\", \"run_now\", \"sample\"].includes(modeNorm)) {\n throw new Error(`Unsupported mode: ${modeNorm}`);\n }\n\n const wf = (await readWorkflow(teamId, workflowId)).workflow;\n\n // Preflight: nodes (excluding start/end) must be assigned to an agent.\n const missing = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .filter((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return !String(o.agentId ?? \"\").trim();\n })\n .map((n) => String((n as { id?: unknown }).id ?? \"\"))\n .filter(Boolean);\n if (missing.length) {\n throw new Error(`All nodes must be assigned to an agent. Missing agentId on: ${missing.join(\", \")}`);\n }\n\n const workflowFile = `${workflowId}.workflow.json`;\n\n // Delegate enqueue to ClawRecipes (CLI) which owns the canonical run folder/files.\n const enqueueRes = await runOpenClaw([\n \"recipes\",\n \"workflows\",\n \"run\",\n \"--team-id\",\n teamId,\n \"--workflow-file\",\n workflowFile,\n ]);\n if (!enqueueRes.ok) throw new Error(enqueueRes.stderr || enqueueRes.stdout || \"Failed to enqueue workflow run\");\n\n const enqueueJson = JSON.parse(String(enqueueRes.stdout ?? \"{}\")) as {\n ok?: boolean;\n runId?: string;\n runLogPath?: string;\n path?: string;\n };\n \n const rawRunId = String(enqueueJson.runId ?? \"\").trim();\n const runLogPath = String(enqueueJson.runLogPath ?? enqueueJson.path ?? \"\").trim();\n if (!rawRunId && !runLogPath) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const canonicalRunId = (() => {\n const p = runLogPath;\n if (p) {\n const m1 = p.match(/workflow-runs\\/([^/]+)\\/run\\.json$/);\n if (m1?.[1]) return m1[1];\n const m2 = p.match(/workflow-runs\\/([^/]+)\\.run\\.json$/);\n if (m2?.[1]) return m2[1];\n }\n return rawRunId;\n })();\n if (!canonicalRunId) throw new Error(\"Enqueue succeeded but did not return runId\");\n \n const enqRunId = canonicalRunId;\n\n if (modeNorm === \"run_now\") {\n // Run now = enqueue + runner + workers.\n // NOTE: `worker-tick --agent-id` must match a real agent id (queue file name).\n // If workflow node agentIds are aliases, we fail with a clear message.\n\n const agentListRes = await runOpenClaw([\"agents\", \"list\", \"--json\"]);\n if (!agentListRes.ok) throw new Error(agentListRes.stderr || agentListRes.stdout || \"Failed to list agents\");\n const agentList = JSON.parse(String(agentListRes.stdout ?? \"[]\")) as Array<{ id?: unknown }>;\n const knownAgentIds = new Set(agentList.map((a) => String(a.id ?? \"\").trim()).filter(Boolean));\n\n // Kick workers for all required agents referenced by the workflow file.\n const requiredAgentIds = (Array.isArray(wf.nodes) ? wf.nodes : [])\n .filter((n) =>\n n &&\n typeof n === \"object\" &&\n (n as { type?: unknown }).type !== \"start\" &&\n (n as { type?: unknown }).type !== \"end\" &&\n (n as { type?: unknown }).type !== \"human_approval\"\n )\n .map((n) => {\n const cfg = (n as { config?: unknown }).config;\n const o = cfg && typeof cfg === \"object\" && !Array.isArray(cfg) ? (cfg as Record<string, unknown>) : {};\n return String(o.agentId ?? \"\").trim();\n })\n .filter(Boolean);\n\n const uniq = Array.from(new Set(requiredAgentIds));\n const missing = uniq.filter((id) => !knownAgentIds.has(id));\n if (missing.length) {\n throw new Error(\n `Unknown agentId(s) in workflow node assignments: ${missing.join(\", \")}. ` +\n `These must match real OpenClaw agent ids (see openclaw agents list).`\n );\n }\n\n // Kick the runner. If the team queue already contains older runs, runner-once may claim\n // the oldest run first. For \"run_now\" semantics we want to ensure the *newly enqueued*\n // run gets claimed before we tick workers.\n for (let attempt = 0; attempt < 4; attempt++) {\n const runnerRes = await runOpenClaw([\"recipes\", \"workflows\", \"runner-once\", \"--team-id\", teamId]);\n if (!runnerRes.ok) throw new Error(runnerRes.stderr || runnerRes.stdout || \"Failed to run runner-once\");\n\n try {\n const { run } = await readWorkflowRun(teamId, workflowId, enqRunId);\n const statusAny = (run as unknown as { status?: unknown }).status;\n if (statusAny && String(statusAny) != \"queued\") break;\n } catch {\n // If we can't read the run yet, fall through to retry after a short delay.\n }\n\n // Give the filesystem a moment to settle (enqueue/runner writes are file-based).\n await new Promise((r) => setTimeout(r, 250));\n }\n\n // After retries, ensure our run is no longer queued.\n try {\n const { run } = await readWorkflowRun(teamId, workflowId, enqRunId);\n const statusAny = (run as unknown as { status?: unknown }).status;\n if (String(statusAny) === \"queued\") {\n throw new Error(\n `Run now enqueued runId=${enqRunId}, but runner did not claim it yet (queue may contain older runs). ` +\n `Please retry, or run: openclaw recipes workflows runner-once --team-id ${teamId}`\n );\n }\n } catch (e: unknown) {\n // If read fails, still proceed; worker-tick will be a no-op until runner claims.\n // But surface a helpful error if the read error is explicit.\n if (e instanceof Error && e.message.startsWith(\"Run now enqueued\")) throw e;\n }\n\n for (const agentId of uniq) {\n const workerRes = await runOpenClaw([\n \"recipes\",\n \"workflows\",\n \"worker-tick\",\n \"--team-id\",\n teamId,\n \"--agent-id\",\n agentId,\n \"--limit\",\n \"5\",\n \"--worker-id\",\n \"kitchen-run-now\",\n ]);\n if (!workerRes.ok) throw new Error(workerRes.stderr || workerRes.stdout || `Failed worker-tick for ${agentId}`);\n }\n }\n\n // Return a lightweight Kitchen-schema run so the UI can immediately navigate to it.\n return {\n schema: \"clawkitchen.workflow-run.v1\",\n id: enqRunId,\n workflowId,\n teamId,\n startedAt: nowIso(),\n status: \"running\",\n summary: modeNorm === \"run_now\" ? \"Queued + kicked runner/workers\" : \"Queued for workflow runner\",\n nodes: Array.isArray(wf.nodes)\n ? wf.nodes.map((n) => ({ nodeId: String(n.id), status: \"pending\" as const }))\n : [],\n meta: {\n canonicalRunId: enqRunId,\n ...(runLogPath ? { runLogPath } : {}),\n },\n } satisfies WorkflowRunFileV1;\n })();\n\n // IMPORTANT:\n // For enqueue/run_now, Kitchen delegates run creation to the CLI. In that mode,\n // Kitchen must NOT author/overwrite any workflow run artifacts. The CLI has\n // already created the canonical run folder:\n // shared-context/workflow-runs/<runId>/run.json\n // So: return the canonical runId + expected path and let the UI follow up by\n // reading from the canonical location.\n if (modeNorm === \"enqueue\" || modeNorm === \"run_now\") {\n const canonicalRunId = String((run.meta as Record<string, unknown> | undefined)?.canonicalRunId ?? run.id);\n return jsonOkRest({\n ok: true,\n runId: canonicalRunId,\n path: `shared-context/workflow-runs/${canonicalRunId}/run.json`,\n });\n }\n\n return jsonOkRest({ ...(await writeWorkflowRun(teamId, workflowId, run)), runId: run.id });\n } catch (err: unknown) {\n const msg = errorMessage(err);\n if (/^All nodes must be assigned to an agent\\./i.test(msg) || /^Unknown agentId\\(s\\)/i.test(msg)) {\n return NextResponse.json({ ok: false, error: msg }, { status: 400 });\n }\n return NextResponse.json({ ok: false, error: msg }, { status: 500 });\n }\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/teams/workflow-runs/route\",\n pathname: \"/api/teams/workflow-runs\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/app/api/teams/workflow-runs/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/teams/workflow-runs/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":[],"mappings":"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","ignoreList":[1]}
|
package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[80923,e=>{"use strict";var t=e.i(47909),n=e.i(74017),r=e.i(96250),i=e.i(59756),a=e.i(61916),o=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),f=e.i(70101),m=e.i(54468),h=e.i(10372),y=e.i(93695);e.i(52474);var g=e.i(220),R=e.i(12714),S=e.i(50227),w=e.i(89171),v=e.i(85067),x=e.i(40317);let N="team.jsonl",j="pinned.jsonl";function k(e){let t=e.trim();if(!t)return{parsed:null};try{return{parsed:JSON.parse(t)}}catch(e){return{parsed:null,error:`Invalid JSON: ${String(e?.message??e)}`}}}function E(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.ts??"").trim(),n=String(e.author??"").trim(),r=String(e.type??"").trim(),i=String(e.content??"").trim();if(!t&&!i)return null;let a=e.source;return{ts:t||new Date().toISOString(),author:n||"unknown",type:r||"entry",content:i||JSON.stringify(e),source:a}}function A(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.file??"").trim(),n=Number(e.line);return t.endsWith(".jsonl")&&Number.isFinite(n)&&!(n<=0)?{file:t,line:Math.floor(n)}:null}async function C(e){try{return(await R.default.readFile(e,"utf8")).split(/\r?\n/)}catch{return[]}}async function O(e){try{return await R.default.readFile(e,"utf8")}catch{return""}}async function _(e){try{let t=await R.default.readdir(e),n=[];for(let r of t)try{let t=await R.default.stat(S.default.join(e,r));if(!t.isFile())continue;let i=S.default.extname(r).toLowerCase(),a=".jsonl"===i?"jsonl":".md"===i?"md":"other";n.push({name:r,kind:a,sizeBytes:t.size,modifiedAt:t.mtime.toISOString()})}catch{}return n.sort((e,t)=>e.name.localeCompare(t.name)),n}catch{return[]}}async function b(e){return(0,v.withTeamContextFromQuery)(e,async({teamId:e,teamDir:t})=>{try{let n=S.default.join(t,"shared-context","memory"),r=await _(n),i=[];for(let e of r.filter(e=>"jsonl"===e.kind)){let t=await C(S.default.join(n,e.name)),r=function(e,t){let n=[];for(let r=0;r<e.length;r++){let i=(e[r]??"").trim();if(!i)continue;let{parsed:a,error:o}=k(i);if(o){n.push({ts:new Date().toISOString(),author:"system",type:"parse-error",content:i.slice(0,500),_file:t,_line:r+1,_parseError:o});continue}let s=E(a);if(!s){a&&"object"==typeof a&&n.push({ts:String(a.ts??new Date().toISOString()),author:String(a.author??"unknown"),type:String(a.type??"entry"),content:JSON.stringify(a),_file:t,_line:r+1});continue}n.push({...s,_file:t,_line:r+1})}return n}(t,e.name);i.push(...r)}let a=S.default.join(n,j),o=await C(a),s=new Map;for(let e of o){let{parsed:t}=k(e),n=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.op??"").trim(),n=String(e.ts??"").trim(),r=String(e.actor??"").trim(),i=A(e.key);if(!t||!n||!r||!i)return null;if("pin"===t){let t=E(e.item);return t?{op:"pin",ts:n,actor:r,key:i,item:t}:null}return"unpin"===t?{op:"unpin",ts:n,actor:r,key:i}:null}(t);if(!n)continue;let r=`${n.key.file}:${n.key.line}`;"pin"===n.op?s.set(r,{key:n.key,item:n.item,pinnedAt:n.ts,pinnedBy:n.actor}):s.delete(r)}let l=Array.from(s.values()).map(({key:e,item:t,pinnedAt:n,pinnedBy:r})=>({...t,_file:e.file,_line:e.line,pinnedAt:n,pinnedBy:r,_key:`${e.file}:${e.line}`}));l.sort((e,t)=>String(t.pinnedAt).localeCompare(String(e.pinnedAt))||String(t.ts).localeCompare(String(e.ts)));let u=new Set(l.map(e=>e._key)),d=i.filter(e=>!u.has(`${e._file??""}:${e._line??0}`)).sort((e,t)=>String(t.ts).localeCompare(String(e.ts))).slice(0,200),p=r.filter(e=>"md"===e.kind),c=[];for(let e of p){let t=await O(S.default.join(n,e.name));c.push({name:e.name,content:t,sizeBytes:e.sizeBytes,modifiedAt:e.modifiedAt})}return w.NextResponse.json({ok:!0,teamId:e,memoryDir:n,files:r,markdownFiles:c,pinnedItems:l,items:d})}catch(e){return w.NextResponse.json({ok:!1,error:(0,x.errorMessage)(e)},{status:500})}})}async function I(e){return(0,v.withTeamContextFromQuery)(e,async({teamId:t,teamDir:n})=>{let r;try{r=await e.json()}catch{return w.NextResponse.json({ok:!1,error:"Invalid JSON"},{status:400})}let i=r&&"object"==typeof r?r:{},a=String(i.op??"append").trim()||"append",o=String(i.actor??"").trim()||`${t}-lead`;try{let e=S.default.join(n,"shared-context","memory");if(await R.default.mkdir(e,{recursive:!0}),"append"===a){let n=String(i.ts??"").trim(),r=String(i.author??"").trim(),a=String(i.type??"").trim(),o=String(i.content??"").trim(),s=i.source;if(!n||!r||!a||!o)return w.NextResponse.json({ok:!1,error:"ts, author, type, and content are required"},{status:400});let l=String(i.file??N).trim()||N;if(!l.endsWith(".jsonl")||l.includes("/")||l.includes("\\")||l===j)return w.NextResponse.json({ok:!1,error:"Invalid file target"},{status:400});let u=S.default.join(e,l),d={ts:n,author:r,type:a,content:o,...void 0!==s?{source:s}:{}};return await R.default.appendFile(u,JSON.stringify(d)+"\n","utf8"),w.NextResponse.json({ok:!0,teamId:t,file:l,item:d})}if("save-md"===a){let n=String(i.file??"").trim(),r=String(i.content??"");if(!n||!n.endsWith(".md")||n.includes("/")||n.includes("\\"))return w.NextResponse.json({ok:!1,error:"Invalid markdown file name"},{status:400});let a=S.default.join(e,n);return await R.default.writeFile(a,r,"utf8"),w.NextResponse.json({ok:!0,teamId:t,file:n,op:"save-md"})}if("delete"===a){let n=String(i.file??"").trim(),r=Number(i.line);if(!n.endsWith(".jsonl")||n.includes("/")||n.includes("\\")||n===j)return w.NextResponse.json({ok:!1,error:"Invalid file"},{status:400});if(!Number.isFinite(r)||r<1)return w.NextResponse.json({ok:!1,error:"Invalid line number"},{status:400});let a=S.default.join(e,n),o=await C(a),s=Math.floor(r)-1;if(s<0||s>=o.length)return w.NextResponse.json({ok:!1,error:"Line out of range"},{status:400});return o.splice(s,1),await R.default.writeFile(a,o.join("\n"),"utf8"),w.NextResponse.json({ok:!0,teamId:t,file:n,op:"delete",deletedLine:r})}if("pin"===a||"unpin"===a){let n=String(i.ts??new Date().toISOString()).trim(),r=A(i.key);if(!r)return w.NextResponse.json({ok:!1,error:"Invalid key"},{status:400});if("pin"===a){let a=E(i.item);if(!a)return w.NextResponse.json({ok:!1,error:"Invalid item"},{status:400});let s=S.default.join(e,j);return await R.default.appendFile(s,JSON.stringify({op:"pin",ts:n,actor:o,key:r,item:a})+"\n","utf8"),w.NextResponse.json({ok:!0,teamId:t,op:"pin",key:r})}let s=S.default.join(e,j);return await R.default.appendFile(s,JSON.stringify({op:"unpin",ts:n,actor:o,key:r})+"\n","utf8"),w.NextResponse.json({ok:!0,teamId:t,op:"unpin",key:r})}return w.NextResponse.json({ok:!1,error:`Unknown op: ${a}`},{status:400})}catch(e){return w.NextResponse.json({ok:!1,error:(0,x.errorMessage)(e)},{status:500})}})}e.s(["GET",()=>b,"POST",()=>I],35066);var T=e.i(35066);let P=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/teams/memory/route",pathname:"/api/teams/memory",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/teams/memory/route.ts",nextConfigOutput:"standalone",userland:T}),{workAsyncStorage:F,workUnitAsyncStorage:$,serverHooks:D}=P;function H(){return(0,r.patchFetch)({workAsyncStorage:F,workUnitAsyncStorage:$})}async function M(e,t,r){P.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/teams/memory/route";R=R.replace(/\/index$/,"")||"/";let S=await P.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!S)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:w,params:v,nextConfig:x,parsedUrl:N,isDraftMode:j,prerenderManifest:k,routerServerContext:E,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,resolvedPathname:O,clientReferenceManifest:_,serverActionsManifest:b}=S,I=(0,s.normalizeAppPath)(R),T=!!(k.dynamicRoutes[I]||k.routes[O]),F=async()=>((null==E?void 0:E.render404)?await E.render404(e,t,N,!1):t.end("This page could not be found"),null);if(T&&!j){let e=!!k.routes[O],t=k.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(x.experimental.adapterPath)return await F();throw new y.NoFallbackError}}let $=null;!T||P.isDev||j||($="/index"===($=O)?"/":$);let D=!0===P.isDev||!T,H=T&&!D;b&&_&&(0,o.setManifestsSingleton)({page:R,clientReferenceManifest:_,serverActionsManifest:b});let M=e.method||"GET",U=(0,a.getTracer)(),q=U.getActiveScopeSpan(),B={params:v,prerenderManifest:k,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:x.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,i)=>P.onRequestError(e,t,r,i,E)},sharedContext:{buildId:w}},J=new l.NodeNextRequest(e),K=new l.NodeNextResponse(t),L=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t));try{let o=async e=>P.handle(L,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=U.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route");if(r){let t=`${M} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${R}`)}),s=!!(0,i.getRequestMeta)(e,"minimalMode"),l=async i=>{var a,l;let u=async({previousCacheEntry:n})=>{try{if(!s&&A&&C&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await o(i);e.fetchMetrics=B.renderOpts.fetchMetrics;let l=B.renderOpts.pendingWaitUntil;l&&r.waitUntil&&(r.waitUntil(l),l=void 0);let u=B.renderOpts.collectedTags;if(!T)return await (0,c.sendResponse)(J,K,a,B.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,r=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==n?void 0:n.isStale)&&await P.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:A})},!1,E),t}},d=await P.handleResponse({req:e,nextConfig:x,cacheKey:$,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:s});if(!T)return null;if((null==d||null==(a=d.value)?void 0:a.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",A?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),j&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let y=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return s&&T||y.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||y.get("Cache-Control")||y.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(J,K,new Response(d.value.body,{headers:y,status:d.value.status||200})),null};q?await l(q):await U.withPropagatedContext(e.headers,()=>U.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${R}`,kind:a.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},l))}catch(t){if(t instanceof y.NoFallbackError||await P.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:A})},!1,E),T)throw t;return await (0,c.sendResponse)(J,K,new Response(null,{status:500})),null}}e.s(["handler",()=>M,"patchFetch",()=>H,"routeModule",()=>P,"serverHooks",()=>D,"workAsyncStorage",()=>F,"workUnitAsyncStorage",()=>$],80923)}];
|
|
1
|
+
module.exports=[80923,e=>{"use strict";var t=e.i(47909),n=e.i(74017),r=e.i(96250),i=e.i(59756),a=e.i(61916),o=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),f=e.i(70101),m=e.i(74838),h=e.i(10372),y=e.i(93695);e.i(52474);var g=e.i(220),R=e.i(12714),S=e.i(50227),w=e.i(89171),v=e.i(85067),x=e.i(40317);let N="team.jsonl",j="pinned.jsonl";function k(e){let t=e.trim();if(!t)return{parsed:null};try{return{parsed:JSON.parse(t)}}catch(e){return{parsed:null,error:`Invalid JSON: ${String(e?.message??e)}`}}}function E(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.ts??"").trim(),n=String(e.author??"").trim(),r=String(e.type??"").trim(),i=String(e.content??"").trim();if(!t&&!i)return null;let a=e.source;return{ts:t||new Date().toISOString(),author:n||"unknown",type:r||"entry",content:i||JSON.stringify(e),source:a}}function A(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.file??"").trim(),n=Number(e.line);return t.endsWith(".jsonl")&&Number.isFinite(n)&&!(n<=0)?{file:t,line:Math.floor(n)}:null}async function C(e){try{return(await R.default.readFile(e,"utf8")).split(/\r?\n/)}catch{return[]}}async function O(e){try{return await R.default.readFile(e,"utf8")}catch{return""}}async function _(e){try{let t=await R.default.readdir(e),n=[];for(let r of t)try{let t=await R.default.stat(S.default.join(e,r));if(!t.isFile())continue;let i=S.default.extname(r).toLowerCase(),a=".jsonl"===i?"jsonl":".md"===i?"md":"other";n.push({name:r,kind:a,sizeBytes:t.size,modifiedAt:t.mtime.toISOString()})}catch{}return n.sort((e,t)=>e.name.localeCompare(t.name)),n}catch{return[]}}async function b(e){return(0,v.withTeamContextFromQuery)(e,async({teamId:e,teamDir:t})=>{try{let n=S.default.join(t,"shared-context","memory"),r=await _(n),i=[];for(let e of r.filter(e=>"jsonl"===e.kind)){let t=await C(S.default.join(n,e.name)),r=function(e,t){let n=[];for(let r=0;r<e.length;r++){let i=(e[r]??"").trim();if(!i)continue;let{parsed:a,error:o}=k(i);if(o){n.push({ts:new Date().toISOString(),author:"system",type:"parse-error",content:i.slice(0,500),_file:t,_line:r+1,_parseError:o});continue}let s=E(a);if(!s){a&&"object"==typeof a&&n.push({ts:String(a.ts??new Date().toISOString()),author:String(a.author??"unknown"),type:String(a.type??"entry"),content:JSON.stringify(a),_file:t,_line:r+1});continue}n.push({...s,_file:t,_line:r+1})}return n}(t,e.name);i.push(...r)}let a=S.default.join(n,j),o=await C(a),s=new Map;for(let e of o){let{parsed:t}=k(e),n=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.op??"").trim(),n=String(e.ts??"").trim(),r=String(e.actor??"").trim(),i=A(e.key);if(!t||!n||!r||!i)return null;if("pin"===t){let t=E(e.item);return t?{op:"pin",ts:n,actor:r,key:i,item:t}:null}return"unpin"===t?{op:"unpin",ts:n,actor:r,key:i}:null}(t);if(!n)continue;let r=`${n.key.file}:${n.key.line}`;"pin"===n.op?s.set(r,{key:n.key,item:n.item,pinnedAt:n.ts,pinnedBy:n.actor}):s.delete(r)}let l=Array.from(s.values()).map(({key:e,item:t,pinnedAt:n,pinnedBy:r})=>({...t,_file:e.file,_line:e.line,pinnedAt:n,pinnedBy:r,_key:`${e.file}:${e.line}`}));l.sort((e,t)=>String(t.pinnedAt).localeCompare(String(e.pinnedAt))||String(t.ts).localeCompare(String(e.ts)));let u=new Set(l.map(e=>e._key)),d=i.filter(e=>!u.has(`${e._file??""}:${e._line??0}`)).sort((e,t)=>String(t.ts).localeCompare(String(e.ts))).slice(0,200),p=r.filter(e=>"md"===e.kind),c=[];for(let e of p){let t=await O(S.default.join(n,e.name));c.push({name:e.name,content:t,sizeBytes:e.sizeBytes,modifiedAt:e.modifiedAt})}return w.NextResponse.json({ok:!0,teamId:e,memoryDir:n,files:r,markdownFiles:c,pinnedItems:l,items:d})}catch(e){return w.NextResponse.json({ok:!1,error:(0,x.errorMessage)(e)},{status:500})}})}async function I(e){return(0,v.withTeamContextFromQuery)(e,async({teamId:t,teamDir:n})=>{let r;try{r=await e.json()}catch{return w.NextResponse.json({ok:!1,error:"Invalid JSON"},{status:400})}let i=r&&"object"==typeof r?r:{},a=String(i.op??"append").trim()||"append",o=String(i.actor??"").trim()||`${t}-lead`;try{let e=S.default.join(n,"shared-context","memory");if(await R.default.mkdir(e,{recursive:!0}),"append"===a){let n=String(i.ts??"").trim(),r=String(i.author??"").trim(),a=String(i.type??"").trim(),o=String(i.content??"").trim(),s=i.source;if(!n||!r||!a||!o)return w.NextResponse.json({ok:!1,error:"ts, author, type, and content are required"},{status:400});let l=String(i.file??N).trim()||N;if(!l.endsWith(".jsonl")||l.includes("/")||l.includes("\\")||l===j)return w.NextResponse.json({ok:!1,error:"Invalid file target"},{status:400});let u=S.default.join(e,l),d={ts:n,author:r,type:a,content:o,...void 0!==s?{source:s}:{}};return await R.default.appendFile(u,JSON.stringify(d)+"\n","utf8"),w.NextResponse.json({ok:!0,teamId:t,file:l,item:d})}if("save-md"===a){let n=String(i.file??"").trim(),r=String(i.content??"");if(!n||!n.endsWith(".md")||n.includes("/")||n.includes("\\"))return w.NextResponse.json({ok:!1,error:"Invalid markdown file name"},{status:400});let a=S.default.join(e,n);return await R.default.writeFile(a,r,"utf8"),w.NextResponse.json({ok:!0,teamId:t,file:n,op:"save-md"})}if("delete"===a){let n=String(i.file??"").trim(),r=Number(i.line);if(!n.endsWith(".jsonl")||n.includes("/")||n.includes("\\")||n===j)return w.NextResponse.json({ok:!1,error:"Invalid file"},{status:400});if(!Number.isFinite(r)||r<1)return w.NextResponse.json({ok:!1,error:"Invalid line number"},{status:400});let a=S.default.join(e,n),o=await C(a),s=Math.floor(r)-1;if(s<0||s>=o.length)return w.NextResponse.json({ok:!1,error:"Line out of range"},{status:400});return o.splice(s,1),await R.default.writeFile(a,o.join("\n"),"utf8"),w.NextResponse.json({ok:!0,teamId:t,file:n,op:"delete",deletedLine:r})}if("pin"===a||"unpin"===a){let n=String(i.ts??new Date().toISOString()).trim(),r=A(i.key);if(!r)return w.NextResponse.json({ok:!1,error:"Invalid key"},{status:400});if("pin"===a){let a=E(i.item);if(!a)return w.NextResponse.json({ok:!1,error:"Invalid item"},{status:400});let s=S.default.join(e,j);return await R.default.appendFile(s,JSON.stringify({op:"pin",ts:n,actor:o,key:r,item:a})+"\n","utf8"),w.NextResponse.json({ok:!0,teamId:t,op:"pin",key:r})}let s=S.default.join(e,j);return await R.default.appendFile(s,JSON.stringify({op:"unpin",ts:n,actor:o,key:r})+"\n","utf8"),w.NextResponse.json({ok:!0,teamId:t,op:"unpin",key:r})}return w.NextResponse.json({ok:!1,error:`Unknown op: ${a}`},{status:400})}catch(e){return w.NextResponse.json({ok:!1,error:(0,x.errorMessage)(e)},{status:500})}})}e.s(["GET",()=>b,"POST",()=>I],35066);var T=e.i(35066);let P=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/teams/memory/route",pathname:"/api/teams/memory",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/teams/memory/route.ts",nextConfigOutput:"standalone",userland:T}),{workAsyncStorage:F,workUnitAsyncStorage:$,serverHooks:D}=P;function H(){return(0,r.patchFetch)({workAsyncStorage:F,workUnitAsyncStorage:$})}async function M(e,t,r){P.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/teams/memory/route";R=R.replace(/\/index$/,"")||"/";let S=await P.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!S)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:w,params:v,nextConfig:x,parsedUrl:N,isDraftMode:j,prerenderManifest:k,routerServerContext:E,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,resolvedPathname:O,clientReferenceManifest:_,serverActionsManifest:b}=S,I=(0,s.normalizeAppPath)(R),T=!!(k.dynamicRoutes[I]||k.routes[O]),F=async()=>((null==E?void 0:E.render404)?await E.render404(e,t,N,!1):t.end("This page could not be found"),null);if(T&&!j){let e=!!k.routes[O],t=k.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(x.experimental.adapterPath)return await F();throw new y.NoFallbackError}}let $=null;!T||P.isDev||j||($="/index"===($=O)?"/":$);let D=!0===P.isDev||!T,H=T&&!D;b&&_&&(0,o.setManifestsSingleton)({page:R,clientReferenceManifest:_,serverActionsManifest:b});let M=e.method||"GET",U=(0,a.getTracer)(),q=U.getActiveScopeSpan(),B={params:v,prerenderManifest:k,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:x.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,i)=>P.onRequestError(e,t,r,i,E)},sharedContext:{buildId:w}},J=new l.NodeNextRequest(e),K=new l.NodeNextResponse(t),L=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t));try{let o=async e=>P.handle(L,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=U.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route");if(r){let t=`${M} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${R}`)}),s=!!(0,i.getRequestMeta)(e,"minimalMode"),l=async i=>{var a,l;let u=async({previousCacheEntry:n})=>{try{if(!s&&A&&C&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await o(i);e.fetchMetrics=B.renderOpts.fetchMetrics;let l=B.renderOpts.pendingWaitUntil;l&&r.waitUntil&&(r.waitUntil(l),l=void 0);let u=B.renderOpts.collectedTags;if(!T)return await (0,c.sendResponse)(J,K,a,B.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,r=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==n?void 0:n.isStale)&&await P.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:A})},!1,E),t}},d=await P.handleResponse({req:e,nextConfig:x,cacheKey:$,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:s});if(!T)return null;if((null==d||null==(a=d.value)?void 0:a.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",A?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),j&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let y=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return s&&T||y.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||y.get("Cache-Control")||y.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(J,K,new Response(d.value.body,{headers:y,status:d.value.status||200})),null};q?await l(q):await U.withPropagatedContext(e.headers,()=>U.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${R}`,kind:a.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},l))}catch(t){if(t instanceof y.NoFallbackError||await P.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:A})},!1,E),T)throw t;return await (0,c.sendResponse)(J,K,new Response(null,{status:500})),null}}e.s(["handler",()=>M,"patchFetch",()=>H,"routeModule",()=>P,"serverHooks",()=>D,"workAsyncStorage",()=>F,"workUnitAsyncStorage",()=>$],80923)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports=[64121,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250),a=e.i(59756),i=e.i(61916),o=e.i(74677),s=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),w=e.i(70101),f=e.i(74838),h=e.i(10372),m=e.i(93695);e.i(52474);var g=e.i(220),R=e.i(12714),y=e.i(50227),C=e.i(89171),k=e.i(5003),v=e.i(7367),E=e.i(40317);async function I(e){let t=String(e??"").trim();if(!t)return!1;let r=await (0,k.runOpenClaw)(["cron","list","--json"]);if(!r.ok)return!1;try{let e=JSON.parse(String(r.stdout??"{}"));return(Array.isArray(e)?e:Array.isArray(e?.jobs)?e.jobs:[]).some(e=>String(e?.id??"").trim()===t)}catch{return!1}}function x(){let e=String(process.env.KITCHEN_WORKFLOW_CRON_MODEL??"").trim();return e?["--model",e]:[]}function S(){return String(process.env.KITCHEN_WORKFLOW_CRON_SCHEDULE??"").trim()||"*/5 * * * *"}async function A(e){try{let t=await R.default.readFile(e,"utf8"),r=JSON.parse(t);if(!r||1!==r.version||!r.entries)return{version:1,entries:{}};return r}catch{return{version:1,entries:{}}}}async function O(e,t){await R.default.mkdir(y.default.dirname(e),{recursive:!0}),await R.default.writeFile(e,JSON.stringify(t,null,2)+"\n","utf8")}function N(e){return y.default.join(e,"notes","cron-jobs.json")}async function b(e){let t=await (0,v.getTeamWorkspaceDir)(e),r=y.default.join(t,"shared-context","workflows"),n=[];try{n=(await R.default.readdir(r)).filter(e=>e.endsWith(".workflow.json"))}catch{return[]}let a=[];for(let e of n)try{let t=await R.default.readFile(y.default.join(r,e),"utf8"),n=JSON.parse(t);for(let e of Array.isArray(n.nodes)?n.nodes:[]){let t=String(e.type??"");if("start"===t||"end"===t)continue;let r=e.config,n=r&&"object"==typeof r&&!Array.isArray(r)?r:{},i=String(n.agentId??"").trim();i&&a.push(i)}}catch{}return Array.from(new Set(a))}async function T(e,t){let r=N(await (0,v.getTeamWorkspaceDir)(e)),n=`team:${e}:recipe:workflow-worker:cron:${t}`,a=Date.now(),i=await A(r),o=i.entries[n];if(o&&o.installedCronId&&!o.orphaned){let e=String(o.installedCronId);if(await I(e))return await (0,k.runOpenClaw)(["cron","enable",e]),{alreadyInstalled:!0,installedCronId:e,mappingPath:r,key:n};delete i.entries[n],await O(r,i)}let s=`workflow-worker:${e}:${t}`,l=`Workflow worker tick (${t}).
|
|
2
|
+
|
|
3
|
+
Run exactly one shell command using the exec tool.
|
|
4
|
+
|
|
5
|
+
Command:
|
|
6
|
+
bash -lc 'openclaw recipes workflows worker-tick --team-id ${e} --agent-id ${t} --limit 5 --worker-id cron'
|
|
7
|
+
|
|
8
|
+
Rules:
|
|
9
|
+
- Execute with exec and wait for completion.
|
|
10
|
+
- If it succeeds, respond exactly: NO_REPLY
|
|
11
|
+
- If it fails, respond with one short error line.`,d=await (0,k.runOpenClaw)(["cron","add","--agent","main","--session","isolated","--cron",S(),"--timeout-seconds","120","--name",s,"--description","Workflow worker cron (Kitchen)","--message",l,...x(),"--no-deliver","--json"]);if(!d.ok)throw Error(d.stderr||d.stdout||"Failed to add cron");let u=JSON.parse(String(d.stdout??"{}")),c=String(u?.id??u?.job?.id??"").trim();if(!c)throw Error("Cron add succeeded but did not return id");return i.entries[n]={installedCronId:c,updatedAtMs:a},await O(r,i),{alreadyInstalled:!1,installedCronId:c,mappingPath:r,key:n}}async function P(e){let t=N(await (0,v.getTeamWorkspaceDir)(e)),r=`team:${e}:recipe:workflow-runner:cron:main`,n=await A(t),a=n.entries[r];if(a&&!a.orphaned){let e=String(a.installedCronId??"").trim();if(await I(e))return{alreadyInstalled:!0,installedCronId:e,mappingPath:t,key:r};delete n.entries[r],await O(t,n)}let i=`workflow-runner-tick:${e}`,o=`Runner tick (workflow executor): openclaw recipes workflows runner-tick --team-id ${e} --concurrency 4 --lease-seconds 900`,s=JSON.parse((await (0,k.runOpenClaw)(["cron","add","--name",i,"--agent","main","--session","isolated","--cron",S(),"--tz","America/New_York","--no-deliver","--message",o,...x(),"--timeout-seconds","900","--json"])).stdout).id,l=Date.now();return n.entries[r]={installedCronId:s,updatedAtMs:l},await O(t,n),{alreadyInstalled:!1,installedCronId:s,mappingPath:t,key:r}}async function j(e){try{let t=await e.json(),r=String(t.action??"").trim(),n=String(t.teamId??"").trim(),a=String(t.agentId??"").trim();if(!n)return C.NextResponse.json({ok:!1,error:"teamId is required"},{status:400});if("install"===r){if(!a)return C.NextResponse.json({ok:!1,error:"agentId is required"},{status:400});let e=await T(n,a);return C.NextResponse.json({ok:!0,action:r,teamId:n,agentId:a,...e})}if("reconcile"===r){let e=await (0,v.getTeamWorkspaceDir)(n),t=N(e),a=await b(n),i=[];for(let e of a){let t=await T(n,e);i.push({agentId:e,installedCronId:t.installedCronId,alreadyInstalled:t.alreadyInstalled})}let o=null;if(a.length>0){let e=await P(n);o={agentId:"main",installedCronId:e.installedCronId,alreadyInstalled:e.alreadyInstalled}}let s=[],l=await A(t),d=`team:${n}:recipe:workflow-worker:cron:`,u=!1;for(let[e,t]of Object.entries(l.entries)){if(!e.startsWith(d))continue;let r=e.slice(d.length);if(!a.includes(r)&&t&&!t.orphaned){let n=String(t.installedCronId??"").trim();n&&await (0,k.runOpenClaw)(["cron","disable",n]),l.entries[e]={...t,orphaned:!0,updatedAtMs:Date.now()},s.push({agentId:r,installedCronId:n,key:e}),u=!0}}return u&&await O(t,l),C.NextResponse.json({ok:!0,action:r,teamId:n,requiredAgentIds:a,installed:i,runnerInstalled:o,disabled:s})}return C.NextResponse.json({ok:!1,error:"action must be install|reconcile"},{status:400})}catch(e){return C.NextResponse.json({ok:!1,error:(0,E.errorMessage)(e)},{status:500})}}e.s(["POST",()=>j],53396);var _=e.i(53396);let D=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/cron/worker/route",pathname:"/api/cron/worker",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/cron/worker/route.ts",nextConfigOutput:"standalone",userland:_}),{workAsyncStorage:H,workUnitAsyncStorage:$,serverHooks:M}=D;function U(){return(0,n.patchFetch)({workAsyncStorage:H,workUnitAsyncStorage:$})}async function q(e,t,n){D.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/cron/worker/route";R=R.replace(/\/index$/,"")||"/";let y=await D.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:C,params:k,nextConfig:v,parsedUrl:E,isDraftMode:I,prerenderManifest:x,routerServerContext:S,isOnDemandRevalidate:A,revalidateOnlyGenerated:O,resolvedPathname:N,clientReferenceManifest:b,serverActionsManifest:T}=y,P=(0,s.normalizeAppPath)(R),j=!!(x.dynamicRoutes[P]||x.routes[N]),_=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,E,!1):t.end("This page could not be found"),null);if(j&&!I){let e=!!x.routes[N],t=x.dynamicRoutes[P];if(t&&!1===t.fallback&&!e){if(v.experimental.adapterPath)return await _();throw new m.NoFallbackError}}let H=null;!j||D.isDev||I||(H="/index"===(H=N)?"/":H);let $=!0===D.isDev||!j,M=j&&!$;T&&b&&(0,o.setManifestsSingleton)({page:R,clientReferenceManifest:b,serverActionsManifest:T});let U=e.method||"GET",q=(0,i.getTracer)(),F=q.getActiveScopeSpan(),W={params:k,prerenderManifest:x,renderOpts:{experimental:{authInterrupts:!!v.experimental.authInterrupts},cacheComponents:!!v.cacheComponents,supportsDynamicResponse:$,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:v.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>D.onRequestError(e,t,n,a,S)},sharedContext:{buildId:C}},K=new l.NodeNextRequest(e),L=new l.NodeNextResponse(t),J=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let o=async e=>D.handle(J,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=q.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${U} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${U} ${R}`)}),s=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var i,l;let d=async({previousCacheEntry:r})=>{try{if(!s&&A&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(a);e.fetchMetrics=W.renderOpts.fetchMetrics;let l=W.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let d=W.renderOpts.collectedTags;if(!j)return await (0,p.sendResponse)(K,L,i,W.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,w.toNodeOutgoingHttpHeaders)(i.headers);d&&(t[h.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,n=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:W.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await D.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:A})},!1,S),t}},u=await D.handleResponse({req:e,nextConfig:v,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:x,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:O,responseGenerator:d,waitUntil:n.waitUntil,isMinimalMode:s});if(!j)return null;if((null==u||null==(i=u.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",A?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),I&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,w.fromNodeOutgoingHttpHeaders)(u.value.headers);return s&&j||m.delete(h.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,f.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(K,L,new Response(u.value.body,{headers:m,status:u.value.status||200})),null};F?await l(F):await q.withPropagatedContext(e.headers,()=>q.trace(u.BaseServerSpan.handleRequest,{spanName:`${U} ${R}`,kind:i.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},l))}catch(t){if(t instanceof m.NoFallbackError||await D.onRequestError(e,t,{routerKind:"App Router",routePath:P,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:A})},!1,S),j)throw t;return await (0,p.sendResponse)(K,L,new Response(null,{status:500})),null}}e.s(["handler",()=>q,"patchFetch",()=>U,"routeModule",()=>D,"serverHooks",()=>M,"workAsyncStorage",()=>H,"workUnitAsyncStorage",()=>$],64121)}];
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_cb6ddb24.js.map
|