@seqyuan/annodex 0.1.30 → 0.1.31

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 (150) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -6
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +2 -2
  6. package/.next/required-server-files.json +2 -2
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/server/app/api/internal/runtime/route.js +1 -1
  24. package/.next/server/app/api/version/route.js +1 -1
  25. package/.next/server/app/docs/architecture.html +1 -1
  26. package/.next/server/app/docs/architecture.rsc +1 -1
  27. package/.next/server/app/docs/architecture.segments/_full.segment.rsc +1 -1
  28. package/.next/server/app/docs/architecture.segments/_head.segment.rsc +1 -1
  29. package/.next/server/app/docs/architecture.segments/_index.segment.rsc +1 -1
  30. package/.next/server/app/docs/architecture.segments/_tree.segment.rsc +1 -1
  31. package/.next/server/app/docs/architecture.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  32. package/.next/server/app/docs/architecture.segments/docs/$oc$slug.segment.rsc +1 -1
  33. package/.next/server/app/docs/architecture.segments/docs.segment.rsc +1 -1
  34. package/.next/server/app/docs/configuration.html +1 -1
  35. package/.next/server/app/docs/configuration.rsc +1 -1
  36. package/.next/server/app/docs/configuration.segments/_full.segment.rsc +1 -1
  37. package/.next/server/app/docs/configuration.segments/_head.segment.rsc +1 -1
  38. package/.next/server/app/docs/configuration.segments/_index.segment.rsc +1 -1
  39. package/.next/server/app/docs/configuration.segments/_tree.segment.rsc +1 -1
  40. package/.next/server/app/docs/configuration.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  41. package/.next/server/app/docs/configuration.segments/docs/$oc$slug.segment.rsc +1 -1
  42. package/.next/server/app/docs/configuration.segments/docs.segment.rsc +1 -1
  43. package/.next/server/app/docs/file-and-report-viewing.html +1 -1
  44. package/.next/server/app/docs/file-and-report-viewing.rsc +1 -1
  45. package/.next/server/app/docs/file-and-report-viewing.segments/_full.segment.rsc +1 -1
  46. package/.next/server/app/docs/file-and-report-viewing.segments/_head.segment.rsc +1 -1
  47. package/.next/server/app/docs/file-and-report-viewing.segments/_index.segment.rsc +1 -1
  48. package/.next/server/app/docs/file-and-report-viewing.segments/_tree.segment.rsc +1 -1
  49. package/.next/server/app/docs/file-and-report-viewing.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  50. package/.next/server/app/docs/file-and-report-viewing.segments/docs/$oc$slug.segment.rsc +1 -1
  51. package/.next/server/app/docs/file-and-report-viewing.segments/docs.segment.rsc +1 -1
  52. package/.next/server/app/docs/installation-and-deployment.html +1 -1
  53. package/.next/server/app/docs/installation-and-deployment.rsc +1 -1
  54. package/.next/server/app/docs/installation-and-deployment.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/docs/installation-and-deployment.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/docs/installation-and-deployment.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/docs/installation-and-deployment.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/docs/installation-and-deployment.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/docs/installation-and-deployment.segments/docs/$oc$slug.segment.rsc +1 -1
  60. package/.next/server/app/docs/installation-and-deployment.segments/docs.segment.rsc +1 -1
  61. package/.next/server/app/docs/models-and-tools.html +1 -1
  62. package/.next/server/app/docs/models-and-tools.rsc +1 -1
  63. package/.next/server/app/docs/models-and-tools.segments/_full.segment.rsc +1 -1
  64. package/.next/server/app/docs/models-and-tools.segments/_head.segment.rsc +1 -1
  65. package/.next/server/app/docs/models-and-tools.segments/_index.segment.rsc +1 -1
  66. package/.next/server/app/docs/models-and-tools.segments/_tree.segment.rsc +1 -1
  67. package/.next/server/app/docs/models-and-tools.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  68. package/.next/server/app/docs/models-and-tools.segments/docs/$oc$slug.segment.rsc +1 -1
  69. package/.next/server/app/docs/models-and-tools.segments/docs.segment.rsc +1 -1
  70. package/.next/server/app/docs/quick-start.html +1 -1
  71. package/.next/server/app/docs/quick-start.rsc +1 -1
  72. package/.next/server/app/docs/quick-start.segments/_full.segment.rsc +1 -1
  73. package/.next/server/app/docs/quick-start.segments/_head.segment.rsc +1 -1
  74. package/.next/server/app/docs/quick-start.segments/_index.segment.rsc +1 -1
  75. package/.next/server/app/docs/quick-start.segments/_tree.segment.rsc +1 -1
  76. package/.next/server/app/docs/quick-start.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  77. package/.next/server/app/docs/quick-start.segments/docs/$oc$slug.segment.rsc +1 -1
  78. package/.next/server/app/docs/quick-start.segments/docs.segment.rsc +1 -1
  79. package/.next/server/app/docs/runtime-and-sse.html +1 -1
  80. package/.next/server/app/docs/runtime-and-sse.rsc +1 -1
  81. package/.next/server/app/docs/runtime-and-sse.segments/_full.segment.rsc +1 -1
  82. package/.next/server/app/docs/runtime-and-sse.segments/_head.segment.rsc +1 -1
  83. package/.next/server/app/docs/runtime-and-sse.segments/_index.segment.rsc +1 -1
  84. package/.next/server/app/docs/runtime-and-sse.segments/_tree.segment.rsc +1 -1
  85. package/.next/server/app/docs/runtime-and-sse.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  86. package/.next/server/app/docs/runtime-and-sse.segments/docs/$oc$slug.segment.rsc +1 -1
  87. package/.next/server/app/docs/runtime-and-sse.segments/docs.segment.rsc +1 -1
  88. package/.next/server/app/docs/sessions-and-projects.html +1 -1
  89. package/.next/server/app/docs/sessions-and-projects.rsc +1 -1
  90. package/.next/server/app/docs/sessions-and-projects.segments/_full.segment.rsc +1 -1
  91. package/.next/server/app/docs/sessions-and-projects.segments/_head.segment.rsc +1 -1
  92. package/.next/server/app/docs/sessions-and-projects.segments/_index.segment.rsc +1 -1
  93. package/.next/server/app/docs/sessions-and-projects.segments/_tree.segment.rsc +1 -1
  94. package/.next/server/app/docs/sessions-and-projects.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  95. package/.next/server/app/docs/sessions-and-projects.segments/docs/$oc$slug.segment.rsc +1 -1
  96. package/.next/server/app/docs/sessions-and-projects.segments/docs.segment.rsc +1 -1
  97. package/.next/server/app/docs/workspace.html +1 -1
  98. package/.next/server/app/docs/workspace.rsc +1 -1
  99. package/.next/server/app/docs/workspace.segments/_full.segment.rsc +1 -1
  100. package/.next/server/app/docs/workspace.segments/_head.segment.rsc +1 -1
  101. package/.next/server/app/docs/workspace.segments/_index.segment.rsc +1 -1
  102. package/.next/server/app/docs/workspace.segments/_tree.segment.rsc +1 -1
  103. package/.next/server/app/docs/workspace.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  104. package/.next/server/app/docs/workspace.segments/docs/$oc$slug.segment.rsc +1 -1
  105. package/.next/server/app/docs/workspace.segments/docs.segment.rsc +1 -1
  106. package/.next/server/app/docs.html +1 -1
  107. package/.next/server/app/docs.rsc +1 -1
  108. package/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  109. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  110. package/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  111. package/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  112. package/.next/server/app/docs.segments/docs/$oc$slug/__PAGE__.segment.rsc +1 -1
  113. package/.next/server/app/docs.segments/docs/$oc$slug.segment.rsc +1 -1
  114. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  115. package/.next/server/app/index.html +1 -1
  116. package/.next/server/app/index.rsc +1 -1
  117. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  118. package/.next/server/app/index.segments/_full.segment.rsc +1 -1
  119. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  120. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  121. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  122. package/.next/server/app/login.html +1 -1
  123. package/.next/server/app/login.rsc +1 -1
  124. package/.next/server/app/login.segments/_full.segment.rsc +1 -1
  125. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  126. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  127. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  128. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  129. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  130. package/.next/server/app/workspace/page.js +3 -3
  131. package/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  132. package/.next/server/app/workspace.html +1 -1
  133. package/.next/server/app/workspace.rsc +2 -2
  134. package/.next/server/app/workspace.segments/_full.segment.rsc +2 -2
  135. package/.next/server/app/workspace.segments/_head.segment.rsc +1 -1
  136. package/.next/server/app/workspace.segments/_index.segment.rsc +1 -1
  137. package/.next/server/app/workspace.segments/_tree.segment.rsc +1 -1
  138. package/.next/server/app/workspace.segments/workspace/__PAGE__.segment.rsc +2 -2
  139. package/.next/server/app/workspace.segments/workspace.segment.rsc +1 -1
  140. package/.next/server/app-paths-manifest.json +6 -6
  141. package/.next/server/chunks/402.js +1 -1
  142. package/.next/server/middleware-build-manifest.js +1 -1
  143. package/.next/server/pages/404.html +1 -1
  144. package/.next/server/pages/500.html +1 -1
  145. package/.next/server/server-reference-manifest.json +1 -1
  146. package/.next/static/chunks/app/workspace/{page-af7e4803e0815c0e.js → page-696a330100ac0387.js} +3 -3
  147. package/README.md +1 -1
  148. package/package.json +1 -1
  149. /package/.next/static/{oIqDpdOWwl7oIU6o8NnNp → c12uc5Ebna-CqP4_lL37X}/_buildManifest.js +0 -0
  150. /package/.next/static/{oIqDpdOWwl7oIU6o8NnNp → c12uc5Ebna-CqP4_lL37X}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (()=>{var a={};a.id=2922,a.ids=[2922],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},21820:a=>{"use strict";a.exports=require("os")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},65833:(a,b,c)=>{"use strict";c.d(b,{AQ:()=>f,C3:()=>d,JD:()=>e});let d="annodex",e="@seqyuan/annodex",f="annodex update"},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},90470:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>N,patchFetch:()=>M,routeModule:()=>I,serverHooks:()=>L,workAsyncStorage:()=>J,workUnitAsyncStorage:()=>K});var d={};c.r(d),c.d(d,{GET:()=>H,dynamic:()=>D});var e=c(19225),f=c(84006),g=c(8317),h=c(99373),i=c(34775),j=c(24235),k=c(261),l=c(54365),m=c(90771),n=c(73461),o=c(67798),p=c(92280),q=c(62018),r=c(45696),s=c(47929),t=c(86439),u=c(37527),v=c(23211),w=c(65833),x=c(29021),y=c(33873),z=c(21820);function A(a){return"string"==typeof a&&a.length>0?a:null}function B(a){return Number.isInteger(a)&&Number(a)>0?Number(a):null}function C(a){if(!a)return!1;try{return process.kill(a,0),!0}catch{return!1}}let D="force-dynamic",E="0.1.30",F=null;async function G(){if(F&&F.expiresAt>Date.now())return F.value;let a=new AbortController,b=setTimeout(()=>a.abort(),3500);try{let b=await fetch(`https://registry.npmjs.org/${encodeURIComponent(w.JD)}/latest`,{cache:"no-store",signal:a.signal});if(!b.ok)return F={value:null,expiresAt:Date.now()+3e5},null;let c=await b.json(),d="string"==typeof c.version?c.version:null;return F={value:d,expiresAt:Date.now()+3e5},d}catch{return F={value:null,expiresAt:Date.now()+6e4},null}finally{clearTimeout(b)}}async function H(){let a=await G(),b={current:E,latest:a,updateAvailable:!!(a&&a!==E),updateCommand:w.AQ,runtime:function(){let a=function(){let a,b=(a=function(...a){for(let b of a){let a=process.env[b];if(void 0!==a)return a}}("ANNODEX_CONFIG_DIR","ANNOVIBE_CONFIG_DIR")??(0,y.join)((0,z.homedir)(),".config","annodex"),[(0,y.join)(a,"annodex.json"),(0,y.join)(a,"annovibe.json"),(0,y.join)(a,"pidex.json")]).find(a=>(0,x.existsSync)(a));if(!b)return null;try{return JSON.parse((0,x.readFileSync)(b,"utf8"))}catch{return null}}();if(!a)return null;let b=B(a.supervisorPid),c=B(a.nextPid),d=C(b),e=C(c),f=d||e;return{running:f,status:d?"running":e?"orphaned":"stopped",version:A(a.version),url:A(a.url),port:A(a.port),hostname:A(a.hostname),supervisorPid:d?b:null,nextPid:e?c:null,startedAt:f?A(a.startedAt):null,readyAt:f?A(a.readyAt):null,restartPending:f&&!!a.restartPending,installedVersion:f?A(a.installedVersion):null,restartDetectedAt:f?A(a.restartDetectedAt):null,restartStartedAt:f?A(a.restartStartedAt):null,updatedAt:A(a.updatedAt)}}()};return v.NextResponse.json(b)}let I=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/version/route",pathname:"/api/version",filename:"route",bundlePath:"app/api/version/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/home/runner/work/annodex/annodex/app/api/version/route.ts",nextConfigOutput:"",userland:d}),{workAsyncStorage:J,workUnitAsyncStorage:K,serverHooks:L}=I;function M(){return(0,g.patchFetch)({workAsyncStorage:J,workUnitAsyncStorage:K})}async function N(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),I.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/version/route";"/index"===d&&(d="/");let e=await I.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,params:v,nextConfig:w,parsedUrl:x,isDraftMode:y,prerenderManifest:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D,clientReferenceManifest:E,serverActionsManifest:F}=e,G=(0,k.normalizeAppPath)(d),H=!!(z.dynamicRoutes[G]||z.routes[D]),J=async()=>((null==A?void 0:A.render404)?await A.render404(a,b,x,!1):b.end("This page could not be found"),null);if(H&&!y){let a=!!z.routes[D],b=z.dynamicRoutes[G];if(b&&!1===b.fallback&&!a){if(w.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!H||I.isDev||y||(K="/index"===(K=D)?"/":K);let L=!0===I.isDev||!H,M=H&&!L;F&&E&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:E,serverActionsManifest:F});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==A?void 0:A.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await I.getIncrementalCache(a,w,z,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let T={params:v,previewProps:z.preview,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts},cacheComponents:!!w.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:w.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>I.onRequestError(a,b,d,e,A)},sharedContext:{buildId:g}},U=new l.NodeNextRequest(a),V=new l.NodeNextResponse(b),W=m.NextRequestAdapter.fromNodeNextRequest(U,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>I.handle(W,T).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=T.renderOpts.fetchMetrics;let h=T.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=T.renderOpts.collectedTags;if(!H)return await (0,p.I)(U,V,d,T.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==T.renderOpts.collectedRevalidate&&!(T.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&T.renderOpts.collectedRevalidate,e=void 0===T.renderOpts.collectedExpire||T.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:T.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await I.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:B})},!1,A),b}},k=await I.handleResponse({req:a,nextConfig:w,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!H)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",B?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),y&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&H||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(U,V,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await I.onRequestError(a,b,{routerKind:"App Router",routePath:G,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:B})},!1,A),H)throw b;return await (0,p.I)(U,V,new Response(null,{status:500})),null}}},96487:()=>{}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[4741,1813],()=>b(b.s=90470));module.exports=c})();
1
+ (()=>{var a={};a.id=2922,a.ids=[2922],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},21820:a=>{"use strict";a.exports=require("os")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},65833:(a,b,c)=>{"use strict";c.d(b,{AQ:()=>f,C3:()=>d,JD:()=>e});let d="annodex",e="@seqyuan/annodex",f="annodex update"},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},90470:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>N,patchFetch:()=>M,routeModule:()=>I,serverHooks:()=>L,workAsyncStorage:()=>J,workUnitAsyncStorage:()=>K});var d={};c.r(d),c.d(d,{GET:()=>H,dynamic:()=>D});var e=c(19225),f=c(84006),g=c(8317),h=c(99373),i=c(34775),j=c(24235),k=c(261),l=c(54365),m=c(90771),n=c(73461),o=c(67798),p=c(92280),q=c(62018),r=c(45696),s=c(47929),t=c(86439),u=c(37527),v=c(23211),w=c(65833),x=c(29021),y=c(33873),z=c(21820);function A(a){return"string"==typeof a&&a.length>0?a:null}function B(a){return Number.isInteger(a)&&Number(a)>0?Number(a):null}function C(a){if(!a)return!1;try{return process.kill(a,0),!0}catch{return!1}}let D="force-dynamic",E="0.1.31",F=null;async function G(){if(F&&F.expiresAt>Date.now())return F.value;let a=new AbortController,b=setTimeout(()=>a.abort(),3500);try{let b=await fetch(`https://registry.npmjs.org/${encodeURIComponent(w.JD)}/latest`,{cache:"no-store",signal:a.signal});if(!b.ok)return F={value:null,expiresAt:Date.now()+3e5},null;let c=await b.json(),d="string"==typeof c.version?c.version:null;return F={value:d,expiresAt:Date.now()+3e5},d}catch{return F={value:null,expiresAt:Date.now()+6e4},null}finally{clearTimeout(b)}}async function H(){let a=await G(),b={current:E,latest:a,updateAvailable:!!(a&&a!==E),updateCommand:w.AQ,runtime:function(){let a=function(){let a,b=(a=function(...a){for(let b of a){let a=process.env[b];if(void 0!==a)return a}}("ANNODEX_CONFIG_DIR","ANNOVIBE_CONFIG_DIR")??(0,y.join)((0,z.homedir)(),".config","annodex"),[(0,y.join)(a,"annodex.json"),(0,y.join)(a,"annovibe.json"),(0,y.join)(a,"pidex.json")]).find(a=>(0,x.existsSync)(a));if(!b)return null;try{return JSON.parse((0,x.readFileSync)(b,"utf8"))}catch{return null}}();if(!a)return null;let b=B(a.supervisorPid),c=B(a.nextPid),d=C(b),e=C(c),f=d||e;return{running:f,status:d?"running":e?"orphaned":"stopped",version:A(a.version),url:A(a.url),port:A(a.port),hostname:A(a.hostname),supervisorPid:d?b:null,nextPid:e?c:null,startedAt:f?A(a.startedAt):null,readyAt:f?A(a.readyAt):null,restartPending:f&&!!a.restartPending,installedVersion:f?A(a.installedVersion):null,restartDetectedAt:f?A(a.restartDetectedAt):null,restartStartedAt:f?A(a.restartStartedAt):null,updatedAt:A(a.updatedAt)}}()};return v.NextResponse.json(b)}let I=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/version/route",pathname:"/api/version",filename:"route",bundlePath:"app/api/version/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/home/runner/work/annodex/annodex/app/api/version/route.ts",nextConfigOutput:"",userland:d}),{workAsyncStorage:J,workUnitAsyncStorage:K,serverHooks:L}=I;function M(){return(0,g.patchFetch)({workAsyncStorage:J,workUnitAsyncStorage:K})}async function N(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),I.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/version/route";"/index"===d&&(d="/");let e=await I.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,params:v,nextConfig:w,parsedUrl:x,isDraftMode:y,prerenderManifest:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D,clientReferenceManifest:E,serverActionsManifest:F}=e,G=(0,k.normalizeAppPath)(d),H=!!(z.dynamicRoutes[G]||z.routes[D]),J=async()=>((null==A?void 0:A.render404)?await A.render404(a,b,x,!1):b.end("This page could not be found"),null);if(H&&!y){let a=!!z.routes[D],b=z.dynamicRoutes[G];if(b&&!1===b.fallback&&!a){if(w.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!H||I.isDev||y||(K="/index"===(K=D)?"/":K);let L=!0===I.isDev||!H,M=H&&!L;F&&E&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:E,serverActionsManifest:F});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==A?void 0:A.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await I.getIncrementalCache(a,w,z,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let T={params:v,previewProps:z.preview,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts},cacheComponents:!!w.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:w.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>I.onRequestError(a,b,d,e,A)},sharedContext:{buildId:g}},U=new l.NodeNextRequest(a),V=new l.NodeNextResponse(b),W=m.NextRequestAdapter.fromNodeNextRequest(U,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>I.handle(W,T).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=T.renderOpts.fetchMetrics;let h=T.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=T.renderOpts.collectedTags;if(!H)return await (0,p.I)(U,V,d,T.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==T.renderOpts.collectedRevalidate&&!(T.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&T.renderOpts.collectedRevalidate,e=void 0===T.renderOpts.collectedExpire||T.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:T.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await I.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:B})},!1,A),b}},k=await I.handleResponse({req:a,nextConfig:w,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!H)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",B?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),y&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&H||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(U,V,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await I.onRequestError(a,b,{routerKind:"App Router",routePath:G,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:B})},!1,A),H)throw b;return await (0,p.I)(U,V,new Response(null,{status:500})),null}}},96487:()=>{}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[4741,1813],()=>b(b.s=90470));module.exports=c})();
@@ -23,4 +23,4 @@
23
23
  <li>让运行状态对用户可见</li>
24
24
  <li>让文件查看与聊天协作发生在同一界面</li>
25
25
  <li>保持对多 provider / model 配置的兼容</li>
26
- </ul></div><div class="flex flex-row flex-wrap items-center justify-between gap-4 empty:hidden"></div><div class="@container grid gap-4 grid-cols-2"><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full" href="/docs/configuration"><div class="inline-flex items-center gap-1.5 font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg><p>Configuration</p></div><p class="text-fd-muted-foreground truncate">annodex 的配置位置与主要配置对象。</p></a><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full text-end" href="/docs/workspace"><div class="inline-flex items-center gap-1.5 font-medium flex-row-reverse"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg><p>Workspace</p></div><p class="text-fd-muted-foreground truncate">annodex 工作台的主要界面组成。</p></a></div></article><div id="nd-toc" class="sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 xl:layout:[--fd-toc-width:268px] max-xl:hidden"><h3 id="toc-title" class="inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-text-align-start size-4" aria-hidden="true"><path d="M21 5H3"></path><path d="M15 12H3"></path><path d="M17 19H3"></path></svg>On this page</h3><div class="relative min-h-0 text-sm ms-px overflow-auto [scrollbar-width:none] mask-[linear-gradient(to_bottom,transparent,white_16px,white_calc(100%-16px),transparent)] py-3"><div class="relative"><div class="flex flex-col border-s border-fd-foreground/10"><a data-active="false" href="#核心结构" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">核心结构</a><a data-active="false" href="#数据流" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">数据流</a><a data-active="false" href="#关键模块" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">关键模块</a><a data-active="false" href="#设计重点" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">设计重点</a></div></div></div></div><!--$--><!--/$--></div><script src="/_next/static/chunks/webpack-ced9e639bb94bd30.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[67504,[\"8500\",\"static/chunks/8500-f62a38ff68ab7f42.js\",\"5122\",\"static/chunks/5122-6e0d29bd15f079e1.js\",\"7177\",\"static/chunks/app/layout-11cc1f48ff425fd0.js\"],\"RootProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[67197,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4499\",\"static/chunks/app/docs/layout-4809bb9dd4b49bff.js\"],\"LayoutBody\"]\n6:I[99535,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"default\"]\ne:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/7deddc85b7ffd1dc-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/ec14413c594b3356-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/fddca953485158e4.css\",\"style\"]\n:HL[\"/_next/static/css/876e881d7ba02ed2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"docs\",\"architecture\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"docs\",{\"children\":[[\"slug\",\"architecture\",\"oc\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/fddca953485158e4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/876e881d7ba02ed2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_66b8ca\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem(\\\"annodex-theme\\\");if(t===\\\"dark\\\")document.documentElement.classList.add(\\\"dark\\\")}catch(e){}})();\"}}]}],[\"$\",\"body\",null,{\"style\":{\"minHeight\":\"100dvh\",\"display\":\"flex\",\"flexDirection\":\"column\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"tree\":{\"type\":\"root\",\"$ref\":{\"folder\":\"\",\"meta\":\"meta.json\"},\"$id\":\"root\",\"name\":\"Documentation\",\"description\":\"$undefined\",\"children\":[{\"$id\":\"index.mdx\",\"type\":\"page\",\"name\":\"Annodex\",\"description\":\"浏览器原生的 Codex 工作台。\",\"icon\":\"$undefined\",\"url\":\"/docs\",\"$ref\":\"index.mdx\"},{\"$id\":\"quick-start.mdx\",\"type\":\"page\",\"name\":\"Quick Start\",\"description\":\"安装并启动 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/quick-start\",\"$ref\":\"quick-start.mdx\"},{\"$id\":\"installation-and-deployment.mdx\",\"type\":\"page\",\"name\":\"Installation and Deployment\",\"description\":\"如何安装、启动并部署 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/installation-and-deployment\",\"$ref\":\"installation-and-deployment.mdx\"},{\"$id\":\"configuration.mdx\",\"type\":\"page\",\"name\":\"Configuration\",\"description\":\"annodex 的配置位置与主要配置对象。\",\"icon\":\"$undefined\",\"url\":\"/docs/configuration\",\"$ref\":\"configuration.mdx\"},{\"$id\":\"architecture.mdx\",\"type\":\"page\",\"name\":\"Architecture\",\"description\":\"annodex 的核心结构与数据流。\",\"icon\":\"$undefined\",\"url\":\"/docs/architecture\",\"$ref\":\"architecture.mdx\"},{\"$id\":\"workspace.mdx\",\"type\":\"page\",\"name\":\"Workspace\",\"description\":\"annodex 工作台的主要界面组成。\",\"icon\":\"$undefined\",\"url\":\"/docs/workspace\",\"$ref\":\"workspace.mdx\"},{\"$id\":\"sessions-and-projects.mdx\",\"type\":\"page\",\"name\":\"Sessions and Projects\",\"description\":\"为什么 annodex 以项目为中心组织会话。\",\"icon\":\"$undefined\",\"url\":\"/docs/sessions-and-projects\",\"$ref\":\"sessions-and-projects.mdx\"},{\"$id\":\"models-and-tools.mdx\",\"type\":\"page\",\"name\":\"Models and Tools\",\"description\":\"provider、模型、thinking level 与工具预设的作用。\",\"icon\":\"$undefined\",\"url\":\"/docs/models-and-tools\",\"$ref\":\"models-and-tools.mdx\"},{\"$id\":\"runtime-and-sse.mdx\",\"type\":\"page\",\"name\":\"Runtime and SSE\",\"description\":\"annodex 如何显示 agent 的运行态与实时事件。\",\"icon\":\"$undefined\",\"url\":\"/docs/runtime-and-sse\",\"$ref\":\"runtime-and-sse.mdx\"},{\"$id\":\"file-and-report-viewing.mdx\",\"type\":\"page\",\"name\":\"File Viewing and Outputs\",\"description\":\"annodex 如何让文件审阅与结果产物查看发生在同一界面。\",\"icon\":\"$undefined\",\"url\":\"/docs/file-and-report-viewing\",\"$ref\":\"file-and-report-viewing.mdx\"}]},\"tabs\":[],\"tabMode\":\"$undefined\",\"sidebar\":{},\"nav\":{\"title\":[\"$\",\"span\",null,{\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"gap\":10,\"fontWeight\":700},\"children\":[[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"key\":\"afitv7\"}],[\"path\",{\"d\":\"M3 9h18\",\"key\":\"1pudct\"}],[\"path\",{\"d\":\"M9 21V9\",\"key\":\"1oto5p\"}]],\"className\":\"lucide-panels-top-left\",\"size\":18}],\"annodex\"]}]},\"links\":[{\"text\":\"Docs\",\"url\":\"/docs\",\"icon\":\"$L7\",\"active\":\"nested-url\"},{\"text\":\"Workspace\",\"url\":\"/workspace\",\"icon\":\"$L8\",\"active\":\"nested-url\"},{\"text\":\"GitHub\",\"url\":\"https://github.com/seqyuan/annodex\",\"external\":true}],\"children\":\"$L9\"}]]}],{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,null]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"oIqDpdOWwl7oIU6o8NnNp\"}\n"])</script><script>self.__next_f.push([1,"10:I[90484,[],\"OutletBoundary\"]\n11:\"$Sreact.suspense\"\n14:I[90484,[],\"ViewportBoundary\"]\n16:I[90484,[],\"MetadataBoundary\"]\n7:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M12 7v14\",\"key\":\"1akyts\"}],[\"path\",{\"d\":\"M16 12h2\",\"key\":\"7q9ll5\"}],[\"path\",{\"d\":\"M16 8h2\",\"key\":\"msurwy\"}],[\"path\",{\"d\":\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\"key\":\"ruj8y\"}],[\"path\",{\"d\":\"M6 12h2\",\"key\":\"32wvfc\"}],[\"path\",{\"d\":\"M6 8h2\",\"key\":\"30oboj\"}]],\"className\":\"lucide-book-open-text\",\"size\":16}]\n8:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m7 11 2-2-2-2\",\"key\":\"1lz0vl\"}],[\"path\",{\"d\":\"M11 13h4\",\"key\":\"1p7l4v\"}],[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"ry\":\"2\",\"key\":\"1m3agn\"}]],\"className\":\"lucide-square-terminal\",\"size\":16}]\n9:[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$Lf\",null,[\"$\",\"$L10\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@12\"}]}]]}]\n13:[]\nc:\"$W13\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L14\",null,{\"children\":\"$L15\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L17\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n"])</script><script>self.__next_f.push([1,"18:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsPage\"]\n19:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsTitle\"]\n1a:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsDescription\"]\n1b:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsBody\"]\n1c:I[88518,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"Heading\"]\n1d:I[13768,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"CodeBlock\"]\n1e:I[13768,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"Pre\"]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"$L18\",null,{\"toc\":[{\"depth\":2,\"url\":\"#核心结构\",\"title\":\"核心结构\"},{\"depth\":2,\"url\":\"#数据流\",\"title\":\"数据流\"},{\"depth\":2,\"url\":\"#关键模块\",\"title\":\"关键模块\"},{\"depth\":2,\"url\":\"#设计重点\",\"title\":\"设计重点\"}],\"full\":\"$undefined\",\"children\":[[\"$\",\"$L19\",null,{\"children\":\"Architecture\"}],[\"$\",\"$L1a\",null,{\"children\":\"annodex 的核心结构与数据流。\"}],[\"$\",\"$L1b\",null,{\"children\":[[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"核心结构\",\"children\":\"核心结构\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"系统由三部分组成:\"}],\"\\n\",[\"$\",\"ol\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Browser UI\"}],\" — 负责聊天、文件浏览、会话切换与状态展示\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Next.js Server\"}],\" — 负责 API、SSE、会话包装与配置管理\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Codex app-server\"}],\" — 提供底层线程与 turn 协议能力\"]}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"数据流\",\"children\":\"数据流\"}],\"\\n\",[\"$\",\"$L1d\",null,{\"className\":\"shiki shiki-themes github-light github-dark\",\"style\":{\"--shiki-light\":\"#24292e\",\"--shiki-dark\":\"#e1e4e8\",\"--shiki-light-bg\":\"#fff\",\"--shiki-dark-bg\":\"#24292e\"},\"tabIndex\":\"0\",\"icon\":\"\u003csvg viewBox=\\\"0 0 24 24\\\"\u003e\u003cpath d=\\\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v 11 c 0,0.564129 -0.435871,1 -1,1 H 6 C 5.4358712,21 5,20.564129 5,20 V 4 C 5,3.4358712 5.4358712,3 6,3 Z M 15,3.4140625 18.585937,7 H 16 C 15.435871,7 15,6.5641288 15,6 Z\\\" fill=\\\"currentColor\\\" /\u003e\u003c/svg\u003e\",\"children\":[\"$\",\"$L1e\",null,{\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"children\":\"Browser -\u003e Next.js API -\u003e Codex app-server\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"children\":\" \u003c- SSE \u003c-\"}]}]]}]}]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"关键模块\",\"children\":\"关键模块\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/codex-server.ts\"}],\": 启动或连接 Codex app-server\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/codex-session.ts\"}],\": 将 Codex 事件映射为前端可消费事件\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/rpc-manager.ts\"}],\": 管理活跃 session wrapper 生命周期\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/session-reader.ts\"}],\": 读取线程、turn 与会话历史\"]}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"设计重点\",\"children\":\"设计重点\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"让项目成为组织会话的基本单位\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"让运行状态对用户可见\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"让文件查看与聊天协作发生在同一界面\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"保持对多 provider / model 配置的兼容\"}],\"\\n\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"15:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1f:I[86869,[],\"IconMark\"]\n12:null\n17:[[\"$\",\"title\",\"0\",{\"children\":\"Architecture\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"annodex 的核心结构与数据流。\"}],[\"$\",\"link\",\"2\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L1f\",\"4\",{}]]\n"])</script></body></html>
26
+ </ul></div><div class="flex flex-row flex-wrap items-center justify-between gap-4 empty:hidden"></div><div class="@container grid gap-4 grid-cols-2"><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full" href="/docs/configuration"><div class="inline-flex items-center gap-1.5 font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg><p>Configuration</p></div><p class="text-fd-muted-foreground truncate">annodex 的配置位置与主要配置对象。</p></a><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full text-end" href="/docs/workspace"><div class="inline-flex items-center gap-1.5 font-medium flex-row-reverse"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg><p>Workspace</p></div><p class="text-fd-muted-foreground truncate">annodex 工作台的主要界面组成。</p></a></div></article><div id="nd-toc" class="sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 xl:layout:[--fd-toc-width:268px] max-xl:hidden"><h3 id="toc-title" class="inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-text-align-start size-4" aria-hidden="true"><path d="M21 5H3"></path><path d="M15 12H3"></path><path d="M17 19H3"></path></svg>On this page</h3><div class="relative min-h-0 text-sm ms-px overflow-auto [scrollbar-width:none] mask-[linear-gradient(to_bottom,transparent,white_16px,white_calc(100%-16px),transparent)] py-3"><div class="relative"><div class="flex flex-col border-s border-fd-foreground/10"><a data-active="false" href="#核心结构" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">核心结构</a><a data-active="false" href="#数据流" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">数据流</a><a data-active="false" href="#关键模块" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">关键模块</a><a data-active="false" href="#设计重点" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">设计重点</a></div></div></div></div><!--$--><!--/$--></div><script src="/_next/static/chunks/webpack-ced9e639bb94bd30.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[67504,[\"8500\",\"static/chunks/8500-f62a38ff68ab7f42.js\",\"5122\",\"static/chunks/5122-6e0d29bd15f079e1.js\",\"7177\",\"static/chunks/app/layout-11cc1f48ff425fd0.js\"],\"RootProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[67197,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4499\",\"static/chunks/app/docs/layout-4809bb9dd4b49bff.js\"],\"LayoutBody\"]\n6:I[99535,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"default\"]\ne:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/7deddc85b7ffd1dc-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/ec14413c594b3356-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/fddca953485158e4.css\",\"style\"]\n:HL[\"/_next/static/css/876e881d7ba02ed2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"docs\",\"architecture\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"docs\",{\"children\":[[\"slug\",\"architecture\",\"oc\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/fddca953485158e4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/876e881d7ba02ed2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_66b8ca\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem(\\\"annodex-theme\\\");if(t===\\\"dark\\\")document.documentElement.classList.add(\\\"dark\\\")}catch(e){}})();\"}}]}],[\"$\",\"body\",null,{\"style\":{\"minHeight\":\"100dvh\",\"display\":\"flex\",\"flexDirection\":\"column\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"tree\":{\"type\":\"root\",\"$ref\":{\"folder\":\"\",\"meta\":\"meta.json\"},\"$id\":\"root\",\"name\":\"Documentation\",\"description\":\"$undefined\",\"children\":[{\"$id\":\"index.mdx\",\"type\":\"page\",\"name\":\"Annodex\",\"description\":\"浏览器原生的 Codex 工作台。\",\"icon\":\"$undefined\",\"url\":\"/docs\",\"$ref\":\"index.mdx\"},{\"$id\":\"quick-start.mdx\",\"type\":\"page\",\"name\":\"Quick Start\",\"description\":\"安装并启动 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/quick-start\",\"$ref\":\"quick-start.mdx\"},{\"$id\":\"installation-and-deployment.mdx\",\"type\":\"page\",\"name\":\"Installation and Deployment\",\"description\":\"如何安装、启动并部署 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/installation-and-deployment\",\"$ref\":\"installation-and-deployment.mdx\"},{\"$id\":\"configuration.mdx\",\"type\":\"page\",\"name\":\"Configuration\",\"description\":\"annodex 的配置位置与主要配置对象。\",\"icon\":\"$undefined\",\"url\":\"/docs/configuration\",\"$ref\":\"configuration.mdx\"},{\"$id\":\"architecture.mdx\",\"type\":\"page\",\"name\":\"Architecture\",\"description\":\"annodex 的核心结构与数据流。\",\"icon\":\"$undefined\",\"url\":\"/docs/architecture\",\"$ref\":\"architecture.mdx\"},{\"$id\":\"workspace.mdx\",\"type\":\"page\",\"name\":\"Workspace\",\"description\":\"annodex 工作台的主要界面组成。\",\"icon\":\"$undefined\",\"url\":\"/docs/workspace\",\"$ref\":\"workspace.mdx\"},{\"$id\":\"sessions-and-projects.mdx\",\"type\":\"page\",\"name\":\"Sessions and Projects\",\"description\":\"为什么 annodex 以项目为中心组织会话。\",\"icon\":\"$undefined\",\"url\":\"/docs/sessions-and-projects\",\"$ref\":\"sessions-and-projects.mdx\"},{\"$id\":\"models-and-tools.mdx\",\"type\":\"page\",\"name\":\"Models and Tools\",\"description\":\"provider、模型、thinking level 与工具预设的作用。\",\"icon\":\"$undefined\",\"url\":\"/docs/models-and-tools\",\"$ref\":\"models-and-tools.mdx\"},{\"$id\":\"runtime-and-sse.mdx\",\"type\":\"page\",\"name\":\"Runtime and SSE\",\"description\":\"annodex 如何显示 agent 的运行态与实时事件。\",\"icon\":\"$undefined\",\"url\":\"/docs/runtime-and-sse\",\"$ref\":\"runtime-and-sse.mdx\"},{\"$id\":\"file-and-report-viewing.mdx\",\"type\":\"page\",\"name\":\"File Viewing and Outputs\",\"description\":\"annodex 如何让文件审阅与结果产物查看发生在同一界面。\",\"icon\":\"$undefined\",\"url\":\"/docs/file-and-report-viewing\",\"$ref\":\"file-and-report-viewing.mdx\"}]},\"tabs\":[],\"tabMode\":\"$undefined\",\"sidebar\":{},\"nav\":{\"title\":[\"$\",\"span\",null,{\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"gap\":10,\"fontWeight\":700},\"children\":[[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"key\":\"afitv7\"}],[\"path\",{\"d\":\"M3 9h18\",\"key\":\"1pudct\"}],[\"path\",{\"d\":\"M9 21V9\",\"key\":\"1oto5p\"}]],\"className\":\"lucide-panels-top-left\",\"size\":18}],\"annodex\"]}]},\"links\":[{\"text\":\"Docs\",\"url\":\"/docs\",\"icon\":\"$L7\",\"active\":\"nested-url\"},{\"text\":\"Workspace\",\"url\":\"/workspace\",\"icon\":\"$L8\",\"active\":\"nested-url\"},{\"text\":\"GitHub\",\"url\":\"https://github.com/seqyuan/annodex\",\"external\":true}],\"children\":\"$L9\"}]]}],{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,null]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"c12uc5Ebna-CqP4_lL37X\"}\n"])</script><script>self.__next_f.push([1,"10:I[90484,[],\"OutletBoundary\"]\n11:\"$Sreact.suspense\"\n14:I[90484,[],\"ViewportBoundary\"]\n16:I[90484,[],\"MetadataBoundary\"]\n7:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M12 7v14\",\"key\":\"1akyts\"}],[\"path\",{\"d\":\"M16 12h2\",\"key\":\"7q9ll5\"}],[\"path\",{\"d\":\"M16 8h2\",\"key\":\"msurwy\"}],[\"path\",{\"d\":\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\"key\":\"ruj8y\"}],[\"path\",{\"d\":\"M6 12h2\",\"key\":\"32wvfc\"}],[\"path\",{\"d\":\"M6 8h2\",\"key\":\"30oboj\"}]],\"className\":\"lucide-book-open-text\",\"size\":16}]\n8:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m7 11 2-2-2-2\",\"key\":\"1lz0vl\"}],[\"path\",{\"d\":\"M11 13h4\",\"key\":\"1p7l4v\"}],[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"ry\":\"2\",\"key\":\"1m3agn\"}]],\"className\":\"lucide-square-terminal\",\"size\":16}]\n9:[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$Lf\",null,[\"$\",\"$L10\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@12\"}]}]]}]\n13:[]\nc:\"$W13\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L14\",null,{\"children\":\"$L15\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L17\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n"])</script><script>self.__next_f.push([1,"18:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsPage\"]\n19:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsTitle\"]\n1a:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsDescription\"]\n1b:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsBody\"]\n1c:I[88518,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"Heading\"]\n1d:I[13768,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"CodeBlock\"]\n1e:I[13768,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"Pre\"]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"$L18\",null,{\"toc\":[{\"depth\":2,\"url\":\"#核心结构\",\"title\":\"核心结构\"},{\"depth\":2,\"url\":\"#数据流\",\"title\":\"数据流\"},{\"depth\":2,\"url\":\"#关键模块\",\"title\":\"关键模块\"},{\"depth\":2,\"url\":\"#设计重点\",\"title\":\"设计重点\"}],\"full\":\"$undefined\",\"children\":[[\"$\",\"$L19\",null,{\"children\":\"Architecture\"}],[\"$\",\"$L1a\",null,{\"children\":\"annodex 的核心结构与数据流。\"}],[\"$\",\"$L1b\",null,{\"children\":[[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"核心结构\",\"children\":\"核心结构\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"系统由三部分组成:\"}],\"\\n\",[\"$\",\"ol\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Browser UI\"}],\" — 负责聊天、文件浏览、会话切换与状态展示\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Next.js Server\"}],\" — 负责 API、SSE、会话包装与配置管理\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Codex app-server\"}],\" — 提供底层线程与 turn 协议能力\"]}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"数据流\",\"children\":\"数据流\"}],\"\\n\",[\"$\",\"$L1d\",null,{\"className\":\"shiki shiki-themes github-light github-dark\",\"style\":{\"--shiki-light\":\"#24292e\",\"--shiki-dark\":\"#e1e4e8\",\"--shiki-light-bg\":\"#fff\",\"--shiki-dark-bg\":\"#24292e\"},\"tabIndex\":\"0\",\"icon\":\"\u003csvg viewBox=\\\"0 0 24 24\\\"\u003e\u003cpath d=\\\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v 11 c 0,0.564129 -0.435871,1 -1,1 H 6 C 5.4358712,21 5,20.564129 5,20 V 4 C 5,3.4358712 5.4358712,3 6,3 Z M 15,3.4140625 18.585937,7 H 16 C 15.435871,7 15,6.5641288 15,6 Z\\\" fill=\\\"currentColor\\\" /\u003e\u003c/svg\u003e\",\"children\":[\"$\",\"$L1e\",null,{\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"children\":\"Browser -\u003e Next.js API -\u003e Codex app-server\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"children\":\" \u003c- SSE \u003c-\"}]}]]}]}]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"关键模块\",\"children\":\"关键模块\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/codex-server.ts\"}],\": 启动或连接 Codex app-server\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/codex-session.ts\"}],\": 将 Codex 事件映射为前端可消费事件\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/rpc-manager.ts\"}],\": 管理活跃 session wrapper 生命周期\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"code\",null,{\"children\":\"lib/session-reader.ts\"}],\": 读取线程、turn 与会话历史\"]}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"设计重点\",\"children\":\"设计重点\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"让项目成为组织会话的基本单位\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"让运行状态对用户可见\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"让文件查看与聊天协作发生在同一界面\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"保持对多 provider / model 配置的兼容\"}],\"\\n\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"15:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1f:I[86869,[],\"IconMark\"]\n12:null\n17:[[\"$\",\"title\",\"0\",{\"children\":\"Architecture\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"annodex 的核心结构与数据流。\"}],[\"$\",\"link\",\"2\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L1f\",\"4\",{}]]\n"])</script></body></html>
@@ -9,7 +9,7 @@ e:I[27123,[],"default",1]
9
9
  :HL["/_next/static/media/ec14413c594b3356-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
10
10
  :HL["/_next/static/css/fddca953485158e4.css","style"]
11
11
  :HL["/_next/static/css/876e881d7ba02ed2.css","style"]
12
- 0:{"P":null,"c":["","docs","architecture"],"q":"","i":false,"f":[[["",{"children":["docs",{"children":[["slug","architecture","oc",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/876e881d7ba02ed2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"tree":{"type":"root","$ref":{"folder":"","meta":"meta.json"},"$id":"root","name":"Documentation","description":"$undefined","children":[{"$id":"index.mdx","type":"page","name":"Annodex","description":"浏览器原生的 Codex 工作台。","icon":"$undefined","url":"/docs","$ref":"index.mdx"},{"$id":"quick-start.mdx","type":"page","name":"Quick Start","description":"安装并启动 annodex。","icon":"$undefined","url":"/docs/quick-start","$ref":"quick-start.mdx"},{"$id":"installation-and-deployment.mdx","type":"page","name":"Installation and Deployment","description":"如何安装、启动并部署 annodex。","icon":"$undefined","url":"/docs/installation-and-deployment","$ref":"installation-and-deployment.mdx"},{"$id":"configuration.mdx","type":"page","name":"Configuration","description":"annodex 的配置位置与主要配置对象。","icon":"$undefined","url":"/docs/configuration","$ref":"configuration.mdx"},{"$id":"architecture.mdx","type":"page","name":"Architecture","description":"annodex 的核心结构与数据流。","icon":"$undefined","url":"/docs/architecture","$ref":"architecture.mdx"},{"$id":"workspace.mdx","type":"page","name":"Workspace","description":"annodex 工作台的主要界面组成。","icon":"$undefined","url":"/docs/workspace","$ref":"workspace.mdx"},{"$id":"sessions-and-projects.mdx","type":"page","name":"Sessions and Projects","description":"为什么 annodex 以项目为中心组织会话。","icon":"$undefined","url":"/docs/sessions-and-projects","$ref":"sessions-and-projects.mdx"},{"$id":"models-and-tools.mdx","type":"page","name":"Models and Tools","description":"provider、模型、thinking level 与工具预设的作用。","icon":"$undefined","url":"/docs/models-and-tools","$ref":"models-and-tools.mdx"},{"$id":"runtime-and-sse.mdx","type":"page","name":"Runtime and SSE","description":"annodex 如何显示 agent 的运行态与实时事件。","icon":"$undefined","url":"/docs/runtime-and-sse","$ref":"runtime-and-sse.mdx"},{"$id":"file-and-report-viewing.mdx","type":"page","name":"File Viewing and Outputs","description":"annodex 如何让文件审阅与结果产物查看发生在同一界面。","icon":"$undefined","url":"/docs/file-and-report-viewing","$ref":"file-and-report-viewing.mdx"}]},"tabs":[],"tabMode":"$undefined","sidebar":{},"nav":{"title":["$","span",null,{"style":{"display":"inline-flex","alignItems":"center","gap":10,"fontWeight":700},"children":[["$","$L6",null,{"ref":"$undefined","iconNode":[["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","key":"afitv7"}],["path",{"d":"M3 9h18","key":"1pudct"}],["path",{"d":"M9 21V9","key":"1oto5p"}]],"className":"lucide-panels-top-left","size":18}],"annodex"]}]},"links":[{"text":"Docs","url":"/docs","icon":"$L7","active":"nested-url"},{"text":"Workspace","url":"/workspace","icon":"$L8","active":"nested-url"},{"text":"GitHub","url":"https://github.com/seqyuan/annodex","external":true}],"children":"$L9"}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"oIqDpdOWwl7oIU6o8NnNp"}
12
+ 0:{"P":null,"c":["","docs","architecture"],"q":"","i":false,"f":[[["",{"children":["docs",{"children":[["slug","architecture","oc",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/876e881d7ba02ed2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"tree":{"type":"root","$ref":{"folder":"","meta":"meta.json"},"$id":"root","name":"Documentation","description":"$undefined","children":[{"$id":"index.mdx","type":"page","name":"Annodex","description":"浏览器原生的 Codex 工作台。","icon":"$undefined","url":"/docs","$ref":"index.mdx"},{"$id":"quick-start.mdx","type":"page","name":"Quick Start","description":"安装并启动 annodex。","icon":"$undefined","url":"/docs/quick-start","$ref":"quick-start.mdx"},{"$id":"installation-and-deployment.mdx","type":"page","name":"Installation and Deployment","description":"如何安装、启动并部署 annodex。","icon":"$undefined","url":"/docs/installation-and-deployment","$ref":"installation-and-deployment.mdx"},{"$id":"configuration.mdx","type":"page","name":"Configuration","description":"annodex 的配置位置与主要配置对象。","icon":"$undefined","url":"/docs/configuration","$ref":"configuration.mdx"},{"$id":"architecture.mdx","type":"page","name":"Architecture","description":"annodex 的核心结构与数据流。","icon":"$undefined","url":"/docs/architecture","$ref":"architecture.mdx"},{"$id":"workspace.mdx","type":"page","name":"Workspace","description":"annodex 工作台的主要界面组成。","icon":"$undefined","url":"/docs/workspace","$ref":"workspace.mdx"},{"$id":"sessions-and-projects.mdx","type":"page","name":"Sessions and Projects","description":"为什么 annodex 以项目为中心组织会话。","icon":"$undefined","url":"/docs/sessions-and-projects","$ref":"sessions-and-projects.mdx"},{"$id":"models-and-tools.mdx","type":"page","name":"Models and Tools","description":"provider、模型、thinking level 与工具预设的作用。","icon":"$undefined","url":"/docs/models-and-tools","$ref":"models-and-tools.mdx"},{"$id":"runtime-and-sse.mdx","type":"page","name":"Runtime and SSE","description":"annodex 如何显示 agent 的运行态与实时事件。","icon":"$undefined","url":"/docs/runtime-and-sse","$ref":"runtime-and-sse.mdx"},{"$id":"file-and-report-viewing.mdx","type":"page","name":"File Viewing and Outputs","description":"annodex 如何让文件审阅与结果产物查看发生在同一界面。","icon":"$undefined","url":"/docs/file-and-report-viewing","$ref":"file-and-report-viewing.mdx"}]},"tabs":[],"tabMode":"$undefined","sidebar":{},"nav":{"title":["$","span",null,{"style":{"display":"inline-flex","alignItems":"center","gap":10,"fontWeight":700},"children":[["$","$L6",null,{"ref":"$undefined","iconNode":[["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","key":"afitv7"}],["path",{"d":"M3 9h18","key":"1pudct"}],["path",{"d":"M9 21V9","key":"1oto5p"}]],"className":"lucide-panels-top-left","size":18}],"annodex"]}]},"links":[{"text":"Docs","url":"/docs","icon":"$L7","active":"nested-url"},{"text":"Workspace","url":"/workspace","icon":"$L8","active":"nested-url"},{"text":"GitHub","url":"https://github.com/seqyuan/annodex","external":true}],"children":"$L9"}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"c12uc5Ebna-CqP4_lL37X"}
13
13
  10:I[90484,[],"OutletBoundary"]
14
14
  11:"$Sreact.suspense"
15
15
  14:I[90484,[],"ViewportBoundary"]
@@ -9,7 +9,7 @@ e:I[27123,[],"default",1]
9
9
  :HL["/_next/static/media/ec14413c594b3356-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
10
10
  :HL["/_next/static/css/fddca953485158e4.css","style"]
11
11
  :HL["/_next/static/css/876e881d7ba02ed2.css","style"]
12
- 0:{"P":null,"c":["","docs","architecture"],"q":"","i":false,"f":[[["",{"children":["docs",{"children":[["slug","architecture","oc",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/876e881d7ba02ed2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"tree":{"type":"root","$ref":{"folder":"","meta":"meta.json"},"$id":"root","name":"Documentation","description":"$undefined","children":[{"$id":"index.mdx","type":"page","name":"Annodex","description":"浏览器原生的 Codex 工作台。","icon":"$undefined","url":"/docs","$ref":"index.mdx"},{"$id":"quick-start.mdx","type":"page","name":"Quick Start","description":"安装并启动 annodex。","icon":"$undefined","url":"/docs/quick-start","$ref":"quick-start.mdx"},{"$id":"installation-and-deployment.mdx","type":"page","name":"Installation and Deployment","description":"如何安装、启动并部署 annodex。","icon":"$undefined","url":"/docs/installation-and-deployment","$ref":"installation-and-deployment.mdx"},{"$id":"configuration.mdx","type":"page","name":"Configuration","description":"annodex 的配置位置与主要配置对象。","icon":"$undefined","url":"/docs/configuration","$ref":"configuration.mdx"},{"$id":"architecture.mdx","type":"page","name":"Architecture","description":"annodex 的核心结构与数据流。","icon":"$undefined","url":"/docs/architecture","$ref":"architecture.mdx"},{"$id":"workspace.mdx","type":"page","name":"Workspace","description":"annodex 工作台的主要界面组成。","icon":"$undefined","url":"/docs/workspace","$ref":"workspace.mdx"},{"$id":"sessions-and-projects.mdx","type":"page","name":"Sessions and Projects","description":"为什么 annodex 以项目为中心组织会话。","icon":"$undefined","url":"/docs/sessions-and-projects","$ref":"sessions-and-projects.mdx"},{"$id":"models-and-tools.mdx","type":"page","name":"Models and Tools","description":"provider、模型、thinking level 与工具预设的作用。","icon":"$undefined","url":"/docs/models-and-tools","$ref":"models-and-tools.mdx"},{"$id":"runtime-and-sse.mdx","type":"page","name":"Runtime and SSE","description":"annodex 如何显示 agent 的运行态与实时事件。","icon":"$undefined","url":"/docs/runtime-and-sse","$ref":"runtime-and-sse.mdx"},{"$id":"file-and-report-viewing.mdx","type":"page","name":"File Viewing and Outputs","description":"annodex 如何让文件审阅与结果产物查看发生在同一界面。","icon":"$undefined","url":"/docs/file-and-report-viewing","$ref":"file-and-report-viewing.mdx"}]},"tabs":[],"tabMode":"$undefined","sidebar":{},"nav":{"title":["$","span",null,{"style":{"display":"inline-flex","alignItems":"center","gap":10,"fontWeight":700},"children":[["$","$L6",null,{"ref":"$undefined","iconNode":[["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","key":"afitv7"}],["path",{"d":"M3 9h18","key":"1pudct"}],["path",{"d":"M9 21V9","key":"1oto5p"}]],"className":"lucide-panels-top-left","size":18}],"annodex"]}]},"links":[{"text":"Docs","url":"/docs","icon":"$L7","active":"nested-url"},{"text":"Workspace","url":"/workspace","icon":"$L8","active":"nested-url"},{"text":"GitHub","url":"https://github.com/seqyuan/annodex","external":true}],"children":"$L9"}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"oIqDpdOWwl7oIU6o8NnNp"}
12
+ 0:{"P":null,"c":["","docs","architecture"],"q":"","i":false,"f":[[["",{"children":["docs",{"children":[["slug","architecture","oc",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/876e881d7ba02ed2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"tree":{"type":"root","$ref":{"folder":"","meta":"meta.json"},"$id":"root","name":"Documentation","description":"$undefined","children":[{"$id":"index.mdx","type":"page","name":"Annodex","description":"浏览器原生的 Codex 工作台。","icon":"$undefined","url":"/docs","$ref":"index.mdx"},{"$id":"quick-start.mdx","type":"page","name":"Quick Start","description":"安装并启动 annodex。","icon":"$undefined","url":"/docs/quick-start","$ref":"quick-start.mdx"},{"$id":"installation-and-deployment.mdx","type":"page","name":"Installation and Deployment","description":"如何安装、启动并部署 annodex。","icon":"$undefined","url":"/docs/installation-and-deployment","$ref":"installation-and-deployment.mdx"},{"$id":"configuration.mdx","type":"page","name":"Configuration","description":"annodex 的配置位置与主要配置对象。","icon":"$undefined","url":"/docs/configuration","$ref":"configuration.mdx"},{"$id":"architecture.mdx","type":"page","name":"Architecture","description":"annodex 的核心结构与数据流。","icon":"$undefined","url":"/docs/architecture","$ref":"architecture.mdx"},{"$id":"workspace.mdx","type":"page","name":"Workspace","description":"annodex 工作台的主要界面组成。","icon":"$undefined","url":"/docs/workspace","$ref":"workspace.mdx"},{"$id":"sessions-and-projects.mdx","type":"page","name":"Sessions and Projects","description":"为什么 annodex 以项目为中心组织会话。","icon":"$undefined","url":"/docs/sessions-and-projects","$ref":"sessions-and-projects.mdx"},{"$id":"models-and-tools.mdx","type":"page","name":"Models and Tools","description":"provider、模型、thinking level 与工具预设的作用。","icon":"$undefined","url":"/docs/models-and-tools","$ref":"models-and-tools.mdx"},{"$id":"runtime-and-sse.mdx","type":"page","name":"Runtime and SSE","description":"annodex 如何显示 agent 的运行态与实时事件。","icon":"$undefined","url":"/docs/runtime-and-sse","$ref":"runtime-and-sse.mdx"},{"$id":"file-and-report-viewing.mdx","type":"page","name":"File Viewing and Outputs","description":"annodex 如何让文件审阅与结果产物查看发生在同一界面。","icon":"$undefined","url":"/docs/file-and-report-viewing","$ref":"file-and-report-viewing.mdx"}]},"tabs":[],"tabMode":"$undefined","sidebar":{},"nav":{"title":["$","span",null,{"style":{"display":"inline-flex","alignItems":"center","gap":10,"fontWeight":700},"children":[["$","$L6",null,{"ref":"$undefined","iconNode":[["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","key":"afitv7"}],["path",{"d":"M3 9h18","key":"1pudct"}],["path",{"d":"M9 21V9","key":"1oto5p"}]],"className":"lucide-panels-top-left","size":18}],"annodex"]}]},"links":[{"text":"Docs","url":"/docs","icon":"$L7","active":"nested-url"},{"text":"Workspace","url":"/workspace","icon":"$L8","active":"nested-url"},{"text":"GitHub","url":"https://github.com/seqyuan/annodex","external":true}],"children":"$L9"}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"c12uc5Ebna-CqP4_lL37X"}
13
13
  10:I[90484,[],"OutletBoundary"]
14
14
  11:"$Sreact.suspense"
15
15
  14:I[90484,[],"ViewportBoundary"]
@@ -3,4 +3,4 @@
3
3
  3:I[90484,[],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
5
  5:I[86869,[],"IconMark"]
6
- 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Architecture"}],["$","meta","1",{"name":"description","content":"annodex 的核心结构与数据流。"}],["$","link","2",{"rel":"shortcut icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","link","3",{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"oIqDpdOWwl7oIU6o8NnNp"}
6
+ 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Architecture"}],["$","meta","1",{"name":"description","content":"annodex 的核心结构与数据流。"}],["$","link","2",{"rel":"shortcut icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","link","3",{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"c12uc5Ebna-CqP4_lL37X"}
@@ -4,4 +4,4 @@
4
4
  4:I[74581,[],""]
5
5
  :HL["/_next/static/css/fddca953485158e4.css","style"]
6
6
  :HL["/_next/static/css/876e881d7ba02ed2.css","style"]
7
- 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/876e881d7ba02ed2.css","precedence":"next"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","template":["$","$L4",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"oIqDpdOWwl7oIU6o8NnNp"}
7
+ 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/876e881d7ba02ed2.css","precedence":"next"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","template":["$","$L4",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"c12uc5Ebna-CqP4_lL37X"}
@@ -2,4 +2,4 @@
2
2
  :HL["/_next/static/media/ec14413c594b3356-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
3
3
  :HL["/_next/static/css/fddca953485158e4.css","style"]
4
4
  :HL["/_next/static/css/876e881d7ba02ed2.css","style"]
5
- 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"docs","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"oc","key":"architecture","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"oIqDpdOWwl7oIU6o8NnNp"}
5
+ 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"docs","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"oc","key":"architecture","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"c12uc5Ebna-CqP4_lL37X"}
@@ -8,5 +8,5 @@
8
8
  8:I[13768,["5166","static/chunks/5166-58bbf85cbd32ad99.js","9278","static/chunks/9278-58ee6294b32318a5.js","4894","static/chunks/4894-e27a35edd6176226.js","7870","static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js"],"Pre"]
9
9
  9:I[90484,[],"OutletBoundary"]
10
10
  a:"$Sreact.suspense"
11
- 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"toc":[{"depth":2,"url":"#核心结构","title":"核心结构"},{"depth":2,"url":"#数据流","title":"数据流"},{"depth":2,"url":"#关键模块","title":"关键模块"},{"depth":2,"url":"#设计重点","title":"设计重点"}],"children":[["$","$L3",null,{"children":"Architecture"}],["$","$L4",null,{"children":"annodex 的核心结构与数据流。"}],["$","$L5",null,{"children":[["$","$L6",null,{"as":"h2","id":"核心结构","children":"核心结构"}],"\n",["$","p",null,{"children":"系统由三部分组成:"}],"\n",["$","ol",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Browser UI"}]," — 负责聊天、文件浏览、会话切换与状态展示"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Next.js Server"}]," — 负责 API、SSE、会话包装与配置管理"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Codex app-server"}]," — 提供底层线程与 turn 协议能力"]}],"\n"]}],"\n",["$","$L6",null,{"as":"h2","id":"数据流","children":"数据流"}],"\n",["$","$L7",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v 11 c 0,0.564129 -0.435871,1 -1,1 H 6 C 5.4358712,21 5,20.564129 5,20 V 4 C 5,3.4358712 5.4358712,3 6,3 Z M 15,3.4140625 18.585937,7 H 16 C 15.435871,7 15,6.5641288 15,6 Z\" fill=\"currentColor\" /></svg>","children":["$","$L8",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":["$","span",null,{"children":"Browser -> Next.js API -> Codex app-server"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" <- SSE <-"}]}]]}]}]}],"\n",["$","$L6",null,{"as":"h2","id":"关键模块","children":"关键模块"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/codex-server.ts"}],": 启动或连接 Codex app-server"]}],"\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/codex-session.ts"}],": 将 Codex 事件映射为前端可消费事件"]}],"\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/rpc-manager.ts"}],": 管理活跃 session wrapper 生命周期"]}],"\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/session-reader.ts"}],": 读取线程、turn 与会话历史"]}],"\n"]}],"\n",["$","$L6",null,{"as":"h2","id":"设计重点","children":"设计重点"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":"让项目成为组织会话的基本单位"}],"\n",["$","li",null,{"children":"让运行状态对用户可见"}],"\n",["$","li",null,{"children":"让文件查看与聊天协作发生在同一界面"}],"\n",["$","li",null,{"children":"保持对多 provider / model 配置的兼容"}],"\n"]}]]}]]}],null,["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"oIqDpdOWwl7oIU6o8NnNp"}
11
+ 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"toc":[{"depth":2,"url":"#核心结构","title":"核心结构"},{"depth":2,"url":"#数据流","title":"数据流"},{"depth":2,"url":"#关键模块","title":"关键模块"},{"depth":2,"url":"#设计重点","title":"设计重点"}],"children":[["$","$L3",null,{"children":"Architecture"}],["$","$L4",null,{"children":"annodex 的核心结构与数据流。"}],["$","$L5",null,{"children":[["$","$L6",null,{"as":"h2","id":"核心结构","children":"核心结构"}],"\n",["$","p",null,{"children":"系统由三部分组成:"}],"\n",["$","ol",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Browser UI"}]," — 负责聊天、文件浏览、会话切换与状态展示"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Next.js Server"}]," — 负责 API、SSE、会话包装与配置管理"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Codex app-server"}]," — 提供底层线程与 turn 协议能力"]}],"\n"]}],"\n",["$","$L6",null,{"as":"h2","id":"数据流","children":"数据流"}],"\n",["$","$L7",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v 11 c 0,0.564129 -0.435871,1 -1,1 H 6 C 5.4358712,21 5,20.564129 5,20 V 4 C 5,3.4358712 5.4358712,3 6,3 Z M 15,3.4140625 18.585937,7 H 16 C 15.435871,7 15,6.5641288 15,6 Z\" fill=\"currentColor\" /></svg>","children":["$","$L8",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":["$","span",null,{"children":"Browser -> Next.js API -> Codex app-server"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" <- SSE <-"}]}]]}]}]}],"\n",["$","$L6",null,{"as":"h2","id":"关键模块","children":"关键模块"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/codex-server.ts"}],": 启动或连接 Codex app-server"]}],"\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/codex-session.ts"}],": 将 Codex 事件映射为前端可消费事件"]}],"\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/rpc-manager.ts"}],": 管理活跃 session wrapper 生命周期"]}],"\n",["$","li",null,{"children":[["$","code",null,{"children":"lib/session-reader.ts"}],": 读取线程、turn 与会话历史"]}],"\n"]}],"\n",["$","$L6",null,{"as":"h2","id":"设计重点","children":"设计重点"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":"让项目成为组织会话的基本单位"}],"\n",["$","li",null,{"children":"让运行状态对用户可见"}],"\n",["$","li",null,{"children":"让文件查看与聊天协作发生在同一界面"}],"\n",["$","li",null,{"children":"保持对多 provider / model 配置的兼容"}],"\n"]}]]}]]}],null,["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"c12uc5Ebna-CqP4_lL37X"}
12
12
  b:null
@@ -2,4 +2,4 @@
2
2
  2:I[57121,[],""]
3
3
  3:I[74581,[],""]
4
4
  4:[]
5
- 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"oIqDpdOWwl7oIU6o8NnNp"}
5
+ 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"c12uc5Ebna-CqP4_lL37X"}
@@ -3,4 +3,4 @@
3
3
  3:I[99535,["5166","static/chunks/5166-58bbf85cbd32ad99.js","9278","static/chunks/9278-58ee6294b32318a5.js","4894","static/chunks/4894-e27a35edd6176226.js","7870","static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js"],"default"]
4
4
  4:I[57121,[],""]
5
5
  5:I[74581,[],""]
6
- 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"tree":{"type":"root","$ref":{"folder":"","meta":"meta.json"},"$id":"root","name":"Documentation","children":[{"$id":"index.mdx","type":"page","name":"Annodex","description":"浏览器原生的 Codex 工作台。","url":"/docs","$ref":"index.mdx"},{"$id":"quick-start.mdx","type":"page","name":"Quick Start","description":"安装并启动 annodex。","url":"/docs/quick-start","$ref":"quick-start.mdx"},{"$id":"installation-and-deployment.mdx","type":"page","name":"Installation and Deployment","description":"如何安装、启动并部署 annodex。","url":"/docs/installation-and-deployment","$ref":"installation-and-deployment.mdx"},{"$id":"configuration.mdx","type":"page","name":"Configuration","description":"annodex 的配置位置与主要配置对象。","url":"/docs/configuration","$ref":"configuration.mdx"},{"$id":"architecture.mdx","type":"page","name":"Architecture","description":"annodex 的核心结构与数据流。","url":"/docs/architecture","$ref":"architecture.mdx"},{"$id":"workspace.mdx","type":"page","name":"Workspace","description":"annodex 工作台的主要界面组成。","url":"/docs/workspace","$ref":"workspace.mdx"},{"$id":"sessions-and-projects.mdx","type":"page","name":"Sessions and Projects","description":"为什么 annodex 以项目为中心组织会话。","url":"/docs/sessions-and-projects","$ref":"sessions-and-projects.mdx"},{"$id":"models-and-tools.mdx","type":"page","name":"Models and Tools","description":"provider、模型、thinking level 与工具预设的作用。","url":"/docs/models-and-tools","$ref":"models-and-tools.mdx"},{"$id":"runtime-and-sse.mdx","type":"page","name":"Runtime and SSE","description":"annodex 如何显示 agent 的运行态与实时事件。","url":"/docs/runtime-and-sse","$ref":"runtime-and-sse.mdx"},{"$id":"file-and-report-viewing.mdx","type":"page","name":"File Viewing and Outputs","description":"annodex 如何让文件审阅与结果产物查看发生在同一界面。","url":"/docs/file-and-report-viewing","$ref":"file-and-report-viewing.mdx"}]},"tabs":[],"sidebar":{},"nav":{"title":["$","span",null,{"style":{"display":"inline-flex","alignItems":"center","gap":10,"fontWeight":700},"children":[["$","$L3",null,{"iconNode":[["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","key":"afitv7"}],["path",{"d":"M3 9h18","key":"1pudct"}],["path",{"d":"M9 21V9","key":"1oto5p"}]],"className":"lucide-panels-top-left","size":18}],"annodex"]}]},"links":[{"text":"Docs","url":"/docs","icon":["$","$L3",null,{"iconNode":[["path",{"d":"M12 7v14","key":"1akyts"}],["path",{"d":"M16 12h2","key":"7q9ll5"}],["path",{"d":"M16 8h2","key":"msurwy"}],["path",{"d":"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z","key":"ruj8y"}],["path",{"d":"M6 12h2","key":"32wvfc"}],["path",{"d":"M6 8h2","key":"30oboj"}]],"className":"lucide-book-open-text","size":16}],"active":"nested-url"},{"text":"Workspace","url":"/workspace","icon":["$","$L3",null,{"iconNode":[["path",{"d":"m7 11 2-2-2-2","key":"1lz0vl"}],["path",{"d":"M11 13h4","key":"1p7l4v"}],["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","ry":"2","key":"1m3agn"}]],"className":"lucide-square-terminal","size":16}],"active":"nested-url"},{"text":"GitHub","url":"https://github.com/seqyuan/annodex","external":true}],"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"oIqDpdOWwl7oIU6o8NnNp"}
6
+ 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"tree":{"type":"root","$ref":{"folder":"","meta":"meta.json"},"$id":"root","name":"Documentation","children":[{"$id":"index.mdx","type":"page","name":"Annodex","description":"浏览器原生的 Codex 工作台。","url":"/docs","$ref":"index.mdx"},{"$id":"quick-start.mdx","type":"page","name":"Quick Start","description":"安装并启动 annodex。","url":"/docs/quick-start","$ref":"quick-start.mdx"},{"$id":"installation-and-deployment.mdx","type":"page","name":"Installation and Deployment","description":"如何安装、启动并部署 annodex。","url":"/docs/installation-and-deployment","$ref":"installation-and-deployment.mdx"},{"$id":"configuration.mdx","type":"page","name":"Configuration","description":"annodex 的配置位置与主要配置对象。","url":"/docs/configuration","$ref":"configuration.mdx"},{"$id":"architecture.mdx","type":"page","name":"Architecture","description":"annodex 的核心结构与数据流。","url":"/docs/architecture","$ref":"architecture.mdx"},{"$id":"workspace.mdx","type":"page","name":"Workspace","description":"annodex 工作台的主要界面组成。","url":"/docs/workspace","$ref":"workspace.mdx"},{"$id":"sessions-and-projects.mdx","type":"page","name":"Sessions and Projects","description":"为什么 annodex 以项目为中心组织会话。","url":"/docs/sessions-and-projects","$ref":"sessions-and-projects.mdx"},{"$id":"models-and-tools.mdx","type":"page","name":"Models and Tools","description":"provider、模型、thinking level 与工具预设的作用。","url":"/docs/models-and-tools","$ref":"models-and-tools.mdx"},{"$id":"runtime-and-sse.mdx","type":"page","name":"Runtime and SSE","description":"annodex 如何显示 agent 的运行态与实时事件。","url":"/docs/runtime-and-sse","$ref":"runtime-and-sse.mdx"},{"$id":"file-and-report-viewing.mdx","type":"page","name":"File Viewing and Outputs","description":"annodex 如何让文件审阅与结果产物查看发生在同一界面。","url":"/docs/file-and-report-viewing","$ref":"file-and-report-viewing.mdx"}]},"tabs":[],"sidebar":{},"nav":{"title":["$","span",null,{"style":{"display":"inline-flex","alignItems":"center","gap":10,"fontWeight":700},"children":[["$","$L3",null,{"iconNode":[["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","key":"afitv7"}],["path",{"d":"M3 9h18","key":"1pudct"}],["path",{"d":"M9 21V9","key":"1oto5p"}]],"className":"lucide-panels-top-left","size":18}],"annodex"]}]},"links":[{"text":"Docs","url":"/docs","icon":["$","$L3",null,{"iconNode":[["path",{"d":"M12 7v14","key":"1akyts"}],["path",{"d":"M16 12h2","key":"7q9ll5"}],["path",{"d":"M16 8h2","key":"msurwy"}],["path",{"d":"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z","key":"ruj8y"}],["path",{"d":"M6 12h2","key":"32wvfc"}],["path",{"d":"M6 8h2","key":"30oboj"}]],"className":"lucide-book-open-text","size":16}],"active":"nested-url"},{"text":"Workspace","url":"/workspace","icon":["$","$L3",null,{"iconNode":[["path",{"d":"m7 11 2-2-2-2","key":"1lz0vl"}],["path",{"d":"M11 13h4","key":"1p7l4v"}],["rect",{"width":"18","height":"18","x":"3","y":"3","rx":"2","ry":"2","key":"1m3agn"}]],"className":"lucide-square-terminal","size":16}],"active":"nested-url"},{"text":"GitHub","url":"https://github.com/seqyuan/annodex","external":true}],"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"c12uc5Ebna-CqP4_lL37X"}
@@ -25,4 +25,4 @@
25
25
  <li>明确默认项目目录规则</li>
26
26
  <li>避免在运行态状态文件中混入长期用户偏好</li>
27
27
  <li>为关键设置保留可审计的保存位置</li>
28
- </ul></div><div class="flex flex-row flex-wrap items-center justify-between gap-4 empty:hidden"></div><div class="@container grid gap-4 grid-cols-2"><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full" href="/docs/installation-and-deployment"><div class="inline-flex items-center gap-1.5 font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg><p>Installation and Deployment</p></div><p class="text-fd-muted-foreground truncate">如何安装、启动并部署 annodex。</p></a><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full text-end" href="/docs/architecture"><div class="inline-flex items-center gap-1.5 font-medium flex-row-reverse"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg><p>Architecture</p></div><p class="text-fd-muted-foreground truncate">annodex 的核心结构与数据流。</p></a></div></article><div id="nd-toc" class="sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 xl:layout:[--fd-toc-width:268px] max-xl:hidden"><h3 id="toc-title" class="inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-text-align-start size-4" aria-hidden="true"><path d="M21 5H3"></path><path d="M15 12H3"></path><path d="M17 19H3"></path></svg>On this page</h3><div class="relative min-h-0 text-sm ms-px overflow-auto [scrollbar-width:none] mask-[linear-gradient(to_bottom,transparent,white_16px,white_calc(100%-16px),transparent)] py-3"><div class="relative"><div class="flex flex-col border-s border-fd-foreground/10"><a data-active="false" href="#配置目录" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">配置目录</a><a data-active="false" href="#配置关注点" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">配置关注点</a><a data-active="false" href="#为什么集中配置很重要" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">为什么集中配置很重要</a><a data-active="false" href="#团队使用建议" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">团队使用建议</a></div></div></div></div><!--$--><!--/$--></div><script src="/_next/static/chunks/webpack-ced9e639bb94bd30.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[67504,[\"8500\",\"static/chunks/8500-f62a38ff68ab7f42.js\",\"5122\",\"static/chunks/5122-6e0d29bd15f079e1.js\",\"7177\",\"static/chunks/app/layout-11cc1f48ff425fd0.js\"],\"RootProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[67197,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4499\",\"static/chunks/app/docs/layout-4809bb9dd4b49bff.js\"],\"LayoutBody\"]\n6:I[99535,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"default\"]\ne:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/7deddc85b7ffd1dc-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/ec14413c594b3356-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/fddca953485158e4.css\",\"style\"]\n:HL[\"/_next/static/css/876e881d7ba02ed2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"docs\",\"configuration\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"docs\",{\"children\":[[\"slug\",\"configuration\",\"oc\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/fddca953485158e4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/876e881d7ba02ed2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_66b8ca\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem(\\\"annodex-theme\\\");if(t===\\\"dark\\\")document.documentElement.classList.add(\\\"dark\\\")}catch(e){}})();\"}}]}],[\"$\",\"body\",null,{\"style\":{\"minHeight\":\"100dvh\",\"display\":\"flex\",\"flexDirection\":\"column\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"tree\":{\"type\":\"root\",\"$ref\":{\"folder\":\"\",\"meta\":\"meta.json\"},\"$id\":\"root\",\"name\":\"Documentation\",\"description\":\"$undefined\",\"children\":[{\"$id\":\"index.mdx\",\"type\":\"page\",\"name\":\"Annodex\",\"description\":\"浏览器原生的 Codex 工作台。\",\"icon\":\"$undefined\",\"url\":\"/docs\",\"$ref\":\"index.mdx\"},{\"$id\":\"quick-start.mdx\",\"type\":\"page\",\"name\":\"Quick Start\",\"description\":\"安装并启动 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/quick-start\",\"$ref\":\"quick-start.mdx\"},{\"$id\":\"installation-and-deployment.mdx\",\"type\":\"page\",\"name\":\"Installation and Deployment\",\"description\":\"如何安装、启动并部署 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/installation-and-deployment\",\"$ref\":\"installation-and-deployment.mdx\"},{\"$id\":\"configuration.mdx\",\"type\":\"page\",\"name\":\"Configuration\",\"description\":\"annodex 的配置位置与主要配置对象。\",\"icon\":\"$undefined\",\"url\":\"/docs/configuration\",\"$ref\":\"configuration.mdx\"},{\"$id\":\"architecture.mdx\",\"type\":\"page\",\"name\":\"Architecture\",\"description\":\"annodex 的核心结构与数据流。\",\"icon\":\"$undefined\",\"url\":\"/docs/architecture\",\"$ref\":\"architecture.mdx\"},{\"$id\":\"workspace.mdx\",\"type\":\"page\",\"name\":\"Workspace\",\"description\":\"annodex 工作台的主要界面组成。\",\"icon\":\"$undefined\",\"url\":\"/docs/workspace\",\"$ref\":\"workspace.mdx\"},{\"$id\":\"sessions-and-projects.mdx\",\"type\":\"page\",\"name\":\"Sessions and Projects\",\"description\":\"为什么 annodex 以项目为中心组织会话。\",\"icon\":\"$undefined\",\"url\":\"/docs/sessions-and-projects\",\"$ref\":\"sessions-and-projects.mdx\"},{\"$id\":\"models-and-tools.mdx\",\"type\":\"page\",\"name\":\"Models and Tools\",\"description\":\"provider、模型、thinking level 与工具预设的作用。\",\"icon\":\"$undefined\",\"url\":\"/docs/models-and-tools\",\"$ref\":\"models-and-tools.mdx\"},{\"$id\":\"runtime-and-sse.mdx\",\"type\":\"page\",\"name\":\"Runtime and SSE\",\"description\":\"annodex 如何显示 agent 的运行态与实时事件。\",\"icon\":\"$undefined\",\"url\":\"/docs/runtime-and-sse\",\"$ref\":\"runtime-and-sse.mdx\"},{\"$id\":\"file-and-report-viewing.mdx\",\"type\":\"page\",\"name\":\"File Viewing and Outputs\",\"description\":\"annodex 如何让文件审阅与结果产物查看发生在同一界面。\",\"icon\":\"$undefined\",\"url\":\"/docs/file-and-report-viewing\",\"$ref\":\"file-and-report-viewing.mdx\"}]},\"tabs\":[],\"tabMode\":\"$undefined\",\"sidebar\":{},\"nav\":{\"title\":[\"$\",\"span\",null,{\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"gap\":10,\"fontWeight\":700},\"children\":[[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"key\":\"afitv7\"}],[\"path\",{\"d\":\"M3 9h18\",\"key\":\"1pudct\"}],[\"path\",{\"d\":\"M9 21V9\",\"key\":\"1oto5p\"}]],\"className\":\"lucide-panels-top-left\",\"size\":18}],\"annodex\"]}]},\"links\":[{\"text\":\"Docs\",\"url\":\"/docs\",\"icon\":\"$L7\",\"active\":\"nested-url\"},{\"text\":\"Workspace\",\"url\":\"/workspace\",\"icon\":\"$L8\",\"active\":\"nested-url\"},{\"text\":\"GitHub\",\"url\":\"https://github.com/seqyuan/annodex\",\"external\":true}],\"children\":\"$L9\"}]]}],{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,null]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"oIqDpdOWwl7oIU6o8NnNp\"}\n"])</script><script>self.__next_f.push([1,"10:I[90484,[],\"OutletBoundary\"]\n11:\"$Sreact.suspense\"\n14:I[90484,[],\"ViewportBoundary\"]\n16:I[90484,[],\"MetadataBoundary\"]\n7:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M12 7v14\",\"key\":\"1akyts\"}],[\"path\",{\"d\":\"M16 12h2\",\"key\":\"7q9ll5\"}],[\"path\",{\"d\":\"M16 8h2\",\"key\":\"msurwy\"}],[\"path\",{\"d\":\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\"key\":\"ruj8y\"}],[\"path\",{\"d\":\"M6 12h2\",\"key\":\"32wvfc\"}],[\"path\",{\"d\":\"M6 8h2\",\"key\":\"30oboj\"}]],\"className\":\"lucide-book-open-text\",\"size\":16}]\n8:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m7 11 2-2-2-2\",\"key\":\"1lz0vl\"}],[\"path\",{\"d\":\"M11 13h4\",\"key\":\"1p7l4v\"}],[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"ry\":\"2\",\"key\":\"1m3agn\"}]],\"className\":\"lucide-square-terminal\",\"size\":16}]\n9:[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$Lf\",null,[\"$\",\"$L10\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@12\"}]}]]}]\n13:[]\nc:\"$W13\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L14\",null,{\"children\":\"$L15\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L17\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n"])</script><script>self.__next_f.push([1,"18:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsPage\"]\n19:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsTitle\"]\n1a:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsDescription\"]\n1b:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsBody\"]\n1c:I[88518,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"Heading\"]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"$L18\",null,{\"toc\":[{\"depth\":2,\"url\":\"#配置目录\",\"title\":\"配置目录\"},{\"depth\":2,\"url\":\"#配置关注点\",\"title\":\"配置关注点\"},{\"depth\":2,\"url\":\"#为什么集中配置很重要\",\"title\":\"为什么集中配置很重要\"},{\"depth\":2,\"url\":\"#团队使用建议\",\"title\":\"团队使用建议\"}],\"full\":\"$undefined\",\"children\":[[\"$\",\"$L19\",null,{\"children\":\"Configuration\"}],[\"$\",\"$L1a\",null,{\"children\":\"annodex 的配置位置与主要配置对象。\"}],[\"$\",\"$L1b\",null,{\"children\":[[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"配置目录\",\"children\":\"配置目录\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"annodex 相关配置主要位于:\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[\"$\",\"code\",null,{\"children\":\"~/.config/annodex\"}]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[\"$\",\"code\",null,{\"children\":\"~/.config/annodex/providers.json\"}]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[\"$\",\"code\",null,{\"children\":\"~/.config/annodex/annodex-projects.json\"}]}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"配置关注点\",\"children\":\"配置关注点\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"常见配置包括:\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"provider / model 列表\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"默认项目目录\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"项目注册信息\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"运行时设置\"}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"为什么集中配置很重要\",\"children\":\"为什么集中配置很重要\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"如果 provider、模型、项目与运行偏好散落在多个地方,系统会变得难以维护,尤其对团队用户而言更不透明。\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"annodex 的设计目标之一,就是让这些配置尽量在同一工作台中可发现、可理解。\"}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"团队使用建议\",\"children\":\"团队使用建议\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"如果多人共享使用环境,建议:\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"统一 provider 配置来源\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"明确默认项目目录规则\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"避免在运行态状态文件中混入长期用户偏好\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"为关键设置保留可审计的保存位置\"}],\"\\n\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"15:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1d:I[86869,[],\"IconMark\"]\n12:null\n17:[[\"$\",\"title\",\"0\",{\"children\":\"Configuration\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"annodex 的配置位置与主要配置对象。\"}],[\"$\",\"link\",\"2\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L1d\",\"4\",{}]]\n"])</script></body></html>
28
+ </ul></div><div class="flex flex-row flex-wrap items-center justify-between gap-4 empty:hidden"></div><div class="@container grid gap-4 grid-cols-2"><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full" href="/docs/installation-and-deployment"><div class="inline-flex items-center gap-1.5 font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg><p>Installation and Deployment</p></div><p class="text-fd-muted-foreground truncate">如何安装、启动并部署 annodex。</p></a><a class="flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full text-end" href="/docs/architecture"><div class="inline-flex items-center gap-1.5 font-medium flex-row-reverse"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right -mx-1 size-4 shrink-0 rtl:rotate-180" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg><p>Architecture</p></div><p class="text-fd-muted-foreground truncate">annodex 的核心结构与数据流。</p></a></div></article><div id="nd-toc" class="sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 xl:layout:[--fd-toc-width:268px] max-xl:hidden"><h3 id="toc-title" class="inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-text-align-start size-4" aria-hidden="true"><path d="M21 5H3"></path><path d="M15 12H3"></path><path d="M17 19H3"></path></svg>On this page</h3><div class="relative min-h-0 text-sm ms-px overflow-auto [scrollbar-width:none] mask-[linear-gradient(to_bottom,transparent,white_16px,white_calc(100%-16px),transparent)] py-3"><div class="relative"><div class="flex flex-col border-s border-fd-foreground/10"><a data-active="false" href="#配置目录" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">配置目录</a><a data-active="false" href="#配置关注点" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">配置关注点</a><a data-active="false" href="#为什么集中配置很重要" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">为什么集中配置很重要</a><a data-active="false" href="#团队使用建议" class="prose py-1.5 text-sm text-fd-muted-foreground scroll-m-4 transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary hover:text-fd-accent-foreground ps-3">团队使用建议</a></div></div></div></div><!--$--><!--/$--></div><script src="/_next/static/chunks/webpack-ced9e639bb94bd30.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[67504,[\"8500\",\"static/chunks/8500-f62a38ff68ab7f42.js\",\"5122\",\"static/chunks/5122-6e0d29bd15f079e1.js\",\"7177\",\"static/chunks/app/layout-11cc1f48ff425fd0.js\"],\"RootProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[67197,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4499\",\"static/chunks/app/docs/layout-4809bb9dd4b49bff.js\"],\"LayoutBody\"]\n6:I[99535,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"default\"]\ne:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/7deddc85b7ffd1dc-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/ec14413c594b3356-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/fddca953485158e4.css\",\"style\"]\n:HL[\"/_next/static/css/876e881d7ba02ed2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"docs\",\"configuration\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"docs\",{\"children\":[[\"slug\",\"configuration\",\"oc\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/fddca953485158e4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/876e881d7ba02ed2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_66b8ca\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem(\\\"annodex-theme\\\");if(t===\\\"dark\\\")document.documentElement.classList.add(\\\"dark\\\")}catch(e){}})();\"}}]}],[\"$\",\"body\",null,{\"style\":{\"minHeight\":\"100dvh\",\"display\":\"flex\",\"flexDirection\":\"column\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"tree\":{\"type\":\"root\",\"$ref\":{\"folder\":\"\",\"meta\":\"meta.json\"},\"$id\":\"root\",\"name\":\"Documentation\",\"description\":\"$undefined\",\"children\":[{\"$id\":\"index.mdx\",\"type\":\"page\",\"name\":\"Annodex\",\"description\":\"浏览器原生的 Codex 工作台。\",\"icon\":\"$undefined\",\"url\":\"/docs\",\"$ref\":\"index.mdx\"},{\"$id\":\"quick-start.mdx\",\"type\":\"page\",\"name\":\"Quick Start\",\"description\":\"安装并启动 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/quick-start\",\"$ref\":\"quick-start.mdx\"},{\"$id\":\"installation-and-deployment.mdx\",\"type\":\"page\",\"name\":\"Installation and Deployment\",\"description\":\"如何安装、启动并部署 annodex。\",\"icon\":\"$undefined\",\"url\":\"/docs/installation-and-deployment\",\"$ref\":\"installation-and-deployment.mdx\"},{\"$id\":\"configuration.mdx\",\"type\":\"page\",\"name\":\"Configuration\",\"description\":\"annodex 的配置位置与主要配置对象。\",\"icon\":\"$undefined\",\"url\":\"/docs/configuration\",\"$ref\":\"configuration.mdx\"},{\"$id\":\"architecture.mdx\",\"type\":\"page\",\"name\":\"Architecture\",\"description\":\"annodex 的核心结构与数据流。\",\"icon\":\"$undefined\",\"url\":\"/docs/architecture\",\"$ref\":\"architecture.mdx\"},{\"$id\":\"workspace.mdx\",\"type\":\"page\",\"name\":\"Workspace\",\"description\":\"annodex 工作台的主要界面组成。\",\"icon\":\"$undefined\",\"url\":\"/docs/workspace\",\"$ref\":\"workspace.mdx\"},{\"$id\":\"sessions-and-projects.mdx\",\"type\":\"page\",\"name\":\"Sessions and Projects\",\"description\":\"为什么 annodex 以项目为中心组织会话。\",\"icon\":\"$undefined\",\"url\":\"/docs/sessions-and-projects\",\"$ref\":\"sessions-and-projects.mdx\"},{\"$id\":\"models-and-tools.mdx\",\"type\":\"page\",\"name\":\"Models and Tools\",\"description\":\"provider、模型、thinking level 与工具预设的作用。\",\"icon\":\"$undefined\",\"url\":\"/docs/models-and-tools\",\"$ref\":\"models-and-tools.mdx\"},{\"$id\":\"runtime-and-sse.mdx\",\"type\":\"page\",\"name\":\"Runtime and SSE\",\"description\":\"annodex 如何显示 agent 的运行态与实时事件。\",\"icon\":\"$undefined\",\"url\":\"/docs/runtime-and-sse\",\"$ref\":\"runtime-and-sse.mdx\"},{\"$id\":\"file-and-report-viewing.mdx\",\"type\":\"page\",\"name\":\"File Viewing and Outputs\",\"description\":\"annodex 如何让文件审阅与结果产物查看发生在同一界面。\",\"icon\":\"$undefined\",\"url\":\"/docs/file-and-report-viewing\",\"$ref\":\"file-and-report-viewing.mdx\"}]},\"tabs\":[],\"tabMode\":\"$undefined\",\"sidebar\":{},\"nav\":{\"title\":[\"$\",\"span\",null,{\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"gap\":10,\"fontWeight\":700},\"children\":[[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"key\":\"afitv7\"}],[\"path\",{\"d\":\"M3 9h18\",\"key\":\"1pudct\"}],[\"path\",{\"d\":\"M9 21V9\",\"key\":\"1oto5p\"}]],\"className\":\"lucide-panels-top-left\",\"size\":18}],\"annodex\"]}]},\"links\":[{\"text\":\"Docs\",\"url\":\"/docs\",\"icon\":\"$L7\",\"active\":\"nested-url\"},{\"text\":\"Workspace\",\"url\":\"/workspace\",\"icon\":\"$L8\",\"active\":\"nested-url\"},{\"text\":\"GitHub\",\"url\":\"https://github.com/seqyuan/annodex\",\"external\":true}],\"children\":\"$L9\"}]]}],{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,null]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"c12uc5Ebna-CqP4_lL37X\"}\n"])</script><script>self.__next_f.push([1,"10:I[90484,[],\"OutletBoundary\"]\n11:\"$Sreact.suspense\"\n14:I[90484,[],\"ViewportBoundary\"]\n16:I[90484,[],\"MetadataBoundary\"]\n7:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M12 7v14\",\"key\":\"1akyts\"}],[\"path\",{\"d\":\"M16 12h2\",\"key\":\"7q9ll5\"}],[\"path\",{\"d\":\"M16 8h2\",\"key\":\"msurwy\"}],[\"path\",{\"d\":\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\"key\":\"ruj8y\"}],[\"path\",{\"d\":\"M6 12h2\",\"key\":\"32wvfc\"}],[\"path\",{\"d\":\"M6 8h2\",\"key\":\"30oboj\"}]],\"className\":\"lucide-book-open-text\",\"size\":16}]\n8:[\"$\",\"$L6\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m7 11 2-2-2-2\",\"key\":\"1lz0vl\"}],[\"path\",{\"d\":\"M11 13h4\",\"key\":\"1p7l4v\"}],[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"ry\":\"2\",\"key\":\"1m3agn\"}]],\"className\":\"lucide-square-terminal\",\"size\":16}]\n9:[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$Lf\",null,[\"$\",\"$L10\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@12\"}]}]]}]\n13:[]\nc:\"$W13\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L14\",null,{\"children\":\"$L15\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$11\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L17\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n"])</script><script>self.__next_f.push([1,"18:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsPage\"]\n19:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsTitle\"]\n1a:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsDescription\"]\n1b:I[39006,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"DocsBody\"]\n1c:I[88518,[\"5166\",\"static/chunks/5166-58bbf85cbd32ad99.js\",\"9278\",\"static/chunks/9278-58ee6294b32318a5.js\",\"4894\",\"static/chunks/4894-e27a35edd6176226.js\",\"7870\",\"static/chunks/app/docs/%5B%5B...slug%5D%5D/page-d232277716ab7921.js\"],\"Heading\"]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"$L18\",null,{\"toc\":[{\"depth\":2,\"url\":\"#配置目录\",\"title\":\"配置目录\"},{\"depth\":2,\"url\":\"#配置关注点\",\"title\":\"配置关注点\"},{\"depth\":2,\"url\":\"#为什么集中配置很重要\",\"title\":\"为什么集中配置很重要\"},{\"depth\":2,\"url\":\"#团队使用建议\",\"title\":\"团队使用建议\"}],\"full\":\"$undefined\",\"children\":[[\"$\",\"$L19\",null,{\"children\":\"Configuration\"}],[\"$\",\"$L1a\",null,{\"children\":\"annodex 的配置位置与主要配置对象。\"}],[\"$\",\"$L1b\",null,{\"children\":[[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"配置目录\",\"children\":\"配置目录\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"annodex 相关配置主要位于:\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[\"$\",\"code\",null,{\"children\":\"~/.config/annodex\"}]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[\"$\",\"code\",null,{\"children\":\"~/.config/annodex/providers.json\"}]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[\"$\",\"code\",null,{\"children\":\"~/.config/annodex/annodex-projects.json\"}]}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"配置关注点\",\"children\":\"配置关注点\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"常见配置包括:\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"provider / model 列表\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"默认项目目录\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"项目注册信息\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"运行时设置\"}],\"\\n\"]}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"为什么集中配置很重要\",\"children\":\"为什么集中配置很重要\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"如果 provider、模型、项目与运行偏好散落在多个地方,系统会变得难以维护,尤其对团队用户而言更不透明。\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"annodex 的设计目标之一,就是让这些配置尽量在同一工作台中可发现、可理解。\"}],\"\\n\",[\"$\",\"$L1c\",null,{\"as\":\"h2\",\"id\":\"团队使用建议\",\"children\":\"团队使用建议\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"如果多人共享使用环境,建议:\"}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"统一 provider 配置来源\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"明确默认项目目录规则\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"避免在运行态状态文件中混入长期用户偏好\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"为关键设置保留可审计的保存位置\"}],\"\\n\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"15:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1d:I[86869,[],\"IconMark\"]\n12:null\n17:[[\"$\",\"title\",\"0\",{\"children\":\"Configuration\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"annodex 的配置位置与主要配置对象。\"}],[\"$\",\"link\",\"2\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L1d\",\"4\",{}]]\n"])</script></body></html>