larkup 0.1.23 → 0.1.25

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.
Files changed (103) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +6 -6
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/required-server-files.js +3 -2
  6. package/.next/required-server-files.json +3 -2
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +16 -16
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/analytics.html +1 -1
  25. package/.next/server/app/analytics.rsc +17 -17
  26. package/.next/server/app/analytics.segments/_full.segment.rsc +17 -17
  27. package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
  28. package/.next/server/app/analytics.segments/_index.segment.rsc +11 -11
  29. package/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
  30. package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
  31. package/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
  32. package/.next/server/app/api/chat/route.js +3 -3
  33. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  34. package/.next/server/app/api/doc-editor/edit/route.js +1 -1
  35. package/.next/server/app/api/doc-editor/edit/route.js.nft.json +1 -1
  36. package/.next/server/app/api/doc-editor/export/route.js +1 -1
  37. package/.next/server/app/api/doc-editor/export/route.js.nft.json +1 -1
  38. package/.next/server/app/api/doc-editor/extract-text/route.js +1 -1
  39. package/.next/server/app/api/doc-editor/extract-text/route.js.nft.json +1 -1
  40. package/.next/server/app/api/doc-editor/parse/route.js +4 -4
  41. package/.next/server/app/api/doc-editor/parse/route.js.nft.json +1 -1
  42. package/.next/server/app/api/doc-editor/restore/route.js +1 -1
  43. package/.next/server/app/api/doc-editor/restore/route.js.nft.json +1 -1
  44. package/.next/server/app/api/document/sign/route.js +3 -3
  45. package/.next/server/app/api/document/sign/route.js.nft.json +1 -1
  46. package/.next/server/app/api/sandbox/route.js +1 -1
  47. package/.next/server/app/api/sandbox/route.js.nft.json +1 -1
  48. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/chat.html +1 -1
  50. package/.next/server/app/chat.rsc +17 -17
  51. package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
  52. package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
  53. package/.next/server/app/chat.segments/_index.segment.rsc +11 -11
  54. package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
  55. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
  56. package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
  57. package/.next/server/app/data/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/data.html +1 -1
  59. package/.next/server/app/data.rsc +17 -17
  60. package/.next/server/app/data.segments/_full.segment.rsc +17 -17
  61. package/.next/server/app/data.segments/_head.segment.rsc +4 -4
  62. package/.next/server/app/data.segments/_index.segment.rsc +11 -11
  63. package/.next/server/app/data.segments/_tree.segment.rsc +1 -1
  64. package/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
  65. package/.next/server/app/data.segments/data.segment.rsc +3 -3
  66. package/.next/server/app/index.html +1 -1
  67. package/.next/server/app/index.rsc +16 -16
  68. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  69. package/.next/server/app/index.segments/_full.segment.rsc +16 -16
  70. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  71. package/.next/server/app/index.segments/_index.segment.rsc +11 -11
  72. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  73. package/.next/server/app/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/settings.html +1 -1
  76. package/.next/server/app/settings.rsc +18 -18
  77. package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
  78. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  79. package/.next/server/app/settings.segments/_index.segment.rsc +11 -11
  80. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  81. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  82. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  83. package/.next/server/chunks/{[root-of-the-server]__0lczaer._.js → [root-of-the-server]__06lx~f.._.js} +8 -8
  84. package/.next/server/chunks/{[root-of-the-server]__0qs73xp._.js → [root-of-the-server]__06w.x2m._.js} +8 -8
  85. package/.next/server/chunks/{[root-of-the-server]__03l~uw5._.js → [root-of-the-server]__08y6gy_._.js} +8 -8
  86. package/.next/server/chunks/{[root-of-the-server]__0veqa4o._.js → [root-of-the-server]__0dlwf67._.js} +1 -1
  87. package/.next/server/chunks/{[root-of-the-server]__0g36cgg._.js → [root-of-the-server]__0jrhbq8._.js} +8 -8
  88. package/.next/server/chunks/{[root-of-the-server]__10zm06g._.js → [root-of-the-server]__0oblxyb._.js} +8 -8
  89. package/.next/server/chunks/{[root-of-the-server]__100gqj0._.js → [root-of-the-server]__0ougw4j._.js} +8 -8
  90. package/.next/server/chunks/{[root-of-the-server]__044l2_f._.js → [root-of-the-server]__0yj9mzb._.js} +9 -9
  91. package/.next/server/chunks/{[root-of-the-server]__0036943._.js → [root-of-the-server]__13ydff-._.js} +8 -8
  92. package/.next/server/chunks/ssr/_0s5_0n1._.js +1 -1
  93. package/.next/server/middleware-build-manifest.js +3 -3
  94. package/.next/server/pages/404.html +1 -1
  95. package/.next/server/pages/500.html +1 -1
  96. package/.next/static/chunks/{0u4n0ggeto75y.js → 0ia5xz-yykcrq.js} +1 -1
  97. package/CHANGELOG.md +15 -0
  98. package/next-env.d.ts +1 -1
  99. package/next.config.mjs +1 -1
  100. package/package.json +4 -4
  101. /package/.next/static/{Fb01QU1MyWBHc7U1LHf5y → rZLjWvDwdTV-PtUjl-1-b}/_buildManifest.js +0 -0
  102. /package/.next/static/{Fb01QU1MyWBHc7U1LHf5y → rZLjWvDwdTV-PtUjl-1-b}/_clientMiddlewareManifest.js +0 -0
  103. /package/.next/static/{Fb01QU1MyWBHc7U1LHf5y → rZLjWvDwdTV-PtUjl-1-b}/_ssgManifest.js +0 -0
@@ -1,8 +1,8 @@
1
- module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},811917,(e,t,r)=>{t.exports=e.x("dockerode-2f9c00396d72a1e4",()=>require("dockerode-2f9c00396d72a1e4"))},983131,778923,e=>{"use strict";var t=e.i(811917),r=e.i(902157),a=e.i(750227),i=e.i(660526),s=e.i(666680);let n="larkup-sandbox:latest",o="/sandbox/output",l=a.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),d=null;function p(){return d||(d=new t.default),d}async function c(){let e=p();try{let t=await e.version(),r=await e.listImages({filters:{reference:[n]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function u(e){let t=p(),i=a.default.join(l,"Dockerfile");try{await r.promises.access(i)}catch{throw Error(`Sandbox Dockerfile not found at ${i}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let s=await t.buildImage({context:l,src:["Dockerfile"]},{t:n});await new Promise((r,a)=>{t.modem.followProgress(s,e=>{e?a(e):r()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function f(){let e=p();if((await e.listImages({filters:{reference:[n]}})).length>0)return!0;try{return await u(),!0}catch{return!1}}async function m(e,t){let n,l,d=p(),c=Date.now(),u=a.default.join(i.default.tmpdir(),`larkup-sandbox-${(0,s.randomUUID)()}`),f=a.default.join(u,"input"),m=a.default.join(u,"output");if(await r.promises.mkdir(f,{recursive:!0}),await r.promises.mkdir(m,{recursive:!0}),e.files)for(let t of e.files){let e=a.default.join(f,t.name);t.isBase64?await r.promises.writeFile(e,Buffer.from(t.content,"base64")):await r.promises.writeFile(e,t.content,"utf8")}if("python"===e.language){var g;g=e.code,n=`
1
+ module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},983131,778923,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(660526),i=e.i(666680);let s="larkup-sandbox:latest",n="/sandbox/output",o=r.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),l=null;async function d(){if(!l){let{default:e}=await import("dockerode");l=new e}return l}async function p(){let e=await d();try{let t=await e.version(),r=await e.listImages({filters:{reference:[s]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function c(e){let a=await d(),i=r.default.join(o,"Dockerfile");try{await t.promises.access(i)}catch{throw Error(`Sandbox Dockerfile not found at ${i}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let n=await a.buildImage({context:o,src:["Dockerfile"]},{t:s});await new Promise((t,r)=>{a.modem.followProgress(n,e=>{e?r(e):t()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function u(){let e=await d();if((await e.listImages({filters:{reference:[s]}})).length>0)return!0;try{return await c(),!0}catch{return!1}}async function f(e,s){let o,l,p=await d(),c=Date.now(),u=r.default.join(a.default.tmpdir(),`larkup-sandbox-${(0,i.randomUUID)()}`),f=r.default.join(u,"input"),m=r.default.join(u,"output");if(await t.promises.mkdir(f,{recursive:!0}),await t.promises.mkdir(m,{recursive:!0}),e.files)for(let a of e.files){let e=r.default.join(f,a.name);a.isBase64?await t.promises.writeFile(e,Buffer.from(a.content,"base64")):await t.promises.writeFile(e,a.content,"utf8")}if("python"===e.language){var g;g=e.code,o=`
2
2
  import sys, os, json, traceback
3
3
 
4
4
  # Ensure output directory exists
5
- os.makedirs("${o}", exist_ok=True)
5
+ os.makedirs("${n}", exist_ok=True)
6
6
 
7
7
  # ============================================================
8
8
  # SAFETY PREAMBLE: Suppress warnings & patch deprecated APIs
@@ -90,7 +90,7 @@ try:
90
90
  def _patched_show(*args, **kwargs):
91
91
  for fig_num in plt.get_fignums():
92
92
  fig = plt.figure(fig_num)
93
- fname = f"${o}/chart_{_figure_count[0]}.png"
93
+ fname = f"${n}/chart_{_figure_count[0]}.png"
94
94
  fig.savefig(fname, dpi=150, bbox_inches="tight", facecolor="white")
95
95
  _figure_count[0] += 1
96
96
  plt.close("all")
@@ -131,13 +131,13 @@ except Exception as e:
131
131
 
132
132
  # List generated artifacts
133
133
  artifacts = []
134
- if os.path.isdir("${o}"):
135
- for f in sorted(os.listdir("${o}")):
136
- fp = os.path.join("${o}", f)
134
+ if os.path.isdir("${n}"):
135
+ for f in sorted(os.listdir("${n}")):
136
+ fp = os.path.join("${n}", f)
137
137
  if os.path.isfile(fp):
138
138
  artifacts.append(f)
139
139
  if artifacts:
140
140
  print("\\n__ARTIFACTS__:" + json.dumps(artifacts))
141
- `;let t=a.default.join(u,"run.py");await r.promises.writeFile(t,n,"utf8"),l=["python3","/sandbox/run.py"]}else{let t=a.default.join(u,"run.js");await r.promises.writeFile(t,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??t.timeoutMs,_=null;try{_=await d.createContainer({Image:t.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*t.memoryMB*1024,CpuShares:t.cpuShares,NetworkMode:t.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${m}:${o}:rw`,`${u}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),i=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),s=await Promise.race([e,i]),n=await _.logs({stdout:!0,stderr:!0,follow:!1}),p=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let i=e.readUInt8(a),s=e.readUInt32BE(a+4);if((a+=8)+s>e.length)break;let n=e.subarray(a,a+s).toString("utf8");1===i?t+=n:2===i&&(r+=n),a+=s}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(n),g=[];try{for(let e of(await r.promises.readdir(m))){let t=a.default.join(m,e),i=await r.promises.readFile(t),s={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[a.default.extname(e).toLowerCase()]??"application/octet-stream";g.push({name:e,mimeType:s,data:i.toString("base64")})}}catch{}let{stdout:x,stderr:w}=p;return{stdout:x.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:w,exitCode:s.StatusCode??1,artifacts:g,executionTimeMs:Date.now()-c}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-c}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await r.promises.rm(u,{recursive:!0,force:!0})}catch{}}}let g={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return c();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await u(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await f())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return m(e,{...g,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},898894,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),i=e.i(765700),s=e.i(601263),n=e.i(706859),o=e.i(947547),l=e.i(819797),d=e.i(135958),p=e.i(86520),c=e.i(970949),u=e.i(741165),f=e.i(106898),m=e.i(454415),g=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),x=e.i(686296);e.i(907667);var w=e.i(490517),y=e.i(203523),b=e.i(817521);async function k(e){try{let t=(await e.formData()).get("file");if(!t)return x.NextResponse.json({error:"No file provided"},{status:400});let r=Buffer.from(await t.arrayBuffer()),a=await (0,w.createSession)(r,t.name,t.type);if("pdf"===a.type&&""===a.parsed.rawText)if(a.parsed.totalPages<=5)try{let e=await (0,b.default)(r),t=(0,y.enrichPDFWithText)(a.parsed,e.text);a.parsed=t}catch{}else a.parsed.rawText="[Long PDF - Text extraction skipped for performance. You can still view it.]";return x.NextResponse.json({sessionId:a.id,fileName:a.fileName,type:a.type,mimeType:a.mimeType,fileSize:a.parsed.fileSize,totalPages:a.parsed.totalPages,fields:a.parsed.fields,pages:a.parsed.pages.map(e=>({index:e.index,text:e.text.slice(0,2e3),html:e.html,fields:e.fields,dimensions:e.dimensions})),rawText:a.parsed.rawText.slice(0,5e3),metadata:a.parsed.metadata})}catch(t){let e=t instanceof Error?t.message:"Failed to parse file";return x.NextResponse.json({error:e},{status:500})}}e.s(["POST",0,k,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],349733);var v=e.i(349733);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/doc-editor/parse/route",pathname:"/api/doc-editor/parse",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/doc-editor/parse/route.ts",nextConfigOutput:"standalone",userland:v,...{}}),{workAsyncStorage:R,workUnitAsyncStorage:S,serverHooks:A}=E;async function P(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/doc-editor/parse/route";x=x.replace(/\/index$/,"")||"/";let w=await E.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:k,nextConfig:v,parsedUrl:R,isDraftMode:S,prerenderManifest:A,routerServerContext:P,isOnDemandRevalidate:C,revalidateOnlyGenerated:T,resolvedPathname:M,clientReferenceManifest:q,serverActionsManifest:F}=w,D=(0,o.normalizeAppPath)(x),I=!!(A.dynamicRoutes[D]||A.routes[M]),N=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,R,!1):t.end("This page could not be found"),null);if(I&&!S){let e=!!A.routes[M],t=A.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(v.adapterPath)return await N();throw new h.NoFallbackError}}let j=null;!I||E.isDev||S||(j="/index"===(j=M)?"/":j);let B=!0===E.isDev||!I,$=I&&!B;F&&q&&(0,n.setManifestsSingleton)({page:x,clientReferenceManifest:q,serverActionsManifest:F});let O=e.method||"GET",U=(0,s.getTracer)(),H=U.getActiveScopeSpan(),L=!!(null==P?void 0:P.isWrappedByNextServer),Q=!!(0,i.getRequestMeta)(e,"minimalMode"),Y=(0,i.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,v,A,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:k,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!v.experimental.authInterrupts},cacheComponents:!!v.cacheComponents,supportsDynamicResponse:B,incrementalCache:Y,cacheLifeProfiles:v.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>E.onRequestError(e,t,a,i,P)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),z=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let i,n=async e=>E.handle(z,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=U.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.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=`${O} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${O} ${x}`)}),o=async i=>{var s,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&C&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!I)return await (0,u.sendResponse)(K,W,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[g.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:x,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:C})},!1,P),t}},d=await E.handleResponse({req:e,nextConfig:v,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!I)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",C?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return Q&&I||p.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,u.sendResponse)(K,W,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};L&&H?await o(H):(i=U.getActiveScopeSpan(),await U.withPropagatedContext(e.headers,()=>U.trace(p.BaseServerSpan.handleRequest,{spanName:`${O} ${x}`,kind:s.SpanKind.SERVER,attributes:{"http.method":O,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:C})},!1,P),I)throw t;return await (0,u.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,P,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:S})},"routeModule",0,E,"serverHooks",0,A,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,S],898894)},195213,e=>{e.v(e=>Promise.resolve().then(()=>e(568886)))}];
141
+ `;let a=r.default.join(u,"run.py");await t.promises.writeFile(a,o,"utf8"),l=["python3","/sandbox/run.py"]}else{let a=r.default.join(u,"run.js");await t.promises.writeFile(a,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??s.timeoutMs,_=null;try{_=await p.createContainer({Image:s.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*s.memoryMB*1024,CpuShares:s.cpuShares,NetworkMode:s.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${m}:${n}:rw`,`${u}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),a=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),i=await Promise.race([e,a]),o=await _.logs({stdout:!0,stderr:!0,follow:!1}),d=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let i=e.readUInt8(a),s=e.readUInt32BE(a+4);if((a+=8)+s>e.length)break;let n=e.subarray(a,a+s).toString("utf8");1===i?t+=n:2===i&&(r+=n),a+=s}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(o),g=[];try{for(let e of(await t.promises.readdir(m))){let a=r.default.join(m,e),i=await t.promises.readFile(a),s={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[r.default.extname(e).toLowerCase()]??"application/octet-stream";g.push({name:e,mimeType:s,data:i.toString("base64")})}}catch{}let{stdout:x,stderr:w}=d;return{stdout:x.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:w,exitCode:i.StatusCode??1,artifacts:g,executionTimeMs:Date.now()-c}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-c}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await t.promises.rm(u,{recursive:!0,force:!0})}catch{}}}let m={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return p();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await c(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await u())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return f(e,{...m,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},898894,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),i=e.i(765700),s=e.i(601263),n=e.i(706859),o=e.i(947547),l=e.i(819797),d=e.i(135958),p=e.i(86520),c=e.i(970949),u=e.i(741165),f=e.i(106898),m=e.i(454415),g=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),x=e.i(686296);e.i(907667);var w=e.i(490517),y=e.i(203523),b=e.i(817521);async function k(e){try{let t=(await e.formData()).get("file");if(!t)return x.NextResponse.json({error:"No file provided"},{status:400});let r=Buffer.from(await t.arrayBuffer()),a=await (0,w.createSession)(r,t.name,t.type);if("pdf"===a.type&&""===a.parsed.rawText)if(a.parsed.totalPages<=5)try{let e=await (0,b.default)(r),t=(0,y.enrichPDFWithText)(a.parsed,e.text);a.parsed=t}catch{}else a.parsed.rawText="[Long PDF - Text extraction skipped for performance. You can still view it.]";return x.NextResponse.json({sessionId:a.id,fileName:a.fileName,type:a.type,mimeType:a.mimeType,fileSize:a.parsed.fileSize,totalPages:a.parsed.totalPages,fields:a.parsed.fields,pages:a.parsed.pages.map(e=>({index:e.index,text:e.text.slice(0,2e3),html:e.html,fields:e.fields,dimensions:e.dimensions})),rawText:a.parsed.rawText.slice(0,5e3),metadata:a.parsed.metadata})}catch(t){let e=t instanceof Error?t.message:"Failed to parse file";return x.NextResponse.json({error:e},{status:500})}}e.s(["POST",0,k,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],349733);var v=e.i(349733);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/doc-editor/parse/route",pathname:"/api/doc-editor/parse",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/doc-editor/parse/route.ts",nextConfigOutput:"standalone",userland:v,...{}}),{workAsyncStorage:R,workUnitAsyncStorage:S,serverHooks:A}=E;async function P(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/doc-editor/parse/route";x=x.replace(/\/index$/,"")||"/";let w=await E.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:k,nextConfig:v,parsedUrl:R,isDraftMode:S,prerenderManifest:A,routerServerContext:P,isOnDemandRevalidate:C,revalidateOnlyGenerated:T,resolvedPathname:M,clientReferenceManifest:F,serverActionsManifest:q}=w,D=(0,o.normalizeAppPath)(x),I=!!(A.dynamicRoutes[D]||A.routes[M]),N=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,R,!1):t.end("This page could not be found"),null);if(I&&!S){let e=!!A.routes[M],t=A.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(v.adapterPath)return await N();throw new h.NoFallbackError}}let j=null;!I||E.isDev||S||(j="/index"===(j=M)?"/":j);let B=!0===E.isDev||!I,$=I&&!B;q&&F&&(0,n.setManifestsSingleton)({page:x,clientReferenceManifest:F,serverActionsManifest:q});let O=e.method||"GET",U=(0,s.getTracer)(),H=U.getActiveScopeSpan(),L=!!(null==P?void 0:P.isWrappedByNextServer),Q=!!(0,i.getRequestMeta)(e,"minimalMode"),Y=(0,i.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,v,A,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:k,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!v.experimental.authInterrupts},cacheComponents:!!v.cacheComponents,supportsDynamicResponse:B,incrementalCache:Y,cacheLifeProfiles:v.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>E.onRequestError(e,t,a,i,P)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),z=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let i,n=async e=>E.handle(z,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=U.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.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=`${O} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${O} ${x}`)}),o=async i=>{var s,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&C&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!I)return await (0,u.sendResponse)(K,W,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[g.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:x,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:C})},!1,P),t}},d=await E.handleResponse({req:e,nextConfig:v,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!I)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",C?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return Q&&I||p.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,u.sendResponse)(K,W,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};L&&H?await o(H):(i=U.getActiveScopeSpan(),await U.withPropagatedContext(e.headers,()=>U.trace(p.BaseServerSpan.handleRequest,{spanName:`${O} ${x}`,kind:s.SpanKind.SERVER,attributes:{"http.method":O,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:C})},!1,P),I)throw t;return await (0,u.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,P,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:S})},"routeModule",0,E,"serverHooks",0,A,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,S],898894)},195213,e=>{e.v(e=>Promise.resolve().then(()=>e(568886)))}];
142
142
 
143
- //# sourceMappingURL=%5Broot-of-the-server%5D__0g36cgg._.js.map
143
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0jrhbq8._.js.map
@@ -1,8 +1,8 @@
1
- module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},811917,(e,t,r)=>{t.exports=e.x("dockerode-2f9c00396d72a1e4",()=>require("dockerode-2f9c00396d72a1e4"))},983131,778923,e=>{"use strict";var t=e.i(811917),r=e.i(902157),a=e.i(750227),i=e.i(660526),s=e.i(666680);let n="larkup-sandbox:latest",o="/sandbox/output",l=a.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),d=null;function c(){return d||(d=new t.default),d}async function p(){let e=c();try{let t=await e.version(),r=await e.listImages({filters:{reference:[n]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function u(e){let t=c(),i=a.default.join(l,"Dockerfile");try{await r.promises.access(i)}catch{throw Error(`Sandbox Dockerfile not found at ${i}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let s=await t.buildImage({context:l,src:["Dockerfile"]},{t:n});await new Promise((r,a)=>{t.modem.followProgress(s,e=>{e?a(e):r()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function f(){let e=c();if((await e.listImages({filters:{reference:[n]}})).length>0)return!0;try{return await u(),!0}catch{return!1}}async function g(e,t){let n,l,d=c(),p=Date.now(),u=a.default.join(i.default.tmpdir(),`larkup-sandbox-${(0,s.randomUUID)()}`),f=a.default.join(u,"input"),g=a.default.join(u,"output");if(await r.promises.mkdir(f,{recursive:!0}),await r.promises.mkdir(g,{recursive:!0}),e.files)for(let t of e.files){let e=a.default.join(f,t.name);t.isBase64?await r.promises.writeFile(e,Buffer.from(t.content,"base64")):await r.promises.writeFile(e,t.content,"utf8")}if("python"===e.language){var m;m=e.code,n=`
1
+ module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},983131,778923,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(660526),i=e.i(666680);let s="larkup-sandbox:latest",n="/sandbox/output",o=r.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),l=null;async function c(){if(!l){let{default:e}=await import("dockerode");l=new e}return l}async function d(){let e=await c();try{let t=await e.version(),r=await e.listImages({filters:{reference:[s]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function p(e){let a=await c(),i=r.default.join(o,"Dockerfile");try{await t.promises.access(i)}catch{throw Error(`Sandbox Dockerfile not found at ${i}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let n=await a.buildImage({context:o,src:["Dockerfile"]},{t:s});await new Promise((t,r)=>{a.modem.followProgress(n,e=>{e?r(e):t()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function u(){let e=await c();if((await e.listImages({filters:{reference:[s]}})).length>0)return!0;try{return await p(),!0}catch{return!1}}async function f(e,s){let o,l,d=await c(),p=Date.now(),u=r.default.join(a.default.tmpdir(),`larkup-sandbox-${(0,i.randomUUID)()}`),f=r.default.join(u,"input"),g=r.default.join(u,"output");if(await t.promises.mkdir(f,{recursive:!0}),await t.promises.mkdir(g,{recursive:!0}),e.files)for(let a of e.files){let e=r.default.join(f,a.name);a.isBase64?await t.promises.writeFile(e,Buffer.from(a.content,"base64")):await t.promises.writeFile(e,a.content,"utf8")}if("python"===e.language){var m;m=e.code,o=`
2
2
  import sys, os, json, traceback
3
3
 
4
4
  # Ensure output directory exists
5
- os.makedirs("${o}", exist_ok=True)
5
+ os.makedirs("${n}", exist_ok=True)
6
6
 
7
7
  # ============================================================
8
8
  # SAFETY PREAMBLE: Suppress warnings & patch deprecated APIs
@@ -90,7 +90,7 @@ try:
90
90
  def _patched_show(*args, **kwargs):
91
91
  for fig_num in plt.get_fignums():
92
92
  fig = plt.figure(fig_num)
93
- fname = f"${o}/chart_{_figure_count[0]}.png"
93
+ fname = f"${n}/chart_{_figure_count[0]}.png"
94
94
  fig.savefig(fname, dpi=150, bbox_inches="tight", facecolor="white")
95
95
  _figure_count[0] += 1
96
96
  plt.close("all")
@@ -131,13 +131,13 @@ except Exception as e:
131
131
 
132
132
  # List generated artifacts
133
133
  artifacts = []
134
- if os.path.isdir("${o}"):
135
- for f in sorted(os.listdir("${o}")):
136
- fp = os.path.join("${o}", f)
134
+ if os.path.isdir("${n}"):
135
+ for f in sorted(os.listdir("${n}")):
136
+ fp = os.path.join("${n}", f)
137
137
  if os.path.isfile(fp):
138
138
  artifacts.append(f)
139
139
  if artifacts:
140
140
  print("\\n__ARTIFACTS__:" + json.dumps(artifacts))
141
- `;let t=a.default.join(u,"run.py");await r.promises.writeFile(t,n,"utf8"),l=["python3","/sandbox/run.py"]}else{let t=a.default.join(u,"run.js");await r.promises.writeFile(t,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??t.timeoutMs,_=null;try{_=await d.createContainer({Image:t.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*t.memoryMB*1024,CpuShares:t.cpuShares,NetworkMode:t.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${g}:${o}:rw`,`${u}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),i=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),s=await Promise.race([e,i]),n=await _.logs({stdout:!0,stderr:!0,follow:!1}),c=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let i=e.readUInt8(a),s=e.readUInt32BE(a+4);if((a+=8)+s>e.length)break;let n=e.subarray(a,a+s).toString("utf8");1===i?t+=n:2===i&&(r+=n),a+=s}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(n),m=[];try{for(let e of(await r.promises.readdir(g))){let t=a.default.join(g,e),i=await r.promises.readFile(t),s={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[a.default.extname(e).toLowerCase()]??"application/octet-stream";m.push({name:e,mimeType:s,data:i.toString("base64")})}}catch{}let{stdout:x,stderr:w}=c;return{stdout:x.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:w,exitCode:s.StatusCode??1,artifacts:m,executionTimeMs:Date.now()-p}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-p}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await r.promises.rm(u,{recursive:!0,force:!0})}catch{}}}let m={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return p();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await u(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await f())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return g(e,{...m,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},481910,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),i=e.i(765700),s=e.i(601263),n=e.i(706859),o=e.i(947547),l=e.i(819797),d=e.i(135958),c=e.i(86520),p=e.i(970949),u=e.i(741165),f=e.i(106898),g=e.i(454415),m=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),x=e.i(686296);e.i(907667);var w=e.i(203523);async function y(e){try{let t=(await e.formData()).getAll("files");if(!t||0===t.length)return x.NextResponse.json({error:"No files provided"},{status:400});let r=[];for(let e of t)try{let t=await e.arrayBuffer(),a=Buffer.from(t),i=await (0,w.parseDocument)(a,e.name,e.type),s=i.rawText||i.pages.map(e=>e.text).join("\n\n");r.push({fileName:e.name,content:s.substring(0,15e3)})}catch(t){r.push({fileName:e.name,content:"",error:t.message||"Failed to extract text"})}return x.NextResponse.json({results:r})}catch(e){return console.error("Extract text error:",e),x.NextResponse.json({error:"Internal Server Error"},{status:500})}}e.s(["POST",0,y],917960);var b=e.i(917960);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/doc-editor/extract-text/route",pathname:"/api/doc-editor/extract-text",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/doc-editor/extract-text/route.ts",nextConfigOutput:"standalone",userland:b,...{}}),{workAsyncStorage:v,workUnitAsyncStorage:E,serverHooks:R}=k;async function A(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/doc-editor/extract-text/route";x=x.replace(/\/index$/,"")||"/";let w=await k.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:v,nextConfig:E,parsedUrl:R,isDraftMode:A,prerenderManifest:S,routerServerContext:C,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,resolvedPathname:M,clientReferenceManifest:F,serverActionsManifest:q}=w,I=(0,o.normalizeAppPath)(x),N=!!(S.dynamicRoutes[I]||S.routes[M]),D=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,R,!1):t.end("This page could not be found"),null);if(N&&!A){let e=!!S.routes[M],t=S.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await D();throw new h.NoFallbackError}}let j=null;!N||k.isDev||A||(j="/index"===(j=M)?"/":j);let B=!0===k.isDev||!N,$=N&&!B;q&&F&&(0,n.setManifestsSingleton)({page:x,clientReferenceManifest:F,serverActionsManifest:q});let O=e.method||"GET",U=(0,s.getTracer)(),H=U.getActiveScopeSpan(),L=!!(null==C?void 0:C.isWrappedByNextServer),Q=!!(0,i.getRequestMeta)(e,"minimalMode"),Y=(0,i.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,E,S,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:v,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:B,incrementalCache:Y,cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>k.onRequestError(e,t,a,i,C)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),V=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let i,n=async e=>k.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=U.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.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=`${O} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${O} ${x}`)}),o=async i=>{var s,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&P&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!N)return await (0,u.sendResponse)(K,W,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:s.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:x,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:P})},!1,C),t}},d=await k.handleResponse({req:e,nextConfig:E,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!N)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",P?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return Q&&N||c.delete(m.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,g.getCacheControlHeader)(d.cacheControl)),await (0,u.sendResponse)(K,W,new Response(d.value.body,{headers:c,status:d.value.status||200})),null};L&&H?await o(H):(i=U.getActiveScopeSpan(),await U.withPropagatedContext(e.headers,()=>U.trace(c.BaseServerSpan.handleRequest,{spanName:`${O} ${x}`,kind:s.SpanKind.SERVER,attributes:{"http.method":O,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:P})},!1,C),N)throw t;return await (0,u.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:v,workUnitAsyncStorage:E})},"routeModule",0,k,"serverHooks",0,R,"workAsyncStorage",0,v,"workUnitAsyncStorage",0,E],481910)},195213,e=>{e.v(e=>Promise.resolve().then(()=>e(568886)))}];
141
+ `;let a=r.default.join(u,"run.py");await t.promises.writeFile(a,o,"utf8"),l=["python3","/sandbox/run.py"]}else{let a=r.default.join(u,"run.js");await t.promises.writeFile(a,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??s.timeoutMs,_=null;try{_=await d.createContainer({Image:s.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*s.memoryMB*1024,CpuShares:s.cpuShares,NetworkMode:s.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${g}:${n}:rw`,`${u}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),a=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),i=await Promise.race([e,a]),o=await _.logs({stdout:!0,stderr:!0,follow:!1}),c=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let i=e.readUInt8(a),s=e.readUInt32BE(a+4);if((a+=8)+s>e.length)break;let n=e.subarray(a,a+s).toString("utf8");1===i?t+=n:2===i&&(r+=n),a+=s}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(o),m=[];try{for(let e of(await t.promises.readdir(g))){let a=r.default.join(g,e),i=await t.promises.readFile(a),s={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[r.default.extname(e).toLowerCase()]??"application/octet-stream";m.push({name:e,mimeType:s,data:i.toString("base64")})}}catch{}let{stdout:x,stderr:w}=c;return{stdout:x.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:w,exitCode:i.StatusCode??1,artifacts:m,executionTimeMs:Date.now()-p}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-p}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await t.promises.rm(u,{recursive:!0,force:!0})}catch{}}}let g={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return d();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await p(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await u())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return f(e,{...g,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},481910,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),i=e.i(765700),s=e.i(601263),n=e.i(706859),o=e.i(947547),l=e.i(819797),c=e.i(135958),d=e.i(86520),p=e.i(970949),u=e.i(741165),f=e.i(106898),g=e.i(454415),m=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),x=e.i(686296);e.i(907667);var w=e.i(203523);async function y(e){try{let t=(await e.formData()).getAll("files");if(!t||0===t.length)return x.NextResponse.json({error:"No files provided"},{status:400});let r=[];for(let e of t)try{let t=await e.arrayBuffer(),a=Buffer.from(t),i=await (0,w.parseDocument)(a,e.name,e.type),s=i.rawText||i.pages.map(e=>e.text).join("\n\n");r.push({fileName:e.name,content:s.substring(0,15e3)})}catch(t){r.push({fileName:e.name,content:"",error:t.message||"Failed to extract text"})}return x.NextResponse.json({results:r})}catch(e){return console.error("Extract text error:",e),x.NextResponse.json({error:"Internal Server Error"},{status:500})}}e.s(["POST",0,y],917960);var b=e.i(917960);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/doc-editor/extract-text/route",pathname:"/api/doc-editor/extract-text",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/doc-editor/extract-text/route.ts",nextConfigOutput:"standalone",userland:b,...{}}),{workAsyncStorage:v,workUnitAsyncStorage:E,serverHooks:R}=k;async function A(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/doc-editor/extract-text/route";x=x.replace(/\/index$/,"")||"/";let w=await k.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:v,nextConfig:E,parsedUrl:R,isDraftMode:A,prerenderManifest:S,routerServerContext:C,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,resolvedPathname:M,clientReferenceManifest:F,serverActionsManifest:q}=w,I=(0,o.normalizeAppPath)(x),N=!!(S.dynamicRoutes[I]||S.routes[M]),D=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,R,!1):t.end("This page could not be found"),null);if(N&&!A){let e=!!S.routes[M],t=S.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await D();throw new h.NoFallbackError}}let j=null;!N||k.isDev||A||(j="/index"===(j=M)?"/":j);let B=!0===k.isDev||!N,$=N&&!B;q&&F&&(0,n.setManifestsSingleton)({page:x,clientReferenceManifest:F,serverActionsManifest:q});let O=e.method||"GET",U=(0,s.getTracer)(),H=U.getActiveScopeSpan(),L=!!(null==C?void 0:C.isWrappedByNextServer),Q=!!(0,i.getRequestMeta)(e,"minimalMode"),Y=(0,i.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,E,S,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:v,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:B,incrementalCache:Y,cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>k.onRequestError(e,t,a,i,C)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(K,(0,c.signalFromNodeResponse)(t));try{let i,n=async e=>k.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=U.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=`${O} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${O} ${x}`)}),o=async i=>{var s,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&P&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!N)return await (0,u.sendResponse)(K,W,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:s.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:x,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:P})},!1,C),t}},c=await k.handleResponse({req:e,nextConfig:E,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!N)return null;if((null==c||null==(s=c.value)?void 0:s.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(o=c.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",P?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,f.fromNodeOutgoingHttpHeaders)(c.value.headers);return Q&&N||d.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,g.getCacheControlHeader)(c.cacheControl)),await (0,u.sendResponse)(K,W,new Response(c.value.body,{headers:d,status:c.value.status||200})),null};L&&H?await o(H):(i=U.getActiveScopeSpan(),await U.withPropagatedContext(e.headers,()=>U.trace(d.BaseServerSpan.handleRequest,{spanName:`${O} ${x}`,kind:s.SpanKind.SERVER,attributes:{"http.method":O,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:P})},!1,C),N)throw t;return await (0,u.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:v,workUnitAsyncStorage:E})},"routeModule",0,k,"serverHooks",0,R,"workAsyncStorage",0,v,"workUnitAsyncStorage",0,E],481910)},195213,e=>{e.v(e=>Promise.resolve().then(()=>e(568886)))}];
142
142
 
143
- //# sourceMappingURL=%5Broot-of-the-server%5D__10zm06g._.js.map
143
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0oblxyb._.js.map
@@ -1,8 +1,8 @@
1
- module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},811917,(e,t,r)=>{t.exports=e.x("dockerode-2f9c00396d72a1e4",()=>require("dockerode-2f9c00396d72a1e4"))},983131,778923,e=>{"use strict";var t=e.i(811917),r=e.i(902157),a=e.i(750227),n=e.i(660526),s=e.i(666680);let i="larkup-sandbox:latest",o="/sandbox/output",l=a.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),d=null;function c(){return d||(d=new t.default),d}async function u(){let e=c();try{let t=await e.version(),r=await e.listImages({filters:{reference:[i]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function p(e){let t=c(),n=a.default.join(l,"Dockerfile");try{await r.promises.access(n)}catch{throw Error(`Sandbox Dockerfile not found at ${n}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let s=await t.buildImage({context:l,src:["Dockerfile"]},{t:i});await new Promise((r,a)=>{t.modem.followProgress(s,e=>{e?a(e):r()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function f(){let e=c();if((await e.listImages({filters:{reference:[i]}})).length>0)return!0;try{return await p(),!0}catch{return!1}}async function g(e,t){let i,l,d=c(),u=Date.now(),p=a.default.join(n.default.tmpdir(),`larkup-sandbox-${(0,s.randomUUID)()}`),f=a.default.join(p,"input"),g=a.default.join(p,"output");if(await r.promises.mkdir(f,{recursive:!0}),await r.promises.mkdir(g,{recursive:!0}),e.files)for(let t of e.files){let e=a.default.join(f,t.name);t.isBase64?await r.promises.writeFile(e,Buffer.from(t.content,"base64")):await r.promises.writeFile(e,t.content,"utf8")}if("python"===e.language){var m;m=e.code,i=`
1
+ module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},983131,778923,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(660526),n=e.i(666680);let i="larkup-sandbox:latest",s="/sandbox/output",o=r.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),l=null;async function c(){if(!l){let{default:e}=await import("dockerode");l=new e}return l}async function d(){let e=await c();try{let t=await e.version(),r=await e.listImages({filters:{reference:[i]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function u(e){let a=await c(),n=r.default.join(o,"Dockerfile");try{await t.promises.access(n)}catch{throw Error(`Sandbox Dockerfile not found at ${n}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let s=await a.buildImage({context:o,src:["Dockerfile"]},{t:i});await new Promise((t,r)=>{a.modem.followProgress(s,e=>{e?r(e):t()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function p(){let e=await c();if((await e.listImages({filters:{reference:[i]}})).length>0)return!0;try{return await u(),!0}catch{return!1}}async function f(e,i){let o,l,d=await c(),u=Date.now(),p=r.default.join(a.default.tmpdir(),`larkup-sandbox-${(0,n.randomUUID)()}`),f=r.default.join(p,"input"),g=r.default.join(p,"output");if(await t.promises.mkdir(f,{recursive:!0}),await t.promises.mkdir(g,{recursive:!0}),e.files)for(let a of e.files){let e=r.default.join(f,a.name);a.isBase64?await t.promises.writeFile(e,Buffer.from(a.content,"base64")):await t.promises.writeFile(e,a.content,"utf8")}if("python"===e.language){var m;m=e.code,o=`
2
2
  import sys, os, json, traceback
3
3
 
4
4
  # Ensure output directory exists
5
- os.makedirs("${o}", exist_ok=True)
5
+ os.makedirs("${s}", exist_ok=True)
6
6
 
7
7
  # ============================================================
8
8
  # SAFETY PREAMBLE: Suppress warnings & patch deprecated APIs
@@ -90,7 +90,7 @@ try:
90
90
  def _patched_show(*args, **kwargs):
91
91
  for fig_num in plt.get_fignums():
92
92
  fig = plt.figure(fig_num)
93
- fname = f"${o}/chart_{_figure_count[0]}.png"
93
+ fname = f"${s}/chart_{_figure_count[0]}.png"
94
94
  fig.savefig(fname, dpi=150, bbox_inches="tight", facecolor="white")
95
95
  _figure_count[0] += 1
96
96
  plt.close("all")
@@ -131,13 +131,13 @@ except Exception as e:
131
131
 
132
132
  # List generated artifacts
133
133
  artifacts = []
134
- if os.path.isdir("${o}"):
135
- for f in sorted(os.listdir("${o}")):
136
- fp = os.path.join("${o}", f)
134
+ if os.path.isdir("${s}"):
135
+ for f in sorted(os.listdir("${s}")):
136
+ fp = os.path.join("${s}", f)
137
137
  if os.path.isfile(fp):
138
138
  artifacts.append(f)
139
139
  if artifacts:
140
140
  print("\\n__ARTIFACTS__:" + json.dumps(artifacts))
141
- `;let t=a.default.join(p,"run.py");await r.promises.writeFile(t,i,"utf8"),l=["python3","/sandbox/run.py"]}else{let t=a.default.join(p,"run.js");await r.promises.writeFile(t,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??t.timeoutMs,_=null;try{_=await d.createContainer({Image:t.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*t.memoryMB*1024,CpuShares:t.cpuShares,NetworkMode:t.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${g}:${o}:rw`,`${p}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),n=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),s=await Promise.race([e,n]),i=await _.logs({stdout:!0,stderr:!0,follow:!1}),c=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let n=e.readUInt8(a),s=e.readUInt32BE(a+4);if((a+=8)+s>e.length)break;let i=e.subarray(a,a+s).toString("utf8");1===n?t+=i:2===n&&(r+=i),a+=s}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(i),m=[];try{for(let e of(await r.promises.readdir(g))){let t=a.default.join(g,e),n=await r.promises.readFile(t),s={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[a.default.extname(e).toLowerCase()]??"application/octet-stream";m.push({name:e,mimeType:s,data:n.toString("base64")})}}catch{}let{stdout:w,stderr:x}=c;return{stdout:w.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:x,exitCode:s.StatusCode??1,artifacts:m,executionTimeMs:Date.now()-u}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-u}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await r.promises.rm(p,{recursive:!0,force:!0})}catch{}}}let m={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return u();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await p(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await f())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return g(e,{...m,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},311541,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),n=e.i(765700),s=e.i(601263),i=e.i(706859),o=e.i(947547),l=e.i(819797),d=e.i(135958),c=e.i(86520),u=e.i(970949),p=e.i(741165),f=e.i(106898),g=e.i(454415),m=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),w=e.i(686296);e.i(983131);let x=new(e.i(778923)).SandboxManager({backend:"docker"});async function y(){try{let e=await x.healthCheck();return w.NextResponse.json(e)}catch(t){let e=t instanceof Error?t.message:"Health check failed";return w.NextResponse.json({status:"error",error:e},{status:500})}}async function b(e){try{let t=new URL(e.url).searchParams.get("action");if("setup"===t){let e=[];return await x.setup(t=>e.push(t)),w.NextResponse.json({ok:!0,logs:e})}let r=await e.json();if(!r.code)return w.NextResponse.json({error:"code is required"},{status:400});let a=await x.execute({code:r.code,language:r.language??"python",files:r.files,timeout:r.timeout});return w.NextResponse.json(a)}catch(t){let e=t instanceof Error?t.message:"Execution failed";return w.NextResponse.json({error:e},{status:500})}}e.s(["GET",0,y,"POST",0,b,"dynamic",0,"force-dynamic","maxDuration",0,60,"runtime",0,"nodejs"],110050);var k=e.i(110050);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/sandbox/route",pathname:"/api/sandbox",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/sandbox/route.ts",nextConfigOutput:"standalone",userland:k,...{}}),{workAsyncStorage:R,workUnitAsyncStorage:v,serverHooks:A}=E;async function S(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/sandbox/route";w=w.replace(/\/index$/,"")||"/";let x=await E.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!x)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:k,nextConfig:R,parsedUrl:v,isDraftMode:A,prerenderManifest:S,routerServerContext:C,isOnDemandRevalidate:P,revalidateOnlyGenerated:M,resolvedPathname:T,clientReferenceManifest:F,serverActionsManifest:j}=x,N=(0,o.normalizeAppPath)(w),I=!!(S.dynamicRoutes[N]||S.routes[T]),D=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,v,!1):t.end("This page could not be found"),null);if(I&&!A){let e=!!S.routes[T],t=S.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(R.adapterPath)return await D();throw new h.NoFallbackError}}let q=null;!I||E.isDev||A||(q="/index"===(q=T)?"/":q);let $=!0===E.isDev||!I,B=I&&!$;j&&F&&(0,i.setManifestsSingleton)({page:w,clientReferenceManifest:F,serverActionsManifest:j});let U=e.method||"GET",O=(0,s.getTracer)(),H=O.getActiveScopeSpan(),L=!!(null==C?void 0:C.isWrappedByNextServer),Q=!!(0,n.getRequestMeta)(e,"minimalMode"),Y=(0,n.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,R,S,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:k,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!R.experimental.authInterrupts},cacheComponents:!!R.cacheComponents,supportsDynamicResponse:$,incrementalCache:Y,cacheLifeProfiles:R.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>E.onRequestError(e,t,a,n,C)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),V=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let n,i=async e=>E.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=O.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.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),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${U} ${w}`)}),o=async n=>{var s,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&P&&M&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await i(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(K,W,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},!1,C),t}},d=await E.handleResponse({req:e,nextConfig:R,cacheKey:q,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:M,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!I)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",P?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return Q&&I||c.delete(m.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,g.getCacheControlHeader)(d.cacheControl)),await (0,p.sendResponse)(K,W,new Response(d.value.body,{headers:c,status:d.value.status||200})),null};L&&H?await o(H):(n=O.getActiveScopeSpan(),await O.withPropagatedContext(e.headers,()=>O.trace(c.BaseServerSpan.handleRequest,{spanName:`${U} ${w}`,kind:s.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},!1,C),I)throw t;return await (0,p.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:v})},"routeModule",0,E,"serverHooks",0,A,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,v],311541)}];
141
+ `;let a=r.default.join(p,"run.py");await t.promises.writeFile(a,o,"utf8"),l=["python3","/sandbox/run.py"]}else{let a=r.default.join(p,"run.js");await t.promises.writeFile(a,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??i.timeoutMs,_=null;try{_=await d.createContainer({Image:i.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*i.memoryMB*1024,CpuShares:i.cpuShares,NetworkMode:i.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${g}:${s}:rw`,`${p}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),a=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),n=await Promise.race([e,a]),o=await _.logs({stdout:!0,stderr:!0,follow:!1}),c=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let n=e.readUInt8(a),i=e.readUInt32BE(a+4);if((a+=8)+i>e.length)break;let s=e.subarray(a,a+i).toString("utf8");1===n?t+=s:2===n&&(r+=s),a+=i}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(o),m=[];try{for(let e of(await t.promises.readdir(g))){let a=r.default.join(g,e),n=await t.promises.readFile(a),i={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[r.default.extname(e).toLowerCase()]??"application/octet-stream";m.push({name:e,mimeType:i,data:n.toString("base64")})}}catch{}let{stdout:w,stderr:x}=c;return{stdout:w.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:x,exitCode:n.StatusCode??1,artifacts:m,executionTimeMs:Date.now()-u}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-u}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await t.promises.rm(p,{recursive:!0,force:!0})}catch{}}}let g={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return d();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await u(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await p())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return f(e,{...g,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},311541,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),n=e.i(765700),i=e.i(601263),s=e.i(706859),o=e.i(947547),l=e.i(819797),c=e.i(135958),d=e.i(86520),u=e.i(970949),p=e.i(741165),f=e.i(106898),g=e.i(454415),m=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),w=e.i(686296);e.i(983131);let x=new(e.i(778923)).SandboxManager({backend:"docker"});async function y(){try{let e=await x.healthCheck();return w.NextResponse.json(e)}catch(t){let e=t instanceof Error?t.message:"Health check failed";return w.NextResponse.json({status:"error",error:e},{status:500})}}async function b(e){try{let t=new URL(e.url).searchParams.get("action");if("setup"===t){let e=[];return await x.setup(t=>e.push(t)),w.NextResponse.json({ok:!0,logs:e})}let r=await e.json();if(!r.code)return w.NextResponse.json({error:"code is required"},{status:400});let a=await x.execute({code:r.code,language:r.language??"python",files:r.files,timeout:r.timeout});return w.NextResponse.json(a)}catch(t){let e=t instanceof Error?t.message:"Execution failed";return w.NextResponse.json({error:e},{status:500})}}e.s(["GET",0,y,"POST",0,b,"dynamic",0,"force-dynamic","maxDuration",0,60,"runtime",0,"nodejs"],110050);var k=e.i(110050);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/sandbox/route",pathname:"/api/sandbox",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/sandbox/route.ts",nextConfigOutput:"standalone",userland:k,...{}}),{workAsyncStorage:R,workUnitAsyncStorage:v,serverHooks:A}=E;async function S(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/sandbox/route";w=w.replace(/\/index$/,"")||"/";let x=await E.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!x)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:k,nextConfig:R,parsedUrl:v,isDraftMode:A,prerenderManifest:S,routerServerContext:C,isOnDemandRevalidate:P,revalidateOnlyGenerated:M,resolvedPathname:T,clientReferenceManifest:F,serverActionsManifest:j}=x,N=(0,o.normalizeAppPath)(w),I=!!(S.dynamicRoutes[N]||S.routes[T]),D=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,v,!1):t.end("This page could not be found"),null);if(I&&!A){let e=!!S.routes[T],t=S.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(R.adapterPath)return await D();throw new h.NoFallbackError}}let q=null;!I||E.isDev||A||(q="/index"===(q=T)?"/":q);let $=!0===E.isDev||!I,B=I&&!$;j&&F&&(0,s.setManifestsSingleton)({page:w,clientReferenceManifest:F,serverActionsManifest:j});let U=e.method||"GET",O=(0,i.getTracer)(),H=O.getActiveScopeSpan(),L=!!(null==C?void 0:C.isWrappedByNextServer),Q=!!(0,n.getRequestMeta)(e,"minimalMode"),Y=(0,n.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,R,S,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:k,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!R.experimental.authInterrupts},cacheComponents:!!R.cacheComponents,supportsDynamicResponse:$,incrementalCache:Y,cacheLifeProfiles:R.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>E.onRequestError(e,t,a,n,C)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(K,(0,c.signalFromNodeResponse)(t));try{let n,s=async e=>E.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=O.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=`${U} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${U} ${w}`)}),o=async n=>{var i,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&P&&M&&!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=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(K,W,i,G.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.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 E.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},!1,C),t}},c=await E.handleResponse({req:e,nextConfig:R,cacheKey:q,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:M,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!I)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(o=c.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",P?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,f.fromNodeOutgoingHttpHeaders)(c.value.headers);return Q&&I||d.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,g.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(K,W,new Response(c.value.body,{headers:d,status:c.value.status||200})),null};L&&H?await o(H):(n=O.getActiveScopeSpan(),await O.withPropagatedContext(e.headers,()=>O.trace(d.BaseServerSpan.handleRequest,{spanName:`${U} ${w}`,kind:i.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},!1,C),I)throw t;return await (0,p.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:v})},"routeModule",0,E,"serverHooks",0,A,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,v],311541)}];
142
142
 
143
- //# sourceMappingURL=%5Broot-of-the-server%5D__100gqj0._.js.map
143
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0ougw4j._.js.map
@@ -1,8 +1,8 @@
1
- module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},811917,(e,t,r)=>{t.exports=e.x("dockerode-2f9c00396d72a1e4",()=>require("dockerode-2f9c00396d72a1e4"))},983131,778923,e=>{"use strict";var t=e.i(811917),r=e.i(902157),a=e.i(750227),i=e.i(660526),n=e.i(666680);let s="larkup-sandbox:latest",o="/sandbox/output",l=a.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),d=null;function c(){return d||(d=new t.default),d}async function p(){let e=c();try{let t=await e.version(),r=await e.listImages({filters:{reference:[s]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function u(e){let t=c(),i=a.default.join(l,"Dockerfile");try{await r.promises.access(i)}catch{throw Error(`Sandbox Dockerfile not found at ${i}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let n=await t.buildImage({context:l,src:["Dockerfile"]},{t:s});await new Promise((r,a)=>{t.modem.followProgress(n,e=>{e?a(e):r()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function f(){let e=c();if((await e.listImages({filters:{reference:[s]}})).length>0)return!0;try{return await u(),!0}catch{return!1}}async function g(e,t){let s,l,d=c(),p=Date.now(),u=a.default.join(i.default.tmpdir(),`larkup-sandbox-${(0,n.randomUUID)()}`),f=a.default.join(u,"input"),g=a.default.join(u,"output");if(await r.promises.mkdir(f,{recursive:!0}),await r.promises.mkdir(g,{recursive:!0}),e.files)for(let t of e.files){let e=a.default.join(f,t.name);t.isBase64?await r.promises.writeFile(e,Buffer.from(t.content,"base64")):await r.promises.writeFile(e,t.content,"utf8")}if("python"===e.language){var m;m=e.code,s=`
1
+ module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},983131,778923,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(660526),i=e.i(666680);let n="larkup-sandbox:latest",s="/sandbox/output",o=r.default.join({get url(){return`file://${e.P("packages/sandbox/dist/docker-runner.js")}`}}.dirname??"/ROOT/packages/sandbox/dist",".."),l=null;async function d(){if(!l){let{default:e}=await import("dockerode");l=new e}return l}async function c(){let e=await d();try{let t=await e.version(),r=await e.listImages({filters:{reference:[n]}});return{status:r.length>0?"ready":"image-not-found",backend:"docker",dockerVersion:t.Version,imageReady:r.length>0}}catch(e){return{status:"docker-not-found",backend:"docker",error:e.message??"Docker daemon not available"}}}async function p(e){let a=await d(),i=r.default.join(o,"Dockerfile");try{await t.promises.access(i)}catch{throw Error(`Sandbox Dockerfile not found at ${i}. Ensure the @larkup/sandbox package is properly installed.`)}e?.("Building sandbox image…");let s=await a.buildImage({context:o,src:["Dockerfile"]},{t:n});await new Promise((t,r)=>{a.modem.followProgress(s,e=>{e?r(e):t()},t=>{t.stream&&e?.(t.stream.trim())})}),e?.("Sandbox image built successfully ✓")}async function u(){let e=await d();if((await e.listImages({filters:{reference:[n]}})).length>0)return!0;try{return await p(),!0}catch{return!1}}async function f(e,n){let o,l,c=await d(),p=Date.now(),u=r.default.join(a.default.tmpdir(),`larkup-sandbox-${(0,i.randomUUID)()}`),f=r.default.join(u,"input"),m=r.default.join(u,"output");if(await t.promises.mkdir(f,{recursive:!0}),await t.promises.mkdir(m,{recursive:!0}),e.files)for(let a of e.files){let e=r.default.join(f,a.name);a.isBase64?await t.promises.writeFile(e,Buffer.from(a.content,"base64")):await t.promises.writeFile(e,a.content,"utf8")}if("python"===e.language){var g;g=e.code,o=`
2
2
  import sys, os, json, traceback
3
3
 
4
4
  # Ensure output directory exists
5
- os.makedirs("${o}", exist_ok=True)
5
+ os.makedirs("${s}", exist_ok=True)
6
6
 
7
7
  # ============================================================
8
8
  # SAFETY PREAMBLE: Suppress warnings & patch deprecated APIs
@@ -90,7 +90,7 @@ try:
90
90
  def _patched_show(*args, **kwargs):
91
91
  for fig_num in plt.get_fignums():
92
92
  fig = plt.figure(fig_num)
93
- fname = f"${o}/chart_{_figure_count[0]}.png"
93
+ fname = f"${s}/chart_{_figure_count[0]}.png"
94
94
  fig.savefig(fname, dpi=150, bbox_inches="tight", facecolor="white")
95
95
  _figure_count[0] += 1
96
96
  plt.close("all")
@@ -102,7 +102,7 @@ except ImportError:
102
102
  # Execute user code with robust error handling
103
103
  # ============================================================
104
104
  try:
105
- exec(${JSON.stringify(m)})
105
+ exec(${JSON.stringify(g)})
106
106
 
107
107
  # Auto-save any remaining matplotlib figures
108
108
  try:
@@ -131,13 +131,13 @@ except Exception as e:
131
131
 
132
132
  # List generated artifacts
133
133
  artifacts = []
134
- if os.path.isdir("${o}"):
135
- for f in sorted(os.listdir("${o}")):
136
- fp = os.path.join("${o}", f)
134
+ if os.path.isdir("${s}"):
135
+ for f in sorted(os.listdir("${s}")):
136
+ fp = os.path.join("${s}", f)
137
137
  if os.path.isfile(fp):
138
138
  artifacts.append(f)
139
139
  if artifacts:
140
140
  print("\\n__ARTIFACTS__:" + json.dumps(artifacts))
141
- `;let t=a.default.join(u,"run.py");await r.promises.writeFile(t,s,"utf8"),l=["python3","/sandbox/run.py"]}else{let t=a.default.join(u,"run.js");await r.promises.writeFile(t,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??t.timeoutMs,_=null;try{_=await d.createContainer({Image:t.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*t.memoryMB*1024,CpuShares:t.cpuShares,NetworkMode:t.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${g}:${o}:rw`,`${u}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),i=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),n=await Promise.race([e,i]),s=await _.logs({stdout:!0,stderr:!0,follow:!1}),c=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let i=e.readUInt8(a),n=e.readUInt32BE(a+4);if((a+=8)+n>e.length)break;let s=e.subarray(a,a+n).toString("utf8");1===i?t+=s:2===i&&(r+=s),a+=n}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(s),m=[];try{for(let e of(await r.promises.readdir(g))){let t=a.default.join(g,e),i=await r.promises.readFile(t),n={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[a.default.extname(e).toLowerCase()]??"application/octet-stream";m.push({name:e,mimeType:n,data:i.toString("base64")})}}catch{}let{stdout:x,stderr:w}=c;return{stdout:x.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:w,exitCode:n.StatusCode??1,artifacts:m,executionTimeMs:Date.now()-p}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-p}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await r.promises.rm(u,{recursive:!0,force:!0})}catch{}}}let m={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return p();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await u(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await f())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return g(e,{...m,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},179453,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),i=e.i(765700),n=e.i(601263),s=e.i(706859),o=e.i(947547),l=e.i(819797),d=e.i(135958),c=e.i(86520),p=e.i(970949),u=e.i(741165),f=e.i(106898),g=e.i(454415),m=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),x=e.i(686296);e.i(907667);var w=e.i(490517);async function y(e){let t=new URL(e.url).searchParams.get("sessionId");if(!t)return x.NextResponse.json({error:"sessionId required"},{status:400});let r=(0,w.exportDocument)(t);return r?new x.NextResponse(r.buffer,{status:200,headers:{"Content-Type":r.mimeType,"Content-Disposition":`attachment; filename="${encodeURIComponent(r.fileName)}"`,"Content-Length":String(r.buffer.length)}}):x.NextResponse.json({error:"Session not found"},{status:404})}e.s(["GET",0,y,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],1263);var b=e.i(1263);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/doc-editor/export/route",pathname:"/api/doc-editor/export",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/doc-editor/export/route.ts",nextConfigOutput:"standalone",userland:b,...{}}),{workAsyncStorage:v,workUnitAsyncStorage:E,serverHooks:R}=k;async function A(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/doc-editor/export/route";x=x.replace(/\/index$/,"")||"/";let w=await k.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:v,nextConfig:E,parsedUrl:R,isDraftMode:A,prerenderManifest:S,routerServerContext:C,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,resolvedPathname:M,clientReferenceManifest:q,serverActionsManifest:I}=w,F=(0,o.normalizeAppPath)(x),D=!!(S.dynamicRoutes[F]||S.routes[M]),N=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,R,!1):t.end("This page could not be found"),null);if(D&&!A){let e=!!S.routes[M],t=S.dynamicRoutes[F];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await N();throw new h.NoFallbackError}}let j=null;!D||k.isDev||A||(j="/index"===(j=M)?"/":j);let $=!0===k.isDev||!D,B=D&&!$;I&&q&&(0,s.setManifestsSingleton)({page:x,clientReferenceManifest:q,serverActionsManifest:I});let U=e.method||"GET",O=(0,n.getTracer)(),H=O.getActiveScopeSpan(),L=!!(null==C?void 0:C.isWrappedByNextServer),Q=!!(0,i.getRequestMeta)(e,"minimalMode"),Y=(0,i.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,E,S,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:v,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:$,incrementalCache:Y,cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>k.onRequestError(e,t,a,i,C)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),V=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let i,s=async e=>k.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=O.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.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),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${U} ${x}`)}),o=async i=>{var n,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&P&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await s(i);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!D)return await (0,u.sendResponse)(K,W,n,G.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:n.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:x,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},!1,C),t}},d=await k.handleResponse({req:e,nextConfig:E,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!D)return null;if((null==d||null==(n=d.value)?void 0:n.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",P?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return Q&&D||c.delete(m.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,g.getCacheControlHeader)(d.cacheControl)),await (0,u.sendResponse)(K,W,new Response(d.value.body,{headers:c,status:d.value.status||200})),null};L&&H?await o(H):(i=O.getActiveScopeSpan(),await O.withPropagatedContext(e.headers,()=>O.trace(c.BaseServerSpan.handleRequest,{spanName:`${U} ${x}`,kind:n.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:F,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},!1,C),D)throw t;return await (0,u.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:v,workUnitAsyncStorage:E})},"routeModule",0,k,"serverHooks",0,R,"workAsyncStorage",0,v,"workUnitAsyncStorage",0,E],179453)},195213,e=>{e.v(e=>Promise.resolve().then(()=>e(568886)))}];
141
+ `;let a=r.default.join(u,"run.py");await t.promises.writeFile(a,o,"utf8"),l=["python3","/sandbox/run.py"]}else{let a=r.default.join(u,"run.js");await t.promises.writeFile(a,e.code,"utf8"),l=["node","/sandbox/run.js"]}let h=e.timeout??n.timeoutMs,_=null;try{_=await c.createContainer({Image:n.imageName,Cmd:l,Entrypoint:[],WorkingDir:"/sandbox/input",HostConfig:{AutoRemove:!1,Memory:1024*n.memoryMB*1024,CpuShares:n.cpuShares,NetworkMode:n.networkDisabled?"none":"bridge",Binds:[`${f}:/sandbox/input:ro`,`${m}:${s}:rw`,`${u}/run.py:/sandbox/run.py:ro`],ReadonlyRootfs:!1},Tty:!1,AttachStdout:!0,AttachStderr:!0}),await _.start();let e=_.wait(),a=new Promise((e,t)=>{setTimeout(async()=>{try{await _?.kill()}catch{}t(Error(`Execution timed out after ${h}ms`))},h)}),i=await Promise.race([e,a]),o=await _.logs({stdout:!0,stderr:!0,follow:!1}),d=function(e){let t="",r="";if("string"==typeof e)return{stdout:e,stderr:""};let a=0;for(;a<e.length&&!(a+8>e.length);){let i=e.readUInt8(a),n=e.readUInt32BE(a+4);if((a+=8)+n>e.length)break;let s=e.subarray(a,a+n).toString("utf8");1===i?t+=s:2===i&&(r+=s),a+=n}return t||r||!(e.length>0)||(t=e.toString("utf8")),{stdout:t,stderr:r}}(o),g=[];try{for(let e of(await t.promises.readdir(m))){let a=r.default.join(m,e),i=await t.promises.readFile(a),n={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".svg":"image/svg+xml",".gif":"image/gif",".csv":"text/csv",".json":"application/json",".txt":"text/plain",".html":"text/html",".pdf":"application/pdf"}[r.default.extname(e).toLowerCase()]??"application/octet-stream";g.push({name:e,mimeType:n,data:i.toString("base64")})}}catch{}let{stdout:w,stderr:x}=d;return{stdout:w.replace(/\n__ARTIFACTS__:.*$/m,"").trimEnd(),stderr:x,exitCode:i.StatusCode??1,artifacts:g,executionTimeMs:Date.now()-p}}catch(e){return{stdout:"",stderr:e.message??"Execution failed",exitCode:1,artifacts:[],executionTimeMs:Date.now()-p}}finally{if(_)try{await _.remove({force:!0})}catch{}try{await t.promises.rm(u,{recursive:!0,force:!0})}catch{}}}let m={imageName:"larkup-sandbox:latest",memoryMB:512,cpuShares:1024,timeoutMs:3e4,networkDisabled:!0};e.s(["SandboxManager",0,class{config;constructor(e){this.config={backend:e?.backend??"docker",docker:e?.docker,remote:e?.remote}}async healthCheck(){switch(this.config.backend){case"docker":return c();case"e2b":case"modal":case"custom":return{status:"error",backend:this.config.backend,error:`${this.config.backend} backend is not yet implemented. Use Docker for local execution.`};default:return{status:"error",backend:this.config.backend,error:`Unknown backend: ${this.config.backend}`}}}async setup(e){if("docker"===this.config.backend)await p(e);else throw Error(`Setup not supported for backend: ${this.config.backend}`)}async execute(e){switch(this.config.backend){case"docker":if(!await u())return{stdout:"",stderr:"Sandbox image not available. Run setup first or ensure Docker is installed.",exitCode:1,artifacts:[],executionTimeMs:0};return f(e,{...m,...this.config.docker});case"e2b":case"modal":case"custom":return{stdout:"",stderr:`${this.config.backend} backend is not yet implemented.`,exitCode:1,artifacts:[],executionTimeMs:0};default:return{stdout:"",stderr:`Unknown backend: ${this.config.backend}`,exitCode:1,artifacts:[],executionTimeMs:0}}}}],778923),e.s([],983131)},179453,e=>{"use strict";var t=e.i(850492),r=e.i(891119),a=e.i(697373),i=e.i(765700),n=e.i(601263),s=e.i(706859),o=e.i(947547),l=e.i(819797),d=e.i(135958),c=e.i(86520),p=e.i(970949),u=e.i(741165),f=e.i(106898),m=e.i(454415),g=e.i(37125),h=e.i(193695);e.i(530058);var _=e.i(605998),w=e.i(686296);e.i(907667);var x=e.i(490517);async function y(e){let t=new URL(e.url).searchParams.get("sessionId");if(!t)return w.NextResponse.json({error:"sessionId required"},{status:400});let r=(0,x.exportDocument)(t);return r?new w.NextResponse(r.buffer,{status:200,headers:{"Content-Type":r.mimeType,"Content-Disposition":`attachment; filename="${encodeURIComponent(r.fileName)}"`,"Content-Length":String(r.buffer.length)}}):w.NextResponse.json({error:"Session not found"},{status:404})}e.s(["GET",0,y,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],1263);var b=e.i(1263);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/doc-editor/export/route",pathname:"/api/doc-editor/export",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/doc-editor/export/route.ts",nextConfigOutput:"standalone",userland:b,...{}}),{workAsyncStorage:v,workUnitAsyncStorage:E,serverHooks:R}=k;async function A(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/doc-editor/export/route";w=w.replace(/\/index$/,"")||"/";let x=await k.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!x)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:b,params:v,nextConfig:E,parsedUrl:R,isDraftMode:A,prerenderManifest:S,routerServerContext:C,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,resolvedPathname:M,clientReferenceManifest:I,serverActionsManifest:q}=x,F=(0,o.normalizeAppPath)(w),D=!!(S.dynamicRoutes[F]||S.routes[M]),N=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,R,!1):t.end("This page could not be found"),null);if(D&&!A){let e=!!S.routes[M],t=S.dynamicRoutes[F];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await N();throw new h.NoFallbackError}}let j=null;!D||k.isDev||A||(j="/index"===(j=M)?"/":j);let $=!0===k.isDev||!D,B=D&&!$;q&&I&&(0,s.setManifestsSingleton)({page:w,clientReferenceManifest:I,serverActionsManifest:q});let U=e.method||"GET",O=(0,n.getTracer)(),H=O.getActiveScopeSpan(),L=!!(null==C?void 0:C.isWrappedByNextServer),Q=!!(0,i.getRequestMeta)(e,"minimalMode"),Y=(0,i.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,E,S,Q);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let G={params:v,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:$,incrementalCache:Y,cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>k.onRequestError(e,t,a,i,C)},sharedContext:{buildId:y,deploymentId:b}},K=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),V=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let i,s=async e=>k.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=O.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.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),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${U} ${w}`)}),o=async i=>{var n,o;let l=async({previousCacheEntry:r})=>{try{if(!Q&&P&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await s(i);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!D)return await (0,u.sendResponse)(K,W,n,G.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[g.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:n.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:B,isOnDemandRevalidate:P})},!1,C),t}},d=await k.handleResponse({req:e,nextConfig:E,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:Q});if(!D)return null;if((null==d||null==(n=d.value)?void 0:n.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Q||t.setHeader("x-nextjs-cache",P?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return Q&&D||c.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,u.sendResponse)(K,W,new Response(d.value.body,{headers:c,status:d.value.status||200})),null};L&&H?await o(H):(i=O.getActiveScopeSpan(),await O.withPropagatedContext(e.headers,()=>O.trace(c.BaseServerSpan.handleRequest,{spanName:`${U} ${w}`,kind:n.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof h.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:F,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},!1,C),D)throw t;return await (0,u.sendResponse)(K,W,new Response(null,{status:500})),null}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:v,workUnitAsyncStorage:E})},"routeModule",0,k,"serverHooks",0,R,"workAsyncStorage",0,v,"workUnitAsyncStorage",0,E],179453)},195213,e=>{e.v(e=>Promise.resolve().then(()=>e(568886)))}];
142
142
 
143
- //# sourceMappingURL=%5Broot-of-the-server%5D__044l2_f._.js.map
143
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0yj9mzb._.js.map