@jiggai/kitchen 0.3.27 → 0.3.29
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 +10 -0
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +70 -0
- package/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +8 -8
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
- package/.next/server/app/_global-error.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +11 -11
- package/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/agents/[agentId]/page/build-manifest.json +3 -3
- package/.next/server/app/agents/[agentId]/page.js +2 -2
- package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/add/route.js +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/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/add/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/cron/add/route/build-manifest.json +11 -0
- package/.next/server/app/api/cron/add/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/cron/add/route.js +6 -0
- package/.next/server/app/api/cron/add/route.js.map +5 -0
- package/.next/server/app/api/cron/add/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/add/route_client-reference-manifest.js +2 -0
- 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/edit/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/cron/edit/route/build-manifest.json +11 -0
- package/.next/server/app/api/cron/edit/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/cron/edit/route.js +6 -0
- package/.next/server/app/api/cron/edit/route.js.map +5 -0
- package/.next/server/app/api/cron/edit/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/edit/route_client-reference-manifest.js +2 -0
- 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/cron/worker/route.js +1 -1
- package/.next/server/app/api/cron/worker/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/plugins/[pluginId]/[...path]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js +7 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js.map +5 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js +7 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js.map +5 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/plugins/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/route.js +7 -0
- package/.next/server/app/api/plugins/route.js.map +5 -0
- package/.next/server/app/api/plugins/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/plugins/test/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/test/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/test/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/test/route.js +7 -0
- package/.next/server/app/api/plugins/test/route.js.map +5 -0
- package/.next/server/app/api/plugins/test/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/test/route_client-reference-manifest.js +2 -0
- 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.js +1 -1
- package/.next/server/app/api/recipes/custom-team/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/local-agent-catalog/route.js +1 -1
- package/.next/server/app/api/recipes/local-agent-catalog/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 -1
- 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.js +3 -3
- package/.next/server/app/api/swarms/start/route.js.nft.json +1 -1
- package/.next/server/app/api/swarms/status/route.js +1 -1
- package/.next/server/app/api/swarms/status/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/media-providers/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js +6 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js.map +5 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js +3 -3
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/comment/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/comment/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/file/route.js +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.js +2 -1
- package/.next/server/app/api/teams/memory/route.js.nft.json +1 -1
- 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.js +1 -1
- package/.next/server/app/api/teams/orchestrator/install/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/orchestrator/route.js +1 -1
- package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/remove-team/route.js +1 -1
- package/.next/server/app/api/teams/remove-team/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/skills/install/route.js +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-deliverables/file/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js +6 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflow-deliverables/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-deliverables/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-deliverables/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-deliverables/route.js +6 -0
- package/.next/server/app/api/teams/workflow-deliverables/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-deliverables/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-deliverables/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflow-runs/route.js +1 -1
- package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-templates/route.js +1 -1
- package/.next/server/app/api/teams/workflow-templates/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflows/route.js +1 -1
- package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/assign/route.js +1 -1
- package/.next/server/app/api/tickets/assign/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/assignees/route.js +1 -1
- package/.next/server/app/api/tickets/assignees/route.js.nft.json +1 -1
- 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 +3 -3
- package/.next/server/app/channels/page.js +2 -2
- package/.next/server/app/channels/page.js.nft.json +1 -1
- package/.next/server/app/channels/page_client-reference-manifest.js +1 -1
- package/.next/server/app/channels.html +2 -2
- package/.next/server/app/channels.rsc +12 -12
- package/.next/server/app/channels.segments/_full.segment.rsc +12 -12
- package/.next/server/app/channels.segments/_head.segment.rsc +4 -4
- package/.next/server/app/channels.segments/_index.segment.rsc +5 -5
- package/.next/server/app/channels.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/channels.segments/channels.segment.rsc +3 -3
- package/.next/server/app/cron-jobs/page/build-manifest.json +3 -3
- package/.next/server/app/cron-jobs/page.js +2 -2
- package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
- package/.next/server/app/cron-jobs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/[id]/page/build-manifest.json +3 -3
- package/.next/server/app/goals/[id]/page.js +2 -2
- package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
- package/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/new/page/build-manifest.json +3 -3
- package/.next/server/app/goals/new/page.js +2 -2
- package/.next/server/app/goals/new/page.js.nft.json +1 -1
- package/.next/server/app/goals/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/new.html +2 -2
- package/.next/server/app/goals/new.rsc +13 -13
- package/.next/server/app/goals/new.segments/_full.segment.rsc +13 -13
- package/.next/server/app/goals/new.segments/_head.segment.rsc +4 -4
- package/.next/server/app/goals/new.segments/_index.segment.rsc +5 -5
- package/.next/server/app/goals/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/goals/new.segments/goals/new.segment.rsc +3 -3
- package/.next/server/app/goals/new.segments/goals.segment.rsc +3 -3
- package/.next/server/app/goals/page/build-manifest.json +3 -3
- package/.next/server/app/goals/page.js +2 -2
- package/.next/server/app/goals/page.js.nft.json +1 -1
- package/.next/server/app/goals/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals.html +1 -1
- package/.next/server/app/goals.rsc +12 -12
- package/.next/server/app/goals.segments/_full.segment.rsc +12 -12
- package/.next/server/app/goals.segments/_head.segment.rsc +4 -4
- package/.next/server/app/goals.segments/_index.segment.rsc +5 -5
- package/.next/server/app/goals.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/goals.segments/goals.segment.rsc +3 -3
- package/.next/server/app/page/build-manifest.json +3 -3
- package/.next/server/app/page.js +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/[id]/page/build-manifest.json +3 -3
- package/.next/server/app/recipes/[id]/page.js +4 -4
- package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
- package/.next/server/app/recipes/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/page/build-manifest.json +3 -3
- package/.next/server/app/recipes/page.js +2 -2
- package/.next/server/app/recipes/page.js.nft.json +1 -1
- package/.next/server/app/recipes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/runs/page/build-manifest.json +3 -3
- package/.next/server/app/runs/page.js +6 -5
- package/.next/server/app/runs/page.js.nft.json +1 -1
- package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page/build-manifest.json +3 -3
- package/.next/server/app/settings/page.js +2 -2
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +12 -12
- package/.next/server/app/settings.segments/_full.segment.rsc +12 -12
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +5 -5
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/teams/[teamId]/deliverables/page/app-paths-manifest.json +3 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/build-manifest.json +17 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/next-font-manifest.json +11 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/server-reference-manifest.json +4 -0
- package/.next/server/app/teams/[teamId]/deliverables/page.js +21 -0
- package/.next/server/app/teams/[teamId]/deliverables/page.js.map +5 -0
- package/.next/server/app/teams/[teamId]/deliverables/page.js.nft.json +1 -0
- package/.next/server/app/teams/[teamId]/deliverables/page_client-reference-manifest.js +2 -0
- package/.next/server/app/teams/[teamId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/page.js +4 -4
- package/.next/server/app/teams/[teamId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js +6 -5
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/runs/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/runs/page.js +2 -2
- package/.next/server/app/teams/[teamId]/runs/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js +3 -3
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/tickets/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/tickets/page.js +3 -3
- package/.next/server/app/teams/[teamId]/tickets/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/tickets/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js +2 -2
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/workflows/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/workflows/page.js +4 -4
- package/.next/server/app/teams/[teamId]/workflows/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/workflows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tickets/[ticket]/page/build-manifest.json +3 -3
- package/.next/server/app/tickets/[ticket]/page.js +3 -3
- package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/tickets/[ticket]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tickets/page/build-manifest.json +3 -3
- package/.next/server/app/tickets/page.js +3 -3
- 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 +10 -0
- package/.next/server/chunks/{[root-of-the-server]__50fe6ff8._.js → [root-of-the-server]__00a30f40._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__04f289da._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__26c618a3._.js → [root-of-the-server]__0883634a._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__08b4c8f2._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__fef7183d._.js → [root-of-the-server]__0f55461f._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1311d7a3._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__e063a986._.js → [root-of-the-server]__1480ffda._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__18423bab._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0c4fc3d3._.js → [root-of-the-server]__1873f417._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__05f5e243._.js → [root-of-the-server]__1f1e62ac._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__864a08dd._.js → [root-of-the-server]__20b1f42d._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__21ad9eeb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__21ad9eeb._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__9d0ea07b._.js → [root-of-the-server]__2c207e60._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__69be1758._.js → [root-of-the-server]__2dd1afff._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1c6c2e43._.js → [root-of-the-server]__3021a250._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__30cd38e9._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__4079fa2b._.js → [root-of-the-server]__343776df._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__63715de8._.js → [root-of-the-server]__3452dc06._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__35ec765d._.js +13 -0
- package/.next/server/chunks/[root-of-the-server]__35ec765d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__392e585d._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__3b2d0020._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3b2d0020._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__bccfb2c0._.js → [root-of-the-server]__3bfad714._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__7bf889c1._.js → [root-of-the-server]__3d15e850._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__a74a32d5._.js → [root-of-the-server]__3f648b9b._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__89605574._.js → [root-of-the-server]__482575d2._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__4898071c._.js +4 -4
- package/.next/server/chunks/{[root-of-the-server]__bbdb6dcb._.js → [root-of-the-server]__4ee12514._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__55defc7c._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__55defc7c._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__698cf062._.js → [root-of-the-server]__5aa1dc93._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__b002764e._.js → [root-of-the-server]__5c5990a6._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__5d47b90b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__5d47b90b._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__7a331e51._.js → [root-of-the-server]__603cb0fa._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__d924e5ac._.js → [root-of-the-server]__636919a0._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__453333f5._.js → [root-of-the-server]__663e79ff._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__69c065ce._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__69c065ce._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__c63a9f28._.js → [root-of-the-server]__74b80ca4._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__6f4e90a0._.js → [root-of-the-server]__74e2a9ba._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__51198e25._.js → [root-of-the-server]__7e12b9f4._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__813dd669._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__813dd669._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__5ceff0f3._.js → [root-of-the-server]__87875179._.js} +3 -3
- package/.next/server/chunks/{[root-of-the-server]__5ea38a67._.js → [root-of-the-server]__8f8e110f._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__7459129e._.js → [root-of-the-server]__91d0cce1._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__e40409a2._.js → [root-of-the-server]__9853b72d._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__95ddb81a._.js → [root-of-the-server]__9dba20b3._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__ff69832c._.js → [root-of-the-server]__9e96d37b._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__8e27e9f7._.js → [root-of-the-server]__aba68368._.js} +3 -3
- package/.next/server/chunks/{[root-of-the-server]__3fdbc43e._.js → [root-of-the-server]__aed4e4f2._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__b457b884._.js +22 -0
- package/.next/server/chunks/[root-of-the-server]__b457b884._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__99b12bcb._.js → [root-of-the-server]__b6cff26d._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__150bf0bf._.js → [root-of-the-server]__bb52fdc9._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__bf608f29._.js → [root-of-the-server]__be5f57b2._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__c15c5141._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c15c5141._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__542a081b._.js → [root-of-the-server]__c50e4bc4._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__b64936a3._.js → [root-of-the-server]__cc0860cb._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__8ea22d0a._.js → [root-of-the-server]__d302afb4._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__01863a8b._.js → [root-of-the-server]__d4a8660e._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__da7df58d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__da7df58d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e478ef0d._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__6caa8f2d._.js → [root-of-the-server]__e9acbabd._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__47eb3111._.js → [root-of-the-server]__e9d9d570._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__f408c708._.js +2 -2
- package/.next/server/chunks/{[root-of-the-server]__59a6cf09._.js → [root-of-the-server]__f45ceefb._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__f4cbadf7._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__f5cd81f1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__f5cd81f1._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__3cfdf0b3._.js → [root-of-the-server]__f994dc62._.js} +2 -2
- package/.next/server/chunks/_next-internal_server_app_api_cron_add_route_actions_f9053a93.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_add_route_actions_f9053a93.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_edit_route_actions_3b551424.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_edit_route_actions_3b551424.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_route_actions_0aabd6b3.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_route_actions_0aabd6b3.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_test_route_actions_8babbe5c.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_test_route_actions_8babbe5c.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-deliverables_route_actions_9de4298b.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-deliverables_route_actions_9de4298b.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_[___path]_route_actions_471be8ce.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_[___path]_route_actions_471be8ce.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_tabs_[tabId]_route_actions_9420efec.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_tabs_[tabId]_route_actions_9420efec.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_media-providers_route_actions_1ea823f1.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_media-providers_route_actions_1ea823f1.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_workflow-deliverables_file_route_actions_332fd6ea.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_workflow-deliverables_file_route_actions_332fd6ea.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js +3 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f5680d9e.js +1 -1
- package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js +4 -4
- package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js +12 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__17b046ea._.js → [root-of-the-server]__388bae11._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__4c66998a._.js.map → [root-of-the-server]__51e26a01._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__2db9d262._.js → [root-of-the-server]__8f9585b9._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__2db9d262._.js.map → [root-of-the-server]__8f9585b9._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__9a7d79aa._.js → [root-of-the-server]__997aa62c._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__0df430db._.js → [root-of-the-server]__9e400864._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__8a588fad._.js → [root-of-the-server]__a6348eaa._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__49281b4c._.js → [root-of-the-server]__af792402._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__68c20e8e._.js → [root-of-the-server]__b5aa14b8._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__68c20e8e._.js.map → [root-of-the-server]__b5aa14b8._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__8756d76d._.js → [root-of-the-server]__b8998a21._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__c777e326._.js → [root-of-the-server]__df23886e._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__02e6ccaa._.js → [root-of-the-server]__e9bd9b71._.js} +2 -2
- package/.next/server/chunks/ssr/_018dfe6b._.js +2 -2
- package/.next/server/chunks/ssr/_2d8d7232._.js +3 -0
- package/.next/server/chunks/ssr/_2d8d7232._.js.map +1 -0
- package/.next/server/chunks/ssr/_8538617d._.js +3 -0
- package/.next/server/chunks/ssr/_8538617d._.js.map +1 -0
- package/.next/server/chunks/ssr/_a506fcf8._.js +3 -0
- package/.next/server/chunks/ssr/_a506fcf8._.js.map +1 -0
- package/.next/server/chunks/ssr/_deb7a691._.js +5 -0
- package/.next/server/chunks/ssr/_deb7a691._.js.map +1 -0
- package/.next/server/chunks/ssr/_ec0b0b83._.js +4 -0
- package/.next/server/chunks/ssr/_ec0b0b83._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_deliverables_page_actions_f44ae7c7.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_deliverables_page_actions_f44ae7c7.js.map +1 -0
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js +1 -1
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js.map +1 -1
- package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js +3 -0
- package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_1038a5b9._.js +10 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__4fd003c7._.js.map → node_modules_next_dist_1038a5b9._.js.map} +1 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_25a30daf._.js +1 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_25a30daf._.js.map +1 -1
- package/.next/server/chunks/ssr/node_modules_yaml_dist_18db9ed7._.js +2 -2
- package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js +3 -0
- package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +4 -0
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{d2be314c3ece3fbe.js → 0bd6498bda341889.js} +1 -1
- package/.next/static/chunks/{c27f767f683b017a.js → 410dc851d0e3033d.js} +1 -1
- package/.next/static/chunks/{2ad8e6acac0ede2c.js → 4e38b3f280ced64c.js} +1 -1
- package/.next/static/chunks/{236ef28eb649c432.js → 4f2b8a07ace7e02b.js} +1 -1
- package/.next/static/chunks/79b7c8c80713887a.js +1 -0
- package/.next/static/chunks/{e854e56ea8cb6236.js → 87879d67a1601ee0.js} +1 -1
- package/.next/static/chunks/{43d0024279c6160e.js → a625725b4cd85ea3.js} +1 -1
- package/.next/static/chunks/{3e1fe6be993c61fb.js → ac32974713c57cb3.js} +1 -1
- package/.next/static/chunks/{f2f58a7e93290fbb.js → aebc3b6d791f68d2.js} +1 -1
- package/.next/static/chunks/b3bca877b0f5b4e9.css +3 -0
- package/.next/static/chunks/{e083bcf4a197beae.js → b83c1ca03c3b8c6d.js} +1 -1
- package/.next/static/chunks/{e7bbb90aada90fdf.js → bdb7ebd88ea13111.js} +1 -1
- package/.next/static/chunks/bfcfbe145220d365.js +1 -0
- package/.next/static/chunks/c0d9f53d91cc65c5.js +10 -0
- package/.next/static/chunks/{36aff6bd42d53c8b.js → c0e2f959abc4cc13.js} +1 -1
- package/.next/static/chunks/c411f6e912e3c3a1.js +1 -0
- package/.next/static/chunks/{62e0c437eb8fc2da.js → c822e53f79a492c7.js} +1 -1
- package/.next/static/chunks/{fd0cb4d03fd17cf6.js → ce6b2024d13b4333.js} +1 -1
- package/.next/static/chunks/d13249af74d111cf.js +3 -0
- package/.next/static/chunks/{4a6dcf80b293d7a4.js → d16f64ca3a8ed208.js} +1 -1
- package/.next/static/chunks/{c84580993f22c17a.js → d6e1b7307a9274ce.js} +1 -1
- package/.next/static/chunks/d7541a171116ec9c.js +1 -0
- package/.next/static/chunks/{93719e85369dd453.js → e03137fd069b1514.js} +1 -1
- package/.next/static/chunks/{db4da5ee45033817.js → e10faa9296c8b246.js} +1 -1
- package/.next/static/chunks/ec24877f7b7f82c5.js +3 -0
- package/.next/static/chunks/{f179280598d329b2.js → ff3bbb5df40b2cc4.js} +1 -1
- package/.next/static/chunks/{turbopack-0236a74c4f471967.js → turbopack-dbf3078dbf5863bd.js} +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -2
- package/tsconfig.json +2 -1
- package/.next/server/chunks/[root-of-the-server]__502825d0._.js +0 -13
- package/.next/server/chunks/[root-of-the-server]__502825d0._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__69c45937._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__69c45937._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__a49c534d._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__a49c534d._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__162d7d9d._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__162d7d9d._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__255506f2._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__255506f2._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__4c66998a._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__4fd003c7._.js +0 -10
- package/.next/server/chunks/ssr/_d9520bea._.js +0 -3
- package/.next/server/chunks/ssr/_d9520bea._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js +0 -3
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js +0 -12
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js.map +0 -1
- package/.next/static/chunks/33959503ed1ef5fe.css +0 -3
- package/.next/static/chunks/474635d658546626.js +0 -1
- package/.next/static/chunks/4d4876ec71727e38.js +0 -1
- package/.next/static/chunks/579cd9be685abc65.js +0 -1
- package/.next/static/chunks/5e3b1d0f61a651bf.js +0 -1
- package/.next/static/chunks/a719c5f36ffeec2a.js +0 -10
- package/.next/static/chunks/ca07f0194f384207.js +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__50fe6ff8._.js.map → [root-of-the-server]__00a30f40._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__26c618a3._.js.map → [root-of-the-server]__0883634a._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__fef7183d._.js.map → [root-of-the-server]__0f55461f._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__e063a986._.js.map → [root-of-the-server]__1480ffda._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0c4fc3d3._.js.map → [root-of-the-server]__1873f417._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__05f5e243._.js.map → [root-of-the-server]__1f1e62ac._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__864a08dd._.js.map → [root-of-the-server]__20b1f42d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__9d0ea07b._.js.map → [root-of-the-server]__2c207e60._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__69be1758._.js.map → [root-of-the-server]__2dd1afff._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1c6c2e43._.js.map → [root-of-the-server]__3021a250._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__4079fa2b._.js.map → [root-of-the-server]__343776df._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__63715de8._.js.map → [root-of-the-server]__3452dc06._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__bccfb2c0._.js.map → [root-of-the-server]__3bfad714._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__7bf889c1._.js.map → [root-of-the-server]__3d15e850._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__a74a32d5._.js.map → [root-of-the-server]__3f648b9b._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__89605574._.js.map → [root-of-the-server]__482575d2._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__bbdb6dcb._.js.map → [root-of-the-server]__4ee12514._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__698cf062._.js.map → [root-of-the-server]__5aa1dc93._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__b002764e._.js.map → [root-of-the-server]__5c5990a6._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__7a331e51._.js.map → [root-of-the-server]__603cb0fa._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__d924e5ac._.js.map → [root-of-the-server]__636919a0._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__453333f5._.js.map → [root-of-the-server]__663e79ff._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__c63a9f28._.js.map → [root-of-the-server]__74b80ca4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__6f4e90a0._.js.map → [root-of-the-server]__74e2a9ba._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__51198e25._.js.map → [root-of-the-server]__7e12b9f4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__5ceff0f3._.js.map → [root-of-the-server]__87875179._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__5ea38a67._.js.map → [root-of-the-server]__8f8e110f._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__7459129e._.js.map → [root-of-the-server]__91d0cce1._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__e40409a2._.js.map → [root-of-the-server]__9853b72d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__95ddb81a._.js.map → [root-of-the-server]__9dba20b3._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__ff69832c._.js.map → [root-of-the-server]__9e96d37b._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__8e27e9f7._.js.map → [root-of-the-server]__aba68368._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__3fdbc43e._.js.map → [root-of-the-server]__aed4e4f2._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__99b12bcb._.js.map → [root-of-the-server]__b6cff26d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__150bf0bf._.js.map → [root-of-the-server]__bb52fdc9._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__bf608f29._.js.map → [root-of-the-server]__be5f57b2._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__542a081b._.js.map → [root-of-the-server]__c50e4bc4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__b64936a3._.js.map → [root-of-the-server]__cc0860cb._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__8ea22d0a._.js.map → [root-of-the-server]__d302afb4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__01863a8b._.js.map → [root-of-the-server]__d4a8660e._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__6caa8f2d._.js.map → [root-of-the-server]__e9acbabd._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__47eb3111._.js.map → [root-of-the-server]__e9d9d570._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__59a6cf09._.js.map → [root-of-the-server]__f45ceefb._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__3cfdf0b3._.js.map → [root-of-the-server]__f994dc62._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__17b046ea._.js.map → [root-of-the-server]__388bae11._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__9a7d79aa._.js.map → [root-of-the-server]__997aa62c._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__0df430db._.js.map → [root-of-the-server]__9e400864._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__8a588fad._.js.map → [root-of-the-server]__a6348eaa._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__49281b4c._.js.map → [root-of-the-server]__af792402._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__8756d76d._.js.map → [root-of-the-server]__b8998a21._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__c777e326._.js.map → [root-of-the-server]__df23886e._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__02e6ccaa._.js.map → [root-of-the-server]__e9bd9b71._.js.map} +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 → kWLUtSfI8C26lIp4FvoAU}/_buildManifest.js +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 → kWLUtSfI8C26lIp4FvoAU}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 → kWLUtSfI8C26lIp4FvoAU}/_ssgManifest.js +0 -0
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
module.exports=[67004,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(1760),e=a.i(50944),f=a.i(88764),g=a.i(66063);function h({open:a,teamId:c,recipeId:d,onClose:e,onConfirm:f,busy:h}){return(0,b.jsxs)(g.ConfirmationModal,{open:a,onClose:e,title:"Publish changes",confirmLabel:"Publish changes",confirmBusyLabel:"Publishing…",busy:h,onConfirm:f,confirmButtonClassName:"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] hover:bg-emerald-500 disabled:opacity-50",children:[(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["This will re-scaffold team ",(0,b.jsx)("code",{className:"font-mono",children:c})," from recipe ",(0,b.jsx)("code",{className:"font-mono",children:d}),"."]}),(0,b.jsxs)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-amber-400/30 bg-amber-500/10 p-3 text-sm text-amber-100",children:[(0,b.jsx)("div",{className:"font-medium",children:"Complete overwrite"}),(0,b.jsxs)("div",{className:"mt-1",children:["All existing team workspace files managed by the recipe will be overwritten (for example: ",(0,b.jsx)("code",{className:"font-mono",children:"AGENTS.md"}),","," ",(0,b.jsx)("code",{className:"font-mono",children:"SOUL.md"}),", role templates, and other scaffolded files). Any manual edits in those files will be lost."]})]})]})}var i=a.i(61889),j=a.i(74621),k=a.i(51200);function l(a,b){try{return JSON.parse(a)}catch{return b}}async function m(a){let[b,c]=await Promise.all([(0,k.fetchJson)("/api/recipes",{cache:"no-store"}),fetch(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"})]);return{recipesData:b,metaRes:c}}async function n(a){let b=await (0,k.fetchAll)([`/api/teams/files?teamId=${encodeURIComponent(a)}`,`/api/cron/jobs?teamId=${encodeURIComponent(a)}`,"/api/agents",`/api/teams/skills?teamId=${encodeURIComponent(a)}`,"/api/skills/available"]),c=await Promise.all(b.map(a=>a.text()));return{responses:b,texts:c}}async function o(a,b){b.setTeamFilesLoading(!0),b.setCronLoading(!0),b.setTeamAgentsLoading(!0),b.setSkillsLoading(!0);try{let{responses:c,texts:d}=await n(a),[e,f,g,h,i]=c,[j,k,m,o,p]=d,q=l(j,{});e.ok&&q.ok&&Array.isArray(q.files)&&b.setTeamFiles(q.files.map(a=>({name:String(a.name??""),missing:!!a.missing,required:!!a.required,rationale:"string"==typeof a.rationale?a.rationale:void 0})));let r=l(k,{});f.ok&&r.ok&&Array.isArray(r.jobs)&&b.setCronJobs(r.jobs);let s=l(m,{});if(g.ok&&Array.isArray(s.agents)){let c=s.agents.filter(b=>String(b.id??"").startsWith(`${a}-`));b.setTeamAgents(c.map(a=>({id:String(a.id??""),identityName:"string"==typeof a.identityName?a.identityName:void 0})))}let t=l(o,{});h.ok&&t.ok&&Array.isArray(t.skills)&&b.setSkillsList(t.skills);let u=l(p,{});if(i.ok&&u.ok&&Array.isArray(u.skills)){let a=u.skills;b.setAvailableSkills(a),b.setSelectedSkill(b=>{let c=String(b??"").trim();return c&&a.includes(c)?c:a[0]??""})}}finally{b.setTeamFilesLoading(!1),b.setCronLoading(!1),b.setTeamAgentsLoading(!1),b.setSkillsLoading(!1)}}async function p(a,b){let c=await m(a);b.setRecipes(c.recipesData.recipes??[]);let d=null;try{let a=await c.metaRes.json(),e=a.meta;c.metaRes.ok&&a.ok&&e?.recipeId?(d={recipeId:String(e.recipeId),recipeName:"string"==typeof e.recipeName?e.recipeName:void 0},b.setTeamMetaRecipeHash("string"==typeof e.recipeHash?e.recipeHash:null)):b.setTeamMetaRecipeHash(null)}catch{b.setTeamMetaRecipeHash(null)}if(d)b.setLockedFromId(d.recipeId),b.setLockedFromName(d.recipeName??null),b.setProvenanceMissing(!1),b.setFromId(d.recipeId);else{b.setLockedFromId(null),b.setLockedFromName(null),b.setProvenanceMissing(!0);let d=c.recipesData.recipes??[],e=d.find(b=>"team"===b.kind&&b.id===a),f=d.find(a=>"team"===a.kind),g=e??f;g&&b.setFromId(g.id)}await o(a,{setTeamFiles:b.setTeamFiles,setCronJobs:b.setCronJobs,setTeamAgents:b.setTeamAgents,setSkillsList:b.setSkillsList,setAvailableSkills:b.setAvailableSkills,setSelectedSkill:b.setSelectedSkill,setTeamFilesLoading:b.setTeamFilesLoading,setCronLoading:b.setCronLoading,setTeamAgentsLoading:b.setTeamAgentsLoading,setSkillsLoading:b.setSkillsLoading})}async function q(a){try{let b=await (0,k.fetchJson)("/api/agents",{cache:"no-store"}),c=(Array.isArray(b.agents)?b.agents:[]).filter(b=>String(b.id??"").startsWith(`${a}-`)).map(a=>({id:String(a.id??""),identityName:"string"==typeof a.identityName?a.identityName:void 0}));return{ok:!0,agents:c}}catch{return{ok:!1,agents:[]}}}async function r(a,b,c){try{await (0,k.fetchJson)("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"team",recipeId:b.trim(),teamId:a,applyConfig:!0,overwrite:!1,allowExisting:!0,cronInstallChoice:"no"})})}catch(a){c((0,j.errorMessage)(a),"error")}}async function s(a,b,c,d){let e=Date.now();for(;Date.now()-e<d;){try{let d=await q(a);if(d.ok){c(d.agents);let a=!!b&&d.agents.some(a=>a.id===b);if(!b||a)return!0}}catch{}await new Promise(a=>setTimeout(a,500))}return!1}async function t(a){let{teamId:b,toId:c,newRole:d,derivedRole:e,newRoleName:f,content:g,setContent:h,setTeamAgents:i,flashMessage:l,ensureCustomRecipeExists:m}=a;try{await m({overwrite:!1})}catch(b){let a=(0,j.errorMessage)(b);if(!/Recipe id already exists:/i.test(a))throw b}let n=await (0,k.fetchJson)("/api/recipes/team-agents",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify("__custom__"===d?{recipeId:c.trim(),op:"add",role:e,name:f}:{recipeId:c.trim(),op:"addLike",baseRole:e,teamId:b,name:f})});if(!n.ok)throw Error("Failed updating agents list");h(String(n.content??g)),await r(b,c,l);let o="string"==typeof n.addedAgentId?n.addedAgentId:"";if(!await s(b,o,i,5e3)&&o){try{fetch("/api/gateway/restart",{method:"POST"})}catch{}await s(b,o,i,1e4)}l(`Updated agents list in ${c}`,"success")}function u(a){return(0,b.jsxs)(b.Fragment,{children:[(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.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Custom recipe target"}),a.loading?(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Loading team…"}):null]}),(0,b.jsx)("label",{className:"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Team id"}),(0,b.jsx)("input",{value:a.toId,onChange:b=>a.setToId(b.target.value),disabled:!a.canEditTargetId,className:"mt-1 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:opacity-70"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:"This is the custom recipe id that will be created when you save."}),(0,b.jsx)("label",{className:"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Team name"}),(0,b.jsx)("input",{value:a.toName,onChange:b=>a.setToName(b.target.value),className:"mt-1 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)]"}),(0,b.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-2",children:[(0,b.jsx)("button",{type:"button",disabled:a.saving||!a.teamIdValid||!a.targetIdValid||a.targetIsBuiltin,onClick:()=>a.onSaveCustom(!0),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)] disabled:opacity-50",children:a.saving?"Saving":"Save"}),(0,b.jsx)("button",{type:"button",disabled:a.saving||!a.teamIdValid||!a.targetIdValid||a.targetIsBuiltin||!a.loadedRecipeHash||!a.teamMetaRecipeHash||a.loadedRecipeHash===a.teamMetaRecipeHash,onClick:a.onPublishOpen,className:"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] disabled:opacity-50",children:a.publishing?"Publishing":"Publish changes"}),(0,b.jsx)("button",{type:"button",disabled:a.saving,onClick:a.onDeleteOpen,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)] disabled:opacity-50",children:"Delete Team"})]})]}),(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:"Notes"}),(0,b.jsxs)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Parent recipe (locked)"}),(0,b.jsx)("select",{disabled:!0,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:opacity-70",value:a.fromId,onChange:b=>a.setFromId(b.target.value),children:a.teamRecipes.map(a=>(0,b.jsxs)("option",{value:a.id,children:[a.id," (",a.source,")"]},`${a.source}:${a.id}`))}),a.lockedFromId&&(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("code",{children:a.lockedFromId}),a.lockedFromName?` (${a.lockedFromName})`:""]}),!a.lockedFromId&&a.provenanceMissing&&(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"Provenance not found for this team."})]}),(0,b.jsxs)("ul",{className:"mt-4 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("li",{children:"Save writes the custom recipe file identified by Team id."}),(0,b.jsx)("li",{children:"Publish changes re-scaffolds this team from your custom recipe."}),(0,b.jsx)("li",{children:"Delete Team runs openclaw recipes remove-team."})]})]})]}),(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe markdown"}),a.recipeLoadError?(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:a.recipeLoadError}):null,(0,b.jsx)("textarea",{value:a.content,onChange:b=>{a.setContent(b.target.value),a.setLoadedRecipeHash(null)},className:"mt-2 h-[55vh] 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)]",spellCheck:!1})]})]})}function v(a){let{teamId:c,toId:d,recipeAgents:e,newRole:f,setNewRole:g,customRole:h,setCustomRole:i,newRoleName:j,setNewRoleName:k,derivedRole:l,saving:m,teamAgents:n,teamAgentsLoading:o,onAddAgent:p}=a;return(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Agents in this team"}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Add/remove agents by updating the ",(0,b.jsx)("code",{children:"agents:"})," list in your custom team recipe (",(0,b.jsx)("code",{children:d}),")."]}),(0,b.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Role"}),(0,b.jsxs)("select",{value:f,onChange:a=>{let b=a.target.value;if(g(b),"__custom__"===b){i(""),k("");return}i("");let c=e.find(a=>a.role===b);k(c?.name||"")},className:"mt-1 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)]",children:[(0,b.jsx)("option",{value:"",children:"Select…"}),e.map(a=>(0,b.jsx)("option",{value:a.role,children:a.name||a.role},a.role)),(0,b.jsx)("option",{value:"__custom__",children:"Other…"})]}),"__custom__"===f?(0,b.jsx)("input",{value:h,onChange:a=>i(a.target.value),placeholder:"role (e.g. researcher)",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)]"}):null,(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["This writes to the recipe's ",(0,b.jsx)("code",{children:"agents:"})," list."]})]}),(0,b.jsx)("div",{className:"sm:col-span-2",children:(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Name (optional)"}),(0,b.jsx)("input",{value:j,onChange:a=>k(a.target.value),placeholder:"Onchain Researcher",className:"mt-1 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)]"})]})})]}),(0,b.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:(0,b.jsx)("button",{disabled:m||!l,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)] disabled:opacity-50",children:"Add agent"})}),(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Detected installed team agents (read-only)"}),(0,b.jsxs)("ul",{className:"mt-2 space-y-2",children:[n.length?n.map(a=>(0,b.jsxs)("li",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium text-[color:var(--ck-text-primary)]",children:a.identityName||a.id}),(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:a.id})]}),(0,b.jsx)("a",{className:"text-sm font-medium text-[var(--ck-accent-red)] hover:text-[color:var(--ck-accent-red-hover)]",href:"/agents/"+encodeURIComponent(a.id)+"?returnTo="+encodeURIComponent("/teams/"+c+"?tab=agents"),children:"Edit"})]},a.id)):null,0===n.length&&!o&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No team agents detected."}),0===n.length&&o&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"})]})]})]})}function w(a){return(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Skills"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"Skills installed in this team workspace. For agent-specific skills, open the agent from the Agents tab."}),(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Installed"}),(0,b.jsx)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:a.skillsList.length?a.skillsList.map(a=>(0,b.jsx)("li",{children:a},a)):(0,b.jsx)("li",{children:"None installed."})})]}),(0,b.jsxs)("div",{className:"mt-5 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Add a skill"}),(0,b.jsxs)("div",{className:"mt-2 flex flex-col gap-2 sm:flex-row sm:items-center",children:[(0,b.jsx)("select",{value:a.selectedSkill,onChange:b=>a.setSelectedSkill(b.target.value),disabled:a.installingSkill||a.skillsLoading||!a.availableSkills.length,className:"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)]",children:a.availableSkills.length?a.availableSkills.map(a=>(0,b.jsx)("option",{value:a,children:a},a)):(0,b.jsx)("option",{value:"",children:"No skills found"})}),(0,b.jsx)("button",{type:"button",disabled:a.installingSkill||a.skillsLoading||!a.selectedSkill,onClick:a.onInstallSkill,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)] disabled:opacity-50",children:a.installingSkill?"Adding":"Add"})]}),a.teamSkillError&&(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:a.teamSkillError}),a.teamSkillMsg&&(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-emerald-400/30 bg-emerald-500/10 p-3 text-sm text-emerald-100",children:a.teamSkillMsg}),(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["Uses openclaw recipes install-skill with team-id ",a.teamId,"."]})]})]})}function x(a){let{cronJobs:c,cronLoading:d,saving:e,onCronAction:f}=a;return(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Cron jobs (filtered by team name)"}),(0,b.jsxs)("ul",{className:"mt-3 space-y-3",children:[c.length?c.map(a=>{let c=String(a.id??a.jobId??"").trim(),d=c||String(a.name??"job"),g=String(a.name??a.id??a.jobId??"(unnamed)"),h=a.enabled??a.state?.enabled;return(0,b.jsxs)("li",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"font-medium text-[color:var(--ck-text-primary)]",children:g}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["Enabled: ",String(h??"?")]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2",children:[(0,b.jsx)("button",{disabled:e||!c,onClick:()=>f(c,g,"run"),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:"Run"}),(0,b.jsx)("button",{disabled:e||!c,onClick:()=>f(c,g,"enable"),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:"Enable"}),(0,b.jsx)("button",{disabled:e||!c,onClick:()=>f(c,g,"disable"),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:"Disable"}),c?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(missing id)"})]})]},d)}):null,0===c.length&&d&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading"}),0===c.length&&!d&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No cron jobs detected for this team."})]})]})}var y=a.i(60791);function z(a){let{teamFiles:c,teamFilesLoading:d,showOptionalFiles:e,setShowOptionalFiles:f,fileName:g,fileContent:h,setFileContent:i,teamFileError:j,saving:k,onLoadTeamFile:l,onSaveTeamFile:m}=a;return(0,b.jsxs)("div",{className:"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-3",children:[(0,b.jsx)(y.FileListWithOptionalToggle,{title:"Team files",files:c,loading:d,showOptionalFiles:e,onShowOptionalChange:f,selectedFileName:g,onSelectFile:l}),(0,b.jsxs)("div",{className:"ck-glass-strong p-4 lg:col-span-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Edit: ",g]}),(0,b.jsx)("button",{disabled:k,onClick:m,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)] disabled:opacity-50",children:k?"Saving…":"Save file"})]}),j?(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:j}):null,(0,b.jsx)("textarea",{value:h,onChange:a=>i(a.target.value),className:"mt-3 h-[55vh] 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)]",spellCheck:!1})]})]})}function A(a){return`${a._file??""}:${a._line??0}`}function B({teamId:a}){let[d,e]=(0,c.useState)(!1),[f,g]=(0,c.useState)(""),[h,i]=(0,c.useState)([]),[k,l]=(0,c.useState)([]),[m,n]=(0,c.useState)([]),[o,p]=(0,c.useState)("learning"),[q,r]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(null);async function y(){e(!0),g("");try{let b=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{cache:"no-store"}),c=await b.json();if(!b.ok||!c.ok)throw Error(c.error||"Failed to load memory");i(Array.isArray(c.files)?c.files:[]),l(Array.isArray(c.pinnedItems)?c.pinnedItems:[]),n(Array.isArray(c.items)?c.items:[])}catch(a){g((0,j.errorMessage)(a)),i([]),l([]),n([])}finally{e(!1)}}(0,c.useEffect)(()=>{y()},[a]);let z=(0,c.useMemo)(()=>[{label:"decision",value:"decision"},{label:"learning",value:"learning"},{label:"bug",value:"bug"},{label:"customer",value:"customer"},{label:"release",value:"release"}],[]),B=(0,c.useMemo)(()=>new Set(k.map(a=>a._key)),[k]);async function C(b){let c=A(b);if(b._file&&b._line){x(c),g("");try{let c={op:"pin",ts:new Date().toISOString(),actor:`${a}-lead`,key:{file:"team.jsonl",line:b._line},item:{ts:b.ts,author:b.author,type:b.type,content:b.content,source:b.source}},d=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(c)}),e=await d.json();if(!d.ok||!e.ok)throw Error(e.error||"Failed to pin");await y()}catch(a){g((0,j.errorMessage)(a))}finally{x(null)}}}async function D(b){let c=A(b);if(b._file&&b._line){x(c),g("");try{let c={op:"unpin",ts:new Date().toISOString(),actor:`${a}-lead`,key:{file:"team.jsonl",line:b._line}},d=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(c)}),e=await d.json();if(!d.ok||!e.ok)throw Error(e.error||"Failed to unpin");await y()}catch(a){g((0,j.errorMessage)(a))}finally{x(null)}}}return(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"ck-glass 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 memory (file-first)"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Stored in ",(0,b.jsx)("span",{className:"font-mono",children:"shared-context/memory/*.jsonl"}),". Items must be attributable."]}),(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-secondary)]",children:["Canonical memory model doc:"," ",(0,b.jsx)("a",{className:"underline decoration-white/20 underline-offset-4 hover:decoration-white/40",href:"https://github.com/JIGGAI/ClawRecipes/blob/main/docs/MEMORY_MODEL.md",target:"_blank",rel:"noreferrer",children:"ClawRecipes/docs/MEMORY_MODEL.md"})]})]}),(0,b.jsx)("button",{type:"button",onClick:y,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)] hover:bg-white/10",children:"Refresh"})]}),f?(0,b.jsx)("div",{className:"mt-3 rounded border border-red-400/30 bg-red-500/10 p-2 text-sm text-red-100",children:f}):null,(0,b.jsxs)("div",{className:"mt-3 text-xs text-[color:var(--ck-text-secondary)]",children:["Files: ",h.length?h.join(", "):"(none)"]})]}),(0,b.jsxs)("div",{className:"ck-glass p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Add memory item"}),(0,b.jsxs)("div",{className:"mt-3 grid grid-cols-1 gap-3 md:grid-cols-2",children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"type"}),(0,b.jsx)("select",{value:o,onChange:a=>p(a.target.value),className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]",children:z.map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"source (ticket/pr/path)"}),(0,b.jsx)("input",{value:s,onChange:a=>t(a.target.value),className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]",placeholder:"e.g. ticket 0088, PR https://..., shared-context/DECISIONS.md"})]}),(0,b.jsxs)("label",{className:"block md:col-span-2",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"content"}),(0,b.jsx)("textarea",{value:q,onChange:a=>r(a.target.value),className:"mt-1 h-[110px] w-full resize-none rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-sm text-[color:var(--ck-text-primary)]",placeholder:"Write a small, specific memory item…"})]}),(0,b.jsx)("div",{className:"md:col-span-2",children:(0,b.jsx)("button",{type:"button",disabled:u||!q.trim(),onClick:async()=>{v(!0),g("");try{let b={op:"append",ts:new Date().toISOString(),author:`${a}-lead`,type:o,content:q.trim(),source:s.trim()?{text:s.trim()}:void 0,file:"team.jsonl"},c=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(!c.ok||!d.ok)throw Error(d.error||"Failed to append memory");r(""),t(""),await y()}catch(a){g((0,j.errorMessage)(a))}finally{v(!1)}},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)] disabled:opacity-50",children:u?"Saving…":"Append to team.jsonl"})})]})]}),(0,b.jsxs)("div",{className:"ck-glass p-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Pinned memory"}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[k.length," pinned"]})]}),d?(0,b.jsx)("div",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):null,(0,b.jsx)("div",{className:"mt-3 space-y-3",children:k.length?k.map(a=>(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.ts}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"rounded bg-white/5 px-2 py-0.5 font-mono",children:a.type}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"font-mono",children:a.author}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsxs)("span",{className:"font-mono",children:["pinned ",a.pinnedAt]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>void D(a),disabled:w===a._key,className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:w===a._key?"Unpinning…":"Unpin"})]}),(0,b.jsx)("div",{className:"mt-2 whitespace-pre-wrap text-sm text-[color:var(--ck-text-primary)]",children:a.content}),a.source?(0,b.jsx)("pre",{className:"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]",children:JSON.stringify(a.source,null,2)}):null]},a._key)):(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No pinned items yet."})})]}),(0,b.jsxs)("div",{className:"ck-glass p-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recent memory"}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:["Showing ",m.length," (max 200)"]})]}),d?(0,b.jsx)("div",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):null,(0,b.jsx)("div",{className:"mt-3 space-y-3",children:m.length?m.map(a=>{let c=A(a),d=B.has(c);return(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.ts}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"rounded bg-white/5 px-2 py-0.5 font-mono",children:a.type}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"font-mono",children:a.author})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a._file?(0,b.jsxs)("span",{className:"text-[10px] text-[color:var(--ck-text-tertiary)] font-mono",children:[a._file,":",a._line]}):null,(0,b.jsx)("button",{type:"button",onClick:()=>void C(a),disabled:d||w===c||!a._file||!a._line,className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:d?"Pinned":w===c?"Pinning…":"Pin"})]})]}),(0,b.jsx)("div",{className:"mt-2 whitespace-pre-wrap text-sm text-[color:var(--ck-text-primary)]",children:a.content}),a.source?(0,b.jsx)("pre",{className:"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]",children:JSON.stringify(a.source,null,2)}):null]},`${a._file??"?"}:${a._line??0}`)}):(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No memory items yet."})})]})]})}var C=a.i(35112);function D({open:a,onClose:d,teamId:e,onInstalled:f}){let g=(0,c.useMemo)(()=>`${e}-swarm-orchestrator`,[e]),[h,i]=(0,c.useState)(g),[j,l]=(0,c.useState)(""),[m,n]=(0,c.useState)(`~/swarm-worktrees/${e}`),[o,p]=(0,c.useState)("origin/main"),[q,r]=(0,c.useState)(!0),[s,t]=(0,c.useState)(!0),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(null),[y,z]=(0,c.useState)(null),A=(0,c.useMemo)(()=>({effectiveAgentId:String(h??"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/--+/g,"-")}),[h]);return a?(0,C.createPortal)((0,b.jsxs)("div",{className:"fixed inset-0 z-[210]",children:[(0,b.jsx)("div",{className:"fixed inset-0 bg-black/60",onClick:()=>{u||d()}}),(0,b.jsx)("div",{className:"fixed inset-0 overflow-y-auto",children:(0,b.jsx)("div",{className:"flex min-h-full items-center justify-center p-4",children:(0,b.jsxs)("div",{className:"w-full max-w-xl rounded-2xl border border-white/10 bg-[color:var(--ck-bg-glass-strong)] p-5 shadow-[var(--ck-shadow-2)]",children:[(0,b.jsx)("div",{className:"text-lg font-semibold text-[color:var(--ck-text-primary)]",children:"Add Orchestrator"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["This will scaffold a new ",(0,b.jsx)("span",{className:"font-mono text-xs",children:"swarm-orchestrator"})," agent workspace for this team and prefill its config."]}),(0,b.jsx)("label",{className:"mt-4 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Orchestrator agent id"}),(0,b.jsx)("input",{value:h,onChange:a=>i(a.target.value),className:"mt-1 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)]"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Default: ",(0,b.jsx)("span",{className:"font-mono",children:g})," (normalized: ",(0,b.jsx)("span",{className:"font-mono",children:A.effectiveAgentId}),")"]}),(0,b.jsx)("label",{className:"mt-4 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Repo directory (SWARM_REPO_DIR)"}),(0,b.jsx)("input",{value:j,onChange:a=>l(a.target.value),placeholder:"~/my-project",className:"mt-1 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)]"}),(0,b.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-3 md:grid-cols-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Worktree root (SWARM_WORKTREE_ROOT)"}),(0,b.jsx)("input",{value:m,onChange:a=>n(a.target.value),className:"mt-1 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)]"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:"Recommend a dedicated folder outside the repo."})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Base ref (SWARM_BASE_REF)"}),(0,b.jsx)("input",{value:o,onChange:a=>p(a.target.value),className:"mt-1 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)]"})]})]}),(0,b.jsxs)("label",{className:"mt-5 flex items-start gap-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:q,onChange:a=>r(a.target.checked),className:"mt-1"}),(0,b.jsxs)("span",{children:["Add this agent to OpenClaw config (recommended).",(0,b.jsx)("br",{}),(0,b.jsxs)("span",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:["This will modify ",(0,b.jsx)("span",{className:"font-mono",children:"~/.openclaw/openclaw.json"})," to add ",(0,b.jsx)("span",{className:"font-mono",children:A.effectiveAgentId}),"."]})]})]}),(0,b.jsxs)("label",{className:"mt-3 flex items-start gap-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:s,onChange:a=>t(a.target.checked),className:"mt-1"}),(0,b.jsxs)("span",{children:["Make scripts executable (developer convenience).",(0,b.jsx)("br",{}),(0,b.jsxs)("span",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:["Runs ",(0,b.jsx)("span",{className:"font-mono",children:"chmod +x .clawdbot/*.sh"})," in the orchestrator workspace."]})]})]}),w?(0,b.jsx)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:w}):null,y?(0,b.jsxs)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-emerald-400/30 bg-emerald-500/10 p-3 text-sm text-emerald-100",children:["Installed ",(0,b.jsx)("span",{className:"font-mono",children:y.orchestratorAgentId})," → ",(0,b.jsx)("span",{className:"font-mono",children:y.workspace})]}):null,(0,b.jsxs)("div",{className:"mt-6 flex items-center justify-end gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:d,disabled:u,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)] hover:bg-white/10 disabled:opacity-50",children:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:u||!A.effectiveAgentId||!j.trim(),onClick:async()=>{v(!0),x(null),z(null);try{let a=await (0,k.fetchJson)("/api/teams/orchestrator/install",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:e,orchestratorAgentId:A.effectiveAgentId,repoDir:j.trim(),worktreeRoot:m.trim(),baseRef:o.trim(),applyConfig:q,makeExecutable:s})});if(!a.ok)throw Error(a.error);z({orchestratorAgentId:a.orchestratorAgentId,workspace:a.workspace}),f()}catch(a){x(a instanceof Error?a.message:String(a))}finally{v(!1)}},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)] hover:bg-[var(--ck-accent-red-hover)] disabled:opacity-50",children:u?"Installing…":"Install"})]})]})})})]}),document.body):null}function E({teamId:a}){let[d,e]=(0,c.useState)(!0),[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)(null),[j,l]=(0,c.useState)(!1),m=(0,c.useCallback)(async()=>{e(!0);try{let b=await (0,k.fetchJson)(`/api/teams/orchestrator?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});g(b),i(new Date().toISOString())}catch(a){g({ok:!1,error:a instanceof Error?a.message:String(a)}),i(new Date().toISOString())}finally{e(!1)}},[a]);return((0,c.useEffect)(()=>{m()},[m]),d)?(0,b.jsx)("div",{className:"mt-6 ck-glass-strong p-4",children:"Loading orchestrator state…"}):f?f.ok?f.present?(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap 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:"Orchestrator"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["Agent: ",(0,b.jsx)("span",{className:"font-mono",children:f.agent.id}),f.agent.identityName?` (${f.agent.identityName})`:""]}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["Workspace: ",(0,b.jsx)("span",{className:"font-mono",children:f.agent.workspace})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:h?(0,b.jsxs)("span",{children:["Last updated: ",(0,b.jsx)("span",{className:"font-mono",children:h})]}):null}),(0,b.jsx)("button",{type:"button",onClick:()=>void m(),disabled:d,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)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15 disabled:opacity-50",children:d?"Refreshing…":"Refresh"})]})]}),(0,b.jsxs)("div",{className:"mt-5 grid grid-cols-1 gap-4 lg:grid-cols-2",children:[(0,b.jsxs)("section",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"tmux sessions"}),f.tmuxSessions.length?(0,b.jsx)("ul",{className:"mt-2 space-y-2",children:f.tmuxSessions.map(a=>(0,b.jsxs)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.name}),(0,b.jsxs)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["attached=",String(a.attached),"number"==typeof a.windows?` windows=${a.windows}`:""]})]},a.name))}):(0,b.jsx)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No sessions detected (or tmux not running)."})]}),(0,b.jsxs)("section",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"git worktrees"}),f.worktrees.length?(0,b.jsx)("ul",{className:"mt-2 space-y-2",children:f.worktrees.map(a=>(0,b.jsxs)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("div",{className:"font-mono text-xs",children:a.path}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[a.branch?a.branch:"(no branch)",a.sha?` @ ${a.sha.slice(0,7)}`:""]})]},a.path))}):(0,b.jsx)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No worktrees detected."})]})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Active tasks"}),f.activeTasksSummary?(0,b.jsxs)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("div",{className:"font-mono text-xs",children:f.activeTasksSummary.path}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["number"==typeof f.activeTasksSummary.taskCount?`tasks=${f.activeTasksSummary.taskCount}`:"tasks=?",f.activeTasksSummary.rawType?` type=${f.activeTasksSummary.rawType}`:""]})]}):(0,b.jsx)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No active-tasks.json found."})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"CLI quick actions"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"The orchestrator is designed to be driven from the CLI (and usually tmux). Common commands:"}),(0,b.jsxs)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("li",{children:[(0,b.jsx)("span",{className:"font-mono text-xs",children:"tmux ls"}),(0,b.jsx)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(list sessions)"})]}),(0,b.jsxs)("li",{children:[(0,b.jsx)("span",{className:"font-mono text-xs",children:"tmux attach -t <session>"}),(0,b.jsx)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(jump into a running swarm)"})]}),(0,b.jsxs)("li",{children:[(0,b.jsxs)("span",{className:"font-mono text-xs",children:["git -C ",f.agent.workspace," worktree list"]}),(0,b.jsx)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(inspect worktrees)"})]})]}),(0,b.jsx)("p",{className:"mt-3 text-xs text-[color:var(--ck-text-tertiary)]",children:"Note: ClawKitchen is read-only here; it surfaces status and pointers, but does not run or attach to tmux."})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Human approval gate (recommended)"}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["For workflows that publish, deploy, or send outbound messages, keep a ",(0,b.jsx)("strong",{children:"human approval step"}),"."]}),(0,b.jsxs)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("li",{children:"Generate a proposed change/post as a draft."}),(0,b.jsx)("li",{children:"Send the draft to a bound messaging channel (e.g. Telegram) for approval."}),(0,b.jsx)("li",{children:"Only execute the final action after explicit approve/deny."})]})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Where to change settings"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"These are the common knobs for a swarm/orchestrator scaffold (read-only references):"}),(0,b.jsx)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:f.settingsPaths.map(a=>(0,b.jsx)("li",{className:"font-mono text-xs",children:a},a))})]})]}):(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap 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:"Orchestrator"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No swarm/orchestrator detected for this team."})]}),(0,b.jsx)("button",{type:"button",onClick:()=>l(!0),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)] hover:bg-[var(--ck-accent-red-hover)]",children:"Add Orchestrator"})]}),(0,b.jsxs)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-tertiary)]",children:"Detection"}),(0,b.jsx)("div",{className:"mt-1 font-mono text-xs",children:f.reason||"(no reason provided)"})]}),(0,b.jsxs)("p",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:["Default convention is ",(0,b.jsx)("code",{children:"<teamId>-swarm-orchestrator"}),". Once installed, this tab will show: tmux sessions, git worktrees/branches, and active task state."]}),(0,b.jsx)(D,{open:j,onClose:()=>l(!1),teamId:a,onInstalled:()=>{l(!1),m()}})]}):(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Orchestrator"}),(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:f.error})]}):(0,b.jsx)("div",{className:"mt-6 ck-glass-strong p-4",children:"No orchestrator state available."})}var F=a.i(83856);let G=[{id:"recipe",label:"Recipe"},{id:"agents",label:"Agents"},{id:"skills",label:"Skills"},{id:"cron",label:"Cron"},{id:"files",label:"Files"},{id:"orchestrator",label:"Orchestrator"}],H=[{id:"memory",label:"Memory"},{id:"workflows",label:"Workflows"}];function I({teamId:a,initialTab:g}){let l=(0,e.useRouter)(),[m,n]=(0,c.useState)([]),[o,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(null),[y,A]=(0,c.useState)(null),[C,D]=(0,c.useState)(!1),[I,J]=(0,c.useState)(a),[K,L]=(0,c.useState)(a),[M,N]=(0,c.useState)(""),[O,P]=(0,c.useState)(null),[Q,R]=(0,c.useState)(()=>["recipe","agents","skills","cron","files","memory","orchestrator","workflows"].includes(g)?g:"recipe"),S=(0,c.useMemo)(()=>[...G,...H],[]),[T,U]=(0,c.useState)(!0),[V,W]=(0,c.useState)(!1),[X,Y]=(0,c.useState)(!1),[Z,$]=(0,c.useState)(!1),[_,aa]=(0,c.useState)(!1),[ab,ac]=(0,c.useState)(""),ad=(0,i.useToast)(),[ae,af]=(0,c.useState)(!1),[ag,ah]=(0,c.useState)(!1),[ai,aj]=(0,c.useState)(null);function ak(a,b="info"){let c=String(a??"").trim();c&&ad.push({kind:b,message:c})}let[al,am]=(0,c.useState)([]),[an,ao]=(0,c.useState)(!1),[ap,aq]=(0,c.useState)(""),[ar,as]=(0,c.useState)(!1),[at,au]=(0,c.useState)("SOUL.md"),[av,aw]=(0,c.useState)(""),[ax,ay]=(0,c.useState)([]),[az,aA]=(0,c.useState)(!1),[aB,aC]=(0,c.useState)([]),[aD,aE]=(0,c.useState)(!1),aF=(0,c.useMemo)(()=>{let a=String(M??"");if(!a.startsWith("---\n"))return[];let b=a.indexOf("\n---\n",4);if(-1===b)return[];let c=a.slice(4,b+1);try{let a=(0,d.parse)(c)??{};return(Array.isArray(a.agents)?a.agents:[]).map(a=>a).map(a=>({role:String(a.role??"").trim(),name:"string"==typeof a.name?a.name:void 0})).filter(a=>!!a.role)}catch{return[]}},[M]),[aG,aH]=(0,c.useState)(""),[aI,aJ]=(0,c.useState)(""),[aK,aL]=(0,c.useState)(""),aM=(0,c.useMemo)(()=>("__custom__"===aG?aI:aG).trim()||"",[aG,aI]),[aN,aO]=(0,c.useState)([]),[aP,aQ]=(0,c.useState)([]),[aR,aS]=(0,c.useState)(!1),[aT,aU]=(0,c.useState)(""),[aV,aW]=(0,c.useState)(!1),[aX,aY]=(0,c.useState)(""),[aZ,a$]=(0,c.useState)(""),a_=(0,c.useMemo)(()=>m.filter(a=>"team"===a.kind),[m]),a0=(0,c.useMemo)(()=>m.find(a=>a.id===I&&"workspace"===a.source)??m.find(a=>a.id===I)??null,[m,I]),a1=!!a.trim(),a2=!!I.trim(),a3=m.some(a=>a.id===I&&"workspace"===a.source),a4=!!(a0?.source==="builtin"&&!a3);async function a5(){let a=I.trim();if(a){aa(!0),ac("");try{let b=await (0,k.fetchJson)(`/api/recipes/${encodeURIComponent(a)}`,{cache:"no-store"}),c=b.recipe;N(c.content),P("string"==typeof b.recipeHash?b.recipeHash:null)}catch(a){ac((0,j.errorMessage)(a))}finally{aa(!1)}}}async function a6(a){let b=o.trim(),c=String(a.toId??I).trim(),d=String(a.toName??K).trim(),e=!!a.overwrite,f=!!a.scaffold;if(!b)throw Error("Source recipe id is required");if(!c)throw Error("Custom recipe id is required");return await (0,k.fetchJson)("/api/recipes/clone",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({fromId:b,toId:c,toName:d||void 0,overwrite:e,scaffold:f})})}async function a7(a,b){W(!0),ak("");try{let c=await a6({overwrite:a,...b});if(c.scaffold&&!c.scaffold.ok&&ak(`Scaffold failed (recipe was still cloned): ${c.scaffold.error||"Unknown error"}`,"error"),M.trim()&&M.trim()!==c.content.trim()){let a=function(a,b){if(!a.startsWith("---\n"))return a;let c=a.indexOf("\n---\n",4);if(-1===c)return a;let d=a.slice(4,c),e=a.slice(c+5),{next:f,sawTeamBlock:g,patched:h}=function(a,b){let c=[],d=!1,e=!1,f=!1;for(let g of a){if(/^team\s*:\s*$/i.test(g)){d=!0,e=!0,c.push(g);continue}if(d&&/^\S/.test(g)&&(d=!1),d&&/^\s+teamId\s*:/i.test(g)){c.push(` teamId: ${b}`),f=!0;continue}c.push(g)}return{next:c,sawTeamBlock:e,patched:f}}(d.split("\n"),b);if(g&&!h){let a=[];for(let c of f)a.push(c),/^team\s*:\s*$/i.test(c)&&a.push(` teamId: ${b}`);return`---
|
|
2
|
-
${a.join("\n")}
|
|
3
|
-
---
|
|
4
|
-
${e}`}return`---
|
|
5
|
-
${f.join("\n")}
|
|
6
|
-
---
|
|
7
|
-
${e}`}(function(a,b){var c;let d,e;if(!a.startsWith("---\n"))return a;let f=a.indexOf("\n---\n",4);if(-1===f)return a;let g=a.slice(4,f),h=a.slice(f+5),i=(c=g.split("\n"),d=!1,e=c.map(a=>/^id\s*:/i.test(a)?(d=!0,`id: ${b}`):a),d||e.unshift(`id: ${b}`),e);return`---
|
|
8
|
-
${i.join("\n")}
|
|
9
|
-
---
|
|
10
|
-
${h}`}(M,I.trim()),I.trim());await (0,k.fetchJson)(`/api/recipes/${encodeURIComponent(I.trim())}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:a})}),N(a)}else N(c.content);try{let a=await (0,k.fetchJson)(`/api/recipes/${encodeURIComponent(I.trim())}`,{cache:"no-store"});"string"==typeof a.recipeHash&&P(a.recipeHash)}catch{P(null)}ak(`Saved team recipe: ${c.filePath}`,"success")}catch(a){ak((0,j.errorMessage)(a),"error")}finally{W(!1)}}async function a8(b){W(!0),aq("");try{let c=await (0,k.fetchJson)(`/api/teams/file?teamId=${encodeURIComponent(a)}&name=${encodeURIComponent(b)}`,{cache:"no-store"});if(!c.ok)throw Error("Failed to load file");au(b),aw(String(c.content??""))}catch(a){aq((0,j.errorMessage)(a))}finally{W(!1)}}async function a9(){W(!0),aq("");try{if(!(await (0,k.fetchJson)("/api/teams/file",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,name:at,content:av})})).ok)throw Error("Failed to save file")}catch(a){aq((0,j.errorMessage)(a))}finally{W(!1)}}async function ba(){W(!0);try{await t({teamId:a,toId:I,newRole:aG,derivedRole:aM,newRoleName:aK,content:M,setContent:N,setTeamAgents:aC,flashMessage:ak,ensureCustomRecipeExists:a6})}catch(a){ak((0,j.errorMessage)(a),"error")}finally{W(!1)}}async function bb(a,b,c){W(!0);try{await (0,k.fetchJson)("/api/cron/job",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:a,action:c})}),ak(`Cron ${c}: ${b}`,"success")}catch(a){ak((0,j.errorMessage)(a),"error")}finally{W(!1)}}async function bc(){aW(!0),aY(""),a$("");try{await (0,k.fetchJson)("/api/teams/skills/install",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,skill:aT})}),aY(`Installed skill: ${aT}`);try{let b=await (0,k.fetchJson)(`/api/teams/skills?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});b.ok&&Array.isArray(b.skills)&&aO(b.skills)}catch{}}catch(a){a$((0,j.errorMessage)(a))}finally{aW(!1)}}return(0,c.useEffect)(()=>{J(a),L(a),N(""),P(null),aj(null),ah(!1),af(!1),g&&["recipe","agents","skills","cron","files","memory","orchestrator","workflows"].includes(g)&&R(g)},[a,g]),(0,c.useEffect)(()=>{let b=!1;return U(!0),p(a,{setRecipes:n,setLockedFromId:s,setLockedFromName:A,setProvenanceMissing:D,setFromId:q,setTeamMetaRecipeHash:aj,setTeamFiles:am,setCronJobs:ay,setTeamAgents:aC,setSkillsList:aO,setAvailableSkills:aQ,setSelectedSkill:aU,setTeamFilesLoading:ao,setCronLoading:aA,setTeamAgentsLoading:aE,setSkillsLoading:aS}).then(()=>{b||U(!1)}).catch(a=>{ak((0,j.errorMessage)(a),"error"),b||U(!1)}),()=>{b=!0}},[a]),(0,c.useEffect)(()=>{!I.trim()||M.trim()||_||a5()},[I]),(0,b.jsxs)("div",{className:"ck-glass w-full p-6 sm:p-8",children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Team editor"}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Bootstrap a ",(0,b.jsx)("strong",{children:"custom team recipe"})," for this installed team, without modifying builtin recipes."]}),(0,b.jsx)("div",{className:"mt-6 flex flex-wrap gap-2",children:S.map(a=>(0,b.jsx)("button",{onClick:()=>R(a.id),className:Q===a.id?"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)]":"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)] shadow-[var(--ck-shadow-1)] hover:bg-white/10",children:a.label},a.id))}),"recipe"===Q&&(0,b.jsx)(u,{loading:T,fromId:o,setFromId:q,toId:I,setToId:J,toName:K,setToName:L,canEditTargetId:!0,teamRecipes:a_,lockedFromId:r,lockedFromName:y,provenanceMissing:C,saving:V,teamIdValid:a1,targetIdValid:a2,targetIsBuiltin:a4,loadedRecipeHash:O,teamMetaRecipeHash:ai,publishing:X,content:M,setContent:N,setLoadedRecipeHash:P,recipeLoadError:ab,onSaveCustom:a7,onPublishOpen:()=>ah(!0),onDeleteOpen:()=>af(!0)}),"agents"===Q&&(0,b.jsx)(v,{teamId:a,toId:I,recipeAgents:aF,newRole:aG,setNewRole:aH,customRole:aI,setCustomRole:aJ,newRoleName:aK,setNewRoleName:aL,derivedRole:aM,saving:V,teamAgents:aB,teamAgentsLoading:aD,onAddAgent:ba}),"skills"===Q&&(0,b.jsx)(w,{teamId:a,skillsList:aN,availableSkills:aP,skillsLoading:aR,selectedSkill:aT,setSelectedSkill:aU,installingSkill:aV,teamSkillMsg:aX,teamSkillError:aZ,onInstallSkill:bc}),"cron"===Q&&(0,b.jsx)(x,{cronJobs:ax,cronLoading:az,saving:V,onCronAction:bb}),"orchestrator"===Q&&(0,b.jsx)(E,{teamId:a}),"memory"===Q&&(0,b.jsx)("div",{className:"mt-6",children:(0,b.jsx)(B,{teamId:a})}),"workflows"===Q&&(0,b.jsx)("div",{className:"mt-6",children:(0,b.jsx)(F.default,{teamId:a})}),"files"===Q&&(0,b.jsx)(z,{teamFiles:al,teamFilesLoading:an,showOptionalFiles:ar,setShowOptionalFiles:as,fileName:at,fileContent:av,setFileContent:aw,teamFileError:ap,saving:V,onLoadTeamFile:a8,onSaveTeamFile:a9}),(0,b.jsx)(h,{open:ag,teamId:a,recipeId:I,busy:X,onClose:()=>ah(!1),onConfirm:async()=>{Y(!0);try{await (0,k.fetchJson)("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"team",recipeId:I.trim(),teamId:a,overwrite:!0,applyConfig:!0})});try{let b=await (0,k.fetchJson)(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});b.ok&&b.meta&&"string"==typeof b.meta.recipeHash&&aj(b.meta.recipeHash)}catch{}ah(!1),ak("Published changes to active team","success")}catch(a){ak((0,j.errorMessage)(a),"error")}finally{Y(!1)}}}),(0,b.jsx)(f.DeleteTeamModal,{open:ae,teamId:a,busy:Z,onClose:()=>af(!1),onConfirm:async()=>{$(!0);try{await (0,k.fetchJson)("/api/teams/remove-team",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a})}),ak("Deleted team successfully","success"),af(!1),setTimeout(()=>l.push("/"),250)}catch(a){ak((0,j.errorMessage)(a),"error")}finally{$(!1)}}})]})}a.s(["default",()=>I],67004)}];
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=src_app_teams_%5BteamId%5D_team-editor_index_tsx_e68e9cbc._.js.map
|
package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/teams/%5BteamId%5D/team-editor/index.tsx","../../../../src/app/teams/%5BteamId%5D/PublishChangesModal.tsx","../../../../src/app/teams/%5BteamId%5D/team-editor/team-editor-utils.ts","../../../../src/app/teams/%5BteamId%5D/team-editor/team-editor-data.ts","../../../../src/app/teams/%5BteamId%5D/team-editor/TeamRecipeTab.tsx","../../../../src/app/teams/%5BteamId%5D/team-editor/TeamAgentsTab.tsx","../../../../src/app/teams/%5BteamId%5D/team-editor/TeamSkillsTab.tsx","../../../../src/app/teams/%5BteamId%5D/team-editor/TeamCronTab.tsx","../../../../src/app/teams/%5BteamId%5D/team-editor/TeamFilesTab.tsx","../../../../src/app/teams/%5BteamId%5D/team-editor/TeamMemoryTab.tsx","../../../../src/app/teams/%5BteamId%5D/OrchestratorSetupModal.tsx","../../../../src/app/teams/%5BteamId%5D/OrchestratorPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { parse as parseYaml } from \"yaml\";\nimport { useRouter } from \"next/navigation\";\nimport { DeleteTeamModal } from \"@/components/delete-modals\";\nimport { PublishChangesModal } from \"../PublishChangesModal\";\nimport { useToast } from \"@/components/ToastProvider\";\nimport { errorMessage } from \"@/lib/errors\";\nimport { fetchJson } from \"@/lib/fetch-json\";\nimport {\n loadTeamEditorInitial,\n handleAddAgentToTeam,\n} from \"./team-editor-data\";\nimport { forceFrontmatterId, forceFrontmatterTeamTeamId } from \"./team-editor-utils\";\nimport type { RecipeDetail, RecipeListItem, TeamAgentEntry } from \"./types\";\nimport { TeamRecipeTab } from \"./TeamRecipeTab\";\nimport { TeamAgentsTab } from \"./TeamAgentsTab\";\nimport { TeamSkillsTab } from \"./TeamSkillsTab\";\nimport { TeamCronTab } from \"./TeamCronTab\";\nimport { TeamFilesTab } from \"./TeamFilesTab\";\nimport { TeamMemoryTab } from \"./TeamMemoryTab\";\nimport { OrchestratorPanel } from \"../OrchestratorPanel\";\nimport WorkflowsClient from \"../workflows/workflows-client\";\n\nconst BASE_TABS = [\n { id: \"recipe\" as const, label: \"Recipe\" },\n { id: \"agents\" as const, label: \"Agents\" },\n { id: \"skills\" as const, label: \"Skills\" },\n { id: \"cron\" as const, label: \"Cron\" },\n { id: \"files\" as const, label: \"Files\" },\n { id: \"orchestrator\" as const, label: \"Orchestrator\" },\n] as const;\n\nconst EXPERIMENTAL_TABS = [\n { id: \"memory\" as const, label: \"Memory\" },\n { id: \"workflows\" as const, label: \"Workflows\" },\n] as const;\n\n\ntype TabId = (typeof BASE_TABS | typeof EXPERIMENTAL_TABS)[number][\"id\"];\n\nexport default function TeamEditor({ teamId, initialTab }: { teamId: string; initialTab?: string }) {\n const router = useRouter();\n const [recipes, setRecipes] = useState<RecipeListItem[]>([]);\n const [fromId, setFromId] = useState<string>(\"\");\n const [lockedFromId, setLockedFromId] = useState<string | null>(null);\n const [lockedFromName, setLockedFromName] = useState<string | null>(null);\n const [provenanceMissing, setProvenanceMissing] = useState(false);\n const [toId, setToId] = useState<string>(teamId);\n const [toName, setToName] = useState<string>(teamId);\n const [content, setContent] = useState<string>(\"\");\n const [loadedRecipeHash, setLoadedRecipeHash] = useState<string | null>(null);\n\n // Must be declared BEFORE any hook initializers that reference it.\n // (Avoids SSR/minifier TDZ issues like \"Cannot access before initialization\".)\n\n const [activeTab, setActiveTab] = useState<TabId>(() => {\n const valid: TabId[] = [\"recipe\", \"agents\", \"skills\", \"cron\", \"files\", \"memory\", \"orchestrator\", \"workflows\"];\n return valid.includes(initialTab as TabId) ? (initialTab as TabId) : \"recipe\";\n });\n const tabs = useMemo(() => [...BASE_TABS, ...EXPERIMENTAL_TABS], []);\n\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [publishing, setPublishing] = useState(false);\n const [deleting, setDeleting] = useState(false);\n const [loadingSource, setLoadingSource] = useState(false);\n const [recipeLoadError, setRecipeLoadError] = useState<string>(\"\");\n const toast = useToast();\n\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [publishOpen, setPublishOpen] = useState(false);\n const [teamMetaRecipeHash, setTeamMetaRecipeHash] = useState<string | null>(null);\n\n function flashMessage(next: string, kind: \"success\" | \"error\" | \"info\" = \"info\") {\n const msg = String(next ?? \"\").trim();\n if (!msg) return;\n toast.push({ kind, message: msg });\n }\n\n const [teamFiles, setTeamFiles] = useState<{ name: string; missing: boolean; required?: boolean; rationale?: string }[]>([]);\n const [teamFilesLoading, setTeamFilesLoading] = useState(false);\n const [teamFileError, setTeamFileError] = useState<string>(\"\");\n const [showOptionalFiles, setShowOptionalFiles] = useState(false);\n const [fileName, setFileName] = useState<string>(\"SOUL.md\");\n const [fileContent, setFileContent] = useState<string>(\"\");\n\n const [cronJobs, setCronJobs] = useState<unknown[]>([]);\n const [cronLoading, setCronLoading] = useState(false);\n\n const [teamAgents, setTeamAgents] = useState<TeamAgentEntry[]>([]);\n const [teamAgentsLoading, setTeamAgentsLoading] = useState(false);\n\n const recipeAgents = useMemo(() => {\n const md = String(content ?? \"\");\n if (!md.startsWith(\"---\\n\")) return [] as Array<{ role: string; name?: string }>;\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return [] as Array<{ role: string; name?: string }>;\n const fmText = md.slice(4, end + 1);\n try {\n const fm = (parseYaml(fmText) ?? {}) as { agents?: unknown };\n const agents = Array.isArray(fm.agents) ? fm.agents : [];\n return agents\n .map((a) => a as { role?: unknown; name?: unknown })\n .map((a) => ({ role: String(a.role ?? \"\").trim(), name: typeof a.name === \"string\" ? a.name : undefined }))\n .filter((a) => Boolean(a.role));\n } catch {\n return [] as Array<{ role: string; name?: string }>;\n }\n }, [content]);\n\n const [newRole, setNewRole] = useState<string>(\"\");\n const [customRole, setCustomRole] = useState<string>(\"\");\n const [newRoleName, setNewRoleName] = useState<string>(\"\");\n\n const derivedRole = useMemo(() => {\n const v = (newRole === \"__custom__\" ? customRole : newRole).trim();\n return v || \"\";\n }, [newRole, customRole]);\n\n const [skillsList, setSkillsList] = useState<string[]>([]);\n const [availableSkills, setAvailableSkills] = useState<string[]>([]);\n const [skillsLoading, setSkillsLoading] = useState(false);\n const [selectedSkill, setSelectedSkill] = useState<string>(\"\");\n const [installingSkill, setInstallingSkill] = useState(false);\n const [teamSkillMsg, setTeamSkillMsg] = useState<string>(\"\");\n const [teamSkillError, setTeamSkillError] = useState<string>(\"\");\n\n const teamRecipes = useMemo(() => recipes.filter((r) => r.kind === \"team\"), [recipes]);\n\n const toRecipe = useMemo(() => {\n const ws = recipes.find((r) => r.id === toId && r.source === \"workspace\");\n return ws ?? recipes.find((r) => r.id === toId) ?? null;\n }, [recipes, toId]);\n\n const teamIdValid = Boolean(teamId.trim());\n const targetIdValid = Boolean(toId.trim());\n const hasWorkspaceOverride = recipes.some((r) => r.id === toId && r.source === \"workspace\");\n const targetIsBuiltin = Boolean(toRecipe?.source === \"builtin\" && !hasWorkspaceOverride);\n const canEditTargetId = true;\n\n useEffect(() => {\n setToId(teamId);\n setToName(teamId);\n setContent(\"\");\n setLoadedRecipeHash(null);\n setTeamMetaRecipeHash(null);\n setPublishOpen(false);\n setDeleteOpen(false);\n const valid: TabId[] = [\"recipe\", \"agents\", \"skills\", \"cron\", \"files\", \"memory\", \"orchestrator\", \"workflows\"];\n if (initialTab && valid.includes(initialTab as TabId)) {\n setActiveTab(initialTab as TabId);\n }\n }, [teamId, initialTab]);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n loadTeamEditorInitial(teamId, {\n setRecipes,\n setLockedFromId,\n setLockedFromName,\n setProvenanceMissing,\n setFromId,\n setTeamMetaRecipeHash,\n setTeamFiles,\n setCronJobs,\n setTeamAgents,\n setSkillsList,\n setAvailableSkills,\n setSelectedSkill,\n setTeamFilesLoading,\n setCronLoading,\n setTeamAgentsLoading,\n setSkillsLoading,\n })\n .then(() => {\n if (!cancelled) setLoading(false);\n })\n .catch((e: unknown) => {\n flashMessage(errorMessage(e), \"error\");\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Initial load only; flashMessage and setters are stable.\n }, [teamId]);\n\n async function onLoadTeamRecipeMarkdown() {\n const id = toId.trim();\n if (!id) return;\n setLoadingSource(true);\n setRecipeLoadError(\"\");\n try {\n const json = await fetchJson<{ recipe?: RecipeDetail; recipeHash?: string }>(`/api/recipes/${encodeURIComponent(id)}`, {\n cache: \"no-store\",\n });\n const r = json.recipe as RecipeDetail;\n setContent(r.content);\n setLoadedRecipeHash(typeof json.recipeHash === \"string\" ? json.recipeHash : null);\n } catch (e: unknown) {\n setRecipeLoadError(errorMessage(e));\n } finally {\n setLoadingSource(false);\n }\n }\n\n useEffect(() => {\n const id = toId.trim();\n if (!id) return;\n if (content.trim()) return;\n if (loadingSource) return;\n void onLoadTeamRecipeMarkdown();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Sync toId to load; onLoadTeamRecipeMarkdown and content are intentionally omitted.\n }, [toId]);\n\n async function ensureCustomRecipeExists(args: { overwrite: boolean; toId?: string; toName?: string; scaffold?: boolean }) {\n const f = fromId.trim();\n const id = String(args.toId ?? toId).trim();\n const name = String(args.toName ?? toName).trim();\n const overwrite = Boolean(args.overwrite);\n const scaffold = Boolean(args.scaffold);\n if (!f) throw new Error(\"Source recipe id is required\");\n if (!id) throw new Error(\"Custom recipe id is required\");\n const json = await fetchJson<{ filePath: string; content: string; scaffold?: { ok: boolean; error?: string } | null }>(\n \"/api/recipes/clone\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ fromId: f, toId: id, toName: name || undefined, overwrite, scaffold }),\n }\n );\n return json;\n }\n\n async function onSaveCustom(overwrite: boolean, overrides?: { toId?: string; toName?: string; scaffold?: boolean }) {\n setSaving(true);\n flashMessage(\"\");\n try {\n const json = await ensureCustomRecipeExists({ overwrite, ...overrides });\n if (json.scaffold && !json.scaffold.ok) {\n flashMessage(`Scaffold failed (recipe was still cloned): ${json.scaffold.error || \"Unknown error\"}`, \"error\");\n }\n const hasEdits = Boolean(content.trim()) && content.trim() !== json.content.trim();\n if (hasEdits) {\n const nextContent = forceFrontmatterTeamTeamId(forceFrontmatterId(content, toId.trim()), toId.trim());\n await fetchJson(`/api/recipes/${encodeURIComponent(toId.trim())}`, {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ content: nextContent }),\n });\n setContent(nextContent);\n } else {\n setContent(json.content);\n }\n try {\n const next = await fetchJson<{ recipeHash?: string }>(`/api/recipes/${encodeURIComponent(toId.trim())}`, {\n cache: \"no-store\",\n });\n if (typeof next.recipeHash === \"string\") setLoadedRecipeHash(next.recipeHash);\n } catch {\n setLoadedRecipeHash(null);\n }\n flashMessage(`Saved team recipe: ${json.filePath}`, \"success\");\n } catch (e: unknown) {\n flashMessage(errorMessage(e), \"error\");\n } finally {\n setSaving(false);\n }\n }\n\n async function onLoadTeamFile(name: string) {\n setSaving(true);\n setTeamFileError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; content?: string }>(\n `/api/teams/file?teamId=${encodeURIComponent(teamId)}&name=${encodeURIComponent(name)}`,\n { cache: \"no-store\" }\n );\n if (!json.ok) throw new Error(\"Failed to load file\");\n setFileName(name);\n setFileContent(String(json.content ?? \"\"));\n } catch (e: unknown) {\n setTeamFileError(errorMessage(e));\n } finally {\n setSaving(false);\n }\n }\n\n async function onSaveTeamFile() {\n setSaving(true);\n setTeamFileError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean }>(\"/api/teams/file\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId, name: fileName, content: fileContent }),\n });\n if (!json.ok) throw new Error(\"Failed to save file\");\n } catch (e: unknown) {\n setTeamFileError(errorMessage(e));\n } finally {\n setSaving(false);\n }\n }\n\n async function onAddAgent() {\n setSaving(true);\n try {\n await handleAddAgentToTeam({\n teamId,\n toId,\n newRole,\n derivedRole,\n newRoleName,\n content,\n setContent,\n setTeamAgents,\n flashMessage,\n ensureCustomRecipeExists,\n });\n } catch (e: unknown) {\n flashMessage(errorMessage(e), \"error\");\n } finally {\n setSaving(false);\n }\n }\n\n async function onCronAction(id: string, label: string, action: \"enable\" | \"disable\" | \"run\") {\n setSaving(true);\n try {\n await fetchJson(\"/api/cron/job\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ id, action }),\n });\n flashMessage(`Cron ${action}: ${label}`, \"success\");\n } catch (e: unknown) {\n flashMessage(errorMessage(e), \"error\");\n } finally {\n setSaving(false);\n }\n }\n\n async function onInstallSkill() {\n setInstallingSkill(true);\n setTeamSkillMsg(\"\");\n setTeamSkillError(\"\");\n try {\n await fetchJson(\"/api/teams/skills/install\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId, skill: selectedSkill }),\n });\n setTeamSkillMsg(`Installed skill: ${selectedSkill}`);\n try {\n const j = await fetchJson<{ ok?: boolean; skills?: string[] }>(\n `/api/teams/skills?teamId=${encodeURIComponent(teamId)}`,\n { cache: \"no-store\" }\n );\n if (j.ok && Array.isArray(j.skills)) setSkillsList(j.skills);\n } catch {\n // ignore\n }\n } catch (e: unknown) {\n setTeamSkillError(errorMessage(e));\n } finally {\n setInstallingSkill(false);\n }\n }\n\n return (\n <div className=\"ck-glass w-full p-6 sm:p-8\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">Team editor</h1>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Bootstrap a <strong>custom team recipe</strong> for this installed team, without modifying builtin recipes.\n </p>\n\n\n <div className=\"mt-6 flex flex-wrap gap-2\">\n {tabs.map((t) => (\n <button\n key={t.id}\n onClick={() => setActiveTab(t.id as TabId)}\n className={\n activeTab === t.id\n ? \"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)]\"\n : \"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)] shadow-[var(--ck-shadow-1)] hover:bg-white/10\"\n }\n >\n {t.label}\n </button>\n ))}\n </div>\n\n {activeTab === \"recipe\" && (\n <TeamRecipeTab\n loading={loading}\n fromId={fromId}\n setFromId={setFromId}\n toId={toId}\n setToId={setToId}\n toName={toName}\n setToName={setToName}\n canEditTargetId={canEditTargetId}\n teamRecipes={teamRecipes}\n lockedFromId={lockedFromId}\n lockedFromName={lockedFromName}\n provenanceMissing={provenanceMissing}\n saving={saving}\n teamIdValid={teamIdValid}\n targetIdValid={targetIdValid}\n targetIsBuiltin={targetIsBuiltin}\n loadedRecipeHash={loadedRecipeHash}\n teamMetaRecipeHash={teamMetaRecipeHash}\n publishing={publishing}\n content={content}\n setContent={setContent}\n setLoadedRecipeHash={setLoadedRecipeHash}\n recipeLoadError={recipeLoadError}\n onSaveCustom={onSaveCustom}\n onPublishOpen={() => setPublishOpen(true)}\n onDeleteOpen={() => setDeleteOpen(true)}\n />\n )}\n\n {activeTab === \"agents\" && (\n <TeamAgentsTab\n teamId={teamId}\n toId={toId}\n recipeAgents={recipeAgents}\n newRole={newRole}\n setNewRole={setNewRole}\n customRole={customRole}\n setCustomRole={setCustomRole}\n newRoleName={newRoleName}\n setNewRoleName={setNewRoleName}\n derivedRole={derivedRole}\n saving={saving}\n teamAgents={teamAgents}\n teamAgentsLoading={teamAgentsLoading}\n onAddAgent={onAddAgent}\n />\n )}\n\n {activeTab === \"skills\" && (\n <TeamSkillsTab\n teamId={teamId}\n skillsList={skillsList}\n availableSkills={availableSkills}\n skillsLoading={skillsLoading}\n selectedSkill={selectedSkill}\n setSelectedSkill={setSelectedSkill}\n installingSkill={installingSkill}\n teamSkillMsg={teamSkillMsg}\n teamSkillError={teamSkillError}\n onInstallSkill={onInstallSkill}\n />\n )}\n\n {activeTab === \"cron\" && (\n <TeamCronTab\n cronJobs={cronJobs}\n cronLoading={cronLoading}\n saving={saving}\n onCronAction={onCronAction}\n />\n )}\n\n\n {activeTab === \"orchestrator\" && <OrchestratorPanel teamId={teamId} />}\n\n {activeTab === \"memory\" && (\n <div className=\"mt-6\">\n <TeamMemoryTab teamId={teamId} />\n </div>\n )}\n\n {activeTab === \"workflows\" && (\n <div className=\"mt-6\">\n <WorkflowsClient teamId={teamId} />\n </div>\n )}\n\n\n {activeTab === \"files\" && (\n <TeamFilesTab\n teamFiles={teamFiles}\n teamFilesLoading={teamFilesLoading}\n showOptionalFiles={showOptionalFiles}\n setShowOptionalFiles={setShowOptionalFiles}\n fileName={fileName}\n fileContent={fileContent}\n setFileContent={setFileContent}\n teamFileError={teamFileError}\n saving={saving}\n onLoadTeamFile={onLoadTeamFile}\n onSaveTeamFile={onSaveTeamFile}\n />\n )}\n\n <PublishChangesModal\n open={publishOpen}\n teamId={teamId}\n recipeId={toId}\n busy={publishing}\n onClose={() => setPublishOpen(false)}\n onConfirm={async () => {\n setPublishing(true);\n try {\n await fetchJson(\"/api/scaffold\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n kind: \"team\",\n recipeId: toId.trim(),\n teamId,\n overwrite: true,\n applyConfig: true,\n }),\n });\n try {\n const metaJson = await fetchJson<{ ok?: boolean; meta?: { recipeHash?: string } }>(\n `/api/teams/meta?teamId=${encodeURIComponent(teamId)}`,\n { cache: \"no-store\" }\n );\n if (metaJson.ok && metaJson.meta && typeof metaJson.meta.recipeHash === \"string\") {\n setTeamMetaRecipeHash(metaJson.meta.recipeHash);\n }\n } catch {\n // ignore\n }\n setPublishOpen(false);\n flashMessage(\"Published changes to active team\", \"success\");\n } catch (e: unknown) {\n flashMessage(errorMessage(e), \"error\");\n } finally {\n setPublishing(false);\n }\n }}\n />\n\n <DeleteTeamModal\n open={deleteOpen}\n teamId={teamId}\n busy={deleting}\n onClose={() => setDeleteOpen(false)}\n onConfirm={async () => {\n setDeleting(true);\n try {\n await fetchJson(\"/api/teams/remove-team\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId }),\n });\n flashMessage(\"Deleted team successfully\", \"success\");\n setDeleteOpen(false);\n setTimeout(() => router.push(\"/\"), 250);\n } catch (e: unknown) {\n flashMessage(errorMessage(e), \"error\");\n } finally {\n setDeleting(false);\n }\n }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { ConfirmationModal } from \"@/components/ConfirmationModal\";\n\nexport function PublishChangesModal({\n open,\n teamId,\n recipeId,\n onClose,\n onConfirm,\n busy,\n}: {\n open: boolean;\n teamId: string;\n recipeId: string;\n busy?: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}) {\n return (\n <ConfirmationModal\n open={open}\n onClose={onClose}\n title=\"Publish changes\"\n confirmLabel=\"Publish changes\"\n confirmBusyLabel=\"Publishing…\"\n busy={busy}\n onConfirm={onConfirm}\n confirmButtonClassName=\"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] hover:bg-emerald-500 disabled:opacity-50\"\n >\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n This will re-scaffold team <code className=\"font-mono\">{teamId}</code> from recipe <code className=\"font-mono\">{recipeId}</code>.\n </p>\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-amber-400/30 bg-amber-500/10 p-3 text-sm text-amber-100\">\n <div className=\"font-medium\">Complete overwrite</div>\n <div className=\"mt-1\">\n All existing team workspace files managed by the recipe will be overwritten (for example: <code className=\"font-mono\">AGENTS.md</code>,{\" \"}\n <code className=\"font-mono\">SOUL.md</code>, role templates, and other scaffolded files). Any manual edits in those files will be lost.\n </div>\n </div>\n </ConfirmationModal>\n );\n}\n","export function safeParseJson<T>(text: string, def: T): T {\n try {\n return JSON.parse(text) as T;\n } catch {\n return def;\n }\n}\n\nfunction replaceOrAddIdInLines(lines: string[], id: string): string[] {\n let found = false;\n const next = lines.map((line) => {\n if (/^id\\s*:/i.test(line)) {\n found = true;\n return `id: ${id}`;\n }\n return line;\n });\n if (!found) next.unshift(`id: ${id}`);\n return next;\n}\n\nexport function forceFrontmatterId(md: string, id: string): string {\n if (!md.startsWith(\"---\\n\")) return md;\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return md;\n const fm = md.slice(4, end);\n const body = md.slice(end + 5);\n const nextLines = replaceOrAddIdInLines(fm.split(\"\\n\"), id);\n return `---\\n${nextLines.join(\"\\n\")}\\n---\\n${body}`;\n}\n\nfunction patchTeamIdInLines(\n lines: string[],\n teamId: string\n): { next: string[]; sawTeamBlock: boolean; patched: boolean } {\n const next: string[] = [];\n let inTeam = false;\n let sawTeamBlock = false;\n let patched = false;\n\n for (const line of lines) {\n if (/^team\\s*:\\s*$/i.test(line)) {\n inTeam = true;\n sawTeamBlock = true;\n next.push(line);\n continue;\n }\n if (inTeam && /^\\S/.test(line)) inTeam = false;\n if (inTeam && /^\\s+teamId\\s*:/i.test(line)) {\n next.push(` teamId: ${teamId}`);\n patched = true;\n continue;\n }\n next.push(line);\n }\n return { next, sawTeamBlock, patched };\n}\n\nexport function forceFrontmatterTeamTeamId(md: string, teamId: string): string {\n if (!md.startsWith(\"---\\n\")) return md;\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return md;\n\n const fm = md.slice(4, end);\n const body = md.slice(end + 5);\n const lines = fm.split(\"\\n\");\n const { next, sawTeamBlock, patched } = patchTeamIdInLines(lines, teamId);\n\n if (sawTeamBlock && !patched) {\n const out: string[] = [];\n for (const line of next) {\n out.push(line);\n if (/^team\\s*:\\s*$/i.test(line)) out.push(` teamId: ${teamId}`);\n }\n return `---\\n${out.join(\"\\n\")}\\n---\\n${body}`;\n }\n return `---\\n${next.join(\"\\n\")}\\n---\\n${body}`;\n}\n","import { errorMessage } from \"@/lib/errors\";\nimport { fetchAll, fetchJson } from \"@/lib/fetch-json\";\nimport type { RecipeListItem, TeamAgentEntry, TeamTabSetters } from \"./types\";\nimport { safeParseJson } from \"./team-editor-utils\";\n\nasync function fetchRecipesAndMeta(teamId: string) {\n const [recipesData, metaRes] = await Promise.all([\n fetchJson<{ recipes?: RecipeListItem[] }>(\"/api/recipes\", { cache: \"no-store\" }),\n fetch(`/api/teams/meta?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" }),\n ]);\n return { recipesData, metaRes };\n}\n\nconst TEAM_TAB_URLS = (teamId: string) => [\n `/api/teams/files?teamId=${encodeURIComponent(teamId)}`,\n `/api/cron/jobs?teamId=${encodeURIComponent(teamId)}`,\n \"/api/agents\",\n `/api/teams/skills?teamId=${encodeURIComponent(teamId)}`,\n \"/api/skills/available\",\n];\n\nasync function fetchTeamTabResponses(teamId: string) {\n const responses = await fetchAll(TEAM_TAB_URLS(teamId));\n const texts = await Promise.all(responses.map((r) => r.text()));\n return { responses, texts };\n}\n\nexport async function loadTeamTabData(teamId: string, setters: TeamTabSetters): Promise<void> {\n setters.setTeamFilesLoading(true);\n setters.setCronLoading(true);\n setters.setTeamAgentsLoading(true);\n setters.setSkillsLoading(true);\n try {\n const { responses, texts } = await fetchTeamTabResponses(teamId);\n const [filesRes, cronRes, agentsRes, skillsRes, availableSkillsRes] = responses;\n const [filesText, cronText, agentsText, skillsText, availableText] = texts;\n\n const filesJson = safeParseJson<{ ok?: boolean; files?: unknown[] }>(filesText, {});\n if (filesRes.ok && filesJson.ok && Array.isArray(filesJson.files)) {\n setters.setTeamFiles(\n filesJson.files.map((f) => {\n const entry = f as { name?: unknown; missing?: unknown; required?: unknown; rationale?: unknown };\n return {\n name: String(entry.name ?? \"\"),\n missing: Boolean(entry.missing),\n required: Boolean(entry.required),\n rationale: typeof entry.rationale === \"string\" ? entry.rationale : undefined,\n };\n }),\n );\n }\n\n const cronJson = safeParseJson<{ ok?: boolean; jobs?: unknown[] }>(cronText, {});\n if (cronRes.ok && cronJson.ok && Array.isArray(cronJson.jobs)) setters.setCronJobs(cronJson.jobs);\n\n const agentsJson = safeParseJson<{ agents?: unknown[] }>(agentsText, {});\n if (agentsRes.ok && Array.isArray(agentsJson.agents)) {\n const filtered = agentsJson.agents.filter((a) => String((a as { id?: unknown }).id ?? \"\").startsWith(`${teamId}-`));\n setters.setTeamAgents(\n filtered.map((a) => {\n const agent = a as { id?: unknown; identityName?: unknown };\n return { id: String(agent.id ?? \"\"), identityName: typeof agent.identityName === \"string\" ? agent.identityName : undefined };\n }),\n );\n }\n\n const skillsJson = safeParseJson<{ ok?: boolean; skills?: unknown[] }>(skillsText, {});\n if (skillsRes.ok && skillsJson.ok && Array.isArray(skillsJson.skills)) setters.setSkillsList(skillsJson.skills as string[]);\n\n const availableJson = safeParseJson<{ ok?: boolean; skills?: unknown[] }>(availableText, {});\n if (availableSkillsRes.ok && availableJson.ok && Array.isArray(availableJson.skills)) {\n const list = availableJson.skills as string[];\n setters.setAvailableSkills(list);\n setters.setSelectedSkill((prev) => {\n const p = String(prev ?? \"\").trim();\n if (p && list.includes(p)) return p;\n return list[0] ?? \"\";\n });\n }\n } finally {\n setters.setTeamFilesLoading(false);\n setters.setCronLoading(false);\n setters.setTeamAgentsLoading(false);\n setters.setSkillsLoading(false);\n }\n}\n\nexport type LoadTeamEditorInitialSetters = TeamTabSetters & {\n setRecipes: (r: RecipeListItem[]) => void;\n setLockedFromId: (v: string | null) => void;\n setLockedFromName: (v: string | null) => void;\n setProvenanceMissing: (v: boolean) => void;\n setFromId: (v: string) => void;\n setTeamMetaRecipeHash: (v: string | null) => void;\n};\n\nexport async function loadTeamEditorInitial(teamId: string, setters: LoadTeamEditorInitialSetters): Promise<void> {\n const initialData = await fetchRecipesAndMeta(teamId);\n setters.setRecipes((initialData.recipesData.recipes ?? []) as RecipeListItem[]);\n\n let locked: { recipeId: string; recipeName?: string } | null = null;\n try {\n const metaJson = await initialData.metaRes.json();\n const meta = metaJson.meta as { recipeId?: unknown; recipeName?: unknown; recipeHash?: unknown } | undefined;\n if (initialData.metaRes.ok && metaJson.ok && meta?.recipeId) {\n locked = {\n recipeId: String(meta.recipeId),\n recipeName: typeof meta.recipeName === \"string\" ? meta.recipeName : undefined,\n };\n setters.setTeamMetaRecipeHash(typeof meta.recipeHash === \"string\" ? meta.recipeHash : null);\n } else {\n setters.setTeamMetaRecipeHash(null);\n }\n } catch {\n setters.setTeamMetaRecipeHash(null);\n }\n\n if (locked) {\n setters.setLockedFromId(locked.recipeId);\n setters.setLockedFromName(locked.recipeName ?? null);\n setters.setProvenanceMissing(false);\n setters.setFromId(locked.recipeId);\n } else {\n setters.setLockedFromId(null);\n setters.setLockedFromName(null);\n setters.setProvenanceMissing(true);\n const list = (initialData.recipesData.recipes ?? []) as RecipeListItem[];\n const preferred = list.find((r) => r.kind === \"team\" && r.id === teamId);\n const fallback = list.find((r) => r.kind === \"team\");\n const pick = preferred ?? fallback;\n if (pick) setters.setFromId(pick.id);\n }\n\n await loadTeamTabData(teamId, {\n setTeamFiles: setters.setTeamFiles,\n setCronJobs: setters.setCronJobs,\n setTeamAgents: setters.setTeamAgents,\n setSkillsList: setters.setSkillsList,\n setAvailableSkills: setters.setAvailableSkills,\n setSelectedSkill: setters.setSelectedSkill,\n setTeamFilesLoading: setters.setTeamFilesLoading,\n setCronLoading: setters.setCronLoading,\n setTeamAgentsLoading: setters.setTeamAgentsLoading,\n setSkillsLoading: setters.setSkillsLoading,\n });\n}\n\nexport async function fetchTeamAgentsOnce(teamId: string): Promise<{ ok: boolean; agents: TeamAgentEntry[] }> {\n try {\n const agentsJson = await fetchJson<{ agents?: unknown[] }>(\"/api/agents\", { cache: \"no-store\" });\n const all = Array.isArray(agentsJson.agents) ? agentsJson.agents : [];\n const filtered = all.filter((a) => String((a as { id?: unknown }).id ?? \"\").startsWith(`${teamId}-`));\n const mapped = filtered.map((a) => {\n const agent = a as { id?: unknown; identityName?: unknown };\n return { id: String(agent.id ?? \"\"), identityName: typeof agent.identityName === \"string\" ? agent.identityName : undefined };\n });\n return { ok: true, agents: mapped };\n } catch {\n return { ok: false, agents: [] };\n }\n}\n\nasync function applyScaffoldAfterTeamAgentsChange(\n teamId: string,\n toId: string,\n flashMessage: (msg: string, kind: \"success\" | \"error\") => void\n): Promise<void> {\n try {\n await fetchJson(\"/api/scaffold\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n kind: \"team\",\n recipeId: toId.trim(),\n teamId,\n applyConfig: true,\n overwrite: false,\n allowExisting: true,\n cronInstallChoice: \"no\",\n }),\n });\n } catch (e: unknown) {\n flashMessage(errorMessage(e), \"error\");\n }\n}\n\nasync function pollTeamAgentsUntil(\n teamId: string,\n expectedAgentId: string,\n setTeamAgents: (a: TeamAgentEntry[]) => void,\n maxMs: number\n): Promise<boolean> {\n const start = Date.now();\n while (Date.now() - start < maxMs) {\n try {\n const r = await fetchTeamAgentsOnce(teamId);\n if (r.ok) {\n setTeamAgents(r.agents);\n const hasExpected = expectedAgentId ? r.agents.some((a) => a.id === expectedAgentId) : false;\n if (!expectedAgentId || hasExpected) return true;\n }\n } catch {\n // ignore\n }\n await new Promise((res) => setTimeout(res, 500));\n }\n return false;\n}\n\nexport async function handleAddAgentToTeam(opts: {\n teamId: string;\n toId: string;\n newRole: string;\n derivedRole: string;\n newRoleName: string;\n content: string;\n setContent: (c: string) => void;\n setTeamAgents: (a: TeamAgentEntry[]) => void;\n flashMessage: (msg: string, kind: \"success\" | \"error\") => void;\n ensureCustomRecipeExists: (args: { overwrite: boolean }) => Promise<unknown>;\n}): Promise<void> {\n const { teamId, toId, newRole, derivedRole, newRoleName, content, setContent, setTeamAgents, flashMessage, ensureCustomRecipeExists } =\n opts;\n try {\n await ensureCustomRecipeExists({ overwrite: false });\n } catch (e: unknown) {\n const msg = errorMessage(e);\n if (!/Recipe id already exists:/i.test(msg)) throw e;\n }\n const json = await fetchJson<{ ok?: boolean; content?: string; addedAgentId?: string }>(\"/api/recipes/team-agents\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(\n newRole === \"__custom__\"\n ? { recipeId: toId.trim(), op: \"add\", role: derivedRole, name: newRoleName }\n : { recipeId: toId.trim(), op: \"addLike\", baseRole: derivedRole, teamId, name: newRoleName },\n ),\n });\n if (!json.ok) throw new Error(\"Failed updating agents list\");\n setContent(String(json.content ?? content));\n\n await applyScaffoldAfterTeamAgentsChange(teamId, toId, flashMessage);\n\n const expectedAgentId = typeof json.addedAgentId === \"string\" ? json.addedAgentId : \"\";\n const appeared = await pollTeamAgentsUntil(teamId, expectedAgentId, setTeamAgents, 5000);\n if (!appeared && expectedAgentId) {\n try {\n void fetch(\"/api/gateway/restart\", { method: \"POST\" });\n } catch {\n // ignore\n }\n await pollTeamAgentsUntil(teamId, expectedAgentId, setTeamAgents, 10000);\n }\n flashMessage(`Updated agents list in ${toId}`, \"success\");\n}\n","\"use client\";\n\nimport type { RecipeListItem } from \"./types\";\n\ntype TeamRecipeTabProps = {\n loading?: boolean;\n fromId: string;\n setFromId: (v: string) => void;\n toId: string;\n setToId: (v: string) => void;\n toName: string;\n setToName: (v: string) => void;\n canEditTargetId: boolean;\n teamRecipes: RecipeListItem[];\n lockedFromId: string | null;\n lockedFromName: string | null;\n provenanceMissing: boolean;\n saving: boolean;\n teamIdValid: boolean;\n targetIdValid: boolean;\n targetIsBuiltin: boolean;\n loadedRecipeHash: string | null;\n teamMetaRecipeHash: string | null;\n publishing: boolean;\n content: string;\n setContent: (v: string) => void;\n setLoadedRecipeHash: (v: string | null) => void;\n recipeLoadError: string;\n onSaveCustom: (overwrite: boolean) => void;\n onPublishOpen: () => void;\n onDeleteOpen: () => void;\n};\n\nexport function TeamRecipeTab(props: TeamRecipeTabProps) {\n const p = props;\n return (\n <>\n <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <div className=\"ck-glass-strong p-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Custom recipe target</div>\n {p.loading ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Loading team…</div>\n ) : null}\n </div>\n <label className=\"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Team id</label>\n <input\n value={p.toId}\n onChange={(e) => p.setToId(e.target.value)}\n disabled={!p.canEditTargetId}\n className=\"mt-1 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:opacity-70\"\n />\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n This is the custom recipe id that will be created when you save.\n </div>\n <label className=\"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Team name</label>\n <input\n value={p.toName}\n onChange={(e) => p.setToName(e.target.value)}\n className=\"mt-1 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)]\"\n />\n <div className=\"mt-4 grid grid-cols-1 gap-2\">\n <button\n type=\"button\"\n disabled={p.saving || !p.teamIdValid || !p.targetIdValid || p.targetIsBuiltin}\n onClick={() => p.onSaveCustom(true)}\n 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)] disabled:opacity-50\"\n >\n {p.saving ? \"Saving\" : \"Save\"}\n </button>\n <button\n type=\"button\"\n disabled={\n p.saving ||\n !p.teamIdValid ||\n !p.targetIdValid ||\n p.targetIsBuiltin ||\n !p.loadedRecipeHash ||\n !p.teamMetaRecipeHash ||\n p.loadedRecipeHash === p.teamMetaRecipeHash\n }\n onClick={p.onPublishOpen}\n className=\"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] disabled:opacity-50\"\n >\n {p.publishing ? \"Publishing\" : \"Publish changes\"}\n </button>\n <button\n type=\"button\"\n disabled={p.saving}\n onClick={p.onDeleteOpen}\n 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)] disabled:opacity-50\"\n >\n Delete Team\n </button>\n </div>\n </div>\n <div className=\"ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Notes</div>\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Parent recipe (locked)</div>\n <select\n disabled\n 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:opacity-70\"\n value={p.fromId}\n onChange={(e) => p.setFromId(e.target.value)}\n >\n {p.teamRecipes.map((r) => (\n <option key={`${r.source}:${r.id}`} value={r.id}>\n {r.id} ({r.source})\n </option>\n ))}\n </select>\n {p.lockedFromId && (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n <code>{p.lockedFromId}</code>\n {p.lockedFromName ? ` (${p.lockedFromName})` : \"\"}\n </div>\n )}\n {!p.lockedFromId && p.provenanceMissing && (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n Provenance not found for this team.\n </div>\n )}\n </div>\n <ul className=\"mt-4 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]\">\n <li>Save writes the custom recipe file identified by Team id.</li>\n <li>Publish changes re-scaffolds this team from your custom recipe.</li>\n <li>Delete Team runs openclaw recipes remove-team.</li>\n </ul>\n </div>\n </div>\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe markdown</div>\n {p.recipeLoadError ? (\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">\n {p.recipeLoadError}\n </div>\n ) : null}\n <textarea\n value={p.content}\n onChange={(e) => {\n p.setContent(e.target.value);\n p.setLoadedRecipeHash(null);\n }}\n className=\"mt-2 h-[55vh] 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)]\"\n spellCheck={false}\n />\n </div>\n </>\n );\n}\n","\"use client\";\n\nimport type { TeamAgentEntry } from \"./types\";\n\ntype RecipeAgent = { role: string; name?: string };\n\ntype TeamAgentsTabProps = {\n teamId: string;\n toId: string;\n recipeAgents: RecipeAgent[];\n newRole: string;\n setNewRole: (v: string) => void;\n customRole: string;\n setCustomRole: (v: string) => void;\n newRoleName: string;\n setNewRoleName: (v: string) => void;\n derivedRole: string;\n saving: boolean;\n teamAgents: TeamAgentEntry[];\n teamAgentsLoading: boolean;\n onAddAgent: () => Promise<void>;\n};\n\nexport function TeamAgentsTab(props: TeamAgentsTabProps) {\n const {\n teamId,\n toId,\n recipeAgents,\n newRole,\n setNewRole,\n customRole,\n setCustomRole,\n newRoleName,\n setNewRoleName,\n derivedRole,\n saving,\n teamAgents,\n teamAgentsLoading,\n onAddAgent,\n } = props;\n\n return (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Agents in this team</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Add/remove agents by updating the <code>agents:</code> list in your custom team recipe (<code>{toId}</code>).\n </p>\n\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3\">\n <div>\n <label className=\"block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Role</label>\n <select\n value={newRole}\n onChange={(e) => {\n const v = e.target.value;\n setNewRole(v);\n if (v === \"__custom__\") {\n setCustomRole(\"\");\n setNewRoleName(\"\");\n return;\n }\n setCustomRole(\"\");\n const match = recipeAgents.find((a) => a.role === v);\n setNewRoleName(match?.name || \"\");\n }}\n className=\"mt-1 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)]\"\n >\n <option value=\"\">Select…</option>\n {recipeAgents.map((a) => (\n <option key={a.role} value={a.role}>\n {a.name || a.role}\n </option>\n ))}\n <option value=\"__custom__\">Other…</option>\n </select>\n\n {newRole === \"__custom__\" ? (\n <input\n value={customRole}\n onChange={(e) => setCustomRole(e.target.value)}\n placeholder=\"role (e.g. researcher)\"\n 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)]\"\n />\n ) : null}\n\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n This writes to the recipe's <code>agents:</code> list.\n </div>\n </div>\n\n <div className=\"sm:col-span-2\">\n <div>\n <label className=\"block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Name (optional)</label>\n <input\n value={newRoleName}\n onChange={(e) => setNewRoleName(e.target.value)}\n placeholder=\"Onchain Researcher\"\n className=\"mt-1 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)]\"\n />\n </div>\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <button\n disabled={saving || !derivedRole}\n onClick={onAddAgent}\n 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)] disabled:opacity-50\"\n >\n Add agent\n </button>\n </div>\n\n <div className=\"mt-6\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Detected installed team agents (read-only)</div>\n <ul className=\"mt-2 space-y-2\">\n {teamAgents.length ? (\n teamAgents.map((a) => (\n <li key={a.id} className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-[color:var(--ck-text-primary)]\">\n {a.identityName || a.id}\n </div>\n <div className=\"text-xs text-[color:var(--ck-text-secondary)]\">{a.id}</div>\n </div>\n <a\n className=\"text-sm font-medium text-[var(--ck-accent-red)] hover:text-[color:var(--ck-accent-red-hover)]\"\n href={\"/agents/\" + encodeURIComponent(a.id) + \"?returnTo=\" + encodeURIComponent(\"/teams/\" + teamId + \"?tab=agents\")}\n >\n Edit\n </a>\n </li>\n ))\n ) : null}\n {teamAgents.length === 0 && !teamAgentsLoading && (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">No team agents detected.</li>\n )}\n {teamAgents.length === 0 && teamAgentsLoading && (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">Loading…</li>\n )}\n </ul>\n </div>\n </div>\n );\n}\n","\"use client\";\n\ntype TeamSkillsTabProps = {\n teamId: string;\n skillsList: string[];\n availableSkills: string[];\n skillsLoading: boolean;\n selectedSkill: string;\n setSelectedSkill: (v: string) => void;\n installingSkill: boolean;\n teamSkillMsg: string;\n teamSkillError: string;\n onInstallSkill: () => Promise<void>;\n};\n\nexport function TeamSkillsTab(props: TeamSkillsTabProps) {\n const p = props;\n return (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Skills</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Skills installed in this team workspace. For agent-specific skills, open the agent from the Agents tab.\n </p>\n <div className=\"mt-4\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Installed</div>\n <ul className=\"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]\">\n {p.skillsList.length ? p.skillsList.map((s) => <li key={s}>{s}</li>) : <li>None installed.</li>}\n </ul>\n </div>\n <div className=\"mt-5 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Add a skill</div>\n <div className=\"mt-2 flex flex-col gap-2 sm:flex-row sm:items-center\">\n <select\n value={p.selectedSkill}\n onChange={(e) => p.setSelectedSkill(e.target.value)}\n disabled={p.installingSkill || p.skillsLoading || !p.availableSkills.length}\n className=\"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)]\"\n >\n {p.availableSkills.length\n ? p.availableSkills.map((s) => <option key={s} value={s}>{s}</option>)\n : <option value=\"\">No skills found</option>}\n </select>\n <button\n type=\"button\"\n disabled={p.installingSkill || p.skillsLoading || !p.selectedSkill}\n onClick={p.onInstallSkill}\n 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)] disabled:opacity-50\"\n >\n {p.installingSkill ? \"Adding\" : \"Add\"}\n </button>\n </div>\n {p.teamSkillError && (\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">\n {p.teamSkillError}\n </div>\n )}\n {p.teamSkillMsg && (\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-emerald-400/30 bg-emerald-500/10 p-3 text-sm text-emerald-100\">\n {p.teamSkillMsg}\n </div>\n )}\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n Uses openclaw recipes install-skill with team-id {p.teamId}.\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\ntype CronJob = {\n id?: unknown;\n jobId?: unknown;\n name?: unknown;\n enabled?: unknown;\n state?: { enabled?: unknown };\n};\n\ntype TeamCronTabProps = {\n cronJobs: unknown[];\n cronLoading: boolean;\n saving: boolean;\n onCronAction: (id: string, label: string, action: \"enable\" | \"disable\" | \"run\") => Promise<void>;\n};\n\nexport function TeamCronTab(props: TeamCronTabProps) {\n const { cronJobs, cronLoading, saving, onCronAction } = props;\n return (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Cron jobs (filtered by team name)</div>\n <ul className=\"mt-3 space-y-3\">\n {cronJobs.length ? (\n cronJobs.map((j) => {\n const job = j as CronJob;\n const id = String(job.id ?? job.jobId ?? \"\").trim();\n const key = id || String(job.name ?? \"job\");\n const label = String(job.name ?? job.id ?? job.jobId ?? \"(unnamed)\");\n const enabled = job.enabled ?? job.state?.enabled;\n return (\n <li key={key} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"font-medium text-[color:var(--ck-text-primary)]\">{label}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">Enabled: {String(enabled ?? \"?\")}</div>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <button\n disabled={saving || !id}\n onClick={() => onCronAction(id, label, \"run\")}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50\"\n >\n Run\n </button>\n <button\n disabled={saving || !id}\n onClick={() => onCronAction(id, label, \"enable\")}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50\"\n >\n Enable\n </button>\n <button\n disabled={saving || !id}\n onClick={() => onCronAction(id, label, \"disable\")}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50\"\n >\n Disable\n </button>\n {!id ? <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(missing id)</div> : null}\n </div>\n </li>\n );\n })\n ) : null}\n {cronJobs.length === 0 && cronLoading && (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">Loading</li>\n )}\n {cronJobs.length === 0 && !cronLoading && (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">No cron jobs detected for this team.</li>\n )}\n </ul>\n </div>\n );\n}\n","\"use client\";\n\nimport { FileListWithOptionalToggle } from \"@/components/FileListWithOptionalToggle\";\nimport type { TeamFileEntry } from \"./types\";\n\ntype TeamFilesTabProps = {\n teamFiles: TeamFileEntry[];\n teamFilesLoading: boolean;\n showOptionalFiles: boolean;\n setShowOptionalFiles: (v: boolean) => void;\n fileName: string;\n fileContent: string;\n setFileContent: (v: string) => void;\n teamFileError: string;\n saving: boolean;\n onLoadTeamFile: (name: string) => void;\n onSaveTeamFile: () => void;\n};\n\nexport function TeamFilesTab(props: TeamFilesTabProps) {\n const {\n teamFiles,\n teamFilesLoading,\n showOptionalFiles,\n setShowOptionalFiles,\n fileName,\n fileContent,\n setFileContent,\n teamFileError,\n saving,\n onLoadTeamFile,\n onSaveTeamFile,\n } = props;\n\n return (\n <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <FileListWithOptionalToggle\n title=\"Team files\"\n files={teamFiles}\n loading={teamFilesLoading}\n showOptionalFiles={showOptionalFiles}\n onShowOptionalChange={setShowOptionalFiles}\n selectedFileName={fileName}\n onSelectFile={onLoadTeamFile}\n />\n\n <div className=\"ck-glass-strong p-4 lg:col-span-2\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Edit: {fileName}</div>\n <button\n disabled={saving}\n onClick={onSaveTeamFile}\n 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)] disabled:opacity-50\"\n >\n {saving ? \"Saving…\" : \"Save file\"}\n </button>\n </div>\n\n {teamFileError ? (\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">\n {teamFileError}\n </div>\n ) : null}\n\n <textarea\n value={fileContent}\n onChange={(e) => setFileContent(e.target.value)}\n className=\"mt-3 h-[55vh] 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)]\"\n spellCheck={false}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { errorMessage } from \"@/lib/errors\";\n\ntype MemoryItem = {\n ts: string;\n author: string;\n type: string;\n content: string;\n source?: unknown;\n _file?: string;\n _line?: number;\n};\n\ntype PinnedItem = MemoryItem & {\n pinnedAt: string;\n pinnedBy: string;\n _key: string;\n};\n\nfunction memoryKey(it: { _file?: string; _line?: number }): string {\n return `${it._file ?? \"\"}:${it._line ?? 0}`;\n}\n\nexport function TeamMemoryTab({ teamId }: { teamId: string }) {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const [files, setFiles] = useState<string[]>([]);\n const [pinnedItems, setPinnedItems] = useState<PinnedItem[]>([]);\n const [items, setItems] = useState<MemoryItem[]>([]);\n\n const [newType, setNewType] = useState(\"learning\");\n const [newContent, setNewContent] = useState(\"\");\n const [newSource, setNewSource] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [pinningKey, setPinningKey] = useState<string | null>(null);\n\n async function refresh() {\n setLoading(true);\n setError(\"\");\n try {\n const res = await fetch(`/api/teams/memory?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" });\n const json = (await res.json()) as {\n ok?: boolean;\n error?: string;\n files?: string[];\n pinnedItems?: PinnedItem[];\n items?: MemoryItem[];\n };\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to load memory\");\n setFiles(Array.isArray(json.files) ? json.files : []);\n setPinnedItems(Array.isArray(json.pinnedItems) ? json.pinnedItems : []);\n setItems(Array.isArray(json.items) ? json.items : []);\n } catch (e: unknown) {\n setError(errorMessage(e));\n setFiles([]);\n setPinnedItems([]);\n setItems([]);\n } finally {\n setLoading(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- refresh is defined inline; teamId is the only intended trigger.\n }, [teamId]);\n\n const examples = useMemo(\n () => [\n { label: \"decision\", value: \"decision\" },\n { label: \"learning\", value: \"learning\" },\n { label: \"bug\", value: \"bug\" },\n { label: \"customer\", value: \"customer\" },\n { label: \"release\", value: \"release\" },\n ],\n []\n );\n\n const pinnedKeySet = useMemo(() => new Set(pinnedItems.map((x) => x._key)), [pinnedItems]);\n\n async function pin(it: MemoryItem) {\n const key = memoryKey(it);\n if (!it._file || !it._line) return;\n\n setPinningKey(key);\n setError(\"\");\n try {\n const payload = {\n op: \"pin\",\n ts: new Date().toISOString(),\n actor: `${teamId}-lead`,\n key: { file: \"team.jsonl\", line: it._line },\n item: { ts: it.ts, author: it.author, type: it.type, content: it.content, source: it.source },\n };\n const res = await fetch(`/api/teams/memory?teamId=${encodeURIComponent(teamId)}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n const json = (await res.json()) as { ok?: boolean; error?: string };\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to pin\");\n await refresh();\n } catch (e: unknown) {\n setError(errorMessage(e));\n } finally {\n setPinningKey(null);\n }\n }\n\n async function unpin(it: { _file?: string; _line?: number }) {\n const key = memoryKey(it);\n if (!it._file || !it._line) return;\n\n setPinningKey(key);\n setError(\"\");\n try {\n const payload = {\n op: \"unpin\",\n ts: new Date().toISOString(),\n actor: `${teamId}-lead`,\n key: { file: \"team.jsonl\", line: it._line },\n };\n const res = await fetch(`/api/teams/memory?teamId=${encodeURIComponent(teamId)}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n const json = (await res.json()) as { ok?: boolean; error?: string };\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to unpin\");\n await refresh();\n } catch (e: unknown) {\n setError(errorMessage(e));\n } finally {\n setPinningKey(null);\n }\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"ck-glass p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team memory (file-first)</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Stored in <span className=\"font-mono\">shared-context/memory/*.jsonl</span>. Items must be attributable.\n </div>\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-secondary)]\">\n Canonical memory model doc:{\" \"}\n <a\n className=\"underline decoration-white/20 underline-offset-4 hover:decoration-white/40\"\n href=\"https://github.com/JIGGAI/ClawRecipes/blob/main/docs/MEMORY_MODEL.md\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n ClawRecipes/docs/MEMORY_MODEL.md\n </a>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={refresh}\n 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)] hover:bg-white/10\"\n >\n Refresh\n </button>\n </div>\n\n {error ? (\n <div className=\"mt-3 rounded border border-red-400/30 bg-red-500/10 p-2 text-sm text-red-100\">{error}</div>\n ) : null}\n\n <div className=\"mt-3 text-xs text-[color:var(--ck-text-secondary)]\">Files: {files.length ? files.join(\", \") : \"(none)\"}</div>\n </div>\n\n <div className=\"ck-glass p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Add memory item</div>\n <div className=\"mt-3 grid grid-cols-1 gap-3 md:grid-cols-2\">\n <label className=\"block\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">type</div>\n <select\n value={newType}\n onChange={(e) => setNewType(e.target.value)}\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n >\n {examples.map((x) => (\n <option key={x.value} value={x.value}>\n {x.label}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"block\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">source (ticket/pr/path)</div>\n <input\n value={newSource}\n onChange={(e) => setNewSource(e.target.value)}\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n placeholder=\"e.g. ticket 0088, PR https://..., shared-context/DECISIONS.md\"\n />\n </label>\n\n <label className=\"block md:col-span-2\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">content</div>\n <textarea\n value={newContent}\n onChange={(e) => setNewContent(e.target.value)}\n className=\"mt-1 h-[110px] w-full resize-none rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-sm text-[color:var(--ck-text-primary)]\"\n placeholder=\"Write a small, specific memory item…\"\n />\n </label>\n\n <div className=\"md:col-span-2\">\n <button\n type=\"button\"\n disabled={saving || !newContent.trim()}\n onClick={async () => {\n setSaving(true);\n setError(\"\");\n try {\n const payload = {\n op: \"append\",\n ts: new Date().toISOString(),\n author: `${teamId}-lead`,\n type: newType,\n content: newContent.trim(),\n source: newSource.trim() ? { text: newSource.trim() } : undefined,\n file: \"team.jsonl\",\n };\n const res = await fetch(`/api/teams/memory?teamId=${encodeURIComponent(teamId)}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n const json = (await res.json()) as { ok?: boolean; error?: string };\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to append memory\");\n setNewContent(\"\");\n setNewSource(\"\");\n await refresh();\n } catch (e: unknown) {\n setError(errorMessage(e));\n } finally {\n setSaving(false);\n }\n }}\n 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)] disabled:opacity-50\"\n >\n {saving ? \"Saving…\" : \"Append to team.jsonl\"}\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"ck-glass p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Pinned memory</div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">{pinnedItems.length} pinned</div>\n </div>\n\n {loading ? <div className=\"mt-3 text-sm text-[color:var(--ck-text-secondary)]\">Loading…</div> : null}\n\n <div className=\"mt-3 space-y-3\">\n {pinnedItems.length ? (\n pinnedItems.map((it) => (\n <div key={it._key} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{it.ts}</span>\n <span className=\"mx-2\">•</span>\n <span className=\"rounded bg-white/5 px-2 py-0.5 font-mono\">{it.type}</span>\n <span className=\"mx-2\">•</span>\n <span className=\"font-mono\">{it.author}</span>\n <span className=\"mx-2\">•</span>\n <span className=\"font-mono\">pinned {it.pinnedAt}</span>\n </div>\n <button\n type=\"button\"\n onClick={() => void unpin(it)}\n disabled={pinningKey === it._key}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50\"\n >\n {pinningKey === it._key ? \"Unpinning…\" : \"Unpin\"}\n </button>\n </div>\n\n <div className=\"mt-2 whitespace-pre-wrap text-sm text-[color:var(--ck-text-primary)]\">{it.content}</div>\n\n {it.source ? (\n <pre className=\"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]\">\n {JSON.stringify(it.source, null, 2)}\n </pre>\n ) : null}\n </div>\n ))\n ) : (\n <div className=\"text-sm text-[color:var(--ck-text-secondary)]\">No pinned items yet.</div>\n )}\n </div>\n </div>\n\n <div className=\"ck-glass p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Recent memory</div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Showing {items.length} (max 200)</div>\n </div>\n\n {loading ? <div className=\"mt-3 text-sm text-[color:var(--ck-text-secondary)]\">Loading…</div> : null}\n\n <div className=\"mt-3 space-y-3\">\n {items.length ? (\n items.map((it) => {\n const k = memoryKey(it);\n const isPinned = pinnedKeySet.has(k);\n return (\n <div key={`${it._file ?? \"?\"}:${it._line ?? 0}`} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{it.ts}</span>\n <span className=\"mx-2\">•</span>\n <span className=\"rounded bg-white/5 px-2 py-0.5 font-mono\">{it.type}</span>\n <span className=\"mx-2\">•</span>\n <span className=\"font-mono\">{it.author}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n {it._file ? (\n <span className=\"text-[10px] text-[color:var(--ck-text-tertiary)] font-mono\">\n {it._file}:{it._line}\n </span>\n ) : null}\n <button\n type=\"button\"\n onClick={() => void pin(it)}\n disabled={isPinned || pinningKey === k || !it._file || !it._line}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50\"\n >\n {isPinned ? \"Pinned\" : pinningKey === k ? \"Pinning…\" : \"Pin\"}\n </button>\n </div>\n </div>\n\n <div className=\"mt-2 whitespace-pre-wrap text-sm text-[color:var(--ck-text-primary)]\">{it.content}</div>\n\n {it.source ? (\n <pre className=\"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]\">\n {JSON.stringify(it.source, null, 2)}\n </pre>\n ) : null}\n </div>\n );\n })\n ) : (\n <div className=\"text-sm text-[color:var(--ck-text-secondary)]\">No memory items yet.</div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { fetchJson } from \"@/lib/fetch-json\";\n\nfunction slugifyId(input: string) {\n return String(input ?? \"\")\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/--+/g, \"-\");\n}\n\nexport function OrchestratorSetupModal({\n open,\n onClose,\n teamId,\n onInstalled,\n}: {\n open: boolean;\n onClose: () => void;\n teamId: string;\n onInstalled: () => void;\n}) {\n const defaultAgentId = useMemo(() => `${teamId}-swarm-orchestrator`, [teamId]);\n const [agentId, setAgentId] = useState(defaultAgentId);\n const [repoDir, setRepoDir] = useState(\"\");\n const [worktreeRoot, setWorktreeRoot] = useState(`~/swarm-worktrees/${teamId}`);\n const [baseRef, setBaseRef] = useState(\"origin/main\");\n const [applyConfig, setApplyConfig] = useState(true);\n const [makeExecutable, setMakeExecutable] = useState(true);\n\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [result, setResult] = useState<{ orchestratorAgentId: string; workspace: string } | null>(null);\n\n const normalized = useMemo(() => {\n const effectiveAgentId = slugifyId(agentId);\n return { effectiveAgentId };\n }, [agentId]);\n\n if (!open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-[210]\">\n <div\n className=\"fixed inset-0 bg-black/60\"\n onClick={() => {\n if (!submitting) onClose();\n }}\n />\n <div className=\"fixed inset-0 overflow-y-auto\">\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <div className=\"w-full max-w-xl rounded-2xl border border-white/10 bg-[color:var(--ck-bg-glass-strong)] p-5 shadow-[var(--ck-shadow-2)]\">\n <div className=\"text-lg font-semibold text-[color:var(--ck-text-primary)]\">Add Orchestrator</div>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">\n This will scaffold a new <span className=\"font-mono text-xs\">swarm-orchestrator</span> agent workspace for this team and\n prefill its config.\n </p>\n\n <label className=\"mt-4 block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Orchestrator agent id</label>\n <input\n value={agentId}\n onChange={(e) => setAgentId(e.target.value)}\n className=\"mt-1 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)]\"\n />\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Default: <span className=\"font-mono\">{defaultAgentId}</span> (normalized: <span className=\"font-mono\">{normalized.effectiveAgentId}</span>)\n </div>\n\n <label className=\"mt-4 block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Repo directory (SWARM_REPO_DIR)</label>\n <input\n value={repoDir}\n onChange={(e) => setRepoDir(e.target.value)}\n placeholder=\"~/my-project\"\n className=\"mt-1 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)]\"\n />\n\n <div className=\"mt-4 grid grid-cols-1 gap-3 md:grid-cols-2\">\n <div>\n <label className=\"block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Worktree root (SWARM_WORKTREE_ROOT)</label>\n <input\n value={worktreeRoot}\n onChange={(e) => setWorktreeRoot(e.target.value)}\n className=\"mt-1 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)]\"\n />\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">Recommend a dedicated folder outside the repo.</div>\n </div>\n\n <div>\n <label className=\"block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Base ref (SWARM_BASE_REF)</label>\n <input\n value={baseRef}\n onChange={(e) => setBaseRef(e.target.value)}\n className=\"mt-1 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)]\"\n />\n </div>\n </div>\n\n <label className=\"mt-5 flex items-start gap-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]\">\n <input type=\"checkbox\" checked={applyConfig} onChange={(e) => setApplyConfig(e.target.checked)} className=\"mt-1\" />\n <span>\n Add this agent to OpenClaw config (recommended).<br />\n <span className=\"text-xs text-[color:var(--ck-text-tertiary)]\">\n This will modify <span className=\"font-mono\">~/.openclaw/openclaw.json</span> to add <span className=\"font-mono\">{normalized.effectiveAgentId}</span>.\n </span>\n </span>\n </label>\n\n <label className=\"mt-3 flex items-start gap-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]\">\n <input type=\"checkbox\" checked={makeExecutable} onChange={(e) => setMakeExecutable(e.target.checked)} className=\"mt-1\" />\n <span>\n Make scripts executable (developer convenience).<br />\n <span className=\"text-xs text-[color:var(--ck-text-tertiary)]\">\n Runs <span className=\"font-mono\">chmod +x .clawdbot/*.sh</span> in the orchestrator workspace.\n </span>\n </span>\n </label>\n\n {error ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">{error}</div>\n ) : null}\n\n {result ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-emerald-400/30 bg-emerald-500/10 p-3 text-sm text-emerald-100\">\n Installed <span className=\"font-mono\">{result.orchestratorAgentId}</span> → <span className=\"font-mono\">{result.workspace}</span>\n </div>\n ) : null}\n\n <div className=\"mt-6 flex items-center justify-end gap-2\">\n <button\n type=\"button\"\n onClick={onClose}\n disabled={submitting}\n 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)] hover:bg-white/10 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={submitting || !normalized.effectiveAgentId || !repoDir.trim()}\n onClick={async () => {\n setSubmitting(true);\n setError(null);\n setResult(null);\n try {\n const json = await fetchJson<\n | { ok: true; orchestratorAgentId: string; workspace: string }\n | { ok: false; error: string }\n >(\"/api/teams/orchestrator/install\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n teamId,\n orchestratorAgentId: normalized.effectiveAgentId,\n repoDir: repoDir.trim(),\n worktreeRoot: worktreeRoot.trim(),\n baseRef: baseRef.trim(),\n applyConfig,\n makeExecutable,\n }),\n });\n if (!json.ok) throw new Error(json.error);\n setResult({ orchestratorAgentId: json.orchestratorAgentId, workspace: json.workspace });\n onInstalled();\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n setSubmitting(false);\n }\n }}\n 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)] hover:bg-[var(--ck-accent-red-hover)] disabled:opacity-50\"\n >\n {submitting ? \"Installing…\" : \"Install\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n , document.body);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { fetchJson } from \"@/lib/fetch-json\";\nimport { OrchestratorSetupModal } from \"./OrchestratorSetupModal\";\n\ntype OrchestratorState =\n | {\n ok: true;\n teamId: string;\n present: false;\n reason?: string;\n }\n | {\n ok: true;\n teamId: string;\n present: true;\n agent: { id: string; identityName?: string; workspace: string };\n tmuxSessions: Array<{ name: string; attached: boolean; windows?: number; created?: string }>;\n worktrees: Array<{ path: string; branch?: string; sha?: string }>;\n activeTasksSummary: null | { path: string; taskCount?: number; rawType?: string };\n settingsPaths: string[];\n }\n | {\n ok: false;\n error: string;\n };\n\nexport function OrchestratorPanel({ teamId }: { teamId: string }) {\n const [loading, setLoading] = useState(true);\n const [state, setState] = useState<OrchestratorState | null>(null);\n const [lastLoadedAt, setLastLoadedAt] = useState<string | null>(null);\n const [setupOpen, setSetupOpen] = useState(false);\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const json = await fetchJson<OrchestratorState>(\n `/api/teams/orchestrator?teamId=${encodeURIComponent(teamId)}`,\n { cache: \"no-store\" }\n );\n setState(json);\n setLastLoadedAt(new Date().toISOString());\n } catch (e: unknown) {\n setState({ ok: false, error: e instanceof Error ? e.message : String(e) });\n setLastLoadedAt(new Date().toISOString());\n } finally {\n setLoading(false);\n }\n }, [teamId]);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n if (loading) {\n return <div className=\"mt-6 ck-glass-strong p-4\">Loading orchestrator state…</div>;\n }\n\n if (!state) {\n return <div className=\"mt-6 ck-glass-strong p-4\">No orchestrator state available.</div>;\n }\n\n if (!state.ok) {\n return (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Orchestrator</div>\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">\n {state.error}\n </div>\n </div>\n );\n }\n\n if (!state.present) {\n return (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Orchestrator</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">No swarm/orchestrator detected for this team.</p>\n </div>\n <button\n type=\"button\"\n onClick={() => setSetupOpen(true)}\n 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)] hover:bg-[var(--ck-accent-red-hover)]\"\n >\n Add Orchestrator\n </button>\n </div>\n\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-tertiary)]\">Detection</div>\n <div className=\"mt-1 font-mono text-xs\">{state.reason || \"(no reason provided)\"}</div>\n </div>\n\n <p className=\"mt-3 text-sm text-[color:var(--ck-text-secondary)]\">\n Default convention is <code><teamId>-swarm-orchestrator</code>. Once installed, this tab will show: tmux sessions,\n git worktrees/branches, and active task state.\n </p>\n\n <OrchestratorSetupModal\n open={setupOpen}\n onClose={() => setSetupOpen(false)}\n teamId={teamId}\n onInstalled={() => {\n setSetupOpen(false);\n void load();\n }}\n />\n </div>\n );\n }\n\n return (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Orchestrator</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">\n Agent: <span className=\"font-mono\">{state.agent.id}</span>\n {state.agent.identityName ? ` (${state.agent.identityName})` : \"\"}\n </div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">\n Workspace: <span className=\"font-mono\">{state.agent.workspace}</span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-3\">\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">\n {lastLoadedAt ? (\n <span>\n Last updated: <span className=\"font-mono\">{lastLoadedAt}</span>\n </span>\n ) : null}\n </div>\n <button\n type=\"button\"\n onClick={() => void load()}\n disabled={loading}\n 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)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15 disabled:opacity-50\"\n >\n {loading ? \"Refreshing…\" : \"Refresh\"}\n </button>\n </div>\n </div>\n\n <div className=\"mt-5 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <section className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">tmux sessions</div>\n {state.tmuxSessions.length ? (\n <ul className=\"mt-2 space-y-2\">\n {state.tmuxSessions.map((s) => (\n <li key={s.name} className=\"text-sm text-[color:var(--ck-text-secondary)]\">\n <span className=\"font-mono\">{s.name}</span>\n <span className=\"ml-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n attached={String(s.attached)}\n {typeof s.windows === \"number\" ? ` windows=${s.windows}` : \"\"}\n </span>\n </li>\n ))}\n </ul>\n ) : (\n <div className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">No sessions detected (or tmux not running).</div>\n )}\n </section>\n\n <section className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">git worktrees</div>\n {state.worktrees.length ? (\n <ul className=\"mt-2 space-y-2\">\n {state.worktrees.map((w) => (\n <li key={w.path} className=\"text-sm text-[color:var(--ck-text-secondary)]\">\n <div className=\"font-mono text-xs\">{w.path}</div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">\n {w.branch ? w.branch : \"(no branch)\"}\n {w.sha ? ` @ ${w.sha.slice(0, 7)}` : \"\"}\n </div>\n </li>\n ))}\n </ul>\n ) : (\n <div className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">No worktrees detected.</div>\n )}\n </section>\n </div>\n\n <section className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Active tasks</div>\n {state.activeTasksSummary ? (\n <div className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n <div className=\"font-mono text-xs\">{state.activeTasksSummary.path}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n {typeof state.activeTasksSummary.taskCount === \"number\" ? `tasks=${state.activeTasksSummary.taskCount}` : \"tasks=?\"}\n {state.activeTasksSummary.rawType ? ` type=${state.activeTasksSummary.rawType}` : \"\"}\n </div>\n </div>\n ) : (\n <div className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">No active-tasks.json found.</div>\n )}\n </section>\n\n <section className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">CLI quick actions</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n The orchestrator is designed to be driven from the CLI (and usually tmux). Common commands:\n </p>\n <ul className=\"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]\">\n <li>\n <span className=\"font-mono text-xs\">tmux ls</span>\n <span className=\"ml-2 text-xs text-[color:var(--ck-text-tertiary)]\">(list sessions)</span>\n </li>\n <li>\n <span className=\"font-mono text-xs\">tmux attach -t <session></span>\n <span className=\"ml-2 text-xs text-[color:var(--ck-text-tertiary)]\">(jump into a running swarm)</span>\n </li>\n <li>\n <span className=\"font-mono text-xs\">git -C {state.agent.workspace} worktree list</span>\n <span className=\"ml-2 text-xs text-[color:var(--ck-text-tertiary)]\">(inspect worktrees)</span>\n </li>\n </ul>\n <p className=\"mt-3 text-xs text-[color:var(--ck-text-tertiary)]\">\n Note: ClawKitchen is read-only here; it surfaces status and pointers, but does not run or attach to tmux.\n </p>\n </section>\n\n <section className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Human approval gate (recommended)</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n For workflows that publish, deploy, or send outbound messages, keep a <strong>human approval step</strong>.\n </p>\n <ul className=\"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]\">\n <li>Generate a proposed change/post as a draft.</li>\n <li>Send the draft to a bound messaging channel (e.g. Telegram) for approval.</li>\n <li>Only execute the final action after explicit approve/deny.</li>\n </ul>\n </section>\n\n <section className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Where to change settings</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n These are the common knobs for a swarm/orchestrator scaffold (read-only references):\n </p>\n <ul className=\"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]\">\n {state.settingsPaths.map((p) => (\n <li key={p} className=\"font-mono text-xs\">\n {p}\n </li>\n ))}\n </ul>\n </section>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|