agentroam-runtime-darwin-arm64 0.2.0-preview.7 → 0.2.0-preview.8

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 (71) hide show
  1. package/manifest.json +1 -1
  2. package/package.json +1 -1
  3. package/runtime/.next/BUILD_ID +1 -1
  4. package/runtime/.next/app-path-routes-manifest.json +1 -1
  5. package/runtime/.next/build-manifest.json +2 -2
  6. package/runtime/.next/prerender-manifest.json +1 -1
  7. package/runtime/.next/server/app/_not-found.html +1 -1
  8. package/runtime/.next/server/app/_not-found.rsc +1 -1
  9. package/runtime/.next/server/app/api/agent/abort/route.js +2 -2
  10. package/runtime/.next/server/app/api/agent/abort/route.js.nft.json +1 -1
  11. package/runtime/.next/server/app/api/agent/answer/route.js +2 -2
  12. package/runtime/.next/server/app/api/agent/answer/route.js.nft.json +1 -1
  13. package/runtime/.next/server/app/api/agent/model/route.js +1 -1
  14. package/runtime/.next/server/app/api/agent/run/route.js +2 -2
  15. package/runtime/.next/server/app/api/agent/run/route.js.nft.json +1 -1
  16. package/runtime/.next/server/app/api/agent/runtime-health/route.js +1 -1
  17. package/runtime/.next/server/app/api/agent/runtime-health/route.js.nft.json +1 -1
  18. package/runtime/.next/server/app/api/agent/runtime-health.body +1 -1
  19. package/runtime/.next/server/app/api/agent/steer/route.js +2 -2
  20. package/runtime/.next/server/app/api/agent/steer/route.js.nft.json +1 -1
  21. package/runtime/.next/server/app/api/agent/stream/route.js +6 -6
  22. package/runtime/.next/server/app/api/agent/stream/route.js.nft.json +1 -1
  23. package/runtime/.next/server/app/api/mcp/connect/route.js +1 -1
  24. package/runtime/.next/server/app/api/plugins/load/route.js +2 -2
  25. package/runtime/.next/server/app/api/projects/[id]/route.js +1 -1
  26. package/runtime/.next/server/app/api/projects/check/route.js +1 -1
  27. package/runtime/.next/server/app/api/projects/directories/route.js +1 -1
  28. package/runtime/.next/server/app/api/projects/roots/route.js +1 -1
  29. package/runtime/.next/server/app/api/projects/route.js +1 -1
  30. package/runtime/.next/server/app/api/remote-tools/register/route.js +1 -1
  31. package/runtime/.next/server/app/api/sessions/[id]/changes/route.js +2 -2
  32. package/runtime/.next/server/app/api/sessions/[id]/changes/route.js.nft.json +1 -1
  33. package/runtime/.next/server/app/api/sessions/[id]/fork/route.js +1 -1
  34. package/runtime/.next/server/app/api/sessions/[id]/fork/route.js.nft.json +1 -1
  35. package/runtime/.next/server/app/api/sessions/[id]/goals/route.js +2 -2
  36. package/runtime/.next/server/app/api/sessions/[id]/goals/route.js.nft.json +1 -1
  37. package/runtime/.next/server/app/api/sessions/[id]/handoff/route.js +1 -1
  38. package/runtime/.next/server/app/api/sessions/[id]/handoff/route.js.nft.json +1 -1
  39. package/runtime/.next/server/app/api/sessions/[id]/route.js +2 -2
  40. package/runtime/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  41. package/runtime/.next/server/app/api/sessions/route.js +2 -2
  42. package/runtime/.next/server/app/api/sessions/route.js.nft.json +1 -1
  43. package/runtime/.next/server/app/api/skills/route.js +2 -2
  44. package/runtime/.next/server/app/api/tools/route.js +1 -1
  45. package/runtime/.next/server/app/api/web-auth/login/route.js +1 -1
  46. package/runtime/.next/server/app/api/web-auth/logout/route.js +1 -1
  47. package/runtime/.next/server/app/api/web-auth/revoke-all/route.js +1 -1
  48. package/runtime/.next/server/app/api/web-auth/setup/route.js +1 -1
  49. package/runtime/.next/server/app/api/web-auth/status/route.js +1 -1
  50. package/runtime/.next/server/app/api/web-auth/status.body +1 -0
  51. package/runtime/.next/server/app/api/web-auth/status.meta +1 -0
  52. package/runtime/.next/server/app/api/web-console/bootstrap/route.js +1 -1
  53. package/runtime/.next/server/app/api/web-console/device-state/route.js +1 -1
  54. package/runtime/.next/server/app/api/web-console/history/route.js +1 -1
  55. package/runtime/.next/server/app/api/web-console/preferences/route.js +1 -1
  56. package/runtime/.next/server/app/web.html +1 -1
  57. package/runtime/.next/server/app/web.rsc +1 -1
  58. package/runtime/.next/server/app-paths-manifest.json +16 -16
  59. package/runtime/.next/server/chunks/83.js +119 -0
  60. package/runtime/.next/server/pages/404.html +1 -1
  61. package/runtime/.next/server/pages/500.html +1 -1
  62. package/runtime/.next/server/server-reference-manifest.json +1 -1
  63. package/runtime/.next/server/webpack-runtime.js +1 -1
  64. package/runtime/package-lock.json +1 -1
  65. package/runtime/package.json +1 -1
  66. package/runtime/webapp/dist/assets/{App-D8mcRu-Q.js → App-BipEZAhs.js} +54 -54
  67. package/runtime/webapp/dist/assets/{index-BjCuCFYF.js → index-1C7w3q4Y.js} +1 -1
  68. package/runtime/webapp/dist/index.html +1 -1
  69. package/runtime/.next/server/chunks/988.js +0 -119
  70. /package/runtime/.next/static/{WbNomgtKBalC4rAWPGRjU → 9pvPG6rD0pKUnx50jLZOe}/_buildManifest.js +0 -0
  71. /package/runtime/.next/static/{WbNomgtKBalC4rAWPGRjU → 9pvPG6rD0pKUnx50jLZOe}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- "use strict";(()=>{var e={};e.id=937,e.ids=[937],e.modules={7728:e=>{e.exports=require("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},8584:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>_,patchFetch:()=>R,requestAsyncStorage:()=>y,routeModule:()=>S,serverHooks:()=>E,staticGenerationAsyncStorage:()=>T});var r={};s.r(r),s.d(r,{DELETE:()=>f,GET:()=>g,PATCH:()=>w,POST:()=>m});var o=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);let d=globalThis,c=new Set;function h(){return d.__customerGoalCoordinator||(d.__customerGoalCoordinator=new l.Y_(u.f.getSessionStore(),async(e,t)=>{for(;u.f.hasActiveRun();)await new Promise(e=>setTimeout(e,250));c.add(e);try{await u.f.run(t,e)}finally{c.delete(e)}let s=await u.f.getSessionStore().get(e);return s?.status==="failed"?{outcome:"failed",reason:"Customer Agent goal run failed"}:{outcome:"completed"}},e=>{c.has(e)&&u.f.abort()})),d.__customerGoalCoordinator}var p=s(3988);async function g(e,{params:t}){try{let e=(0,p.V_)(t.id)?await (0,p.NL)().getGoals(t.id,"web"):await h().get(t.id);return a.NextResponse.json(e)}catch(e){return v(e)}}async function m(e,{params:t}){try{let s=await e.json();if("string"!=typeof s.objective||!s.objective.trim())return a.NextResponse.json({error:"objective is required"},{status:400});if((0,p.V_)(t.id)){let e=await (0,p.NL)().enqueueGoal(t.id,s.objective,"string"==typeof s.sourceMessageId?s.sourceMessageId:void 0,"web");return a.NextResponse.json(e)}let r=await h().enqueue(t.id,s.objective,"string"==typeof s.sourceMessageId?s.sourceMessageId:void 0);return a.NextResponse.json({state:r})}catch(e){return v(e)}}async function w(e,{params:t}){try{let s=await e.json();if(!Array.isArray(s.orderedIds)||!s.orderedIds.every(e=>"string"==typeof e))return a.NextResponse.json({error:"orderedIds must be a string array"},{status:400});let r=(0,p.V_)(t.id)?await (0,p.NL)().reorderGoals(t.id,s.orderedIds):await h().reorder(t.id,s.orderedIds);return a.NextResponse.json(r)}catch(e){return v(e)}}async function f(e,{params:t}){try{let s=new URL(e.url).searchParams.get("goalId");if(!s)return a.NextResponse.json({error:"goalId is required"},{status:400});let r=(0,p.V_)(t.id)?await (0,p.NL)().cancelGoal(t.id,s):await h().cancel(t.id,s);return a.NextResponse.json(r)}catch(e){return v(e)}}function v(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Goal operation failed"},{status:(0,p.WW)(e)})}let S=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/sessions/[id]/goals/route",pathname:"/api/sessions/[id]/goals",filename:"route",bundlePath:"app/api/sessions/[id]/goals/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/[id]/goals/route.ts",nextConfigOutput:"standalone",userland:r}),{requestAsyncStorage:y,staticGenerationAsyncStorage:T,serverHooks:E}=S,_="/api/sessions/[id]/goals/route";function R(){return(0,n.patchFetch)({serverHooks:E,staticGenerationAsyncStorage:T})}},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var r=s(1322),o=s(612),i=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,i.kO)(),this.workingDirectory=(0,i.sr)(),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,this.toolPermissionGate=new r.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,r.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
1
+ "use strict";(()=>{var e={};e.id=937,e.ids=[937],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")},2728:e=>{e.exports=import("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},2217:(e,t,s)=>{s.a(e,async(e,r)=>{try{s.r(t),s.d(t,{originalPathname:()=>g,patchFetch:()=>u,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>p,staticGenerationAsyncStorage:()=>h});var o=s(7786),i=s(5042),n=s(2184),a=s(4799),l=e([a]);a=(l.then?(await l)():l)[0];let d=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/sessions/[id]/goals/route",pathname:"/api/sessions/[id]/goals",filename:"route",bundlePath:"app/api/sessions/[id]/goals/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/[id]/goals/route.ts",nextConfigOutput:"standalone",userland:a}),{requestAsyncStorage:c,staticGenerationAsyncStorage:h,serverHooks:p}=d,g="/api/sessions/[id]/goals/route";function u(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:h})}r()}catch(e){r(e)}})},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var r=s(1322),o=s(612),i=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,i.kO)(),this.workingDirectory=(0,i.sr)(),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,this.toolPermissionGate=new r.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,r.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
2
2
  ${e.summary}
3
- 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,o.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u}};var t=require("../../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322,988],()=>s(8584));module.exports=r})();
3
+ 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,o.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u},4799:(e,t,s)=>{s.a(e,async(e,r)=>{try{s.r(t),s.d(t,{DELETE:()=>c,GET:()=>l,PATCH:()=>d,POST:()=>u});var o=s(1890),i=s(6435),n=s(2083),a=e([n]);async function l(e,{params:t}){try{let e=(0,n.V_)(t.id)?await (0,n.NL)().getGoals(t.id,"web"):await (0,i.f)().get(t.id);return o.NextResponse.json(e)}catch(e){return h(e)}}async function u(e,{params:t}){try{let s=await e.json();if("string"!=typeof s.objective||!s.objective.trim())return o.NextResponse.json({error:"objective is required"},{status:400});if((0,n.V_)(t.id)){let e=await (0,n.NL)().enqueueGoal(t.id,s.objective,"string"==typeof s.sourceMessageId?s.sourceMessageId:void 0,"web");return o.NextResponse.json(e)}let r=await (0,i.f)().enqueue(t.id,s.objective,"string"==typeof s.sourceMessageId?s.sourceMessageId:void 0);return o.NextResponse.json({state:r})}catch(e){return h(e)}}async function d(e,{params:t}){try{let s=await e.json();if(!Array.isArray(s.orderedIds)||!s.orderedIds.every(e=>"string"==typeof e))return o.NextResponse.json({error:"orderedIds must be a string array"},{status:400});let r=(0,n.V_)(t.id)?await (0,n.NL)().reorderGoals(t.id,s.orderedIds):await (0,i.f)().reorder(t.id,s.orderedIds);return o.NextResponse.json(r)}catch(e){return h(e)}}async function c(e,{params:t}){try{let s=new URL(e.url).searchParams.get("goalId");if(!s)return o.NextResponse.json({error:"goalId is required"},{status:400});let r=(0,n.V_)(t.id)?await (0,n.NL)().cancelGoal(t.id,s):await (0,i.f)().cancel(t.id,s);return o.NextResponse.json(r)}catch(e){return h(e)}}function h(e){return o.NextResponse.json({error:e instanceof Error?e.message:"Goal operation failed"},{status:(0,n.WW)(e)})}n=(a.then?(await a)():a)[0],r()}catch(e){r(e)}})},6435:(e,t,s)=>{s.d(t,{f:()=>a});var r=s(1322),o=s(7186);let i=globalThis,n=new Set;function a(){return i.__customerGoalCoordinator||(i.__customerGoalCoordinator=new r.Y_(o.f.getSessionStore(),async(e,t)=>{for(;o.f.hasActiveRun();)await new Promise(e=>setTimeout(e,250));n.add(e);try{await o.f.run(t,e)}finally{n.delete(e)}let s=await o.f.getSessionStore().get(e);return s?.status==="failed"?{outcome:"failed",reason:"Customer Agent goal run failed"}:{outcome:"completed"}},e=>{n.has(e)&&o.f.abort()})),i.__customerGoalCoordinator}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322,83],()=>s(2217));module.exports=r})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../../../node_modules/better-sqlite3","../../../../../../../node_modules/next","../../../../../../../package.json","../../../../../../package.json","../../../../../chunks/322.js","../../../../../chunks/375.js","../../../../../chunks/703.js","../../../../../chunks/988.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../../../node_modules/better-sqlite3","../../../../../../../node_modules/next","../../../../../../../package.json","../../../../../../package.json","../../../../../chunks/322.js","../../../../../chunks/375.js","../../../../../chunks/703.js","../../../../../chunks/83.js","../../../../../webpack-runtime.js"]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=719,e.ids=[719],e.modules={7728:e=>{e.exports=require("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},6466:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>h,patchFetch:()=>l,requestAsyncStorage:()=>x,routeModule:()=>u,serverHooks:()=>f,staticGenerationAsyncStorage:()=>c});var t={};s.r(t),s.d(t,{POST:()=>d});var o=s(7786),n=s(5042),i=s(2184),a=s(1890),p=s(3988);async function d(e,{params:r}){if(!(0,p.V_)(r.id))return a.NextResponse.json({error:"Only native sessions can be handed off"},{status:405});try{let e=await (0,p.NL)().handoff(r.id,"desktop");return a.NextResponse.json(e)}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Native handoff failed"},{status:(0,p.WW)(e)})}}let u=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/sessions/[id]/handoff/route",pathname:"/api/sessions/[id]/handoff",filename:"route",bundlePath:"app/api/sessions/[id]/handoff/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/[id]/handoff/route.ts",nextConfigOutput:"standalone",userland:t}),{requestAsyncStorage:x,staticGenerationAsyncStorage:c,serverHooks:f}=u,h="/api/sessions/[id]/handoff/route";function l(){return(0,i.patchFetch)({serverHooks:f,staticGenerationAsyncStorage:c})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[375,703,322,988],()=>s(6466));module.exports=t})();
1
+ "use strict";(()=>{var e={};e.id=719,e.ids=[719],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")},2728:e=>{e.exports=import("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},351:(e,r,t)=>{t.a(e,async(e,s)=>{try{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>d,requestAsyncStorage:()=>c,routeModule:()=>u,serverHooks:()=>f,staticGenerationAsyncStorage:()=>x});var o=t(7786),n=t(5042),a=t(2184),i=t(6461),p=e([i]);i=(p.then?(await p)():p)[0];let u=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/sessions/[id]/handoff/route",pathname:"/api/sessions/[id]/handoff",filename:"route",bundlePath:"app/api/sessions/[id]/handoff/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/sessions/[id]/handoff/route.ts",nextConfigOutput:"standalone",userland:i}),{requestAsyncStorage:c,staticGenerationAsyncStorage:x,serverHooks:f}=u,h="/api/sessions/[id]/handoff/route";function d(){return(0,a.patchFetch)({serverHooks:f,staticGenerationAsyncStorage:x})}s()}catch(e){s(e)}})},6461:(e,r,t)=>{t.a(e,async(e,s)=>{try{t.r(r),t.d(r,{POST:()=>i});var o=t(1890),n=t(2083),a=e([n]);async function i(e,{params:r}){if(!(0,n.V_)(r.id))return o.NextResponse.json({error:"Only native sessions can be handed off"},{status:405});try{let e=await (0,n.NL)().handoff(r.id,"desktop");return o.NextResponse.json(e)}catch(e){return o.NextResponse.json({error:e instanceof Error?e.message:"Native handoff failed"},{status:(0,n.WW)(e)})}}n=(a.then?(await a)():a)[0],s()}catch(e){s(e)}})}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[375,703,322,83],()=>t(351));module.exports=s})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../../../node_modules/better-sqlite3","../../../../../../../node_modules/next","../../../../../../../package.json","../../../../../../package.json","../../../../../chunks/322.js","../../../../../chunks/375.js","../../../../../chunks/703.js","../../../../../chunks/988.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../../../node_modules/better-sqlite3","../../../../../../../node_modules/next","../../../../../../../package.json","../../../../../../package.json","../../../../../chunks/322.js","../../../../../chunks/375.js","../../../../../chunks/703.js","../../../../../chunks/83.js","../../../../../webpack-runtime.js"]}
@@ -1,3 +1,3 @@
1
- "use strict";(()=>{var e={};e.id=241,e.ids=[241],e.modules={7728:e=>{e.exports=require("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},9564:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>S,patchFetch:()=>v,requestAsyncStorage:()=>g,routeModule:()=>m,serverHooks:()=>w,staticGenerationAsyncStorage:()=>f});var o={};s.r(o),s.d(o,{DELETE:()=>p,GET:()=>c,PATCH:()=>h});var r=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186),d=s(3988);async function c(e,{params:t}){let s=new URL(e.url),o=s.searchParams.get("before"),r=s.searchParams.get("limit"),i=null!==o||null!==r?{before:o||void 0,limit:function(e){if(null===e)return;let t=Number(e);return Number.isFinite(t)?t:void 0}(r)}:void 0;if((0,d.V_)(t.id))try{let e=await (0,d.NL)().get(t.id,i);return a.NextResponse.json(e)}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Internal error"},{status:(0,d.WW)(e)})}let n=await u.f.getSessionStore().get(t.id);if(!n)return a.NextResponse.json({error:"Session not found"},{status:404});let c=!n.messages?.length&&Array.isArray(n.events)&&n.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}(n.events):n.messages,h=i?{...n,permissionMode:(0,l.Ny)(n.metadata.permissionMode),...(0,l.MO)(c??[],n.events??[],i)}:{...n,messages:c,permissionMode:(0,l.Ny)(n.metadata.permissionMode)};return a.NextResponse.json(h)}async function h(e,{params:t}){let s=await e.json();if(!(0,l.ue)(s.permissionMode))return a.NextResponse.json({error:"Invalid permission mode"},{status:400});if((0,d.V_)(t.id))try{let e=await (0,d.NL)().setPermissionMode(t.id,s.permissionMode);return a.NextResponse.json(e)}catch(e){return a.NextResponse.json({error:e instanceof Error?e.message:"Unable to update permission mode"},{status:(0,d.WW)(e)})}try{let e=await u.f.setSessionPermissionMode(t.id,s.permissionMode);return a.NextResponse.json({...e,permissionMode:(0,l.Ny)(e.metadata.permissionMode)})}catch(s){let e=s instanceof Error?s.message:"Unable to update permission mode",t=e.startsWith("Session not found")?404:500;return a.NextResponse.json({error:e},{status:t})}}async function p(e,{params:t}){return(0,d.V_)(t.id)?a.NextResponse.json({error:"External runtime sessions cannot be deleted"},{status:405}):(await u.f.getSessionStore().delete(t.id),a.NextResponse.json({status:"deleted"}))}let m=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:g,staticGenerationAsyncStorage:f,serverHooks:w}=m,S="/api/sessions/[id]/route";function v(){return(0,n.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:f})}},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var o=s(1322),r=s(612),i=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,i.kO)(),this.workingDirectory=(0,i.sr)(),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,this.toolPermissionGate=new o.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,o.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
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")},2728:e=>{e.exports=import("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},3205:(e,t,s)=>{s.a(e,async(e,o)=>{try{s.r(t),s.d(t,{originalPathname:()=>m,patchFetch:()=>u,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>p,staticGenerationAsyncStorage:()=>h});var r=s(7786),i=s(5042),n=s(2184),a=s(3082),l=e([a]);a=(l.then?(await l)():l)[0];let d=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:a}),{requestAsyncStorage:c,staticGenerationAsyncStorage:h,serverHooks:p}=d,m="/api/sessions/[id]/route";function u(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:h})}o()}catch(e){o(e)}})},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var o=s(1322),r=s(612),i=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,i.kO)(),this.workingDirectory=(0,i.sr)(),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,this.toolPermissionGate=new o.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,o.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
2
2
  ${e.summary}
3
- 原因:${e.reason}`,options:[...o.Sf],toolCallId:""},e.sessionId);return(0,o.wM)(t.answer,t.selectedIndices)}});let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",r=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:r}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return o.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,r.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,o.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{r=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=r,this.activeRunSessionId=t,this.activeRun=r.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322,988],()=>s(9564));module.exports=o})();
3
+ 原因:${e.reason}`,options:[...o.Sf],toolCallId:""},e.sessionId);return(0,o.wM)(t.answer,t.selectedIndices)}});let e=process.env.AGENT_API_KEY,t=process.env.AGENT_MODEL_PROVIDER||"openai",s=process.env.AGENT_MODEL_ID||"gpt-4o",r=process.env.AGENT_BASE_URL||void 0,n=new o.Y4().withSessionStore(this.sessionStore).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);n.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e&&n.withModel(t,{apiKey:e,modelId:s,baseUrl:r}),this.builder=n}getBuilder(){return this.builder||(this.builder=new o.Y4().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return o.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,r.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,o.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{r=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=r,this.activeRunSessionId=t,this.activeRun=r.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u},3082:(e,t,s)=>{s.a(e,async(e,o)=>{try{s.r(t),s.d(t,{DELETE:()=>c,GET:()=>u,PATCH:()=>d});var r=s(1890),i=s(1322),n=s(7186),a=s(2083),l=e([a]);async function u(e,{params:t}){let s=new URL(e.url),o=s.searchParams.get("before"),l=s.searchParams.get("limit"),u=null!==o||null!==l?{before:o||void 0,limit:function(e){if(null===e)return;let t=Number(e);return Number.isFinite(t)?t:void 0}(l)}:void 0;if((0,a.V_)(t.id))try{let e=await (0,a.NL)().get(t.id,u);return r.NextResponse.json(e)}catch(e){return r.NextResponse.json({error:e instanceof Error?e.message:"Internal error"},{status:(0,a.WW)(e)})}let d=await n.f.getSessionStore().get(t.id);if(!d)return r.NextResponse.json({error:"Session not found"},{status:404});let c=!d.messages?.length&&Array.isArray(d.events)&&d.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}(d.events):d.messages,h=u?{...d,permissionMode:(0,i.Ny)(d.metadata.permissionMode),...(0,i.MO)(c??[],d.events??[],u)}:{...d,messages:c,permissionMode:(0,i.Ny)(d.metadata.permissionMode)};return r.NextResponse.json(h)}async function d(e,{params:t}){let s=await e.json();if(!(0,i.ue)(s.permissionMode))return r.NextResponse.json({error:"Invalid permission mode"},{status:400});if((0,a.V_)(t.id))try{let e=await (0,a.NL)().setPermissionMode(t.id,s.permissionMode);return r.NextResponse.json(e)}catch(e){return r.NextResponse.json({error:e instanceof Error?e.message:"Unable to update permission mode"},{status:(0,a.WW)(e)})}try{let e=await n.f.setSessionPermissionMode(t.id,s.permissionMode);return r.NextResponse.json({...e,permissionMode:(0,i.Ny)(e.metadata.permissionMode)})}catch(s){let e=s instanceof Error?s.message:"Unable to update permission mode",t=e.startsWith("Session not found")?404:500;return r.NextResponse.json({error:e},{status:t})}}async function c(e,{params:t}){return(0,a.V_)(t.id)?r.NextResponse.json({error:"External runtime sessions cannot be deleted"},{status:405}):(await n.f.getSessionStore().delete(t.id),r.NextResponse.json({status:"deleted"}))}a=(l.then?(await l)():l)[0],o()}catch(e){o(e)}})}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[375,703,322,83],()=>s(3205));module.exports=o})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../../node_modules/better-sqlite3","../../../../../../node_modules/next","../../../../../../package.json","../../../../../package.json","../../../../chunks/322.js","../../../../chunks/375.js","../../../../chunks/703.js","../../../../chunks/988.js","../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../../node_modules/better-sqlite3","../../../../../../node_modules/next","../../../../../../package.json","../../../../../package.json","../../../../chunks/322.js","../../../../chunks/375.js","../../../../chunks/703.js","../../../../chunks/83.js","../../../../webpack-runtime.js"]}
@@ -1,3 +1,3 @@
1
- "use strict";(()=>{var e={};e.id=772,e.ids=[772],e.modules={7728:e=>{e.exports=require("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},1880:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>v,patchFetch:()=>S,requestAsyncStorage:()=>m,routeModule:()=>p,serverHooks:()=>w,staticGenerationAsyncStorage:()=>g});var r={};s.r(r),s.d(r,{GET:()=>h,POST:()=>d});var o=s(7786),i=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186),c=s(3988);async function h(e){let t=new URL(e.url),s=t.searchParams.get("projectId")||void 0,r="1"===t.searchParams.get("refresh"),o=await u.f.getSessionStore().list(s),i=(0,c.NL)(),n=o.map(({messages:e,events:t,...s})=>({...s,agentType:"customer-agent",canDelete:!0,permissionMode:(0,l.Ny)(s.metadata.permissionMode)}));try{let e=r?await i.refresh(s):await i.list(s);return a.NextResponse.json([...n,...e])}catch(e){return console.error("Native session discovery failed:",e),a.NextResponse.json(n)}}async function d(e){let t=await e.json(),s=t.agentType??"customer-agent";if("customer-agent"!==s)try{if(!t.projectId)throw new u.B("请选择宿主机项目","PROJECT_PATH_REQUIRED",400);let e=await u.f.resolveProjectWorkingDirectory(t.projectId,!0),r=await (0,c.NL)().create({agentType:s,title:t.title??"新会话",cwd:e});return a.NextResponse.json(r,{status:201})}catch(e){if(e instanceof u.B)return a.NextResponse.json({error:{code:e.code,message:e.message}},{status:e.status});return a.NextResponse.json({error:e instanceof Error?e.message:"Internal error"},{status:(0,c.WW)(e)})}let r=await u.f.createSession(t.title??"Untitled",t.projectId??"");return a.NextResponse.json(r,{status:201})}let p=new o.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:r}),{requestAsyncStorage:m,staticGenerationAsyncStorage:g,serverHooks:w}=p,v="/api/sessions/route";function S(){return(0,n.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:g})}},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var r=s(1322),o=s(612),i=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,i.kO)(),this.workingDirectory=(0,i.sr)(),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,this.toolPermissionGate=new r.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,r.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
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")},2728:e=>{e.exports=import("@anthropic-ai/claude-agent-sdk")},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")},7503:e=>{e.exports=require("node:net")},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")},5881:e=>{e.exports=require("node:util")},3628:(e,t,s)=>{s.a(e,async(e,r)=>{try{s.r(t),s.d(t,{originalPathname:()=>m,patchFetch:()=>u,requestAsyncStorage:()=>h,routeModule:()=>c,serverHooks:()=>p,staticGenerationAsyncStorage:()=>d});var o=s(7786),i=s(5042),n=s(2184),a=s(5110),l=e([a]);a=(l.then?(await l)():l)[0];let c=new o.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:a}),{requestAsyncStorage:h,staticGenerationAsyncStorage:d,serverHooks:p}=c,m="/api/sessions/route";function u(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:d})}r()}catch(e){r(e)}})},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var r=s(1322),o=s(612),i=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,i.kO)(),this.workingDirectory=(0,i.sr)(),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,this.toolPermissionGate=new r.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,r.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
2
2
  ${e.summary}
3
- 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,o.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322,988],()=>s(1880));module.exports=r})();
3
+ 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,o.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u},5110:(e,t,s)=>{s.a(e,async(e,r)=>{try{s.r(t),s.d(t,{GET:()=>u,POST:()=>c});var o=s(1890),i=s(1322),n=s(7186),a=s(2083),l=e([a]);async function u(e){let t=new URL(e.url),s=t.searchParams.get("projectId")||void 0,r="1"===t.searchParams.get("refresh"),l=await n.f.getSessionStore().list(s),u=(0,a.NL)(),c=l.map(({messages:e,events:t,...s})=>({...s,agentType:"customer-agent",canDelete:!0,permissionMode:(0,i.Ny)(s.metadata.permissionMode)}));try{let e=r?await u.refresh(s):await u.list(s);return o.NextResponse.json([...c,...e])}catch(e){return console.error("Native session discovery failed:",e),o.NextResponse.json(c)}}async function c(e){let t=await e.json(),s=t.agentType??"customer-agent";if("customer-agent"!==s)try{if(!t.projectId)throw new n.B("请选择宿主机项目","PROJECT_PATH_REQUIRED",400);let e=await n.f.resolveProjectWorkingDirectory(t.projectId,!0),r=await (0,a.NL)().create({agentType:s,title:t.title??"新会话",cwd:e});return o.NextResponse.json(r,{status:201})}catch(e){if(e instanceof n.B)return o.NextResponse.json({error:{code:e.code,message:e.message}},{status:e.status});return o.NextResponse.json({error:e instanceof Error?e.message:"Internal error"},{status:(0,a.WW)(e)})}let r=await n.f.createSession(t.title??"Untitled",t.projectId??"");return o.NextResponse.json(r,{status:201})}a=(l.then?(await l)():l)[0],r()}catch(e){r(e)}})}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322,83],()=>s(3628));module.exports=r})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../node_modules/better-sqlite3","../../../../../node_modules/next","../../../../../package.json","../../../../package.json","../../../chunks/322.js","../../../chunks/375.js","../../../chunks/703.js","../../../chunks/988.js","../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../node_modules/@anthropic-ai/claude-agent-sdk","../../../../../node_modules/better-sqlite3","../../../../../node_modules/next","../../../../../package.json","../../../../package.json","../../../chunks/322.js","../../../chunks/375.js","../../../chunks/703.js","../../../chunks/83.js","../../../webpack-runtime.js"]}
@@ -1,3 +1,3 @@
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:()=>d,serverHooks:()=>g,staticGenerationAsyncStorage:()=>m});var r={};s.r(r),s.d(r,{GET:()=>c,POST:()=>h});var i=s(7786),o=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);async function c(){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 h(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 d=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:m,serverHooks:g}=d,v="/api/skills/route";function f(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:m})}},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var r=s(1322),i=s(612),o=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,o.kO)(),this.workingDirectory=(0,o.sr)(),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,this.toolPermissionGate=new r.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,r.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
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:()=>w,requestAsyncStorage:()=>p,routeModule:()=>d,serverHooks:()=>g,staticGenerationAsyncStorage:()=>m});var r={};s.r(r),s.d(r,{GET:()=>c,POST:()=>h});var i=s(7786),o=s(5042),n=s(2184),a=s(1890),l=s(1322),u=s(7186);async function c(){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 h(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 d=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:m,serverHooks:g}=d,v="/api/skills/route";function w(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:m})}},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var r=s(1322),i=s(612),o=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,o.kO)(),this.workingDirectory=(0,o.sr)(),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,this.toolPermissionGate=new r.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,r.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
2
2
  ${e.summary}
3
- 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,i.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(o?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=o?.projectId||this.defaultRemoteToolsProjectId;try{i=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=i,this.activeRunSessionId=t,this.activeRun=i.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u},785:(e,t,s)=>{s.d(t,{kO:()=>n,sr:()=>a});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)}()}function a(){return function(e=process.env,t=o){return(0,i.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,n())}}};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})();
3
+ 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,i.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(o?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=o?.projectId||this.defaultRemoteToolsProjectId;try{i=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=i,this.activeRunSessionId=t,this.activeRun=i.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u},785:(e,t,s)=>{s.d(t,{kO:()=>o,sr:()=>n});var r=s(9411);let i=function(){let e=process.argv[1];if(e){let t=(0,r.dirname)((0,r.resolve)(e)),s=`${r.sep}node_modules${r.sep}.bin`;return t.endsWith(s)?(0,r.resolve)(t,"..",".."):t}return(0,r.resolve)(process.cwd())}();function o(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function n(){return function(e=process.env,t=i){return(0,r.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,o())}}};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,3 +1,3 @@
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:()=>h,routeModule:()=>c,serverHooks:()=>p,staticGenerationAsyncStorage:()=>d});var r={};s.r(r),s.d(r,{GET:()=>u});var o=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 c=new o.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:r}),{requestAsyncStorage:h,staticGenerationAsyncStorage:d,serverHooks:p}=c,m="/api/tools/route";function g(){return(0,n.patchFetch)({serverHooks:p,staticGenerationAsyncStorage:d})}},7186:(e,t,s)=>{s.d(t,{B:()=>n,f:()=>u});var r=s(1322),o=s(612),i=s(785);class n extends Error{constructor(e,t,s){super(e),this.code=t,this.status=s,this.name="ProjectWorkingDirectoryError"}}class a{constructor(){this.baseDir=(0,i.kO)(),this.workingDirectory=(0,i.sr)(),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,this.toolPermissionGate=new r.XP({resolveMode:async e=>{let t=await this.sessionStore.get(e);return(0,r.Ny)(t?.metadata.permissionMode)},requestApproval:async e=>{let t=await this.createQuestion({question:`Customer Agent 请求权限
2
2
  ${e.summary}
3
- 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,o.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u},785:(e,t,s)=>{s.d(t,{kO:()=>n,sr:()=>a});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)}()}function a(){return function(e=process.env,t=i){return(0,o.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,n())}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(5167));module.exports=r})();
3
+ 原因:${e.reason}`,options:[...r.Sf],toolCallId:""},e.sessionId);return(0,r.wM)(t.answer,t.selectedIndices)}});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).withWorkingDirectory(this.workingDirectory).withToolPermissionGate(this.toolPermissionGate);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().withToolPermissionGate(this.toolPermissionGate)),this.builder}setBuilder(e){e.withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId),e.withWorkingDirectory(this.workingDirectory),e.withToolPermissionGate(this.toolPermissionGate),this.builder=e}getSessionStore(){return this.sessionStore}isSessionRunning(e){return this.activeRunSessionId===e}hasActiveRun(){return null!==this.activeRunSessionId}getProjectStore(){return this.projectStore}async resolveProjectWorkingDirectory(e,t=!1){if(!e)return this.workingDirectory;let s=await this.projectStore.get(e);if(!s)throw new n("项目不存在","PROJECT_NOT_FOUND",404);if(!s.description?.trim()){if(!t)return this.workingDirectory;throw new n("该项目没有宿主机目录","PROJECT_PATH_REQUIRED",400)}try{return r.Tp.fromEnvironment(process.env.AGENT_WEB_ROOTS,(0,o.homedir)()).assertDirectory(s.description)}catch(e){throw new n(e instanceof Error?e.message:"项目目录不可用","PROJECT_PATH_INVALID",400)}}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:{permissionMode:"full-access"}})}async setSessionPermissionMode(e,t){if(!(0,r.ue)(t))throw Error(`Invalid permission mode: ${String(t)}`);let s=await this.sessionStore.get(e);if(!s)throw Error(`Session not found: ${e}`);return this.toolPermissionGate.clearSession(e),this.sessionStore.update(e,{metadata:{...s.metadata,permissionMode:t}})}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{}}publishExternal(e,t){this.emit(e,t)}resetExternalStream(e){this.eventCounters.set(e,0),this.recentEvents.set(e,[])}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),n=await this.resolveProjectWorkingDirectory(i?.projectId);await this.sessionStore.addMessage(t,{role:"user",content:e}),this.eventCounters.set(t,0),this.recentEvents.set(t,[]);let a=i?.projectId||this.defaultRemoteToolsProjectId;try{o=await this.getBuilder().withWorkingDirectory(n).withRemoteToolStore(this.remoteToolStore,a).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?.withWorkingDirectory(this.workingDirectory).withRemoteToolStore(this.remoteToolStore,this.defaultRemoteToolsProjectId)}this.activeAgent=o,this.activeRunSessionId=t,this.activeRun=o.run(e,t,s);let l=!1;try{for await(let e of this.activeRun)await this.sessionStore.addEvent(t,e),"error"===e.type?(l=!0,await this.sessionStore.update(t,{status:"failed"})):"done"!==e.type||l||(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){l=!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(){for(let[e,t]of(this.activeAgent?.abort(),this.pendingQuestions))clearTimeout(t.timer),t.reject(Error("Agent aborted")),this.pendingQuestions.delete(e)}}let l=globalThis,u=l.__agentHost??new a;l.__agentHost=u},785:(e,t,s)=>{s.d(t,{kO:()=>i,sr:()=>n});var r=s(9411);let o=function(){let e=process.argv[1];if(e){let t=(0,r.dirname)((0,r.resolve)(e)),s=`${r.sep}node_modules${r.sep}.bin`;return t.endsWith(s)?(0,r.resolve)(t,"..",".."):t}return(0,r.resolve)(process.cwd())}();function i(){return function(e=process.env,t=o){return(0,r.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function n(){return function(e=process.env,t=o){return(0,r.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,i())}}};var t=require("../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[375,703,322],()=>s(5167));module.exports=r})();
@@ -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 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,{kO:()=>i,sr:()=>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 i(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function a(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,i())}},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.kO)())),u=new o.XU((0,s.kO)());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
+ "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:()=>v,patchFetch:()=>f,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>h,staticGenerationAsyncStorage:()=>l});var o={};t.r(o),t.d(o,{POST:()=>p});var n=t(7786),s=t(5042),i=t(2184),u=t(1890),a=t(3710);async function p(e){try{let r=await e.json(),t=await a.ZA.login(r.username||"",r.password||"",(0,a.$U)(e)),o=u.NextResponse.json({user:t.user,csrfToken:t.csrfToken,deviceId:t.deviceId});return o.cookies.set(a.VP,t.authToken,(0,a.Ci)(e,2592e3,!0)),o.cookies.set(a.ki,t.deviceId,(0,a.Ci)(e,31536e3,!1)),o}catch(e){return(0,a.yN)(e)}}let d=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:h}=d,v="/api/web-auth/login/route";function f(){return(0,i.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:l})}},785:(e,r,t)=>{t.d(r,{kO:()=>s,sr:()=>i});var o=t(9411);let n=function(){let e=process.argv[1];if(e){let r=(0,o.dirname)((0,o.resolve)(e)),t=`${o.sep}node_modules${o.sep}.bin`;return r.endsWith(t)?(0,o.resolve)(r,"..",".."):r}return(0,o.resolve)(process.cwd())}();function s(){return function(e=process.env,r=n){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function i(){return function(e=process.env,r=n){return(0,o.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,s())}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>h,VP:()=>s,Xd:()=>d,ZA:()=>u,ap:()=>l,hw:()=>a,ki:()=>i,yN:()=>v});var o=t(1322),n=t(785);let s="customer_agent_session",i="customer_agent_device",u=new o.E0(new o.S3((0,n.kO)())),a=new o.XU((0,n.kO)());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)[s]||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[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){let r=u.authenticateToken(d(e));return u.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(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,{kO:()=>u,sr:()=>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 u(){return function(e=process.env,t=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function a(){return function(e=process.env,t=n){return(0,s.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,u())}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>g,VP:()=>n,Xd:()=>d,ZA:()=>a,ap:()=>l,hw:()=>i,ki:()=>u,yN:()=>h});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.kO)())),i=new o.XU((0,s.kO)());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){let t=a.authenticateToken(d(e));return a.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
+ "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,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>g,staticGenerationAsyncStorage:()=>l});var o={};t.r(o),t.d(o,{POST:()=>p});var n=t(7786),s=t(5042),u=t(2184),i=t(1890),a=t(3710);async function p(e){try{(0,a.ap)(e);let r=(0,a.Xd)(e);a.ZA.logout(r);let t=new i.NextResponse(null,{status:204});return t.cookies.set(a.VP,"",(0,a.Ci)(e,0,!0)),t}catch(e){return(0,a.yN)(e)}}let d=new n.AppRouteRouteModule({definition:{kind:s.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,r,t)=>{t.d(r,{kO:()=>s,sr:()=>u});var o=t(9411);let n=function(){let e=process.argv[1];if(e){let r=(0,o.dirname)((0,o.resolve)(e)),t=`${o.sep}node_modules${o.sep}.bin`;return r.endsWith(t)?(0,o.resolve)(r,"..",".."):r}return(0,o.resolve)(process.cwd())}();function s(){return function(e=process.env,r=n){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function u(){return function(e=process.env,r=n){return(0,o.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,s())}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>g,VP:()=>s,Xd:()=>d,ZA:()=>i,ap:()=>l,hw:()=>a,ki:()=>u,yN:()=>h});var o=t(1322),n=t(785);let s="customer_agent_session",u="customer_agent_device",i=new o.E0(new o.S3((0,n.kO)())),a=new o.XU((0,n.kO)());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)[s]||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[u],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 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(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:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>v,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:v}=d,h="/api/web-auth/revoke-all/route";function m(){return(0,a.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:l})}},785:(e,r,t)=>{t.d(r,{kO:()=>a,sr:()=>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 a(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function i(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,a())}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>v,VP:()=>n,Xd:()=>d,ZA:()=>i,ap:()=>l,hw:()=>u,ki:()=>a,yN:()=>h});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.kO)())),u=new o.XU((0,s.kO)());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 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 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(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:()=>h,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>d,serverHooks:()=>v,staticGenerationAsyncStorage:()=>l});var o={};t.r(o),t.d(o,{POST:()=>p});var n=t(7786),s=t(5042),i=t(2184),u=t(1890),a=t(3710);async function p(e){try{(0,a.ap)(e);let r=(0,a.Xd)(e),t=a.ZA.revokeAll(r,!1),o=u.NextResponse.json({revoked:t});return o.cookies.set(a.VP,"",(0,a.Ci)(e,0,!0)),o}catch(e){return(0,a.yN)(e)}}let d=new n.AppRouteRouteModule({definition:{kind:s.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:v}=d,h="/api/web-auth/revoke-all/route";function m(){return(0,i.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:l})}},785:(e,r,t)=>{t.d(r,{kO:()=>s,sr:()=>i});var o=t(9411);let n=function(){let e=process.argv[1];if(e){let r=(0,o.dirname)((0,o.resolve)(e)),t=`${o.sep}node_modules${o.sep}.bin`;return r.endsWith(t)?(0,o.resolve)(r,"..",".."):r}return(0,o.resolve)(process.cwd())}();function s(){return function(e=process.env,r=n){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function i(){return function(e=process.env,r=n){return(0,o.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,s())}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>v,VP:()=>s,Xd:()=>d,ZA:()=>u,ap:()=>l,hw:()=>a,ki:()=>i,yN:()=>h});var o=t(1322),n=t(785);let s="customer_agent_session",i="customer_agent_device",u=new o.E0(new o.S3((0,n.kO)())),a=new o.XU((0,n.kO)());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)[s]||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[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){let r=u.authenticateToken(d(e));return u.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 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(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:()=>v,patchFetch:()=>g,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),i=r(2184),a=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=a.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,v="/api/web-auth/setup/route";function g(){return(0,i.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},785:(e,t,r)=>{r.d(t,{kO:()=>i,sr:()=>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 i(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function a(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,i())}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>f,VP:()=>o,Xd:()=>d,ZA:()=>a,ap:()=>l,hw:()=>u,ki:()=>i,yN:()=>h});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.kO)())),u=new s.XU((0,n.kO)());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 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
+ "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,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>v,patchFetch:()=>x,requestAsyncStorage:()=>f,routeModule:()=>l,serverHooks:()=>m,staticGenerationAsyncStorage:()=>h});var s={};t.r(s),t.d(s,{POST:()=>c});var n=t(7786),o=t(5042),i=t(2184),u=t(1890),a=t(6005),p=t(1322),d=t(3710);async function c(e){try{let r=await e.json();(function(e){let r=process.env.AGENT_PAIRING_HASH;if(!r)return;let t=Date.parse(process.env.AGENT_PAIRING_EXPIRES_AT||""),s=(0,a.createHash)("sha256").update(e||"").digest("hex");if(!(Number.isFinite(t)&&Date.now()<t&&s.length===r.length&&(0,a.timingSafeEqual)(Buffer.from(s),Buffer.from(r))))throw new p.CT("INVALID_INPUT","配对链接无效或已过期",403)})(r.pairingToken);let t=await d.ZA.setup(r.username||"",r.password||"",(0,d.$U)(e)),s=u.NextResponse.json({user:t.user,csrfToken:t.csrfToken,deviceId:t.deviceId},{status:201});return s.cookies.set(d.VP,t.authToken,(0,d.Ci)(e,2592e3,!0)),s.cookies.set(d.ki,t.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,v="/api/web-auth/setup/route";function x(){return(0,i.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:h})}},785:(e,r,t)=>{t.d(r,{kO:()=>o,sr:()=>i});var s=t(9411);let n=function(){let e=process.argv[1];if(e){let r=(0,s.dirname)((0,s.resolve)(e)),t=`${s.sep}node_modules${s.sep}.bin`;return r.endsWith(t)?(0,s.resolve)(r,"..",".."):r}return(0,s.resolve)(process.cwd())}();function o(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function i(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,o())}},3710:(e,r,t)=>{t.d(r,{$U:()=>c,Ci:()=>f,VP:()=>o,Xd:()=>d,ZA:()=>u,ap:()=>l,hw:()=>a,ki:()=>i,yN:()=>h});var s=t(1322),n=t(785);let o="customer_agent_session",i="customer_agent_device",u=new s.E0(new s.S3((0,n.kO)())),a=new s.XU((0,n.kO)());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)[o]||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[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){let r=u.authenticateToken(d(e));return u.validateCsrf(r,e.headers.get("x-csrf-token")),r}function f(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 s.CT?e:new s.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),s=r.X(0,[375,703,322],()=>t(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:()=>m,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 m(){return(0,i.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:l})}},785:(e,t,r)=>{r.d(t,{kO:()=>i,sr:()=>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 i(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function a(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,i())}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>h,VP:()=>o,Xd:()=>d,ZA:()=>a,ap:()=>l,hw:()=>u,ki:()=>i,yN:()=>f});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.kO)())),u=new s.XU((0,n.kO)());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 f(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:()=>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),u=r(1890),a=r(3710);async function p(e){if(a.ZA.needsSetup())return u.NextResponse.json({needsSetup:!0,authenticated:!1});let t=(0,a.Xd)(e);if(!t)return u.NextResponse.json({needsSetup:!1,authenticated:!1});try{let r=a.ZA.refresh(t),s=u.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(a.VP,t,(0,a.Ci)(e,2592e3,!0)),s.cookies.set(a.ki,r.principal.deviceId,(0,a.Ci)(e,31536e3,!1)),s}catch(r){let t=u.NextResponse.json({needsSetup:!1,authenticated:!1});return t.cookies.set(a.VP,"",(0,a.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,{kO:()=>o,sr:()=>i});var s=r(9411);let n=function(){let e=process.argv[1];if(e){let t=(0,s.dirname)((0,s.resolve)(e)),r=`${s.sep}node_modules${s.sep}.bin`;return t.endsWith(r)?(0,s.resolve)(t,"..",".."):t}return(0,s.resolve)(process.cwd())}();function o(){return function(e=process.env,t=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function i(){return function(e=process.env,t=n){return(0,s.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,o())}},3710:(e,t,r)=>{r.d(t,{$U:()=>c,Ci:()=>h,VP:()=>o,Xd:()=>d,ZA:()=>u,ap:()=>l,hw:()=>a,ki:()=>i,yN:()=>f});var s=r(1322),n=r(785);let o="customer_agent_session",i="customer_agent_device",u=new s.E0(new s.S3((0,n.kO)())),a=new s.XU((0,n.kO)());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=u.authenticateToken(d(e));return u.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 f(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})();
@@ -0,0 +1 @@
1
+ {"needsSetup":true,"authenticated":false}
@@ -0,0 +1 @@
1
+ {"status":200,"headers":{"content-type":"application/json","x-next-cache-tags":"_N_T_/layout,_N_T_/api/layout,_N_T_/api/web-auth/layout,_N_T_/api/web-auth/status/layout,_N_T_/api/web-auth/status/route,_N_T_/api/web-auth/status"}}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=285,e.ids=[285],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")},3870:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>x,patchFetch:()=>v,requestAsyncStorage:()=>l,routeModule:()=>d,serverHooks:()=>f,staticGenerationAsyncStorage:()=>m});var o={};t.r(o),t.d(o,{GET:()=>p,dynamic:()=>c});var s=t(7786),n=t(5042),i=t(2184),a=t(1890),u=t(2110);let c="force-dynamic";async function p(){let e=(0,u.Qx)(),{userId:r,username:t,deviceId:o}=e.principal;return a.NextResponse.json({user:{id:r,username:t},deviceId:o,wsNonce:e.nonce,wsNonceExpiresAt:e.expiresAt,tabs:u.hw.listTabs(r),preferences:u.hw.getPreferences(r),deviceState:u.hw.getDeviceState(r,o)})}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-console/bootstrap/route",pathname:"/api/web-console/bootstrap",filename:"route",bundlePath:"app/api/web-console/bootstrap/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-console/bootstrap/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:m,serverHooks:f}=d,x="/api/web-console/bootstrap/route";function v(){return(0,i.patchFetch)({serverHooks:f,staticGenerationAsyncStorage:m})}},785:(e,r,t)=>{t.d(r,{kO:()=>i,sr:()=>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 i(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function a(){return function(e=process.env,r=n){return(0,s.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,i())}},2110:(e,r,t)=>{t.d(r,{Qx:()=>c,hw:()=>i.hw,nQ:()=>u});var o=t(6005),s=t(1322),n=t(785),i=t(3710);let a=new s.T3((0,n.kO)());function u(){return{userId:a.getOrCreatePrincipal().userId,username:"local",deviceId:"browser"}}function c(){let e=Date.now(),r=(0,o.randomBytes)(24).toString("base64url"),t=e+6e4,s=u();return a.issueWsNonce(r,s.userId,t,e),{nonce:r,expiresAt:t,principal:s}}},3710:(e,r,t)=>{t.d(r,{$U:()=>d,Ci:()=>m,VP:()=>n,Xd:()=>p,ZA:()=>a,ap:()=>l,hw:()=>u,ki:()=>i,yN:()=>f});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.kO)())),u=new o.XU((0,s.kO)());function c(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 c(e)[n]||null}function d(e){let r=c(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 m(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 f(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(3870));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=285,e.ids=[285],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")},3870:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>x,patchFetch:()=>v,requestAsyncStorage:()=>l,routeModule:()=>d,serverHooks:()=>m,staticGenerationAsyncStorage:()=>f});var o={};t.r(o),t.d(o,{GET:()=>c,dynamic:()=>p});var s=t(7786),n=t(5042),i=t(2184),a=t(1890),u=t(2110);let p="force-dynamic";async function c(){let e=(0,u.Qx)(),{userId:r,username:t,deviceId:o}=e.principal;return a.NextResponse.json({user:{id:r,username:t},deviceId:o,wsNonce:e.nonce,wsNonceExpiresAt:e.expiresAt,tabs:u.hw.listTabs(r),preferences:u.hw.getPreferences(r),deviceState:u.hw.getDeviceState(r,o)})}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/web-console/bootstrap/route",pathname:"/api/web-console/bootstrap",filename:"route",bundlePath:"app/api/web-console/bootstrap/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-console/bootstrap/route.ts",nextConfigOutput:"standalone",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:f,serverHooks:m}=d,x="/api/web-console/bootstrap/route";function v(){return(0,i.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:f})}},785:(e,r,t)=>{t.d(r,{kO:()=>n,sr:()=>i});var o=t(9411);let s=function(){let e=process.argv[1];if(e){let r=(0,o.dirname)((0,o.resolve)(e)),t=`${o.sep}node_modules${o.sep}.bin`;return r.endsWith(t)?(0,o.resolve)(r,"..",".."):r}return(0,o.resolve)(process.cwd())}();function n(){return function(e=process.env,r=s){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||r)}()}function i(){return function(e=process.env,r=s){return(0,o.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||r)}(process.env,n())}},2110:(e,r,t)=>{t.d(r,{Qx:()=>p,hw:()=>i.hw,nQ:()=>u});var o=t(6005),s=t(1322),n=t(785),i=t(3710);let a=new s.T3((0,n.kO)());function u(){return{userId:a.getOrCreatePrincipal().userId,username:"local",deviceId:"browser"}}function p(){let e=Date.now(),r=(0,o.randomBytes)(24).toString("base64url"),t=e+6e4,s=u();return a.issueWsNonce(r,s.userId,t,e),{nonce:r,expiresAt:t,principal:s}}},3710:(e,r,t)=>{t.d(r,{$U:()=>d,Ci:()=>f,VP:()=>n,Xd:()=>c,ZA:()=>a,ap:()=>l,hw:()=>u,ki:()=>i,yN:()=>m});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.kO)())),u=new o.XU((0,s.kO)());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 c(e){return p(e)[n]||null}function d(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[i],deviceName:e.headers.get("x-device-name")||""}}function l(e){let r=a.authenticateToken(c(e));return a.validateCsrf(r,e.headers.get("x-csrf-token")),r}function f(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(3870));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=107,e.ids=[107],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")},8467:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>h,requestAsyncStorage:()=>m,routeModule:()=>v,serverHooks:()=>g,staticGenerationAsyncStorage:()=>f});var n={};r.r(n),r.d(n,{GET:()=>l,PUT:()=>p,dynamic:()=>d});var o=r(7786),s=r(5042),a=r(2184),i=r(1890),u=r(2110);let d="force-dynamic",c=(e,t)=>({userId:e,deviceId:t,activeTerminalId:null,drawerOpen:!1,drawerTab:"files",fileTreeRoot:null,fileTreeFollowMode:!0,expandedPaths:[],selectedFile:null,terminalScroll:{},updatedAt:new Date().toISOString()});async function l(){let{userId:e,deviceId:t}=(0,u.nQ)();return i.NextResponse.json({deviceState:u.hw.getDeviceState(e,t)??c(e,t)})}async function p(e){let{userId:t,deviceId:r}=(0,u.nQ)(),n=u.hw.getDeviceState(t,r)??c(t,r),o=await e.json(),s={...n,...o,userId:t,deviceId:r,updatedAt:new Date().toISOString()};return u.hw.saveDeviceState(s),i.NextResponse.json({deviceState:s})}let v=new o.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/web-console/device-state/route",pathname:"/api/web-console/device-state",filename:"route",bundlePath:"app/api/web-console/device-state/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-console/device-state/route.ts",nextConfigOutput:"standalone",userland:n}),{requestAsyncStorage:m,staticGenerationAsyncStorage:f,serverHooks:g}=v,x="/api/web-console/device-state/route";function h(){return(0,a.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:f})}},785:(e,t,r)=>{r.d(t,{kO:()=>a,sr:()=>i});var n=r(1041),o=r(9411);let s=(0,o.resolve)((0,o.dirname)((0,n.fileURLToPath)("file:///Users/caoqu/team-agent/customer-agent/packages/server/lib/server-data-dir.ts")),"..");function a(){return function(e=process.env,t=s){return(0,o.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function i(){return function(e=process.env,t=s){return(0,o.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,a())}},2110:(e,t,r)=>{r.d(t,{Qx:()=>d,hw:()=>a.hw,nQ:()=>u});var n=r(6005),o=r(1322),s=r(785),a=r(3710);let i=new o.T3((0,s.kO)());function u(){return{userId:i.getOrCreatePrincipal().userId,username:"local",deviceId:"browser"}}function d(){let e=Date.now(),t=(0,n.randomBytes)(24).toString("base64url"),r=e+6e4,o=u();return i.issueWsNonce(t,o.userId,r,e),{nonce:t,expiresAt:r,principal:o}}},3710:(e,t,r)=>{r.d(t,{$U:()=>l,Ci:()=>v,VP:()=>s,Xd:()=>c,ZA:()=>i,ap:()=>p,hw:()=>u,ki:()=>a,yN:()=>m});var n=r(1322),o=r(785);let s="customer_agent_session",a="customer_agent_device",i=new n.E0(new n.S3((0,o.kO)())),u=new n.XU((0,o.kO)());function d(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 c(e){return d(e)[s]||null}function l(e){let t=d(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 p(e){let t=i.authenticateToken(c(e));return i.validateCsrf(t,e.headers.get("x-csrf-token")),t}function v(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 n.CT?e:new n.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),n=t.X(0,[375,703,322],()=>r(8467));module.exports=n})();
1
+ "use strict";(()=>{var e={};e.id=107,e.ids=[107],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")},8467:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>w,patchFetch:()=>g,requestAsyncStorage:()=>f,routeModule:()=>v,serverHooks:()=>x,staticGenerationAsyncStorage:()=>m});var n={};r.r(n),r.d(n,{GET:()=>l,PUT:()=>p,dynamic:()=>d});var o=r(7786),s=r(5042),i=r(2184),a=r(1890),u=r(2110);let d="force-dynamic",c=(e,t)=>({userId:e,deviceId:t,activeTerminalId:null,drawerOpen:!1,drawerTab:"files",fileTreeRoot:null,fileTreeFollowMode:!0,expandedPaths:[],selectedFile:null,terminalScroll:{},updatedAt:new Date().toISOString()});async function l(){let{userId:e,deviceId:t}=(0,u.nQ)();return a.NextResponse.json({deviceState:u.hw.getDeviceState(e,t)??c(e,t)})}async function p(e){let{userId:t,deviceId:r}=(0,u.nQ)(),n=u.hw.getDeviceState(t,r)??c(t,r),o=await e.json(),s={...n,...o,userId:t,deviceId:r,updatedAt:new Date().toISOString()};return u.hw.saveDeviceState(s),a.NextResponse.json({deviceState:s})}let v=new o.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/web-console/device-state/route",pathname:"/api/web-console/device-state",filename:"route",bundlePath:"app/api/web-console/device-state/route"},resolvedPagePath:"/Users/caoqu/team-agent/customer-agent/packages/server/app/api/web-console/device-state/route.ts",nextConfigOutput:"standalone",userland:n}),{requestAsyncStorage:f,staticGenerationAsyncStorage:m,serverHooks:x}=v,w="/api/web-console/device-state/route";function g(){return(0,i.patchFetch)({serverHooks:x,staticGenerationAsyncStorage:m})}},785:(e,t,r)=>{r.d(t,{kO:()=>s,sr:()=>i});var n=r(9411);let o=function(){let e=process.argv[1];if(e){let t=(0,n.dirname)((0,n.resolve)(e)),r=`${n.sep}node_modules${n.sep}.bin`;return t.endsWith(r)?(0,n.resolve)(t,"..",".."):t}return(0,n.resolve)(process.cwd())}();function s(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_DATA_DIR?.trim()||t)}()}function i(){return function(e=process.env,t=o){return(0,n.resolve)(e.AGENT_WORKING_DIRECTORY?.trim()||t)}(process.env,s())}},2110:(e,t,r)=>{r.d(t,{Qx:()=>d,hw:()=>i.hw,nQ:()=>u});var n=r(6005),o=r(1322),s=r(785),i=r(3710);let a=new o.T3((0,s.kO)());function u(){return{userId:a.getOrCreatePrincipal().userId,username:"local",deviceId:"browser"}}function d(){let e=Date.now(),t=(0,n.randomBytes)(24).toString("base64url"),r=e+6e4,o=u();return a.issueWsNonce(t,o.userId,r,e),{nonce:t,expiresAt:r,principal:o}}},3710:(e,t,r)=>{r.d(t,{$U:()=>l,Ci:()=>v,VP:()=>s,Xd:()=>c,ZA:()=>a,ap:()=>p,hw:()=>u,ki:()=>i,yN:()=>f});var n=r(1322),o=r(785);let s="customer_agent_session",i="customer_agent_device",a=new n.E0(new n.S3((0,o.kO)())),u=new n.XU((0,o.kO)());function d(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 c(e){return d(e)[s]||null}function l(e){let t=d(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 p(e){let t=a.authenticateToken(c(e));return a.validateCsrf(t,e.headers.get("x-csrf-token")),t}function v(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 f(e){let t=e instanceof n.CT?e:new n.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),n=t.X(0,[375,703,322],()=>r(8467));module.exports=n})();