@jiggai/kitchen 0.1.8 → 0.1.10-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -0
- package/.next/build-manifest.json +6 -6
- package/.next/prerender-manifest.json +3 -27
- package/.next/required-server-files.js +4 -4
- package/.next/required-server-files.json +4 -4
- package/.next/routes-manifest.json +30 -0
- package/.next/server/app/_global-error/page/build-manifest.json +4 -4
- 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 +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +4 -4
- package/.next/server/app/_not-found/page.js +10 -9
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +4 -4
- package/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/agents/[agentId]/page/build-manifest.json +4 -4
- package/.next/server/app/agents/[agentId]/page.js +7 -7
- 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/add/route.js +1 -1
- package/.next/server/app/api/agents/add/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/identity/route.js +1 -1
- package/.next/server/app/api/agents/identity/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/route.js +1 -1
- package/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/.next/server/app/api/gateway/restart/route.js +1 -1
- package/.next/server/app/api/gateway/restart/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/promote/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/route.js +1 -1
- package/.next/server/app/api/recipes/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
- package/.next/server/app/api/swarms/start/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/swarms/start/route/build-manifest.json +11 -0
- package/.next/server/app/api/swarms/start/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/swarms/start/route.js +6 -0
- package/.next/server/app/api/swarms/start/route.js.map +5 -0
- package/.next/server/app/api/swarms/start/route.js.nft.json +1 -0
- package/.next/server/app/api/swarms/start/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/swarms/status/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/swarms/status/route/build-manifest.json +11 -0
- package/.next/server/app/api/swarms/status/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/swarms/status/route.js +6 -0
- package/.next/server/app/api/swarms/status/route.js.map +5 -0
- package/.next/server/app/api/swarms/status/route.js.nft.json +1 -0
- package/.next/server/app/api/swarms/status/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/orchestrator/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/orchestrator/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/orchestrator/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/orchestrator/route.js +6 -0
- package/.next/server/app/api/teams/orchestrator/route.js.map +5 -0
- package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/orchestrator/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/remove-team/route.js +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/workflow-runs/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-runs/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-runs/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-runs/route.js +7 -0
- package/.next/server/app/api/teams/workflow-runs/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-runs/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflows/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflows/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflows/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflows/route.js +6 -0
- package/.next/server/app/api/teams/workflows/route.js.map +5 -0
- package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflows/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/tickets/move/route.js +1 -1
- package/.next/server/app/api/tickets/move/route.js.nft.json +1 -1
- package/.next/server/app/channels/page/build-manifest.json +4 -4
- package/.next/server/app/channels/page.js +7 -7
- 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 +5 -5
- package/.next/server/app/channels.segments/_full.segment.rsc +5 -5
- package/.next/server/app/channels.segments/_head.segment.rsc +1 -1
- package/.next/server/app/channels.segments/_index.segment.rsc +3 -3
- package/.next/server/app/channels.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/channels.segments/channels.segment.rsc +1 -1
- package/.next/server/app/cron-jobs/page/build-manifest.json +4 -4
- package/.next/server/app/cron-jobs/page.js +7 -7
- package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
- package/.next/server/app/cron-jobs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/cron-jobs.html +1 -1
- package/.next/server/app/cron-jobs.rsc +6 -6
- package/.next/server/app/cron-jobs.segments/_full.segment.rsc +6 -6
- package/.next/server/app/cron-jobs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/_index.segment.rsc +3 -3
- package/.next/server/app/cron-jobs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/cron-jobs.segments/cron-jobs/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/cron-jobs.segments/cron-jobs.segment.rsc +1 -1
- package/.next/server/app/goals/[id]/page/build-manifest.json +4 -4
- package/.next/server/app/goals/[id]/page.js +7 -7
- package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
- package/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/new/page/build-manifest.json +4 -4
- package/.next/server/app/goals/new/page.js +7 -7
- 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 +5 -5
- package/.next/server/app/goals/new.segments/_full.segment.rsc +5 -5
- package/.next/server/app/goals/new.segments/_head.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/_index.segment.rsc +3 -3
- package/.next/server/app/goals/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/goals/new.segments/goals/new.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/goals.segment.rsc +1 -1
- package/.next/server/app/goals/page/build-manifest.json +4 -4
- package/.next/server/app/goals/page.js +7 -7
- 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 +5 -5
- package/.next/server/app/goals.segments/_full.segment.rsc +5 -5
- package/.next/server/app/goals.segments/_head.segment.rsc +1 -1
- package/.next/server/app/goals.segments/_index.segment.rsc +3 -3
- package/.next/server/app/goals.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/goals.segments/goals.segment.rsc +1 -1
- package/.next/server/app/page/build-manifest.json +4 -4
- package/.next/server/app/page.js +7 -7
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/[id]/page/build-manifest.json +4 -4
- package/.next/server/app/recipes/[id]/page.js +8 -8
- package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
- package/.next/server/app/recipes/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/page/build-manifest.json +4 -4
- package/.next/server/app/recipes/page.js +8 -8
- package/.next/server/app/recipes/page.js.nft.json +1 -1
- package/.next/server/app/recipes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page/build-manifest.json +4 -4
- package/.next/server/app/settings/page.js +7 -7
- 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 +5 -5
- package/.next/server/app/settings.segments/_full.segment.rsc +5 -5
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +3 -3
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/teams/[teamId]/page/build-manifest.json +4 -4
- package/.next/server/app/teams/[teamId]/page.js +8 -8
- 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/tickets/[ticket]/page/build-manifest.json +4 -4
- package/.next/server/app/tickets/[ticket]/page.js +7 -7
- package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/tickets/[ticket]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tickets/page/build-manifest.json +4 -4
- package/.next/server/app/tickets/page.js +7 -7
- 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 +5 -0
- package/.next/server/chunks/[root-of-the-server]__065a27a4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__065a27a4._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__94d68aa3._.js → [root-of-the-server]__1989d64f._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__94d68aa3._.js.map → [root-of-the-server]__1989d64f._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__c4ffbb03._.js → [root-of-the-server]__21b72903._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__c4ffbb03._.js.map → [root-of-the-server]__21b72903._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0c01c5c7._.js → [root-of-the-server]__262d8a6e._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0c01c5c7._.js.map → [root-of-the-server]__262d8a6e._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__b11231a9._.js → [root-of-the-server]__2f2c799d._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__b11231a9._.js.map → [root-of-the-server]__2f2c799d._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__6f85770b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__6f85770b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__7cf49621._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__7cf49621._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__a27f8405._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__a27f8405._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__a5226713._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__a5226713._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__c7f92fce._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c7f92fce._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__d737ca42._.js → [root-of-the-server]__e8bfeaba._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__d737ca42._.js.map → [root-of-the-server]__e8bfeaba._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__4eda99a9._.js → [root-of-the-server]__ebaa0038._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__4eda99a9._.js.map → [root-of-the-server]__ebaa0038._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__b59b3cdd._.js → [root-of-the-server]__f5546a39._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__b59b3cdd._.js.map → [root-of-the-server]__f5546a39._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__e6184ba3._.js → [root-of-the-server]__fdda9176._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__e6184ba3._.js.map → [root-of-the-server]__fdda9176._.js.map} +1 -1
- package/.next/server/chunks/_next-internal_server_app_api_swarms_start_route_actions_b79e9029.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_swarms_start_route_actions_b79e9029.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_swarms_status_route_actions_54826df0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_swarms_status_route_actions_54826df0.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_route_actions_1949c463.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_route_actions_1949c463.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-runs_route_actions_8327ac7d.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-runs_route_actions_8327ac7d.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflows_route_actions_43dd6e07.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflows_route_actions_43dd6e07.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +14 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d4cb2ba._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fd02d84._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__4393e897._.js.map → [root-of-the-server]__0fd02d84._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__285ae6b7._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__46e08d44._.js.map → [root-of-the-server]__285ae6b7._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__2bef6884._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__15600e29._.js.map → [root-of-the-server]__2bef6884._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3efd25c4._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__2a6f1e3e._.js.map → [root-of-the-server]__3efd25c4._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__491e06fa._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__491e06fa._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__550d78f8._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__bc3b27b0._.js.map → [root-of-the-server]__550d78f8._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__e2e52c6e._.js → [root-of-the-server]__78cdd31e._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__8ecc89e4._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__507d2fc9._.js.map → [root-of-the-server]__8ecc89e4._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__247198dc._.js.map → [root-of-the-server]__92524828._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__a36a058d._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__8d24c9c3._.js.map → [root-of-the-server]__a36a058d._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__a8eca9e1._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__82ce3aee._.js.map → [root-of-the-server]__a8eca9e1._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__aa8e2649._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__f75a61bf._.js.map → [root-of-the-server]__aa8e2649._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b2617fbf._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__fd669584._.js.map → [root-of-the-server]__b2617fbf._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e5d416d5._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__3ad3e5b1._.js.map → [root-of-the-server]__e5d416d5._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__b9356576._.js → [root-of-the-server]__f62d412e._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__b9356576._.js.map → [root-of-the-server]__f62d412e._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__3575e6da._.js.map → [root-of-the-server]__fbe5ff69._.js.map} +1 -1
- package/.next/server/chunks/ssr/{_8c45edba._.js → _0bdae23a._.js} +3 -3
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_68c68167.js.map → _0bdae23a._.js.map} +1 -1
- package/.next/server/chunks/ssr/{_0808c2b9._.js → _347e2d56._.js} +3 -3
- package/.next/server/chunks/ssr/_347e2d56._.js.map +1 -0
- package/.next/server/chunks/ssr/{_68793c1f._.js → _49fb12c2._.js} +3 -3
- package/.next/server/chunks/ssr/_49fb12c2._.js.map +1 -0
- package/.next/server/chunks/ssr/{_3c8b2df6._.js → _536983a4._.js} +3 -3
- package/.next/server/chunks/ssr/_536983a4._.js.map +1 -0
- package/.next/server/chunks/ssr/{_cd23c5af._.js → _5b282394._.js} +3 -3
- package/.next/server/chunks/ssr/_5b282394._.js.map +1 -0
- package/.next/server/chunks/ssr/{_6e70b5a4._.js → _5cc24343._.js} +3 -3
- package/.next/server/chunks/ssr/_5cc24343._.js.map +1 -0
- package/.next/server/chunks/ssr/{_92140ca3._.js → _7eac37fb._.js} +3 -3
- package/.next/server/chunks/ssr/_7eac37fb._.js.map +1 -0
- package/.next/server/chunks/ssr/{_8c8207c1._.js → _8062e992._.js} +3 -3
- package/.next/server/chunks/ssr/_8062e992._.js.map +1 -0
- package/.next/server/chunks/ssr/{_25e6aab8._.js → _99994c05._.js} +3 -3
- package/.next/server/chunks/ssr/_99994c05._.js.map +1 -0
- package/.next/server/chunks/ssr/{_b5e9afcc._.js → _aafc99aa._.js} +3 -3
- package/.next/server/chunks/ssr/_aafc99aa._.js.map +1 -0
- package/.next/server/chunks/ssr/{_39e6e769._.js → _b7f3caf7._.js} +3 -3
- package/.next/server/chunks/ssr/_b7f3caf7._.js.map +1 -0
- package/.next/server/chunks/ssr/_c2041f88._.js +4 -0
- package/.next/server/chunks/ssr/_c2041f88._.js.map +1 -0
- package/.next/server/chunks/ssr/{_3158c108._.js → _f4d8af3b._.js} +3 -3
- package/.next/server/chunks/ssr/_f4d8af3b._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_12287b3d._.js → node_modules_next_dist_8a37abed._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_next_dist_12287b3d._.js.map → node_modules_next_dist_8a37abed._.js.map} +1 -1
- package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js → node_modules_next_dist_client_components_2fffaa3a._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js.map → node_modules_next_dist_client_components_2fffaa3a._.js.map} +1 -1
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_68c68167.js → node_modules_next_dist_esm_build_templates_app-page_b5ef32b4.js} +3 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_b5ef32b4.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js +1 -1
- package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_global-error_tsx_aa661ba4._.js +3 -0
- package/.next/server/chunks/ssr/src_app_global-error_tsx_aa661ba4._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_not-found_tsx_3f23d179._.js +3 -0
- package/.next/server/chunks/ssr/src_app_not-found_tsx_3f23d179._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_tsx_2900b91d._.js +2 -2
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_tsx_2900b91d._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +4 -4
- 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/{40f7fde35327d214.js → 423ca3a7f09c1470.js} +1 -1
- package/.next/static/chunks/{82abf2d65f5428ae.js → 68a088aa49e6124a.js} +3 -3
- package/.next/static/chunks/96b0d0ef92ef0eca.css +3 -0
- package/.next/static/chunks/a92e9d0c91b71b55.js +1 -0
- package/.next/static/chunks/bd3fcd39d918f9b4.js +10 -0
- package/.next/static/chunks/c84580993f22c17a.js +1 -0
- package/.next/static/chunks/f3e3461eda4a8d62.js +1 -0
- package/.next/static/chunks/{turbopack-ae1340e658f67df8.js → turbopack-6c658f991a22d28a.js} +1 -1
- package/package.json +2 -2
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/chef.jpg +0 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/src/app/HomeClient.tsx +1 -1
- package/src/app/api/cron/jobs/route.ts +12 -4
- package/src/app/api/swarms/start/route.ts +118 -0
- package/src/app/api/swarms/status/route.ts +50 -0
- package/src/app/api/teams/orchestrator/route.ts +218 -0
- package/src/app/api/teams/workflow-runs/route.ts +431 -0
- package/src/app/api/teams/workflows/route.ts +88 -0
- package/src/app/cron-jobs/page.tsx +1 -1
- package/src/app/global-error.tsx +50 -0
- package/src/app/not-found.tsx +8 -0
- package/src/app/recipes/page.tsx +1 -1
- package/src/app/settings/page.tsx +1 -1
- package/src/app/teams/[teamId]/OrchestratorPanel.tsx +228 -0
- package/src/app/teams/[teamId]/page.tsx +25 -29
- package/src/app/teams/[teamId]/team-editor.tsx +1656 -8
- package/src/app/tickets/[ticket]/page.tsx +3 -0
- package/src/app/tickets/page.tsx +3 -0
- package/src/components/AppShell.tsx +245 -31
- package/src/lib/workflows/README.md +11 -0
- package/src/lib/workflows/runs-storage.ts +71 -0
- package/src/lib/workflows/runs-types.ts +32 -0
- package/src/lib/workflows/storage.ts +82 -0
- package/src/lib/workflows/types.ts +50 -0
- package/src/lib/workflows/validate.ts +70 -0
- package/.next/server/app/tickets.html +0 -1
- package/.next/server/app/tickets.meta +0 -15
- package/.next/server/app/tickets.rsc +0 -19
- package/.next/server/app/tickets.segments/_full.segment.rsc +0 -19
- package/.next/server/app/tickets.segments/_head.segment.rsc +0 -6
- package/.next/server/app/tickets.segments/_index.segment.rsc +0 -6
- package/.next/server/app/tickets.segments/_tree.segment.rsc +0 -4
- package/.next/server/app/tickets.segments/tickets/__PAGE__.segment.rsc +0 -8
- package/.next/server/app/tickets.segments/tickets.segment.rsc +0 -4
- package/.next/server/chunks/ssr/[root-of-the-server]__15600e29._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__247198dc._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__2a6f1e3e._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__346f79e5._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__346f79e5._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3575e6da._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__3ad3e5b1._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__3bc7ad0a._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__4393e897._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__46e08d44._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__507d2fc9._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__82ce3aee._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__8d24c9c3._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__bc3b27b0._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__f75a61bf._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__fd669584._.js +0 -3
- package/.next/server/chunks/ssr/_0808c2b9._.js.map +0 -1
- package/.next/server/chunks/ssr/_25e6aab8._.js.map +0 -1
- package/.next/server/chunks/ssr/_3158c108._.js.map +0 -1
- package/.next/server/chunks/ssr/_39e6e769._.js.map +0 -1
- package/.next/server/chunks/ssr/_3c8b2df6._.js.map +0 -1
- package/.next/server/chunks/ssr/_68793c1f._.js.map +0 -1
- package/.next/server/chunks/ssr/_6e70b5a4._.js.map +0 -1
- package/.next/server/chunks/ssr/_8c45edba._.js.map +0 -1
- package/.next/server/chunks/ssr/_8c8207c1._.js.map +0 -1
- package/.next/server/chunks/ssr/_92140ca3._.js.map +0 -1
- package/.next/server/chunks/ssr/_b5e9afcc._.js.map +0 -1
- package/.next/server/chunks/ssr/_cd23c5af._.js.map +0 -1
- package/.next/server/chunks/ssr/_d27483a1._.js +0 -4
- package/.next/server/chunks/ssr/_d27483a1._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js.map +0 -1
- package/.next/static/chunks/8484c54dc9a377e8.js +0 -10
- package/.next/static/chunks/8662fcc3cdff66f3.js +0 -1
- package/.next/static/chunks/a4e69b85b74277a7.css +0 -3
- package/.next/static/chunks/a9ed074e89b16a5e.js +0 -1
- /package/.next/server/chunks/ssr/{[root-of-the-server]__3bc7ad0a._.js.map → [root-of-the-server]__0d4cb2ba._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__e2e52c6e._.js.map → [root-of-the-server]__78cdd31e._.js.map} +0 -0
- /package/.next/static/{2hgbnJUmLMe9COlc5rJd3 → LkBl31uBDAuYl-0TzH69D}/_buildManifest.js +0 -0
- /package/.next/static/{2hgbnJUmLMe9COlc5rJd3 → LkBl31uBDAuYl-0TzH69D}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{2hgbnJUmLMe9COlc5rJd3 → LkBl31uBDAuYl-0TzH69D}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { deleteWorkflow, listWorkflows, readWorkflow, writeWorkflow } from "@/lib/workflows/storage";
|
|
3
|
+
import type { WorkflowFileV1 } from "@/lib/workflows/types";
|
|
4
|
+
|
|
5
|
+
function errMessage(err: unknown) {
|
|
6
|
+
return err instanceof Error ? err.message : String(err);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function isWorkflowFileV1(v: unknown): v is WorkflowFileV1 {
|
|
10
|
+
if (!v || typeof v !== "object") return false;
|
|
11
|
+
const o = v as Record<string, unknown>;
|
|
12
|
+
if (typeof o.id !== "string" || !o.id.trim()) return false;
|
|
13
|
+
if (typeof o.name !== "string" || !o.name.trim()) return false;
|
|
14
|
+
if (!Array.isArray(o.nodes)) return false;
|
|
15
|
+
if (!Array.isArray(o.edges)) return false;
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function GET(req: Request) {
|
|
20
|
+
const { searchParams } = new URL(req.url);
|
|
21
|
+
const teamId = String(searchParams.get("teamId") ?? "").trim();
|
|
22
|
+
const id = String(searchParams.get("id") ?? "").trim();
|
|
23
|
+
|
|
24
|
+
if (!teamId) return NextResponse.json({ ok: false, error: "teamId is required" }, { status: 400 });
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
if (id) {
|
|
28
|
+
const r = await readWorkflow(teamId, id);
|
|
29
|
+
// avoid duplicate `ok` keys (TS error)
|
|
30
|
+
const { ok, ...rest } = r;
|
|
31
|
+
void ok;
|
|
32
|
+
return NextResponse.json({ ok: true, ...rest });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const r = await listWorkflows(teamId);
|
|
36
|
+
const { ok, ...rest } = r;
|
|
37
|
+
void ok;
|
|
38
|
+
return NextResponse.json({ ok: true, ...rest });
|
|
39
|
+
} catch (err: unknown) {
|
|
40
|
+
return NextResponse.json({ ok: false, error: errMessage(err) }, { status: 500 });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function POST(req: Request) {
|
|
45
|
+
let body: unknown;
|
|
46
|
+
try {
|
|
47
|
+
body = await req.json();
|
|
48
|
+
} catch {
|
|
49
|
+
return NextResponse.json({ ok: false, error: "Invalid JSON" }, { status: 400 });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const o = body && typeof body === "object" ? (body as Record<string, unknown>) : {};
|
|
53
|
+
|
|
54
|
+
const teamId = String(o.teamId ?? "").trim();
|
|
55
|
+
const workflowRaw = o.workflow;
|
|
56
|
+
|
|
57
|
+
if (!teamId) return NextResponse.json({ ok: false, error: "teamId is required" }, { status: 400 });
|
|
58
|
+
if (!isWorkflowFileV1(workflowRaw)) {
|
|
59
|
+
return NextResponse.json({ ok: false, error: "workflow is required (must include id, name, nodes[], edges[])" }, { status: 400 });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
const r = await writeWorkflow(teamId, workflowRaw);
|
|
64
|
+
const { ok, ...rest } = r;
|
|
65
|
+
void ok;
|
|
66
|
+
return NextResponse.json({ ok: true, ...rest });
|
|
67
|
+
} catch (err: unknown) {
|
|
68
|
+
return NextResponse.json({ ok: false, error: errMessage(err) }, { status: 500 });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export async function DELETE(req: Request) {
|
|
73
|
+
const { searchParams } = new URL(req.url);
|
|
74
|
+
const teamId = String(searchParams.get("teamId") ?? "").trim();
|
|
75
|
+
const id = String(searchParams.get("id") ?? "").trim();
|
|
76
|
+
|
|
77
|
+
if (!teamId) return NextResponse.json({ ok: false, error: "teamId is required" }, { status: 400 });
|
|
78
|
+
if (!id) return NextResponse.json({ ok: false, error: "id is required" }, { status: 400 });
|
|
79
|
+
|
|
80
|
+
try {
|
|
81
|
+
const r = await deleteWorkflow(teamId, id);
|
|
82
|
+
const { ok, ...rest } = r;
|
|
83
|
+
void ok;
|
|
84
|
+
return NextResponse.json({ ok: true, ...rest });
|
|
85
|
+
} catch (err: unknown) {
|
|
86
|
+
return NextResponse.json({ ok: false, error: errMessage(err) }, { status: 500 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -3,7 +3,7 @@ import Link from "next/link";
|
|
|
3
3
|
|
|
4
4
|
export default function CronJobsPage() {
|
|
5
5
|
return (
|
|
6
|
-
<div className="ck-glass
|
|
6
|
+
<div className="ck-glass w-full p-6 sm:p-8">
|
|
7
7
|
<div className="flex items-baseline justify-between gap-4">
|
|
8
8
|
<h1 className="text-2xl font-semibold tracking-tight">Cron Jobs (recipe-installed)</h1>
|
|
9
9
|
<div className="flex gap-3">
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
|
|
5
|
+
// NOTE: Next.js renders this when the root layout (or anything above the segment
|
|
6
|
+
// error boundary) throws. Keep it dependency-light: no AppShell / no router hooks.
|
|
7
|
+
export default function GlobalError({
|
|
8
|
+
error,
|
|
9
|
+
reset,
|
|
10
|
+
}: {
|
|
11
|
+
error: Error & { digest?: string };
|
|
12
|
+
reset: () => void;
|
|
13
|
+
}) {
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
console.error("Global error:", error);
|
|
16
|
+
}, [error]);
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<html lang="en">
|
|
20
|
+
<body className="min-h-screen bg-[color:var(--ck-bg)] text-[color:var(--ck-text-primary)]">
|
|
21
|
+
<div className="mx-auto max-w-2xl px-6 py-16">
|
|
22
|
+
<h1 className="text-xl font-semibold">Something went wrong</h1>
|
|
23
|
+
<p className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">
|
|
24
|
+
An unexpected error occurred.
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
<pre className="mt-6 overflow-auto rounded-md border border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-glass)] p-4 text-xs text-[color:var(--ck-text-secondary)]">
|
|
28
|
+
{String(error?.stack || error)}
|
|
29
|
+
</pre>
|
|
30
|
+
|
|
31
|
+
{error?.digest ? (
|
|
32
|
+
<p className="mt-3 text-xs text-[color:var(--ck-text-secondary)]">
|
|
33
|
+
Digest: {error.digest}
|
|
34
|
+
</p>
|
|
35
|
+
) : null}
|
|
36
|
+
|
|
37
|
+
<div className="mt-6 flex gap-3">
|
|
38
|
+
<button
|
|
39
|
+
type="button"
|
|
40
|
+
onClick={() => reset()}
|
|
41
|
+
className="rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-4 py-2 text-sm font-medium text-white"
|
|
42
|
+
>
|
|
43
|
+
Try again
|
|
44
|
+
</button>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</body>
|
|
48
|
+
</html>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export default function NotFound() {
|
|
2
|
+
return (
|
|
3
|
+
<div className="mx-auto max-w-2xl px-6 py-12">
|
|
4
|
+
<h1 className="text-xl font-semibold">Page not found</h1>
|
|
5
|
+
<p className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">The page you requested does not exist.</p>
|
|
6
|
+
</div>
|
|
7
|
+
);
|
|
8
|
+
}
|
package/src/app/recipes/page.tsx
CHANGED
|
@@ -57,7 +57,7 @@ export default async function RecipesPage() {
|
|
|
57
57
|
const customAgentRecipes = workspace.filter((r) => r.kind === "agent");
|
|
58
58
|
|
|
59
59
|
return (
|
|
60
|
-
<div className="ck-glass
|
|
60
|
+
<div className="ck-glass w-full p-6 sm:p-8">
|
|
61
61
|
<div className="flex items-baseline justify-between gap-4">
|
|
62
62
|
<h1 className="text-2xl font-semibold tracking-tight">Recipes</h1>
|
|
63
63
|
<Link
|
|
@@ -2,7 +2,7 @@ import SettingsClient from "./settings-client";
|
|
|
2
2
|
|
|
3
3
|
export default function SettingsPage() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="ck-glass
|
|
5
|
+
<div className="ck-glass w-full p-6 sm:p-8">
|
|
6
6
|
<h1 className="text-2xl font-semibold tracking-tight">Settings</h1>
|
|
7
7
|
<p className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">
|
|
8
8
|
Configuration that affects scaffold behavior and automation.
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useState } from "react";
|
|
4
|
+
|
|
5
|
+
type OrchestratorState =
|
|
6
|
+
| {
|
|
7
|
+
ok: true;
|
|
8
|
+
teamId: string;
|
|
9
|
+
present: false;
|
|
10
|
+
reason?: string;
|
|
11
|
+
}
|
|
12
|
+
| {
|
|
13
|
+
ok: true;
|
|
14
|
+
teamId: string;
|
|
15
|
+
present: true;
|
|
16
|
+
agent: { id: string; identityName?: string; workspace: string };
|
|
17
|
+
tmuxSessions: Array<{ name: string; attached: boolean; windows?: number; created?: string }>;
|
|
18
|
+
worktrees: Array<{ path: string; branch?: string; sha?: string }>;
|
|
19
|
+
activeTasksSummary: null | { path: string; taskCount?: number; rawType?: string };
|
|
20
|
+
settingsPaths: string[];
|
|
21
|
+
}
|
|
22
|
+
| {
|
|
23
|
+
ok: false;
|
|
24
|
+
error: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export function OrchestratorPanel({ teamId }: { teamId: string }) {
|
|
28
|
+
const [loading, setLoading] = useState(true);
|
|
29
|
+
const [state, setState] = useState<OrchestratorState | null>(null);
|
|
30
|
+
const [lastLoadedAt, setLastLoadedAt] = useState<string | null>(null);
|
|
31
|
+
|
|
32
|
+
const load = useCallback(async () => {
|
|
33
|
+
setLoading(true);
|
|
34
|
+
try {
|
|
35
|
+
const res = await fetch(`/api/teams/orchestrator?teamId=${encodeURIComponent(teamId)}`, { cache: "no-store" });
|
|
36
|
+
const json = (await res.json()) as OrchestratorState;
|
|
37
|
+
setState(json);
|
|
38
|
+
setLastLoadedAt(new Date().toISOString());
|
|
39
|
+
} catch (e: unknown) {
|
|
40
|
+
setState({ ok: false, error: e instanceof Error ? e.message : String(e) });
|
|
41
|
+
setLastLoadedAt(new Date().toISOString());
|
|
42
|
+
} finally {
|
|
43
|
+
setLoading(false);
|
|
44
|
+
}
|
|
45
|
+
}, [teamId]);
|
|
46
|
+
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
void load();
|
|
49
|
+
}, [load]);
|
|
50
|
+
|
|
51
|
+
if (loading) {
|
|
52
|
+
return <div className="mt-6 ck-glass-strong p-4">Loading orchestrator state…</div>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (!state) {
|
|
56
|
+
return <div className="mt-6 ck-glass-strong p-4">No orchestrator state available.</div>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!state.ok) {
|
|
60
|
+
return (
|
|
61
|
+
<div className="mt-6 ck-glass-strong p-4">
|
|
62
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">Orchestrator</div>
|
|
63
|
+
<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">
|
|
64
|
+
{state.error}
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (!state.present) {
|
|
71
|
+
return (
|
|
72
|
+
<div className="mt-6 ck-glass-strong p-4">
|
|
73
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">Orchestrator</div>
|
|
74
|
+
<p className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">
|
|
75
|
+
No swarm/orchestrator detected for this team.
|
|
76
|
+
</p>
|
|
77
|
+
<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)]">
|
|
78
|
+
<div className="text-xs font-medium text-[color:var(--ck-text-tertiary)]">Detection</div>
|
|
79
|
+
<div className="mt-1 font-mono text-xs">{state.reason || "(no reason provided)"}</div>
|
|
80
|
+
</div>
|
|
81
|
+
<p className="mt-3 text-sm text-[color:var(--ck-text-secondary)]">
|
|
82
|
+
Once an orchestrator agent is installed (e.g. <code><teamId>-swarm-orchestrator</code>), this tab will show:
|
|
83
|
+
tmux sessions, git worktrees/branches, and active task state.
|
|
84
|
+
</p>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<div className="mt-6 ck-glass-strong p-4">
|
|
91
|
+
<div className="flex flex-wrap items-start justify-between gap-3">
|
|
92
|
+
<div>
|
|
93
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">Orchestrator</div>
|
|
94
|
+
<div className="mt-1 text-xs text-[color:var(--ck-text-secondary)]">
|
|
95
|
+
Agent: <span className="font-mono">{state.agent.id}</span>
|
|
96
|
+
{state.agent.identityName ? ` (${state.agent.identityName})` : ""}
|
|
97
|
+
</div>
|
|
98
|
+
<div className="mt-1 text-xs text-[color:var(--ck-text-secondary)]">
|
|
99
|
+
Workspace: <span className="font-mono">{state.agent.workspace}</span>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<div className="flex items-center gap-3">
|
|
104
|
+
<div className="text-xs text-[color:var(--ck-text-tertiary)]">
|
|
105
|
+
{lastLoadedAt ? (
|
|
106
|
+
<span>
|
|
107
|
+
Last updated: <span className="font-mono">{lastLoadedAt}</span>
|
|
108
|
+
</span>
|
|
109
|
+
) : null}
|
|
110
|
+
</div>
|
|
111
|
+
<button
|
|
112
|
+
type="button"
|
|
113
|
+
onClick={() => void load()}
|
|
114
|
+
disabled={loading}
|
|
115
|
+
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"
|
|
116
|
+
>
|
|
117
|
+
{loading ? "Refreshing…" : "Refresh"}
|
|
118
|
+
</button>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
<div className="mt-5 grid grid-cols-1 gap-4 lg:grid-cols-2">
|
|
123
|
+
<section className="rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3">
|
|
124
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">tmux sessions</div>
|
|
125
|
+
{state.tmuxSessions.length ? (
|
|
126
|
+
<ul className="mt-2 space-y-2">
|
|
127
|
+
{state.tmuxSessions.map((s) => (
|
|
128
|
+
<li key={s.name} className="text-sm text-[color:var(--ck-text-secondary)]">
|
|
129
|
+
<span className="font-mono">{s.name}</span>
|
|
130
|
+
<span className="ml-2 text-xs text-[color:var(--ck-text-tertiary)]">
|
|
131
|
+
attached={String(s.attached)}
|
|
132
|
+
{typeof s.windows === "number" ? ` windows=${s.windows}` : ""}
|
|
133
|
+
</span>
|
|
134
|
+
</li>
|
|
135
|
+
))}
|
|
136
|
+
</ul>
|
|
137
|
+
) : (
|
|
138
|
+
<div className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">No sessions detected (or tmux not running).</div>
|
|
139
|
+
)}
|
|
140
|
+
</section>
|
|
141
|
+
|
|
142
|
+
<section className="rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3">
|
|
143
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">git worktrees</div>
|
|
144
|
+
{state.worktrees.length ? (
|
|
145
|
+
<ul className="mt-2 space-y-2">
|
|
146
|
+
{state.worktrees.map((w) => (
|
|
147
|
+
<li key={w.path} className="text-sm text-[color:var(--ck-text-secondary)]">
|
|
148
|
+
<div className="font-mono text-xs">{w.path}</div>
|
|
149
|
+
<div className="text-xs text-[color:var(--ck-text-tertiary)]">
|
|
150
|
+
{w.branch ? w.branch : "(no branch)"}
|
|
151
|
+
{w.sha ? ` @ ${w.sha.slice(0, 7)}` : ""}
|
|
152
|
+
</div>
|
|
153
|
+
</li>
|
|
154
|
+
))}
|
|
155
|
+
</ul>
|
|
156
|
+
) : (
|
|
157
|
+
<div className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">No worktrees detected.</div>
|
|
158
|
+
)}
|
|
159
|
+
</section>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
<section className="mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3">
|
|
163
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">Active tasks</div>
|
|
164
|
+
{state.activeTasksSummary ? (
|
|
165
|
+
<div className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">
|
|
166
|
+
<div className="font-mono text-xs">{state.activeTasksSummary.path}</div>
|
|
167
|
+
<div className="mt-1 text-xs text-[color:var(--ck-text-tertiary)]">
|
|
168
|
+
{typeof state.activeTasksSummary.taskCount === "number" ? `tasks=${state.activeTasksSummary.taskCount}` : "tasks=?"}
|
|
169
|
+
{state.activeTasksSummary.rawType ? ` type=${state.activeTasksSummary.rawType}` : ""}
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
) : (
|
|
173
|
+
<div className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">No active-tasks.json found.</div>
|
|
174
|
+
)}
|
|
175
|
+
</section>
|
|
176
|
+
|
|
177
|
+
<section className="mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3">
|
|
178
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">CLI quick actions</div>
|
|
179
|
+
<p className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">
|
|
180
|
+
The orchestrator is designed to be driven from the CLI (and usually tmux). Common commands:
|
|
181
|
+
</p>
|
|
182
|
+
<ul className="mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]">
|
|
183
|
+
<li>
|
|
184
|
+
<span className="font-mono text-xs">tmux ls</span>
|
|
185
|
+
<span className="ml-2 text-xs text-[color:var(--ck-text-tertiary)]">(list sessions)</span>
|
|
186
|
+
</li>
|
|
187
|
+
<li>
|
|
188
|
+
<span className="font-mono text-xs">tmux attach -t <session></span>
|
|
189
|
+
<span className="ml-2 text-xs text-[color:var(--ck-text-tertiary)]">(jump into a running swarm)</span>
|
|
190
|
+
</li>
|
|
191
|
+
<li>
|
|
192
|
+
<span className="font-mono text-xs">git -C {state.agent.workspace} worktree list</span>
|
|
193
|
+
<span className="ml-2 text-xs text-[color:var(--ck-text-tertiary)]">(inspect worktrees)</span>
|
|
194
|
+
</li>
|
|
195
|
+
</ul>
|
|
196
|
+
<p className="mt-3 text-xs text-[color:var(--ck-text-tertiary)]">
|
|
197
|
+
Note: ClawKitchen is read-only here; it surfaces status and pointers, but does not run or attach to tmux.
|
|
198
|
+
</p>
|
|
199
|
+
</section>
|
|
200
|
+
|
|
201
|
+
<section className="mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3">
|
|
202
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">Human approval gate (recommended)</div>
|
|
203
|
+
<p className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">
|
|
204
|
+
For workflows that publish, deploy, or send outbound messages, keep a <strong>human approval step</strong>.
|
|
205
|
+
</p>
|
|
206
|
+
<ul className="mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]">
|
|
207
|
+
<li>Generate a proposed change/post as a draft.</li>
|
|
208
|
+
<li>Send the draft to a bound messaging channel (e.g. Telegram) for approval.</li>
|
|
209
|
+
<li>Only execute the final action after explicit approve/deny.</li>
|
|
210
|
+
</ul>
|
|
211
|
+
</section>
|
|
212
|
+
|
|
213
|
+
<section className="mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3">
|
|
214
|
+
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">Where to change settings</div>
|
|
215
|
+
<p className="mt-2 text-sm text-[color:var(--ck-text-secondary)]">
|
|
216
|
+
These are the common knobs for a swarm/orchestrator scaffold (read-only references):
|
|
217
|
+
</p>
|
|
218
|
+
<ul className="mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]">
|
|
219
|
+
{state.settingsPaths.map((p) => (
|
|
220
|
+
<li key={p} className="font-mono text-xs">
|
|
221
|
+
{p}
|
|
222
|
+
</li>
|
|
223
|
+
))}
|
|
224
|
+
</ul>
|
|
225
|
+
</section>
|
|
226
|
+
</div>
|
|
227
|
+
);
|
|
228
|
+
}
|
|
@@ -25,47 +25,43 @@ async function getTeamDisplayName(teamId: string) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
export default async function TeamPage({
|
|
28
|
+
export default async function TeamPage({
|
|
29
|
+
params,
|
|
30
|
+
searchParams,
|
|
31
|
+
}: {
|
|
32
|
+
params: Promise<{ teamId: string }>;
|
|
33
|
+
searchParams?: Promise<Record<string, string | string[] | undefined>>;
|
|
34
|
+
}) {
|
|
29
35
|
// Team pages depend on live OpenClaw state; never serve cached HTML.
|
|
30
36
|
noStore();
|
|
31
37
|
|
|
32
38
|
const { teamId } = await params;
|
|
39
|
+
const sp = (await searchParams) ?? {};
|
|
40
|
+
const tabRaw = sp.tab;
|
|
41
|
+
const tab = Array.isArray(tabRaw) ? tabRaw[0] : tabRaw;
|
|
33
42
|
const name = await getTeamDisplayName(teamId);
|
|
34
43
|
|
|
35
44
|
return (
|
|
36
|
-
<
|
|
37
|
-
<div className="
|
|
38
|
-
<div
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
>
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
<div className="flex flex-col gap-4 p-6">
|
|
46
|
+
<div className="flex flex-wrap items-start justify-between gap-4">
|
|
47
|
+
<div>
|
|
48
|
+
<div className="text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]">
|
|
49
|
+
{name || teamId}
|
|
50
|
+
</div>
|
|
51
|
+
<div className="text-xs text-[color:var(--ck-text-tertiary)]">{teamId}</div>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div className="flex items-center gap-3">
|
|
45
55
|
<Link
|
|
46
|
-
href=
|
|
47
|
-
className="text-sm font-medium text-[color:var(--ck-text-secondary)]
|
|
56
|
+
href={`/goals?team=${encodeURIComponent(teamId)}`}
|
|
57
|
+
className="text-sm font-medium text-[color:var(--ck-text-secondary)] hover:underline"
|
|
48
58
|
>
|
|
49
|
-
|
|
59
|
+
View goals →
|
|
50
60
|
</Link>
|
|
51
61
|
</div>
|
|
52
|
-
|
|
53
|
-
<div className="text-right">
|
|
54
|
-
<div className="text-sm font-medium text-[color:var(--ck-text-primary)]">{name || teamId}</div>
|
|
55
|
-
<div className="text-xs text-[color:var(--ck-text-tertiary)]">{teamId}</div>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
|
|
59
|
-
<div className="mx-auto mb-4 flex max-w-6xl items-center justify-end">
|
|
60
|
-
<Link
|
|
61
|
-
href={`/goals?team=${encodeURIComponent(teamId)}`}
|
|
62
|
-
className="text-sm font-medium text-[color:var(--ck-text-secondary)] hover:underline"
|
|
63
|
-
>
|
|
64
|
-
View goals for this team →
|
|
65
|
-
</Link>
|
|
66
62
|
</div>
|
|
67
63
|
|
|
68
|
-
<TeamEditor teamId={teamId} />
|
|
69
|
-
</
|
|
64
|
+
<TeamEditor teamId={teamId} initialTab={typeof tab === "string" ? tab : undefined} />
|
|
65
|
+
</div>
|
|
70
66
|
);
|
|
71
67
|
}
|