@jiggai/kitchen 0.3.27 → 0.3.28
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/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.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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/channels.html +2 -2
- package/.next/server/app/channels.rsc +2 -2
- package/.next/server/app/channels.segments/_full.segment.rsc +2 -2
- 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/goals/new.html +2 -2
- package/.next/server/app/goals/new.rsc +2 -2
- package/.next/server/app/goals/new.segments/_full.segment.rsc +2 -2
- 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.html +1 -1
- package/.next/server/app/goals.rsc +2 -2
- package/.next/server/app/goals.segments/_full.segment.rsc +2 -2
- 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/settings.html +1 -1
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- 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/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__162d7d9d._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__162d7d9d._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__255506f2._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__255506f2._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js.map +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 → xL1Ph-1X9rdYxDgzULIJA}/_buildManifest.js +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 → xL1Ph-1X9rdYxDgzULIJA}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 → xL1Ph-1X9rdYxDgzULIJA}/_ssgManifest.js +0 -0
package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[90736,e=>{"use strict";var t=e.i(47909),r=e.i(74017),o=e.i(96250),n=e.i(59756),a=e.i(61916),i=e.i(74677),s=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),w=e.i(26937),m=e.i(10372),g=e.i(93695);e.i(52474);var h=e.i(220),y=e.i(89171),k=e.i(66680),v=e.i(12714),A=e.i(50227),S=e.i(74533),I=e.i(85067),b=e.i(41674),E=e.i(40317),j=e.i(76509),R=e.i(5003),x=e.i(7367),C=e.i(63715),O=e.i(56995);let N=A.default.join("shared-context","workflow-runs");function _(e){let t=String(e??"").trim();if(!t)throw Error("run id is required");if(!/^[A-Za-z0-9][A-Za-z0-9-]{0,120}$/.test(t))throw Error("Invalid run id. Use letters, numbers, and dashes.");return t}async function q(e,t){(0,O.assertSafeWorkflowId)(t);let r=await (0,x.getTeamWorkspaceDir)(e);return A.default.join(r,N)}function T(e){return`${e}.run.json`}async function $(e,t){let r=(0,O.assertSafeWorkflowId)(t),o=await q(e,r),n=[];try{for(let t of(await v.default.readdir(o,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name).sort()){let a=A.default.join(o,t,"run.json");try{let o=await v.default.readFile(a,"utf8"),i=JSON.parse(o);B(e,r,i,t).workflowId===r&&n.push(t)}catch{}}}catch{}try{let{files:t}=await (0,C.readdirFiles)(o,".run.json",!0);for(let a of t){let t=a.replace(/\.run\.json$/i,"");try{let i=await v.default.readFile(A.default.join(o,a),"utf8"),s=JSON.parse(i);B(e,r,s,t).workflowId===r&&n.push(t)}catch{}}}catch{}try{let e=A.default.join(o,r),{files:t}=await (0,C.readdirFiles)(e,".run.json",!0);for(let e of t)n.push(e.replace(/\.run\.json$/i,""))}catch{}return{ok:!0,dir:o,runIds:Array.from(new Set(n)).sort().reverse()}}async function P(e,t,r){let o=(0,O.assertSafeWorkflowId)(t),n=_(r),a=await q(e,o),i=A.default.join(a,n,"run.json");try{let t=await v.default.readFile(i,"utf8"),r=JSON.parse(t),s=B(e,o,r,n);if(Array.isArray(s.nodes)&&s.nodes.length){let e=A.default.join(a,n,"node-outputs"),t=[];try{t=await v.default.readdir(e)}catch{t=[]}let r=new Map;for(let o of t.slice().sort()){let t=o.match(/-([^/]+)\.json$/);if(!t)continue;let n=t[1];if(!n)continue;let a=r.get(n)??[];a.push(A.default.join(e,o)),r.set(n,a)}await Promise.all(s.nodes.map(async e=>{if(!e||"object"!=typeof e||void 0!==e.output)return;let t=r.get(e.nodeId);if(!t||!t.length)return;let o=t.shift();if(o)try{let t=await v.default.readFile(o,"utf8");e.output=JSON.parse(t)}catch{}}))}return{ok:!0,path:i,run:s}}catch(e){if(!(e&&"object"==typeof e&&"ENOENT"===e.code))throw e}let s=A.default.join(a,T(n));try{let t=await v.default.readFile(s,"utf8"),r=JSON.parse(t);return{ok:!0,path:s,run:B(e,o,r,n)}}catch(t){if(t&&"object"==typeof t&&"ENOENT"===t.code){let t=A.default.join(a,o,T(n)),r=JSON.parse(await v.default.readFile(t,"utf8"));return{ok:!0,path:t,run:B(e,o,r,n)}}throw t}}async function F(e,t,r){let o=(0,O.assertSafeWorkflowId)(t),n=_(r.id),a=await q(e,o);await v.default.mkdir(a,{recursive:!0});let i=A.default.join(a,T(n)),s=i;try{let e=await v.default.readFile(i,"utf8"),t=JSON.parse(e);if(t&&"object"==typeof t&&!Array.isArray(t)&&"runId"in t&&!("schema"in t)){let e=A.default.join(a,o);await v.default.mkdir(e,{recursive:!0}),s=A.default.join(e,T(n))}}catch{}let l={...r,schema:"clawkitchen.workflow-run.v1",id:n,workflowId:o,teamId:e};return await v.default.writeFile(s,JSON.stringify(l,null,2)+"\n","utf8"),{ok:!0,path:s}}function B(e,t,r,o){if(r&&"object"==typeof r&&"clawkitchen.workflow-run.v1"===r.schema)return r;if(r&&"object"==typeof r&&"runId"in r&&"workflow"in r){let n=r.workflow&&"object"==typeof r.workflow?r.workflow:{},a="string"==typeof n.file?n.file:"",i=a?A.default.basename(a).replace(/\.workflow\.json$/i,""):"",s="string"==typeof n.id&&n.id?n.id:i||t,l=String(r.status??""),d="awaiting_approval"===l?"waiting_for_approval":"completed"===l?"success":"rejected"===l||"error"===l?"error":"canceled"===l?"canceled":"running",u=Array.isArray(r.nodeResults)?r.nodeResults.map(e=>{if(!e||"object"!=typeof e)return null;let t="string"==typeof e.nodeId?e.nodeId:"";if(!t)return null;let r=String(e.status??"pending"),o="awaiting_approval"===r?"waiting":"completed"===r?"success":"error"===r?"error":r,n=["pending","running","waiting","success","error","skipped"].includes(o)?o:"pending",a="string"==typeof e.error?e.error:e.error&&"object"==typeof e.error&&"message"in e.error?{message:String(e.error.message??"")}:void 0,i="string"==typeof e.startedAt?e.startedAt:void 0,s="string"==typeof e.endedAt?e.endedAt:void 0;return{nodeId:t,status:n,...i?{startedAt:i}:{},...s?{endedAt:s}:{},...void 0!==e.output?{output:e.output}:{},...void 0!==a?{error:a}:{}}}).filter(e=>null!==e):void 0;return{schema:"clawkitchen.workflow-run.v1",id:"string"==typeof r.runId?r.runId:o,workflowId:s,teamId:e,startedAt:"string"==typeof r.createdAt?r.createdAt:new Date().toISOString(),endedAt:("success"===d||"error"===d||"canceled"===d)&&"string"==typeof r.updatedAt?r.updatedAt:void 0,status:d,summary:"Executed by workflow runner",nodes:u}}return{schema:"clawkitchen.workflow-run.v1",id:o,workflowId:t,teamId:e,startedAt:new Date().toISOString(),status:"error",summary:"Malformed run file"}}function D(){return new Date().toISOString()}async function M(e,t,r){let o=(0,x.assertSafeRelativeFileName)(t),n=await (0,x.getTeamWorkspaceDir)(e),a=A.default.join(n,o);return await v.default.mkdir(A.default.dirname(a),{recursive:!0}),await v.default.appendFile(a,r,"utf8"),{full:a}}async function U({workflow:e}){let t=e.meta&&"object"==typeof e.meta?e.meta:{},r="string"==typeof t.approvalChannel?t.approvalChannel.trim():"";if(!r)return{provider:null,target:null};if(r.includes(":")){let[e,t]=r.split(":",2);return{provider:e||null,target:t||null}}return{provider:"telegram",target:r}}async function H(e){if(!e)return}function W(e){return Array.isArray(e)?e.map(e=>String(e??"").trim()).filter(Boolean):[]}async function K({command:e,argv:t,cwd:r,timeoutMs:o}){let n=t&&t.length?t:e.split(/\s+/).filter(Boolean),a=n[0],i=n.slice(1);return await new Promise((e,t)=>{let n=(0,S.spawn)(a,i,{cwd:r,shell:!1,stdio:["ignore","pipe","pipe"]}),s="",l="";n.stdout?.on("data",e=>{s.length<65536&&(s+=e.toString("utf8").slice(0,65536-s.length))}),n.stderr?.on("data",e=>{l.length<65536&&(l+=e.toString("utf8").slice(0,65536-l.length))});let d=setTimeout(()=>{n.kill("SIGKILL")},Math.max(0,o));n.on("error",e=>{clearTimeout(d),t(e)}),n.on("close",(t,r)=>{clearTimeout(d),e({stdout:s,stderr:l,exitCode:t,signal:r})})})}async function J({teamId:e,workflow:t,run:r,nodeId:o,startedAt:n,endedAt:a}){let i=Array.isArray(t.nodes)?t.nodes.find(e=>e.id===o):void 0,s=i?.config&&"object"==typeof i.config?i.config:{},l="string"==typeof s.tool&&s.tool.trim()?s.tool.trim():"(unknown)",d=s.args&&"object"==typeof s.args?s.args:{},u={date:a,"run.id":r.id,"workflow.id":t.id,"workflow.name":t.name||t.id};if("fs.append"===l){let t="string"==typeof d.path?d.path:"",r="string"==typeof d.content?d.content:"";if(!t)throw Error("fs.append requires args.path");if(!r)throw Error("fs.append requires args.content");let i=function(e,t){let r=e;for(let[e,o]of Object.entries(t))r=r.replaceAll(`{{${e}}}`,o);return r}(r,u),{full:s}=await M(e,t,i);return{nodeId:o,status:"success",startedAt:n,endedAt:a,output:{tool:l,appendedTo:s,bytes:i.length}}}if("runtime.exec"===l){var c;let r,i,u,p,f,w,m,g=(p=W((u=(c=t.meta)&&"object"==typeof c&&!Array.isArray(c)?t.meta:{}).execAllowBins),f=W(u.execAllowCommands),w=W(s.execAllowBins),m=W(s.execAllowCommands),{allowBins:new Set([...p,...w]),allowCommands:new Set([...f,...m]),host:String(s.execHost??u.execHost??"gateway"),security:String(s.execSecurity??u.execSecurity??"allowlist"),ask:String(s.execAsk??u.execAsk??"on-miss"),timeout:Number(s.execTimeoutSeconds??u.execTimeoutSeconds??300)}),{command:h,bin:y,argv:k}=function(e){let t=Array.isArray(e.commandArray)?e.commandArray:Array.isArray(e.command)?e.command:null;if(t&&t.length){let e=t.map(e=>String(e??"").trim()).filter(Boolean);if(!e.length)throw Error("runtime.exec requires a non-empty command");return{command:e.join(" "),bin:A.default.basename(e[0]),argv:e}}let r=String(e.command??"").trim();if(!r)throw Error("runtime.exec requires args.command");let o=r.split(/\s+/)[0]||"";return{command:r,bin:A.default.basename(o)}}(d);if(g.allowCommands.size&&!g.allowCommands.has(h))throw Error(`runtime.exec command not allowlisted: ${h}`);if(!g.allowCommands.size&&(0===g.allowBins.size||!g.allowBins.has(y)))throw Error(`runtime.exec bin not allowlisted: ${y} (set workflow.meta.execAllowBins or node.config.execAllowBins)`);let v="string"==typeof d.cwd?d.cwd:"string"==typeof d.workdir?d.workdir:"";if(v){let t=await (0,x.getTeamWorkspaceDir)(e),o=A.default.resolve(t,v);if(!o.startsWith(t+A.default.sep)&&o!==t)throw Error("runtime.exec cwd must be within the team workspace");r=o}if("1"!==process.env.KITCHEN_ENABLE_WORKFLOW_RUNTIME_EXEC)throw Error("Tool not available: exec");let S=(process.env.KITCHEN_WORKFLOW_EXEC_BACKEND||"gateway-first").trim();if("local"===S)i=await K({command:h,argv:k,cwd:r,timeoutMs:1e3*g.timeout});else try{i=await (0,j.toolsInvoke)({tool:"exec",args:{command:h,workdir:r,timeout:g.timeout,host:g.host,security:g.security,ask:g.ask}})}catch(e){if("gateway-first"===S&&/Tool not available:\s*exec/i.test((0,E.errorMessage)(e)))i=await K({command:h,argv:k,cwd:r,timeoutMs:1e3*g.timeout});else throw e}return{nodeId:o,status:"success",startedAt:n,endedAt:a,output:{tool:l,command:h,result:i}}}return{nodeId:o,status:"success",startedAt:n,endedAt:a,output:{tool:l,result:"(no-op: tool not implemented)"}}}async function L({teamId:e,workflow:t,run:r,approvalNodeId:o,decidedAt:n}){let a=Array.isArray(t.nodes)?t.nodes:[],i=a.findIndex(e=>e.id===o);if(i<0)return r;let s=Array.isArray(r.nodes)?await Promise.all(r.nodes.map(async o=>{let s=a.findIndex(e=>e.id===o.nodeId);if(!(s>=0&&s>i)||"pending"!==o.status)return o;let l=s>=0?a[s]:void 0,d=o.startedAt??n;if(l?.type==="tool")try{return await J({teamId:e,workflow:t,run:r,nodeId:o.nodeId,startedAt:d,endedAt:n})}catch(e){return{...o,status:"error",startedAt:d,endedAt:n,output:{error:(0,E.errorMessage)(e)}}}return{...o,status:"success",startedAt:d,endedAt:n,output:o.output??{note:"(resumed after approval)"}}})):[];return{...r,nodes:s}}async function z(e){return(0,b.handleWorkflowRunsGet)(e,P,$)}async function G(e){let t=await (0,I.parseJsonBody)(e);if(t instanceof y.NextResponse)return t;let{body:r}=t,o=String(r.teamId??"").trim(),n=String(r.workflowId??"").trim(),a=String(r.mode??"").trim(),i=String(r.action??"").trim(),s=a||"enqueue",l=String(r.runId??"").trim(),d="string"==typeof r.note?r.note:void 0,u="string"==typeof r.decidedBy?r.decidedBy:void 0;if(!o)return y.NextResponse.json({ok:!1,error:"teamId is required"},{status:400});if(!n)return y.NextResponse.json({ok:!1,error:"workflowId is required"},{status:400});try{if(i){if(!l)return y.NextResponse.json({ok:!1,error:"runId is required for action"},{status:400});if(!["approve","request_changes","cancel"].includes(i))return y.NextResponse.json({ok:!1,error:`Unsupported action: ${i}`},{status:400});let e=(await P(o,n,l)).run,t=e.approval?.nodeId||(Array.isArray(e.nodes)?e.nodes.find(e=>"waiting"===e.status)?.nodeId:void 0);if(!t)return y.NextResponse.json({ok:!1,error:"Run is not awaiting approval"},{status:400});let r=D(),a="approve"===i?"approved":"request_changes"===i?"changes_requested":"canceled",s="approved"===a?"success":"canceled"===a?"canceled":"waiting_for_approval",c=Array.isArray(e.nodes)?e.nodes.map(e=>{if(e.nodeId===t){let t="object"==typeof e.output&&e.output?e.output:{};return{...e,status:"approved"===a?"success":"canceled"===a?"error":"waiting",endedAt:"changes_requested"===a?e.endedAt:r,output:{...t,decision:a,note:d,decidedBy:u}}}return"canceled"===a&&"pending"===e.status?{...e,status:"skipped",startedAt:e.startedAt??r,endedAt:r,output:e.output??{note:"skipped due to cancel"}}:e}):[],p={...e,status:s,endedAt:"success"===s||"canceled"===s?r:e.endedAt,approval:{nodeId:t,state:a,requestedAt:e.approval?.requestedAt,decidedAt:"changes_requested"===a?void 0:r,note:d,decidedBy:u},nodes:c},f=p;if("approve"===i)try{let e=(await (0,O.readWorkflow)(o,n)).workflow;f=await L({teamId:o,workflow:e,run:p,approvalNodeId:t,decidedAt:r}),Array.isArray(f.nodes)&&f.nodes.some(e=>"error"===e.status)&&(f={...f,status:"error",endedAt:r})}catch{}return(0,I.jsonOkRest)({...await F(o,n,f),runId:e.id})}if("enqueue"===s||"run_now"===s){let e=(await (0,O.readWorkflow)(o,n)).workflow,t=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).filter(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return!String(r.agentId??"").trim()}).map(e=>String(e.id??"")).filter(Boolean);if(t.length)throw Error(`All nodes must be assigned to an agent. Missing agentId on: ${t.join(", ")}`);let r=`${n}.workflow.json`,a=await (0,R.runOpenClaw)(["recipes","workflows","run","--team-id",o,"--workflow-file",r]);if(!a.ok)throw Error(a.stderr||a.stdout||"Failed to enqueue workflow run");let i=JSON.parse(String(a.stdout??"{}")),l=String(i.runId??"").trim(),d=String(i.runLogPath??i.path??"").trim();if(!l&&!d)throw Error("Enqueue succeeded but did not return runId");let u=(()=>{if(d){let e=d.match(/workflow-runs\/([^/]+)\/run\.json$/);if(e?.[1])return e[1];let t=d.match(/workflow-runs\/([^/]+)\.run\.json$/);if(t?.[1])return t[1]}return l})();if(!u)throw Error("Enqueue succeeded but did not return runId");if("run_now"===s){let t=await (0,R.runOpenClaw)(["agents","list","--json"]);if(!t.ok)throw Error(t.stderr||t.stdout||"Failed to list agents");let r=JSON.parse(String(t.stdout??"[]")),a=new Set(r.map(e=>String(e.id??"").trim()).filter(Boolean)),i=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).map(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return String(r.agentId??"").trim()}).filter(Boolean),s=Array.from(new Set(i)),l=s.filter(e=>!a.has(e));if(l.length)throw Error(`Unknown agentId(s) in workflow node assignments: ${l.join(", ")}. These must match real OpenClaw agent ids (see openclaw agents list).`);let d=await (0,R.runOpenClaw)(["recipes","workflows","runner-once","--team-id",o,"--run-id",u]);if(!d.ok)throw Error(d.stderr||d.stdout||"Failed to run runner-once");let c=[...s];(async()=>{try{for(let e of c)await (0,R.runOpenClaw)(["recipes","workflows","worker-tick","--team-id",o,"--agent-id",e,"--limit","5","--worker-id","kitchen-run-now"]);let{run:e}=await P(o,n,u),t=String(e.status??"");if("waiting_workers"===t)for(let e of c)await (0,R.runOpenClaw)(["recipes","workflows","worker-tick","--team-id",o,"--agent-id",e,"--limit","5","--worker-id","kitchen-run-now-pass2"])}catch{}})()}return(0,I.jsonOkRest)({ok:!0,runId:u,path:`shared-context/workflow-runs/${u}/run.json`,...d?{runLogPath:d}:{}})}let e="sample"===s?await (async()=>{let e=(await (0,O.readWorkflow)(o,n)).workflow,t=`run-${D().replace(/[:.]/g,"-")}-${k.default.randomBytes(3).toString("hex")}`.toLowerCase(),r=Date.now(),a=e.meta&&"object"==typeof e.meta&&"templateId"in e.meta?e.meta.templateId:void 0,i="marketing-cadence-v1"===a,s=i?{x:{hook:"Stop losing hours to repetitive agent setup.",body:"ClawRecipes scaffolds entire teams of agents in one command — workflows, roles, conventions, and a human-approval gate before posting."},instagram:{hook:"Ship agent workflows faster.",body:"From idea → drafted assets → brand QC → approval → posting. File-first workflows you can export and version.",assetNotes:"Square image: diagram of workflow nodes + approval gate."},tiktok:{hook:"POV: you stop copy/pasting prompts.",script:"Today I’m building a marketing cadence workflow that researches, drafts, QC’s, then waits for human approval before it posts. File-first. Portable. No magic.",assetNotes:"15–25s screen recording of the canvas + approval buttons."},youtube:{hook:"Build a marketing cadence workflow (with human approval) in 2 minutes.",script:"We’ll wire research → drafts → QC → approval → post nodes, and persist the whole thing to shared-context/workflows/*.workflow.json so it’s portable.",assetNotes:"Thumbnail: workflow canvas with 'Approve & Post' highlighted."}}:null,l=e.nodes.findIndex(e=>"human_approval"===e.type),d=l>=0?e.nodes[l]?.id:void 0,u=e.nodes.map((e,t)=>{let o=new Date(r+350*t).toISOString(),n=new Date(r+350*t+200).toISOString(),a=l<0||t<l,u=!!d&&e.id===d,c={nodeId:e.id,status:a?"success":l>=0&&t>l?"pending":u?"waiting":"success",startedAt:o,endedAt:a?n:void 0};if("llm"===e.type){let t=a&&i?"research"===e.id?{model:"(sample)",kind:"research",bullets:["New agent teams are compelling when they’re portable + file-first.","Human approval gates are mandatory for auto-post workflows.","Cron triggers need timezone + preset suggestions."]}:"draft_assets"===e.id?{model:"(sample)",kind:"draft_assets",drafts:s}:"qc_brand"===e.id?{model:"(sample)",kind:"qc_brand",notes:["Keep claims concrete (no ‘magic’).","Mention ClawRecipes before OpenClaw.","Explicitly state: no posting without approval."]}:{model:"(sample)",text:`Sample output for ${e.id}`}:null;return{...c,output:a?t??{model:"(sample)",text:`Sample output for ${e.id}`}:void 0}}if("tool"===e.type){let t=e.config&&"object"==typeof e.config?e.config.tool:void 0,r="string"==typeof t&&t.trim()?t.trim():"(unknown)";return{...c,output:a?{tool:r,result:"(sample tool result)"}:void 0}}if("human_approval"===e.type){let e=i?{channel:"(sample)",decision:"pending",options:["approve","request_changes","cancel"],packet:{templateId:"marketing-cadence-v1",note:"Per-platform drafts (sample) — approve to post, request changes to loop, or cancel.",platforms:{x:s?.x,instagram:s?.instagram,tiktok:s?.tiktok,youtube:s?.youtube}}}:{channel:"(sample)",decision:"pending",options:["approve","request_changes","cancel"]};return{...c,output:e}}return c}),c=d?"waiting_for_approval":"success",p={schema:"clawkitchen.workflow-run.v1",id:t,workflowId:n,startedAt:new Date(r).toISOString(),endedAt:d?void 0:new Date(r+350*e.nodes.length+200).toISOString(),status:c,summary:d?"Sample run (awaiting approval)":"Sample run (generated by ClawKitchen UI)",nodes:u,approval:d?{nodeId:d,state:"pending",requestedAt:new Date(r+350*l).toISOString()}:void 0};if(d){let{provider:t,target:r}=await U({workflow:e});if(r)try{await H({teamId:o,workflow:e,run:p,approvalNodeId:d}),p.approval={...p.approval,outbound:{provider:t,target:r,sentAt:D()}}}catch(e){p.approval={...p.approval,outbound:{provider:t,target:r,error:(0,E.errorMessage)(e),attemptedAt:D()}}}}return p})():await (async()=>{if(!["execute","enqueue","run_now","sample"].includes(s))throw Error(`Unsupported mode: ${s}`);let e=(await (0,O.readWorkflow)(o,n)).workflow,t=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).filter(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return!String(r.agentId??"").trim()}).map(e=>String(e.id??"")).filter(Boolean);if(t.length)throw Error(`All nodes must be assigned to an agent. Missing agentId on: ${t.join(", ")}`);let r=`${n}.workflow.json`,a=await (0,R.runOpenClaw)(["recipes","workflows","run","--team-id",o,"--workflow-file",r]);if(!a.ok)throw Error(a.stderr||a.stdout||"Failed to enqueue workflow run");let i=JSON.parse(String(a.stdout??"{}")),l=String(i.runId??"").trim(),d=String(i.runLogPath??i.path??"").trim();if(!l&&!d)throw Error("Enqueue succeeded but did not return runId");let u=(()=>{if(d){let e=d.match(/workflow-runs\/([^/]+)\/run\.json$/);if(e?.[1])return e[1];let t=d.match(/workflow-runs\/([^/]+)\.run\.json$/);if(t?.[1])return t[1]}return l})();if(!u)throw Error("Enqueue succeeded but did not return runId");if("run_now"===s){let t=await (0,R.runOpenClaw)(["agents","list","--json"]);if(!t.ok)throw Error(t.stderr||t.stdout||"Failed to list agents");let r=JSON.parse(String(t.stdout??"[]")),a=new Set(r.map(e=>String(e.id??"").trim()).filter(Boolean)),i=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).map(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return String(r.agentId??"").trim()}).filter(Boolean),s=Array.from(new Set(i)),l=s.filter(e=>!a.has(e));if(l.length)throw Error(`Unknown agentId(s) in workflow node assignments: ${l.join(", ")}. These must match real OpenClaw agent ids (see openclaw agents list).`);for(let e=0;e<4;e++){let e=await (0,R.runOpenClaw)(["recipes","workflows","runner-once","--team-id",o]);if(!e.ok)throw Error(e.stderr||e.stdout||"Failed to run runner-once");try{let{run:e}=await P(o,n,u),t=e.status;if(t&&"queued"!=String(t))break}catch{}await new Promise(e=>setTimeout(e,250))}try{let{run:e}=await P(o,n,u),t=e.status;if("queued"===String(t))throw Error(`Run now enqueued runId=${u}, but runner did not claim it yet (queue may contain older runs). Please retry, or run: openclaw recipes workflows runner-once --team-id ${o}`)}catch(e){if(e instanceof Error&&e.message.startsWith("Run now enqueued"))throw e}for(let e of s){let t=await (0,R.runOpenClaw)(["recipes","workflows","worker-tick","--team-id",o,"--agent-id",e,"--limit","5","--worker-id","kitchen-run-now"]);if(!t.ok)throw Error(t.stderr||t.stdout||`Failed worker-tick for ${e}`)}}return{schema:"clawkitchen.workflow-run.v1",id:u,workflowId:n,teamId:o,startedAt:D(),status:"running",summary:"run_now"===s?"Queued + kicked runner/workers":"Queued for workflow runner",nodes:Array.isArray(e.nodes)?e.nodes.map(e=>({nodeId:String(e.id),status:"pending"})):[],meta:{canonicalRunId:u,...d?{runLogPath:d}:{}}}})();if("enqueue"===s||"run_now"===s){let t=String(e.meta?.canonicalRunId??e.id);return(0,I.jsonOkRest)({ok:!0,runId:t,path:`shared-context/workflow-runs/${t}/run.json`})}return(0,I.jsonOkRest)({...await F(o,n,e),runId:e.id})}catch(t){let e=(0,E.errorMessage)(t);if(/^All nodes must be assigned to an agent\./i.test(e)||/^Unknown agentId\(s\)/i.test(e))return y.NextResponse.json({ok:!1,error:e},{status:400});return y.NextResponse.json({ok:!1,error:e},{status:500})}}e.s(["GET",()=>z,"POST",()=>G],80366);var Q=e.i(80366);let X=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/teams/workflow-runs/route",pathname:"/api/teams/workflow-runs",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/teams/workflow-runs/route.ts",nextConfigOutput:"standalone",userland:Q}),{workAsyncStorage:V,workUnitAsyncStorage:Z,serverHooks:Y}=X;function ee(){return(0,o.patchFetch)({workAsyncStorage:V,workUnitAsyncStorage:Z})}async function et(e,t,o){X.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/teams/workflow-runs/route";y=y.replace(/\/index$/,"")||"/";let k=await X.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!k)return t.statusCode=400,t.end("Bad Request"),null==o.waitUntil||o.waitUntil.call(o,Promise.resolve()),null;let{buildId:v,params:A,nextConfig:S,parsedUrl:I,isDraftMode:b,prerenderManifest:E,routerServerContext:j,isOnDemandRevalidate:R,revalidateOnlyGenerated:x,resolvedPathname:C,clientReferenceManifest:O,serverActionsManifest:N}=k,_=(0,s.normalizeAppPath)(y),q=!!(E.dynamicRoutes[_]||E.routes[C]),T=async()=>((null==j?void 0:j.render404)?await j.render404(e,t,I,!1):t.end("This page could not be found"),null);if(q&&!b){let e=!!E.routes[C],t=E.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await T();throw new g.NoFallbackError}}let $=null;!q||X.isDev||b||($="/index"===($=C)?"/":$);let P=!0===X.isDev||!q,F=q&&!P;N&&O&&(0,i.setManifestsSingleton)({page:y,clientReferenceManifest:O,serverActionsManifest:N});let B=e.method||"GET",D=(0,a.getTracer)(),M=D.getActiveScopeSpan(),U={params:A,prerenderManifest:E,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:P,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:o.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,o,n)=>X.onRequestError(e,t,o,n,j)},sharedContext:{buildId:v}},H=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),K=d.NextRequestAdapter.fromNodeNextRequest(H,(0,d.signalFromNodeResponse)(t));try{let i=async e=>X.handle(K,U).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=D.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 o=r.get("next.route");if(o){let t=`${B} ${o}`;e.setAttributes({"next.route":o,"http.route":o,"next.span_name":t}),e.updateName(t)}else e.updateName(`${B} ${y}`)}),s=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var a,l;let d=async({previousCacheEntry:r})=>{try{if(!s&&R&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(n);e.fetchMetrics=U.renderOpts.fetchMetrics;let l=U.renderOpts.pendingWaitUntil;l&&o.waitUntil&&(o.waitUntil(l),l=void 0);let d=U.renderOpts.collectedTags;if(!q)return await (0,p.sendResponse)(H,W,a,U.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);d&&(t[m.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,o=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:h.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:o}}}}catch(t){throw(null==r?void 0:r.isStale)&&await X.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:R})},!1,j),t}},u=await X.handleResponse({req:e,nextConfig:S,cacheKey:$,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:R,revalidateOnlyGenerated:x,responseGenerator:d,waitUntil:o.waitUntil,isMinimalMode:s});if(!q)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==h.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",R?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let g=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return s&&q||g.delete(m.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||g.get("Cache-Control")||g.set("Cache-Control",(0,w.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(H,W,new Response(u.value.body,{headers:g,status:u.value.status||200})),null};M?await l(M):await D.withPropagatedContext(e.headers,()=>D.trace(u.BaseServerSpan.handleRequest,{spanName:`${B} ${y}`,kind:a.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},l))}catch(t){if(t instanceof g.NoFallbackError||await X.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:R})},!1,j),q)throw t;return await (0,p.sendResponse)(H,W,new Response(null,{status:500})),null}}e.s(["handler",()=>et,"patchFetch",()=>ee,"routeModule",()=>X,"serverHooks",()=>Y,"workAsyncStorage",()=>V,"workUnitAsyncStorage",()=>Z],90736)}];
|
|
1
|
+
module.exports=[90736,e=>{"use strict";var t=e.i(47909),r=e.i(74017),o=e.i(96250),n=e.i(59756),a=e.i(61916),i=e.i(74677),s=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),w=e.i(26937),m=e.i(10372),g=e.i(93695);e.i(52474);var h=e.i(220),y=e.i(89171),k=e.i(66680),v=e.i(12714),A=e.i(50227),S=e.i(74533),I=e.i(85067),b=e.i(41674),E=e.i(40317),j=e.i(76509),R=e.i(5003),x=e.i(7367),C=e.i(63715),O=e.i(56995);let N=A.default.join("shared-context","workflow-runs");function _(e){let t=String(e??"").trim();if(!t)throw Error("run id is required");if(!/^[A-Za-z0-9][A-Za-z0-9-]{0,120}$/.test(t))throw Error("Invalid run id. Use letters, numbers, and dashes.");return t}async function q(e,t){(0,O.assertSafeWorkflowId)(t);let r=await (0,x.getTeamWorkspaceDir)(e);return A.default.join(r,N)}function T(e){return`${e}.run.json`}async function $(e,t){let r=(0,O.assertSafeWorkflowId)(t),o=await q(e,r),n=[];try{for(let t of(await v.default.readdir(o,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name).sort()){let a=A.default.join(o,t,"run.json");try{let o=await v.default.readFile(a,"utf8"),i=JSON.parse(o);B(e,r,i,t).workflowId===r&&n.push(t)}catch{}}}catch{}try{let{files:t}=await (0,C.readdirFiles)(o,".run.json",!0);for(let a of t){let t=a.replace(/\.run\.json$/i,"");try{let i=await v.default.readFile(A.default.join(o,a),"utf8"),s=JSON.parse(i);B(e,r,s,t).workflowId===r&&n.push(t)}catch{}}}catch{}try{let e=A.default.join(o,r),{files:t}=await (0,C.readdirFiles)(e,".run.json",!0);for(let e of t)n.push(e.replace(/\.run\.json$/i,""))}catch{}return{ok:!0,dir:o,runIds:Array.from(new Set(n)).sort().reverse()}}async function P(e,t,r){let o=(0,O.assertSafeWorkflowId)(t),n=_(r),a=await q(e,o),i=A.default.join(a,n,"run.json");try{let t=await v.default.readFile(i,"utf8"),r=JSON.parse(t),s=B(e,o,r,n);if(Array.isArray(s.nodes)&&s.nodes.length){let e=A.default.join(a,n,"node-outputs"),t=[];try{t=await v.default.readdir(e)}catch{t=[]}let r=new Map;for(let o of t.slice().sort()){let t=o.match(/-([^/]+)\.json$/);if(!t)continue;let n=t[1];if(!n)continue;let a=r.get(n)??[];a.push(A.default.join(e,o)),r.set(n,a)}await Promise.all(s.nodes.map(async e=>{if(!e||"object"!=typeof e||void 0!==e.output)return;let t=r.get(e.nodeId);if(!t||!t.length)return;let o=t.shift();if(o)try{let t=await v.default.readFile(o,"utf8");e.output=JSON.parse(t)}catch{}}))}return{ok:!0,path:i,run:s}}catch(e){if(!(e&&"object"==typeof e&&"ENOENT"===e.code))throw e}let s=A.default.join(a,T(n));try{let t=await v.default.readFile(s,"utf8"),r=JSON.parse(t);return{ok:!0,path:s,run:B(e,o,r,n)}}catch(t){if(t&&"object"==typeof t&&"ENOENT"===t.code){let t=A.default.join(a,o,T(n)),r=JSON.parse(await v.default.readFile(t,"utf8"));return{ok:!0,path:t,run:B(e,o,r,n)}}throw t}}async function F(e,t,r){let o=(0,O.assertSafeWorkflowId)(t),n=_(r.id),a=await q(e,o);await v.default.mkdir(a,{recursive:!0});let i=A.default.join(a,T(n)),s=i;try{let e=await v.default.readFile(i,"utf8"),t=JSON.parse(e);if(t&&"object"==typeof t&&!Array.isArray(t)&&"runId"in t&&!("schema"in t)){let e=A.default.join(a,o);await v.default.mkdir(e,{recursive:!0}),s=A.default.join(e,T(n))}}catch{}let l={...r,schema:"clawkitchen.workflow-run.v1",id:n,workflowId:o,teamId:e};return await v.default.writeFile(s,JSON.stringify(l,null,2)+"\n","utf8"),{ok:!0,path:s}}function B(e,t,r,o){if(r&&"object"==typeof r&&"clawkitchen.workflow-run.v1"===r.schema)return r;if(r&&"object"==typeof r&&"runId"in r&&"workflow"in r){let n=r.workflow&&"object"==typeof r.workflow?r.workflow:{},a="string"==typeof n.file?n.file:"",i=a?A.default.basename(a).replace(/\.workflow\.json$/i,""):"",s="string"==typeof n.id&&n.id?n.id:i||t,l=String(r.status??""),d="awaiting_approval"===l?"waiting_for_approval":"completed"===l?"success":"rejected"===l||"error"===l?"error":"canceled"===l?"canceled":"running",u=r.nodeStates,c=u&&"object"==typeof u&&!Array.isArray(u)?u:{},p=Array.isArray(r.nodeResults)?r.nodeResults.map(e=>{if(!e||"object"!=typeof e)return null;let t="string"==typeof e.nodeId?e.nodeId:"";if(!t)return null;let r=c[t],o=String(r?.status??e.status??"pending"),n="awaiting_approval"===o?"waiting":"completed"===o?"success":"error"===o?"error":o,a=["pending","running","waiting","success","error","skipped"].includes(n)?n:"pending",i="string"==typeof e.error?e.error:e.error&&"object"==typeof e.error&&"message"in e.error?{message:String(e.error.message??"")}:void 0,s="string"==typeof e.startedAt?e.startedAt:void 0,l="string"==typeof e.endedAt?e.endedAt:r?.ts?r.ts:void 0;return{nodeId:t,status:a,...s?{startedAt:s}:{},...l?{endedAt:l}:{},...void 0!==e.output?{output:e.output}:{},...void 0!==i?{error:i}:{}}}).filter(e=>null!==e):void 0;return{schema:"clawkitchen.workflow-run.v1",id:"string"==typeof r.runId?r.runId:o,workflowId:s,teamId:e,startedAt:"string"==typeof r.createdAt?r.createdAt:new Date().toISOString(),endedAt:("success"===d||"error"===d||"canceled"===d)&&"string"==typeof r.updatedAt?r.updatedAt:void 0,status:d,summary:"Executed by workflow runner",nodes:p}}return{schema:"clawkitchen.workflow-run.v1",id:o,workflowId:t,teamId:e,startedAt:new Date().toISOString(),status:"error",summary:"Malformed run file"}}function D(){return new Date().toISOString()}async function M(e,t,r){let o=(0,x.assertSafeRelativeFileName)(t),n=await (0,x.getTeamWorkspaceDir)(e),a=A.default.join(n,o);return await v.default.mkdir(A.default.dirname(a),{recursive:!0}),await v.default.appendFile(a,r,"utf8"),{full:a}}async function U({workflow:e}){let t=e.meta&&"object"==typeof e.meta?e.meta:{},r="string"==typeof t.approvalChannel?t.approvalChannel.trim():"";if(!r)return{provider:null,target:null};if(r.includes(":")){let[e,t]=r.split(":",2);return{provider:e||null,target:t||null}}return{provider:"telegram",target:r}}async function H(e){if(!e)return}function W(e){return Array.isArray(e)?e.map(e=>String(e??"").trim()).filter(Boolean):[]}async function K({command:e,argv:t,cwd:r,timeoutMs:o}){let n=t&&t.length?t:e.split(/\s+/).filter(Boolean),a=n[0],i=n.slice(1);return await new Promise((e,t)=>{let n=(0,S.spawn)(a,i,{cwd:r,shell:!1,stdio:["ignore","pipe","pipe"]}),s="",l="";n.stdout?.on("data",e=>{s.length<65536&&(s+=e.toString("utf8").slice(0,65536-s.length))}),n.stderr?.on("data",e=>{l.length<65536&&(l+=e.toString("utf8").slice(0,65536-l.length))});let d=setTimeout(()=>{n.kill("SIGKILL")},Math.max(0,o));n.on("error",e=>{clearTimeout(d),t(e)}),n.on("close",(t,r)=>{clearTimeout(d),e({stdout:s,stderr:l,exitCode:t,signal:r})})})}async function J({teamId:e,workflow:t,run:r,nodeId:o,startedAt:n,endedAt:a}){let i=Array.isArray(t.nodes)?t.nodes.find(e=>e.id===o):void 0,s=i?.config&&"object"==typeof i.config?i.config:{},l="string"==typeof s.tool&&s.tool.trim()?s.tool.trim():"(unknown)",d=s.args&&"object"==typeof s.args?s.args:{},u={date:a,"run.id":r.id,"workflow.id":t.id,"workflow.name":t.name||t.id};if("fs.append"===l){let t="string"==typeof d.path?d.path:"",r="string"==typeof d.content?d.content:"";if(!t)throw Error("fs.append requires args.path");if(!r)throw Error("fs.append requires args.content");let i=function(e,t){let r=e;for(let[e,o]of Object.entries(t))r=r.replaceAll(`{{${e}}}`,o);return r}(r,u),{full:s}=await M(e,t,i);return{nodeId:o,status:"success",startedAt:n,endedAt:a,output:{tool:l,appendedTo:s,bytes:i.length}}}if("runtime.exec"===l){var c;let r,i,u,p,f,w,m,g=(p=W((u=(c=t.meta)&&"object"==typeof c&&!Array.isArray(c)?t.meta:{}).execAllowBins),f=W(u.execAllowCommands),w=W(s.execAllowBins),m=W(s.execAllowCommands),{allowBins:new Set([...p,...w]),allowCommands:new Set([...f,...m]),host:String(s.execHost??u.execHost??"gateway"),security:String(s.execSecurity??u.execSecurity??"allowlist"),ask:String(s.execAsk??u.execAsk??"on-miss"),timeout:Number(s.execTimeoutSeconds??u.execTimeoutSeconds??300)}),{command:h,bin:y,argv:k}=function(e){let t=Array.isArray(e.commandArray)?e.commandArray:Array.isArray(e.command)?e.command:null;if(t&&t.length){let e=t.map(e=>String(e??"").trim()).filter(Boolean);if(!e.length)throw Error("runtime.exec requires a non-empty command");return{command:e.join(" "),bin:A.default.basename(e[0]),argv:e}}let r=String(e.command??"").trim();if(!r)throw Error("runtime.exec requires args.command");let o=r.split(/\s+/)[0]||"";return{command:r,bin:A.default.basename(o)}}(d);if(g.allowCommands.size&&!g.allowCommands.has(h))throw Error(`runtime.exec command not allowlisted: ${h}`);if(!g.allowCommands.size&&(0===g.allowBins.size||!g.allowBins.has(y)))throw Error(`runtime.exec bin not allowlisted: ${y} (set workflow.meta.execAllowBins or node.config.execAllowBins)`);let v="string"==typeof d.cwd?d.cwd:"string"==typeof d.workdir?d.workdir:"";if(v){let t=await (0,x.getTeamWorkspaceDir)(e),o=A.default.resolve(t,v);if(!o.startsWith(t+A.default.sep)&&o!==t)throw Error("runtime.exec cwd must be within the team workspace");r=o}if("1"!==process.env.KITCHEN_ENABLE_WORKFLOW_RUNTIME_EXEC)throw Error("Tool not available: exec");let S=(process.env.KITCHEN_WORKFLOW_EXEC_BACKEND||"gateway-first").trim();if("local"===S)i=await K({command:h,argv:k,cwd:r,timeoutMs:1e3*g.timeout});else try{i=await (0,j.toolsInvoke)({tool:"exec",args:{command:h,workdir:r,timeout:g.timeout,host:g.host,security:g.security,ask:g.ask}})}catch(e){if("gateway-first"===S&&/Tool not available:\s*exec/i.test((0,E.errorMessage)(e)))i=await K({command:h,argv:k,cwd:r,timeoutMs:1e3*g.timeout});else throw e}return{nodeId:o,status:"success",startedAt:n,endedAt:a,output:{tool:l,command:h,result:i}}}return{nodeId:o,status:"success",startedAt:n,endedAt:a,output:{tool:l,result:"(no-op: tool not implemented)"}}}async function L({teamId:e,workflow:t,run:r,approvalNodeId:o,decidedAt:n}){let a=Array.isArray(t.nodes)?t.nodes:[],i=a.findIndex(e=>e.id===o);if(i<0)return r;let s=Array.isArray(r.nodes)?await Promise.all(r.nodes.map(async o=>{let s=a.findIndex(e=>e.id===o.nodeId);if(!(s>=0&&s>i)||"pending"!==o.status)return o;let l=s>=0?a[s]:void 0,d=o.startedAt??n;if(l?.type==="tool")try{return await J({teamId:e,workflow:t,run:r,nodeId:o.nodeId,startedAt:d,endedAt:n})}catch(e){return{...o,status:"error",startedAt:d,endedAt:n,output:{error:(0,E.errorMessage)(e)}}}return{...o,status:"success",startedAt:d,endedAt:n,output:o.output??{note:"(resumed after approval)"}}})):[];return{...r,nodes:s}}async function z(e){return(0,b.handleWorkflowRunsGet)(e,P,$)}async function G(e){let t=await (0,I.parseJsonBody)(e);if(t instanceof y.NextResponse)return t;let{body:r}=t,o=String(r.teamId??"").trim(),n=String(r.workflowId??"").trim(),a=String(r.mode??"").trim(),i=String(r.action??"").trim(),s=a||"enqueue",l=String(r.runId??"").trim(),d="string"==typeof r.note?r.note:void 0,u="string"==typeof r.decidedBy?r.decidedBy:void 0;if(!o)return y.NextResponse.json({ok:!1,error:"teamId is required"},{status:400});if(!n)return y.NextResponse.json({ok:!1,error:"workflowId is required"},{status:400});try{if(i){if(!l)return y.NextResponse.json({ok:!1,error:"runId is required for action"},{status:400});if(!["approve","request_changes","cancel"].includes(i))return y.NextResponse.json({ok:!1,error:`Unsupported action: ${i}`},{status:400});let e=(await P(o,n,l)).run,t=e.approval?.nodeId||(Array.isArray(e.nodes)?e.nodes.find(e=>"waiting"===e.status)?.nodeId:void 0);if(!t)return y.NextResponse.json({ok:!1,error:"Run is not awaiting approval"},{status:400});let r=D(),a="approve"===i?"approved":"request_changes"===i?"changes_requested":"canceled",s="approved"===a?"success":"canceled"===a?"canceled":"waiting_for_approval",c=Array.isArray(e.nodes)?e.nodes.map(e=>{if(e.nodeId===t){let t="object"==typeof e.output&&e.output?e.output:{};return{...e,status:"approved"===a?"success":"canceled"===a?"error":"waiting",endedAt:"changes_requested"===a?e.endedAt:r,output:{...t,decision:a,note:d,decidedBy:u}}}return"canceled"===a&&"pending"===e.status?{...e,status:"skipped",startedAt:e.startedAt??r,endedAt:r,output:e.output??{note:"skipped due to cancel"}}:e}):[],p={...e,status:s,endedAt:"success"===s||"canceled"===s?r:e.endedAt,approval:{nodeId:t,state:a,requestedAt:e.approval?.requestedAt,decidedAt:"changes_requested"===a?void 0:r,note:d,decidedBy:u},nodes:c},f=p;if("approve"===i)try{let e=(await (0,O.readWorkflow)(o,n)).workflow;f=await L({teamId:o,workflow:e,run:p,approvalNodeId:t,decidedAt:r}),Array.isArray(f.nodes)&&f.nodes.some(e=>"error"===e.status)&&(f={...f,status:"error",endedAt:r})}catch{}return(0,I.jsonOkRest)({...await F(o,n,f),runId:e.id})}if("enqueue"===s||"run_now"===s){let e=(await (0,O.readWorkflow)(o,n)).workflow,t=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).filter(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return!String(r.agentId??"").trim()}).map(e=>String(e.id??"")).filter(Boolean);if(t.length)throw Error(`All nodes must be assigned to an agent. Missing agentId on: ${t.join(", ")}`);let r=`${n}.workflow.json`,a=await (0,R.runOpenClaw)(["recipes","workflows","run","--team-id",o,"--workflow-file",r]);if(!a.ok)throw Error(a.stderr||a.stdout||"Failed to enqueue workflow run");let i=JSON.parse(String(a.stdout??"{}")),l=String(i.runId??"").trim(),d=String(i.runLogPath??i.path??"").trim();if(!l&&!d)throw Error("Enqueue succeeded but did not return runId");let u=(()=>{if(d){let e=d.match(/workflow-runs\/([^/]+)\/run\.json$/);if(e?.[1])return e[1];let t=d.match(/workflow-runs\/([^/]+)\.run\.json$/);if(t?.[1])return t[1]}return l})();if(!u)throw Error("Enqueue succeeded but did not return runId");if("run_now"===s){let t=await (0,R.runOpenClaw)(["agents","list","--json"]);if(!t.ok)throw Error(t.stderr||t.stdout||"Failed to list agents");let r=JSON.parse(String(t.stdout??"[]")),a=new Set(r.map(e=>String(e.id??"").trim()).filter(Boolean)),i=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).map(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return String(r.agentId??"").trim()}).filter(Boolean),s=Array.from(new Set(i)),l=s.filter(e=>!a.has(e));if(l.length)throw Error(`Unknown agentId(s) in workflow node assignments: ${l.join(", ")}. These must match real OpenClaw agent ids (see openclaw agents list).`);let d=await (0,R.runOpenClaw)(["recipes","workflows","runner-once","--team-id",o,"--run-id",u]);if(!d.ok)throw Error(d.stderr||d.stdout||"Failed to run runner-once");let c=[...s];(async()=>{try{for(let e of c)await (0,R.runOpenClaw)(["recipes","workflows","worker-tick","--team-id",o,"--agent-id",e,"--limit","5","--worker-id","kitchen-run-now"]);let{run:e}=await P(o,n,u),t=String(e.status??"");if("waiting_workers"===t)for(let e of c)await (0,R.runOpenClaw)(["recipes","workflows","worker-tick","--team-id",o,"--agent-id",e,"--limit","5","--worker-id","kitchen-run-now-pass2"])}catch{}})()}return(0,I.jsonOkRest)({ok:!0,runId:u,path:`shared-context/workflow-runs/${u}/run.json`,...d?{runLogPath:d}:{}})}let e="sample"===s?await (async()=>{let e=(await (0,O.readWorkflow)(o,n)).workflow,t=`run-${D().replace(/[:.]/g,"-")}-${k.default.randomBytes(3).toString("hex")}`.toLowerCase(),r=Date.now(),a=e.meta&&"object"==typeof e.meta&&"templateId"in e.meta?e.meta.templateId:void 0,i="marketing-cadence-v1"===a,s=i?{x:{hook:"Stop losing hours to repetitive agent setup.",body:"ClawRecipes scaffolds entire teams of agents in one command — workflows, roles, conventions, and a human-approval gate before posting."},instagram:{hook:"Ship agent workflows faster.",body:"From idea → drafted assets → brand QC → approval → posting. File-first workflows you can export and version.",assetNotes:"Square image: diagram of workflow nodes + approval gate."},tiktok:{hook:"POV: you stop copy/pasting prompts.",script:"Today I’m building a marketing cadence workflow that researches, drafts, QC’s, then waits for human approval before it posts. File-first. Portable. No magic.",assetNotes:"15–25s screen recording of the canvas + approval buttons."},youtube:{hook:"Build a marketing cadence workflow (with human approval) in 2 minutes.",script:"We’ll wire research → drafts → QC → approval → post nodes, and persist the whole thing to shared-context/workflows/*.workflow.json so it’s portable.",assetNotes:"Thumbnail: workflow canvas with 'Approve & Post' highlighted."}}:null,l=e.nodes.findIndex(e=>"human_approval"===e.type),d=l>=0?e.nodes[l]?.id:void 0,u=e.nodes.map((e,t)=>{let o=new Date(r+350*t).toISOString(),n=new Date(r+350*t+200).toISOString(),a=l<0||t<l,u=!!d&&e.id===d,c={nodeId:e.id,status:a?"success":l>=0&&t>l?"pending":u?"waiting":"success",startedAt:o,endedAt:a?n:void 0};if("llm"===e.type){let t=a&&i?"research"===e.id?{model:"(sample)",kind:"research",bullets:["New agent teams are compelling when they’re portable + file-first.","Human approval gates are mandatory for auto-post workflows.","Cron triggers need timezone + preset suggestions."]}:"draft_assets"===e.id?{model:"(sample)",kind:"draft_assets",drafts:s}:"qc_brand"===e.id?{model:"(sample)",kind:"qc_brand",notes:["Keep claims concrete (no ‘magic’).","Mention ClawRecipes before OpenClaw.","Explicitly state: no posting without approval."]}:{model:"(sample)",text:`Sample output for ${e.id}`}:null;return{...c,output:a?t??{model:"(sample)",text:`Sample output for ${e.id}`}:void 0}}if("tool"===e.type){let t=e.config&&"object"==typeof e.config?e.config.tool:void 0,r="string"==typeof t&&t.trim()?t.trim():"(unknown)";return{...c,output:a?{tool:r,result:"(sample tool result)"}:void 0}}if("human_approval"===e.type){let e=i?{channel:"(sample)",decision:"pending",options:["approve","request_changes","cancel"],packet:{templateId:"marketing-cadence-v1",note:"Per-platform drafts (sample) — approve to post, request changes to loop, or cancel.",platforms:{x:s?.x,instagram:s?.instagram,tiktok:s?.tiktok,youtube:s?.youtube}}}:{channel:"(sample)",decision:"pending",options:["approve","request_changes","cancel"]};return{...c,output:e}}return c}),c=d?"waiting_for_approval":"success",p={schema:"clawkitchen.workflow-run.v1",id:t,workflowId:n,startedAt:new Date(r).toISOString(),endedAt:d?void 0:new Date(r+350*e.nodes.length+200).toISOString(),status:c,summary:d?"Sample run (awaiting approval)":"Sample run (generated by ClawKitchen UI)",nodes:u,approval:d?{nodeId:d,state:"pending",requestedAt:new Date(r+350*l).toISOString()}:void 0};if(d){let{provider:t,target:r}=await U({workflow:e});if(r)try{await H({teamId:o,workflow:e,run:p,approvalNodeId:d}),p.approval={...p.approval,outbound:{provider:t,target:r,sentAt:D()}}}catch(e){p.approval={...p.approval,outbound:{provider:t,target:r,error:(0,E.errorMessage)(e),attemptedAt:D()}}}}return p})():await (async()=>{if(!["execute","enqueue","run_now","sample"].includes(s))throw Error(`Unsupported mode: ${s}`);let e=(await (0,O.readWorkflow)(o,n)).workflow,t=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).filter(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return!String(r.agentId??"").trim()}).map(e=>String(e.id??"")).filter(Boolean);if(t.length)throw Error(`All nodes must be assigned to an agent. Missing agentId on: ${t.join(", ")}`);let r=`${n}.workflow.json`,a=await (0,R.runOpenClaw)(["recipes","workflows","run","--team-id",o,"--workflow-file",r]);if(!a.ok)throw Error(a.stderr||a.stdout||"Failed to enqueue workflow run");let i=JSON.parse(String(a.stdout??"{}")),l=String(i.runId??"").trim(),d=String(i.runLogPath??i.path??"").trim();if(!l&&!d)throw Error("Enqueue succeeded but did not return runId");let u=(()=>{if(d){let e=d.match(/workflow-runs\/([^/]+)\/run\.json$/);if(e?.[1])return e[1];let t=d.match(/workflow-runs\/([^/]+)\.run\.json$/);if(t?.[1])return t[1]}return l})();if(!u)throw Error("Enqueue succeeded but did not return runId");if("run_now"===s){let t=await (0,R.runOpenClaw)(["agents","list","--json"]);if(!t.ok)throw Error(t.stderr||t.stdout||"Failed to list agents");let r=JSON.parse(String(t.stdout??"[]")),a=new Set(r.map(e=>String(e.id??"").trim()).filter(Boolean)),i=(Array.isArray(e.nodes)?e.nodes:[]).filter(e=>e&&"object"==typeof e&&"start"!==e.type&&"end"!==e.type&&"human_approval"!==e.type).map(e=>{let t=e.config,r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return String(r.agentId??"").trim()}).filter(Boolean),s=Array.from(new Set(i)),l=s.filter(e=>!a.has(e));if(l.length)throw Error(`Unknown agentId(s) in workflow node assignments: ${l.join(", ")}. These must match real OpenClaw agent ids (see openclaw agents list).`);for(let e=0;e<4;e++){let e=await (0,R.runOpenClaw)(["recipes","workflows","runner-once","--team-id",o]);if(!e.ok)throw Error(e.stderr||e.stdout||"Failed to run runner-once");try{let{run:e}=await P(o,n,u),t=e.status;if(t&&"queued"!=String(t))break}catch{}await new Promise(e=>setTimeout(e,250))}try{let{run:e}=await P(o,n,u),t=e.status;if("queued"===String(t))throw Error(`Run now enqueued runId=${u}, but runner did not claim it yet (queue may contain older runs). Please retry, or run: openclaw recipes workflows runner-once --team-id ${o}`)}catch(e){if(e instanceof Error&&e.message.startsWith("Run now enqueued"))throw e}for(let e of s){let t=await (0,R.runOpenClaw)(["recipes","workflows","worker-tick","--team-id",o,"--agent-id",e,"--limit","5","--worker-id","kitchen-run-now"]);if(!t.ok)throw Error(t.stderr||t.stdout||`Failed worker-tick for ${e}`)}}return{schema:"clawkitchen.workflow-run.v1",id:u,workflowId:n,teamId:o,startedAt:D(),status:"running",summary:"run_now"===s?"Queued + kicked runner/workers":"Queued for workflow runner",nodes:Array.isArray(e.nodes)?e.nodes.map(e=>({nodeId:String(e.id),status:"pending"})):[],meta:{canonicalRunId:u,...d?{runLogPath:d}:{}}}})();if("enqueue"===s||"run_now"===s){let t=String(e.meta?.canonicalRunId??e.id);return(0,I.jsonOkRest)({ok:!0,runId:t,path:`shared-context/workflow-runs/${t}/run.json`})}return(0,I.jsonOkRest)({...await F(o,n,e),runId:e.id})}catch(t){let e=(0,E.errorMessage)(t);if(/^All nodes must be assigned to an agent\./i.test(e)||/^Unknown agentId\(s\)/i.test(e))return y.NextResponse.json({ok:!1,error:e},{status:400});return y.NextResponse.json({ok:!1,error:e},{status:500})}}e.s(["GET",()=>z,"POST",()=>G],80366);var Q=e.i(80366);let X=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/teams/workflow-runs/route",pathname:"/api/teams/workflow-runs",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/teams/workflow-runs/route.ts",nextConfigOutput:"standalone",userland:Q}),{workAsyncStorage:V,workUnitAsyncStorage:Z,serverHooks:Y}=X;function ee(){return(0,o.patchFetch)({workAsyncStorage:V,workUnitAsyncStorage:Z})}async function et(e,t,o){X.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/teams/workflow-runs/route";y=y.replace(/\/index$/,"")||"/";let k=await X.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!k)return t.statusCode=400,t.end("Bad Request"),null==o.waitUntil||o.waitUntil.call(o,Promise.resolve()),null;let{buildId:v,params:A,nextConfig:S,parsedUrl:I,isDraftMode:b,prerenderManifest:E,routerServerContext:j,isOnDemandRevalidate:R,revalidateOnlyGenerated:x,resolvedPathname:C,clientReferenceManifest:O,serverActionsManifest:N}=k,_=(0,s.normalizeAppPath)(y),q=!!(E.dynamicRoutes[_]||E.routes[C]),T=async()=>((null==j?void 0:j.render404)?await j.render404(e,t,I,!1):t.end("This page could not be found"),null);if(q&&!b){let e=!!E.routes[C],t=E.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await T();throw new g.NoFallbackError}}let $=null;!q||X.isDev||b||($="/index"===($=C)?"/":$);let P=!0===X.isDev||!q,F=q&&!P;N&&O&&(0,i.setManifestsSingleton)({page:y,clientReferenceManifest:O,serverActionsManifest:N});let B=e.method||"GET",D=(0,a.getTracer)(),M=D.getActiveScopeSpan(),U={params:A,prerenderManifest:E,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:P,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:o.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,o,n)=>X.onRequestError(e,t,o,n,j)},sharedContext:{buildId:v}},H=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),K=d.NextRequestAdapter.fromNodeNextRequest(H,(0,d.signalFromNodeResponse)(t));try{let i=async e=>X.handle(K,U).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=D.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 o=r.get("next.route");if(o){let t=`${B} ${o}`;e.setAttributes({"next.route":o,"http.route":o,"next.span_name":t}),e.updateName(t)}else e.updateName(`${B} ${y}`)}),s=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var a,l;let d=async({previousCacheEntry:r})=>{try{if(!s&&R&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(n);e.fetchMetrics=U.renderOpts.fetchMetrics;let l=U.renderOpts.pendingWaitUntil;l&&o.waitUntil&&(o.waitUntil(l),l=void 0);let d=U.renderOpts.collectedTags;if(!q)return await (0,p.sendResponse)(H,W,a,U.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);d&&(t[m.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,o=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:h.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:o}}}}catch(t){throw(null==r?void 0:r.isStale)&&await X.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:R})},!1,j),t}},u=await X.handleResponse({req:e,nextConfig:S,cacheKey:$,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:R,revalidateOnlyGenerated:x,responseGenerator:d,waitUntil:o.waitUntil,isMinimalMode:s});if(!q)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==h.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",R?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let g=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return s&&q||g.delete(m.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||g.get("Cache-Control")||g.set("Cache-Control",(0,w.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(H,W,new Response(u.value.body,{headers:g,status:u.value.status||200})),null};M?await l(M):await D.withPropagatedContext(e.headers,()=>D.trace(u.BaseServerSpan.handleRequest,{spanName:`${B} ${y}`,kind:a.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},l))}catch(t){if(t instanceof g.NoFallbackError||await X.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:R})},!1,j),q)throw t;return await (0,p.sendResponse)(H,W,new Response(null,{status:500})),null}}e.s(["handler",()=>et,"patchFetch",()=>ee,"routeModule",()=>X,"serverHooks",()=>Y,"workAsyncStorage",()=>V,"workUnitAsyncStorage",()=>Z],90736)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map
|