agentroam 0.2.0-preview.2 → 0.2.0-preview.4

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 (100) hide show
  1. package/README.md +12 -11
  2. package/dist/args.js +24 -8
  3. package/dist/args.test.js +25 -1
  4. package/dist/cli.js +112 -52
  5. package/dist/cloudflared/bundled-asset.js +37 -0
  6. package/dist/cloudflared/bundled-asset.test.js +50 -0
  7. package/dist/cloudflared/installer.js +83 -40
  8. package/dist/cloudflared/installer.test.js +63 -4
  9. package/dist/cloudflared/manifest.js +3 -5
  10. package/dist/tunnel/child-process.js +23 -0
  11. package/dist/tunnel/cloudflare-provider.js +59 -8
  12. package/dist/tunnel/cloudflare-provider.test.js +33 -0
  13. package/dist/tunnel/custom-command-provider.js +54 -4
  14. package/dist/tunnel/pinggy-provider.js +84 -0
  15. package/dist/tunnel/pinggy-provider.test.js +40 -0
  16. package/dist/tunnel/proxy-settings.js +141 -0
  17. package/dist/tunnel/proxy-settings.test.js +111 -0
  18. package/dist/tunnel/public-readiness.js +82 -0
  19. package/dist/tunnel/public-readiness.test.js +104 -0
  20. package/dist/tunnel/relay-orchestrator.js +43 -0
  21. package/dist/tunnel/relay-orchestrator.test.js +72 -0
  22. package/package.json +29 -8
  23. package/runtime/.next/BUILD_ID +1 -1
  24. package/runtime/.next/app-build-manifest.json +4 -4
  25. package/runtime/.next/app-path-routes-manifest.json +1 -1
  26. package/runtime/.next/build-manifest.json +7 -7
  27. package/runtime/.next/prerender-manifest.json +1 -1
  28. package/runtime/.next/react-loadable-manifest.json +2 -2
  29. package/runtime/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  30. package/runtime/.next/server/app/_not-found.html +1 -1
  31. package/runtime/.next/server/app/_not-found.rsc +1 -1
  32. package/runtime/.next/server/app/api/agent/abort/route.js +1 -1
  33. package/runtime/.next/server/app/api/agent/answer/route.js +1 -1
  34. package/runtime/.next/server/app/api/agent/model/route.js +1 -0
  35. package/runtime/.next/server/app/api/agent/model/route.js.nft.json +1 -0
  36. package/runtime/.next/server/app/api/agent/model.body +1 -0
  37. package/runtime/.next/server/app/api/agent/model.meta +1 -0
  38. package/runtime/.next/server/app/api/agent/run/route.js +1 -1
  39. package/runtime/.next/server/app/api/agent/steer/route.js +1 -0
  40. package/runtime/.next/server/app/api/agent/steer/route.js.nft.json +1 -0
  41. package/runtime/.next/server/app/api/agent/stream/route.js +3 -2
  42. package/runtime/.next/server/app/api/mcp/connect/route.js +1 -1
  43. package/runtime/.next/server/app/api/plugins/load/route.js +1 -1
  44. package/runtime/.next/server/app/api/remote-tools/register/route.js +1 -1
  45. package/runtime/.next/server/app/api/sessions/[id]/route.js +1 -1
  46. package/runtime/.next/server/app/api/sessions/route.js +1 -1
  47. package/runtime/.next/server/app/api/skills/route.js +1 -1
  48. package/runtime/.next/server/app/api/tools/route.js +1 -1
  49. package/runtime/.next/server/app/api/web-auth/login/route.js +1 -1
  50. package/runtime/.next/server/app/api/web-auth/logout/route.js +1 -1
  51. package/runtime/.next/server/app/api/web-auth/revoke-all/route.js +1 -1
  52. package/runtime/.next/server/app/api/web-auth/setup/route.js +1 -1
  53. package/runtime/.next/server/app/api/web-auth/status/route.js +1 -1
  54. package/runtime/.next/server/app/api/web-console/bootstrap/route.js +1 -1
  55. package/runtime/.next/server/app/api/web-console/device-state/route.js +1 -1
  56. package/runtime/.next/server/app/api/web-console/history/route.js +1 -1
  57. package/runtime/.next/server/app/api/web-console/history/route.js.nft.json +1 -1
  58. package/runtime/.next/server/app/api/web-console/preferences/route.js +1 -1
  59. package/runtime/.next/server/app/web/page.js +10 -10
  60. package/runtime/.next/server/app/web/page_client-reference-manifest.js +1 -1
  61. package/runtime/.next/server/app/web.html +1 -1
  62. package/runtime/.next/server/app/web.rsc +2 -2
  63. package/runtime/.next/server/app-paths-manifest.json +15 -13
  64. package/runtime/.next/server/chunks/322.js +28 -12
  65. package/runtime/.next/server/middleware-build-manifest.js +1 -1
  66. package/runtime/.next/server/middleware-react-loadable-manifest.js +1 -1
  67. package/runtime/.next/server/pages/404.html +1 -1
  68. package/runtime/.next/server/pages/500.html +1 -1
  69. package/runtime/.next/server/server-reference-manifest.json +1 -1
  70. package/runtime/.next/static/chunks/982.9e87a5cc0e6b13cf.js +1 -0
  71. package/runtime/.next/static/chunks/app/web/page-02e0df331bb14489.js +1 -0
  72. package/runtime/.next/static/chunks/{main-a7dd8c98b48af038.js → main-30618c50527ce4e9.js} +1 -1
  73. package/runtime/.next/static/chunks/{webpack-e56f3a1950168597.js → webpack-0c872a6ee48cbbdf.js} +1 -1
  74. package/runtime/node_modules/.package-lock.json +3 -3
  75. package/runtime/node_modules/@agent/core/dist/domain/context/ContextLoader.d.ts +2 -0
  76. package/runtime/node_modules/@agent/core/dist/domain/context/ContextLoader.d.ts.map +1 -1
  77. package/runtime/node_modules/@agent/core/dist/index.js +114 -12
  78. package/runtime/node_modules/@agent/core/dist/index.js.map +7 -6
  79. package/runtime/node_modules/@agent/core/dist/infrastructure/SQLiteAnonymousWebStore.d.ts +13 -0
  80. package/runtime/node_modules/@agent/core/dist/infrastructure/SQLiteAnonymousWebStore.d.ts.map +1 -0
  81. package/runtime/node_modules/@agent/core/dist/infrastructure/SQLiteAnonymousWebStore.test.d.ts +2 -0
  82. package/runtime/node_modules/@agent/core/dist/infrastructure/SQLiteAnonymousWebStore.test.d.ts.map +1 -0
  83. package/runtime/node_modules/@agent/core/dist/infrastructure/SQLiteDatabase.d.ts.map +1 -1
  84. package/runtime/node_modules/@agent/core/dist/infrastructure/SQLiteSessionStore.d.ts.map +1 -1
  85. package/runtime/node_modules/@agent/core/dist/infrastructure/index.d.ts +1 -0
  86. package/runtime/node_modules/@agent/core/dist/infrastructure/index.d.ts.map +1 -1
  87. package/runtime/node_modules/node-abi/abi_registry.json +7 -0
  88. package/runtime/node_modules/node-abi/package.json +1 -1
  89. package/runtime/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  90. package/runtime/package-lock.json +3 -3
  91. package/runtime/webapp/dist/assets/App-lXIeMH5u.js +52 -0
  92. package/runtime/webapp/dist/assets/index-BAFMhDtY.js +42 -0
  93. package/runtime/webapp/dist/assets/index-Beg9M2xI.css +1 -0
  94. package/runtime/webapp/dist/index.html +17 -0
  95. package/runtime/webapp/dist/pcm-audio-worklet.js +126 -0
  96. package/runtime/ws-server.mjs +148 -18
  97. package/runtime/.next/static/chunks/804.0e20fa702013ffef.js +0 -1
  98. package/runtime/.next/static/chunks/app/web/page-800bcc7d84eb45e4.js +0 -1
  99. /package/runtime/.next/static/{47UkTmBGxP5qz2mnMbNEp → dclalTmecO-HMVQvSKG7g}/_buildManifest.js +0 -0
  100. /package/runtime/.next/static/{47UkTmBGxP5qz2mnMbNEp → dclalTmecO-HMVQvSKG7g}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=616,e.ids=[616],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},3266:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>m,patchFetch:()=>g,requestAsyncStorage:()=>p,routeModule:()=>d,serverHooks:()=>h,staticGenerationAsyncStorage:()=>c});var r={};s.r(r),s.d(r,{POST:()=>u});var o=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(e){try{let t=await e.json();if(!t.input)return a.NextResponse.json({error:"input is required"},{status:400});let s=t.sessionId??crypto.randomUUID(),r=l.f.getSessionStore(),o=await r.get(s);if(!o){let e=new Date().toISOString();o=await r.create({id:s,projectId:"",title:`Chat ${e}`,status:"idle",messages:[],events:[],created:e,updated:e,metadata:{}})}return t.model&&l.f.getBuilder().withModel(t.model.provider,{apiKey:t.model.apiKey,modelId:t.model.modelId,baseUrl:t.model.baseUrl}),l.f.run(t.input,s).catch(e=>{console.error("Agent run error:",e)}),a.NextResponse.json({sessionId:o.id,streamUrl:`/api/agent/stream?sessionId=${o.id}`})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Internal error"},{status:500})}}let d=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/agent/run/route",pathname:"/api/agent/run",filename:"route",bundlePath:"app/api/agent/run/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/agent/run/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:p,staticGenerationAsyncStorage:c,serverHooks:h}=d,m="/api/agent/run/route";function g(){return(0,n.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:c})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),o=s(785);class i{constructor(){this.baseDir=(0,o.k)(),this.agent=null,this.builder=null,this.sessionStore=new r.m6(this.baseDir),this.projectStore=new r.XW(this.baseDir),this.remoteToolStore=new r.rt((0,r.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new r.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new r.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let r of e){if("text_chunk"===r.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=r.text;continue}if("tool_call"===r.type){s&&!s.toolCalls?s.toolCalls=[r.toolCall]:t.push({role:"assistant",content:"",toolCalls:[r.toolCall]}),s=null;continue}if("tool_result"===r.type){t.push({role:"tool",content:r.result.content,toolCallId:r.result.toolCallId});continue}if("ask_user"===r.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===r.type&&(s?s.content=r.finalText||s.content:r.finalText?.trim()&&t.push({role:"assistant",content:r.finalText}),s=null)}return t}async run(e,t){let s;let o=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=o?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new r.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),r=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...r])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let r=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:r})})}answerQuestion(e,t,s){let r=this.pendingQuestions.get(e);return!!r&&(clearTimeout(r.timer),this.pendingQuestions.delete(e),r.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var r=s(1041),o=s(9411);let i=(0,o.resolve)((0,o.dirname)((0,r.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(3266));module.exports=r})();
1
+ "use strict";(()=>{var e={};e.id=616,e.ids=[616],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},3266:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>g,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>p,staticGenerationAsyncStorage:()=>h});var r={};s.r(r),s.d(r,{POST:()=>u});var o=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(e){try{let t=await e.json();if(!t.input)return a.NextResponse.json({error:"input is required"},{status:400});let s=t.sessionId??crypto.randomUUID(),r=l.f.getSessionStore(),o=await r.get(s);if(!o){let e=new Date().toISOString();o=await r.create({id:s,projectId:"",title:`Chat ${e}`,status:"idle",messages:[],events:[],created:e,updated:e,metadata:{}})}return t.model&&l.f.getBuilder().withModel(t.model.provider,{apiKey:t.model.apiKey,modelId:t.model.modelId,baseUrl:t.model.baseUrl}),l.f.run(t.input,s,t.images).catch(e=>{console.error("Agent run error:",e)}),a.NextResponse.json({sessionId:o.id,streamUrl:`/api/agent/stream?sessionId=${o.id}`})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Internal error"},{status:500})}}let d=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/agent/run/route",pathname:"/api/agent/run",filename:"route",bundlePath:"app/api/agent/run/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/agent/run/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:c,staticGenerationAsyncStorage:h,serverHooks:p}=d,g="/api/agent/run/route";function m(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:h})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),o=s(785);class i{constructor(){this.baseDir=(0,o.k)(),this.builder=null,this.sessionStore=new r.m6(this.baseDir),this.projectStore=new r.XW(this.baseDir),this.remoteToolStore=new r.rt((0,r.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new r.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new r.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let r of this.recentEvents.get(e)??[])if(!(r.id<=s))try{t(r.event,r.id)}catch{}let r=this.subscribers.get(e)??new Set;return r.add(t),this.subscribers.set(e,r),()=>{r.delete(t),0===r.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let r=this.recentEvents.get(e);for(let o of(r&&(r.push({id:s,event:t}),r.length>500&&r.splice(0,r.length-500)),this.subscribers.get(e)??[]))try{o(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let r of e){if("text_chunk"===r.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=r.text;continue}if("tool_call"===r.type){s&&!s.toolCalls?s.toolCalls=[r.toolCall]:t.push({role:"assistant",content:"",toolCalls:[r.toolCall]}),s=null;continue}if("tool_result"===r.type){t.push({role:"tool",content:r.result.content,toolCallId:r.result.toolCallId});continue}if("ask_user"===r.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===r.type&&(s?s.content=r.finalText||s.content:r.finalText?.trim()&&t.push({role:"assistant",content:r.finalText}),s=null)}return t}async run(e,t,s){let o;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new r.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),r=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...r])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let r=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:r})})}answerQuestion(e,t,s){let r=this.pendingQuestions.get(e);return!!r&&(clearTimeout(r.timer),this.pendingQuestions.delete(e),r.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var r=s(1041),o=s(9411);let i=(0,o.resolve)((0,o.dirname)((0,r.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(3266));module.exports=r})();
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var e={};e.id=369,e.ids=[369],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},8790:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>g,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>p,staticGenerationAsyncStorage:()=>h});var r={};s.r(r),s.d(r,{POST:()=>u});var o=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(e){try{let t=await e.json();if(!t.input||!t.sessionId)return a.NextResponse.json({error:"input and sessionId are required"},{status:400});let s=await l.f.steer(t.input,t.sessionId);return a.NextResponse.json({steered:s})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Internal error"},{status:500})}}let d=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/agent/steer/route",pathname:"/api/agent/steer",filename:"route",bundlePath:"app/api/agent/steer/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/agent/steer/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:c,staticGenerationAsyncStorage:h,serverHooks:p}=d,g="/api/agent/steer/route";function m(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:h})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),o=s(785);class i{constructor(){this.baseDir=(0,o.k)(),this.builder=null,this.sessionStore=new r.m6(this.baseDir),this.projectStore=new r.XW(this.baseDir),this.remoteToolStore=new r.rt((0,r.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new r.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new r.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let r of this.recentEvents.get(e)??[])if(!(r.id<=s))try{t(r.event,r.id)}catch{}let r=this.subscribers.get(e)??new Set;return r.add(t),this.subscribers.set(e,r),()=>{r.delete(t),0===r.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let r=this.recentEvents.get(e);for(let o of(r&&(r.push({id:s,event:t}),r.length>500&&r.splice(0,r.length-500)),this.subscribers.get(e)??[]))try{o(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let r of e){if("text_chunk"===r.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=r.text;continue}if("tool_call"===r.type){s&&!s.toolCalls?s.toolCalls=[r.toolCall]:t.push({role:"assistant",content:"",toolCalls:[r.toolCall]}),s=null;continue}if("tool_result"===r.type){t.push({role:"tool",content:r.result.content,toolCallId:r.result.toolCallId});continue}if("ask_user"===r.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===r.type&&(s?s.content=r.finalText||s.content:r.finalText?.trim()&&t.push({role:"assistant",content:r.finalText}),s=null)}return t}async run(e,t,s){let o;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new r.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),r=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...r])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let r=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:r})})}answerQuestion(e,t,s){let r=this.pendingQuestions.get(e);return!!r&&(clearTimeout(r.timer),this.pendingQuestions.delete(e),r.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var r=s(1041),o=s(9411);let i=(0,o.resolve)((0,o.dirname)((0,r.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(8790));module.exports=r})();
@@ -0,0 +1 @@
1
+ {"version":1,"files":["../../../../../../node_modules/better-sqlite3","../../../../../../node_modules/next","../../../../../../package.json","../../../../../package.json","../../../../chunks/322.js","../../../../chunks/375.js","../../../../chunks/703.js","../../../../webpack-runtime.js"]}
@@ -1,3 +1,4 @@
1
- "use strict";(()=>{var e={};e.id=820,e.ids=[820],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},2592:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>d,routeModule:()=>u,serverHooks:()=>p,staticGenerationAsyncStorage:()=>c});var o={};s.r(o),s.d(o,{GET:()=>l});var r=s(7786),i=s(5042),n=s(2184),a=s(7186);async function l(e){let t=new URL(e.url).searchParams.get("sessionId");if(!t)return new Response("sessionId is required",{status:400});let s=!1;return new Response(new ReadableStream({start(e){let o=a.f.subscribe(t,t=>{if(s)return;let r=`data: ${JSON.stringify(t)}
1
+ "use strict";(()=>{var e={};e.id=820,e.ids=[820],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},2592:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>p,patchFetch:()=>g,requestAsyncStorage:()=>d,routeModule:()=>u,serverHooks:()=>h,staticGenerationAsyncStorage:()=>c});var r={};s.r(r),s.d(r,{GET:()=>l});var o=s(7786),i=s(5042),n=s(2184),a=s(7186);async function l(e){let t=new URL(e.url).searchParams.get("sessionId");if(!t)return new Response("sessionId is required",{status:400});let s=!1,r=null,o=null;return new Response(new ReadableStream({start(i){let n=new TextEncoder,l=()=>{if(!s){s=!0,r?.(),r=null,o&&e.signal.removeEventListener("abort",o);try{i.close()}catch{}}},u=e=>{if(s)return!1;try{return i.enqueue(n.encode(e)),!0}catch{return l(),!1}};if(!u(": connected\n\n"))return;let d=Number.parseInt(e.headers.get("last-event-id")??"",10),c=Number.isSafeInteger(d)?d:a.f.getLatestEventId(t);r=a.f.subscribe(t,(e,t)=>{u(`id: ${t}
2
+ data: ${JSON.stringify(e)}
2
3
 
3
- `;e.enqueue(new TextEncoder().encode(r)),("done"===t.type||"error"===t.type)&&(s=!0,e.close(),o())});e.enqueue(new TextEncoder().encode(": connected\n\n"))}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}let u=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/agent/stream/route",pathname:"/api/agent/stream",filename:"route",bundlePath:"app/api/agent/stream/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/agent/stream/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:d,staticGenerationAsyncStorage:c,serverHooks:p}=u,h="/api/agent/stream/route";function m(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:c})}},7786:(e,t,s)=>{e.exports=s(517)},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.agent=null,this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t){let s;let r=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=r?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,322],()=>s(2592));module.exports=o})();
4
+ `)&&("done"===e.type||"error"===e.type)&&l()},c),o=l,e.signal.aborted?l():e.signal.addEventListener("abort",o,{once:!0})},cancel(){s=!0,r?.(),r=null,o&&e.signal.removeEventListener("abort",o)}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}let u=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/agent/stream/route",pathname:"/api/agent/stream",filename:"route",bundlePath:"app/api/agent/stream/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/agent/stream/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:d,staticGenerationAsyncStorage:c,serverHooks:h}=u,p="/api/agent/stream/route";function g(){return(0,n.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:c})}},7786:(e,t,s)=>{e.exports=s(517)},7186:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),o=s(785);class i{constructor(){this.baseDir=(0,o.k)(),this.builder=null,this.sessionStore=new r.m6(this.baseDir),this.projectStore=new r.XW(this.baseDir),this.remoteToolStore=new r.rt((0,r.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new r.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new r.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let r of this.recentEvents.get(e)??[])if(!(r.id<=s))try{t(r.event,r.id)}catch{}let r=this.subscribers.get(e)??new Set;return r.add(t),this.subscribers.set(e,r),()=>{r.delete(t),0===r.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let r=this.recentEvents.get(e);for(let o of(r&&(r.push({id:s,event:t}),r.length>500&&r.splice(0,r.length-500)),this.subscribers.get(e)??[]))try{o(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let r of e){if("text_chunk"===r.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=r.text;continue}if("tool_call"===r.type){s&&!s.toolCalls?s.toolCalls=[r.toolCall]:t.push({role:"assistant",content:"",toolCalls:[r.toolCall]}),s=null;continue}if("tool_result"===r.type){t.push({role:"tool",content:r.result.content,toolCallId:r.result.toolCallId});continue}if("ask_user"===r.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===r.type&&(s?s.content=r.finalText||s.content:r.finalText?.trim()&&t.push({role:"assistant",content:r.finalText}),s=null)}return t}async run(e,t,s){let o;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new r.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),r=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...r])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let r=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:r})})}answerQuestion(e,t,s){let r=this.pendingQuestions.get(e);return!!r&&(clearTimeout(r.timer),this.pendingQuestions.delete(e),r.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var r=s(1041),o=s(9411);let i=(0,o.resolve)((0,o.dirname)((0,r.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,322],()=>s(2592));module.exports=r})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=210,e.ids=[210],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},2993:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>f,patchFetch:()=>S,requestAsyncStorage:()=>h,routeModule:()=>p,serverHooks:()=>g,staticGenerationAsyncStorage:()=>m});var o={};s.r(o),s.d(o,{POST:()=>d});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);let c=new l.KS(u.f.getBuilder().getToolRegistry());async function d(e){try{let t=await e.json();if(!t.id||!t.command)return a.NextResponse.json({error:"id and command are required"},{status:400});await c.connectServer(t);let s=await c.discoverAllTools();return a.NextResponse.json({status:"connected",tools:Object.fromEntries(s)})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Connection failed"},{status:500})}}let p=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/mcp/connect/route",pathname:"/api/mcp/connect",filename:"route",bundlePath:"app/api/mcp/connect/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/mcp/connect/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:h,staticGenerationAsyncStorage:m,serverHooks:g}=p,f="/api/mcp/connect/route";function S(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:m})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.agent=null,this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t){let s;let r=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=r?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(2993));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=210,e.ids=[210],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},2993:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>v,patchFetch:()=>S,requestAsyncStorage:()=>p,routeModule:()=>h,serverHooks:()=>g,staticGenerationAsyncStorage:()=>m});var o={};s.r(o),s.d(o,{POST:()=>d});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);let c=new l.KS(u.f.getBuilder().getToolRegistry());async function d(e){try{let t=await e.json();if(!t.id||!t.command)return a.NextResponse.json({error:"id and command are required"},{status:400});await c.connectServer(t);let s=await c.discoverAllTools();return a.NextResponse.json({status:"connected",tools:Object.fromEntries(s)})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Connection failed"},{status:500})}}let h=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/mcp/connect/route",pathname:"/api/mcp/connect",filename:"route",bundlePath:"app/api/mcp/connect/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/mcp/connect/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:p,staticGenerationAsyncStorage:m,serverHooks:g}=h,v="/api/mcp/connect/route";function S(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:m})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let o of this.recentEvents.get(e)??[])if(!(o.id<=s))try{t(o.event,o.id)}catch{}let o=this.subscribers.get(e)??new Set;return o.add(t),this.subscribers.set(e,o),()=>{o.delete(t),0===o.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let o=this.recentEvents.get(e);for(let r of(o&&(o.push({id:s,event:t}),o.length>500&&o.splice(0,o.length-500)),this.subscribers.get(e)??[]))try{r(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t,s){let r;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{r=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=r,this.activeRunSessionId=t,this.activeRun=r.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(2993));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=538,e.ids=[538],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},8525:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>f,patchFetch:()=>S,requestAsyncStorage:()=>h,routeModule:()=>c,serverHooks:()=>g,staticGenerationAsyncStorage:()=>m});var o={};s.r(o),s.d(o,{POST:()=>p});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);let d=new l.Q$(u.f.getBuilder().getToolRegistry(),u.f.getBuilder().getSkillRegistry(),process.cwd());async function p(e){try{let t=await e.json();if(!t.dirPath)return a.NextResponse.json({error:"dirPath is required"},{status:400});let s=await d.loadPlugin(t.dirPath);return await d.activatePlugin(s.manifest.name),a.NextResponse.json({status:"loaded",plugin:{name:s.manifest.name,version:s.manifest.version,description:s.manifest.description}})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Plugin load failed"},{status:500})}}let c=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/plugins/load/route",pathname:"/api/plugins/load",filename:"route",bundlePath:"app/api/plugins/load/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/plugins/load/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:h,staticGenerationAsyncStorage:m,serverHooks:g}=c,f="/api/plugins/load/route";function S(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:m})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.agent=null,this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t){let s;let r=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=r?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(8525));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=538,e.ids=[538],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},8525:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>v,patchFetch:()=>f,requestAsyncStorage:()=>p,routeModule:()=>h,serverHooks:()=>m,staticGenerationAsyncStorage:()=>g});var o={};s.r(o),s.d(o,{POST:()=>c});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);let d=new l.Q$(u.f.getBuilder().getToolRegistry(),u.f.getBuilder().getSkillRegistry(),process.cwd());async function c(e){try{let t=await e.json();if(!t.dirPath)return a.NextResponse.json({error:"dirPath is required"},{status:400});let s=await d.loadPlugin(t.dirPath);return await d.activatePlugin(s.manifest.name),a.NextResponse.json({status:"loaded",plugin:{name:s.manifest.name,version:s.manifest.version,description:s.manifest.description}})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Plugin load failed"},{status:500})}}let h=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/plugins/load/route",pathname:"/api/plugins/load",filename:"route",bundlePath:"app/api/plugins/load/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/plugins/load/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:p,staticGenerationAsyncStorage:g,serverHooks:m}=h,v="/api/plugins/load/route";function f(){return(0,n.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:g})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let o of this.recentEvents.get(e)??[])if(!(o.id<=s))try{t(o.event,o.id)}catch{}let o=this.subscribers.get(e)??new Set;return o.add(t),this.subscribers.set(e,o),()=>{o.delete(t),0===o.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let o=this.recentEvents.get(e);for(let r of(o&&(o.push({id:s,event:t}),o.length>500&&o.splice(0,o.length-500)),this.subscribers.get(e)??[]))try{r(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t,s){let r;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{r=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=r,this.activeRunSessionId=t,this.activeRun=r.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(8525));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=166,e.ids=[166],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},3974:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>f,patchFetch:()=>g,requestAsyncStorage:()=>d,routeModule:()=>p,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var s={};r.r(s),r.d(s,{POST:()=>c});var o=r(7786),i=r(5042),n=r(2184),a=r(1890),u=r(7186);function l(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}async function c(e){let t;try{t=await e.json()}catch{return a.NextResponse.json({error:"Invalid JSON"},{status:400})}let r=function(e){if(!l(e))return{success:!1,error:"Request body must be an object"};if("string"!=typeof e.projectId||0===e.projectId.length)return{success:!1,error:"projectId is required"};if(!Array.isArray(e.tools)||0===e.tools.length)return{success:!1,error:"tools must contain at least one tool"};let t=[];for(let o of e.tools){var r,s;if(!l(o))return{success:!1,error:"tool must be an object"};if("string"!=typeof o.scheme||0===o.scheme.length)return{success:!1,error:"tool.scheme is required"};if("string"!=typeof o.purpose||0===o.purpose.length)return{success:!1,error:"tool.purpose is required"};if("string"!=typeof o.url)return{success:!1,error:"tool.url is required"};try{new URL(o.url)}catch{return{success:!1,error:"tool.url must be a valid URL"}}if(void 0!==o.method&&"POST"!==o.method)return{success:!1,error:"tool.method must be POST"};let e=void 0===o.headers?{}:l(r=o.headers)&&Object.values(r).every(e=>"string"==typeof e)?r:null,i=void 0===o.inputSchema?{}:o.inputSchema,n=void 0===o.outputSchema?{}:o.outputSchema,a=void 0===o.examples?[]:Array.isArray(s=o.examples)&&s.every(l)?s:null,u=void 0===o.auth?{}:o.auth;if(!e)return{success:!1,error:"tool.headers must be a string record"};if(!l(i))return{success:!1,error:"tool.inputSchema must be an object"};if(!l(n))return{success:!1,error:"tool.outputSchema must be an object"};if(!a)return{success:!1,error:"tool.examples must be an array of objects"};if(!l(u))return{success:!1,error:"tool.auth must be an object"};t.push({scheme:o.scheme,purpose:o.purpose,url:o.url,method:"POST",headers:e,inputSchema:i,outputSchema:n,examples:a,auth:u})}return{success:!0,data:{projectId:e.projectId,tools:t}}}(t);if(!r.success)return a.NextResponse.json({error:r.error},{status:400});if(!function(e,t){let r=e.headers.get("authorization");if([process.env.AGENT_REMOTE_TOOLS_REGISTER_TOKEN,process.env.AGENT_SDK_REGISTRATION_TOKEN].filter(e=>!!e).some(e=>r===`Bearer ${e}`))return!0;let s=process.env.AGENT_SDK_TOKEN;return!!s&&r===`Bearer ${s}`&&function(e,t){var r;let s;if(!process.env.AGENT_PROJECT_ID)return!1;let o=e.headers.get("origin");if(!o)return!1;try{s=new URL(o).origin}catch{return!1}let i=(r=t.projectId,process.env.AGENT_PROJECT_ID&&r===process.env.AGENT_PROJECT_ID?process.env.AGENT_SDK_ALLOWED_ORIGIN??process.env.AGENT_BROWSER_ORIGIN??null:null);if(i)try{if(new URL(i).origin!==s)return!1}catch{return!1}else if(process.env.AGENT_PROJECT_ID)return!1;return t.tools.every(e=>{try{return new URL(e.url).origin===s}catch{return!1}})}(e,t)}(e,r.data))return a.NextResponse.json({error:"UNAUTHORIZED"},{status:401});let s=u.f.registerRemoteTools(r.data.projectId,r.data.tools);return a.NextResponse.json({ok:!0,tools:s.map(e=>({scheme:e.scheme,purpose:e.purpose}))})}let p=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/remote-tools/register/route",pathname:"/api/remote-tools/register",filename:"route",bundlePath:"app/api/remote-tools/register/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/remote-tools/register/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:d,staticGenerationAsyncStorage:h,serverHooks:m}=p,f="/api/remote-tools/register/route";function g(){return(0,n.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},7186:(e,t,r)=>{r.d(t,{f:()=>a});var s=r(1322),o=r(785);class i{constructor(){this.baseDir=(0,o.k)(),this.agent=null,this.builder=null,this.sessionStore=new s.m6(this.baseDir),this.projectStore=new s.XW(this.baseDir),this.remoteToolStore=new s.rt((0,s.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",r=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new s.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:r,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new s.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let r=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:r,updated:r}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:r,updated:r,metadata:{}})}subscribe(e,t){let r=this.subscribers.get(e)??new Set;return r.add(t),this.subscribers.set(e,r),()=>{r.delete(t),0===r.size&&this.subscribers.delete(e)}}emit(e,t){for(let r of this.subscribers.get(e)??[])try{r(t)}catch{}}projectMessagesFromEvents(e){let t=[],r=null;for(let s of e){if("text_chunk"===s.type){r||(r={role:"assistant",content:""},t.push(r)),r.content+=s.text;continue}if("tool_call"===s.type){r&&!r.toolCalls?r.toolCalls=[s.toolCall]:t.push({role:"assistant",content:"",toolCalls:[s.toolCall]}),r=null;continue}if("tool_result"===s.type){t.push({role:"tool",content:s.result.content,toolCallId:s.result.toolCallId});continue}if("ask_user"===s.type){t.push({role:"assistant",content:""}),r=null;continue}"done"===s.type&&(r?r.content=s.finalText||r.content:s.finalText?.trim()&&t.push({role:"assistant",content:s.finalText}),r=null)}return t}async run(e,t){let r;let o=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=o?.projectId||this.defaultRemoteToolsProjectId;try{r=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new s.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=r.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),r=(e?.messages??[]).filter(e=>"user"===e.role),s=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...r,...s])}catch{}}createQuestion(e,t){let r=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:r,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let s=setTimeout(()=>{this.pendingQuestions.has(r)&&(this.pendingQuestions.delete(r),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(r,{resolve:e,reject:t,timer:s})})}answerQuestion(e,t,r){let s=this.pendingQuestions.get(e);return!!s&&(clearTimeout(s.timer),this.pendingQuestions.delete(e),s.resolve({answer:t,selectedIndices:r}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,r)=>{r.d(t,{k:()=>n});var s=r(1041),o=r(9411);let i=(0,o.resolve)((0,o.dirname)((0,s.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[375,703,322],()=>r(3974));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=166,e.ids=[166],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},3974:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>g,patchFetch:()=>v,requestAsyncStorage:()=>p,routeModule:()=>d,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var r={};s.r(r),s.d(r,{POST:()=>c});var o=s(7786),i=s(5042),n=s(2184),a=s(1890),u=s(7186);function l(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}async function c(e){let t;try{t=await e.json()}catch{return a.NextResponse.json({error:"Invalid JSON"},{status:400})}let s=function(e){if(!l(e))return{success:!1,error:"Request body must be an object"};if("string"!=typeof e.projectId||0===e.projectId.length)return{success:!1,error:"projectId is required"};if(!Array.isArray(e.tools)||0===e.tools.length)return{success:!1,error:"tools must contain at least one tool"};let t=[];for(let o of e.tools){var s,r;if(!l(o))return{success:!1,error:"tool must be an object"};if("string"!=typeof o.scheme||0===o.scheme.length)return{success:!1,error:"tool.scheme is required"};if("string"!=typeof o.purpose||0===o.purpose.length)return{success:!1,error:"tool.purpose is required"};if("string"!=typeof o.url)return{success:!1,error:"tool.url is required"};try{new URL(o.url)}catch{return{success:!1,error:"tool.url must be a valid URL"}}if(void 0!==o.method&&"POST"!==o.method)return{success:!1,error:"tool.method must be POST"};let e=void 0===o.headers?{}:l(s=o.headers)&&Object.values(s).every(e=>"string"==typeof e)?s:null,i=void 0===o.inputSchema?{}:o.inputSchema,n=void 0===o.outputSchema?{}:o.outputSchema,a=void 0===o.examples?[]:Array.isArray(r=o.examples)&&r.every(l)?r:null,u=void 0===o.auth?{}:o.auth;if(!e)return{success:!1,error:"tool.headers must be a string record"};if(!l(i))return{success:!1,error:"tool.inputSchema must be an object"};if(!l(n))return{success:!1,error:"tool.outputSchema must be an object"};if(!a)return{success:!1,error:"tool.examples must be an array of objects"};if(!l(u))return{success:!1,error:"tool.auth must be an object"};t.push({scheme:o.scheme,purpose:o.purpose,url:o.url,method:"POST",headers:e,inputSchema:i,outputSchema:n,examples:a,auth:u})}return{success:!0,data:{projectId:e.projectId,tools:t}}}(t);if(!s.success)return a.NextResponse.json({error:s.error},{status:400});if(!function(e,t){let s=e.headers.get("authorization");if([process.env.AGENT_REMOTE_TOOLS_REGISTER_TOKEN,process.env.AGENT_SDK_REGISTRATION_TOKEN].filter(e=>!!e).some(e=>s===`Bearer ${e}`))return!0;let r=process.env.AGENT_SDK_TOKEN;return!!r&&s===`Bearer ${r}`&&function(e,t){var s;let r;if(!process.env.AGENT_PROJECT_ID)return!1;let o=e.headers.get("origin");if(!o)return!1;try{r=new URL(o).origin}catch{return!1}let i=(s=t.projectId,process.env.AGENT_PROJECT_ID&&s===process.env.AGENT_PROJECT_ID?process.env.AGENT_SDK_ALLOWED_ORIGIN??process.env.AGENT_BROWSER_ORIGIN??null:null);if(i)try{if(new URL(i).origin!==r)return!1}catch{return!1}else if(process.env.AGENT_PROJECT_ID)return!1;return t.tools.every(e=>{try{return new URL(e.url).origin===r}catch{return!1}})}(e,t)}(e,s.data))return a.NextResponse.json({error:"UNAUTHORIZED"},{status:401});let r=u.f.registerRemoteTools(s.data.projectId,s.data.tools);return a.NextResponse.json({ok:!0,tools:r.map(e=>({scheme:e.scheme,purpose:e.purpose}))})}let d=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/remote-tools/register/route",pathname:"/api/remote-tools/register",filename:"route",bundlePath:"app/api/remote-tools/register/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/remote-tools/register/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:p,staticGenerationAsyncStorage:h,serverHooks:m}=d,g="/api/remote-tools/register/route";function v(){return(0,n.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),o=s(785);class i{constructor(){this.baseDir=(0,o.k)(),this.builder=null,this.sessionStore=new r.m6(this.baseDir),this.projectStore=new r.XW(this.baseDir),this.remoteToolStore=new r.rt((0,r.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new r.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new r.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let r of this.recentEvents.get(e)??[])if(!(r.id<=s))try{t(r.event,r.id)}catch{}let r=this.subscribers.get(e)??new Set;return r.add(t),this.subscribers.set(e,r),()=>{r.delete(t),0===r.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let r=this.recentEvents.get(e);for(let o of(r&&(r.push({id:s,event:t}),r.length>500&&r.splice(0,r.length-500)),this.subscribers.get(e)??[]))try{o(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let r of e){if("text_chunk"===r.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=r.text;continue}if("tool_call"===r.type){s&&!s.toolCalls?s.toolCalls=[r.toolCall]:t.push({role:"assistant",content:"",toolCalls:[r.toolCall]}),s=null;continue}if("tool_result"===r.type){t.push({role:"tool",content:r.result.content,toolCallId:r.result.toolCallId});continue}if("ask_user"===r.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===r.type&&(s?s.content=r.finalText||s.content:r.finalText?.trim()&&t.push({role:"assistant",content:r.finalText}),s=null)}return t}async run(e,t,s){let o;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new r.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),r=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...r])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let r=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:r})})}answerQuestion(e,t,s){let r=this.pendingQuestions.get(e);return!!r&&(clearTimeout(r.timer),this.pendingQuestions.delete(e),r.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var r=s(1041),o=s(9411);let i=(0,o.resolve)((0,o.dirname)((0,r.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(3974));module.exports=r})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=241,e.ids=[241],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},9564:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>g,patchFetch:()=>f,requestAsyncStorage:()=>p,routeModule:()=>c,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var o={};s.r(o),s.d(o,{DELETE:()=>d,GET:()=>u});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(e,{params:t}){let s=await l.f.getSessionStore().get(t.id);if(!s)return a.NextResponse.json({error:"Session not found"},{status:404});let o=!s.messages?.length&&Array.isArray(s.events)&&s.events.length>0?function(e){let t=[],s=null;for(let o of e){let e=o.type;if("text_chunk"===e){s||(s={id:crypto.randomUUID(),role:"assistant",content:"",isStreaming:!0,timestamp:Date.now()},t.push(s)),s.content=`${s.content??""}${o.text??""}`;continue}if("tool_call"===e&&o.toolCall){s={id:crypto.randomUUID(),role:"assistant",content:s?.content??"",toolCalls:[o.toolCall],isStreaming:!1,timestamp:Date.now()},t.push(s),s=null;continue}if("tool_result"===e&&o.result){let e=o.result;t.push({id:crypto.randomUUID(),role:"tool",content:e.content??"",toolCallId:e.toolCallId,timestamp:Date.now()});continue}if("ask_user"===e){t.push({id:crypto.randomUUID(),role:"assistant",content:"",askUser:{questionId:o.questionId,question:o.question??"",options:o.options,multiSelect:o.multiSelect},timestamp:Date.now()});continue}"done"===e&&"string"==typeof o.finalText&&(s?(s.content=o.finalText,s.isStreaming=!1):o.finalText.trim()&&t.push({id:crypto.randomUUID(),role:"assistant",content:o.finalText,timestamp:Date.now()}),s=null)}return t}(s.events):s.messages;console.log("[sessions/:id]",{sessionId:t.id,storedMessages:s.messages?.length??0,storedEvents:Array.isArray(s.events)?s.events.length:0,rebuiltMessages:o?.length??0});let r={...s,messages:o};return a.NextResponse.json(r)}async function d(e,{params:t}){return await l.f.getSessionStore().delete(t.id),a.NextResponse.json({status:"deleted"})}let c=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/sessions/[id]/route",pathname:"/api/sessions/[id]",filename:"route",bundlePath:"app/api/sessions/[id]/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/[id]/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:p,staticGenerationAsyncStorage:h,serverHooks:m}=c,g="/api/sessions/[id]/route";function f(){return(0,n.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.agent=null,this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t){let s;let r=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=r?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(9564));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=241,e.ids=[241],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},9564:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>g,patchFetch:()=>v,requestAsyncStorage:()=>p,routeModule:()=>c,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var o={};s.r(o),s.d(o,{DELETE:()=>d,GET:()=>u});var i=s(7786),n=s(5042),r=s(2184),a=s(1890),l=s(7186);async function u(e,{params:t}){let s=await l.f.getSessionStore().get(t.id);if(!s)return a.NextResponse.json({error:"Session not found"},{status:404});let o=!s.messages?.length&&Array.isArray(s.events)&&s.events.length>0?function(e){let t=[],s=null;for(let o of e){let e=o.type;if("text_chunk"===e){s||(s={id:crypto.randomUUID(),role:"assistant",content:"",isStreaming:!0,timestamp:Date.now()},t.push(s)),s.content=`${s.content??""}${o.text??""}`;continue}if("tool_call"===e&&o.toolCall){s={id:crypto.randomUUID(),role:"assistant",content:s?.content??"",toolCalls:[o.toolCall],isStreaming:!1,timestamp:Date.now()},t.push(s),s=null;continue}if("tool_result"===e&&o.result){let e=o.result;t.push({id:crypto.randomUUID(),role:"tool",content:e.content??"",toolCallId:e.toolCallId,timestamp:Date.now()});continue}if("ask_user"===e){t.push({id:crypto.randomUUID(),role:"assistant",content:"",askUser:{questionId:o.questionId,question:o.question??"",options:o.options,multiSelect:o.multiSelect},timestamp:Date.now()});continue}"done"===e&&"string"==typeof o.finalText&&(s?(s.content=o.finalText,s.isStreaming=!1):o.finalText.trim()&&t.push({id:crypto.randomUUID(),role:"assistant",content:o.finalText,timestamp:Date.now()}),s=null)}return t}(s.events):s.messages;console.log("[sessions/:id]",{sessionId:t.id,storedMessages:s.messages?.length??0,storedEvents:Array.isArray(s.events)?s.events.length:0,rebuiltMessages:o?.length??0});let i={...s,messages:o};return a.NextResponse.json(i)}async function d(e,{params:t}){return await l.f.getSessionStore().delete(t.id),a.NextResponse.json({status:"deleted"})}let c=new i.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/sessions/[id]/route",pathname:"/api/sessions/[id]",filename:"route",bundlePath:"app/api/sessions/[id]/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/[id]/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:p,staticGenerationAsyncStorage:h,serverHooks:m}=c,g="/api/sessions/[id]/route";function v(){return(0,r.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),i=s(785);class n{constructor(){this.baseDir=(0,i.k)(),this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",n=process.env.AGENT_BASE_URL||void 0,r=new o.Y4().withSessionStore(this.sessionStore);r.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&r.withModel(t,{apiKey:e,modelId:s,baseUrl:n}),this.builder=r}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let o of this.recentEvents.get(e)??[])if(!(o.id<=s))try{t(o.event,o.id)}catch{}let o=this.subscribers.get(e)??new Set;return o.add(t),this.subscribers.set(e,o),()=>{o.delete(t),0===o.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let o=this.recentEvents.get(e);for(let i of(o&&(o.push({id:s,event:t}),o.length>500&&o.splice(0,o.length-500)),this.subscribers.get(e)??[]))try{i(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t,s){let i;let n=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let r=n?.projectId||this.defaultRemoteToolsProjectId;try{i=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,r).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=i,this.activeRunSessionId=t,this.activeRun=i.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let r=globalThis,a=r.__agentHost??new n;r.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>r});var o=s(1041),i=s(9411);let n=(0,i.resolve)((0,i.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function r(){return function(e=process.env,t=n){return(0,i.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(9564));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=772,e.ids=[772],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},1880:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>g,patchFetch:()=>S,requestAsyncStorage:()=>p,routeModule:()=>c,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var o={};s.r(o),s.d(o,{GET:()=>u,POST:()=>d});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(e){let t=new URL(e.url).searchParams.get("projectId")||void 0,s=await l.f.getSessionStore().list(t);return a.NextResponse.json(s)}async function d(e){let t=await e.json(),s=await l.f.createSession(t.title??"Untitled",t.projectId??"");return a.NextResponse.json(s,{status:201})}let c=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/sessions/route",pathname:"/api/sessions",filename:"route",bundlePath:"app/api/sessions/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:p,staticGenerationAsyncStorage:h,serverHooks:m}=c,g="/api/sessions/route";function S(){return(0,n.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.agent=null,this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t){let s;let r=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=r?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(1880));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=772,e.ids=[772],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},1880:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>m,patchFetch:()=>v,requestAsyncStorage:()=>h,routeModule:()=>c,serverHooks:()=>g,staticGenerationAsyncStorage:()=>p});var o={};s.r(o),s.d(o,{GET:()=>u,POST:()=>d});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(e){let t=new URL(e.url).searchParams.get("projectId")||void 0,s=await l.f.getSessionStore().list(t);return a.NextResponse.json(s)}async function d(e){let t=await e.json(),s=await l.f.createSession(t.title??"Untitled",t.projectId??"");return a.NextResponse.json(s,{status:201})}let c=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/sessions/route",pathname:"/api/sessions",filename:"route",bundlePath:"app/api/sessions/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:h,staticGenerationAsyncStorage:p,serverHooks:g}=c,m="/api/sessions/route";function v(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:p})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let o of this.recentEvents.get(e)??[])if(!(o.id<=s))try{t(o.event,o.id)}catch{}let o=this.subscribers.get(e)??new Set;return o.add(t),this.subscribers.set(e,o),()=>{o.delete(t),0===o.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let o=this.recentEvents.get(e);for(let r of(o&&(o.push({id:s,event:t}),o.length>500&&o.splice(0,o.length-500)),this.subscribers.get(e)??[]))try{r(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t,s){let r;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{r=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=r,this.activeRunSessionId=t,this.activeRun=r.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(1880));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=731,e.ids=[731],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},8298:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>f,patchFetch:()=>S,requestAsyncStorage:()=>h,routeModule:()=>c,serverHooks:()=>g,staticGenerationAsyncStorage:()=>m});var r={};s.r(r),s.d(r,{GET:()=>d,POST:()=>p});var o=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);async function d(){let e=u.f.getBuilder().getSkillRegistry().getAll();return a.NextResponse.json(e.map(e=>({name:e.name,description:e.description,triggers:e.triggers,filePath:e.filePath})))}async function p(e){try{let t=await e.json(),s=new l.N7,r=u.f.getBuilder().getSkillRegistry(),o=[];if(t.filePath){let e=await s.loadFromFile(t.filePath);r.register(e),o.push({name:e.name,description:e.description})}else if(!t.dirPath)return a.NextResponse.json({error:"filePath or dirPath is required"},{status:400});else for(let e of(await s.loadFromDirectory(t.dirPath)))r.register(e),o.push({name:e.name,description:e.description});return a.NextResponse.json({status:"imported",count:o.length,skills:o})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Skill import failed"},{status:500})}}let c=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/skills/route",pathname:"/api/skills",filename:"route",bundlePath:"app/api/skills/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/skills/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:h,staticGenerationAsyncStorage:m,serverHooks:g}=c,f="/api/skills/route";function S(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:m})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),o=s(785);class i{constructor(){this.baseDir=(0,o.k)(),this.agent=null,this.builder=null,this.sessionStore=new r.m6(this.baseDir),this.projectStore=new r.XW(this.baseDir),this.remoteToolStore=new r.rt((0,r.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new r.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new r.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let r of e){if("text_chunk"===r.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=r.text;continue}if("tool_call"===r.type){s&&!s.toolCalls?s.toolCalls=[r.toolCall]:t.push({role:"assistant",content:"",toolCalls:[r.toolCall]}),s=null;continue}if("tool_result"===r.type){t.push({role:"tool",content:r.result.content,toolCallId:r.result.toolCallId});continue}if("ask_user"===r.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===r.type&&(s?s.content=r.finalText||s.content:r.finalText?.trim()&&t.push({role:"assistant",content:r.finalText}),s=null)}return t}async run(e,t){let s;let o=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=o?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new r.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),r=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...r])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let r=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:r})})}answerQuestion(e,t,s){let r=this.pendingQuestions.get(e);return!!r&&(clearTimeout(r.timer),this.pendingQuestions.delete(e),r.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var r=s(1041),o=s(9411);let i=(0,o.resolve)((0,o.dirname)((0,r.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(8298));module.exports=r})();
1
+ "use strict";(()=>{var e={};e.id=731,e.ids=[731],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},8298:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>v,patchFetch:()=>f,requestAsyncStorage:()=>p,routeModule:()=>h,serverHooks:()=>m,staticGenerationAsyncStorage:()=>g});var r={};s.r(r),s.d(r,{GET:()=>d,POST:()=>c});var i=s(7786),o=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);async function d(){let e=u.f.getBuilder().getSkillRegistry().getAll();return a.NextResponse.json(e.map(e=>({name:e.name,description:e.description,triggers:e.triggers,filePath:e.filePath})))}async function c(e){try{let t=await e.json(),s=new l.N7,r=u.f.getBuilder().getSkillRegistry(),i=[];if(t.filePath){let e=await s.loadFromFile(t.filePath);r.register(e),i.push({name:e.name,description:e.description})}else if(!t.dirPath)return a.NextResponse.json({error:"filePath or dirPath is required"},{status:400});else for(let e of(await s.loadFromDirectory(t.dirPath)))r.register(e),i.push({name:e.name,description:e.description});return a.NextResponse.json({status:"imported",count:i.length,skills:i})}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Skill import failed"},{status:500})}}let h=new i.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/skills/route",pathname:"/api/skills",filename:"route",bundlePath:"app/api/skills/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/skills/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:p,staticGenerationAsyncStorage:g,serverHooks:m}=h,v="/api/skills/route";function f(){return(0,n.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:g})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),i=s(785);class o{constructor(){this.baseDir=(0,i.k)(),this.builder=null,this.sessionStore=new r.m6(this.baseDir),this.projectStore=new r.XW(this.baseDir),this.remoteToolStore=new r.rt((0,r.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",o=process.env.AGENT_BASE_URL||void 0,n=new r.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:o}),this.builder=n}getBuilder(){return this.builder||(this.builder=new r.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let r of this.recentEvents.get(e)??[])if(!(r.id<=s))try{t(r.event,r.id)}catch{}let r=this.subscribers.get(e)??new Set;return r.add(t),this.subscribers.set(e,r),()=>{r.delete(t),0===r.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let r=this.recentEvents.get(e);for(let i of(r&&(r.push({id:s,event:t}),r.length>500&&r.splice(0,r.length-500)),this.subscribers.get(e)??[]))try{i(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let r of e){if("text_chunk"===r.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=r.text;continue}if("tool_call"===r.type){s&&!s.toolCalls?s.toolCalls=[r.toolCall]:t.push({role:"assistant",content:"",toolCalls:[r.toolCall]}),s=null;continue}if("tool_result"===r.type){t.push({role:"tool",content:r.result.content,toolCallId:r.result.toolCallId});continue}if("ask_user"===r.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===r.type&&(s?s.content=r.finalText||s.content:r.finalText?.trim()&&t.push({role:"assistant",content:r.finalText}),s=null)}return t}async run(e,t,s){let i;let o=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=o?.projectId||this.defaultRemoteToolsProjectId;try{i=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new r.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=i,this.activeRunSessionId=t,this.activeRun=i.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),r=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...r])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let r=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:r})})}answerQuestion(e,t,s){let r=this.pendingQuestions.get(e);return!!r&&(clearTimeout(r.timer),this.pendingQuestions.delete(e),r.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new o;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var r=s(1041),i=s(9411);let o=(0,i.resolve)((0,i.dirname)((0,r.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=o){return(0,i.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(8298));module.exports=r})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=443,e.ids=[443],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},5167:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>m,patchFetch:()=>g,requestAsyncStorage:()=>p,routeModule:()=>d,serverHooks:()=>h,staticGenerationAsyncStorage:()=>c});var o={};s.r(o),s.d(o,{GET:()=>u});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(){let e=l.f.getBuilder().getToolRegistry().getAll();return a.NextResponse.json(e.map(e=>({name:e.name,description:e.description,parameters:e.parameters})))}let d=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/tools/route",pathname:"/api/tools",filename:"route",bundlePath:"app/api/tools/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/tools/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:p,staticGenerationAsyncStorage:c,serverHooks:h}=d,m="/api/tools/route";function g(){return(0,n.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:c})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.agent=null,this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.subscribers=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}subscribe(e,t){let s=this.subscribers.get(e)??new Set;return s.add(t),this.subscribers.set(e,s),()=>{s.delete(t),0===s.size&&this.subscribers.delete(e)}}emit(e,t){for(let s of this.subscribers.get(e)??[])try{s(t)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t){let s;let r=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e});let i=r?.projectId||this.defaultRemoteToolsProjectId;try{s=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,i).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(e){throw this.emit(t,{type:"error",message:e instanceof Error?e.message:"Failed to build agent"}),e}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeRun=s.run(e,t);let n=!1;for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(n=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||n||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e);try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}abort(){this.agent?.abort(),this.activeRun=null}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(5167));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=443,e.ids=[443],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},5167:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>m,patchFetch:()=>g,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>p,staticGenerationAsyncStorage:()=>h});var o={};s.r(o),s.d(o,{GET:()=>u});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(7186);async function u(){let e=l.f.getBuilder().getToolRegistry().getAll();return a.NextResponse.json(e.map(e=>({name:e.name,description:e.description,parameters:e.parameters})))}let d=new r.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/tools/route",pathname:"/api/tools",filename:"route",bundlePath:"app/api/tools/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/tools/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:h,serverHooks:p}=d,m="/api/tools/route";function g(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:h})}},7186:(e,t,s)=>{s.d(t,{f:()=>a});var o=s(1322),r=s(785);class i{constructor(){this.baseDir=(0,r.k)(),this.builder=null,this.sessionStore=new o.m6(this.baseDir),this.projectStore=new o.XW(this.baseDir),this.remoteToolStore=new o.rt((0,o.N8)(this.baseDir).db),this.defaultRemoteToolsProjectId=process.env.AGENT_PROJECT_ID??"default",this.activeRun=null,this.activeAgent=null,this.activeRunSessionId=null,this.subscribers=new Map,this.recentEvents=new Map,this.eventCounters=new Map,this.pendingQuestions=new Map;let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",i=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:i}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),this.builder=e}getSessionStore(){return this.sessionStore}getModelConfig(){return{provider:process.env.AGENT_MODEL_PROVIDER||"openai",modelId:process.env.AGENT_MODEL_ID||"gpt-4o",baseUrl:process.env.AGENT_BASE_URL||""}}getWebAppBuildId(){return globalThis.__webAppBuildId??""}registerRemoteTools(e,t){return this.remoteToolStore.upsertTools(e,t)}getRemoteToolStore(){return this.remoteToolStore}async createSession(e,t=""){let s=new Date().toISOString();return t&&!await this.projectStore.get(t)&&await this.projectStore.create({id:t,name:t,description:"",created:s,updated:s}),this.sessionStore.create({id:crypto.randomUUID(),projectId:t,title:e,status:"idle",messages:[],events:[],created:s,updated:s,metadata:{}})}getLatestEventId(e){return this.eventCounters.get(e)??0}subscribe(e,t,s=-1){for(let o of this.recentEvents.get(e)??[])if(!(o.id<=s))try{t(o.event,o.id)}catch{}let o=this.subscribers.get(e)??new Set;return o.add(t),this.subscribers.set(e,o),()=>{o.delete(t),0===o.size&&this.subscribers.delete(e)}}emit(e,t){let s=(this.eventCounters.get(e)??0)+1;this.eventCounters.set(e,s);let o=this.recentEvents.get(e);for(let r of(o&&(o.push({id:s,event:t}),o.length>500&&o.splice(0,o.length-500)),this.subscribers.get(e)??[]))try{r(t,s)}catch{}}projectMessagesFromEvents(e){let t=[],s=null;for(let o of e){if("text_chunk"===o.type){s||(s={role:"assistant",content:""},t.push(s)),s.content+=o.text;continue}if("tool_call"===o.type){s&&!s.toolCalls?s.toolCalls=[o.toolCall]:t.push({role:"assistant",content:"",toolCalls:[o.toolCall]}),s=null;continue}if("tool_result"===o.type){t.push({role:"tool",content:o.result.content,toolCallId:o.result.toolCallId});continue}if("ask_user"===o.type){t.push({role:"assistant",content:""}),s=null;continue}"done"===o.type&&(s?s.content=o.finalText||s.content:o.finalText?.trim()&&t.push({role:"assistant",content:o.finalText}),s=null)}return t}async run(e,t,s){let r;let i=await this.sessionStore.get(t);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let n=i?.projectId||this.defaultRemoteToolsProjectId;try{r=await this.getBuilder().withRemoteToolStore(this.remoteToolStore,n).withTool(new o.as(async e=>this.createQuestion(e,t))).build()}catch(s){let e={type:"error",message:s instanceof Error?s.message:"Failed to build agent"};try{await this.sessionStore.addEvent(t,e)}catch{}throw this.emit(t,e),s}finally{this.builder?.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=r,this.activeRunSessionId=t,this.activeRun=r.run(e,t,s);let a=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(a=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||a||(e.finalText.trim()&&await this.sessionStore.addMessage(t,{role:"assistant",content:e.finalText}),await this.sessionStore.update(t,{status:"completed"})),this.emit(t,e)}catch(s){a=!0;let e={type:"error",message:s instanceof Error?s.message:"Agent run failed"};try{await this.sessionStore.addEvent(t,e),await this.sessionStore.update(t,{status:"failed"})}catch{}this.emit(t,e)}finally{this.activeRunSessionId===t&&(this.activeAgent=null,this.activeRunSessionId=null),this.activeRun=null}try{let e=await this.sessionStore.get(t),s=(e?.messages??[]).filter(e=>"user"===e.role),o=this.projectMessagesFromEvents(e?.events??[]);await this.sessionStore.replaceMessages(t,[...s,...o])}catch{}}createQuestion(e,t){let s=crypto.randomUUID();return this.emit(t,{type:"ask_user",questionId:s,question:e.question,options:e.options,multiSelect:e.multiSelect}),new Promise((e,t)=>{let o=setTimeout(()=>{this.pendingQuestions.has(s)&&(this.pendingQuestions.delete(s),t(Error("Question timed out after 5 minutes")))},3e5);this.pendingQuestions.set(s,{resolve:e,reject:t,timer:o})})}answerQuestion(e,t,s){let o=this.pendingQuestions.get(e);return!!o&&(clearTimeout(o.timer),this.pendingQuestions.delete(e),o.resolve({answer:t,selectedIndices:s}),!0)}async steer(e,t){return await this.sessionStore.addMessage(t,{role:"user",content:e,name:"__steer__"}),this.activeRunSessionId===t&&!!this.activeAgent&&(this.emit(t,{type:"thinking",message:`User added: ${e.slice(0,60)}`}),!0)}abort(){this.activeAgent?.abort()}}let n=globalThis,a=n.__agentHost??new i;n.__agentHost=a},785:(e,t,s)=>{s.d(t,{k:()=>n});var o=s(1041),r=s(9411);let i=(0,r.resolve)((0,r.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>s(5167));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=574,e.ids=[574],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},3042:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>p,serverHooks:()=>g,staticGenerationAsyncStorage:()=>l});var o={};t.r(o),t.d(o,{POST:()=>d});var n=t(7786),s=t(5042),i=t(2184),a=t(1890),u=t(3710);async function d(e){try{let r=await e.json(),t=await u.ZA.login(r.username||"",r.password||"",(0,u.$U)(e)),o=a.NextResponse.json({user:t.user,csrfToken:t.csrfToken,deviceId:t.deviceId});return o.cookies.set(u.VP,t.authToken,(0,u.Ci)(e,2592e3,!0)),o.cookies.set(u.ki,t.deviceId,(0,u.Ci)(e,31536e3,!1)),o}catch(e){return(0,u.yN)(e)}}let p=new n.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/web-auth/login/route",pathname:"/api/web-auth/login",filename:"route",bundlePath:"app/api/web-auth/login/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/login/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:g}=p,h="/api/web-auth/login/route";function m(){return(0,i.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:l})}},785:(e,r,t)=>{t.d(r,{k:()=>i});var o=t(1041),n=t(9411);let s=(0,n.resolve)((0,n.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function i(){return function(e=process.env,r=s){return(0,n.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>h,VP:()=>s,Xd:()=>p,ZA:()=>a,ap:()=>g,gB:()=>l,hw:()=>u,ki:()=>i,yN:()=>m});var o=t(1322),n=t(785);let s="customer_agent_session",i="customer_agent_device",a=new o.E0(new o.S3((0,n.k)())),u=new o.XU((0,n.k)());function d(e){let r={};for(let t of(e.headers.get("cookie")||"").split(";")){let e=t.indexOf("=");e>0&&(r[t.slice(0,e).trim()]=decodeURIComponent(t.slice(e+1).trim()))}return r}function p(e){return d(e)[s]||null}function c(e){let r=d(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:r[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){return a.authenticateToken(p(e))}function g(e){let r=l(e);return a.validateCsrf(r,e.headers.get("x-csrf-token")),r}function h(e,r,t){return{httpOnly:t,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:r}}function m(e){let r=e instanceof o.CT?e:new o.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:r.code,message:r.message}},{status:r.status})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[375,703,322],()=>t(3042));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=574,e.ids=[574],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},3042:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>p,serverHooks:()=>g,staticGenerationAsyncStorage:()=>l});var o={};t.r(o),t.d(o,{POST:()=>d});var s=t(7786),n=t(5042),i=t(2184),a=t(1890),u=t(3710);async function d(e){try{let r=await e.json(),t=await u.ZA.login(r.username||"",r.password||"",(0,u.$U)(e)),o=a.NextResponse.json({user:t.user,csrfToken:t.csrfToken,deviceId:t.deviceId});return o.cookies.set(u.VP,t.authToken,(0,u.Ci)(e,2592e3,!0)),o.cookies.set(u.ki,t.deviceId,(0,u.Ci)(e,31536e3,!1)),o}catch(e){return(0,u.yN)(e)}}let p=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-auth/login/route",pathname:"/api/web-auth/login",filename:"route",bundlePath:"app/api/web-auth/login/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/login/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:g}=p,h="/api/web-auth/login/route";function m(){return(0,i.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:l})}},785:(e,r,t)=>{t.d(r,{k:()=>i});var o=t(1041),s=t(9411);let n=(0,s.resolve)((0,s.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function i(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>g,VP:()=>n,Xd:()=>p,ZA:()=>a,ap:()=>l,hw:()=>u,ki:()=>i,yN:()=>h});var o=t(1322),s=t(785);let n="customer_agent_session",i="customer_agent_device",a=new o.E0(new o.S3((0,s.k)())),u=new o.XU((0,s.k)());function d(e){let r={};for(let t of(e.headers.get("cookie")||"").split(";")){let e=t.indexOf("=");e>0&&(r[t.slice(0,e).trim()]=decodeURIComponent(t.slice(e+1).trim()))}return r}function p(e){return d(e)[n]||null}function c(e){let r=d(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:r[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){let r=a.authenticateToken(p(e));return a.validateCsrf(r,e.headers.get("x-csrf-token")),r}function g(e,r,t){return{httpOnly:t,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:r}}function h(e){let r=e instanceof o.CT?e:new o.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:r.code,message:r.message}},{status:r.status})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[375,703,322],()=>t(3042));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=402,e.ids=[402],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},2603:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>g,staticGenerationAsyncStorage:()=>l});var o={};r.r(o),r.d(o,{POST:()=>p});var s=r(7786),n=r(5042),u=r(2184),a=r(1890),i=r(3710);async function p(e){try{(0,i.ap)(e);let t=(0,i.Xd)(e);i.ZA.logout(t);let r=new a.NextResponse(null,{status:204});return r.cookies.set(i.VP,"",(0,i.Ci)(e,0,!0)),r}catch(e){return(0,i.yN)(e)}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-auth/logout/route",pathname:"/api/web-auth/logout",filename:"route",bundlePath:"app/api/web-auth/logout/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/logout/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:g}=d,h="/api/web-auth/logout/route";function m(){return(0,u.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:l})}},785:(e,t,r)=>{r.d(t,{k:()=>u});var o=r(1041),s=r(9411);let n=(0,s.resolve)((0,s.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function u(){return function(e=process.env,t=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>h,VP:()=>n,Xd:()=>d,ZA:()=>a,ap:()=>g,gB:()=>l,hw:()=>i,ki:()=>u,yN:()=>m});var o=r(1322),s=r(785);let n="customer_agent_session",u="customer_agent_device",a=new o.E0(new o.S3((0,s.k)())),i=new o.XU((0,s.k)());function p(e){let t={};for(let r of(e.headers.get("cookie")||"").split(";")){let e=r.indexOf("=");e>0&&(t[r.slice(0,e).trim()]=decodeURIComponent(r.slice(e+1).trim()))}return t}function d(e){return p(e)[n]||null}function c(e){let t=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:t[u],deviceName:e.headers.get("x-device-name")||""}}function l(e){return a.authenticateToken(d(e))}function g(e){let t=l(e);return a.validateCsrf(t,e.headers.get("x-csrf-token")),t}function h(e,t,r){return{httpOnly:r,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:t}}function m(e){let t=e instanceof o.CT?e:new o.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:t.code,message:t.message}},{status:t.status})}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>r(2603));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=402,e.ids=[402],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},2603:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>g,staticGenerationAsyncStorage:()=>l});var o={};r.r(o),r.d(o,{POST:()=>p});var s=r(7786),n=r(5042),a=r(2184),u=r(1890),i=r(3710);async function p(e){try{(0,i.ap)(e);let t=(0,i.Xd)(e);i.ZA.logout(t);let r=new u.NextResponse(null,{status:204});return r.cookies.set(i.VP,"",(0,i.Ci)(e,0,!0)),r}catch(e){return(0,i.yN)(e)}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-auth/logout/route",pathname:"/api/web-auth/logout",filename:"route",bundlePath:"app/api/web-auth/logout/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/logout/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:g}=d,h="/api/web-auth/logout/route";function m(){return(0,a.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:l})}},785:(e,t,r)=>{r.d(t,{k:()=>a});var o=r(1041),s=r(9411);let n=(0,s.resolve)((0,s.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function a(){return function(e=process.env,t=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>g,VP:()=>n,Xd:()=>d,ZA:()=>u,ap:()=>l,hw:()=>i,ki:()=>a,yN:()=>h});var o=r(1322),s=r(785);let n="customer_agent_session",a="customer_agent_device",u=new o.E0(new o.S3((0,s.k)())),i=new o.XU((0,s.k)());function p(e){let t={};for(let r of(e.headers.get("cookie")||"").split(";")){let e=r.indexOf("=");e>0&&(t[r.slice(0,e).trim()]=decodeURIComponent(r.slice(e+1).trim()))}return t}function d(e){return p(e)[n]||null}function c(e){let t=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:t[a],deviceName:e.headers.get("x-device-name")||""}}function l(e){let t=u.authenticateToken(d(e));return u.validateCsrf(t,e.headers.get("x-csrf-token")),t}function g(e,t,r){return{httpOnly:r,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:t}}function h(e){let t=e instanceof o.CT?e:new o.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:t.code,message:t.message}},{status:t.status})}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[375,703,322],()=>r(2603));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=843,e.ids=[843],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},63:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>v,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>h,staticGenerationAsyncStorage:()=>l});var o={};t.r(o),t.d(o,{POST:()=>p});var s=t(7786),n=t(5042),a=t(2184),i=t(1890),u=t(3710);async function p(e){try{(0,u.ap)(e);let r=(0,u.Xd)(e),t=u.ZA.revokeAll(r,!1),o=i.NextResponse.json({revoked:t});return o.cookies.set(u.VP,"",(0,u.Ci)(e,0,!0)),o}catch(e){return(0,u.yN)(e)}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-auth/revoke-all/route",pathname:"/api/web-auth/revoke-all",filename:"route",bundlePath:"app/api/web-auth/revoke-all/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/revoke-all/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:h}=d,v="/api/web-auth/revoke-all/route";function m(){return(0,a.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:l})}},785:(e,r,t)=>{t.d(r,{k:()=>a});var o=t(1041),s=t(9411);let n=(0,s.resolve)((0,s.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function a(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>v,VP:()=>n,Xd:()=>d,ZA:()=>i,ap:()=>h,gB:()=>l,hw:()=>u,ki:()=>a,yN:()=>m});var o=t(1322),s=t(785);let n="customer_agent_session",a="customer_agent_device",i=new o.E0(new o.S3((0,s.k)())),u=new o.XU((0,s.k)());function p(e){let r={};for(let t of(e.headers.get("cookie")||"").split(";")){let e=t.indexOf("=");e>0&&(r[t.slice(0,e).trim()]=decodeURIComponent(t.slice(e+1).trim()))}return r}function d(e){return p(e)[n]||null}function c(e){let r=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:r[a],deviceName:e.headers.get("x-device-name")||""}}function l(e){return i.authenticateToken(d(e))}function h(e){let r=l(e);return i.validateCsrf(r,e.headers.get("x-csrf-token")),r}function v(e,r,t){return{httpOnly:t,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:r}}function m(e){let r=e instanceof o.CT?e:new o.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:r.code,message:r.message}},{status:r.status})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[375,703,322],()=>t(63));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=843,e.ids=[843],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},63:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>v,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>h,staticGenerationAsyncStorage:()=>l});var o={};t.r(o),t.d(o,{POST:()=>p});var s=t(7786),n=t(5042),a=t(2184),i=t(1890),u=t(3710);async function p(e){try{(0,u.ap)(e);let r=(0,u.Xd)(e),t=u.ZA.revokeAll(r,!1),o=i.NextResponse.json({revoked:t});return o.cookies.set(u.VP,"",(0,u.Ci)(e,0,!0)),o}catch(e){return(0,u.yN)(e)}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-auth/revoke-all/route",pathname:"/api/web-auth/revoke-all",filename:"route",bundlePath:"app/api/web-auth/revoke-all/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/revoke-all/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:h}=d,v="/api/web-auth/revoke-all/route";function m(){return(0,a.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:l})}},785:(e,r,t)=>{t.d(r,{k:()=>a});var o=t(1041),s=t(9411);let n=(0,s.resolve)((0,s.dirname)((0,o.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function a(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>h,VP:()=>n,Xd:()=>d,ZA:()=>i,ap:()=>l,hw:()=>u,ki:()=>a,yN:()=>v});var o=t(1322),s=t(785);let n="customer_agent_session",a="customer_agent_device",i=new o.E0(new o.S3((0,s.k)())),u=new o.XU((0,s.k)());function p(e){let r={};for(let t of(e.headers.get("cookie")||"").split(";")){let e=t.indexOf("=");e>0&&(r[t.slice(0,e).trim()]=decodeURIComponent(t.slice(e+1).trim()))}return r}function d(e){return p(e)[n]||null}function c(e){let r=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:r[a],deviceName:e.headers.get("x-device-name")||""}}function l(e){let r=i.authenticateToken(d(e));return i.validateCsrf(r,e.headers.get("x-csrf-token")),r}function h(e,r,t){return{httpOnly:t,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:r}}function v(e){let r=e instanceof o.CT?e:new o.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:r.code,message:r.message}},{status:r.status})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[375,703,322],()=>t(63));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=234,e.ids=[234],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},9798:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>g,patchFetch:()=>x,requestAsyncStorage:()=>f,routeModule:()=>l,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var s={};r.r(s),r.d(s,{POST:()=>c});var n=r(7786),o=r(5042),a=r(2184),i=r(1890),u=r(6005),p=r(1322),d=r(3710);async function c(e){try{let t=await e.json();(function(e){let t=process.env.AGENT_PAIRING_HASH;if(!t)return;let r=Date.parse(process.env.AGENT_PAIRING_EXPIRES_AT||""),s=(0,u.createHash)("sha256").update(e||"").digest("hex");if(!(Number.isFinite(r)&&Date.now()<r&&s.length===t.length&&(0,u.timingSafeEqual)(Buffer.from(s),Buffer.from(t))))throw new p.CT("INVALID_INPUT","配对链接无效或已过期",403)})(t.pairingToken);let r=await d.ZA.setup(t.username||"",t.password||"",(0,d.$U)(e)),s=i.NextResponse.json({user:r.user,csrfToken:r.csrfToken,deviceId:r.deviceId},{status:201});return s.cookies.set(d.VP,r.authToken,(0,d.Ci)(e,2592e3,!0)),s.cookies.set(d.ki,r.deviceId,(0,d.Ci)(e,31536e3,!1)),s}catch(e){return(0,d.yN)(e)}}let l=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/web-auth/setup/route",pathname:"/api/web-auth/setup",filename:"route",bundlePath:"app/api/web-auth/setup/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/setup/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:f,staticGenerationAsyncStorage:h,serverHooks:m}=l,g="/api/web-auth/setup/route";function x(){return(0,a.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},785:(e,t,r)=>{r.d(t,{k:()=>a});var s=r(1041),n=r(9411);let o=(0,n.resolve)((0,n.dirname)((0,s.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function a(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>h,VP:()=>o,Xd:()=>d,ZA:()=>i,ap:()=>f,gB:()=>l,hw:()=>u,ki:()=>a,yN:()=>m});var s=r(1322),n=r(785);let o="customer_agent_session",a="customer_agent_device",i=new s.E0(new s.S3((0,n.k)())),u=new s.XU((0,n.k)());function p(e){let t={};for(let r of(e.headers.get("cookie")||"").split(";")){let e=r.indexOf("=");e>0&&(t[r.slice(0,e).trim()]=decodeURIComponent(r.slice(e+1).trim()))}return t}function d(e){return p(e)[o]||null}function c(e){let t=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:t[a],deviceName:e.headers.get("x-device-name")||""}}function l(e){return i.authenticateToken(d(e))}function f(e){let t=l(e);return i.validateCsrf(t,e.headers.get("x-csrf-token")),t}function h(e,t,r){return{httpOnly:r,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:t}}function m(e){let t=e instanceof s.CT?e:new s.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:t.code,message:t.message}},{status:t.status})}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[375,703,322],()=>r(9798));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=234,e.ids=[234],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},9798:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>g,patchFetch:()=>x,requestAsyncStorage:()=>f,routeModule:()=>l,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var s={};r.r(s),r.d(s,{POST:()=>c});var o=r(7786),n=r(5042),a=r(2184),i=r(1890),u=r(6005),p=r(1322),d=r(3710);async function c(e){try{let t=await e.json();(function(e){let t=process.env.AGENT_PAIRING_HASH;if(!t)return;let r=Date.parse(process.env.AGENT_PAIRING_EXPIRES_AT||""),s=(0,u.createHash)("sha256").update(e||"").digest("hex");if(!(Number.isFinite(r)&&Date.now()<r&&s.length===t.length&&(0,u.timingSafeEqual)(Buffer.from(s),Buffer.from(t))))throw new p.CT("INVALID_INPUT","配对链接无效或已过期",403)})(t.pairingToken);let r=await d.ZA.setup(t.username||"",t.password||"",(0,d.$U)(e)),s=i.NextResponse.json({user:r.user,csrfToken:r.csrfToken,deviceId:r.deviceId},{status:201});return s.cookies.set(d.VP,r.authToken,(0,d.Ci)(e,2592e3,!0)),s.cookies.set(d.ki,r.deviceId,(0,d.Ci)(e,31536e3,!1)),s}catch(e){return(0,d.yN)(e)}}let l=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-auth/setup/route",pathname:"/api/web-auth/setup",filename:"route",bundlePath:"app/api/web-auth/setup/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/setup/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:f,staticGenerationAsyncStorage:h,serverHooks:m}=l,g="/api/web-auth/setup/route";function x(){return(0,a.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},785:(e,t,r)=>{r.d(t,{k:()=>a});var s=r(1041),o=r(9411);let n=(0,o.resolve)((0,o.dirname)((0,s.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function a(){return function(e=process.env,t=n){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>f,VP:()=>n,Xd:()=>d,ZA:()=>i,ap:()=>l,hw:()=>u,ki:()=>a,yN:()=>h});var s=r(1322),o=r(785);let n="customer_agent_session",a="customer_agent_device",i=new s.E0(new s.S3((0,o.k)())),u=new s.XU((0,o.k)());function p(e){let t={};for(let r of(e.headers.get("cookie")||"").split(";")){let e=r.indexOf("=");e>0&&(t[r.slice(0,e).trim()]=decodeURIComponent(r.slice(e+1).trim()))}return t}function d(e){return p(e)[n]||null}function c(e){let t=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:t[a],deviceName:e.headers.get("x-device-name")||""}}function l(e){let t=i.authenticateToken(d(e));return i.validateCsrf(t,e.headers.get("x-csrf-token")),t}function f(e,t,r){return{httpOnly:r,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:t}}function h(e){let t=e instanceof s.CT?e:new s.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:t.code,message:t.message}},{status:t.status})}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[375,703,322],()=>r(9798));module.exports=s})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=558,e.ids=[558],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},1492:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>f,patchFetch:()=>x,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>h,staticGenerationAsyncStorage:()=>l});var s={};r.r(s),r.d(s,{GET:()=>p});var n=r(7786),o=r(5042),i=r(2184),a=r(1890),u=r(3710);async function p(e){if(u.ZA.needsSetup())return a.NextResponse.json({needsSetup:!0,authenticated:!1});let t=(0,u.Xd)(e);if(!t)return a.NextResponse.json({needsSetup:!1,authenticated:!1});try{let r=u.ZA.refresh(t),s=a.NextResponse.json({needsSetup:!1,authenticated:!0,user:{id:r.principal.userId,username:r.principal.username},csrfToken:r.csrfToken,deviceId:r.principal.deviceId});return s.cookies.set(u.VP,t,(0,u.Ci)(e,2592e3,!0)),s.cookies.set(u.ki,r.principal.deviceId,(0,u.Ci)(e,31536e3,!1)),s}catch(r){let t=a.NextResponse.json({needsSetup:!1,authenticated:!1});return t.cookies.set(u.VP,"",(0,u.Ci)(e,0,!0)),t}}let d=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/web-auth/status/route",pathname:"/api/web-auth/status",filename:"route",bundlePath:"app/api/web-auth/status/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/status/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:h}=d,f="/api/web-auth/status/route";function x(){return(0,i.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:l})}},785:(e,t,r)=>{r.d(t,{k:()=>i});var s=r(1041),n=r(9411);let o=(0,n.resolve)((0,n.dirname)((0,s.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function i(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>f,VP:()=>o,Xd:()=>d,ZA:()=>a,ap:()=>h,gB:()=>l,hw:()=>u,ki:()=>i,yN:()=>x});var s=r(1322),n=r(785);let o="customer_agent_session",i="customer_agent_device",a=new s.E0(new s.S3((0,n.k)())),u=new s.XU((0,n.k)());function p(e){let t={};for(let r of(e.headers.get("cookie")||"").split(";")){let e=r.indexOf("=");e>0&&(t[r.slice(0,e).trim()]=decodeURIComponent(r.slice(e+1).trim()))}return t}function d(e){return p(e)[o]||null}function c(e){let t=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:t[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){return a.authenticateToken(d(e))}function h(e){let t=l(e);return a.validateCsrf(t,e.headers.get("x-csrf-token")),t}function f(e,t,r){return{httpOnly:r,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:t}}function x(e){let t=e instanceof s.CT?e:new s.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:t.code,message:t.message}},{status:t.status})}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[375,703,322],()=>r(1492));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=558,e.ids=[558],e.modules={5890:e=>{e.exports=require("better-sqlite3")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},9801:e=>{e.exports=require("os")},7718:e=>{e.exports=require("node:child_process")},6005:e=>{e.exports=require("node:crypto")},5673:e=>{e.exports=require("node:events")},7561:e=>{e.exports=require("node:fs")},3977:e=>{e.exports=require("node:fs/promises")},8849:e=>{e.exports=require("node:http")},2286:e=>{e.exports=require("node:https")},612:e=>{e.exports=require("node:os")},9411:e=>{e.exports=require("node:path")},1747:e=>{e.exports=require("node:readline")},1041:e=>{e.exports=require("node:url")},1492:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>f,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>h,staticGenerationAsyncStorage:()=>l});var s={};r.r(s),r.d(s,{GET:()=>p});var n=r(7786),o=r(5042),i=r(2184),a=r(1890),u=r(3710);async function p(e){if(u.ZA.needsSetup())return a.NextResponse.json({needsSetup:!0,authenticated:!1});let t=(0,u.Xd)(e);if(!t)return a.NextResponse.json({needsSetup:!1,authenticated:!1});try{let r=u.ZA.refresh(t),s=a.NextResponse.json({needsSetup:!1,authenticated:!0,user:{id:r.principal.userId,username:r.principal.username},csrfToken:r.csrfToken,deviceId:r.principal.deviceId});return s.cookies.set(u.VP,t,(0,u.Ci)(e,2592e3,!0)),s.cookies.set(u.ki,r.principal.deviceId,(0,u.Ci)(e,31536e3,!1)),s}catch(r){let t=a.NextResponse.json({needsSetup:!1,authenticated:!1});return t.cookies.set(u.VP,"",(0,u.Ci)(e,0,!0)),t}}let d=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/web-auth/status/route",pathname:"/api/web-auth/status",filename:"route",bundlePath:"app/api/web-auth/status/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-auth/status/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:c,staticGenerationAsyncStorage:l,serverHooks:h}=d,x="/api/web-auth/status/route";function f(){return(0,i.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:l})}},785:(e,t,r)=>{r.d(t,{k:()=>i});var s=r(1041),n=r(9411);let o=(0,n.resolve)((0,n.dirname)((0,s.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function i(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>h,VP:()=>o,Xd:()=>d,ZA:()=>a,ap:()=>l,hw:()=>u,ki:()=>i,yN:()=>x});var s=r(1322),n=r(785);let o="customer_agent_session",i="customer_agent_device",a=new s.E0(new s.S3((0,n.k)())),u=new s.XU((0,n.k)());function p(e){let t={};for(let r of(e.headers.get("cookie")||"").split(";")){let e=r.indexOf("=");e>0&&(t[r.slice(0,e).trim()]=decodeURIComponent(r.slice(e+1).trim()))}return t}function d(e){return p(e)[o]||null}function c(e){let t=p(e);return{ip:e.headers.get("x-forwarded-for")?.split(",")[0].trim()||"unknown",userAgent:e.headers.get("user-agent")||"",deviceId:t[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){let t=a.authenticateToken(d(e));return a.validateCsrf(t,e.headers.get("x-csrf-token")),t}function h(e,t,r){return{httpOnly:r,sameSite:"strict",secure:"https"===("1"===process.env.AGENT_TRUST_TUNNEL_PROXY?e.headers.get("x-forwarded-proto"):null)||"https:"===new URL(e.url).protocol,path:"/",maxAge:t}}function x(e){let t=e instanceof s.CT?e:new s.CT("UNAUTHENTICATED","认证失败",401);return Response.json({error:{code:t.code,message:t.message}},{status:t.status})}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[375,703,322],()=>r(1492));module.exports=s})();