@jiggai/kitchen 0.1.12 → 0.2.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 +21 -0
- package/.next/build-manifest.json +6 -6
- package/.next/prerender-manifest.json +11 -6
- package/.next/routes-manifest.json +146 -0
- package/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/.next/server/app/_global-error/page.js +3 -3
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +2 -2
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- 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 +4 -4
- package/.next/server/app/_not-found/page.js +10 -9
- 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 +4 -4
- package/.next/server/app/agents/[agentId]/page.js +8 -8
- 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 +1 -1
- package/.next/server/app/api/agents/add/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/file/route.js +1 -1
- package/.next/server/app/api/agents/file/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/files/route.js +1 -1
- package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/identity/route.js +1 -1
- package/.next/server/app/api/agents/identity/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 +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 +1 -1
- package/.next/server/app/api/agents/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/update/route.js +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/delete/route.js +1 -1
- package/.next/server/app/api/cron/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/job/route.js +1 -1
- package/.next/server/app/api/cron/job/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/jobs/route.js +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 +1 -1
- package/.next/server/app/api/cron/recipe-installed/route.js.nft.json +1 -1
- package/.next/server/app/api/gateway/restart/route.js +1 -1
- package/.next/server/app/api/gateway/restart/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/promote/route.js +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 +1 -1
- package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/route.js +1 -1
- package/.next/server/app/api/goals/route.js.nft.json +1 -1
- package/.next/server/app/api/ids/check/route.js +1 -1
- package/.next/server/app/api/ids/check/route.js.nft.json +1 -1
- 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/recipes/[id]/route.js +1 -1
- package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/clone/route.js +1 -1
- package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/custom-team/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/recipes/custom-team/route/build-manifest.json +11 -0
- package/.next/server/app/api/recipes/custom-team/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/recipes/custom-team/route.js +6 -0
- package/.next/server/app/api/recipes/custom-team/route.js.map +5 -0
- package/.next/server/app/api/recipes/custom-team/route.js.nft.json +1 -0
- package/.next/server/app/api/recipes/custom-team/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/recipes/delete/route.js +1 -1
- package/.next/server/app/api/recipes/delete/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 +1 -1
- package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/scaffold/route.js +1 -2
- package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/cron-installation/route.js +1 -1
- package/.next/server/app/api/settings/cron-installation/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/available/route.js +1 -1
- package/.next/server/app/api/skills/available/route.js.nft.json +1 -1
- package/.next/server/app/api/swarms/start/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/swarms/start/route/build-manifest.json +11 -0
- package/.next/server/app/api/swarms/start/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/swarms/start/route.js +6 -0
- package/.next/server/app/api/swarms/start/route.js.map +5 -0
- package/.next/server/app/api/swarms/start/route.js.nft.json +1 -0
- package/.next/server/app/api/swarms/start/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/swarms/status/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/swarms/status/route/build-manifest.json +11 -0
- package/.next/server/app/api/swarms/status/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/swarms/status/route.js +6 -0
- package/.next/server/app/api/swarms/status/route.js.map +5 -0
- package/.next/server/app/api/swarms/status/route.js.nft.json +1 -0
- package/.next/server/app/api/swarms/status/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js +6 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.map +5 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js +6 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.map +5 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js +6 -0
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.map +5 -0
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js +6 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.map +5 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js +6 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.map +5 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/file/route.js +1 -1
- package/.next/server/app/api/teams/file/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/files/route.js +1 -1
- package/.next/server/app/api/teams/files/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/memory/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/memory/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/memory/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/memory/route.js +6 -0
- package/.next/server/app/api/teams/memory/route.js.map +5 -0
- package/.next/server/app/api/teams/memory/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/memory/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/meta/route.js +1 -1
- package/.next/server/app/api/teams/meta/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/orchestrator/install/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/orchestrator/install/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/orchestrator/install/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/orchestrator/install/route.js +6 -0
- package/.next/server/app/api/teams/orchestrator/install/route.js.map +5 -0
- package/.next/server/app/api/teams/orchestrator/install/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/orchestrator/install/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/orchestrator/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/orchestrator/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/orchestrator/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/orchestrator/route.js +6 -0
- package/.next/server/app/api/teams/orchestrator/route.js.map +5 -0
- package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/orchestrator/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/remove-team/route.js +2 -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 +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 +1 -1
- package/.next/server/app/api/teams/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-runs/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-runs/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-runs/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-runs/route.js +7 -0
- package/.next/server/app/api/teams/workflow-runs/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-runs/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflow-templates/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-templates/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-templates/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-templates/route.js +6 -0
- package/.next/server/app/api/teams/workflow-templates/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-templates/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-templates/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflows/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflows/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflows/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflows/route.js +6 -0
- package/.next/server/app/api/teams/workflows/route.js.map +5 -0
- package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflows/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/tickets/assign/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tickets/assign/route/build-manifest.json +11 -0
- package/.next/server/app/api/tickets/assign/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tickets/assign/route.js +6 -0
- package/.next/server/app/api/tickets/assign/route.js.map +5 -0
- package/.next/server/app/api/tickets/assign/route.js.nft.json +1 -0
- package/.next/server/app/api/tickets/assign/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/tickets/assignees/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tickets/assignees/route/build-manifest.json +11 -0
- package/.next/server/app/api/tickets/assignees/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tickets/assignees/route.js +6 -0
- package/.next/server/app/api/tickets/assignees/route.js.map +5 -0
- package/.next/server/app/api/tickets/assignees/route.js.nft.json +1 -0
- package/.next/server/app/api/tickets/assignees/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/tickets/move/route.js +1 -1
- package/.next/server/app/api/tickets/move/route.js.nft.json +1 -1
- package/.next/server/app/channels/page/build-manifest.json +4 -4
- package/.next/server/app/channels/page.js +8 -8
- 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 +4 -4
- package/.next/server/app/cron-jobs/page.js +8 -8
- 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/cron-jobs.html +1 -1
- package/.next/server/app/cron-jobs.rsc +7 -7
- package/.next/server/app/cron-jobs.segments/_full.segment.rsc +7 -7
- package/.next/server/app/cron-jobs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/_index.segment.rsc +3 -3
- package/.next/server/app/cron-jobs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/cron-jobs.segments/cron-jobs/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/cron-jobs.segments/cron-jobs.segment.rsc +1 -1
- package/.next/server/app/goals/[id]/page/build-manifest.json +4 -4
- package/.next/server/app/goals/[id]/page.js +8 -8
- 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 +4 -4
- package/.next/server/app/goals/new/page.js +8 -8
- 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 +4 -4
- package/.next/server/app/goals/page.js +8 -8
- 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/manifest.webmanifest/route/app-paths-manifest.json +3 -0
- package/.next/server/app/manifest.webmanifest/route/build-manifest.json +11 -0
- package/.next/server/app/manifest.webmanifest/route/server-reference-manifest.json +4 -0
- package/.next/server/app/manifest.webmanifest/route.js +6 -0
- package/.next/server/app/manifest.webmanifest/route.js.map +5 -0
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +2 -0
- package/.next/server/app/manifest.webmanifest.body +1 -0
- package/.next/server/app/manifest.webmanifest.meta +1 -0
- package/.next/server/app/page/build-manifest.json +4 -4
- package/.next/server/app/page.js +10 -9
- 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 +4 -4
- package/.next/server/app/recipes/[id]/page.js +10 -9
- 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 +4 -4
- package/.next/server/app/recipes/page.js +9 -9
- 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/settings/page/build-manifest.json +4 -4
- package/.next/server/app/settings/page.js +8 -8
- 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]/page/build-manifest.json +4 -4
- package/.next/server/app/teams/[teamId]/page.js +10 -9
- 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]/tickets/[ticket]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/build-manifest.json +17 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/next-font-manifest.json +11 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js +18 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.map +5 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.nft.json +1 -0
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page_client-reference-manifest.js +2 -0
- package/.next/server/app/teams/[teamId]/tickets/page/app-paths-manifest.json +3 -0
- package/.next/server/app/teams/[teamId]/tickets/page/build-manifest.json +17 -0
- package/.next/server/app/teams/[teamId]/tickets/page/next-font-manifest.json +11 -0
- package/.next/server/app/teams/[teamId]/tickets/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/teams/[teamId]/tickets/page/server-reference-manifest.json +4 -0
- package/.next/server/app/teams/[teamId]/tickets/page.js +18 -0
- package/.next/server/app/teams/[teamId]/tickets/page.js.map +5 -0
- package/.next/server/app/teams/[teamId]/tickets/page.js.nft.json +1 -0
- package/.next/server/app/teams/[teamId]/tickets/page_client-reference-manifest.js +2 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/build-manifest.json +17 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/next-font-manifest.json +11 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js +19 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.map +5 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.nft.json +1 -0
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page_client-reference-manifest.js +2 -0
- package/.next/server/app/teams/[teamId]/workflows/page/app-paths-manifest.json +3 -0
- package/.next/server/app/teams/[teamId]/workflows/page/build-manifest.json +17 -0
- package/.next/server/app/teams/[teamId]/workflows/page/next-font-manifest.json +11 -0
- package/.next/server/app/teams/[teamId]/workflows/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/teams/[teamId]/workflows/page/server-reference-manifest.json +4 -0
- package/.next/server/app/teams/[teamId]/workflows/page.js +20 -0
- package/.next/server/app/teams/[teamId]/workflows/page.js.map +5 -0
- package/.next/server/app/teams/[teamId]/workflows/page.js.nft.json +1 -0
- package/.next/server/app/teams/[teamId]/workflows/page_client-reference-manifest.js +2 -0
- package/.next/server/app/tickets/[ticket]/page/build-manifest.json +4 -4
- package/.next/server/app/tickets/[ticket]/page.js +8 -8
- 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 +4 -4
- package/.next/server/app/tickets/page.js +8 -8
- 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 +21 -0
- package/.next/server/chunks/[root-of-the-server]__04d535a1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04d535a1._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0554d494._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0554d494._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__05f5e243._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__05f5e243._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0e5f94e2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0e5f94e2._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__107d374d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__107d374d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1106aaf7._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__1106aaf7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1805932c._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1805932c._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__26c618a3._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__26c618a3._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__2fa553db._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__2fa553db._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__392e585d._.js +18 -0
- package/.next/server/chunks/[root-of-the-server]__392e585d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__3cddf0a5._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3cddf0a5._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__3f7058b4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3f7058b4._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__477c3d5b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__477c3d5b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__47eb3111._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__47eb3111._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__4898071c._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__59a6cf09._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__59a6cf09._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__5ea38a67._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__5ea38a67._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__6629e914._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__6629e914._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__667c3a2d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__667c3a2d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__691a8e5d._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__691a8e5d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__698cf062._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__698cf062._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__69be1758._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__69be1758._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__6d8e7b75._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__6d8e7b75._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__6e5826c5._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__6e5826c5._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__795578f0._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__795578f0._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__7a331e51._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__7a331e51._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__7e46fb06._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__7e46fb06._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__864a08dd._.js +10 -0
- package/.next/server/chunks/[root-of-the-server]__864a08dd._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__8a811a30._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__8a811a30._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__8e27e9f7._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__8e27e9f7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__8ea22d0a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__8ea22d0a._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__904a6d9f._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__904a6d9f._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__a12dc320._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__a12dc320._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__a6ade549._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__a6ade549._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__abcda400._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__abcda400._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__b002764e._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__b002764e._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__bc3630f4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__bc3630f4._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__befb8c19._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__befb8c19._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__bf608f29._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js.map → [root-of-the-server]__bf608f29._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js → [root-of-the-server]__c63a9f28._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__c86c0469._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c86c0469._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__c9e4c772._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c9e4c772._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__cbe01b74._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__cbe01b74._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__ce9cfa39._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__ce9cfa39._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__d924e5ac._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__d924e5ac._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e40409a2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__e40409a2._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e6fa5823._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__e6fa5823._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e8bfeaba._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__e8bfeaba._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e8f8017b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__e8f8017b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__ee5cefd8._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__ee5cefd8._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__ef60acef._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__ef60acef._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__fdda9176._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__a6ac3ddf._.js.map → [root-of-the-server]__fdda9176._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__fec14c75._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__fec14c75._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__fef7183d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__fef7183d._.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_recipes_custom-team_route_actions_861b1489.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_swarms_start_route_actions_b79e9029.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_swarms_start_route_actions_b79e9029.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_swarms_status_route_actions_54826df0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_swarms_status_route_actions_54826df0.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_[teamId]_tickets_move_route_actions_b47d8708.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_[teamId]_tickets_move_route_actions_b47d8708.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_memory_route_actions_5b7dc699.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_memory_route_actions_5b7dc699.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_install_route_actions_49b6602b.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_install_route_actions_49b6602b.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_route_actions_1949c463.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_route_actions_1949c463.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-runs_route_actions_8327ac7d.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-runs_route_actions_8327ac7d.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-templates_route_actions_87b51d57.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-templates_route_actions_87b51d57.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflows_route_actions_43dd6e07.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflows_route_actions_43dd6e07.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_tickets_assign_route_actions_629cc773.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_tickets_assign_route_actions_629cc773.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_tickets_assignees_route_actions_64d3d63e.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_tickets_assignees_route_actions_64d3d63e.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_manifest_webmanifest_route_actions_1bff3fca.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_manifest_webmanifest_route_actions_1bff3fca.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assign_route_actions_50521c46.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assign_route_actions_50521c46.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assignees_route_actions_75675d78.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assignees_route_actions_75675d78.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_delete_route_actions_9d6ca9f4.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_delete_route_actions_9d6ca9f4.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_move-to-goals_route_actions_760612ca.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_move-to-goals_route_actions_760612ca.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +16 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d4cb2ba._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__285ae6b7._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__46e08d44._.js.map → [root-of-the-server]__285ae6b7._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__28f5d174._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__28f5d174._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__2bef6884._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__15600e29._.js.map → [root-of-the-server]__2bef6884._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__37c705d4._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__37c705d4._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__3ec61b25._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__3ec61b25._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__3efd25c4._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__2a6f1e3e._.js.map → [root-of-the-server]__3efd25c4._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__44d2d5fa._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__44d2d5fa._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__49281b4c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__49281b4c._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4c4391c1._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4c4391c1._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4c6592ca._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4c6592ca._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__682758bd._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__682758bd._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__6bd48d33._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__6bd48d33._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__78972f52._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__78972f52._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__e2e52c6e._.js → [root-of-the-server]__78cdd31e._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__247198dc._.js.map → [root-of-the-server]__92524828._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9a7d79aa._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__9a7d79aa._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__ad654f09._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__ad654f09._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__b2617fbf._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__fd669584._.js.map → [root-of-the-server]__b2617fbf._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__4c6cc96d._.js → [root-of-the-server]__de18d058._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__4c6cc96d._.js.map → [root-of-the-server]__de18d058._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__7180d770._.js → [root-of-the-server]__e364449b._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__e364449b._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e5d416d5._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__3ad3e5b1._.js.map → [root-of-the-server]__e5d416d5._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__e94ab521._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e94ab521._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__b9356576._.js → [root-of-the-server]__f62d412e._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__b9356576._.js.map → [root-of-the-server]__f62d412e._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__f8a2f82d._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__f8a2f82d._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__3575e6da._.js.map → [root-of-the-server]__fbe5ff69._.js.map} +1 -1
- package/.next/server/chunks/ssr/_018dfe6b._.js +27 -0
- package/.next/server/chunks/ssr/_018dfe6b._.js.map +1 -0
- package/.next/server/chunks/ssr/{_8c45edba._.js → _0bdae23a._.js} +3 -3
- package/.next/server/chunks/ssr/_0bdae23a._.js.map +1 -0
- package/.next/server/chunks/ssr/{_d27483a1._.js → _19aa68d3._.js} +3 -3
- package/.next/server/chunks/ssr/_19aa68d3._.js.map +1 -0
- package/.next/server/chunks/ssr/{_25e6aab8._.js → _347e2d56._.js} +3 -3
- package/.next/server/chunks/ssr/_347e2d56._.js.map +1 -0
- package/.next/server/chunks/ssr/_3c9015dc._.js +4 -0
- package/.next/server/chunks/ssr/_3c9015dc._.js.map +1 -0
- package/.next/server/chunks/ssr/_41ca4e70._.js +3 -0
- package/.next/server/chunks/ssr/_41ca4e70._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_12287b3d._.js → _49fb12c2._.js} +3 -3
- package/.next/server/chunks/ssr/_49fb12c2._.js.map +1 -0
- package/.next/server/chunks/ssr/{_3c8b2df6._.js → _536983a4._.js} +3 -3
- package/.next/server/chunks/ssr/_536983a4._.js.map +1 -0
- package/.next/server/chunks/ssr/_5443093b._.js +3 -0
- package/.next/server/chunks/ssr/_5443093b._.js.map +1 -0
- package/.next/server/chunks/ssr/{_cd23c5af._.js → _5b282394._.js} +3 -3
- package/.next/server/chunks/ssr/_5b282394._.js.map +1 -0
- package/.next/server/chunks/ssr/{_6e70b5a4._.js → _5cc24343._.js} +3 -3
- package/.next/server/chunks/ssr/_5cc24343._.js.map +1 -0
- package/.next/server/chunks/ssr/_67830ad6._.js +3 -0
- package/.next/server/chunks/ssr/_67830ad6._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_68c68167.js → _7eac37fb._.js} +3 -3
- package/.next/server/chunks/ssr/_7eac37fb._.js.map +1 -0
- package/.next/server/chunks/ssr/{_92140ca3._.js → _802ee40f._.js} +3 -3
- package/.next/server/chunks/ssr/{_25e6aab8._.js.map → _802ee40f._.js.map} +1 -1
- package/.next/server/chunks/ssr/{_8c8207c1._.js → _8062e992._.js} +3 -3
- package/.next/server/chunks/ssr/_8062e992._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0808c2b9._.js → _99994c05._.js} +3 -3
- package/.next/server/chunks/ssr/_99994c05._.js.map +1 -0
- package/.next/server/chunks/ssr/{_b5e9afcc._.js → _aafc99aa._.js} +3 -3
- package/.next/server/chunks/ssr/_aafc99aa._.js.map +1 -0
- package/.next/server/chunks/ssr/{_39e6e769._.js → _b7f3caf7._.js} +3 -3
- package/.next/server/chunks/ssr/_b7f3caf7._.js.map +1 -0
- package/.next/server/chunks/ssr/_c2041f88._.js +4 -0
- package/.next/server/chunks/ssr/_c2041f88._.js.map +1 -0
- package/.next/server/chunks/ssr/_d2e9dda9._.js +4 -0
- package/.next/server/chunks/ssr/_d2e9dda9._.js.map +1 -0
- package/.next/server/chunks/ssr/{_3158c108._.js → _f4d8af3b._.js} +3 -3
- package/.next/server/chunks/ssr/_f4d8af3b._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_[ticket]_page_actions_25ad633d.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_[ticket]_page_actions_25ad633d.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_page_actions_dffb2525.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_page_actions_dffb2525.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_workflows_page_actions_3defde35.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_workflows_page_actions_3defde35.js.map +1 -0
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js +3 -0
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js.map +1 -0
- package/.next/server/chunks/ssr/ce889_server_app_teams_[teamId]_workflows_[workflowId]_page_actions_880cbbc3.js +3 -0
- package/.next/server/chunks/ssr/ce889_server_app_teams_[teamId]_workflows_[workflowId]_page_actions_880cbbc3.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_ea845e5f._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_ea845e5f._.js.map +1 -0
- package/.next/server/chunks/ssr/{_da6f800e._.js → node_modules_next_aefa2538._.js} +2 -2
- package/.next/server/chunks/ssr/node_modules_next_aefa2538._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_8a37abed._.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_8a37abed._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js → node_modules_next_dist_client_components_2fffaa3a._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js.map → node_modules_next_dist_client_components_2fffaa3a._.js.map} +1 -1
- package/.next/server/chunks/ssr/{_68793c1f._.js → node_modules_next_dist_esm_build_templates_app-page_b5ef32b4.js} +3 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_b5ef32b4.js.map +1 -0
- package/.next/server/chunks/ssr/src_13139e3d._.js +3 -0
- package/.next/server/chunks/ssr/src_13139e3d._.js.map +1 -0
- package/.next/server/chunks/ssr/src_2a73b867._.js +3 -0
- package/.next/server/chunks/ssr/src_2a73b867._.js.map +1 -0
- package/.next/server/chunks/ssr/src_2dbb3b7f._.js +3 -0
- package/.next/server/chunks/ssr/src_2dbb3b7f._.js.map +1 -0
- package/.next/server/chunks/ssr/src_417bc4a6._.js +3 -0
- package/.next/server/chunks/ssr/src_417bc4a6._.js.map +1 -0
- package/.next/server/chunks/ssr/src_59477309._.js +3 -0
- package/.next/server/chunks/ssr/src_59477309._.js.map +1 -0
- package/.next/server/chunks/ssr/src_79d55c05._.js +3 -0
- package/.next/server/chunks/ssr/src_79d55c05._.js.map +1 -0
- 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_global-error_tsx_aa661ba4._.js +3 -0
- package/.next/server/chunks/ssr/src_app_global-error_tsx_aa661ba4._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_not-found_tsx_3f23d179._.js +3 -0
- package/.next/server/chunks/ssr/src_app_not-found_tsx_3f23d179._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js +3 -0
- package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js.map +1 -0
- 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]_team-editor_index_tsx_e68e9cbc._.js +12 -0
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js.map +1 -0
- 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/chunks/ssr/src_e54f24fb._.js +3 -0
- package/.next/server/chunks/ssr/src_e54f24fb._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +4 -4
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +16 -0
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/static/chunks/0edab8a24d59a626.js +2 -0
- package/.next/static/chunks/11da0a52793b005a.js +1 -0
- package/.next/static/chunks/150338287c7dae30.js +1 -0
- package/.next/static/chunks/236ef28eb649c432.js +1 -0
- package/.next/static/chunks/3e1fe6be993c61fb.js +1 -0
- package/.next/static/chunks/55a88f2071ebe766.js +1 -0
- package/.next/static/chunks/5cf42ef49ad071af.js +10 -0
- package/.next/static/chunks/62e0c437eb8fc2da.js +1 -0
- package/.next/static/chunks/{82abf2d65f5428ae.js → 68a088aa49e6124a.js} +3 -3
- package/.next/static/chunks/7bb0aafbf73524bf.js +1 -0
- package/.next/static/chunks/8d359fbce4ebb835.js +1 -0
- package/.next/static/chunks/9197ecb9606557f3.js +1 -0
- package/.next/static/chunks/93719e85369dd453.js +1 -0
- package/.next/static/chunks/b244476ded155cf9.css +3 -0
- package/.next/static/chunks/c75e00652e6b7d85.js +1 -0
- package/.next/static/chunks/c84580993f22c17a.js +1 -0
- package/.next/static/chunks/d73a47fc8def319c.js +1 -0
- package/.next/static/chunks/daa78a9d669e23f5.js +1 -0
- package/.next/static/chunks/db4da5ee45033817.js +1 -0
- package/.next/static/chunks/e8021fea9aee6b63.js +1 -0
- package/.next/static/chunks/e854e56ea8cb6236.js +1 -0
- package/.next/static/chunks/ffff6b5105288d2c.js +1 -0
- package/.next/static/chunks/{turbopack-ae1340e658f67df8.js → turbopack-0236a74c4f471967.js} +1 -1
- package/README.md +22 -1
- package/openclaw/index.ts +133 -26
- package/openclaw.plugin.json +9 -1
- package/package.json +24 -3
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/chef.jpg +0 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/src/app/HomeClient.tsx +8 -9
- package/src/app/agents/[agentId]/agent-editor-tabs.tsx +298 -0
- package/src/app/agents/[agentId]/agent-editor.tsx +200 -428
- package/src/app/api/__tests__/agents-add-route.test.ts +143 -0
- package/src/app/api/__tests__/agents-file-route.test.ts +117 -0
- package/src/app/api/__tests__/agents-files-route.test.ts +61 -0
- package/src/app/api/__tests__/agents-id-route.test.ts +104 -0
- package/src/app/api/__tests__/agents-identity-route.test.ts +92 -0
- package/src/app/api/__tests__/agents-route.test.ts +54 -0
- package/src/app/api/__tests__/agents-skills-install-route.test.ts +131 -0
- package/src/app/api/__tests__/agents-skills-route.test.ts +64 -0
- package/src/app/api/__tests__/agents-update-route.test.ts +95 -0
- package/src/app/api/__tests__/channels-bindings-route.test.ts +143 -0
- package/src/app/api/__tests__/cron-delete-route.test.ts +93 -0
- package/src/app/api/__tests__/cron-job-route.test.ts +78 -0
- package/src/app/api/__tests__/cron-jobs-route.test.ts +116 -0
- package/src/app/api/__tests__/cron-recipe-installed-route.test.ts +114 -0
- package/src/app/api/__tests__/gateway-restart-route.test.ts +36 -0
- package/src/app/api/__tests__/goals-promote-route.test.ts +200 -0
- package/src/app/api/__tests__/goals-route.test.ts +184 -0
- package/src/app/api/__tests__/ids-check-route.test.ts +188 -0
- package/src/app/api/__tests__/marketplace-recipes-route.test.ts +123 -0
- package/src/app/api/__tests__/recipes-clone-route.test.ts +221 -0
- package/src/app/api/__tests__/recipes-delete-route.test.ts +248 -0
- package/src/app/api/__tests__/recipes-id-route.test.ts +166 -0
- package/src/app/api/__tests__/recipes-route.test.ts +57 -0
- package/src/app/api/__tests__/recipes-team-agents-route.test.ts +135 -0
- package/src/app/api/__tests__/scaffold-route.test.ts +173 -0
- package/src/app/api/__tests__/settings-cron-installation-route.test.ts +82 -0
- package/src/app/api/__tests__/skills-available-route.test.ts +47 -0
- package/src/app/api/__tests__/swarms-start-route.test.ts +79 -0
- package/src/app/api/__tests__/swarms-status-route.test.ts +42 -0
- package/src/app/api/__tests__/teams-file-route.test.ts +129 -0
- package/src/app/api/__tests__/teams-files-route.test.ts +57 -0
- package/src/app/api/__tests__/teams-meta-route.test.ts +113 -0
- package/src/app/api/__tests__/teams-orchestrator-install-route.test.ts +66 -0
- package/src/app/api/__tests__/teams-orchestrator-route.test.ts +59 -0
- package/src/app/api/__tests__/teams-remove-team-route.test.ts +122 -0
- package/src/app/api/__tests__/teams-skills-install-route.test.ts +78 -0
- package/src/app/api/__tests__/teams-skills-route.test.ts +73 -0
- package/src/app/api/__tests__/teams-workflow-runs-route.test.ts +85 -0
- package/src/app/api/__tests__/teams-workflows-route.test.ts +110 -0
- package/src/app/api/__tests__/tickets-move-route.test.ts +60 -0
- package/src/app/api/agents/[id]/route.ts +33 -29
- package/src/app/api/agents/add/route.ts +38 -33
- package/src/app/api/agents/file/route.ts +14 -27
- package/src/app/api/agents/files/route.ts +7 -62
- package/src/app/api/agents/route.ts +3 -10
- package/src/app/api/agents/skills/install/route.ts +2 -14
- package/src/app/api/agents/skills/route.ts +6 -18
- package/src/app/api/channels/bindings/route.ts +6 -15
- package/src/app/api/cron/__tests__/helpers.test.ts +164 -0
- package/src/app/api/cron/delete/route.ts +4 -63
- package/src/app/api/cron/helpers.ts +172 -0
- package/src/app/api/cron/jobs/route.ts +24 -113
- package/src/app/api/cron/recipe-installed/route.ts +6 -4
- package/src/app/api/gateway/restart/route.ts +2 -1
- package/src/app/api/goals/[id]/promote/route.ts +10 -43
- package/src/app/api/goals/[id]/route.ts +10 -16
- package/src/app/api/goals/route.ts +3 -6
- package/src/app/api/ids/check/route.ts +18 -26
- package/src/app/api/marketplace/recipes/[slug]/route.ts +2 -2
- package/src/app/api/recipes/[id]/route.ts +3 -9
- package/src/app/api/recipes/clone/route.ts +3 -38
- package/src/app/api/recipes/custom-team/route.ts +193 -0
- package/src/app/api/recipes/delete/helpers.ts +65 -0
- package/src/app/api/recipes/delete/route.ts +11 -78
- package/src/app/api/recipes/team-agents/__tests__/helpers.test.ts +156 -0
- package/src/app/api/recipes/team-agents/helpers.ts +151 -0
- package/src/app/api/recipes/team-agents/route.ts +27 -125
- package/src/app/api/scaffold/__tests__/helpers.test.ts +186 -0
- package/src/app/api/scaffold/helpers.ts +214 -0
- package/src/app/api/scaffold/route.ts +40 -274
- package/src/app/api/settings/cron-installation/route.ts +3 -2
- package/src/app/api/skills/available/route.ts +2 -1
- package/src/app/api/swarms/start/route.ts +100 -0
- package/src/app/api/swarms/status/route.ts +31 -0
- package/src/app/api/teams/[teamId]/tickets/assign/route.ts +105 -0
- package/src/app/api/teams/[teamId]/tickets/assignees/route.ts +27 -0
- package/src/app/api/teams/[teamId]/tickets/delete/route.ts +55 -0
- package/src/app/api/teams/[teamId]/tickets/move/route.ts +70 -0
- package/src/app/api/teams/[teamId]/tickets/move-to-goals/route.ts +56 -0
- package/src/app/api/teams/file/route.ts +26 -47
- package/src/app/api/teams/files/route.ts +13 -45
- package/src/app/api/teams/memory/route.ts +250 -0
- package/src/app/api/teams/meta/route.ts +16 -35
- package/src/app/api/teams/orchestrator/install/route.ts +129 -0
- package/src/app/api/teams/orchestrator/route.ts +216 -0
- package/src/app/api/teams/remove-team/route.ts +7 -15
- package/src/app/api/teams/skills/install/route.ts +2 -13
- package/src/app/api/teams/skills/route.ts +6 -17
- package/src/app/api/teams/workflow-runs/route.ts +534 -0
- package/src/app/api/teams/workflow-templates/route.ts +71 -0
- package/src/app/api/teams/workflows/route.ts +55 -0
- package/src/app/api/tickets/assign/route.ts +94 -0
- package/src/app/api/tickets/assignees/route.ts +24 -0
- package/src/app/api/tickets/move/route.ts +31 -0
- package/src/app/channels/channels-client.tsx +48 -47
- package/src/app/cron-jobs/cron-jobs-client.tsx +11 -14
- package/src/app/cron-jobs/page.tsx +1 -1
- package/src/app/global-error.tsx +50 -0
- package/src/app/goals/[id]/goal-editor.tsx +74 -179
- package/src/app/goals/goals-client.tsx +30 -39
- package/src/app/goals/new/page.tsx +45 -124
- package/src/app/layout.tsx +8 -0
- package/src/app/manifest.ts +15 -0
- package/src/app/not-found.tsx +8 -0
- package/src/app/page.tsx +4 -31
- package/src/app/recipes/CreateAgentModal.tsx +98 -153
- package/src/app/recipes/CreateCustomTeamModal.tsx +375 -0
- package/src/app/recipes/CreateModalShell.tsx +55 -0
- package/src/app/recipes/CreateTeamModal.tsx +54 -105
- package/src/app/recipes/[id]/RecipeEditor/RecipeEditorCreateModal.tsx +72 -0
- package/src/app/recipes/[id]/RecipeEditor/RecipeEditorPanel.tsx +216 -0
- package/src/app/recipes/[id]/RecipeEditor/index.tsx +271 -0
- package/src/app/recipes/[id]/RecipeEditor/recipe-editor-utils.ts +46 -0
- package/src/app/recipes/[id]/RecipeEditor/types.ts +52 -0
- package/src/app/recipes/[id]/page.tsx +4 -18
- package/src/app/recipes/page.tsx +9 -2
- package/src/app/recipes/recipes-client.tsx +266 -156
- package/src/app/settings/page.tsx +1 -1
- package/src/app/settings/settings-client.tsx +11 -10
- package/src/app/teams/[teamId]/CloneTeamModal.tsx +77 -111
- package/src/app/teams/[teamId]/OrchestratorPanel.tsx +255 -0
- package/src/app/teams/[teamId]/OrchestratorSetupModal.tsx +184 -0
- package/src/app/teams/[teamId]/PublishChangesModal.tsx +21 -42
- package/src/app/teams/[teamId]/page.tsx +27 -49
- package/src/app/teams/[teamId]/team-editor/TeamAgentsTab.tsx +145 -0
- package/src/app/teams/[teamId]/team-editor/TeamCronTab.tsx +72 -0
- package/src/app/teams/[teamId]/team-editor/TeamFilesTab.tsx +74 -0
- package/src/app/teams/[teamId]/team-editor/TeamMemoryTab.tsx +349 -0
- package/src/app/teams/[teamId]/team-editor/TeamRecipeTab.tsx +151 -0
- package/src/app/teams/[teamId]/team-editor/TeamSkillsTab.tsx +68 -0
- package/src/app/teams/[teamId]/team-editor/index.tsx +558 -0
- package/src/app/teams/[teamId]/team-editor/team-editor-data.ts +255 -0
- package/src/app/teams/[teamId]/team-editor/team-editor-utils.ts +78 -0
- package/src/app/teams/[teamId]/team-editor/types.ts +34 -0
- package/src/app/teams/[teamId]/tickets/[ticket]/page.tsx +35 -0
- package/src/app/teams/[teamId]/tickets/page.tsx +15 -0
- package/src/app/teams/[teamId]/workflows/[workflowId]/WorkflowCanvas.tsx +111 -0
- package/src/app/teams/[teamId]/workflows/[workflowId]/page.tsx +27 -0
- package/src/app/teams/[teamId]/workflows/[workflowId]/workflows-editor-client.tsx +1608 -0
- package/src/app/teams/[teamId]/workflows/page.tsx +40 -0
- package/src/app/teams/[teamId]/workflows/workflows-client.tsx +494 -0
- package/src/app/tickets/TicketDetailClient.tsx +147 -0
- package/src/app/tickets/TicketsBoardClient.tsx +11 -57
- package/src/app/tickets/[ticket]/TicketAssignControl.tsx +112 -0
- package/src/app/tickets/[ticket]/page.tsx +13 -21
- package/src/app/tickets/page.tsx +5 -2
- package/src/components/AppShell.tsx +252 -31
- package/src/{app/cron-jobs/DeleteCronJobModal.tsx → components/ConfirmationModal.tsx} +35 -17
- package/src/components/DeleteEntityModal.tsx +41 -0
- package/src/components/ErrorBoundary.tsx +70 -0
- package/src/components/FileListWithOptionalToggle.tsx +86 -0
- package/src/components/GoalFormFields.tsx +163 -0
- package/src/components/ScaffoldOverlay.tsx +7 -10
- package/src/components/ToastProvider.tsx +22 -18
- package/src/components/__tests__/ConfirmationModal.test.tsx +109 -0
- package/src/components/__tests__/ErrorBoundary.test.tsx +39 -0
- package/src/components/__tests__/FileListWithOptionalToggle.test.tsx +109 -0
- package/src/components/__tests__/GoalFormFields.test.tsx +117 -0
- package/src/components/delete-modals.tsx +59 -0
- package/src/components/icons.tsx +12 -10
- package/src/lib/__tests__/agent-workspace.test.ts +44 -0
- package/src/lib/__tests__/agents.test.ts +36 -0
- package/src/lib/__tests__/api-route-helpers.test.ts +188 -0
- package/src/lib/__tests__/cron.test.ts +45 -0
- package/src/lib/__tests__/editor-utils.test.ts +38 -0
- package/src/lib/__tests__/errors.test.ts +15 -0
- package/src/lib/__tests__/exec.test.ts +13 -0
- package/src/lib/__tests__/fetch-json.test.ts +118 -0
- package/src/lib/__tests__/gateway.test.ts +234 -0
- package/src/lib/__tests__/goal-promote.test.ts +39 -0
- package/src/lib/__tests__/goals-client.test.ts +26 -0
- package/src/lib/__tests__/goals.test.ts +275 -0
- package/src/lib/__tests__/json.test.ts +15 -0
- package/src/lib/__tests__/kitchen-api.test.ts +32 -0
- package/src/lib/__tests__/marketplace.test.ts +116 -0
- package/src/lib/__tests__/openclaw.test.ts +129 -0
- package/src/lib/__tests__/paths.test.ts +136 -0
- package/src/lib/__tests__/poll.test.ts +26 -0
- package/src/lib/__tests__/recipe-clone.test.ts +85 -0
- package/src/lib/__tests__/recipe-team-agents.test.ts +70 -0
- package/src/lib/__tests__/recipes.test.ts +199 -0
- package/src/lib/__tests__/scaffold-client.test.ts +106 -0
- package/src/lib/__tests__/scaffold.test.ts +64 -0
- package/src/lib/__tests__/slugify.test.ts +23 -0
- package/src/lib/__tests__/tickets.test.ts +158 -0
- package/src/lib/__tests__/type-guards.test.ts +18 -0
- package/src/lib/__tests__/use-slugified-id.test.tsx +120 -0
- package/src/lib/agents.ts +17 -0
- package/src/lib/api-route-helpers.ts +157 -0
- package/src/lib/cron.ts +40 -0
- package/src/lib/editor-utils.ts +18 -0
- package/src/lib/errors.ts +7 -0
- package/src/lib/exec.ts +4 -0
- package/src/lib/fetch-json.ts +29 -0
- package/src/lib/gateway.ts +5 -1
- package/src/lib/goal-promote.ts +27 -0
- package/src/lib/goals-client.ts +69 -0
- package/src/lib/goals.ts +22 -3
- package/src/lib/json.ts +10 -0
- package/src/lib/openclaw.ts +28 -13
- package/src/lib/paths.ts +12 -0
- package/src/lib/poll.ts +18 -0
- package/src/lib/recipe-clone.ts +42 -0
- package/src/lib/recipe-team-agents.ts +30 -0
- package/src/lib/recipes.ts +47 -0
- package/src/lib/scaffold-client.ts +31 -0
- package/src/lib/scaffold.ts +37 -0
- package/src/lib/slugify.ts +25 -0
- package/src/lib/swarms.ts +25 -0
- package/src/lib/tickets.ts +81 -25
- package/src/lib/type-guards.ts +3 -0
- package/src/lib/use-slugified-id.ts +35 -0
- package/src/lib/workflows/README.md +11 -0
- package/src/lib/workflows/__tests__/storage.test.ts +129 -0
- package/src/lib/workflows/__tests__/validate.test.ts +92 -0
- package/src/lib/workflows/api-handlers.ts +35 -0
- package/src/lib/workflows/readdir.ts +23 -0
- package/src/lib/workflows/runs-storage.ts +59 -0
- package/src/lib/workflows/runs-types.ts +42 -0
- package/src/lib/workflows/storage.ts +70 -0
- package/src/lib/workflows/templates/index.ts +1 -0
- package/src/lib/workflows/templates/marketing-cadence-v1.ts +142 -0
- package/src/lib/workflows/types.ts +48 -0
- package/src/lib/workflows/validate.ts +92 -0
- package/.next/server/app/tickets.html +0 -1
- package/.next/server/app/tickets.meta +0 -15
- package/.next/server/app/tickets.rsc +0 -19
- package/.next/server/app/tickets.segments/_full.segment.rsc +0 -19
- package/.next/server/app/tickets.segments/_head.segment.rsc +0 -6
- package/.next/server/app/tickets.segments/_index.segment.rsc +0 -6
- package/.next/server/app/tickets.segments/_tree.segment.rsc +0 -4
- package/.next/server/app/tickets.segments/tickets/__PAGE__.segment.rsc +0 -8
- package/.next/server/app/tickets.segments/tickets.segment.rsc +0 -4
- package/.next/server/chunks/[root-of-the-server]__055885ce._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__055885ce._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0c01c5c7._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__0c01c5c7._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1398a33a._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1398a33a._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__159c002b._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__159c002b._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__20c60fb7._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__20c60fb7._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__2588560d._.js +0 -6
- package/.next/server/chunks/[root-of-the-server]__2588560d._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__27293e91._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__27293e91._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__29c85a51._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__29c85a51._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__29fa8108._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__29fa8108._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__2bd44067._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__2bd44067._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__401ab759._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__401ab759._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__422c7160._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__422c7160._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__4670294e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__4670294e._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__4eda99a9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__4eda99a9._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__54478298._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__54478298._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__6dbdb384._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__6dbdb384._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__94d68aa3._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__94d68aa3._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__9ecbb339._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__9ecbb339._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__a27f8405._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__a27f8405._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__a6ac3ddf._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__b11231a9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__b11231a9._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__b59b3cdd._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__b59b3cdd._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__b5c2b370._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__b5c2b370._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__b955e35a._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__b955e35a._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__be5f57b2._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__c4ff0427._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__c4ff0427._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__c4ffbb03._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__c4ffbb03._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__d737ca42._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__d737ca42._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__df7df3ac._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__df7df3ac._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__dfca6557._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__dfca6557._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__e6184ba3._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__e6184ba3._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__ed0323e9._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__ed0323e9._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__f585823b._.js +0 -6
- package/.next/server/chunks/[root-of-the-server]__f585823b._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__ff940674._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__ff940674._.js.map +0 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5a9305ea.js +0 -6
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5a9305ea.js.map +0 -1
- package/.next/server/chunks/src_lib_d2210cbf._.js +0 -3
- package/.next/server/chunks/src_lib_d2210cbf._.js.map +0 -1
- package/.next/server/chunks/ssr/[externals]__c37e9f91._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__15600e29._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__247198dc._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__2a6f1e3e._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__346f79e5._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__346f79e5._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3575e6da._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__3ad3e5b1._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__3bc7ad0a._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__4393e897._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__4393e897._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__46e08d44._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__491e06fa._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__491e06fa._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__507d2fc9._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__507d2fc9._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__5d24d429._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__5d24d429._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__7180d770._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__82ce3aee._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__82ce3aee._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__8d24c9c3._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__8d24c9c3._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__bc3b27b0._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__bc3b27b0._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__f75a61bf._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__f75a61bf._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__fd669584._.js +0 -3
- package/.next/server/chunks/ssr/_0808c2b9._.js.map +0 -1
- package/.next/server/chunks/ssr/_1aad1d9b._.js +0 -24
- package/.next/server/chunks/ssr/_1aad1d9b._.js.map +0 -1
- package/.next/server/chunks/ssr/_3158c108._.js.map +0 -1
- package/.next/server/chunks/ssr/_39e6e769._.js.map +0 -1
- package/.next/server/chunks/ssr/_3c8b2df6._.js.map +0 -1
- package/.next/server/chunks/ssr/_5070929e._.js +0 -3
- package/.next/server/chunks/ssr/_5070929e._.js.map +0 -1
- package/.next/server/chunks/ssr/_68793c1f._.js.map +0 -1
- package/.next/server/chunks/ssr/_6e70b5a4._.js.map +0 -1
- package/.next/server/chunks/ssr/_8c45edba._.js.map +0 -1
- package/.next/server/chunks/ssr/_8c8207c1._.js.map +0 -1
- package/.next/server/chunks/ssr/_92140ca3._.js.map +0 -1
- package/.next/server/chunks/ssr/_b5e9afcc._.js.map +0 -1
- package/.next/server/chunks/ssr/_cd23c5af._.js.map +0 -1
- package/.next/server/chunks/ssr/_d27483a1._.js.map +0 -1
- package/.next/server/chunks/ssr/_da6f800e._.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/node_modules_next_dist_12287b3d._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_852965c2._.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_852965c2._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_68c68167.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_channels_channels-client_tsx_8c8be116._.js +0 -3
- package/.next/server/chunks/ssr/src_app_channels_channels-client_tsx_8c8be116._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_goals_[id]_goal-editor_tsx_7df8193f._.js +0 -3
- package/.next/server/chunks/ssr/src_app_goals_[id]_goal-editor_tsx_7df8193f._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_goals_goals-client_tsx_a45eeff4._.js +0 -3
- package/.next/server/chunks/ssr/src_app_goals_goals-client_tsx_a45eeff4._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_goals_new_page_tsx_8f749229._.js +0 -3
- package/.next/server/chunks/ssr/src_app_goals_new_page_tsx_8f749229._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_tsx_c6d38350._.js +0 -3
- package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_tsx_c6d38350._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_settings_settings-client_tsx_279084f8._.js +0 -3
- package/.next/server/chunks/ssr/src_app_settings_settings-client_tsx_279084f8._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_tsx_2900b91d._.js +0 -12
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_tsx_2900b91d._.js.map +0 -1
- package/.next/static/chunks/10cbf02e6fc36465.js +0 -2
- package/.next/static/chunks/1ce21af6dfb18ee3.js +0 -1
- package/.next/static/chunks/40f7fde35327d214.js +0 -1
- package/.next/static/chunks/54beb791bcc086ae.js +0 -1
- package/.next/static/chunks/55866d57aa2c7a9c.js +0 -1
- package/.next/static/chunks/6a7862e37c616cc3.js +0 -1
- package/.next/static/chunks/817ae077ec8c6255.js +0 -1
- package/.next/static/chunks/8484c54dc9a377e8.js +0 -10
- package/.next/static/chunks/8662fcc3cdff66f3.js +0 -1
- package/.next/static/chunks/99208ebf7e47471d.js +0 -1
- package/.next/static/chunks/a4e69b85b74277a7.css +0 -3
- package/.next/static/chunks/a9ed074e89b16a5e.js +0 -1
- package/.next/static/chunks/c6dfa918cafb6c0c.js +0 -1
- package/.next/static/chunks/d1c5f764e5fd615a.js +0 -1
- package/.next/static/chunks/d4ce2f908d8c4dea.js +0 -1
- package/.next/static/chunks/de9e30e86ef31e72.js +0 -1
- package/src/app/recipes/DeleteRecipeModal.tsx +0 -62
- package/src/app/recipes/[id]/RecipeEditor.tsx +0 -697
- package/src/app/teams/[teamId]/DeleteTeamModal.tsx +0 -54
- package/src/app/teams/[teamId]/team-editor.tsx +0 -1195
- /package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js.map → [root-of-the-server]__c63a9f28._.js.map} +0 -0
- /package/.next/server/chunks/{ssr/[externals]__c37e9f91._.js.map → _next-internal_server_app_api_recipes_custom-team_route_actions_861b1489.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__3bc7ad0a._.js.map → [root-of-the-server]__0d4cb2ba._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__e2e52c6e._.js.map → [root-of-the-server]__78cdd31e._.js.map} +0 -0
- /package/.next/static/{QOy0ilqTW1kHfmpls_oWp → z9yFlFZ5f_hw9mm0nfMJl}/_buildManifest.js +0 -0
- /package/.next/static/{QOy0ilqTW1kHfmpls_oWp → z9yFlFZ5f_hw9mm0nfMJl}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{QOy0ilqTW1kHfmpls_oWp → z9yFlFZ5f_hw9mm0nfMJl}/_ssgManifest.js +0 -0
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[85523,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return f}});let d=a.r(7997),e=a.r(72421);function f(){return(0,d.jsx)(e.HTTPAccessErrorFallback,{status:403,message:"This page could not be accessed."})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=node_modules_next_dist_client_components_builtin_forbidden_45780354.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/next/src/client/components/builtin/forbidden.tsx"],"sourcesContent":["import { HTTPAccessErrorFallback } from '../http-access-fallback/error-fallback'\n\nexport default function Forbidden() {\n return (\n <HTTPAccessErrorFallback\n status={403}\n message=\"This page could not be accessed.\"\n />\n )\n}\n"],"names":["Forbidden","HTTPAccessErrorFallback","status","message"],"mappings":"sHAEA,UAAA,qCAAwBA,yBAFgB,CAAA,CAAA,IAAA,GAEzB,SAASA,IACtB,MACE,CADF,AACE,EAAA,EAAA,GAAA,EAACC,EADH,AACGA,uBAAuB,CAAA,CACtBC,OAAQ,IACRC,QAAQ,oCAGd","ignoreList":[0]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[4276,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(11857);a.n(d("[project]/node_modules/next/dist/client/components/builtin/global-error.js <module evaluation>"))},82509,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(11857);a.n(d("[project]/node_modules/next/dist/client/components/builtin/global-error.js"))},66114,a=>{"use strict";a.i(4276);var b=a.i(82509);a.n(b)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=node_modules_next_dist_client_components_builtin_global-error_ece394eb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/next/dist/client/components/builtin/global-error.js/__nextjs-internal-proxy.cjs","../../../../node_modules/next/src/client/components/builtin/global-error.tsx"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nconst { createClientModuleProxy } = require(\"react-server-dom-turbopack/server\");\n\n__turbopack_context__.n(createClientModuleProxy(\"[project]/node_modules/next/dist/client/components/builtin/global-error.js\"));\n","'use client'\n\nimport { HandleISRError } from '../handle-isr-error'\n\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily:\n 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: '28px',\n margin: '0 8px',\n },\n} as const\n\nexport type GlobalErrorComponent = React.ComponentType<{\n error: any\n}>\nfunction DefaultGlobalError({ error }: { error: any }) {\n const digest: string | undefined = error?.digest\n return (\n <html id=\"__next_error__\">\n <head></head>\n <body>\n <HandleISRError error={error} />\n <div style={styles.error}>\n <div>\n <h2 style={styles.text}>\n Application error: a {digest ? 'server' : 'client'}-side exception\n has occurred while loading {window.location.hostname} (see the{' '}\n {digest ? 'server logs' : 'browser console'} for more\n information).\n </h2>\n {digest ? <p style={styles.text}>{`Digest: ${digest}`}</p> : null}\n </div>\n </div>\n </body>\n </html>\n )\n}\n\n// Exported so that the import signature in the loaders can be identical to user\n// supplied custom global error signatures.\nexport default DefaultGlobalError\n"],"names":["styles","error","fontFamily","height","textAlign","display","flexDirection","alignItems","justifyContent","text","fontSize","fontWeight","lineHeight","margin","DefaultGlobalError","digest","html","id","head","body","HandleISRError","div","style","h2","window","location","hostname","p"],"mappings":"+BACA,GAAM,yBAAE,CAAuB,CAAE,CAAA,EAAA,CAAA,CAAA,OAEjC,EAAsB,CAAC,CAAC,EAAwB,oHAFhD,GAAM,yBAAE,CAAuB,CAAE,CAAA,EAAA,CAAA,CAAA,OAEjC,EAAsB,CAAC,CAAC,EAAwB","ignoreList":[0]}
|
package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_68c68167.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/next/dist/esm/build/templates/app-page.js%3Fpage%3D/_not-found/page"],"sourcesContent":["import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' with { 'turbopack-transition': 'next-server-utility' }\nimport __TURBOPACK__icon__$23$0__ from \"METADATA_0\";\nconst __TURBOPACK__layout__$23$1__ = () => require(\"MODULE_1\");\n\nconst __TURBOPACK__not$2d$found__$23$2__ = () => require(\"MODULE_2\");\n\nconst __TURBOPACK__forbidden__$23$3__ = () => require(\"MODULE_3\");\n\nconst __TURBOPACK__unauthorized__$23$4__ = () => require(\"MODULE_4\");\n\nconst __TURBOPACK__page__$23$5__ = () => require(\"MODULE_5\");\n\nimport { AppPageRouteModule } from \"next/dist/esm/server/route-modules/app-page/module.compiled\" with {\n 'turbopack-transition': 'next-ssr'\n};\nimport { RouteKind } from \"next/dist/esm/server/route-kind\" with {\n 'turbopack-transition': 'next-server-utility'\n};\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { interopDefault } from \"next/dist/esm/server/app-render/interop-default\";\nimport { stripFlightHeaders } from \"next/dist/esm/server/app-render/strip-flight-headers\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { checkIsAppPPREnabled } from \"next/dist/esm/server/lib/experimental/ppr\";\nimport { getFallbackRouteParams, createOpaqueFallbackRouteParams } from \"next/dist/esm/server/request/fallback-params\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { isHtmlBotRequest, shouldServeStreamingMetadata } from \"next/dist/esm/server/lib/streaming-metadata\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { getIsPossibleServerAction } from \"next/dist/esm/server/lib/server-action-request-meta\";\nimport { RSC_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_IS_PRERENDER_HEADER, NEXT_DID_POSTPONE_HEADER, RSC_CONTENT_TYPE_HEADER } from \"next/dist/esm/client/components/app-router-headers\";\nimport { getBotType, isBot } from \"next/dist/esm/shared/lib/router/utils/is-bot\";\nimport { CachedRouteKind, IncrementalCacheKind } from \"next/dist/esm/server/response-cache\";\nimport { FallbackMode, parseFallbackField } from \"next/dist/esm/lib/fallback\";\nimport RenderResult from \"next/dist/esm/server/render-result\";\nimport { CACHE_ONE_YEAR, HTML_CONTENT_TYPE_HEADER, NEXT_CACHE_TAGS_HEADER, NEXT_RESUME_HEADER } from \"next/dist/esm/lib/constants\";\nimport { ENCODED_TAGS } from \"next/dist/esm/server/stream-utils/encoded-tags\";\nimport { sendRenderResult } from \"next/dist/esm/server/send-payload\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { parseMaxPostponedStateSize } from \"next/dist/esm/shared/lib/size-limit\";\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = [\"\", {\n\"children\": [\"/_not-found\", {\n\"children\": [\"__PAGE__\", {\n}, {\n metadata: { }, \"page\": [__TURBOPACK__page__$23$5__, \"[project]/node_modules/next/dist/client/components/builtin/not-found.js\"],\n}],\n}, {\n metadata: { },}],\n}, {\n metadata: { icon: [\n (async (props) => [{\n url: fillMetadataSegment(\"//\", await props.params, \"favicon.ico\") + `?${__TURBOPACK__icon__$23$0__.src.split(\"/\").splice(-1)[0]}`,\n sizes: `${__TURBOPACK__icon__$23$0__.width}x${__TURBOPACK__icon__$23$0__.height}`,\n type: `image/x-icon`,\n }]),\n ],\n }, \"layout\": [__TURBOPACK__layout__$23$1__, \"[project]/src/app/layout.tsx\"],\n \"not-found\": [__TURBOPACK__not$2d$found__$23$2__, \"[project]/node_modules/next/dist/client/components/builtin/not-found.js\"],\n \"forbidden\": [__TURBOPACK__forbidden__$23$3__, \"[project]/node_modules/next/dist/client/components/builtin/forbidden.js\"],\n \"unauthorized\": [__TURBOPACK__unauthorized__$23$4__, \"[project]/node_modules/next/dist/client/components/builtin/unauthorized.js\"],\n}]\nimport GlobalError from \"next/dist/client/components/builtin/global-error\" with {\n 'turbopack-transition': 'next-server-utility'\n};\nexport { GlobalError };\nconst __next_app_require__ = __turbopack_context__.r.bind(__turbopack_context__)\nconst __next_app_load_chunk__ = __turbopack_context__.l.bind(__turbopack_context__)\nexport const __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\nimport * as entryBase from \"next/dist/esm/server/app-render/entry-base\" with {\n 'turbopack-transition': 'next-server-utility'\n};\nimport { RedirectStatusCode } from \"next/dist/esm/client/components/redirect-status-code\";\nimport { InvariantError } from \"next/dist/esm/shared/lib/invariant-error\";\nimport { scheduleOnNextTick } from \"next/dist/esm/lib/scheduler\";\nimport { isInterceptionRouteAppPath } from \"next/dist/esm/shared/lib/router/utils/interception-routes\";\nexport * from \"next/dist/esm/server/app-render/entry-base\" with {\n 'turbopack-transition': 'next-server-utility'\n};\n// Create and export the route module that will be consumed.\nexport const routeModule = new AppPageRouteModule({\n definition: {\n kind: RouteKind.APP_PAGE,\n page: \"/_not-found/page\",\n pathname: \"/_not-found\",\n // The following aren't used in production.\n bundlePath: '',\n filename: '',\n appPaths: []\n },\n userland: {\n loaderTree: tree\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || ''\n});\nexport async function handler(req, res, ctx) {\n var _this;\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n let srcPage = \"/_not-found/page\";\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, query, params, pageIsDynamic, buildManifest, nextFontManifest, reactLoadableManifest, serverActionsManifest, clientReferenceManifest, subresourceIntegrityManifest, prerenderManifest, isDraftMode, resolvedPathname, revalidateOnlyGenerated, routerServerContext, nextConfig, parsedUrl, interceptionRoutePatterns, deploymentId } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let { isOnDemandRevalidate } = prepareResult;\n // We use the resolvedPathname instead of the parsedUrl.pathname because it\n // is not rewritten as resolvedPathname is. This will ensure that the correct\n // prerender info is used instead of using the original pathname as the\n // source. If however PPR is enabled and cacheComponents is disabled, we\n // treat the pathname as dynamic. Currently, there's a bug in the PPR\n // implementation that incorrectly leaves %%drp placeholders in the output of\n // parallel routes. This is addressed with cacheComponents.\n const prerenderInfo = nextConfig.experimental.ppr && !nextConfig.cacheComponents && isInterceptionRouteAppPath(resolvedPathname) ? null : routeModule.match(resolvedPathname, prerenderManifest);\n const isPrerendered = !!prerenderManifest.routes[resolvedPathname];\n const userAgent = req.headers['user-agent'] || '';\n const botType = getBotType(userAgent);\n const isHtmlBot = isHtmlBotRequest(req);\n /**\n * If true, this indicates that the request being made is for an app\n * prefetch request.\n */ const isPrefetchRSCRequest = getRequestMeta(req, 'isPrefetchRSCRequest') ?? req.headers[NEXT_ROUTER_PREFETCH_HEADER] === '1' // exclude runtime prefetches, which use '2'\n ;\n // NOTE: Don't delete headers[RSC] yet, it still needs to be used in renderToHTML later\n const isRSCRequest = getRequestMeta(req, 'isRSCRequest') ?? Boolean(req.headers[RSC_HEADER]);\n const isPossibleServerAction = getIsPossibleServerAction(req);\n /**\n * If the route being rendered is an app page, and the ppr feature has been\n * enabled, then the given route _could_ support PPR.\n */ const couldSupportPPR = checkIsAppPPREnabled(nextConfig.experimental.ppr);\n if (!getRequestMeta(req, 'postponed') && couldSupportPPR && req.headers[NEXT_RESUME_HEADER] === '1' && req.method === 'POST') {\n // Decode the postponed state from the request body, it will come as\n // an array of buffers, so collect them and then concat them to form\n // the string.\n const body = [];\n for await (const chunk of req){\n body.push(chunk);\n }\n const postponed = Buffer.concat(body).toString('utf8');\n addRequestMeta(req, 'postponed', postponed);\n }\n // When enabled, this will allow the use of the `?__nextppronly` query to\n // enable debugging of the static shell.\n const hasDebugStaticShellQuery = process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING === '1' && typeof query.__nextppronly !== 'undefined' && couldSupportPPR;\n // When enabled, this will allow the use of the `?__nextppronly` query\n // to enable debugging of the fallback shell.\n const hasDebugFallbackShellQuery = hasDebugStaticShellQuery && query.__nextppronly === 'fallback';\n // This page supports PPR if it is marked as being `PARTIALLY_STATIC` in the\n // prerender manifest and this is an app page.\n const isRoutePPREnabled = couldSupportPPR && (((_this = prerenderManifest.routes[normalizedSrcPage] ?? prerenderManifest.dynamicRoutes[normalizedSrcPage]) == null ? void 0 : _this.renderingMode) === 'PARTIALLY_STATIC' || // Ideally we'd want to check the appConfig to see if this page has PPR\n // enabled or not, but that would require plumbing the appConfig through\n // to the server during development. We assume that the page supports it\n // but only during development.\n hasDebugStaticShellQuery && (routeModule.isDev === true || (routerServerContext == null ? void 0 : routerServerContext.experimentalTestProxy) === true));\n const isDebugStaticShell = hasDebugStaticShellQuery && isRoutePPREnabled;\n // We should enable debugging dynamic accesses when the static shell\n // debugging has been enabled and we're also in development mode.\n const isDebugDynamicAccesses = isDebugStaticShell && routeModule.isDev === true;\n const isDebugFallbackShell = hasDebugFallbackShellQuery && isRoutePPREnabled;\n // If we're in minimal mode, then try to get the postponed information from\n // the request metadata. If available, use it for resuming the postponed\n // render.\n const minimalPostponed = isRoutePPREnabled ? getRequestMeta(req, 'postponed') : undefined;\n // If PPR is enabled, and this is a RSC request (but not a prefetch), then\n // we can use this fact to only generate the flight data for the request\n // because we can't cache the HTML (as it's also dynamic).\n let isDynamicRSCRequest = isRoutePPREnabled && isRSCRequest && !isPrefetchRSCRequest;\n // During a PPR revalidation, the RSC request is not dynamic if we do not have the postponed data.\n // We only attach the postponed data during a resume. If there's no postponed data, then it must be a revalidation.\n // This is to ensure that we don't bypass the cache during a revalidation.\n if (isMinimalMode) {\n isDynamicRSCRequest = isDynamicRSCRequest && !!minimalPostponed;\n }\n // Need to read this before it's stripped by stripFlightHeaders. We don't\n // need to transfer it to the request meta because it's only read\n // within this function; the static segment data should have already been\n // generated, so we will always either return a static response or a 404.\n const segmentPrefetchHeader = getRequestMeta(req, 'segmentPrefetchRSCRequest');\n // TODO: investigate existing bug with shouldServeStreamingMetadata always\n // being true for a revalidate due to modifying the base-server this.renderOpts\n // when fixing this to correct logic it causes hydration issue since we set\n // serveStreamingMetadata to true during export\n const serveStreamingMetadata = isHtmlBot && isRoutePPREnabled ? false : !userAgent ? true : shouldServeStreamingMetadata(userAgent, nextConfig.htmlLimitedBots);\n const isSSG = Boolean((prerenderInfo || isPrerendered || prerenderManifest.routes[normalizedSrcPage]) && // If this is a html bot request and PPR is enabled, then we don't want\n // to serve a static response.\n !(isHtmlBot && isRoutePPREnabled));\n // When a page supports cacheComponents, we can support RDC for Navigations\n const supportsRDCForNavigations = isRoutePPREnabled && nextConfig.cacheComponents === true;\n // In development, we always want to generate dynamic HTML.\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML, unless it's\n // a data request, in which case we only produce static HTML.\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isSSG || // If this request has provided postponed data, it supports dynamic\n // HTML.\n typeof minimalPostponed === 'string' || // If this handler supports onCacheEntryV2, then we can only support\n // dynamic responses if it's a dynamic RSC request and not in minimal mode. If it\n // doesn't support it we must fallback to the default behavior.\n (supportsRDCForNavigations && getRequestMeta(req, 'onCacheEntryV2') ? // which will generate the RDC for the route. When resuming a Dynamic\n // RSC request, we'll pass the minimal postponed data to the render\n // which will trigger the `supportsDynamicResponse` to be true.\n isDynamicRSCRequest && !isMinimalMode : isDynamicRSCRequest);\n // When html bots request PPR page, perform the full dynamic rendering.\n const shouldWaitOnAllReady = isHtmlBot && isRoutePPREnabled;\n let ssgCacheKey = null;\n if (!isDraftMode && isSSG && !supportsDynamicResponse && !isPossibleServerAction && !minimalPostponed && !isDynamicRSCRequest) {\n ssgCacheKey = resolvedPathname;\n }\n // the staticPathKey differs from ssgCacheKey since\n // ssgCacheKey is null in dev since we're always in \"dynamic\"\n // mode in dev to bypass the cache, but we still need to honor\n // dynamicParams = false in dev mode\n let staticPathKey = ssgCacheKey;\n if (!staticPathKey && routeModule.isDev) {\n staticPathKey = resolvedPathname;\n }\n // If this is a request for an app path that should be statically generated\n // and we aren't in the edge runtime, strip the flight headers so it will\n // generate the static response.\n if (!routeModule.isDev && !isDraftMode && isSSG && isRSCRequest && !isDynamicRSCRequest) {\n stripFlightHeaders(req.headers);\n }\n const ComponentMod = {\n ...entryBase,\n tree,\n GlobalError,\n handler,\n routeModule,\n __next_app__\n };\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 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 try {\n const varyHeader = routeModule.getVaryHeader(resolvedPathname, interceptionRoutePatterns);\n res.setHeader('Vary', varyHeader);\n const invokeRouteModule = async (span, context)=>{\n const nextReq = new NodeNextRequest(req);\n const nextRes = new NodeNextResponse(res);\n return routeModule.render(nextReq, nextRes, 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 incrementalCache = getRequestMeta(req, 'incrementalCache');\n const doRender = async ({ span, postponed, fallbackRouteParams, forceStaticRender })=>{\n const context = {\n query,\n params,\n page: normalizedSrcPage,\n sharedContext: {\n buildId\n },\n serverComponentsHmrCache: getRequestMeta(req, 'serverComponentsHmrCache'),\n fallbackRouteParams,\n renderOpts: {\n App: ()=>null,\n Document: ()=>null,\n pageConfig: {},\n ComponentMod,\n Component: interopDefault(ComponentMod),\n params,\n routeModule,\n page: srcPage,\n postponed,\n shouldWaitOnAllReady,\n serveStreamingMetadata,\n supportsDynamicResponse: typeof postponed === 'string' || supportsDynamicResponse,\n buildManifest,\n nextFontManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n setCacheStatus: routerServerContext == null ? void 0 : routerServerContext.setCacheStatus,\n setIsrStatus: routerServerContext == null ? void 0 : routerServerContext.setIsrStatus,\n setReactDebugChannel: routerServerContext == null ? void 0 : routerServerContext.setReactDebugChannel,\n sendErrorsToBrowser: routerServerContext == null ? void 0 : routerServerContext.sendErrorsToBrowser,\n dir: process.env.NEXT_RUNTIME === 'nodejs' ? require('path').join(/* turbopackIgnore: true */ process.cwd(), routeModule.relativeProjectDir) : `${process.cwd()}/${routeModule.relativeProjectDir}`,\n isDraftMode,\n botType,\n isOnDemandRevalidate,\n isPossibleServerAction,\n assetPrefix: nextConfig.assetPrefix,\n nextConfigOutput: nextConfig.output,\n crossOrigin: nextConfig.crossOrigin,\n trailingSlash: nextConfig.trailingSlash,\n images: nextConfig.images,\n previewProps: prerenderManifest.preview,\n deploymentId: deploymentId,\n enableTainting: nextConfig.experimental.taint,\n htmlLimitedBots: nextConfig.htmlLimitedBots,\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n multiZoneDraftMode,\n incrementalCache,\n cacheLifeProfiles: nextConfig.cacheLife,\n basePath: nextConfig.basePath,\n serverActions: nextConfig.experimental.serverActions,\n ...isDebugStaticShell || isDebugDynamicAccesses || isDebugFallbackShell ? {\n nextExport: true,\n supportsDynamicResponse: false,\n isStaticGeneration: true,\n isDebugDynamicAccesses: isDebugDynamicAccesses\n } : {},\n cacheComponents: Boolean(nextConfig.cacheComponents),\n experimental: {\n isRoutePPREnabled,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),\n inlineCss: Boolean(nextConfig.experimental.inlineCss),\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n clientTraceMetadata: nextConfig.experimental.clientTraceMetadata || [],\n clientParamParsingOrigins: nextConfig.experimental.clientParamParsingOrigins,\n maxPostponedStateSizeBytes: parseMaxPostponedStateSize(nextConfig.experimental.maxPostponedStateSize)\n },\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: ()=>{},\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext),\n err: getRequestMeta(req, 'invokeError'),\n dev: routeModule.isDev\n }\n };\n if (isDebugStaticShell || isDebugDynamicAccesses) {\n context.renderOpts.nextExport = true;\n context.renderOpts.supportsDynamicResponse = false;\n context.renderOpts.isDebugDynamicAccesses = isDebugDynamicAccesses;\n }\n // When we're revalidating in the background, we should not allow dynamic\n // responses.\n if (forceStaticRender) {\n context.renderOpts.supportsDynamicResponse = false;\n }\n const result = await invokeRouteModule(span, context);\n const { metadata } = result;\n const { cacheControl, headers = {}, // Add any fetch tags that were on the page to the response headers.\n fetchTags: cacheTags, fetchMetrics } = metadata;\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n // Pull any fetch metrics from the render onto the request.\n ;\n req.fetchMetrics = fetchMetrics;\n // we don't throw static to dynamic errors in dev as isSSG\n // is a best guess in dev since we don't have the prerender pass\n // to know whether the path is actually static or not\n if (isSSG && (cacheControl == null ? void 0 : cacheControl.revalidate) === 0 && !routeModule.isDev && !isRoutePPREnabled) {\n const staticBailoutInfo = metadata.staticBailoutInfo;\n const err = Object.defineProperty(new Error(`Page changed from static to dynamic at runtime ${resolvedPathname}${(staticBailoutInfo == null ? void 0 : staticBailoutInfo.description) ? `, reason: ${staticBailoutInfo.description}` : ``}` + `\\nsee more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`), \"__NEXT_ERROR_CODE\", {\n value: \"E132\",\n enumerable: false,\n configurable: true\n });\n if (staticBailoutInfo == null ? void 0 : staticBailoutInfo.stack) {\n const stack = staticBailoutInfo.stack;\n err.stack = err.message + stack.substring(stack.indexOf('\\n'));\n }\n throw err;\n }\n return {\n value: {\n kind: CachedRouteKind.APP_PAGE,\n html: result,\n headers,\n rscData: metadata.flightData,\n postponed: metadata.postponed,\n status: metadata.statusCode,\n segmentData: metadata.segmentData\n },\n cacheControl\n };\n };\n const responseGenerator = async ({ hasResolved, previousCacheEntry: previousIncrementalCacheEntry, isRevalidating, span, forceStaticRender = false })=>{\n const isProduction = routeModule.isDev === false;\n const didRespond = hasResolved || res.writableEnded;\n // skip on-demand revalidate if cache is not present and\n // revalidate-if-generated is set\n if (isOnDemandRevalidate && revalidateOnlyGenerated && !previousIncrementalCacheEntry && !isMinimalMode) {\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res);\n } else {\n res.statusCode = 404;\n res.end('This page could not be found');\n }\n return null;\n }\n let fallbackMode;\n if (prerenderInfo) {\n fallbackMode = parseFallbackField(prerenderInfo.fallback);\n }\n // When serving a HTML bot request, we want to serve a blocking render and\n // not the prerendered page. This ensures that the correct content is served\n // to the bot in the head.\n if (fallbackMode === FallbackMode.PRERENDER && isBot(userAgent)) {\n if (!isRoutePPREnabled || isHtmlBot) {\n fallbackMode = FallbackMode.BLOCKING_STATIC_RENDER;\n }\n }\n if ((previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.isStale) === -1) {\n isOnDemandRevalidate = true;\n }\n // TODO: adapt for PPR\n // only allow on-demand revalidate for fallback: true/blocking\n // or for prerendered fallback: false paths\n if (isOnDemandRevalidate && (fallbackMode !== FallbackMode.NOT_FOUND || previousIncrementalCacheEntry)) {\n fallbackMode = FallbackMode.BLOCKING_STATIC_RENDER;\n }\n if (!isMinimalMode && fallbackMode !== FallbackMode.BLOCKING_STATIC_RENDER && staticPathKey && !didRespond && !isDraftMode && pageIsDynamic && (isProduction || !isPrerendered)) {\n // if the page has dynamicParams: false and this pathname wasn't\n // prerendered trigger the no fallback handling\n if (// In development, fall through to render to handle missing\n // getStaticPaths.\n (isProduction || prerenderInfo) && // When fallback isn't present, abort this render so we 404\n fallbackMode === FallbackMode.NOT_FOUND) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n // When cacheComponents is enabled, we can use the fallback\n // response if the request is not a dynamic RSC request because the\n // RSC data when this feature flag is enabled does not contain any\n // param references. Without this feature flag enabled, the RSC data\n // contains param references, and therefore we can't use the fallback.\n if (isRoutePPREnabled && (nextConfig.cacheComponents ? !isDynamicRSCRequest : !isRSCRequest)) {\n const cacheKey = isProduction && typeof (prerenderInfo == null ? void 0 : prerenderInfo.fallback) === 'string' ? prerenderInfo.fallback : normalizedSrcPage;\n const fallbackRouteParams = // If we're in production and we have fallback route params, then we\n // can use the manifest fallback route params.\n isProduction && (prerenderInfo == null ? void 0 : prerenderInfo.fallbackRouteParams) ? createOpaqueFallbackRouteParams(prerenderInfo.fallbackRouteParams) : // have to manually generate the fallback route params.\n isDebugFallbackShell ? getFallbackRouteParams(normalizedSrcPage, routeModule) : null;\n // We use the response cache here to handle the revalidation and\n // management of the fallback shell.\n const fallbackResponse = await routeModule.handleResponse({\n cacheKey,\n req,\n nextConfig,\n routeKind: RouteKind.APP_PAGE,\n isFallback: true,\n prerenderManifest,\n isRoutePPREnabled,\n responseGenerator: async ()=>doRender({\n span,\n // We pass `undefined` as rendering a fallback isn't resumed\n // here.\n postponed: undefined,\n fallbackRouteParams,\n forceStaticRender: false\n }),\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // If the fallback response was set to null, then we should return null.\n if (fallbackResponse === null) return null;\n // Otherwise, if we did get a fallback response, we should return it.\n if (fallbackResponse) {\n // Remove the cache control from the response to prevent it from being\n // used in the surrounding cache.\n delete fallbackResponse.cacheControl;\n return fallbackResponse;\n }\n }\n }\n // Only requests that aren't revalidating can be resumed. If we have the\n // minimal postponed data, then we should resume the render with it.\n let postponed = !isOnDemandRevalidate && !isRevalidating && minimalPostponed ? minimalPostponed : undefined;\n // If this is a dynamic RSC request, we should use the postponed data from\n // the static render (if available). This ensures that we can utilize the\n // resume data cache (RDC) from the static render to ensure that the data\n // is consistent between the static and dynamic renders.\n if (// Only enable RDC for Navigations if the feature is enabled.\n supportsRDCForNavigations && process.env.NEXT_RUNTIME !== 'edge' && !isMinimalMode && incrementalCache && isDynamicRSCRequest && // We don't typically trigger an on-demand revalidation for dynamic RSC\n // requests, as we're typically revalidating the page in the background\n // instead. However, if the cache entry is stale, we should trigger a\n // background revalidation on dynamic RSC requests. This prevents us\n // from entering an infinite loop of revalidations.\n !forceStaticRender) {\n const incrementalCacheEntry = await incrementalCache.get(resolvedPathname, {\n kind: IncrementalCacheKind.APP_PAGE,\n isRoutePPREnabled: true,\n isFallback: false\n });\n // If the cache entry is found, we should use the postponed data from\n // the cache.\n if (incrementalCacheEntry && incrementalCacheEntry.value && incrementalCacheEntry.value.kind === CachedRouteKind.APP_PAGE) {\n // CRITICAL: we're assigning the postponed data from the cache entry\n // here as we're using the RDC to resume the render.\n postponed = incrementalCacheEntry.value.postponed;\n // If the cache entry is stale, we should trigger a background\n // revalidation so that subsequent requests will get a fresh response.\n if (incrementalCacheEntry && // We want to trigger this flow if the cache entry is stale and if\n // the requested revalidation flow is either foreground or\n // background.\n (incrementalCacheEntry.isStale === -1 || incrementalCacheEntry.isStale === true)) {\n // We want to schedule this on the next tick to ensure that the\n // render is not blocked on it.\n scheduleOnNextTick(async ()=>{\n const responseCache = routeModule.getResponseCache(req);\n try {\n await responseCache.revalidate(resolvedPathname, incrementalCache, isRoutePPREnabled, false, (c)=>responseGenerator({\n ...c,\n // CRITICAL: we need to set this to true as we're\n // revalidating in the background and typically this dynamic\n // RSC request is not treated as static.\n forceStaticRender: true\n }), // CRITICAL: we need to pass null here because passing the\n // previous cache entry here (which is stale) will switch on\n // isOnDemandRevalidate and break the prerendering.\n null, hasResolved, ctx.waitUntil);\n } catch (err) {\n console.error('Error revalidating the page in the background', err);\n }\n });\n }\n }\n }\n // When we're in minimal mode, if we're trying to debug the static shell,\n // we should just return nothing instead of resuming the dynamic render.\n if ((isDebugStaticShell || isDebugDynamicAccesses) && typeof postponed !== 'undefined') {\n return {\n cacheControl: {\n revalidate: 1,\n expire: undefined\n },\n value: {\n kind: CachedRouteKind.PAGES,\n html: RenderResult.EMPTY,\n pageData: {},\n headers: undefined,\n status: undefined\n }\n };\n }\n const fallbackRouteParams = // If we're in production and we have fallback route params, then we\n // can use the manifest fallback route params if we need to render the\n // fallback shell.\n isProduction && (prerenderInfo == null ? void 0 : prerenderInfo.fallbackRouteParams) && getRequestMeta(req, 'renderFallbackShell') ? createOpaqueFallbackRouteParams(prerenderInfo.fallbackRouteParams) : // manually generate the fallback route params.\n isDebugFallbackShell ? getFallbackRouteParams(normalizedSrcPage, routeModule) : null;\n // Perform the render.\n return doRender({\n span,\n postponed,\n fallbackRouteParams,\n forceStaticRender\n });\n };\n const handleResponse = async (span)=>{\n var _cacheEntry_value, _cachedData_headers;\n const cacheEntry = await routeModule.handleResponse({\n cacheKey: ssgCacheKey,\n responseGenerator: (c)=>responseGenerator({\n span,\n ...c\n }),\n routeKind: RouteKind.APP_PAGE,\n isOnDemandRevalidate,\n isRoutePPREnabled,\n req,\n nextConfig,\n prerenderManifest,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n // In dev, we should not cache pages for any reason.\n if (routeModule.isDev) {\n res.setHeader('Cache-Control', 'no-store, must-revalidate');\n }\n if (!cacheEntry) {\n if (ssgCacheKey) {\n // A cache entry might not be generated if a response is written\n // in `getInitialProps` or `getServerSideProps`, but those shouldn't\n // have a cache key. If we do have a cache key but we don't end up\n // with a cache entry, then either Next.js or the application has a\n // bug that needs fixing.\n throw Object.defineProperty(new Error('invariant: cache entry required but not generated'), \"__NEXT_ERROR_CODE\", {\n value: \"E62\",\n enumerable: false,\n configurable: true\n });\n }\n return null;\n }\n if (((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_PAGE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant app-page handler received invalid cache entry ${(_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E707\",\n enumerable: false,\n configurable: true\n });\n }\n const didPostpone = typeof cacheEntry.value.postponed === 'string';\n if (isSSG && // We don't want to send a cache header for requests that contain dynamic\n // data. If this is a Dynamic RSC request or wasn't a Prefetch RSC\n // request, then we should set the cache header.\n !isDynamicRSCRequest && (!didPostpone || isPrefetchRSCRequest)) {\n if (!isMinimalMode) {\n // set x-nextjs-cache header to match the header\n // we set for the image-optimizer\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Set a header used by the client router to signal the response is static\n // and should respect the `static` cache staleTime value.\n res.setHeader(NEXT_IS_PRERENDER_HEADER, '1');\n }\n const { value: cachedData } = cacheEntry;\n // Coerce the cache control parameter from the render.\n let cacheControl;\n // If this is a resume request in minimal mode it is streamed with dynamic\n // content and should not be cached.\n if (minimalPostponed) {\n cacheControl = {\n revalidate: 0,\n expire: undefined\n };\n } else if (isDynamicRSCRequest) {\n cacheControl = {\n revalidate: 0,\n expire: undefined\n };\n } else if (!routeModule.isDev) {\n // If this is a preview mode request, we shouldn't cache it\n if (isDraftMode) {\n cacheControl = {\n revalidate: 0,\n expire: undefined\n };\n } else if (!isSSG) {\n if (!res.getHeader('Cache-Control')) {\n cacheControl = {\n revalidate: 0,\n expire: undefined\n };\n }\n } else if (cacheEntry.cacheControl) {\n // If the cache entry has a cache control with a revalidate value that's\n // a number, use it.\n if (typeof cacheEntry.cacheControl.revalidate === 'number') {\n var _cacheEntry_cacheControl;\n if (cacheEntry.cacheControl.revalidate < 1) {\n throw Object.defineProperty(new Error(`Invalid revalidate configuration provided: ${cacheEntry.cacheControl.revalidate} < 1`), \"__NEXT_ERROR_CODE\", {\n value: \"E22\",\n enumerable: false,\n configurable: true\n });\n }\n cacheControl = {\n revalidate: cacheEntry.cacheControl.revalidate,\n expire: ((_cacheEntry_cacheControl = cacheEntry.cacheControl) == null ? void 0 : _cacheEntry_cacheControl.expire) ?? nextConfig.expireTime\n };\n } else {\n cacheControl = {\n revalidate: CACHE_ONE_YEAR,\n expire: undefined\n };\n }\n }\n }\n cacheEntry.cacheControl = cacheControl;\n if (typeof segmentPrefetchHeader === 'string' && (cachedData == null ? void 0 : cachedData.kind) === CachedRouteKind.APP_PAGE && cachedData.segmentData) {\n var _cachedData_headers1;\n // This is a prefetch request issued by the client Segment Cache. These\n // should never reach the application layer (lambda). We should either\n // respond from the cache (HIT) or respond with 204 No Content (MISS).\n // Set a header to indicate that PPR is enabled for this route. This\n // lets the client distinguish between a regular cache miss and a cache\n // miss due to PPR being disabled. In other contexts this header is used\n // to indicate that the response contains dynamic data, but here we're\n // only using it to indicate that the feature is enabled — the segment\n // response itself contains whether the data is dynamic.\n res.setHeader(NEXT_DID_POSTPONE_HEADER, '2');\n // Add the cache tags header to the response if it exists and we're in\n // minimal mode while rendering a static page.\n const tags = (_cachedData_headers1 = cachedData.headers) == null ? void 0 : _cachedData_headers1[NEXT_CACHE_TAGS_HEADER];\n if (isMinimalMode && isSSG && tags && typeof tags === 'string') {\n res.setHeader(NEXT_CACHE_TAGS_HEADER, tags);\n }\n const matchedSegment = cachedData.segmentData.get(segmentPrefetchHeader);\n if (matchedSegment !== undefined) {\n // Cache hit\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.fromStatic(matchedSegment, RSC_CONTENT_TYPE_HEADER),\n cacheControl: cacheEntry.cacheControl\n });\n }\n // Cache miss. Either a cache entry for this route has not been generated\n // (which technically should not be possible when PPR is enabled, because\n // at a minimum there should always be a fallback entry) or there's no\n // match for the requested segment. Respond with a 204 No Content. We\n // don't bother to respond with 404, because these requests are only\n // issued as part of a prefetch.\n res.statusCode = 204;\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.EMPTY,\n cacheControl: cacheEntry.cacheControl\n });\n }\n // If there's a callback for `onCacheEntry`, call it with the cache entry\n // and the revalidate options. If we support RDC for Navigations, we\n // prefer the `onCacheEntryV2` callback. Once RDC for Navigations is the\n // default, we can remove the fallback to `onCacheEntry` as\n // `onCacheEntryV2` is now fully supported.\n const onCacheEntry = supportsRDCForNavigations ? getRequestMeta(req, 'onCacheEntryV2') ?? getRequestMeta(req, 'onCacheEntry') : getRequestMeta(req, 'onCacheEntry');\n if (onCacheEntry) {\n const finished = await onCacheEntry(cacheEntry, {\n url: getRequestMeta(req, 'initURL') ?? req.url\n });\n if (finished) return null;\n }\n if (cachedData.headers) {\n const headers = {\n ...cachedData.headers\n };\n if (!isMinimalMode || !isSSG) {\n delete headers[NEXT_CACHE_TAGS_HEADER];\n }\n for (let [key, value] of Object.entries(headers)){\n if (typeof value === 'undefined') continue;\n if (Array.isArray(value)) {\n for (const v of value){\n res.appendHeader(key, v);\n }\n } else if (typeof value === 'number') {\n value = value.toString();\n res.appendHeader(key, value);\n } else {\n res.appendHeader(key, value);\n }\n }\n }\n // Add the cache tags header to the response if it exists and we're in\n // minimal mode while rendering a static page.\n const tags = (_cachedData_headers = cachedData.headers) == null ? void 0 : _cachedData_headers[NEXT_CACHE_TAGS_HEADER];\n if (isMinimalMode && isSSG && tags && typeof tags === 'string') {\n res.setHeader(NEXT_CACHE_TAGS_HEADER, tags);\n }\n // If the request is a data request, then we shouldn't set the status code\n // from the response because it should always be 200. This should be gated\n // behind the experimental PPR flag.\n if (cachedData.status && (!isRSCRequest || !isRoutePPREnabled)) {\n res.statusCode = cachedData.status;\n }\n // Redirect information is encoded in RSC payload, so we don't need to use redirect status codes\n if (!isMinimalMode && cachedData.status && RedirectStatusCode[cachedData.status] && isRSCRequest) {\n res.statusCode = 200;\n }\n // Mark that the request did postpone.\n if (didPostpone && !isDynamicRSCRequest) {\n res.setHeader(NEXT_DID_POSTPONE_HEADER, '1');\n }\n // we don't go through this block when preview mode is true\n // as preview mode is a dynamic request (bypasses cache) and doesn't\n // generate both HTML and payloads in the same request so continue to just\n // return the generated payload\n if (isRSCRequest && !isDraftMode) {\n // If this is a dynamic RSC request, then stream the response.\n if (typeof cachedData.rscData === 'undefined') {\n // If the response is not an RSC response, then we can't serve it.\n if (cachedData.html.contentType !== RSC_CONTENT_TYPE_HEADER) {\n if (nextConfig.cacheComponents) {\n res.statusCode = 404;\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.EMPTY,\n cacheControl: cacheEntry.cacheControl\n });\n } else {\n // Otherwise this case is not expected.\n throw Object.defineProperty(new InvariantError(`Expected RSC response, got ${cachedData.html.contentType}`), \"__NEXT_ERROR_CODE\", {\n value: \"E789\",\n enumerable: false,\n configurable: true\n });\n }\n }\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: cachedData.html,\n cacheControl: cacheEntry.cacheControl\n });\n }\n // As this isn't a prefetch request, we should serve the static flight\n // data.\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.fromStatic(cachedData.rscData, RSC_CONTENT_TYPE_HEADER),\n cacheControl: cacheEntry.cacheControl\n });\n }\n // This is a request for HTML data.\n const body = cachedData.html;\n // If there's no postponed state, we should just serve the HTML. This\n // should also be the case for a resume request because it's completed\n // as a server render (rather than a static render).\n if (!didPostpone || isMinimalMode || isRSCRequest) {\n // If we're in test mode, we should add a sentinel chunk to the response\n // that's between the static and dynamic parts so we can compare the\n // chunks and add assertions.\n if (process.env.__NEXT_TEST_MODE && isMinimalMode && isRoutePPREnabled && body.contentType === HTML_CONTENT_TYPE_HEADER) {\n // As we're in minimal mode, the static part would have already been\n // streamed first. The only part that this streams is the dynamic part\n // so we should FIRST stream the sentinel and THEN the dynamic part.\n body.unshift(createPPRBoundarySentinel());\n }\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: body,\n cacheControl: cacheEntry.cacheControl\n });\n }\n // If we're debugging the static shell or the dynamic API accesses, we\n // should just serve the HTML without resuming the render. The returned\n // HTML will be the static shell so all the Dynamic API's will be used\n // during static generation.\n if (isDebugStaticShell || isDebugDynamicAccesses) {\n // Since we're not resuming the render, we need to at least add the\n // closing body and html tags to create valid HTML.\n body.push(new ReadableStream({\n start (controller) {\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML);\n controller.close();\n }\n }));\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: body,\n cacheControl: {\n revalidate: 0,\n expire: undefined\n }\n });\n }\n // If we're in test mode, we should add a sentinel chunk to the response\n // that's between the static and dynamic parts so we can compare the\n // chunks and add assertions.\n if (process.env.__NEXT_TEST_MODE) {\n body.push(createPPRBoundarySentinel());\n }\n // This request has postponed, so let's create a new transformer that the\n // dynamic data can pipe to that will attach the dynamic data to the end\n // of the response.\n const transformer = new TransformStream();\n body.push(transformer.readable);\n // Perform the render again, but this time, provide the postponed state.\n // We don't await because we want the result to start streaming now, and\n // we've already chained the transformer's readable to the render result.\n doRender({\n span,\n postponed: cachedData.postponed,\n // This is a resume render, not a fallback render, so we don't need to\n // set this.\n fallbackRouteParams: null,\n forceStaticRender: false\n }).then(async (result)=>{\n var _result_value;\n if (!result) {\n throw Object.defineProperty(new Error('Invariant: expected a result to be returned'), \"__NEXT_ERROR_CODE\", {\n value: \"E463\",\n enumerable: false,\n configurable: true\n });\n }\n if (((_result_value = result.value) == null ? void 0 : _result_value.kind) !== CachedRouteKind.APP_PAGE) {\n var _result_value1;\n throw Object.defineProperty(new Error(`Invariant: expected a page response, got ${(_result_value1 = result.value) == null ? void 0 : _result_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E305\",\n enumerable: false,\n configurable: true\n });\n }\n // Pipe the resume result to the transformer.\n await result.value.html.pipeTo(transformer.writable);\n }).catch((err)=>{\n // An error occurred during piping or preparing the render, abort\n // the transformers writer so we can terminate the stream.\n transformer.writable.abort(err).catch((e)=>{\n console.error(\"couldn't abort transformer\", e);\n });\n });\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: body,\n // We don't want to cache the response if it has postponed data because\n // the response being sent to the client it's dynamic parts are streamed\n // to the client on the same request.\n cacheControl: {\n revalidate: 0,\n expire: undefined\n }\n });\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 return 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: srcPage,\n routeType: 'render',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: isSSG,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n throw err;\n }\n}\n// TODO: omit this from production builds, only test builds should include it\n/**\n * Creates a readable stream that emits a PPR boundary sentinel.\n *\n * @returns A readable stream that emits a PPR boundary sentinel.\n */ function createPPRBoundarySentinel() {\n return new ReadableStream({\n start (controller) {\n controller.enqueue(new TextEncoder().encode('<!-- PPR_BOUNDARY_SENTINEL -->'));\n controller.close();\n }\n });\n}\n\n//# sourceMappingURL=app-page.js.map\n"],"names":[],"mappings":"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","ignoreList":[0]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[3182,a=>{"use strict";var b=a.i(87924),c=a.i(72131);function d(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function e({children:a,onClick:c,kind:d,disabled:e}){return(0,b.jsx)("button",{className:"rounded-[var(--ck-radius-sm)] px-3 py-2 text-sm font-medium transition disabled:opacity-50 "+("primary"===d?"bg-[var(--ck-accent-red)] text-white":"danger"===d?"border border-red-400/40 text-red-200 hover:bg-red-500/10":"border border-[color:var(--ck-border-subtle)] hover:bg-[color:var(--ck-bg-glass)]"),onClick:c,disabled:e,children:a})}function f(){let[a,f]=(0,c.useState)({}),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)("telegram"),[m,n]=(0,c.useState)('{\n "enabled": true\n}\n'),[o,p]=(0,c.useState)(!1);async function q(){let a=await fetch("/api/channels/bindings",{cache:"no-store"}),b=await a.json();return a.ok&&b?.ok?{ok:!0,channels:d(b.channels)?b.channels:{}}:{ok:!1,error:String(b?.error??`Failed to load channels (${a.status})`)}}async function r(){h(!0),j(null);try{let a=await q();if(!a.ok){j(a.error),f({}),h(!1);return}f(a.channels),h(!1)}catch(a){j(a instanceof Error?a.message:String(a)),f({}),h(!1)}}(0,c.useEffect)(()=>{let a=!1;return(async()=>{if(await r(),a)return})(),()=>{a=!0}},[]);let s=(0,c.useMemo)(()=>{let b=Object.keys(a);return b.sort(),b.filter(b=>null!=a[b])},[a]);async function t(){let a;p(!0),j(null);try{a=JSON.parse(m)}catch{j("Config must be valid JSON"),p(!1);return}if(!d(a)){j("Config must be a JSON object"),p(!1);return}let b=await fetch("/api/channels/bindings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({provider:k.trim(),config:a})}),c=await b.json();if(!b.ok||!c?.ok){j(String(c?.error??"Failed to save")),p(!1);return}await r(),p(!1)}async function u(a){if(!window.confirm(`Delete channel binding "${a}"?`))return;p(!0),j(null);let b=await fetch("/api/channels/bindings",{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({provider:a})}),c=await b.json();if(!b.ok||!c?.ok){j(String(c?.error??"Failed to delete")),p(!1);return}await r(),p(!1)}let v=(0,c.useMemo)(()=>{let b=a[k];return d(b)?b:null},[a,k]);return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Channels"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["Source of truth: OpenClaw gateway config (patched via ",(0,b.jsx)("code",{className:"font-mono",children:"gateway config.patch"}),"). Some changes may require a gateway restart depending on provider."]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(e,{onClick:()=>void r(),disabled:o,children:"Refresh"}),(0,b.jsx)(e,{kind:"primary",onClick:function(){let a=String(window.prompt("Provider id (e.g. telegram)","telegram")??"").trim();a&&(l(a),n('{\n "enabled": true\n}\n'))},disabled:o,children:"Add binding"})]})]}),i?(0,b.jsx)("div",{className:"ck-glass p-4 text-sm text-red-300",children:i}):null,(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 lg:grid-cols-3",children:[(0,b.jsxs)("div",{className:"ck-glass p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium",children:"Bindings"}),g?(0,b.jsx)("div",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):0===s.length?(0,b.jsx)("div",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:"No bindings configured."}):(0,b.jsx)("div",{className:"mt-3 space-y-2",children:s.map(c=>(0,b.jsxs)("button",{className:"flex w-full items-center justify-between rounded-[var(--ck-radius-sm)] border px-3 py-2 text-left text-sm "+(c===k?"border-[var(--ck-accent-red)] bg-[color:var(--ck-bg-glass)]":"border-[color:var(--ck-border-subtle)] hover:bg-[color:var(--ck-bg-glass)]"),onClick:()=>{l(c),n(JSON.stringify(a[c]??{},null,2)+"\n")},children:[(0,b.jsx)("span",{className:"font-mono",children:c}),(0,b.jsx)("span",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"edit"})]},c))})]}),(0,b.jsxs)("div",{className:"ck-glass p-4 lg:col-span-2",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium",children:"Edit"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Provider: ",(0,b.jsx)("code",{className:"font-mono",children:k})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(e,{kind:"danger",onClick:()=>void u(k),disabled:o,children:"Delete"}),(0,b.jsx)(e,{kind:"primary",onClick:()=>void t(),disabled:o,children:o?"Saving…":"Save"})]})]}),(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Config (JSON)"}),(0,b.jsx)("textarea",{value:m,onChange:a=>n(a.target.value),className:"mt-2 h-[420px] w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 font-mono text-sm",placeholder:'{\n "enabled": true\n}'}),(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["Validation:",(0,b.jsxs)("ul",{className:"list-disc pl-5",children:[(0,b.jsxs)("li",{children:["Telegram requires ",(0,b.jsx)("code",{className:"font-mono",children:"botToken"}),"."]}),(0,b.jsx)("li",{children:"Other providers can be edited as raw JSON in v1."})]})]}),v?(0,b.jsxs)("div",{className:"mt-3 text-xs text-[color:var(--ck-text-tertiary)]",children:["Current keys: ",(0,b.jsx)("code",{className:"font-mono",children:Object.keys(v).join(", ")||"(none)"})]}):null]})]})]})]})}a.s(["default",()=>f])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=src_app_channels_channels-client_tsx_8c8be116._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/channels/channels-client.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\n\ntype ChannelConfig = Record<string, unknown>;\n\ntype ChannelsResponse = {\n ok: boolean;\n channels?: Record<string, unknown>;\n error?: string;\n};\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return Boolean(v) && typeof v === \"object\" && !Array.isArray(v);\n}\n\nfunction Button({\n children,\n onClick,\n kind,\n disabled,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n kind?: \"primary\" | \"danger\";\n disabled?: boolean;\n}) {\n const base =\n \"rounded-[var(--ck-radius-sm)] px-3 py-2 text-sm font-medium transition disabled:opacity-50 \" +\n (kind === \"primary\"\n ? \"bg-[var(--ck-accent-red)] text-white\"\n : kind === \"danger\"\n ? \"border border-red-400/40 text-red-200 hover:bg-red-500/10\"\n : \"border border-[color:var(--ck-border-subtle)] hover:bg-[color:var(--ck-bg-glass)]\");\n return (\n <button className={base} onClick={onClick} disabled={disabled}>\n {children}\n </button>\n );\n}\n\nexport default function ChannelsClient() {\n const [channels, setChannels] = useState<Record<string, unknown>>({});\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const [provider, setProvider] = useState<string>(\"telegram\");\n const [configJson, setConfigJson] = useState<string>(\"{\\n \\\"enabled\\\": true\\n}\\n\");\n const [saving, setSaving] = useState(false);\n\n async function fetchBindings(): Promise<{ ok: true; channels: Record<string, unknown> } | { ok: false; error: string }> {\n const res = await fetch(\"/api/channels/bindings\", { cache: \"no-store\" });\n const data = (await res.json()) as ChannelsResponse;\n if (!res.ok || !data?.ok) {\n return { ok: false, error: String(data?.error ?? `Failed to load channels (${res.status})`) };\n }\n const ch = isRecord(data.channels) ? data.channels : {};\n return { ok: true, channels: ch };\n }\n\n async function refresh() {\n setLoading(true);\n setError(null);\n try {\n const result = await fetchBindings();\n if (!result.ok) {\n setError(result.error);\n setChannels({});\n setLoading(false);\n return;\n }\n setChannels(result.channels);\n setLoading(false);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n setError(msg);\n setChannels({});\n setLoading(false);\n }\n }\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n await refresh();\n if (cancelled) return;\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const providers = useMemo(() => {\n const keys = Object.keys(channels);\n keys.sort();\n return keys.filter((k) => channels[k] != null);\n }, [channels]);\n\n function selectProvider(p: string) {\n setProvider(p);\n const cfg = channels[p];\n setConfigJson(JSON.stringify(cfg ?? {}, null, 2) + \"\\n\");\n }\n\n async function upsert() {\n setSaving(true);\n setError(null);\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(configJson);\n } catch {\n setError(\"Config must be valid JSON\");\n setSaving(false);\n return;\n }\n if (!isRecord(parsed)) {\n setError(\"Config must be a JSON object\");\n setSaving(false);\n return;\n }\n\n const res = await fetch(\"/api/channels/bindings\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ provider: provider.trim(), config: parsed }),\n });\n const data = (await res.json()) as ChannelsResponse;\n if (!res.ok || !data?.ok) {\n setError(String(data?.error ?? \"Failed to save\"));\n setSaving(false);\n return;\n }\n\n await refresh();\n setSaving(false);\n }\n\n async function remove(p: string) {\n const ok = window.confirm(`Delete channel binding \"${p}\"?`);\n if (!ok) return;\n\n setSaving(true);\n setError(null);\n\n const res = await fetch(\"/api/channels/bindings\", {\n method: \"DELETE\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ provider: p }),\n });\n const data = (await res.json()) as ChannelsResponse;\n if (!res.ok || !data?.ok) {\n setError(String(data?.error ?? \"Failed to delete\"));\n setSaving(false);\n return;\n }\n\n await refresh();\n setSaving(false);\n }\n\n function addBinding() {\n const p = window.prompt(\"Provider id (e.g. telegram)\", \"telegram\");\n const next = String(p ?? \"\").trim();\n if (!next) return;\n setProvider(next);\n setConfigJson(\"{\\n \\\"enabled\\\": true\\n}\\n\");\n }\n\n const selectedConfig = useMemo(() => {\n const v = channels[provider];\n return isRecord(v) ? (v as ChannelConfig) : null;\n }, [channels, provider]);\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">Channels</h1>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">\n Source of truth: OpenClaw gateway config (patched via <code className=\"font-mono\">gateway config.patch</code>).\n Some changes may require a gateway restart depending on provider.\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button onClick={() => void refresh()} disabled={saving}>\n Refresh\n </Button>\n <Button kind=\"primary\" onClick={addBinding} disabled={saving}>\n Add binding\n </Button>\n </div>\n </div>\n\n {error ? <div className=\"ck-glass p-4 text-sm text-red-300\">{error}</div> : null}\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <div className=\"ck-glass p-4\">\n <div className=\"text-sm font-medium\">Bindings</div>\n {loading ? (\n <div className=\"mt-3 text-sm text-[color:var(--ck-text-secondary)]\">Loading…</div>\n ) : providers.length === 0 ? (\n <div className=\"mt-3 text-sm text-[color:var(--ck-text-secondary)]\">No bindings configured.</div>\n ) : (\n <div className=\"mt-3 space-y-2\">\n {providers.map((p) => (\n <button\n key={p}\n className={\n \"flex w-full items-center justify-between rounded-[var(--ck-radius-sm)] border px-3 py-2 text-left text-sm \" +\n (p === provider\n ? \"border-[var(--ck-accent-red)] bg-[color:var(--ck-bg-glass)]\"\n : \"border-[color:var(--ck-border-subtle)] hover:bg-[color:var(--ck-bg-glass)]\")\n }\n onClick={() => selectProvider(p)}\n >\n <span className=\"font-mono\">{p}</span>\n <span className=\"text-xs text-[color:var(--ck-text-tertiary)]\">edit</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"ck-glass p-4 lg:col-span-2\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div>\n <div className=\"text-sm font-medium\">Edit</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Provider: <code className=\"font-mono\">{provider}</code>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button kind=\"danger\" onClick={() => void remove(provider)} disabled={saving}>\n Delete\n </Button>\n <Button kind=\"primary\" onClick={() => void upsert()} disabled={saving}>\n {saving ? \"Saving…\" : \"Save\"}\n </Button>\n </div>\n </div>\n\n <div className=\"mt-4\">\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Config (JSON)</div>\n <textarea\n value={configJson}\n onChange={(e) => setConfigJson(e.target.value)}\n className=\"mt-2 h-[420px] w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 font-mono text-sm\"\n placeholder={\"{\\n \\\"enabled\\\": true\\n}\"}\n />\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n Validation:\n <ul className=\"list-disc pl-5\">\n <li>Telegram requires <code className=\"font-mono\">botToken</code>.</li>\n <li>Other providers can be edited as raw JSON in v1.</li>\n </ul>\n </div>\n\n {selectedConfig ? (\n <div className=\"mt-3 text-xs text-[color:var(--ck-text-tertiary)]\">\n Current keys: <code className=\"font-mono\">{Object.keys(selectedConfig).join(\", \") || \"(none)\"}</code>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[96325,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(72131);function f({goalId:a}){let f=(0,d.useRouter)(),[g,h]=(0,e.useState)(!0),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(null),[m,n]=(0,e.useState)(""),[o,p]=(0,e.useState)("planned"),[q,r]=(0,e.useState)(""),[s,t]=(0,e.useState)(""),[u,v]=(0,e.useState)(""),[w,x]=(0,e.useState)(null),y=(0,e.useMemo)(()=>q.split(",").map(a=>a.trim()).filter(Boolean),[q]),z=(0,e.useMemo)(()=>s.split(",").map(a=>a.trim()).filter(Boolean),[s]);async function A(){h(!0),l(null);let b=await fetch(`/api/goals/${encodeURIComponent(a)}`,{cache:"no-store"}),c=await b.json(),d=c&&"object"==typeof c?c:{};if(!b.ok){l(String(d.error??"Failed to load goal")),h(!1);return}let e=d.goal??{};n(e.title??""),p(e.status??"planned"),r((e.tags??[]).join(", ")),t((e.teams??[]).join(", ")),v(String(d.body??"")),x(e.updatedAt??null),h(!1)}async function B(){j(!0),l(null);let b=await fetch(`/api/goals/${encodeURIComponent(a)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({title:m,status:o,tags:y,teams:z,body:u})}),c=await b.json();if(!b.ok){l(c?.error??"Failed to save"),j(!1);return}x(c.goal.updatedAt??null),j(!1),f.push("/goals")}async function C(){j(!0),l(null);let b=await fetch(`/api/goals/${encodeURIComponent(a)}/promote`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({})}),c=await b.json();if(!b.ok){l(c?.error??"Failed to promote"),j(!1);return}await A(),j(!1)}async function D(){if(!window.confirm(`Delete goal "${a}"? This will delete the markdown file.`))return;j(!0),l(null);let b=await fetch(`/api/goals/${encodeURIComponent(a)}`,{method:"DELETE"}),c=await b.json();if(!b.ok){l(c?.error??"Failed to delete"),j(!1);return}f.push("/goals")}return(0,e.useEffect)(()=>{let b=!1;return(async()=>{h(!0),l(null);try{let c=await fetch(`/api/goals/${encodeURIComponent(a)}`,{cache:"no-store"}),d=await c.json(),e=d&&"object"==typeof d?d:{};if(b)return;if(!c.ok){l(String(e.error??"Failed to load goal")),h(!1);return}let f=e.goal??{};n(f.title??""),p(f.status??"planned"),r((f.tags??[]).join(", ")),t((f.teams??[]).join(", ")),v(String(e.body??"")),x(f.updatedAt??null),h(!1)}catch(a){if(b)return;l(a instanceof Error?a.message:String(a)),h(!1)}})(),()=>{b=!0}},[a]),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)(c.default,{href:"/goals",className:"text-sm font-medium hover:underline",children:"← Back"}),(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)] font-mono",children:a})]}),(0,b.jsxs)("div",{className:"ck-glass p-6 space-y-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Title"}),(0,b.jsx)("input",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:m,onChange:a=>n(a.target.value),placeholder:"Goal title"})]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Status"}),(0,b.jsxs)("select",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:o,onChange:a=>p(a.target.value),children:[(0,b.jsx)("option",{value:"planned",children:"Planned"}),(0,b.jsx)("option",{value:"active",children:"Active"}),(0,b.jsx)("option",{value:"done",children:"Done"})]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Teams (comma-separated)"}),(0,b.jsx)("input",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:s,onChange:a=>t(a.target.value),placeholder:"development-team, marketing-team"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Tags (comma-separated)"}),(0,b.jsx)("input",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:q,onChange:a=>r(a.target.value),placeholder:"onboarding, growth"})]})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Body (markdown)"}),(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:w?`updated ${new Date(w).toLocaleString()}`:""})]}),(0,b.jsx)("textarea",{className:"mt-1 h-[320px] w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 font-mono text-sm",value:u,onChange:a=>v(a.target.value),placeholder:"Write the goal here…"})]}),k?(0,b.jsx)("div",{className:"text-sm text-red-300",children:k}):null,(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,b.jsx)("button",{onClick:()=>void B(),disabled:i||g,className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white disabled:opacity-50",children:i?"Saving…":"Save"}),(0,b.jsx)("button",{onClick:()=>void A(),disabled:i,className:"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] px-3 py-2 text-sm",children:"Reload"}),(0,b.jsx)("button",{onClick:()=>void C(),disabled:i||g,className:"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] px-3 py-2 text-sm font-medium",children:"Promote to inbox"}),(0,b.jsx)("button",{onClick:()=>void D(),disabled:i||g,className:"rounded-[var(--ck-radius-sm)] border border-red-500/40 px-3 py-2 text-sm font-medium text-red-200",children:"Delete"})]})]}),(0,b.jsxs)("div",{className:"ck-glass p-6",children:[(0,b.jsx)("div",{className:"text-sm font-medium",children:"Preview"}),(0,b.jsx)("pre",{className:"mt-2 whitespace-pre-wrap break-words text-sm leading-6 text-[color:var(--ck-text-primary)]",children:u})]}),g?(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):null]})}a.s(["default",()=>f])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=src_app_goals_%5Bid%5D_goal-editor_tsx_7df8193f._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/goals/%5Bid%5D/goal-editor.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { useEffect, useMemo, useState } from \"react\";\n\ntype GoalStatus = \"planned\" | \"active\" | \"done\";\n\ntype Goal = {\n id: string;\n title: string;\n status: GoalStatus;\n tags: string[];\n teams: string[];\n updatedAt: string;\n};\n\nexport default function GoalEditor({ goalId }: { goalId: string }) {\n const router = useRouter();\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const [title, setTitle] = useState(\"\");\n const [status, setStatus] = useState<GoalStatus>(\"planned\");\n const [tagsRaw, setTagsRaw] = useState(\"\");\n const [teamsRaw, setTeamsRaw] = useState(\"\");\n const [body, setBody] = useState(\"\");\n const [updatedAt, setUpdatedAt] = useState<string | null>(null);\n\n const tags = useMemo(\n () => tagsRaw.split(\",\").map((s) => s.trim()).filter(Boolean),\n [tagsRaw]\n );\n const teams = useMemo(\n () => teamsRaw.split(\",\").map((s) => s.trim()).filter(Boolean),\n [teamsRaw]\n );\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n setLoading(true);\n setError(null);\n try {\n const res = await fetch(`/api/goals/${encodeURIComponent(goalId)}`, { cache: \"no-store\" });\n const data = (await res.json()) as unknown;\n const obj = (data && typeof data === \"object\") ? (data as Record<string, unknown>) : {};\n if (cancelled) return;\n\n if (!res.ok) {\n setError(String(obj.error ?? \"Failed to load goal\"));\n setLoading(false);\n return;\n }\n\n const g = (obj.goal ?? {}) as Goal;\n setTitle(g.title ?? \"\");\n setStatus((g.status as GoalStatus) ?? \"planned\");\n setTagsRaw((g.tags ?? []).join(\", \"));\n setTeamsRaw((g.teams ?? []).join(\", \"));\n setBody(String(obj.body ?? \"\"));\n setUpdatedAt(g.updatedAt ?? null);\n setLoading(false);\n } catch (e: unknown) {\n if (cancelled) return;\n const msg = e instanceof Error ? e.message : String(e);\n setError(msg);\n setLoading(false);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [goalId]);\n\n async function reload() {\n setLoading(true);\n setError(null);\n const res = await fetch(`/api/goals/${encodeURIComponent(goalId)}`, { cache: \"no-store\" });\n const data = (await res.json()) as unknown;\n const obj = (data && typeof data === \"object\") ? (data as Record<string, unknown>) : {};\n if (!res.ok) {\n setError(String(obj.error ?? \"Failed to load goal\"));\n setLoading(false);\n return;\n }\n const g = (obj.goal ?? {}) as Goal;\n setTitle(g.title ?? \"\");\n setStatus((g.status as GoalStatus) ?? \"planned\");\n setTagsRaw((g.tags ?? []).join(\", \"));\n setTeamsRaw((g.teams ?? []).join(\", \"));\n setBody(String(obj.body ?? \"\"));\n setUpdatedAt(g.updatedAt ?? null);\n setLoading(false);\n }\n\n async function save() {\n setSaving(true);\n setError(null);\n const res = await fetch(`/api/goals/${encodeURIComponent(goalId)}`, {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ title, status, tags, teams, body }),\n });\n const data = await res.json();\n if (!res.ok) {\n setError(data?.error ?? \"Failed to save\");\n setSaving(false);\n return;\n }\n const g = data.goal as Goal;\n setUpdatedAt(g.updatedAt ?? null);\n setSaving(false);\n\n // Save should behave like an editor \"submit\": return to the list.\n router.push(\"/goals\");\n }\n\n async function promoteToInbox() {\n setSaving(true);\n setError(null);\n const res = await fetch(`/api/goals/${encodeURIComponent(goalId)}/promote`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n });\n const data = await res.json();\n if (!res.ok) {\n setError(data?.error ?? \"Failed to promote\");\n setSaving(false);\n return;\n }\n\n await reload();\n setSaving(false);\n }\n\n async function deleteThisGoal() {\n const ok = window.confirm(`Delete goal \\\"${goalId}\\\"? This will delete the markdown file.`);\n if (!ok) return;\n\n setSaving(true);\n setError(null);\n const res = await fetch(`/api/goals/${encodeURIComponent(goalId)}`, { method: \"DELETE\" });\n const data = await res.json();\n if (!res.ok) {\n setError(data?.error ?? \"Failed to delete\");\n setSaving(false);\n return;\n }\n\n router.push(\"/goals\");\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <Link href=\"/goals\" className=\"text-sm font-medium hover:underline\">\n ← Back\n </Link>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)] font-mono\">{goalId}</div>\n </div>\n\n <div className=\"ck-glass p-6 space-y-4\">\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Title</div>\n <input\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Goal title\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Status</div>\n <select\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={status}\n onChange={(e) => setStatus(e.target.value as GoalStatus)}\n >\n <option value=\"planned\">Planned</option>\n <option value=\"active\">Active</option>\n <option value=\"done\">Done</option>\n </select>\n </div>\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Teams (comma-separated)</div>\n <input\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={teamsRaw}\n onChange={(e) => setTeamsRaw(e.target.value)}\n placeholder=\"development-team, marketing-team\"\n />\n </div>\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Tags (comma-separated)</div>\n <input\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={tagsRaw}\n onChange={(e) => setTagsRaw(e.target.value)}\n placeholder=\"onboarding, growth\"\n />\n </div>\n </div>\n\n <div>\n <div className=\"flex items-center justify-between\">\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Body (markdown)</div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">\n {updatedAt ? `updated ${new Date(updatedAt).toLocaleString()}` : \"\"}\n </div>\n </div>\n <textarea\n className=\"mt-1 h-[320px] w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 font-mono text-sm\"\n value={body}\n onChange={(e) => setBody(e.target.value)}\n placeholder=\"Write the goal here…\"\n />\n </div>\n\n {error ? <div className=\"text-sm text-red-300\">{error}</div> : null}\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <button\n onClick={() => void save()}\n disabled={saving || loading}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white disabled:opacity-50\"\n >\n {saving ? \"Saving…\" : \"Save\"}\n </button>\n <button\n onClick={() => void reload()}\n disabled={saving}\n className=\"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] px-3 py-2 text-sm\"\n >\n Reload\n </button>\n <button\n onClick={() => void promoteToInbox()}\n disabled={saving || loading}\n className=\"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] px-3 py-2 text-sm font-medium\"\n >\n Promote to inbox\n </button>\n <button\n onClick={() => void deleteThisGoal()}\n disabled={saving || loading}\n className=\"rounded-[var(--ck-radius-sm)] border border-red-500/40 px-3 py-2 text-sm font-medium text-red-200\"\n >\n Delete\n </button>\n </div>\n </div>\n\n <div className=\"ck-glass p-6\">\n <div className=\"text-sm font-medium\">Preview</div>\n <pre className=\"mt-2 whitespace-pre-wrap break-words text-sm leading-6 text-[color:var(--ck-text-primary)]\">{body}</pre>\n </div>\n\n {loading ? <div className=\"text-sm text-[color:var(--ck-text-secondary)]\">Loading…</div> : null}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[81004,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(72131);function f({children:a}){return(0,b.jsx)("span",{className:"rounded-full bg-[color:var(--ck-bg-glass)] px-2 py-0.5 text-xs text-[color:var(--ck-text-secondary)]",children:a})}function g(){let[a,g]=(0,e.useState)(null),[h,i]=(0,e.useState)(null),j=((0,d.useSearchParams)().get("team")??"").trim(),[k,l]=(0,e.useState)("all");async function m(){g(null),i(null);let a=await fetch("/api/goals",{cache:"no-store"}),b=await a.json(),c=b&&"object"==typeof b?b:{};if(!a.ok){i(String(c.error??"Failed to load goals")),g([]);return}g(c.goals??[])}(0,e.useEffect)(()=>{let a=!1;return(async()=>{try{let b=await fetch("/api/goals",{cache:"no-store"}),c=await b.json();if(a)return;let d=c&&"object"==typeof c?c:{};if(!b.ok){let a=d.error??"Failed to load goals";i(String(a)),g([]);return}i(null),g(d.goals??[])}catch(b){if(a)return;i(b instanceof Error?b.message:String(b)),g([])}})(),()=>{a=!0}},[]);let n=(0,e.useMemo)(()=>{let b=a??[];return(j&&(b=b.filter(a=>Array.isArray(a.teams)&&a.teams.includes(j))),"all"===k)?b:b.filter(a=>a.status===k)},[a,k,j]),o=(0,e.useMemo)(()=>{let b=a??[],c={all:b.length,active:0,planned:0,done:0};for(let a of b)"active"===a.status?c.active+=1:"done"===a.status?c.done+=1:c.planned+=1;return c},[a]);function p(a){return(0,b.jsx)(c.default,{href:`/goals/${encodeURIComponent(a.id)}`,className:"block ck-glass p-5 transition hover:bg-[color:var(--ck-bg-glass)]",children:(0,b.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-base font-semibold text-[color:var(--ck-text-primary)]",children:a.title}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.id}),a.updatedAt?` • updated ${new Date(a.updatedAt).toLocaleString()}`:""]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,b.jsx)(f,{children:a.status}),a.teams?.slice(0,3).map(a=>(0,b.jsx)(f,{children:a},a)),a.tags?.slice(0,3).map(a=>(0,b.jsxs)(f,{children:["#",a]},a))]})]})},a.id)}return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Goals"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["Stored in ",(0,b.jsx)("code",{className:"font-mono",children:"~/.openclaw/workspace/notes/goals/"}),j?(0,b.jsxs)(b.Fragment,{children:[" ","• filtered by team ",(0,b.jsx)("code",{className:"font-mono",children:j})]}):null]})]}),(0,b.jsx)(c.default,{href:"/goals/new",className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white",children:"Create goal"})]}),(0,b.jsx)("div",{className:"ck-glass p-4",children:(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,b.jsx)("label",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Status"}),(0,b.jsxs)("select",{className:"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-sm",value:k,onChange:a=>l(a.target.value),children:[(0,b.jsxs)("option",{value:"all",children:["All (",o.all,")"]}),(0,b.jsxs)("option",{value:"active",children:["Active (",o.active,")"]}),(0,b.jsxs)("option",{value:"planned",children:["Planned (",o.planned,")"]}),(0,b.jsxs)("option",{value:"done",children:["Done (",o.done,")"]})]}),(0,b.jsx)("button",{className:"ml-auto text-sm font-medium hover:underline",onClick:()=>void m(),children:"Refresh"})]})}),h?(0,b.jsx)("div",{className:"ck-glass p-4 text-sm text-red-300",children:h}):null,null==a?(0,b.jsx)("div",{className:"ck-glass p-6 text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):0===n.length?(0,b.jsxs)("div",{className:"ck-glass p-6",children:[(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No goals yet."}),(0,b.jsx)("div",{className:"mt-3",children:(0,b.jsx)(c.default,{href:"/goals/new",className:"text-sm font-medium hover:underline",children:"Create your first goal →"})})]}):"all"!==k?(0,b.jsx)("div",{className:"space-y-3",children:n.map(p)}):(0,b.jsx)("div",{className:"space-y-8",children:["active","planned","done"].map(a=>{let c=n.filter(b=>b.status===a);return c.length?(0,b.jsxs)("section",{children:[(0,b.jsx)("div",{className:"mb-2 flex items-end justify-between",children:(0,b.jsxs)("h2",{className:"text-sm font-semibold tracking-wide text-[color:var(--ck-text-secondary)] uppercase",children:[a," (",c.length,")"]})}),(0,b.jsx)("div",{className:"space-y-3",children:c.map(p)})]},a):null})})]})}a.s(["default",()=>g])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=src_app_goals_goals-client_tsx_a45eeff4._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/goals/goals-client.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useSearchParams } from \"next/navigation\";\nimport { useEffect, useMemo, useState } from \"react\";\n\ntype Goal = {\n id: string;\n title: string;\n status: \"planned\" | \"active\" | \"done\";\n tags: string[];\n teams: string[];\n updatedAt: string;\n};\n\nfunction Badge({ children }: { children: React.ReactNode }) {\n return (\n <span className=\"rounded-full bg-[color:var(--ck-bg-glass)] px-2 py-0.5 text-xs text-[color:var(--ck-text-secondary)]\">\n {children}\n </span>\n );\n}\n\nexport default function GoalsClient() {\n const [goals, setGoals] = useState<Goal[] | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const searchParams = useSearchParams();\n const teamFilter = (searchParams.get(\"team\") ?? \"\").trim();\n\n const [filterStatus, setFilterStatus] = useState<string>(\"all\");\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const res = await fetch(\"/api/goals\", { cache: \"no-store\" });\n const data = (await res.json()) as unknown;\n if (cancelled) return;\n\n const obj = (data && typeof data === \"object\") ? (data as Record<string, unknown>) : {};\n\n if (!res.ok) {\n const msg = obj.error ?? \"Failed to load goals\";\n setError(String(msg));\n setGoals([]);\n return;\n }\n\n setError(null);\n setGoals((obj.goals ?? []) as Goal[]);\n } catch (e: unknown) {\n if (cancelled) return;\n const msg = e instanceof Error ? e.message : String(e);\n setError(msg);\n setGoals([]);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n async function reload() {\n // reuse the same logic by forcing a page-level refetch\n // (simple and avoids extra hooks)\n setGoals(null);\n setError(null);\n const res = await fetch(\"/api/goals\", { cache: \"no-store\" });\n const data = (await res.json()) as unknown;\n const obj = (data && typeof data === \"object\") ? (data as Record<string, unknown>) : {};\n if (!res.ok) {\n setError(String(obj.error ?? \"Failed to load goals\"));\n setGoals([]);\n return;\n }\n setGoals((obj.goals ?? []) as Goal[]);\n }\n\n const filtered = useMemo(() => {\n let list = goals ?? [];\n if (teamFilter) list = list.filter((g) => Array.isArray(g.teams) && g.teams.includes(teamFilter));\n if (filterStatus === \"all\") return list;\n return list.filter((g) => g.status === filterStatus);\n }, [goals, filterStatus, teamFilter]);\n\n const counts = useMemo(() => {\n const list = goals ?? [];\n const c = { all: list.length, active: 0, planned: 0, done: 0 };\n for (const g of list) {\n if (g.status === \"active\") c.active += 1;\n else if (g.status === \"done\") c.done += 1;\n else c.planned += 1;\n }\n return c;\n }, [goals]);\n\n function renderGoal(g: Goal) {\n return (\n <Link\n key={g.id}\n href={`/goals/${encodeURIComponent(g.id)}`}\n className=\"block ck-glass p-5 transition hover:bg-[color:var(--ck-bg-glass)]\"\n >\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-base font-semibold text-[color:var(--ck-text-primary)]\">{g.title}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{g.id}</span>\n {g.updatedAt ? ` • updated ${new Date(g.updatedAt).toLocaleString()}` : \"\"}\n </div>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Badge>{g.status}</Badge>\n {g.teams?.slice(0, 3).map((t) => (\n <Badge key={t}>{t}</Badge>\n ))}\n {g.tags?.slice(0, 3).map((t) => (\n <Badge key={t}>#{t}</Badge>\n ))}\n </div>\n </div>\n </Link>\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">Goals</h1>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">\n Stored in <code className=\"font-mono\">~/.openclaw/workspace/notes/goals/</code>\n {teamFilter ? (\n <>\n {\" \"}• filtered by team <code className=\"font-mono\">{teamFilter}</code>\n </>\n ) : null}\n </p>\n </div>\n <Link\n href=\"/goals/new\"\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white\"\n >\n Create goal\n </Link>\n </div>\n\n <div className=\"ck-glass p-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"text-sm text-[color:var(--ck-text-secondary)]\">Status</label>\n <select\n className=\"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-sm\"\n value={filterStatus}\n onChange={(e) => setFilterStatus(e.target.value)}\n >\n <option value=\"all\">All ({counts.all})</option>\n <option value=\"active\">Active ({counts.active})</option>\n <option value=\"planned\">Planned ({counts.planned})</option>\n <option value=\"done\">Done ({counts.done})</option>\n </select>\n\n <button\n className=\"ml-auto text-sm font-medium hover:underline\"\n onClick={() => void reload()}\n >\n Refresh\n </button>\n </div>\n </div>\n\n {error ? (\n <div className=\"ck-glass p-4 text-sm text-red-300\">{error}</div>\n ) : null}\n\n {goals == null ? (\n <div className=\"ck-glass p-6 text-sm text-[color:var(--ck-text-secondary)]\">Loading…</div>\n ) : filtered.length === 0 ? (\n <div className=\"ck-glass p-6\">\n <div className=\"text-sm text-[color:var(--ck-text-secondary)]\">No goals yet.</div>\n <div className=\"mt-3\">\n <Link href=\"/goals/new\" className=\"text-sm font-medium hover:underline\">\n Create your first goal →\n </Link>\n </div>\n </div>\n ) : filterStatus !== \"all\" ? (\n <div className=\"space-y-3\">{filtered.map(renderGoal)}</div>\n ) : (\n <div className=\"space-y-8\">\n {([\"active\", \"planned\", \"done\"] as const).map((status) => {\n const section = filtered.filter((g) => g.status === status);\n if (!section.length) return null;\n return (\n <section key={status}>\n <div className=\"mb-2 flex items-end justify-between\">\n <h2 className=\"text-sm font-semibold tracking-wide text-[color:var(--ck-text-secondary)] uppercase\">\n {status} ({section.length})\n </h2>\n </div>\n <div className=\"space-y-3\">{section.map(renderGoal)}</div>\n </section>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"wDAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAWA,SAAS,EAAM,UAAE,CAAQ,CAAiC,EACxD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,gHACb,GAGP,CAEe,SAAS,IACtB,GAAM,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAgB,MAC5C,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAgB,MAG5C,EAAa,CADE,AACD,CADC,EAAA,EAAA,eAAA,AAAe,IACH,GAAG,CAAC,SAAW,EAAA,CAAE,CAAE,IAAI,GAElD,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAS,OAkCzD,eAAe,IAGb,EAAS,MACT,EAAS,MACT,IAAM,EAAM,MAAM,MAAM,aAAc,CAAE,MAAO,UAAW,GACpD,EAAQ,MAAM,EAAI,IAAI,GACtB,EAAO,GAAwB,UAAhB,OAAO,EAAsB,EAAmC,CAAC,EACtF,GAAI,CAAC,EAAI,EAAE,CAAE,CACX,EAAS,OAAO,EAAI,KAAK,EAAI,yBAC7B,EAAS,EAAE,EACX,MACF,CACA,EAAU,EAAI,KAAK,EAAI,EAAE,CAC3B,CA9CA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,IAAI,GAAY,EA0BhB,MAzBA,AAAC,WACC,GAAI,CACF,IAAM,EAAM,MAAM,MAAM,aAAc,CAAE,MAAO,UAAW,GACpD,EAAQ,MAAM,EAAI,IAAI,GAC5B,GAAI,EAAW,OAEf,IAAM,EAAO,GAAwB,UAAhB,OAAO,EAAsB,EAAmC,CAAC,EAEtF,GAAI,CAAC,EAAI,EAAE,CAAE,CACX,IAAM,EAAM,EAAI,KAAK,EAAI,uBACzB,EAAS,OAAO,IAChB,EAAS,EAAE,EACX,MACF,CAEA,EAAS,MACT,EAAU,EAAI,KAAK,EAAI,EAAE,CAC3B,CAAE,MAAO,EAAY,CACnB,GAAI,EAAW,OAEf,EADY,OACH,MADgB,MAAQ,EAAE,OAAO,CAAG,OAAO,IAEpD,EAAS,EAAE,CACb,CACF,CAAC,IAEM,KACL,GAAY,CACd,CACF,EAAG,EAAE,EAkBL,IAAM,EAAW,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,KACvB,IAAI,EAAO,GAAS,EAAE,OAEtB,CADI,IAAY,EAAO,EAAK,MAAM,CAAC,AAAC,GAAM,MAAM,OAAO,CAAC,EAAE,KAAK,GAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAA,EAChE,OAAO,CAAxB,GAA+B,EAC5B,EAAK,MAAM,CAAC,AAAC,GAAM,EAAE,MAAM,GAAK,EACzC,EAAG,CAAC,EAAO,EAAc,EAAW,EAE9B,EAAS,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,KACrB,IAAM,EAAO,GAAS,EAAE,CAClB,EAAI,CAAE,IAAK,EAAK,MAAM,CAAE,OAAQ,EAAG,QAAS,EAAG,KAAM,CAAE,EAC7D,IAAK,IAAM,KAAK,EACG,GADG,QAChB,EAAE,MAAM,CAAe,EAAE,MAAM,EAAI,EACjB,AAAb,WAAE,MAAM,CAAa,EAAE,IAAI,EAAI,EACnC,EAAE,OAAO,EAAI,EAEpB,OAAO,CACT,EAAG,CAAC,EAAM,EAEV,SAAS,EAAW,CAAO,EACzB,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CAEH,KAAM,CAAC,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAA,CAAG,CAC1C,UAAU,6EAEV,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,6DACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oBACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gFAAwE,EAAE,KAAK,GAC9F,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8DACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,qBAAa,EAAE,EAAE,GAChC,EAAE,SAAS,CAAG,CAAC,WAAW,EAAE,IAAI,KAAK,EAAE,SAAS,EAAE,cAAc,GAAA,CAAI,CAAG,SAG5E,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,iCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAO,EAAE,MAAM,GACf,EAAE,KAAK,EAAE,MAAM,EAAG,GAAG,IAAI,AAAC,GACzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAe,GAAJ,IAEb,EAAE,IAAI,EAAE,MAAM,EAAG,GAAG,IAAI,AAAC,GACxB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAAc,IAAE,IAAL,WAlBb,EAAE,EAAE,CAwBf,CAEA,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8DACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,iDAAwC,UACtD,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,+DAAqD,aACtD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,qBAAY,uCACrC,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACG,IAAI,sBAAmB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,qBAAa,OAErD,WAGR,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CACH,KAAK,aACL,UAAU,4GACX,mBAKH,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wBACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAU,yDAAgD,WACjE,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,UAAU,+GACV,MAAO,EACP,SAAU,AAAC,GAAM,EAAgB,EAAE,MAAM,CAAC,KAAK,YAE/C,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,MAAM,gBAAM,QAAM,EAAO,GAAG,CAAC,OACrC,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,MAAM,mBAAS,WAAS,EAAO,MAAM,CAAC,OAC9C,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,MAAM,oBAAU,YAAU,EAAO,OAAO,CAAC,OACjD,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,MAAM,iBAAO,SAAO,EAAO,IAAI,CAAC,UAG1C,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,UAAU,8CACV,QAAS,IAAM,KAAK,aACrB,iBAMJ,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,6CAAqC,IAClD,KAEM,MAAT,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,sEAA6D,aACtD,IAApB,EAAS,MAAM,CACjB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,yBACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,yDAAgD,kBAC/D,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,aAAa,UAAU,+CAAsC,kCAKzD,QAAjB,EACF,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,qBAAa,EAAS,GAAG,CAAC,KAEzC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,qBACX,CAAC,SAAU,UAAW,OAAO,CAAW,GAAG,CAAC,AAAC,IAC7C,IAAM,EAAU,EAAS,MAAM,CAAC,AAAC,GAAM,EAAE,MAAM,GAAK,UACpD,AAAK,EAAQ,EAAT,IAAe,CAEjB,CAFmB,AAEnB,EAAA,EAAA,IAAA,EAAC,UAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,+CACb,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,gGACX,EAAO,KAAG,EAAQ,MAAM,CAAC,SAG9B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,qBAAa,EAAQ,GAAG,CAAC,OAN5B,GAFY,IAW9B,OAKV"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[37760,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(72131);function f(){let a=(0,d.useRouter)(),[f,g]=(0,e.useState)(""),[h,i]=(0,e.useState)(""),[j,k]=(0,e.useState)("planned"),[l,m]=(0,e.useState)(""),[n,o]=(0,e.useState)(""),[p,q]=(0,e.useState)("## Workflow\n<!-- goal-workflow -->\n- Use **Promote to inbox** to send this goal to the development-team inbox for scoping.\n- When promoted, set goal status to **active**.\n- Track implementation work via tickets (add links/IDs under a **Tickets** section in this goal).\n- When development is complete (all associated tickets marked done), set goal status to **done**.\n\n## Tickets\n- (add ticket links/ids)\n"),[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(!1),v=(0,e.useMemo)(()=>l.split(",").map(a=>a.trim()).filter(Boolean),[l]),w=(0,e.useMemo)(()=>n.split(",").map(a=>a.trim()).filter(Boolean),[n]),x=(0,e.useMemo)(()=>{let a=h.toLowerCase().trim().replace(/[^a-z0-9\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return a.length>=2?a:""},[h]);async function y(){u(!0),s(null);let b=f.trim(),c=await fetch("/api/goals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:b,title:h,status:j,tags:v,teams:w,body:p})}),d=await c.json();if(!c.ok){s(d?.error??"Failed to create goal"),u(!1);return}a.push(`/goals/${encodeURIComponent(b)}`)}return(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsx)(c.default,{href:"/goals",className:"text-sm font-medium hover:underline",children:"← Back"}),(0,b.jsxs)("div",{className:"ck-glass p-6 space-y-4",children:[(0,b.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Create goal"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"ID"}),(0,b.jsx)("input",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm font-mono",value:f,onChange:a=>g(a.target.value),placeholder:"increase-trial-activation"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Lowercase letters, numbers, hyphens. Stored as ",(0,b.jsxs)("code",{className:"font-mono",children:[f||"<id>",".md"]}),".",x&&!f.trim()?(0,b.jsxs)(b.Fragment,{children:[" ","Suggested:"," ",(0,b.jsx)("button",{className:"underline",onClick:()=>g(x),children:x})]}):null]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Title"}),(0,b.jsx)("input",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:h,onChange:a=>i(a.target.value),placeholder:"Increase trial activation"})]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Status"}),(0,b.jsxs)("select",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:j,onChange:a=>k(a.target.value),children:[(0,b.jsx)("option",{value:"planned",children:"Planned"}),(0,b.jsx)("option",{value:"active",children:"Active"}),(0,b.jsx)("option",{value:"done",children:"Done"})]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Teams (comma-separated)"}),(0,b.jsx)("input",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:n,onChange:a=>o(a.target.value),placeholder:"development-team, marketing-team"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Tags (comma-separated)"}),(0,b.jsx)("input",{className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm",value:l,onChange:a=>m(a.target.value),placeholder:"onboarding, growth"})]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Body (markdown)"}),(0,b.jsx)("textarea",{className:"mt-1 h-[260px] w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 font-mono text-sm",value:p,onChange:a=>q(a.target.value),placeholder:"Write the goal here…"})]}),r?(0,b.jsx)("div",{className:"text-sm text-red-300",children:r}):null,(0,b.jsx)("button",{onClick:()=>void y(),disabled:t,className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white disabled:opacity-50",children:t?"Creating…":"Create"})]})]})}a.s(["default",()=>f])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=src_app_goals_new_page_tsx_8f749229._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/goals/new/page.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { useMemo, useState } from \"react\";\n\ntype GoalStatus = \"planned\" | \"active\" | \"done\";\n\nfunction slugify(input: string) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 64);\n}\n\nexport default function NewGoalPage() {\n const router = useRouter();\n\n const [id, setId] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [status, setStatus] = useState<GoalStatus>(\"planned\");\n const [tagsRaw, setTagsRaw] = useState(\"\");\n const [teamsRaw, setTeamsRaw] = useState(\"\");\n const [body, setBody] = useState(\n \"## Workflow\\n<!-- goal-workflow -->\\n- Use **Promote to inbox** to send this goal to the development-team inbox for scoping.\\n- When promoted, set goal status to **active**.\\n- Track implementation work via tickets (add links/IDs under a **Tickets** section in this goal).\\n- When development is complete (all associated tickets marked done), set goal status to **done**.\\n\\n## Tickets\\n- (add ticket links/ids)\\n\"\n );\n\n const [error, setError] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n\n const tags = useMemo(() => tagsRaw.split(\",\").map((s) => s.trim()).filter(Boolean), [tagsRaw]);\n const teams = useMemo(() => teamsRaw.split(\",\").map((s) => s.trim()).filter(Boolean), [teamsRaw]);\n\n const suggestedId = useMemo(() => {\n const s = slugify(title);\n return s.length >= 2 ? s : \"\";\n }, [title]);\n\n async function create() {\n setSaving(true);\n setError(null);\n\n const finalId = id.trim();\n\n const res = await fetch(\"/api/goals\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ id: finalId, title, status, tags, teams, body }),\n });\n\n const data = await res.json();\n if (!res.ok) {\n setError(data?.error ?? \"Failed to create goal\");\n setSaving(false);\n return;\n }\n\n router.push(`/goals/${encodeURIComponent(finalId)}`);\n }\n\n return (\n <div className=\"space-y-4\">\n <Link href=\"/goals\" className=\"text-sm font-medium hover:underline\">\n ← Back\n </Link>\n\n <div className=\"ck-glass p-6 space-y-4\">\n <h1 className=\"text-xl font-semibold tracking-tight\">Create goal</h1>\n\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">ID</div>\n <input\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm font-mono\"\n value={id}\n onChange={(e) => setId(e.target.value)}\n placeholder=\"increase-trial-activation\"\n />\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Lowercase letters, numbers, hyphens. Stored as <code className=\"font-mono\">{id || \"<id>\"}.md</code>.\n {suggestedId && !id.trim() ? (\n <>\n {\" \"}Suggested:{\" \"}\n <button className=\"underline\" onClick={() => setId(suggestedId)}>\n {suggestedId}\n </button>\n </>\n ) : null}\n </div>\n </div>\n\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Title</div>\n <input\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Increase trial activation\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Status</div>\n <select\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={status}\n onChange={(e) => setStatus(e.target.value as GoalStatus)}\n >\n <option value=\"planned\">Planned</option>\n <option value=\"active\">Active</option>\n <option value=\"done\">Done</option>\n </select>\n </div>\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Teams (comma-separated)</div>\n <input\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={teamsRaw}\n onChange={(e) => setTeamsRaw(e.target.value)}\n placeholder=\"development-team, marketing-team\"\n />\n </div>\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Tags (comma-separated)</div>\n <input\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 text-sm\"\n value={tagsRaw}\n onChange={(e) => setTagsRaw(e.target.value)}\n placeholder=\"onboarding, growth\"\n />\n </div>\n </div>\n\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Body (markdown)</div>\n <textarea\n className=\"mt-1 h-[260px] w-full rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-transparent px-3 py-2 font-mono text-sm\"\n value={body}\n onChange={(e) => setBody(e.target.value)}\n placeholder=\"Write the goal here…\"\n />\n </div>\n\n {error ? <div className=\"text-sm text-red-300\">{error}</div> : null}\n\n <button\n onClick={() => void create()}\n disabled={saving}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white disabled:opacity-50\"\n >\n {saving ? \"Creating…\" : \"Create\"}\n </button>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[18746,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(1760);function f(a){let b=a.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);if(!b)return{fm:null};try{let a=(0,e.parse)(b[1]);if(!a||"object"!=typeof a)return{fm:null};return{fm:a}}catch(a){return{fm:null,error:a instanceof Error?a.message:String(a)}}}function g(a){let b=a.split(".").slice(1).join(".");switch(b){case"soul":return"SOUL.md";case"agents":return"AGENTS.md";case"tools":return"TOOLS.md";case"identity":return"IDENTITY.md";case"install":return"INSTALL.md";default:return b?`${b.toUpperCase()}`:a}}function h(a,b){return a&&b&&a.templates?[...new Set(Object.keys(a.templates).filter(a=>a.startsWith(`${b}.`)).map(g))]:[]}function i({recipeId:a}){let e=(0,d.useRouter)(),[g,i]=(0,c.useState)(!0),[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(""),[p,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(""),[v,w]=(0,c.useState)("no"),[x,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(""),[B,C]=(0,c.useState)(!1),[D,E]=(0,c.useState)(""),[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)("");(0,c.useEffect)(()=>{(async()=>{i(!0),q("");let b=await fetch(`/api/recipes/${encodeURIComponent(a)}`,{cache:"no-store"}),c=await b.json();if(!b.ok){q(c.error||"Failed to load recipe"),i(!1);return}let d=c.recipe;m(d),o(d.content),i(!1)})()},[a]);let L=(0,c.useMemo)(()=>!!l&&null!==l.filePath,[l]),M=(0,c.useMemo)(()=>l&&"team"===l.kind?f(n):{fm:null,error:void 0},[l,n]),N=(0,c.useMemo)(()=>l&&"agent"===l.kind?f(n):{fm:null,error:void 0},[l,n]);async function O(){k(!0),q("");try{let b=await fetch(`/api/recipes/${encodeURIComponent(a)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:n})}),c=await b.json();if(!b.ok)throw Error(c.error||"Save failed");q(`Saved to ${c.filePath}`)}catch(a){q(a instanceof Error?a.message:String(a))}finally{k(!1)}}async function P(){if(!l||"team"!==l.kind)return;let a=t.trim();if(!a)return void A("Team id is required.");if(a===l.id)return void A(`Team id cannot be the same as the recipe id (${l.id}). Choose a new team id.`);y(!0),A("");try{let b=await fetch("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"team",recipeId:l.id,teamId:a,applyConfig:!0,overwrite:!1,cronInstallChoice:v})}),c=await b.json();if(!b.ok)throw Error(c.error||"Create Team failed");s(!1),e.push(`/teams/${encodeURIComponent(a)}`),e.refresh()}catch(a){A(a instanceof Error?a.message:String(a))}finally{y(!1)}}async function Q(){if(!l||"agent"!==l.kind)return;let a=D.trim();if(!a)return void K("Agent id is required.");if(a===l.id)return void K(`Agent id cannot be the same as the recipe id (${l.id}). Choose a new agent id.`);I(!0),K("");try{let b=await fetch("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"agent",recipeId:l.id,agentId:a,name:F.trim()||void 0,applyConfig:!0,overwrite:!1})}),c=await b.json();if(!b.ok)throw Error(c.error||"Create Agent failed");C(!1),e.push(`/agents/${encodeURIComponent(a)}`),e.refresh()}catch(a){K(a instanceof Error?a.message:String(a))}finally{I(!1)}}if(g)return(0,b.jsx)("div",{className:"ck-glass mx-auto max-w-4xl p-6",children:"Loading…"});if(!l)return(0,b.jsx)("div",{className:"ck-glass mx-auto max-w-4xl p-6",children:"Not found."});let R="team"===l.kind?M.fm:null,S="team"===l.kind?M.error:void 0,T="agent"===l.kind?N.fm:null,U="agent"===l.kind?N.error:void 0;return(0,b.jsxs)("div",{className:"ck-glass mx-auto max-w-6xl p-6 sm:p-8",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight",children:l.name}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:[l.id," • ",l.kind," • ",l.source]}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Path: ",l.filePath??"(unknown / not writable)"]})]}),(0,b.jsx)("div",{className:"flex gap-2",children:(0,b.jsx)("button",{disabled:!L||j,onClick:O,className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:j?"Saving…":"Save"})})]}),p?(0,b.jsx)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-primary)]",children:p}):null,(0,b.jsxs)("div",{className:"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2",children:[(0,b.jsxs)("div",{className:"ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe markdown"}),(0,b.jsx)("textarea",{value:n,onChange:a=>o(a.target.value),className:"mt-2 h-[70vh] w-full resize-none rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3 font-mono text-xs text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",spellCheck:!1})]}),"team"===l.kind?(0,b.jsxs)("div",{className:"ck-glass-strong p-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Team recipe"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Create a team from this recipe. Creating a Team runs ",(0,b.jsx)("code",{children:"openclaw recipes scaffold-team"})," with ",(0,b.jsx)("code",{children:"--apply-config"}),"."]})]}),(0,b.jsx)("button",{type:"button",onClick:function(){A(""),u(""),w("no"),s(!0)},className:"shrink-0 rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]",children:"Create Team"})]}),S?(0,b.jsxs)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-xs text-[color:var(--ck-text-primary)]",children:["Frontmatter parse error: ",S]}):null,(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",open:!0,children:[(0,b.jsx)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe information"}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Recipe id:"})," ",R?.id??l.id]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Version:"})," ",R?.version??"(unknown)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Team id:"})," ",R?.team?.teamId??"(not set)"]}),R?.description?(0,b.jsx)("div",{className:"whitespace-pre-wrap",children:R.description}):null]})]}),(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Agents (",R?.agents?.length??0,")"]}),(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(R?.agents??[]).map((a,c)=>(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("span",{className:"font-medium",children:a.name??a.role??"(unnamed)"}),a.role?(0,b.jsxs)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:[" — ",a.role]}):null]}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Role:"})," ",a.role??"(none)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Tools profile:"})," ",a.tools?.profile??"(default)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Allow:"})," ",(a.tools?.allow??[]).length?(a.tools?.allow??[]).join(", "):"(none)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Deny:"})," ",(a.tools?.deny??[]).length?(a.tools?.deny??[]).join(", "):"(none)"]}),(0,b.jsxs)("div",{className:"pt-1",children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Expected files:"})," ",h(R,a.role).length?h(R,a.role).join(", "):"(not listed)"]})]})]},`${a.role??"agent"}:${c}`)),R?.agents&&0!==R.agents.length?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(No agents listed in frontmatter)"})]})]}),(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Cron jobs (",R?.cronJobs?.length??0,")"]}),(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(R?.cronJobs??[]).map((a,c)=>(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("span",{className:"font-medium",children:a.name??a.id??"(unnamed)"}),a.schedule?(0,b.jsxs)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:[" — ",a.schedule]}):null]}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[a.agentId?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Agent:"})," ",a.agentId]}):null,a.channel?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Channel:"})," ",a.channel]}):null,"boolean"==typeof a.enabledByDefault?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Enabled by default:"})," ",a.enabledByDefault?"yes":"no"]}):null,a.message?(0,b.jsx)("div",{className:"mt-2 whitespace-pre-wrap rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-[11px] text-[color:var(--ck-text-primary)]",children:a.message}):null]})]},`${a.id??"cron"}:${c}`)),R?.cronJobs&&0!==R.cronJobs.length?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(No cron jobs listed in frontmatter)"})]})]})]})]}):(0,b.jsxs)("div",{className:"ck-glass-strong p-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Agent recipe"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Create an agent from this recipe. Creating an Agent runs ",(0,b.jsx)("code",{children:"openclaw recipes scaffold"})," with ",(0,b.jsx)("code",{children:"--apply-config"}),"."]})]}),(0,b.jsx)("button",{type:"button",onClick:function(){K(""),E(""),G((N.fm?.name||l?.name||"").trim()),C(!0)},className:"shrink-0 rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]",children:"Create Agent"})]}),U?(0,b.jsxs)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-xs text-[color:var(--ck-text-primary)]",children:["Frontmatter parse error: ",U]}):null,(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",open:!0,children:[(0,b.jsx)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe information"}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Recipe id:"})," ",T?.id??l.id]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Version:"})," ",T?.version??"(unknown)"]}),T?.description?(0,b.jsx)("div",{className:"whitespace-pre-wrap",children:T.description}):null]})]}),(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Files (",Object.keys(T?.templates??{}).length,")"]}),(0,b.jsx)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:Object.keys(T?.templates??{}).length?(0,b.jsx)("ul",{className:"list-disc space-y-1 pl-5",children:Object.keys(T?.templates??{}).map(a=>(0,b.jsxs)("li",{children:[(0,b.jsx)("span",{className:"font-mono text-[11px]",children:a}),(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:" → "}),(0,b.jsx)("span",{className:"font-mono text-[11px]",children:function(a){switch(a){case"soul":return"SOUL.md";case"agents":return"AGENTS.md";case"tools":return"TOOLS.md";case"identity":return"IDENTITY.md";case"install":return"INSTALL.md";case"status":return"STATUS.md";default:return a}}(a)})]},a))}):(0,b.jsx)("div",{className:"text-[color:var(--ck-text-tertiary)]",children:"(No templates listed in frontmatter)"})})]})]})]})]}),r?(0,b.jsx)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4",role:"dialog","aria-modal":"true",children:(0,b.jsxs)("div",{className:"ck-glass w-full max-w-lg p-5",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-lg font-semibold tracking-tight",children:"Create Team"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["From recipe: ",l.id]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>x?null:s(!1),className:"rounded-[var(--ck-radius-sm)] px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]",children:"Close"})]}),(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Team id"}),(0,b.jsx)("input",{value:t,onChange:a=>u(a.target.value),placeholder:"e.g. acme",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:x})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Install cron jobs"}),(0,b.jsxs)("select",{value:v,onChange:a=>w(a.target.value),className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:x,children:[(0,b.jsx)("option",{value:"no",children:"No (recommended)"}),(0,b.jsx)("option",{value:"yes",children:"Yes"})]}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:"Kitchen scaffolds non-interactively; this controls the one-time cron install choice for this run."})]}),z?(0,b.jsx)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm",children:z}):null,(0,b.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,b.jsx)("button",{type:"button",disabled:x,onClick:()=>s(!1),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50",children:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:x,onClick:P,className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:x?"Creating…":"Create Team"})]})]})]})}):null,B?(0,b.jsx)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4",role:"dialog","aria-modal":"true",children:(0,b.jsxs)("div",{className:"ck-glass w-full max-w-lg p-5",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-lg font-semibold tracking-tight",children:"Create Agent"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["From recipe: ",l.id]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>H?null:C(!1),className:"rounded-[var(--ck-radius-sm)] px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]",children:"Close"})]}),(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Agent id"}),(0,b.jsx)("input",{value:D,onChange:a=>E(a.target.value),placeholder:"e.g. larry",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:H})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Name (optional)"}),(0,b.jsx)("input",{value:F,onChange:a=>G(a.target.value),placeholder:"e.g. Larry",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:H})]}),J?(0,b.jsx)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm",children:J}):null,(0,b.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,b.jsx)("button",{type:"button",disabled:H,onClick:()=>C(!1),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50",children:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:H,onClick:Q,className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:H?"Creating…":"Create Agent"})]})]})]})}):null,(0,b.jsxs)("p",{className:"mt-6 text-xs text-[color:var(--ck-text-tertiary)]",children:["This page edits the recipe markdown and previews what will be created when you click"," ","team"===l.kind?"Create Team":"Create Agent","."]})]})}a.s(["default",()=>i])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=src_app_recipes_%5Bid%5D_RecipeEditor_tsx_c6d38350._.js.map
|