@jiggai/kitchen 0.1.3 → 0.1.7
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/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +0 -24
- package/.next/server/app/_global-error/page.js +1 -1
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- 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 +1 -1
- package/.next/server/app/agents/[agentId]/page.js +1 -1
- package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/add/route.js +1 -1
- package/.next/server/app/api/agents/add/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/file/route.js +1 -1
- package/.next/server/app/api/agents/file/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/files/route.js +1 -1
- package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/identity/route.js +1 -1
- package/.next/server/app/api/agents/identity/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/route.js +1 -1
- package/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/skills/install/route.js +1 -1
- package/.next/server/app/api/agents/skills/install/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/skills/route.js +1 -1
- package/.next/server/app/api/agents/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/update/route.js +1 -1
- package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
- package/.next/server/app/api/channels/bindings/route.js +1 -1
- package/.next/server/app/api/channels/bindings/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/delete/route.js +1 -1
- package/.next/server/app/api/cron/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/job/route.js +1 -1
- package/.next/server/app/api/cron/job/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/jobs/route.js +1 -1
- package/.next/server/app/api/cron/jobs/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/recipe-installed/route.js +1 -1
- package/.next/server/app/api/cron/recipe-installed/route.js.nft.json +1 -1
- package/.next/server/app/api/gateway/restart/route.js +1 -1
- package/.next/server/app/api/gateway/restart/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/promote/route.js +1 -1
- package/.next/server/app/api/goals/[id]/promote/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/route.js +1 -1
- package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/route.js +1 -1
- package/.next/server/app/api/goals/route.js.nft.json +1 -1
- package/.next/server/app/api/ids/check/route.js +1 -1
- package/.next/server/app/api/ids/check/route.js.nft.json +1 -1
- package/.next/server/app/api/marketplace/recipes/[slug]/route.js +1 -1
- package/.next/server/app/api/marketplace/recipes/[slug]/route.js.nft.json +1 -1
- package/.next/server/app/api/marketplace/recipes/route.js +1 -1
- package/.next/server/app/api/marketplace/recipes/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/[id]/route.js +1 -1
- package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/clone/route.js +1 -1
- package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/delete/route.js +1 -1
- package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/route.js +1 -1
- package/.next/server/app/api/recipes/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/team-agents/route.js +1 -1
- package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/scaffold/route.js +2 -2
- package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/cron-installation/route.js +1 -1
- package/.next/server/app/api/settings/cron-installation/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/available/route.js +1 -1
- package/.next/server/app/api/skills/available/route.js.nft.json +1 -1
- package/.next/server/app/api/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/meta/route.js +1 -1
- package/.next/server/app/api/teams/meta/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/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.js +1 -1
- package/.next/server/app/channels/page.js.nft.json +1 -1
- package/.next/server/app/channels.html +2 -2
- package/.next/server/app/channels.rsc +1 -1
- package/.next/server/app/channels.segments/_full.segment.rsc +1 -1
- package/.next/server/app/channels.segments/_head.segment.rsc +1 -1
- package/.next/server/app/channels.segments/_index.segment.rsc +1 -1
- package/.next/server/app/channels.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/channels.segments/channels.segment.rsc +1 -1
- package/.next/server/app/cron-jobs/page.js +1 -1
- package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
- package/.next/server/app/cron-jobs.html +1 -1
- package/.next/server/app/cron-jobs.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/cron-jobs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/cron-jobs.segments/cron-jobs.segment.rsc +1 -1
- package/.next/server/app/goals/[id]/page.js +1 -1
- package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
- package/.next/server/app/goals/new/page.js +1 -1
- package/.next/server/app/goals/new/page.js.nft.json +1 -1
- package/.next/server/app/goals/new.html +2 -2
- package/.next/server/app/goals/new.rsc +1 -1
- package/.next/server/app/goals/new.segments/_full.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/_head.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/_index.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +1 -1
- 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.js +1 -1
- package/.next/server/app/goals/page.js.nft.json +1 -1
- package/.next/server/app/goals.html +1 -1
- package/.next/server/app/goals.rsc +1 -1
- package/.next/server/app/goals.segments/_full.segment.rsc +1 -1
- package/.next/server/app/goals.segments/_head.segment.rsc +1 -1
- package/.next/server/app/goals.segments/_index.segment.rsc +1 -1
- package/.next/server/app/goals.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/goals.segments/goals.segment.rsc +1 -1
- package/.next/server/app/page.js +3 -3
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/recipes/[id]/page.js +4 -3
- package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
- package/.next/server/app/recipes/page.js +4 -3
- 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.js +1 -1
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +1 -1
- package/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/teams/[teamId]/page.js +3 -3
- package/.next/server/app/teams/[teamId]/page.js.nft.json +1 -1
- package/.next/server/app/tickets/[ticket]/page.js +2 -2
- package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/tickets/page.js +2 -2
- package/.next/server/app/tickets/page.js.nft.json +1 -1
- package/.next/server/app/tickets.html +1 -1
- package/.next/server/app/tickets.rsc +2 -2
- package/.next/server/app/tickets.segments/_full.segment.rsc +2 -2
- package/.next/server/app/tickets.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tickets.segments/_index.segment.rsc +1 -1
- package/.next/server/app/tickets.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/tickets.segments/tickets/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tickets.segments/tickets.segment.rsc +1 -1
- package/.next/server/chunks/[root-of-the-server]__055885ce._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__055885ce._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0c01c5c7._.js +10 -0
- package/.next/server/chunks/[root-of-the-server]__0c01c5c7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1398a33a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1398a33a._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__159c002b._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__159c002b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__20c60fb7._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__20c60fb7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__2588560d._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__2588560d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__27293e91._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__27293e91._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__29c85a51._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__29c85a51._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__29fa8108._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__29fa8108._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__2bd44067._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__2bd44067._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__401ab759._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__401ab759._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__422c7160._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__422c7160._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__4670294e._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__4670294e._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__4898071c._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__4898071c._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__4eda99a9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__4eda99a9._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__54478298._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__54478298._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__6dbdb384._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__6dbdb384._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__dc6c67a5._.js → [root-of-the-server]__74b80ca4._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__94d68aa3._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__94d68aa3._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__9ecbb339._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__9ecbb339._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__a27f8405._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__a27f8405._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__a6ac3ddf._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__a6ac3ddf._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__b11231a9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__b11231a9._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__b59b3cdd._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__b59b3cdd._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__94ebcd84._.js → [root-of-the-server]__b5c2b370._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__b955e35a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__b955e35a._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__920d7db4._.js → [root-of-the-server]__be5f57b2._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__c4ff0427._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c4ff0427._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__c4ffbb03._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c4ffbb03._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__d737ca42._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__d737ca42._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__df7df3ac._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__df7df3ac._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__dfca6557._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__dfca6557._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e6184ba3._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__e6184ba3._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__ed0323e9._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__ed0323e9._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__f585823b._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__f585823b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__ff940674._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__ff940674._.js.map +1 -0
- package/.next/server/chunks/src_lib_d2210cbf._.js +3 -0
- package/.next/server/chunks/src_lib_d2210cbf._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4393e897._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4393e897._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__ae77070e._.js → [root-of-the-server]__4c6cc96d._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__4c6cc96d._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__b6de1782._.js → [root-of-the-server]__507d2fc9._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__c72e7548._.js → [root-of-the-server]__7180d770._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__7180d770._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__82ce3aee._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__82ce3aee._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__8d24c9c3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__8d24c9c3._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__bc3b27b0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__bc3b27b0._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__72721a7e._.js → [root-of-the-server]__f75a61bf._.js} +2 -2
- package/.next/server/chunks/ssr/_1aad1d9b._.js +24 -0
- package/.next/server/chunks/ssr/_1aad1d9b._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_aefa2538._.js → _da6f800e._.js} +2 -2
- package/.next/server/chunks/ssr/_da6f800e._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js +1 -1
- package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js +1 -1
- package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js.map +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/static/chunks/{a33f8641aafb9e7f.js → 54beb791bcc086ae.js} +1 -1
- package/.next/static/chunks/55866d57aa2c7a9c.js +1 -0
- package/openclaw/index.ts +4 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/src/app/agents/[agentId]/agent-editor.tsx +66 -23
- package/src/app/api/agents/[id]/route.ts +37 -0
- package/src/app/api/agents/add/route.ts +7 -7
- package/src/app/api/agents/files/route.ts +3 -1
- package/src/app/api/agents/skills/install/route.ts +27 -3
- package/src/app/api/agents/skills/route.ts +28 -12
- package/src/app/api/goals/[id]/promote/route.ts +12 -18
- package/src/app/api/recipes/team-agents/route.ts +1 -1
- package/src/app/api/teams/skills/install/route.ts +3 -1
- package/src/app/api/tickets/move/route.ts +3 -4
- package/src/app/recipes/[id]/page.tsx +7 -0
- package/src/app/recipes/page.tsx +7 -0
- package/src/app/recipes/recipes-client.tsx +0 -5
- package/src/lib/agent-workspace.ts +14 -0
- package/src/lib/gateway.ts +5 -8
- package/src/lib/kitchen-api.ts +19 -0
- package/src/lib/openclaw.ts +28 -26
- package/src/lib/paths.ts +4 -3
- package/src/proxy.ts +2 -2
- package/.next/server/app/recipes.html +0 -1
- package/.next/server/app/recipes.meta +0 -15
- package/.next/server/app/recipes.rsc +0 -21
- package/.next/server/app/recipes.segments/_full.segment.rsc +0 -21
- package/.next/server/app/recipes.segments/_head.segment.rsc +0 -6
- package/.next/server/app/recipes.segments/_index.segment.rsc +0 -6
- package/.next/server/app/recipes.segments/_tree.segment.rsc +0 -4
- package/.next/server/app/recipes.segments/recipes/__PAGE__.segment.rsc +0 -10
- package/.next/server/app/recipes.segments/recipes.segment.rsc +0 -4
- package/.next/server/chunks/[root-of-the-server]__02ebb205._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__02ebb205._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0761ac0a._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0761ac0a._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0a87d140._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0a87d140._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__13e03a23._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__13e03a23._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__16252fca._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__16252fca._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1ab15cc6._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1ab15cc6._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1cb96385._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1cb96385._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__20cb8aee._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__20cb8aee._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__22a29d25._.js +0 -6
- package/.next/server/chunks/[root-of-the-server]__22a29d25._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__2369d373._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__2369d373._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__24fa7b94._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__24fa7b94._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__2c9b0df9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__2c9b0df9._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__2ffbbf0e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__2ffbbf0e._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__394097c4._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__394097c4._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__457a879e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__457a879e._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__4ae35c7d._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__4ae35c7d._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__4d1845bd._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__4d1845bd._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__593499ba._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__593499ba._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__69bcd4b9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__69bcd4b9._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__7f23701b._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__7f23701b._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__8f127b48._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__8f127b48._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__93e05771._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__93e05771._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__9a65704e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__9a65704e._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__b76a826e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__b76a826e._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__baf1631b._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__baf1631b._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__bfd1044e._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__bfd1044e._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__c4a25b8f._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__c4a25b8f._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__c4e76686._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__c4e76686._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__c6906128._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__c6906128._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__c8eb444c._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__c8eb444c._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__e28b8399._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__e28b8399._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__e31f8972._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__e31f8972._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__fee3f59e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__fee3f59e._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__fff0b9c4._.js +0 -6
- package/.next/server/chunks/[root-of-the-server]__fff0b9c4._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__277a8350._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__277a8350._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__7458e8cf._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__7458e8cf._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__8aa0b951._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__8aa0b951._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__91b2c698._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__91b2c698._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ae77070e._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__c72e7548._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_aefa2538._.js.map +0 -1
- package/.next/static/chunks/4fb7740933125c6a.js +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__dc6c67a5._.js.map → [root-of-the-server]__74b80ca4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__94ebcd84._.js.map → [root-of-the-server]__b5c2b370._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__920d7db4._.js.map → [root-of-the-server]__be5f57b2._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__b6de1782._.js.map → [root-of-the-server]__507d2fc9._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__72721a7e._.js.map → [root-of-the-server]__f75a61bf._.js.map} +0 -0
- /package/.next/static/{8pxUnfVjZMQrso_jWABg7 → uZkSG3UgZ81MwaAQa74zD}/_buildManifest.js +0 -0
- /package/.next/static/{8pxUnfVjZMQrso_jWABg7 → uZkSG3UgZ81MwaAQa74zD}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{8pxUnfVjZMQrso_jWABg7 → uZkSG3UgZ81MwaAQa74zD}/_ssgManifest.js +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
2:I[57915,["/_next/static/chunks/40f7fde35327d214.js","/_next/static/chunks/de9e30e86ef31e72.js"],"TicketsBoardClient"]
|
|
3
3
|
5:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/d2be314c3ece3fbe.js"],"OutletBoundary"]
|
|
4
4
|
6:"$Sreact.suspense"
|
|
5
|
-
0:{"buildId":"8pxUnfVjZMQrso_jWABg7","rsc":["$","$1","c",{"children":[["$","$L2",null,{"tickets":[{"number":0,"id":"0000-example-ticket.testing-verified","title":"verification — 0000-example-ticket","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0000-example-ticket.testing-verified.md","updatedAt":"2026-02-11T14:04:42.617Z","ageHours":232.1759024093967},{"number":1,"id":"0001-claw-kitchen-ui-update-design-to-match-mission-control-style","title":"Claw Kitchen UI Update Design To Match Mission Control Style","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0001-claw-kitchen-ui-update-design-to-match-mission-control-style.md","updatedAt":"2026-02-12T22:03:10.186Z","ageHours":200.2015777312554},{"number":1,"id":"0001-completion-report","title":"0001 — Completion Report","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0001-completion-report.md","updatedAt":"2026-02-10T17:32:43.000Z","ageHours":252.70912944444444},{"number":2,"id":"0002-p1-push-clawcipes-repo-tags-to-github-and-publish-latest-ver","title":"P1 Push Clawcipes Repo Tags To Github And Publish Latest Ver","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0002-p1-push-clawcipes-repo-tags-to-github-and-publish-latest-ver.md","updatedAt":"2026-02-10T17:37:50.000Z","ageHours":252.62385194444445},{"number":3,"id":"0003-completion-report","title":"— completion report (docs consistency)","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0003-completion-report.md","updatedAt":"2026-02-11T12:09:35.808Z","ageHours":234.09446069485134},{"number":3,"id":"0003-p1-docs-consistency-pass-ensure-docs-reflect-testing-stage-d","title":"P1 Docs Consistency Pass Ensure Docs Reflect Testing Stage D","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0003-p1-docs-consistency-pass-ensure-docs-reflect-testing-stage-d.md","updatedAt":"2026-02-11T12:09:21.480Z","ageHours":234.09844094828287},{"number":4,"id":"0004-completion-report","title":"0004 — Completion Report","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0004-completion-report.md","updatedAt":"2026-02-11T00:41:13.000Z","ageHours":245.56746305555555},{"number":4,"id":"0004-p1-scaffold-sanity-verify-generated-team-md-and-tickets-md-m","title":"P1 Scaffold Sanity Verify Generated Team MD And Tickets MD M","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0004-p1-scaffold-sanity-verify-generated-team-md-and-tickets-md-m.md","updatedAt":"2026-02-11T01:07:17.000Z","ageHours":245.1330186111111},{"number":5,"id":"0005-p2-add-handoff-command-move-ticket-to-testing-assign-to-test","title":"P2 Add Handoff Command Move Ticket To Testing Assign To Test","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0005-p2-add-handoff-command-move-ticket-to-testing-assign-to-test.md","updatedAt":"2026-02-11T12:37:19.211Z","ageHours":233.63240456068252},{"number":6,"id":"0006-p2-add-automated-tests-for-recipes-plugin-core-behaviors-age","title":"P2 Add Automated Tests For Recipes Plugin Core Behaviors Age","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0006-p2-add-automated-tests-for-recipes-plugin-core-behaviors-age.md","updatedAt":"2026-02-11T13:09:39.453Z","ageHours":233.09344830417209},{"number":7,"id":"0007-p2-hardening-better-errors-ensure-work-testing-is-created-mi","title":"P2 Hardening Better Errors Ensure Work Testing Is Created Mi","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0007-p2-hardening-better-errors-ensure-work-testing-is-created-mi.md","updatedAt":"2026-02-11T13:41:04.958Z","ageHours":232.56969733317058},{"number":8,"id":"0008-completion-report","title":"— completion report (QA checklist + verification workflow)","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0008-completion-report.md","updatedAt":"2026-02-11T14:04:00.364Z","ageHours":232.18764011406793},{"number":8,"id":"0008-p1-qa-checklist-template-for-tester-define-verification-step","title":"P1 Qa Checklist Template For Tester Define Verification Step","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0008-p1-qa-checklist-template-for-tester-define-verification-step.md","updatedAt":"2026-02-11T14:03:46.156Z","ageHours":232.1915867561171},{"number":9,"id":"0009-completion-report","title":"0009 — Completion Report (Option A: recipe-defined cron jobs)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0009-completion-report.md","updatedAt":"2026-02-10T20:26:16.000Z","ageHours":249.81663},{"number":9,"id":"0009-implement-recipe-defined-cron-jobs-option-a-requirements-rec","title":"Implement Recipe Defined Cron Jobs Option A Requirements Rec","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0009-implement-recipe-defined-cron-jobs-option-a-requirements-rec.md","updatedAt":"2026-02-10T19:48:28.000Z","ageHours":250.44663},{"number":9,"id":"0009-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0009-pr-body.md","updatedAt":"2026-02-10T19:10:48.000Z","ageHours":251.07440777777776},{"number":10,"id":"0010-implement-shared-context-best-practices-across-team-agents-w","title":"Implement Shared Context Best Practices Across Team Agents W","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0010-implement-shared-context-best-practices-across-team-agents-w.md","updatedAt":"2026-02-11T00:35:17.000Z","ageHours":245.66635222222223},{"number":10,"id":"0010-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0010-pr-body.md","updatedAt":"2026-02-11T01:31:44.000Z","ageHours":244.7255188888889},{"number":10,"id":"0010-testing-verified","title":"Implement Shared Context Best Practices Across Team Agents W","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0010-testing-verified.md","updatedAt":"2026-02-11T01:07:17.000Z","ageHours":245.1330188888889},{"number":11,"id":"0011-add-cron-jobs-management-to-kitchen-ui-context-we-re-adding-","title":"Add Cron Jobs Management To Kitchen UI Context We Re Adding","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0011-add-cron-jobs-management-to-kitchen-ui-context-we-re-adding-.md","updatedAt":"2026-02-11T02:41:27.000Z","ageHours":243.56357472222223},{"number":11,"id":"0011-completion-report","title":"#0011 — Completion Report","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0011-completion-report.md","updatedAt":"2026-02-11T02:41:34.000Z","ageHours":243.56163027777777},{"number":11,"id":"0011-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0011-pr-body.md","updatedAt":"2026-02-11T02:38:19.000Z","ageHours":243.61579694444444},{"number":12,"id":"0012-add-lightweight-automated-scaffold-output-regression-test-fo","title":"Add Lightweight Automated Scaffold Output Regression Test Fo","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0012-add-lightweight-automated-scaffold-output-regression-test-fo.md","updatedAt":"2026-02-11T12:06:05.022Z","ageHours":234.15301311340332},{"number":12,"id":"0012-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0012-pr-body.md","updatedAt":"2026-02-11T12:05:26.648Z","ageHours":234.16367249206542},{"number":13,"id":"0013-add-proper-test-harness-vitest-jest-for-clawcipes-recipes-co","title":"Add Proper Test Harness Vitest Jest For Clawcipes Recipes Co","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0013-add-proper-test-harness-vitest-jest-for-clawcipes-recipes-co.md","updatedAt":"2026-02-11T14:37:41.152Z","ageHours":231.62631022264267},{"number":14,"id":"0014-completion-report","title":"0014 — Completion Report (P0)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0014-completion-report.md","updatedAt":"2026-02-11T04:05:04.000Z","ageHours":242.16996361111111},{"number":14,"id":"0014-fix-kitchen-settings-and-plugin-schema","title":"— Fix Kitchen Settings Page + Plugin Schema","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0014-fix-kitchen-settings-and-plugin-schema.md","updatedAt":"2026-02-11T04:05:14.000Z","ageHours":242.16718583333332},{"number":15,"id":"0015-add-automatic-cleanup-for-scaffold-test-workspaces-we-accumu","title":"Add Automatic Cleanup For Scaffold Test Workspaces We Accumu","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0015-add-automatic-cleanup-for-scaffold-test-workspaces-we-accumu.md","updatedAt":"2026-02-11T17:44:51.366Z","ageHours":228.50680625820584},{"number":16,"id":"0016-add-tasks-to-update-the-other-builtin-team-recipes-product-t","title":"Add Tasks To Update The Other Builtin Team Recipes Product T","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0016-add-tasks-to-update-the-other-builtin-team-recipes-product-t.md","updatedAt":"2026-02-11T18:31:30.386Z","ageHours":227.72930072882758},{"number":16,"id":"0016-completion-report","title":"— completion report (breakdown + inventory)","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0016-completion-report.md","updatedAt":"2026-02-11T18:06:05.741Z","ageHours":228.15281333502875},{"number":17,"id":"0017-p2-parity-baseline-add-cronjobs-frontmatter-to-built-in-team-recipes","title":"P2 Parity Baseline Add Cronjobs Frontmatter To Built In Team Recipes","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0017-p2-parity-baseline-add-cronjobs-frontmatter-to-built-in-team-recipes.md","updatedAt":"2026-02-11T22:07:53.117Z","ageHours":224.12298655517577},{"number":18,"id":"0018-p2-update-product-team-recipe-parity-status-cron-role-templates","title":"P2 Update Product Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0018-p2-update-product-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T22:31:50.629Z","ageHours":223.7236779200575},{"number":19,"id":"0019-p2-update-research-team-recipe-parity-status-cron-role-templates","title":"P2 Update Research Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0019-p2-update-research-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T22:32:53.164Z","ageHours":223.70630719204374},{"number":20,"id":"0020-p2-update-writing-team-recipe-parity-status-cron-role-templates","title":"P2 Update Writing Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0020-p2-update-writing-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T23:02:15.923Z","ageHours":223.2166519145372},{"number":21,"id":"0021-p2-update-social-team-recipe-parity-status-cron-role-templates","title":"P2 Update Social Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0021-p2-update-social-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T23:32:35.506Z","ageHours":222.71121250637478},{"number":22,"id":"0022-p2-update-customer-support-team-recipe-parity-status-cron-role-templates","title":"P2 Update Customer Support Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0022-p2-update-customer-support-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-12T00:05:15.352Z","ageHours":222.1668108163113},{"number":23,"id":"0023-move-g-009-into-backlog-build-clawcipes-public-website-marke","title":"Move G 009 Into Backlog Build Clawcipes Public Website Marke","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0023-move-g-009-into-backlog-build-clawcipes-public-website-marke.md","updatedAt":"2026-02-13T03:37:22.043Z","ageHours":194.63161901000976},{"number":24,"id":"0024-clawkitchen-ui-update-layout-to-resemble-mission-control-top","title":"Clawkitchen UI Update Layout To Resemble Mission Control Top","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0024-clawkitchen-ui-update-layout-to-resemble-mission-control-top.md","updatedAt":"2026-02-12T22:37:39.721Z","ageHours":199.62670835103353},{"number":26,"id":"0026-add-openclaw-recipes-remove-team-uninstall-cleanup","title":"Add Openclaw Recipes Remove Team Uninstall Cleanup","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0026-add-openclaw-recipes-remove-team-uninstall-cleanup.md","updatedAt":"2026-02-13T03:41:13.146Z","ageHours":194.5674235659451},{"number":27,"id":"0027-build-clawcipes-marketplace-backend-registry-search-install","title":"Build Clawcipes Marketplace Backend Registry Search Install","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0027-build-clawcipes-marketplace-backend-registry-search-install.md","updatedAt":"2026-02-13T01:04:35.458Z","ageHours":197.17789258307562},{"number":28,"id":"0028-kitchen-board-move-test","title":"Kitchen Board Move Test","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0028-kitchen-board-move-test.md","updatedAt":"2026-02-13T01:34:04.270Z","ageHours":196.6865557647027},{"number":29,"id":"0029-update-documentation-ui-copy-to-replace-clawcipes-branding-w","title":"Update Documentation UI Copy To Replace Clawcipes Branding W","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0029-update-documentation-ui-copy-to-replace-clawcipes-branding-w.md","updatedAt":"2026-02-13T04:34:21.431Z","ageHours":193.68178884446885},{"number":30,"id":"0030-clawkitchen-v2-requirements-1-home-page-remove-middle-pill-m","title":"Clawkitchen V2 Requirements 1 Home Page Remove Middle Pill M","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0030-clawkitchen-v2-requirements-1-home-page-remove-middle-pill-m.md","updatedAt":"2026-02-14T04:38:30.630Z","ageHours":169.61256735710992},{"number":31,"id":"0031-release-push-ship-remove-team-clawrecipes-rebrand-steps-merg","title":"Release Push Ship Remove Team Clawrecipes Rebrand Steps Merg","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0031-release-push-ship-remove-team-clawrecipes-rebrand-steps-merg.md","updatedAt":"2026-02-13T12:39:32.240Z","ageHours":185.59545335394967},{"number":32,"id":"0032-fix-recipes-clawrecipes-plugin-to-avoid-openclaw-dangerous-c","title":"Fix Recipes Clawrecipes Plugin To Avoid Openclaw Dangerous C","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0032-fix-recipes-clawrecipes-plugin-to-avoid-openclaw-dangerous-c.md","updatedAt":"2026-02-13T19:34:27.517Z","ageHours":178.6800987234158},{"number":33,"id":"0033-publish-no-warning-package-name-jiggai-recipes-for-clawrecip","title":"Publish No Warning Package Name Jiggai Recipes For Clawrecip","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0033-publish-no-warning-package-name-jiggai-recipes-for-clawrecip.md","updatedAt":"2026-02-14T04:43:41.501Z","ageHours":169.52621424580892},{"number":34,"id":"0034-fix-openclaw-install-warning-plugin-recipes-has-suspicious-c","title":"Fix Openclaw Install Warning Plugin Recipes Has Suspicious C","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0034-fix-openclaw-install-warning-plugin-recipes-has-suspicious-c.md","updatedAt":"2026-02-14T04:49:43.975Z","ageHours":169.42552705064563},{"number":35,"id":"0035-finish-g-008-clawrecipes-close-remaining-gaps-ensure-missing","title":"Finish G 008 Clawrecipes Close Remaining Gaps Ensure Missing","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0035-finish-g-008-clawrecipes-close-remaining-gaps-ensure-missing.md","updatedAt":"2026-02-14T04:05:56.098Z","ageHours":170.15549284606934},{"number":36,"id":"0036-clawkitchen-team-editor-save-semantics-bugs-clarify-and-fix-","title":"Clawkitchen Team Editor Save Semantics Bugs Clarify And Fix","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0036-clawkitchen-team-editor-save-semantics-bugs-clarify-and-fix-.md","updatedAt":"2026-02-14T12:08:12.549Z","ageHours":162.11758966674805},{"number":37,"id":"0037-clawkitchen-lock-builtin-source-team-recipes-in-team-editor-","title":"Clawkitchen Lock Builtin Source Team Recipes In Team Editor","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0037-clawkitchen-lock-builtin-source-team-recipes-in-team-editor-.md","updatedAt":"2026-02-14T14:33:51.475Z","ageHours":159.6901103438992},{"number":38,"id":"0038-clawkitchen-files-tab-too-many-missing-files-shown-for-some-","title":"Clawkitchen Files Tab Too Many Missing Files Shown For Some","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0038-clawkitchen-files-tab-too-many-missing-files-shown-for-some-.md","updatedAt":"2026-02-14T13:03:58.817Z","ageHours":161.18807086446125},{"number":39,"id":"0039-completion-report","title":"Completion Report","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0039-completion-report.md","updatedAt":"2026-02-14T12:35:11.929Z","ageHours":161.66776191026474},{"number":40,"id":"0040-clawkitchen-ui-polish-show-team-agent-display-names-identity","title":"Clawkitchen UI Polish Show Team Agent Display Names Identity","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0040-clawkitchen-ui-polish-show-team-agent-display-names-identity.md","updatedAt":"2026-02-14T15:02:41.805Z","ageHours":159.20946296875},{"number":41,"id":"0041-clawkitchen-ui-align-team-recipe-agent-editing-home-page-beh","title":"Clawkitchen UI Align Team Recipe Agent Editing Home Page Beh","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0041-clawkitchen-ui-align-team-recipe-agent-editing-home-page-beh.md","updatedAt":"2026-02-14T18:03:27.193Z","ageHours":156.19685538791234},{"number":42,"id":"0042-clawkitchen-persist-team-provenance-parent-recipe-and-lock-i","title":"Clawkitchen Persist Team Provenance Parent Recipe And Lock I","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0042-clawkitchen-persist-team-provenance-parent-recipe-and-lock-i.md","updatedAt":"2026-02-14T20:35:41.025Z","ageHours":153.65968003512913},{"number":43,"id":"0043-root-cause-fix-scaffold-team-must-persist-team-provenance-pa","title":"Root Cause Fix Scaffold Team Must Persist Team Provenance Pa","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0043-root-cause-fix-scaffold-team-must-persist-team-provenance-pa.md","updatedAt":"2026-02-14T20:03:08.642Z","ageHours":154.2020085180664},{"number":44,"id":"0044-implement-new-scaffold-team-behavior-create-workspace-recipe","title":"Implement New Scaffold Team Behavior Create Workspace Recipe","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0044-implement-new-scaffold-team-behavior-create-workspace-recipe.md","updatedAt":"2026-02-15T02:05:28.542Z","ageHours":148.16314741672093},{"number":45,"id":"0045-clawmarket-get-started-page-add-real-screenshots-of-user-pro","title":"Clawmarket Get Started Page Add Real Screenshots Of User Pro","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0045-clawmarket-get-started-page-add-real-screenshots-of-user-pro.md","updatedAt":"2026-02-15T20:33:07.943Z","ageHours":129.70220291456434},{"number":46,"id":"0046-extend-recipes-scaffold-single-agent-to-also-create-a-worksp","title":"Extend Recipes Scaffold Single Agent To Also Create A Worksp","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0046-extend-recipes-scaffold-single-agent-to-also-create-a-worksp.md","updatedAt":"2026-02-15T20:04:33.329Z","ageHours":130.17848456895615},{"number":47,"id":"0047-overnight-propose-15-20-specialty-agents-business-focused-us","title":"Overnight Propose 15 20 Specialty Agents Business Focused Us","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0047-overnight-propose-15-20-specialty-agents-business-focused-us.md","updatedAt":"2026-02-15T21:11:10.265Z","ageHours":129.0682245767551},{"number":48,"id":"0048-expand-specialty-agent-catalog-beyond-generic-business-creat","title":"Expand Specialty Agent Catalog Beyond Generic Business Creat","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0048-expand-specialty-agent-catalog-beyond-generic-business-creat.md","updatedAt":"2026-02-15T22:34:15.032Z","ageHours":127.68356706671821},{"number":49,"id":"0049-marketplace-add-login-auth-to-clawkitchen-ai-marketplace-cla","title":"Marketplace Add Login Auth To Clawkitchen Ai Marketplace Cla","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0049-marketplace-add-login-auth-to-clawkitchen-ai-marketplace-cla.md","updatedAt":"2026-02-17T22:21:54.459Z","ageHours":79.88928164632162},{"number":50,"id":"0050-marketplace-add-recipe-submissions-ugc-flow-to-clawkitchen-a","title":"Marketplace Add Recipe Submissions Ugc Flow To Clawkitchen A","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0050-marketplace-add-recipe-submissions-ugc-flow-to-clawkitchen-a.md","updatedAt":"2026-02-19T03:06:49.980Z","ageHours":51.14052580525716},{"number":51,"id":"0051-clawkitchen-add-goals-feature-scope-ui-page-route-for-goals-","title":"Clawkitchen Add Goals Feature Scope UI Page Route For Goals","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0051-clawkitchen-add-goals-feature-scope-ui-page-route-for-goals-.md","updatedAt":"2026-02-17T02:09:16.383Z","ageHours":100.0998586090766},{"number":52,"id":"0052-create-a-new-bundled-team-recipe-marketing-team-add-5-roles-","title":"Create A New Bundled Team Recipe Marketing Team Add 5 Roles","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0052-create-a-new-bundled-team-recipe-marketing-team-add-5-roles-.md","updatedAt":"2026-02-16T23:30:56.819Z","ageHours":102.73862647162544},{"number":53,"id":"0053-expand-social-marketing-team-recipe-add-roles-for-1-social-m","title":"Expand Social Marketing Team Recipe Add Roles For 1 Social M","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0053-expand-social-marketing-team-recipe-add-roles-for-1-social-m.md","updatedAt":"2026-02-16T23:36:50.412Z","ageHours":102.6404060301378},{"number":54,"id":"0054-implement-team-recipe-template-standardization-across-bundle","title":"Implement Team Recipe Template Standardization Across Bundle","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0054-implement-team-recipe-template-standardization-across-bundle.md","updatedAt":"2026-02-16T23:36:50.418Z","ageHours":102.64040436347113},{"number":55,"id":"0055-ship-reliable-lead-wake-up-after-dispatch-enable-triage-auto","title":"Ship Reliable Lead Wake Up After Dispatch Enable Triage Auto","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0055-ship-reliable-lead-wake-up-after-dispatch-enable-triage-auto.md","updatedAt":"2026-02-17T02:09:18.105Z","ageHours":100.09938027960884},{"number":56,"id":"0056-publish-or-sync-the-jiggai-recipes-extension-so-openclaw-rec","title":"Publish Or Sync The Jiggai Recipes Extension So Openclaw Rec","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0056-publish-or-sync-the-jiggai-recipes-extension-so-openclaw-rec.md","updatedAt":"2026-02-16T23:36:50.423Z","ageHours":102.64040297458224},{"number":57,"id":"0057-publish-jiggai-recipes-bump-version-and-revert-local-link","title":"Publish Jiggai Recipes Bump Version And Revert Local Link","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0057-publish-jiggai-recipes-bump-version-and-revert-local-link.md","updatedAt":"2026-02-17T10:05:22.639Z","ageHours":92.16478752651638},{"number":58,"id":"0058-clawkitchen-add-channels-section-for-channel-bindings-crud","title":"Clawkitchen Add Channels Section For Channel Bindings Crud","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0058-clawkitchen-add-channels-section-for-channel-bindings-crud.md","updatedAt":"2026-02-17T06:07:01.696Z","ageHours":96.13727174587673},{"number":63,"id":"0063-clawkitchen-clone-should-scaffold-or-copy-workspace-files","title":"Clawkitchen Clone Should Scaffold Or Copy Workspace Files","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0063-clawkitchen-clone-should-scaffold-or-copy-workspace-files.md","updatedAt":"2026-02-20T00:32:58.746Z","ageHours":29.70475780456543},{"number":64,"id":"0064-clawmarket-recipe-detail-page-defaults-ugc","title":"Clawmarket Recipe Detail Page Defaults Ugc","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0064-clawmarket-recipe-detail-page-defaults-ugc.md","updatedAt":"2026-02-19T23:27:43.645Z","ageHours":30.79228588772244},{"number":65,"id":"0065-working-ticket-deep-review-clawrecipes-pr-35-after-fixes-rol","title":"Working Ticket Deep Review Clawrecipes PR 35 After Fixes Rol","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0065-working-ticket-deep-review-clawrecipes-pr-35-after-fixes-rol.md","updatedAt":"2026-02-18T00:06:07.038Z","ageHours":78.15245443122016},{"number":66,"id":"0066-clawmarket-replace-login-logout-button-with-profile-photo-dr","title":"Clawmarket Replace Login Logout Button With Profile Photo Dr","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0066-clawmarket-replace-login-logout-button-with-profile-photo-dr.md","updatedAt":"2026-02-19T23:40:53.761Z","ageHours":30.57280908311632},{"number":67,"id":"0067-rj-update-2026-02-18-1-mailgun-url-env-added-2-captcha-site-","title":"Rj Update 2026 02 18 1 Mailgun Url Env Added 2 Captcha Site","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0067-rj-update-2026-02-18-1-mailgun-url-env-added-2-captcha-site-.md","updatedAt":"2026-02-18T21:58:03.930Z","ageHours":56.286651344197594},{"number":68,"id":"0068-epic-update-builtin-development-team-team-recipe-to-match-cu","title":"Epic Update Builtin Development Team Team Recipe To Match Cu","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0068-epic-update-builtin-development-team-team-recipe-to-match-cu.md","updatedAt":"2026-02-19T23:39:43.547Z","ageHours":30.59231341905382},{"number":69,"id":"0069-split-from-0068-sync-builtin-development-team-role-templates","title":"Split From 0068 Sync Builtin Development Team Role Templates","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0069-split-from-0068-sync-builtin-development-team-role-templates.md","updatedAt":"2026-02-19T00:02:43.833Z","ageHours":54.20890045132107},{"number":70,"id":"0070-split-from-0068-cron-job-pack-inventory-product-decision-for","title":"Split From 0068 Cron Job Pack Inventory Product Decision For","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0070-split-from-0068-cron-job-pack-inventory-product-decision-for.md","updatedAt":"2026-02-18T22:32:14.886Z","ageHours":55.716941423746746},{"number":71,"id":"0071-split-from-0068-implement-cron-job-installation-for-builtin-","title":"Split From 0068 Implement Cron Job Installation For Builtin","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0071-split-from-0068-implement-cron-job-installation-for-builtin-.md","updatedAt":"2026-02-19T02:33:33.833Z","ageHours":51.69501166612413},{"number":72,"id":"0072-publish-a-new-jiggai-recipes-extension-release-that-includes","title":"Publish A New Jiggai Recipes Extension Release That Includes","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0072-publish-a-new-jiggai-recipes-extension-release-that-includes.md","updatedAt":"2026-02-19T23:39:29.457Z","ageHours":30.596227286105687},{"number":73,"id":"0073-clawmarket-recipe-detail-source-panel-white-bg-and-button-sizing","title":"Clawmarket Recipe Detail Source Panel White Bg And Button Sizing","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0073-clawmarket-recipe-detail-source-panel-white-bg-and-button-sizing.md","updatedAt":"2026-02-20T03:05:09.250Z","ageHours":27.16850686448839},{"number":74,"id":"0074-clawmarket-admin-users-section-list-users","title":"Clawmarket Admin Users Section List Users","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0074-clawmarket-admin-users-section-list-users.md","updatedAt":"2026-02-20T03:05:10.951Z","ageHours":27.16803436726888},{"number":75,"id":"0075-clawkitchen-ux-overhaul-for-recipe-team-agent-flows-release-","title":"Clawkitchen UX Overhaul For Recipe Team Agent Flows Release","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0075-clawkitchen-ux-overhaul-for-recipe-team-agent-flows-release-.md","updatedAt":"2026-02-20T21:33:24.777Z","ageHours":8.697527262437609},{"number":76,"id":"0076-fix-recipes-tickets-cli-config-workspace-default","title":"Fix Recipes Tickets CLI Config Workspace Default","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0076-fix-recipes-tickets-cli-config-workspace-default.md","updatedAt":"2026-02-20T22:38:13.327Z","ageHours":7.6173744977484805}]}],["$L3"],"$L4"]}],"loading":null,"isPartial":false}
|
|
5
|
+
0:{"buildId":"uZkSG3UgZ81MwaAQa74zD","rsc":["$","$1","c",{"children":[["$","$L2",null,{"tickets":[{"number":0,"id":"0000-example-ticket.testing-verified","title":"verification — 0000-example-ticket","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0000-example-ticket.testing-verified.md","updatedAt":"2026-02-11T14:04:42.617Z","ageHours":255.0081160205078},{"number":1,"id":"0001-claw-kitchen-ui-update-design-to-match-mission-control-style","title":"Claw Kitchen UI Update Design To Match Mission Control Style","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0001-claw-kitchen-ui-update-design-to-match-mission-control-style.md","updatedAt":"2026-02-12T22:03:10.186Z","ageHours":223.0337916201443},{"number":1,"id":"0001-completion-report","title":"0001 — Completion Report","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0001-completion-report.md","updatedAt":"2026-02-10T17:32:43.000Z","ageHours":275.5413433333333},{"number":2,"id":"0002-p1-push-clawcipes-repo-tags-to-github-and-publish-latest-ver","title":"P1 Push Clawcipes Repo Tags To Github And Publish Latest Ver","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0002-p1-push-clawcipes-repo-tags-to-github-and-publish-latest-ver.md","updatedAt":"2026-02-10T17:37:50.000Z","ageHours":275.45606555555554},{"number":3,"id":"0003-completion-report","title":"— completion report (docs consistency)","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0003-completion-report.md","updatedAt":"2026-02-11T12:09:35.808Z","ageHours":256.9266743059625},{"number":3,"id":"0003-p1-docs-consistency-pass-ensure-docs-reflect-testing-stage-d","title":"P1 Docs Consistency Pass Ensure Docs Reflect Testing Stage D","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0003-p1-docs-consistency-pass-ensure-docs-reflect-testing-stage-d.md","updatedAt":"2026-02-11T12:09:21.480Z","ageHours":256.930654559394},{"number":4,"id":"0004-completion-report","title":"0004 — Completion Report","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0004-completion-report.md","updatedAt":"2026-02-11T00:41:13.000Z","ageHours":268.39967666666666},{"number":4,"id":"0004-p1-scaffold-sanity-verify-generated-team-md-and-tickets-md-m","title":"P1 Scaffold Sanity Verify Generated Team MD And Tickets MD M","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0004-p1-scaffold-sanity-verify-generated-team-md-and-tickets-md-m.md","updatedAt":"2026-02-11T01:07:17.000Z","ageHours":267.9652322222222},{"number":5,"id":"0005-p2-add-handoff-command-move-ticket-to-testing-assign-to-test","title":"P2 Add Handoff Command Move Ticket To Testing Assign To Test","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0005-p2-add-handoff-command-move-ticket-to-testing-assign-to-test.md","updatedAt":"2026-02-11T12:37:19.211Z","ageHours":256.4646184495714},{"number":6,"id":"0006-p2-add-automated-tests-for-recipes-plugin-core-behaviors-age","title":"P2 Add Automated Tests For Recipes Plugin Core Behaviors Age","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0006-p2-add-automated-tests-for-recipes-plugin-core-behaviors-age.md","updatedAt":"2026-02-11T13:09:39.453Z","ageHours":255.925662193061},{"number":7,"id":"0007-p2-hardening-better-errors-ensure-work-testing-is-created-mi","title":"P2 Hardening Better Errors Ensure Work Testing Is Created Mi","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0007-p2-hardening-better-errors-ensure-work-testing-is-created-mi.md","updatedAt":"2026-02-11T13:41:04.958Z","ageHours":255.4019109442817},{"number":8,"id":"0008-completion-report","title":"— completion report (QA checklist + verification workflow)","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0008-completion-report.md","updatedAt":"2026-02-11T14:04:00.364Z","ageHours":255.01985372517905},{"number":8,"id":"0008-p1-qa-checklist-template-for-tester-define-verification-step","title":"P1 Qa Checklist Template For Tester Define Verification Step","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0008-p1-qa-checklist-template-for-tester-define-verification-step.md","updatedAt":"2026-02-11T14:03:46.156Z","ageHours":255.02380036722818},{"number":9,"id":"0009-completion-report","title":"0009 — Completion Report (Option A: recipe-defined cron jobs)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0009-completion-report.md","updatedAt":"2026-02-10T20:26:16.000Z","ageHours":272.6488436111111},{"number":9,"id":"0009-implement-recipe-defined-cron-jobs-option-a-requirements-rec","title":"Implement Recipe Defined Cron Jobs Option A Requirements Rec","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0009-implement-recipe-defined-cron-jobs-option-a-requirements-rec.md","updatedAt":"2026-02-10T19:48:28.000Z","ageHours":273.2788436111111},{"number":9,"id":"0009-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0009-pr-body.md","updatedAt":"2026-02-10T19:10:48.000Z","ageHours":273.9066216666667},{"number":10,"id":"0010-implement-shared-context-best-practices-across-team-agents-w","title":"Implement Shared Context Best Practices Across Team Agents W","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0010-implement-shared-context-best-practices-across-team-agents-w.md","updatedAt":"2026-02-11T00:35:17.000Z","ageHours":268.49856611111113},{"number":10,"id":"0010-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0010-pr-body.md","updatedAt":"2026-02-11T01:31:44.000Z","ageHours":267.5577327777778},{"number":10,"id":"0010-testing-verified","title":"Implement Shared Context Best Practices Across Team Agents W","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0010-testing-verified.md","updatedAt":"2026-02-11T01:07:17.000Z","ageHours":267.96523277777777},{"number":11,"id":"0011-add-cron-jobs-management-to-kitchen-ui-context-we-re-adding-","title":"Add Cron Jobs Management To Kitchen UI Context We Re Adding","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0011-add-cron-jobs-management-to-kitchen-ui-context-we-re-adding-.md","updatedAt":"2026-02-11T02:41:27.000Z","ageHours":266.3957883333333},{"number":11,"id":"0011-completion-report","title":"#0011 — Completion Report","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0011-completion-report.md","updatedAt":"2026-02-11T02:41:34.000Z","ageHours":266.3938438888889},{"number":11,"id":"0011-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0011-pr-body.md","updatedAt":"2026-02-11T02:38:19.000Z","ageHours":266.4480105555556},{"number":12,"id":"0012-add-lightweight-automated-scaffold-output-regression-test-fo","title":"Add Lightweight Automated Scaffold Output Regression Test Fo","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0012-add-lightweight-automated-scaffold-output-regression-test-fo.md","updatedAt":"2026-02-11T12:06:05.022Z","ageHours":256.9852267245144},{"number":12,"id":"0012-pr-body","title":"(untitled)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0012-pr-body.md","updatedAt":"2026-02-11T12:05:26.648Z","ageHours":256.99588610317653},{"number":13,"id":"0013-add-proper-test-harness-vitest-jest-for-clawcipes-recipes-co","title":"Add Proper Test Harness Vitest Jest For Clawcipes Recipes Co","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0013-add-proper-test-harness-vitest-jest-for-clawcipes-recipes-co.md","updatedAt":"2026-02-11T14:37:41.152Z","ageHours":254.4585238337538},{"number":14,"id":"0014-completion-report","title":"0014 — Completion Report (P0)","owner":null,"stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0014-completion-report.md","updatedAt":"2026-02-11T04:05:04.000Z","ageHours":265.0021772222222},{"number":14,"id":"0014-fix-kitchen-settings-and-plugin-schema","title":"— Fix Kitchen Settings Page + Plugin Schema","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0014-fix-kitchen-settings-and-plugin-schema.md","updatedAt":"2026-02-11T04:05:14.000Z","ageHours":264.99939944444446},{"number":15,"id":"0015-add-automatic-cleanup-for-scaffold-test-workspaces-we-accumu","title":"Add Automatic Cleanup For Scaffold Test Workspaces We Accumu","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0015-add-automatic-cleanup-for-scaffold-test-workspaces-we-accumu.md","updatedAt":"2026-02-11T17:44:51.366Z","ageHours":251.33902014709471},{"number":16,"id":"0016-add-tasks-to-update-the-other-builtin-team-recipes-product-t","title":"Add Tasks To Update The Other Builtin Team Recipes Product T","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0016-add-tasks-to-update-the-other-builtin-team-recipes-product-t.md","updatedAt":"2026-02-11T18:31:30.386Z","ageHours":250.56151461771648},{"number":16,"id":"0016-completion-report","title":"— completion report (breakdown + inventory)","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0016-completion-report.md","updatedAt":"2026-02-11T18:06:05.741Z","ageHours":250.98502722391765},{"number":17,"id":"0017-p2-parity-baseline-add-cronjobs-frontmatter-to-built-in-team-recipes","title":"P2 Parity Baseline Add Cronjobs Frontmatter To Built In Team Recipes","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0017-p2-parity-baseline-add-cronjobs-frontmatter-to-built-in-team-recipes.md","updatedAt":"2026-02-11T22:07:53.117Z","ageHours":246.95520044406467},{"number":18,"id":"0018-p2-update-product-team-recipe-parity-status-cron-role-templates","title":"P2 Update Product Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0018-p2-update-product-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T22:31:50.629Z","ageHours":246.5558915311686},{"number":19,"id":"0019-p2-update-research-team-recipe-parity-status-cron-role-templates","title":"P2 Update Research Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0019-p2-update-research-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T22:32:53.164Z","ageHours":246.53852080315485},{"number":20,"id":"0020-p2-update-writing-team-recipe-parity-status-cron-role-templates","title":"P2 Update Writing Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0020-p2-update-writing-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T23:02:15.923Z","ageHours":246.04886552564832},{"number":21,"id":"0021-p2-update-social-team-recipe-parity-status-cron-role-templates","title":"P2 Update Social Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0021-p2-update-social-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-11T23:32:35.506Z","ageHours":245.5434258397081},{"number":22,"id":"0022-p2-update-customer-support-team-recipe-parity-status-cron-role-templates","title":"P2 Update Customer Support Team Recipe Parity Status Cron Role Templates","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0022-p2-update-customer-support-team-recipe-parity-status-cron-role-templates.md","updatedAt":"2026-02-12T00:05:15.352Z","ageHours":244.99902414964464},{"number":23,"id":"0023-move-g-009-into-backlog-build-clawcipes-public-website-marke","title":"Move G 009 Into Backlog Build Clawcipes Public Website Marke","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0023-move-g-009-into-backlog-build-clawcipes-public-website-marke.md","updatedAt":"2026-02-13T03:37:22.043Z","ageHours":217.46383234334309},{"number":24,"id":"0024-clawkitchen-ui-update-layout-to-resemble-mission-control-top","title":"Clawkitchen UI Update Layout To Resemble Mission Control Top","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0024-clawkitchen-ui-update-layout-to-resemble-mission-control-top.md","updatedAt":"2026-02-12T22:37:39.721Z","ageHours":222.45892168436686},{"number":26,"id":"0026-add-openclaw-recipes-remove-team-uninstall-cleanup","title":"Add Openclaw Recipes Remove Team Uninstall Cleanup","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0026-add-openclaw-recipes-remove-team-uninstall-cleanup.md","updatedAt":"2026-02-13T03:41:13.146Z","ageHours":217.39963689927842},{"number":27,"id":"0027-build-clawcipes-marketplace-backend-registry-search-install","title":"Build Clawcipes Marketplace Backend Registry Search Install","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0027-build-clawcipes-marketplace-backend-registry-search-install.md","updatedAt":"2026-02-13T01:04:35.458Z","ageHours":220.01010619418673},{"number":28,"id":"0028-kitchen-board-move-test","title":"Kitchen Board Move Test","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0028-kitchen-board-move-test.md","updatedAt":"2026-02-13T01:34:04.270Z","ageHours":219.5187693758138},{"number":29,"id":"0029-update-documentation-ui-copy-to-replace-clawcipes-branding-w","title":"Update Documentation UI Copy To Replace Clawcipes Branding W","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0029-update-documentation-ui-copy-to-replace-clawcipes-branding-w.md","updatedAt":"2026-02-13T04:34:21.431Z","ageHours":216.51400245557997},{"number":30,"id":"0030-clawkitchen-v2-requirements-1-home-page-remove-middle-pill-m","title":"Clawkitchen V2 Requirements 1 Home Page Remove Middle Pill M","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0030-clawkitchen-v2-requirements-1-home-page-remove-middle-pill-m.md","updatedAt":"2026-02-14T04:38:30.630Z","ageHours":192.44478069044325},{"number":31,"id":"0031-release-push-ship-remove-team-clawrecipes-rebrand-steps-merg","title":"Release Push Ship Remove Team Clawrecipes Rebrand Steps Merg","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0031-release-push-ship-remove-team-clawrecipes-rebrand-steps-merg.md","updatedAt":"2026-02-13T12:39:32.240Z","ageHours":208.427666687283},{"number":32,"id":"0032-fix-recipes-clawrecipes-plugin-to-avoid-openclaw-dangerous-c","title":"Fix Recipes Clawrecipes Plugin To Avoid Openclaw Dangerous C","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0032-fix-recipes-clawrecipes-plugin-to-avoid-openclaw-dangerous-c.md","updatedAt":"2026-02-13T19:34:27.517Z","ageHours":201.51231205674912},{"number":33,"id":"0033-publish-no-warning-package-name-jiggai-recipes-for-clawrecip","title":"Publish No Warning Package Name Jiggai Recipes For Clawrecip","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0033-publish-no-warning-package-name-jiggai-recipes-for-clawrecip.md","updatedAt":"2026-02-14T04:43:41.501Z","ageHours":192.35842757914224},{"number":34,"id":"0034-fix-openclaw-install-warning-plugin-recipes-has-suspicious-c","title":"Fix Openclaw Install Warning Plugin Recipes Has Suspicious C","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0034-fix-openclaw-install-warning-plugin-recipes-has-suspicious-c.md","updatedAt":"2026-02-14T04:49:43.975Z","ageHours":192.25774038397896},{"number":35,"id":"0035-finish-g-008-clawrecipes-close-remaining-gaps-ensure-missing","title":"Finish G 008 Clawrecipes Close Remaining Gaps Ensure Missing","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0035-finish-g-008-clawrecipes-close-remaining-gaps-ensure-missing.md","updatedAt":"2026-02-14T04:05:56.098Z","ageHours":192.98770617940266},{"number":36,"id":"0036-clawkitchen-team-editor-save-semantics-bugs-clarify-and-fix-","title":"Clawkitchen Team Editor Save Semantics Bugs Clarify And Fix","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0036-clawkitchen-team-editor-save-semantics-bugs-clarify-and-fix-.md","updatedAt":"2026-02-14T12:08:12.549Z","ageHours":184.94980300008137},{"number":37,"id":"0037-clawkitchen-lock-builtin-source-team-recipes-in-team-editor-","title":"Clawkitchen Lock Builtin Source Team Recipes In Team Editor","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0037-clawkitchen-lock-builtin-source-team-recipes-in-team-editor-.md","updatedAt":"2026-02-14T14:33:51.475Z","ageHours":182.52232367723252},{"number":38,"id":"0038-clawkitchen-files-tab-too-many-missing-files-shown-for-some-","title":"Clawkitchen Files Tab Too Many Missing Files Shown For Some","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0038-clawkitchen-files-tab-too-many-missing-files-shown-for-some-.md","updatedAt":"2026-02-14T13:03:58.817Z","ageHours":184.02028447557237},{"number":39,"id":"0039-completion-report","title":"Completion Report","owner":"dev","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0039-completion-report.md","updatedAt":"2026-02-14T12:35:11.929Z","ageHours":184.49997552137586},{"number":40,"id":"0040-clawkitchen-ui-polish-show-team-agent-display-names-identity","title":"Clawkitchen UI Polish Show Team Agent Display Names Identity","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0040-clawkitchen-ui-polish-show-team-agent-display-names-identity.md","updatedAt":"2026-02-14T15:02:41.805Z","ageHours":182.0416765798611},{"number":41,"id":"0041-clawkitchen-ui-align-team-recipe-agent-editing-home-page-beh","title":"Clawkitchen UI Align Team Recipe Agent Editing Home Page Beh","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0041-clawkitchen-ui-align-team-recipe-agent-editing-home-page-beh.md","updatedAt":"2026-02-14T18:03:27.193Z","ageHours":179.02906899902345},{"number":42,"id":"0042-clawkitchen-persist-team-provenance-parent-recipe-and-lock-i","title":"Clawkitchen Persist Team Provenance Parent Recipe And Lock I","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0042-clawkitchen-persist-team-provenance-parent-recipe-and-lock-i.md","updatedAt":"2026-02-14T20:35:41.025Z","ageHours":176.49189364624024},{"number":43,"id":"0043-root-cause-fix-scaffold-team-must-persist-team-provenance-pa","title":"Root Cause Fix Scaffold Team Must Persist Team Provenance Pa","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0043-root-cause-fix-scaffold-team-must-persist-team-provenance-pa.md","updatedAt":"2026-02-14T20:03:08.642Z","ageHours":177.03422212917752},{"number":44,"id":"0044-implement-new-scaffold-team-behavior-create-workspace-recipe","title":"Implement New Scaffold Team Behavior Create Workspace Recipe","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0044-implement-new-scaffold-team-behavior-create-workspace-recipe.md","updatedAt":"2026-02-15T02:05:28.542Z","ageHours":170.99536102783202},{"number":45,"id":"0045-clawmarket-get-started-page-add-real-screenshots-of-user-pro","title":"Clawmarket Get Started Page Add Real Screenshots Of User Pro","owner":"devops","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0045-clawmarket-get-started-page-add-real-screenshots-of-user-pro.md","updatedAt":"2026-02-15T20:33:07.943Z","ageHours":152.53441652567545},{"number":46,"id":"0046-extend-recipes-scaffold-single-agent-to-also-create-a-worksp","title":"Extend Recipes Scaffold Single Agent To Also Create A Worksp","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0046-extend-recipes-scaffold-single-agent-to-also-create-a-worksp.md","updatedAt":"2026-02-15T20:04:33.329Z","ageHours":153.01069818006727},{"number":47,"id":"0047-overnight-propose-15-20-specialty-agents-business-focused-us","title":"Overnight Propose 15 20 Specialty Agents Business Focused Us","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0047-overnight-propose-15-20-specialty-agents-business-focused-us.md","updatedAt":"2026-02-15T21:11:10.265Z","ageHours":151.9004381878662},{"number":48,"id":"0048-expand-specialty-agent-catalog-beyond-generic-business-creat","title":"Expand Specialty Agent Catalog Beyond Generic Business Creat","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0048-expand-specialty-agent-catalog-beyond-generic-business-creat.md","updatedAt":"2026-02-15T22:34:15.032Z","ageHours":150.51578067782933},{"number":49,"id":"0049-marketplace-add-login-auth-to-clawkitchen-ai-marketplace-cla","title":"Marketplace Add Login Auth To Clawkitchen Ai Marketplace Cla","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0049-marketplace-add-login-auth-to-clawkitchen-ai-marketplace-cla.md","updatedAt":"2026-02-17T22:21:54.459Z","ageHours":102.72149525743272},{"number":50,"id":"0050-marketplace-add-recipe-submissions-ugc-flow-to-clawkitchen-a","title":"Marketplace Add Recipe Submissions Ugc Flow To Clawkitchen A","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0050-marketplace-add-recipe-submissions-ugc-flow-to-clawkitchen-a.md","updatedAt":"2026-02-19T03:06:49.980Z","ageHours":73.97273941636827},{"number":51,"id":"0051-clawkitchen-add-goals-feature-scope-ui-page-route-for-goals-","title":"Clawkitchen Add Goals Feature Scope UI Page Route For Goals","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0051-clawkitchen-add-goals-feature-scope-ui-page-route-for-goals-.md","updatedAt":"2026-02-17T02:09:16.383Z","ageHours":122.93207194240993},{"number":52,"id":"0052-create-a-new-bundled-team-recipe-marketing-team-add-5-roles-","title":"Create A New Bundled Team Recipe Marketing Team Add 5 Roles","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0052-create-a-new-bundled-team-recipe-marketing-team-add-5-roles-.md","updatedAt":"2026-02-16T23:30:56.819Z","ageHours":125.57084008273654},{"number":53,"id":"0053-expand-social-marketing-team-recipe-add-roles-for-1-social-m","title":"Expand Social Marketing Team Recipe Add Roles For 1 Social M","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0053-expand-social-marketing-team-recipe-add-roles-for-1-social-m.md","updatedAt":"2026-02-16T23:36:50.412Z","ageHours":125.47261964124891},{"number":54,"id":"0054-implement-team-recipe-template-standardization-across-bundle","title":"Implement Team Recipe Template Standardization Across Bundle","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0054-implement-team-recipe-template-standardization-across-bundle.md","updatedAt":"2026-02-16T23:36:50.418Z","ageHours":125.47261797458225},{"number":55,"id":"0055-ship-reliable-lead-wake-up-after-dispatch-enable-triage-auto","title":"Ship Reliable Lead Wake Up After Dispatch Enable Triage Auto","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0055-ship-reliable-lead-wake-up-after-dispatch-enable-triage-auto.md","updatedAt":"2026-02-17T02:09:18.105Z","ageHours":122.93159389071994},{"number":56,"id":"0056-publish-or-sync-the-jiggai-recipes-extension-so-openclaw-rec","title":"Publish Or Sync The Jiggai Recipes Extension So Openclaw Rec","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0056-publish-or-sync-the-jiggai-recipes-extension-so-openclaw-rec.md","updatedAt":"2026-02-16T23:36:50.423Z","ageHours":125.47261658569336},{"number":57,"id":"0057-publish-jiggai-recipes-bump-version-and-revert-local-link","title":"Publish Jiggai Recipes Bump Version And Revert Local Link","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0057-publish-jiggai-recipes-bump-version-and-revert-local-link.md","updatedAt":"2026-02-17T10:05:22.639Z","ageHours":114.99700113762749},{"number":58,"id":"0058-clawkitchen-add-channels-section-for-channel-bindings-crud","title":"Clawkitchen Add Channels Section For Channel Bindings Crud","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0058-clawkitchen-add-channels-section-for-channel-bindings-crud.md","updatedAt":"2026-02-17T06:07:01.696Z","ageHours":118.96948535698785},{"number":63,"id":"0063-clawkitchen-clone-should-scaffold-or-copy-workspace-files","title":"Clawkitchen Clone Should Scaffold Or Copy Workspace Files","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0063-clawkitchen-clone-should-scaffold-or-copy-workspace-files.md","updatedAt":"2026-02-20T00:32:58.746Z","ageHours":52.53697141567654},{"number":64,"id":"0064-clawmarket-recipe-detail-page-defaults-ugc","title":"Clawmarket Recipe Detail Page Defaults Ugc","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0064-clawmarket-recipe-detail-page-defaults-ugc.md","updatedAt":"2026-02-19T23:27:43.645Z","ageHours":53.62449949883355},{"number":65,"id":"0065-working-ticket-deep-review-clawrecipes-pr-35-after-fixes-rol","title":"Working Ticket Deep Review Clawrecipes PR 35 After Fixes Rol","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0065-working-ticket-deep-review-clawrecipes-pr-35-after-fixes-rol.md","updatedAt":"2026-02-18T00:06:07.038Z","ageHours":100.98466804233126},{"number":66,"id":"0066-clawmarket-replace-login-logout-button-with-profile-photo-dr","title":"Clawmarket Replace Login Logout Button With Profile Photo Dr","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0066-clawmarket-replace-login-logout-button-with-profile-photo-dr.md","updatedAt":"2026-02-19T23:40:53.761Z","ageHours":53.40502269422743},{"number":67,"id":"0067-rj-update-2026-02-18-1-mailgun-url-env-added-2-captcha-site-","title":"Rj Update 2026 02 18 1 Mailgun Url Env Added 2 Captcha Site","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0067-rj-update-2026-02-18-1-mailgun-url-env-added-2-captcha-site-.md","updatedAt":"2026-02-18T21:58:03.930Z","ageHours":79.11886467753092},{"number":68,"id":"0068-epic-update-builtin-development-team-team-recipe-to-match-cu","title":"Epic Update Builtin Development Team Team Recipe To Match Cu","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0068-epic-update-builtin-development-team-team-recipe-to-match-cu.md","updatedAt":"2026-02-19T23:39:43.547Z","ageHours":53.42452703016493},{"number":69,"id":"0069-split-from-0068-sync-builtin-development-team-role-templates","title":"Split From 0068 Sync Builtin Development Team Role Templates","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0069-split-from-0068-sync-builtin-development-team-role-templates.md","updatedAt":"2026-02-19T00:02:43.833Z","ageHours":77.04111406243219},{"number":70,"id":"0070-split-from-0068-cron-job-pack-inventory-product-decision-for","title":"Split From 0068 Cron Job Pack Inventory Product Decision For","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0070-split-from-0068-cron-job-pack-inventory-product-decision-for.md","updatedAt":"2026-02-18T22:32:14.886Z","ageHours":78.54915503485786},{"number":71,"id":"0071-split-from-0068-implement-cron-job-installation-for-builtin-","title":"Split From 0068 Implement Cron Job Installation For Builtin","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0071-split-from-0068-implement-cron-job-installation-for-builtin-.md","updatedAt":"2026-02-19T02:33:33.833Z","ageHours":74.52722527723525},{"number":72,"id":"0072-publish-a-new-jiggai-recipes-extension-release-that-includes","title":"Publish A New Jiggai Recipes Extension Release That Includes","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0072-publish-a-new-jiggai-recipes-extension-release-that-includes.md","updatedAt":"2026-02-19T23:39:29.457Z","ageHours":53.428440897216795},{"number":73,"id":"0073-clawmarket-recipe-detail-source-panel-white-bg-and-button-sizing","title":"Clawmarket Recipe Detail Source Panel White Bg And Button Sizing","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0073-clawmarket-recipe-detail-source-panel-white-bg-and-button-sizing.md","updatedAt":"2026-02-20T03:05:09.250Z","ageHours":50.0007204755995},{"number":74,"id":"0074-clawmarket-admin-users-section-list-users","title":"Clawmarket Admin Users Section List Users","owner":"test","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0074-clawmarket-admin-users-section-list-users.md","updatedAt":"2026-02-20T03:05:10.951Z","ageHours":50.00024797837999},{"number":75,"id":"0075-clawkitchen-ux-overhaul-for-recipe-team-agent-flows-release-","title":"Clawkitchen UX Overhaul For Recipe Team Agent Flows Release","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0075-clawkitchen-ux-overhaul-for-recipe-team-agent-flows-release-.md","updatedAt":"2026-02-20T21:33:24.777Z","ageHours":31.529740873548718},{"number":76,"id":"0076-fix-recipes-tickets-cli-config-workspace-default","title":"Fix Recipes Tickets CLI Config Workspace Default","owner":"lead","stage":"done","file":"/home/control/.openclaw/workspace-development-team/work/done/0076-fix-recipes-tickets-cli-config-workspace-default.md","updatedAt":"2026-02-20T22:38:13.327Z","ageHours":30.449588108859594}]}],["$L3"],"$L4"]}],"loading":null,"isPartial":false}
|
|
6
6
|
3:["$","script","script-0",{"src":"/_next/static/chunks/de9e30e86ef31e72.js","async":true}]
|
|
7
7
|
4:["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}]
|
|
8
8
|
7:null
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[39756,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/d2be314c3ece3fbe.js"],"default"]
|
|
3
3
|
3:I[37457,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/d2be314c3ece3fbe.js"],"default"]
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"uZkSG3UgZ81MwaAQa74zD","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},12714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},60526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},7367,e=>{"use strict";var t=e.i(12714),r=e.i(60526),n=e.i(50227);async function a(){let e=n.default.join(r.default.homedir(),".openclaw","openclaw.json");return JSON.parse(await t.default.readFile(e,"utf8"))}async function s(){let e=await a(),t=e.agents?.defaults?.workspace;if(!t)throw Error("agents.defaults.workspace is not set in ~/.openclaw/openclaw.json");return t}async function o(){let e=await s();return n.default.join(e,"recipes")}async function i(){let e=await s();return n.default.join(e,"notes","goals")}async function l(e){let t=r.default.homedir();if(!t)throw Error("Could not resolve home directory");return n.default.join(t,".openclaw",`workspace-${e}`)}async function u(){let e=await a(),t=e.plugins?.installs?.recipes?.installPath||e.plugins?.installs?.recipes?.sourcePath||e.plugins?.load?.paths?.[0];if(!t)throw Error("Could not determine recipes plugin install path from ~/.openclaw/openclaw.json");return n.default.join(t,"recipes","default")}e.s(["getBuiltinRecipesDir",()=>u,"getTeamWorkspaceDir",()=>l,"getWorkspaceDir",()=>s,"getWorkspaceGoalsDir",()=>i,"getWorkspaceRecipesDir",()=>o,"readOpenClawConfig",()=>a])},38858,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250),a=e.i(59756),s=e.i(61916),o=e.i(74677),i=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),f=e.i(70101),x=e.i(26937),h=e.i(10372),g=e.i(93695);e.i(52474);var w=e.i(220),m=e.i(12714),R=e.i(50227),v=e.i(89171),E=e.i(7367);function y(e,t){return R.default.resolve(e,"..",`workspace-${t}`)}function k(e){let t=e.replace(/\\/g,"/");if(!t||t.startsWith("/")||t.includes(".."))throw Error("Invalid file name");return t}async function C(e){let{searchParams:t}=new URL(e.url),r=String(t.get("teamId")??"").trim(),n=String(t.get("name")??"").trim();if(!r)return v.NextResponse.json({ok:!1,error:"teamId is required"},{status:400});if(!n)return v.NextResponse.json({ok:!1,error:"name is required"},{status:400});let a=await (0,E.readOpenClawConfig)(),s=String(a.agents?.defaults?.workspace??"").trim();if(!s)return v.NextResponse.json({ok:!1,error:"agents.defaults.workspace not set"},{status:500});let o=k(n),i=y(s,r),l=R.default.join(i,o);try{let e=await m.default.readFile(l,"utf8");return v.NextResponse.json({ok:!0,teamId:r,name:o,filePath:l,content:e})}catch(e){return v.NextResponse.json({ok:!1,error:e instanceof Error?e.message:String(e)},{status:404})}}async function j(e){let t=await e.json(),r=String(t.teamId??"").trim(),n=String(t.name??"").trim(),a="string"==typeof t.content?t.content:null;if(!r)return v.NextResponse.json({ok:!1,error:"teamId is required"},{status:400});if(!n)return v.NextResponse.json({ok:!1,error:"name is required"},{status:400});if(null===a)return v.NextResponse.json({ok:!1,error:"content is required"},{status:400});let s=await (0,E.readOpenClawConfig)(),o=String(s.agents?.defaults?.workspace??"").trim();if(!o)return v.NextResponse.json({ok:!1,error:"agents.defaults.workspace not set"},{status:500});let i=k(n),l=y(o,r),u=R.default.join(l,i);return await m.default.mkdir(R.default.dirname(u),{recursive:!0}),await m.default.writeFile(u,a,"utf8"),v.NextResponse.json({ok:!0,teamId:r,name:i,filePath:u})}e.s(["GET",()=>C,"PUT",()=>j],85706);var N=e.i(85706);let A=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/teams/file/route",pathname:"/api/teams/file",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/teams/file/route.ts",nextConfigOutput:"standalone",userland:N}),{workAsyncStorage:q,workUnitAsyncStorage:b,serverHooks:S}=A;function T(){return(0,n.patchFetch)({workAsyncStorage:q,workUnitAsyncStorage:b})}async function P(e,t,n){A.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let m="/api/teams/file/route";m=m.replace(/\/index$/,"")||"/";let R=await A.prepare(e,t,{srcPage:m,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:v,params:E,nextConfig:y,parsedUrl:k,isDraftMode:C,prerenderManifest:j,routerServerContext:N,isOnDemandRevalidate:q,revalidateOnlyGenerated:b,resolvedPathname:S,clientReferenceManifest:T,serverActionsManifest:P}=R,O=(0,i.normalizeAppPath)(m),I=!!(j.dynamicRoutes[O]||j.routes[S]),_=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,k,!1):t.end("This page could not be found"),null);if(I&&!C){let e=!!j.routes[S],t=j.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(y.experimental.adapterPath)return await _();throw new g.NoFallbackError}}let D=null;!I||A.isDev||C||(D="/index"===(D=S)?"/":D);let U=!0===A.isDev||!I,H=I&&!U;P&&T&&(0,o.setManifestsSingleton)({page:m,clientReferenceManifest:T,serverActionsManifest:P});let M=e.method||"GET",F=(0,s.getTracer)(),$=F.getActiveScopeSpan(),K={params:E,prerenderManifest:j,renderOpts:{experimental:{authInterrupts:!!y.experimental.authInterrupts},cacheComponents:!!y.cacheComponents,supportsDynamicResponse:U,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:y.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>A.onRequestError(e,t,n,a,N)},sharedContext:{buildId:v}},W=new l.NodeNextRequest(e),B=new l.NodeNextResponse(t),L=u.NextRequestAdapter.fromNodeNextRequest(W,(0,u.signalFromNodeResponse)(t));try{let o=async e=>A.handle(L,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${M} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${m}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var s,l;let u=async({previousCacheEntry:r})=>{try{if(!i&&q&&b&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await o(a);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let u=K.renderOpts.collectedTags;if(!I)return await (0,c.sendResponse)(W,B,s,K.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,n=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await A.onRequestError(e,t,{routerKind:"App Router",routePath:m,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:q})},!1,N),t}},d=await A.handleResponse({req:e,nextConfig:y,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:q,revalidateOnlyGenerated:b,responseGenerator:u,waitUntil:n.waitUntil,isMinimalMode:i});if(!I)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",q?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),C&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let g=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return i&&I||g.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||g.get("Cache-Control")||g.set("Cache-Control",(0,x.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(W,B,new Response(d.value.body,{headers:g,status:d.value.status||200})),null};$?await l($):await F.withPropagatedContext(e.headers,()=>F.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${m}`,kind:s.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},l))}catch(t){if(t instanceof g.NoFallbackError||await A.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:q})},!1,N),I)throw t;return await (0,c.sendResponse)(W,B,new Response(null,{status:500})),null}}e.s(["handler",()=>P,"patchFetch",()=>T,"routeModule",()=>A,"serverHooks",()=>S,"workAsyncStorage",()=>q,"workUnitAsyncStorage",()=>b],38858)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__055885ce._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/paths.ts","../../../node_modules/next/dist/esm/build/templates/app-route.js","../../../src/app/api/teams/file/route.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ntype OpenClawConfig = {\n agents?: { defaults?: { workspace?: string } };\n gateway?: { port?: number; auth?: { token?: string } };\n tools?: {\n agentToAgent?: {\n enabled?: boolean;\n allow?: string[];\n };\n };\n plugins?: {\n installs?: { recipes?: { installPath?: string; sourcePath?: string } };\n load?: { paths?: string[] };\n };\n};\n\nexport async function readOpenClawConfig(): Promise<OpenClawConfig> {\n const p = path.join(os.homedir(), \".openclaw\", \"openclaw.json\");\n const text = await fs.readFile(p, \"utf8\");\n return JSON.parse(text) as OpenClawConfig;\n}\n\nexport async function getWorkspaceDir() {\n const cfg = await readOpenClawConfig();\n const ws = cfg.agents?.defaults?.workspace;\n if (!ws) throw new Error(\"agents.defaults.workspace is not set in ~/.openclaw/openclaw.json\");\n return ws;\n}\n\nexport async function getWorkspaceRecipesDir() {\n const ws = await getWorkspaceDir();\n return path.join(ws, \"recipes\");\n}\n\nexport async function getWorkspaceGoalsDir() {\n const ws = await getWorkspaceDir();\n return path.join(ws, \"notes\", \"goals\");\n}\n\nexport async function getTeamWorkspaceDir(teamId: string) {\n const home = os.homedir();\n if (!home) throw new Error(\"Could not resolve home directory\");\n return path.join(home, \".openclaw\", `workspace-${teamId}`);\n}\n\nexport async function getBuiltinRecipesDir() {\n const cfg = await readOpenClawConfig();\n const p =\n cfg.plugins?.installs?.recipes?.installPath ||\n cfg.plugins?.installs?.recipes?.sourcePath ||\n cfg.plugins?.load?.paths?.[0];\n if (!p) throw new Error(\"Could not determine recipes plugin install path from ~/.openclaw/openclaw.json\");\n return path.join(p, \"recipes\", \"default\");\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/teams/file/route\",\n pathname: \"/api/teams/file\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/app/api/teams/file/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/teams/file/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { NextResponse } from \"next/server\";\nimport { readOpenClawConfig } from \"@/lib/paths\";\n\nfunction teamDirFromTeamId(baseWorkspace: string, teamId: string) {\n return path.resolve(baseWorkspace, \"..\", `workspace-${teamId}`);\n}\n\nfunction assertSafeRelative(name: string) {\n const n = name.replace(/\\\\/g, \"/\");\n if (!n || n.startsWith(\"/\") || n.includes(\"..\")) throw new Error(\"Invalid file name\");\n return n;\n}\n\nexport async function GET(req: Request) {\n const { searchParams } = new URL(req.url);\n const teamId = String(searchParams.get(\"teamId\") ?? \"\").trim();\n const name = String(searchParams.get(\"name\") ?? \"\").trim();\n if (!teamId) return NextResponse.json({ ok: false, error: \"teamId is required\" }, { status: 400 });\n if (!name) return NextResponse.json({ ok: false, error: \"name is required\" }, { status: 400 });\n\n const cfg = await readOpenClawConfig();\n const baseWorkspace = String(cfg.agents?.defaults?.workspace ?? \"\").trim();\n if (!baseWorkspace) {\n return NextResponse.json({ ok: false, error: \"agents.defaults.workspace not set\" }, { status: 500 });\n }\n\n const safe = assertSafeRelative(name);\n const teamDir = teamDirFromTeamId(baseWorkspace, teamId);\n const filePath = path.join(teamDir, safe);\n\n try {\n const content = await fs.readFile(filePath, \"utf8\");\n return NextResponse.json({ ok: true, teamId, name: safe, filePath, content });\n } catch (e: unknown) {\n return NextResponse.json(\n { ok: false, error: e instanceof Error ? e.message : String(e) },\n { status: 404 }\n );\n }\n}\n\nexport async function PUT(req: Request) {\n const body = (await req.json()) as { teamId?: string; name?: string; content?: string };\n const teamId = String(body.teamId ?? \"\").trim();\n const name = String(body.name ?? \"\").trim();\n const content = typeof body.content === \"string\" ? body.content : null;\n\n if (!teamId) return NextResponse.json({ ok: false, error: \"teamId is required\" }, { status: 400 });\n if (!name) return NextResponse.json({ ok: false, error: \"name is required\" }, { status: 400 });\n if (content === null) return NextResponse.json({ ok: false, error: \"content is required\" }, { status: 400 });\n\n const cfg = await readOpenClawConfig();\n const baseWorkspace = String(cfg.agents?.defaults?.workspace ?? \"\").trim();\n if (!baseWorkspace) {\n return NextResponse.json({ ok: false, error: \"agents.defaults.workspace not set\" }, { status: 500 });\n }\n\n const safe = assertSafeRelative(name);\n const teamDir = teamDirFromTeamId(baseWorkspace, teamId);\n const filePath = path.join(teamDir, safe);\n\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content, \"utf8\");\n return NextResponse.json({ ok: true, teamId, name: safe, filePath });\n}\n"],"names":[],"mappings":"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","ignoreList":[1]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module.exports=[59494,e=>{"use strict";function t(){let e=globalThis.__clawkitchen_api;if(!e)throw Error("ClawKitchen: OpenClaw plugin API not available. (This should only happen if Kitchen is started outside the gateway process.)");return e}e.s(["getKitchenApi",()=>t])},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},12714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},60526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},47407,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),i=e.i(61916),s=e.i(74677),o=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),p=e.i(47587),c=e.i(66012),m=e.i(70101),h=e.i(26937),g=e.i(10372),f=e.i(93695);e.i(52474);var x=e.i(220),w=e.i(12714),v=e.i(60526),R=e.i(50227),y=e.i(89171),E=e.i(59494);async function C(e){try{let t=await e.json(),r=function(e){let t=e.trim();if(!t)throw Error("agent id is required");if(!/^[a-z0-9][a-z0-9-]{0,62}$/i.test(t))throw Error("agent id must match /^[a-z0-9][a-z0-9-]{0,62}$/i");return t}(String(t.newAgentId??t.agentId??"")),a=!!t.overwrite,n=R.default.join(v.default.homedir(),".openclaw","openclaw.json");if(!n.trim())return y.NextResponse.json({ok:!1,error:"Could not resolve config path"},{status:500});let i=await w.default.readFile(n,"utf8"),s=JSON.parse(i),o=String(s?.agents?.defaults?.workspace??"").trim();if(!o)return y.NextResponse.json({ok:!1,error:"agents.defaults.workspace not set"},{status:500});let l=R.default.resolve(o,"..",`workspace-${r}`),d=Array.isArray(s?.agents?.list)?s.agents?.list:[],u=d.some(e=>String(e?.id??"").toLowerCase()===r.toLowerCase());if(u&&!a)return y.NextResponse.json({ok:!1,error:`Agent already exists: ${r}`},{status:409});let p={id:r,workspace:l,...t.model?{model:t.model}:{},identity:{..."string"==typeof t.name&&t.name.trim()?{name:t.name.trim()}:{},..."string"==typeof t.theme&&t.theme.trim()?{theme:t.theme.trim()}:{},..."string"==typeof t.emoji&&t.emoji.trim()?{emoji:t.emoji.trim()}:{},..."string"==typeof t.avatar&&t.avatar.trim()?{avatar:t.avatar.trim()}:{}}},c=u?d.map(e=>String(e?.id??"").toLowerCase()===r.toLowerCase()?p:e):[...d,p];await w.default.mkdir(l,{recursive:!0});let m=`# IDENTITY.md
|
|
2
|
+
|
|
3
|
+
- **Name:** ${String(t.name??"").trim()||r}
|
|
4
|
+
- **Creature:**
|
|
5
|
+
- **Vibe:**
|
|
6
|
+
- **Emoji:** ${String(t.emoji??"").trim()}
|
|
7
|
+
- **Avatar:** ${String(t.avatar??"").trim()}
|
|
8
|
+
`;await w.default.writeFile(R.default.join(l,"IDENTITY.md"),m,"utf8");let h={...s,agents:{...s.agents??{},list:c}},g=`${n}.tmp`,f=`${n}.bak.${new Date().toISOString().replace(/[:.]/g,"-")}`;await w.default.writeFile(g,JSON.stringify(h,null,2)+"\n","utf8"),await w.default.copyFile(n,f).catch(()=>{}),await w.default.rename(g,n);let x=(0,E.getKitchenApi)();return await x.runtime.system.runCommandWithTimeout(["openclaw","gateway","restart"],{timeoutMs:12e4}),y.NextResponse.json({ok:!0,agentId:r,workspace:l,restarted:!0})}catch(r){let e=r instanceof Error?r.message:String(r),t=/required|match \//i.test(e)?400:500;return y.NextResponse.json({ok:!1,error:e},{status:t})}}e.s(["POST",()=>C],85539);var A=e.i(85539);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/agents/add/route",pathname:"/api/agents/add",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/agents/add/route.ts",nextConfigOutput:"standalone",userland:A}),{workAsyncStorage:N,workUnitAsyncStorage:j,serverHooks:S}=k;function T(){return(0,a.patchFetch)({workAsyncStorage:N,workUnitAsyncStorage:j})}async function b(e,t,a){k.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/agents/add/route";w=w.replace(/\/index$/,"")||"/";let v=await k.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:R,params:y,nextConfig:E,parsedUrl:C,isDraftMode:A,prerenderManifest:N,routerServerContext:j,isOnDemandRevalidate:S,revalidateOnlyGenerated:T,resolvedPathname:b,clientReferenceManifest:O,serverActionsManifest:q}=v,P=(0,o.normalizeAppPath)(w),I=!!(N.dynamicRoutes[P]||N.routes[b]),_=async()=>((null==j?void 0:j.render404)?await j.render404(e,t,C,!1):t.end("This page could not be found"),null);if(I&&!A){let e=!!N.routes[b],t=N.dynamicRoutes[P];if(t&&!1===t.fallback&&!e){if(E.experimental.adapterPath)return await _();throw new f.NoFallbackError}}let $=null;!I||k.isDev||A||($="/index"===($=b)?"/":$);let H=!0===k.isDev||!I,D=I&&!H;q&&O&&(0,s.setManifestsSingleton)({page:w,clientReferenceManifest:O,serverActionsManifest:q});let U=e.method||"GET",M=(0,i.getTracer)(),F=M.getActiveScopeSpan(),K={params:y,prerenderManifest:N,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:H,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>k.onRequestError(e,t,a,n,j)},sharedContext:{buildId:R}},L=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),B=d.NextRequestAdapter.fromNodeNextRequest(L,(0,d.signalFromNodeResponse)(t));try{let s=async e=>k.handle(B,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${U} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${U} ${w}`)}),o=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var i,l;let d=async({previousCacheEntry:r})=>{try{if(!o&&S&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await s(n);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&a.waitUntil&&(a.waitUntil(l),l=void 0);let d=K.renderOpts.collectedTags;if(!I)return await (0,c.sendResponse)(L,z,i,K.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(i.headers);d&&(t[g.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,a=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,j),t}},u=await k.handleResponse({req:e,nextConfig:E,cacheKey:$,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:T,responseGenerator:d,waitUntil:a.waitUntil,isMinimalMode:o});if(!I)return null;if((null==u||null==(i=u.value)?void 0:i.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",S?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let f=(0,m.fromNodeOutgoingHttpHeaders)(u.value.headers);return o&&I||f.delete(g.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||f.get("Cache-Control")||f.set("Cache-Control",(0,h.getCacheControlHeader)(u.cacheControl)),await (0,c.sendResponse)(L,z,new Response(u.value.body,{headers:f,status:u.value.status||200})),null};F?await l(F):await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${U} ${w}`,kind:i.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},l))}catch(t){if(t instanceof f.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:P,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,j),I)throw t;return await (0,c.sendResponse)(L,z,new Response(null,{status:500})),null}}e.s(["handler",()=>b,"patchFetch",()=>T,"routeModule",()=>k,"serverHooks",()=>S,"workAsyncStorage",()=>N,"workUnitAsyncStorage",()=>j],47407)}];
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__0c01c5c7._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/kitchen-api.ts","../../../src/app/api/agents/add/route.ts","../../../node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["// NOTE: This file is compiled by Next.js.\n// Do not import `openclaw/plugin-sdk` here (it is provided by the gateway runtime, not as an npm dep).\n\ntype KitchenApi = {\n config: unknown;\n runtime: {\n system: { runCommandWithTimeout: (argv: string[], opts: { timeoutMs: number }) => Promise<{ stdout?: string; stderr?: string }> };\n };\n};\n\nexport function getKitchenApi(): KitchenApi {\n const api = (globalThis as unknown as { __clawkitchen_api?: KitchenApi }).__clawkitchen_api;\n if (!api) {\n throw new Error(\n \"ClawKitchen: OpenClaw plugin API not available. (This should only happen if Kitchen is started outside the gateway process.)\",\n );\n }\n return api;\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { NextResponse } from \"next/server\";\n\nimport { getKitchenApi } from \"@/lib/kitchen-api\";\n\nfunction normalizeAgentId(id: string) {\n const s = id.trim();\n if (!s) throw new Error(\"agent id is required\");\n if (!/^[a-z0-9][a-z0-9-]{0,62}$/i.test(s)) {\n throw new Error(\"agent id must match /^[a-z0-9][a-z0-9-]{0,62}$/i\");\n }\n return s;\n}\n\nexport async function POST(req: Request) {\n try {\n const body = (await req.json()) as {\n newAgentId?: string;\n agentId?: string; // legacy/compat: some callers send agentId\n name?: string;\n emoji?: string;\n theme?: string;\n avatar?: string;\n model?: string;\n overwrite?: boolean;\n };\n\n const newAgentId = normalizeAgentId(String(body.newAgentId ?? body.agentId ?? \"\"));\n const overwrite = Boolean(body.overwrite);\n\n const configPath = path.join(os.homedir(), \".openclaw\", \"openclaw.json\");\n if (!configPath.trim()) {\n return NextResponse.json({ ok: false, error: \"Could not resolve config path\" }, { status: 500 });\n }\n\n const raw = await fs.readFile(configPath, \"utf8\");\n const cfg = JSON.parse(raw) as {\n agents?: { defaults?: { workspace?: string }; list?: Array<Record<string, unknown>> };\n };\n\n const baseWorkspace = String(cfg?.agents?.defaults?.workspace ?? \"\").trim();\n if (!baseWorkspace) {\n return NextResponse.json({ ok: false, error: \"agents.defaults.workspace not set\" }, { status: 500 });\n }\n\n const newWorkspace = path.resolve(baseWorkspace, \"..\", `workspace-${newAgentId}`);\n\n const agentsList: Array<Record<string, unknown>> = Array.isArray(cfg?.agents?.list)\n ? (cfg.agents?.list as Array<Record<string, unknown>>)\n : [];\n const exists = agentsList.some((a) => String(a?.id ?? \"\").toLowerCase() === newAgentId.toLowerCase());\n if (exists && !overwrite) {\n return NextResponse.json({ ok: false, error: `Agent already exists: ${newAgentId}` }, { status: 409 });\n }\n\n const nextEntry: Record<string, unknown> = {\n id: newAgentId,\n workspace: newWorkspace,\n ...(body.model ? { model: body.model } : {}),\n identity: {\n ...(typeof body.name === \"string\" && body.name.trim() ? { name: body.name.trim() } : {}),\n ...(typeof body.theme === \"string\" && body.theme.trim() ? { theme: body.theme.trim() } : {}),\n ...(typeof body.emoji === \"string\" && body.emoji.trim() ? { emoji: body.emoji.trim() } : {}),\n ...(typeof body.avatar === \"string\" && body.avatar.trim() ? { avatar: body.avatar.trim() } : {}),\n },\n };\n\n const nextList = exists\n ? agentsList.map((a) => (String(a?.id ?? \"\").toLowerCase() === newAgentId.toLowerCase() ? nextEntry : a))\n : [...agentsList, nextEntry];\n\n // Ensure workspace directory exists and seed IDENTITY.md for clarity.\n await fs.mkdir(newWorkspace, { recursive: true });\n const identityMd = `# IDENTITY.md\\n\\n- **Name:** ${String(body.name ?? \"\").trim() || newAgentId}\\n- **Creature:**\\n- **Vibe:**\\n- **Emoji:** ${String(body.emoji ?? \"\").trim()}\\n- **Avatar:** ${String(body.avatar ?? \"\").trim()}\\n`;\n await fs.writeFile(path.join(newWorkspace, \"IDENTITY.md\"), identityMd, \"utf8\");\n\n // Persist to ~/.openclaw/openclaw.json\n const nextCfg = {\n ...cfg,\n agents: {\n ...(cfg.agents ?? {}),\n list: nextList,\n },\n };\n\n // Write atomically.\n const tmpPath = `${configPath}.tmp`;\n const bakPath = `${configPath}.bak.${new Date().toISOString().replace(/[:.]/g, \"-\")}`;\n await fs.writeFile(tmpPath, JSON.stringify(nextCfg, null, 2) + \"\\n\", \"utf8\");\n await fs.copyFile(configPath, bakPath).catch(() => {});\n await fs.rename(tmpPath, configPath);\n\n // Restart gateway so the new agent is live.\n const api = getKitchenApi();\n await api.runtime.system.runCommandWithTimeout([\"openclaw\", \"gateway\", \"restart\"], { timeoutMs: 120000 });\n\n return NextResponse.json({ ok: true, agentId: newAgentId, workspace: newWorkspace, restarted: true });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Prefer 400 for validation/input errors; otherwise 500.\n const status = /required|match \\//i.test(msg) ? 400 : 500;\n return NextResponse.json({ ok: false, error: msg }, { status });\n }\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/agents/add/route\",\n pathname: \"/api/agents/add\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/app/api/agents/add/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/agents/add/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":[],"mappings":"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","ignoreList":[2]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},12714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},60526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},7367,e=>{"use strict";var t=e.i(12714),r=e.i(60526),a=e.i(50227);async function n(){let e=a.default.join(r.default.homedir(),".openclaw","openclaw.json");return JSON.parse(await t.default.readFile(e,"utf8"))}async function o(){let e=await n(),t=e.agents?.defaults?.workspace;if(!t)throw Error("agents.defaults.workspace is not set in ~/.openclaw/openclaw.json");return t}async function i(){let e=await o();return a.default.join(e,"recipes")}async function s(){let e=await o();return a.default.join(e,"notes","goals")}async function l(e){let t=r.default.homedir();if(!t)throw Error("Could not resolve home directory");return a.default.join(t,".openclaw",`workspace-${e}`)}async function u(){let e=await n(),t=e.plugins?.installs?.recipes?.installPath||e.plugins?.installs?.recipes?.sourcePath||e.plugins?.load?.paths?.[0];if(!t)throw Error("Could not determine recipes plugin install path from ~/.openclaw/openclaw.json");return a.default.join(t,"recipes","default")}e.s(["getBuiltinRecipesDir",()=>u,"getTeamWorkspaceDir",()=>l,"getWorkspaceDir",()=>o,"getWorkspaceGoalsDir",()=>s,"getWorkspaceRecipesDir",()=>i,"readOpenClawConfig",()=>n])},76509,e=>{"use strict";var t=e.i(7367);async function r(){let e=await (0,t.readOpenClawConfig)(),r=e.gateway?.port??18789,a=e.gateway?.auth?.token;if(!a)throw Error("Missing gateway token (gateway.auth.token in ~/.openclaw/openclaw.json)");return{baseUrl:`http://127.0.0.1:${r}`,token:a}}async function a(e){let{baseUrl:t,token:a}=await r(),n=await fetch(`${t}/tools/invoke`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${a}`},body:JSON.stringify(e)}),o=await n.json();if(!n.ok||!o.ok)throw Error("object"==typeof o.error&&o.error?.message||("string"==typeof o.error?o.error:null)||`tools/invoke failed (${n.status})`);return o.result}async function n(){let e=await a({tool:"gateway",args:{action:"config.get",raw:"{}"}}),t=e?.content?.find(e=>"text"===e.type)?.text;if(!t)throw Error("gateway config.get: missing text payload");let r=JSON.parse(t),n=String(r?.result?.raw??""),o=String(r?.result?.hash??"");if(!n)throw Error("gateway config.get: missing result.raw");if(!o)throw Error("gateway config.get: missing result.hash");return{raw:n,hash:o}}async function o(e,t){let{hash:r}=await n();return a({tool:"gateway",args:{action:"config.patch",raw:JSON.stringify(e,null,2),baseHash:r,note:t??"ClawKitchen settings update",restartDelayMs:1e3}})}e.s(["gatewayConfigGet",()=>n,"gatewayConfigPatch",()=>o,"toolsInvoke",()=>a])},34166,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),o=e.i(61916),i=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(26937),g=e.i(10372),w=e.i(93695);e.i(52474);var x=e.i(220),y=e.i(89171),m=e.i(76509),v=e.i(12714),R=e.i(50227);async function E(e){let t=String((await e.json()).id??"").trim();if(!t)return y.NextResponse.json({ok:!1,error:"id is required"},{status:400});let r=await (0,m.toolsInvoke)({tool:"cron",args:{action:"remove",jobId:t}}),a=[];try{let e=await (0,m.toolsInvoke)({tool:"gateway",args:{action:"config.get",raw:"{}"}}),r=e?.content?.find(e=>"text"===e.type)?.text??"",n=r?JSON.parse(r):null,o=String(n?.result?.raw??""),i=o?JSON.parse(o):null,s=String(i?.agents?.defaults?.workspace??"").trim();if(s){let e=R.default.resolve(s,"..");for(let r of(await v.default.readdir(e,{withFileTypes:!0}))){if(!r.isDirectory()||!r.name.startsWith("workspace-"))continue;let n=r.name.replace(/^workspace-/,""),o=R.default.join(e,r.name,"team.json"),i=R.default.join(e,r.name,"notes","cron-jobs.json");try{await v.default.stat(o)}catch{continue}let s=!1,l=[];try{let e=await v.default.readFile(i,"utf8"),r=JSON.parse(e);if(!r||1!==r.version||!r.entries)continue;for(let[e,a]of Object.entries(r.entries))String(a?.installedCronId??"").trim()!==t||a.orphaned||(r.entries[e]={...a,orphaned:!0},s=!0,l.push(e));s&&(await v.default.writeFile(i,JSON.stringify(r,null,2)+"\n","utf8"),a.push({teamId:n,mappingPath:i,keys:l}))}catch{}}}}catch{}return y.NextResponse.json({ok:!0,id:t,result:r,orphanedIn:a})}e.s(["POST",()=>E],45040);var C=e.i(45040);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/cron/delete/route",pathname:"/api/cron/delete",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/cron/delete/route.ts",nextConfigOutput:"standalone",userland:C}),{workAsyncStorage:j,workUnitAsyncStorage:S,serverHooks:b}=k;function O(){return(0,a.patchFetch)({workAsyncStorage:j,workUnitAsyncStorage:S})}async function N(e,t,a){k.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/cron/delete/route";y=y.replace(/\/index$/,"")||"/";let m=await k.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!m)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,params:R,nextConfig:E,parsedUrl:C,isDraftMode:j,prerenderManifest:S,routerServerContext:b,isOnDemandRevalidate:O,revalidateOnlyGenerated:N,resolvedPathname:A,clientReferenceManifest:P,serverActionsManifest:T}=m,q=(0,s.normalizeAppPath)(y),D=!!(S.dynamicRoutes[q]||S.routes[A]),I=async()=>((null==b?void 0:b.render404)?await b.render404(e,t,C,!1):t.end("This page could not be found"),null);if(D&&!j){let e=!!S.routes[A],t=S.dynamicRoutes[q];if(t&&!1===t.fallback&&!e){if(E.experimental.adapterPath)return await I();throw new w.NoFallbackError}}let _=null;!D||k.isDev||j||(_="/index"===(_=A)?"/":_);let H=!0===k.isDev||!D,U=D&&!H;T&&P&&(0,i.setManifestsSingleton)({page:y,clientReferenceManifest:P,serverActionsManifest:T});let M=e.method||"GET",$=(0,o.getTracer)(),F=$.getActiveScopeSpan(),K={params:R,prerenderManifest:S,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:H,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>k.onRequestError(e,t,a,n,b)},sharedContext:{buildId:v}},J=new l.NodeNextRequest(e),B=new l.NodeNextResponse(t),W=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t));try{let i=async e=>k.handle(W,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${M} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${y}`)}),s=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var o,l;let u=async({previousCacheEntry:r})=>{try{if(!s&&O&&N&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await i(n);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&a.waitUntil&&(a.waitUntil(l),l=void 0);let u=K.renderOpts.collectedTags;if(!D)return await (0,p.sendResponse)(J,B,o,K.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(o.headers);u&&(t[g.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,a=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:O})},!1,b),t}},d=await k.handleResponse({req:e,nextConfig:E,cacheKey:_,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:N,responseGenerator:u,waitUntil:a.waitUntil,isMinimalMode:s});if(!D)return null;if((null==d||null==(o=d.value)?void 0:o.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",O?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),j&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let w=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return s&&D||w.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||w.get("Cache-Control")||w.set("Cache-Control",(0,h.getCacheControlHeader)(d.cacheControl)),await (0,p.sendResponse)(J,B,new Response(d.value.body,{headers:w,status:d.value.status||200})),null};F?await l(F):await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${y}`,kind:o.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},l))}catch(t){if(t instanceof w.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:q,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:O})},!1,b),D)throw t;return await (0,p.sendResponse)(J,B,new Response(null,{status:500})),null}}e.s(["handler",()=>N,"patchFetch",()=>O,"routeModule",()=>k,"serverHooks",()=>b,"workAsyncStorage",()=>j,"workUnitAsyncStorage",()=>S],34166)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__1398a33a._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/paths.ts","../../../src/lib/gateway.ts","../../../node_modules/next/dist/esm/build/templates/app-route.js","../../../src/app/api/cron/delete/route.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ntype OpenClawConfig = {\n agents?: { defaults?: { workspace?: string } };\n gateway?: { port?: number; auth?: { token?: string } };\n tools?: {\n agentToAgent?: {\n enabled?: boolean;\n allow?: string[];\n };\n };\n plugins?: {\n installs?: { recipes?: { installPath?: string; sourcePath?: string } };\n load?: { paths?: string[] };\n };\n};\n\nexport async function readOpenClawConfig(): Promise<OpenClawConfig> {\n const p = path.join(os.homedir(), \".openclaw\", \"openclaw.json\");\n const text = await fs.readFile(p, \"utf8\");\n return JSON.parse(text) as OpenClawConfig;\n}\n\nexport async function getWorkspaceDir() {\n const cfg = await readOpenClawConfig();\n const ws = cfg.agents?.defaults?.workspace;\n if (!ws) throw new Error(\"agents.defaults.workspace is not set in ~/.openclaw/openclaw.json\");\n return ws;\n}\n\nexport async function getWorkspaceRecipesDir() {\n const ws = await getWorkspaceDir();\n return path.join(ws, \"recipes\");\n}\n\nexport async function getWorkspaceGoalsDir() {\n const ws = await getWorkspaceDir();\n return path.join(ws, \"notes\", \"goals\");\n}\n\nexport async function getTeamWorkspaceDir(teamId: string) {\n const home = os.homedir();\n if (!home) throw new Error(\"Could not resolve home directory\");\n return path.join(home, \".openclaw\", `workspace-${teamId}`);\n}\n\nexport async function getBuiltinRecipesDir() {\n const cfg = await readOpenClawConfig();\n const p =\n cfg.plugins?.installs?.recipes?.installPath ||\n cfg.plugins?.installs?.recipes?.sourcePath ||\n cfg.plugins?.load?.paths?.[0];\n if (!p) throw new Error(\"Could not determine recipes plugin install path from ~/.openclaw/openclaw.json\");\n return path.join(p, \"recipes\", \"default\");\n}\n","import { readOpenClawConfig } from \"@/lib/paths\";\n\ntype ToolsInvokeRequest = {\n tool: string;\n action?: string;\n args?: Record<string, unknown>;\n sessionKey?: string;\n dryRun?: boolean;\n};\n\ntype ToolsInvokeResponse = {\n ok: boolean;\n result?: unknown;\n error?: { message?: string } | string;\n};\n\ntype GatewayConfigGetResult = {\n path: string;\n exists: boolean;\n raw: string;\n hash: string;\n};\n\ntype ToolTextEnvelope = {\n ok: boolean;\n result: GatewayConfigGetResult;\n};\n\nasync function getGatewayBaseUrlAndToken() {\n // ClawKitchen runs in-process with the OpenClaw Gateway (as a plugin), so we can read\n // the gateway port/token from the loaded config.\n const cfg = await readOpenClawConfig();\n const port = cfg.gateway?.port ?? 18789;\n const token = cfg.gateway?.auth?.token;\n if (!token) throw new Error(\"Missing gateway token (gateway.auth.token in ~/.openclaw/openclaw.json)\");\n\n const baseUrl = `http://127.0.0.1:${port}`;\n return { baseUrl, token };\n}\n\nexport async function toolsInvoke<T = unknown>(req: ToolsInvokeRequest): Promise<T> {\n const { baseUrl, token } = await getGatewayBaseUrlAndToken();\n\n const res = await fetch(`${baseUrl}/tools/invoke`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(req),\n });\n\n const json = (await res.json()) as ToolsInvokeResponse;\n if (!res.ok || !json.ok) {\n const msg =\n (typeof json.error === \"object\" && json.error?.message) ||\n (typeof json.error === \"string\" ? json.error : null) ||\n `tools/invoke failed (${res.status})`;\n throw new Error(msg);\n }\n\n return json.result as T;\n}\n\nexport async function gatewayConfigGet(): Promise<{ raw: string; hash: string }> {\n const toolResult = await toolsInvoke<{ content: Array<{ type: string; text?: string }> }>({\n tool: \"gateway\",\n args: { action: \"config.get\", raw: \"{}\" },\n });\n\n const text = toolResult?.content?.find((c) => c.type === \"text\")?.text;\n if (!text) throw new Error(\"gateway config.get: missing text payload\");\n\n const parsed = JSON.parse(text) as ToolTextEnvelope;\n const raw = String(parsed?.result?.raw ?? \"\");\n const hash = String(parsed?.result?.hash ?? \"\");\n if (!raw) throw new Error(\"gateway config.get: missing result.raw\");\n if (!hash) throw new Error(\"gateway config.get: missing result.hash\");\n return { raw, hash };\n}\n\nexport async function gatewayConfigPatch(patch: unknown, note?: string) {\n const { hash } = await gatewayConfigGet();\n const raw = JSON.stringify(patch, null, 2);\n\n return toolsInvoke({\n tool: \"gateway\",\n args: {\n action: \"config.patch\",\n raw,\n baseHash: hash,\n note: note ?? \"ClawKitchen settings update\",\n restartDelayMs: 1000,\n },\n });\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/cron/delete/route\",\n pathname: \"/api/cron/delete\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/app/api/cron/delete/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/cron/delete/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","import { NextResponse } from \"next/server\";\nimport { toolsInvoke } from \"@/lib/gateway\";\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\ntype MappingStateV1 = {\n version: 1;\n entries: Record<string, { installedCronId: string; orphaned?: boolean }>;\n};\n\nexport async function POST(req: Request) {\n const body = (await req.json()) as { id?: string };\n const id = String(body.id ?? \"\").trim();\n if (!id) return NextResponse.json({ ok: false, error: \"id is required\" }, { status: 400 });\n\n const result = await toolsInvoke({ tool: \"cron\", args: { action: \"remove\", jobId: id } });\n\n // Best-effort provenance cleanup: mark any mapping entry that references this cron id as orphaned.\n // Source of truth is team workspaces' notes/cron-jobs.json written at scaffold time.\n const orphanedIn: Array<{ teamId: string; mappingPath: string; keys: string[] }> = [];\n\n try {\n // Find base workspace path via gateway config.\n const cfg = await toolsInvoke<{ content: Array<{ type: string; text?: string }> }>({\n tool: \"gateway\",\n args: { action: \"config.get\", raw: \"{}\" },\n });\n const cfgText = cfg?.content?.find((c) => c.type === \"text\")?.text ?? \"\";\n const env = cfgText ? (JSON.parse(cfgText) as { result?: { raw?: string } }) : null;\n const raw = String(env?.result?.raw ?? \"\");\n const parsedRaw = raw ? (JSON.parse(raw) as { agents?: { defaults?: { workspace?: string } } }) : null;\n const baseWorkspace = String(parsedRaw?.agents?.defaults?.workspace ?? \"\").trim();\n\n if (baseWorkspace) {\n const baseHome = path.resolve(baseWorkspace, \"..\");\n const entries = await fs.readdir(baseHome, { withFileTypes: true });\n\n for (const ent of entries) {\n if (!ent.isDirectory()) continue;\n if (!ent.name.startsWith(\"workspace-\")) continue;\n\n const teamId = ent.name.replace(/^workspace-/, \"\");\n const teamJsonPath = path.join(baseHome, ent.name, \"team.json\");\n const mappingPath = path.join(baseHome, ent.name, \"notes\", \"cron-jobs.json\");\n\n try {\n await fs.stat(teamJsonPath);\n } catch {\n continue;\n }\n\n let changed = false;\n const keys: string[] = [];\n try {\n const rawMapping = await fs.readFile(mappingPath, \"utf8\");\n const mapping = JSON.parse(rawMapping) as MappingStateV1;\n if (!mapping || mapping.version !== 1 || !mapping.entries) continue;\n\n for (const [k, v] of Object.entries(mapping.entries)) {\n if (String(v?.installedCronId ?? \"\").trim() === id && !v.orphaned) {\n mapping.entries[k] = { ...v, orphaned: true };\n changed = true;\n keys.push(k);\n }\n }\n\n if (changed) {\n await fs.writeFile(mappingPath, JSON.stringify(mapping, null, 2) + \"\\n\", \"utf8\");\n orphanedIn.push({ teamId, mappingPath, keys });\n }\n } catch {\n // ignore\n }\n }\n }\n } catch {\n // ignore\n }\n\n return NextResponse.json({ ok: true, id, result, orphanedIn });\n}\n"],"names":[],"mappings":"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","ignoreList":[2]}
|