Files
AIclinicalresearch/docs/08-项目管理/PKB精细化优化报告.md
HaHafeng 1b53ab9d52 feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
2026-01-14 19:15:01 +08:00

14 KiB
Raw Blame History

PKB<EFBFBD>滨垢蝎曄<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡝗𥁒<EFBFBD>?

<EFBFBD><EFBFBD> 隡睃<E99AA1><EFBFBD><E79281>

隡睃<EFBFBD><EFBFBD>園𡢿: 2026-01-06
隡睃<EFBFBD>靘脲旿: 銝𤾸<EFBFBD><EFBFBD>见㦛<EFBFBD><EFBFBD>榆頝?md <20><>
隡睃<EFBFBD><EFBFBD><EFBFBD>: <20>𣂼<EFBFBD>鈭批<E988AD>蝎曇稲摨佗<E691A8>100%餈睃<E9A488>霈曇恣蝔? **隡睃<E99AA1><E79D83><EFBFBD>?*: <20>?*撌脣<EFBFBD><EFBFBD>?


<EFBFBD>㴓 隡睃<E99AA1>靘脲旿<E884B2><E697BF><EFBFBD>

<EFBFBD>寞旿撌株<EFBFBD><EFBFBD><EFBFBD>﹝嚗䔶蜓閬<EFBFBD>䔮憸㗛<EFBFBD>銝剖銁隞乩<EFBFBD>4銝芣䲮<EFBFBD><EFBFBD>

1. <20><EFBFBD><EFBFBD><E692A3>銝𡡞𡢿頝?

  • <EFBFBD>?憿菟𢒰颲寡<E9A2B2><EFBFBD><E9A488><EFBFBD><EFBFBD><EFBFBD><E98A9D>?
  • <EFBFBD>?<3F><EFBFBD>/<2F><EFBFBD><E7AE8F><EFBFBD><EFBFBD><E9A488>
  • <EFBFBD>?<3F><>捆韐渲器嚗𣬚撩銋誩鐤<E8AAA9><EFBFBD>

2. 摮𦯀<E691AE>銝擧<E98A9D><E693A7>?

  • <EFBFBD>?<3F><><EFBFBD>摮烾<E691AE>銝滩雲
  • <EFBFBD>?颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>憸𡏭𠧧餈<F0A0A7A7>
  • <EFBFBD>?銵屸<E98AB5><EFBFBD><E9A488>

3. 蝏<>辣銝舘<E98A9D>閫㗇甅撘?

  • <EFBFBD>?<3F><><EFBFBD>銝滨<E98A9D><EFBFBD>
  • <EFBFBD>?蝻箏<E89DBB>頧餃凝<E9A483>游蔣
  • <EFBFBD>?颲寞<E9A2B2>憸𡏭𠧧餈<F0A0A7A7>

4. 撖潸⏛銝𡡞▲<F0A1A19E><EFBFBD>

  • <EFBFBD>?憿園<E686BF><E59C92><EFBFBD>摨虫<E691A8>頞?
  • <EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD><E88AB8><EFBFBD>銝?

<EFBFBD>?隡睃<E99AA1>摰墧鴌霂行<E99C82>

1儭謿<EFBFBD> 摮𦯀<E691AE>銝擧<E98A9D><E693A7><EFBFBD><EFBFBD><EFBFBD>?

<EFBFBD><EFBFBD><EFBFBD>摮烾<EFBFBD><EFBFBD><EFBFBD>

// 靽格㺿<E6A0BC>?
<span className="font-bold text-slate-800"><EFBFBD><EFBFBD><EFBFBD><EFBFBD></span>

// 靽格㺿<E6A0BC>?
<span className="font-semibold text-slate-800 text-sm"><EFBFBD><EFBFBD><EFBFBD><EFBFBD></span>

**<2A><EFBFBD><E5AFA1>?*:

  • font-bold (700) <20>?font-semibold (600)嚗𡁏凒<F0A1818F><EFBFBD>
  • 蝏煺<EFBFBD>摮堒噡銝?text-sm (14px)

<EFBFBD>𨭌<EFBFBD><EFBFBD><EFBFBD>憸𡏭𠧧隡睃<EFBFBD>

// 靽格㺿<E6A0BC>?
<div className="text-xs text-gray-500 ml-6 mt-1">

// 靽格㺿<E6A0BC>?
<div className="text-xs text-slate-500 ml-6 leading-relaxed">

憸𡏭𠧧撅<EFBFBD>:

  • 銝餅<EFBFBD>憸矋<EFBFBD>text-slate-800 (#1F2937)
  • <EFBFBD><EFBFBD>憸矋<EFBFBD>text-slate-700 (#334155)
  • <EFBFBD>𨭌<EFBFBD><EFBFBD><EFBFBD>嚗䫤text-slate-500` (#64748B)
  • 甈∟<EFBFBD>靽⊥<EFBFBD>嚗䫤text-slate-400` (#94A3B8)

銵屸<EFBFBD>隡睃<EFBFBD>

// 瘛餃<E7989B> leading-relaxed (line-height: 1.625)
<p className="text-sm text-slate-500 mt-1.5 leading-relaxed">
  蝞∠<EFBFBD>霂亦䰻霂<EFBFBD><EFBFBD>銝讠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞塚<EFBFBD><EFBFBD><EFBFBD> MinerU <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
</p>

2儭謿<EFBFBD> <20><EFBFBD>蝏煺<E89D8F>隡睃<E99AA1>

<EFBFBD><EFBFBD>摰孵膥<EFBFBD><EFBFBD>

// 靽格㺿<E6A0BC>?
<div className="p-3 border-b border-gray-100 flex-shrink-0">

// 靽格㺿<E6A0BC>?
<div className="px-5 py-4 border-b border-gray-100 flex-shrink-0 bg-white">

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:

<EFBFBD>箸艶 瘞游像padding <EFBFBD><EFBFBD>凒padding
撌乩<EFBFBD><EFBFBD><EFBFBD>㗇𥋘<EFBFBD>? px-5 (20px) py-4 (16px)
Alert<EFBFBD>鞟內獢? px-6 (24px) py-5 (20px)
Chat<EFBFBD><EFBFBD><EFBFBD>? px-6 (24px) py-4 (16px)
<EFBFBD><EFBFBD><EFBFBD>漣憿? p-6 (24px) -

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>隡睃<EFBFBD>

// Radio.Group<75><EFBFBD>
<Radio.Group className="w-full space-y-4">  {/* space-y-3 <20>?space-y-4 */}

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:

  • space-y-4: 16px嚗㇌adio<69>厰★<E58EB0><EFBFBD>
  • mb-5: 20px嚗<78><EFBFBD><EFBCB7>烾𡢿嚗?
  • mt-1.5: 6px嚗<78><E59A97>憸䀝<E686B8><E4809D>讛膩<E8AE9B><EFBFBD>

3儭謿<EFBFBD> 颲寞<E9A2B2>銝𤾸<E98A9D>閫雴<E996AB><E99BB4>?

颲寞<EFBFBD>憸𡏭𠧧靚<EFBFBD>

// 靽格㺿<E6A0BC>?
border-gray-200  // #E5E7EB

// 靽格㺿<E6A0BC>?
border-gray-100  // #F3F4F6

颲寞<EFBFBD><EFBFBD>:

  • 銝餉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤border-gray-200`
  • 頧餃凝<EFBFBD><EFBFBD><EFBFBD>嚗䫤border-gray-100`
  • Tab<EFBFBD><EFBFBD><EFBFBD>嚗䫤border-gray-100`

<EFBFBD><EFBFBD><EFBFBD>蝏煺<EFBFBD>

// 蝏煺<E89D8F>雿輻鍂 rounded-lg (8px)
<div className="bg-white border border-gray-100 rounded-lg shadow-sm">

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:

<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>? Class
<EFBFBD><EFBFBD>/<2F> 8px rounded-lg
<EFBFBD>厰僼 8px rounded-lg
颲枏<EFBFBD>獢? 12px rounded-xl
憭游<EFBFBD>/<2F><EFBFBD>摰孵膥 8px rounded-lg
<EFBFBD><EFBFBD><EFBFBD>噬蝡? 6px rounded-md

4儭謿<EFBFBD> <20>游蔣隡睃<E99AA1>

瘛餃<EFBFBD>頧餃凝<EFBFBD>游蔣

// 銵冽聢摰孵膥
<div className="bg-white border border-gray-100 rounded-lg shadow-sm">

// <20>厰僼嚗<E583BC>蜓閬<E89C93><E996AC>雿頣<E99BBF>
<Button type="primary" size="large" className="shadow-md font-medium">

<EFBFBD>游蔣撅<EFBFBD>:

shadow-sm:  0 1px 2px rgba(0, 0, 0, 0.05)   /* 頧餃凝<E9A483>游蔣 */
shadow:     0 1px 3px rgba(0, 0, 0, 0.1)    /* <20><><EFBFBD><EFBFBD>游蔣 */
shadow-md:  0 4px 6px rgba(0, 0, 0, 0.1)    /* 銝剔<E98A9D><E58994>游蔣 */

5儭謿<EFBFBD> Tab撖潸⏛隡睃<E99AA1>

擃睃漲<EFBFBD>屸𡢿頝萘移靚?

// 靽格㺿<E6A0BC>?
<div className="... px-6 flex items-center shadow-sm z-20 h-14 flex-shrink-0">
  <div className="flex space-x-8 h-full">

// 靽格㺿<E6A0BC>?
<div className="... px-6 flex items-center z-20 h-12 flex-shrink-0">
  <div className="flex space-x-6 h-full">  {/* space-x-8 <20>?space-x-6 */}

Tab閫<EFBFBD><EFBFBD>:

  • 擃睃漲嚗䫤h-12` (48px)
  • Tab<EFBFBD><EFBFBD>嚗䫤space-x-6` (24px)
  • <EFBFBD><EFBFBD>憭批<EFBFBD>嚗䫤w-4 h-4` (16px)
  • 摮堒噡嚗䫤text-sm` (14px)
  • <EFBFBD>瘣餌𠶖<EFBFBD><EFBFBD><EFBFBD>font-semibold + border-blue-600

6儭謿<EFBFBD> 撌乩<E6928C><E79285><E288AA>㗇𥋘<E39787><EFBFBD><E585B6>?

Collapse蝏<EFBFBD>辣蝎曄<EFBFBD><EFBFBD>?

// 靽格㺿<E6A0BC>?
<Collapse className="mb-4 bg-white border border-gray-200 rounded-xl shadow-sm">
  <Collapse.Panel header={<div className="font-bold text-slate-800"><EFBFBD><EFBFBD> 撌乩<EFBFBD><EFBFBD></div>}>

// 靽格㺿<E6A0BC>?
<Collapse className="bg-white border border-gray-100 rounded-lg shadow-sm" bordered={false}>
  <Collapse.Panel header={
    <div className="font-semibold text-slate-800 text-sm flex items-center">
      <span className="text-base mr-2"><EFBFBD><EFBFBD></span>
      撌乩<EFBFBD><EFBFBD>
    </div>
  }>

**<2A><EFBFBD><E5AFA1>?*:

  • 颲寞<EFBFBD>憸𡏭𠧧嚗䫤border-gray-200 <20>?border-gray-100`
  • <EFBFBD><EFBFBD><EFBFBD>嚗䫤rounded-xl <20>?rounded-lg`
  • <EFBFBD><EFBFBD><EFBFBD>摮烾<EFBFBD>嚗䫤font-bold <20>?font-semibold`
  • 瘛餃<EFBFBD> bordered={false} 蝘駁膄Ant Design暺䁅恕颲寞<E9A2B2>

Radio<EFBFBD>厰★隡睃<EFBFBD>

// 瘥譍葵Radio<69>厰★<E58EB0><E29885><EFBFBD>憸睃<E686B8><E79D83>讛膩<E8AE9B><EFBFBD>
<div className="flex items-center mb-1.5">  {/* 瘛餃<E7989B>mb-1.5 */}
  <Globe className="w-4 h-4 mr-2 text-blue-600" />
  <span className="font-semibold text-slate-800 text-sm"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>粉璅<EFBFBD></span>
</div>
<div className="text-xs text-slate-500 ml-6 leading-relaxed">
  <EFBFBD>㰘蝸<EFBFBD><EFBFBD> {kbInfo.fileCount} <EFBFBD><EFBFBD><EFBFBD><EFBFBD>AI<EFBFBD><EFBFBD><EFBFBD>函䰻閫<EFBFBD><EFBFBD>
</div>

7儭謿<EFBFBD> Progress餈𥕦漲<F0A595A6><EFBFBD><E288A9>?

<EFBFBD>臬耦餈𥕦漲<EFBFBD>∠移蝏<EFBFBD><EFBFBD><EFBFBD>?

// 靽格㺿<E6A0BC>?
<Progress 
  type="circle" 
  percent={calculateTokenUsage()} 
  width={40}
  strokeColor="#3b82f6"
/>

// 靽格㺿<E6A0BC>?
<Progress 
  type="circle" 
  percent={calculateTokenUsage()} 
  width={42}           // 蝔滚之銝<E4B98B><E98A9D>?
  strokeColor="#3b82f6"
  trailColor="#e5e7eb" // 頧券<E9A0A7>憸𡏭𠧧
  strokeWidth={8}      // 蝥踵辺摰賢漲
/>

8儭謿<EFBFBD> Alert<72>鞟內獢<E585A7><E78DA2><EFBFBD>?

蝏𤘪<EFBFBD><EFBFBD>峕甅撘讐移蝏<EFBFBD><EFBFBD>

// 靽格㺿<E6A0BC>?
<Alert
  message="<22><> <20><EFBFBD><E586BD><EFBFBD>粉璅<E79285>嚗𡁜歇<F0A1819C>㰘蝸 X 蝭<><E89DAD><EFBFBD><E78DA2><EFBFBD>?
  description="AI撠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
  type="info"
/>

// 靽格㺿<E6A0BC>?
<Alert
  message={
    <span className="font-semibold text-sm">
      <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>粉璅<EFBFBD>嚗𡁜歇<EFBFBD>㰘蝸 {documents.length} <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
    </span>
  }
  description={
    <span className="text-xs text-slate-600 leading-relaxed">
      AI撠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃蝏潸膩<EFBFBD><EFBFBD><EFBFBD>穃笆瘥𠉛<EFBFBD><EFBFBD>箸艶
    </span>
  }
  type="info"
  className="border-blue-100 bg-blue-50/50"
/>

**<2A><EFBFBD><E5AFA1>?*:

  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤font-semibold`
  • <EFBFBD>讛膩<EFBFBD><EFBFBD><EFBFBD>嚗䫤text-xs text-slate-600 leading-relaxed`
  • <EFBFBD>峕艶隡睃<EFBFBD>嚗䫤bg-blue-50/50` (50%<25>𤩺<EFBFBD>摨?
  • 颲寞<EFBFBD>隡睃<EFBFBD>嚗䫤border-blue-100`

9儭謿<EFBFBD> 銵冽聢隡睃<E99AA1>

<EFBFBD><EFBFBD><EFBFBD>噬蝡𣳇<EFBFBD><EFBFBD>?

// 靽格㺿<E6A0BC>?
<span className="... bg-green-50 text-green-700 border border-green-100">

// 靽格㺿<E6A0BC>?
<span className="inline-flex items-center px-2.5 py-1 rounded-md text-xs font-medium border bg-green-50 text-green-700 border-green-200">
  <CheckCircle2 className="w-3 h-3" />
  <span className="ml-1.5"><EFBFBD><EFBFBD>摰峕<EFBFBD></span>
</span>

**<2A><EFBFBD><E5AFA1>?*:

  • padding憓𧼮<EFBFBD>嚗䫤px-2 py-0.5 <20>?px-2.5 py-1`
  • <EFBFBD><EFBFBD><EFBFBD>嚗䫤rounded <20>?rounded-md`
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤mr-1 <20>?ml-1.5`
  • 颲寞<EFBFBD>憸𡏭𠧧<EFBFBD>䭾楛嚗䫤border-green-100 <20>?border-green-200`

銵冽聢<EFBFBD><EFBFBD>隡睃<EFBFBD>

<Table
  size="middle"  // 瘛餃<E7989B>size
  className="pkb-document-table"  // 瘛餃<E7989B><E9A483><EFBFBD>銋実lass
  columns={[
    {
      title: '<27><><EFBFBD>?,
      render: (text) => (
        <div className="flex items-center py-1">  {/* 瘛餃<E7989B>py-1 */}
          <div className="w-9 h-9 bg-red-50 text-red-500 rounded-lg flex items-center justify-center mr-3 flex-shrink-0">
            <FileText className="w-5 h-5" />
          </div>
          <span className="font-semibold text-slate-700 text-sm">{text}</span>
        </div>
      ),
    },
  ]}
/>

<EFBFBD><EFBFBD>銋攊SS:

/* workspace.css */
.pkb-document-table .ant-table-thead > tr > th {
  background-color: #f9fafb;  /* 銵典仍<E585B8>峕艶 */
  color: #6b7280;             /* 銵典仍<E585B8><E4BB8D><EFBFBD> */
  font-weight: 600;           /* 摮烾<E691AE> */
  padding: 14px 16px;         /* <20><>器頝?*/
  border-bottom: 1px solid #e5e7eb;
}

.pkb-document-table .ant-table-tbody > tr > td {
  padding: 16px;              /* <20><EFBFBD><E8A8AB>廚adding */
  border-bottom: 1px solid #f3f4f6;
}

.pkb-document-table .ant-table-tbody > tr:hover > td {
  background-color: #f9fafb;  /* <20><EFBFBD><E7A08D>峕艶 */
}

<EFBFBD><EFBFBD> <20>峕艶憸𡏭𠧧隡睃<E99AA1>

憭𡁜<EFBFBD>甈∟<EFBFBD><EFBFBD>?

// 憭硋<E686AD>摰孵膥嚗𡁏<E59A97><F0A1818F><EFBFBD><E59597>?
<div className="h-full flex overflow-hidden bg-gray-50">

// Chat<61><EFBFBD>嚗𡁶蒾<F0A181B6><EFBFBD><E884B0>?
<div className="flex-1 flex flex-col bg-white overflow-hidden">

// Alert<72><EFBFBD>嚗𡁶<E59A97><F0A181B6><EFBFBD><E884B0>臬躹<E887AC>?
<div className="flex-shrink-0 px-6 py-5 bg-gray-50 border-b border-gray-100">

<EFBFBD>峕艶撅<EFBFBD>:

  • <EFBFBD><EFBFBD>憭硋<EFBFBD>嚗䫤bg-gray-50` (#F9FAFB)
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>bg-white (#FFFFFF)
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤bg-gray-50` (#F9FAFB)
  • Alert<EFBFBD>峕艶嚗䫤bg-blue-50/50` (<28>𢠃<EFBFBD>𤩺<EFBFBD>)

<EFBFBD><EFBFBD> 隡睃<E99AA1><E79D83><EFBFBD>撖寞<E69296>

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撖寞<EFBFBD>

憿寧𤌍 隡睃<EFBFBD><EFBFBD>? 隡睃<EFBFBD><EFBFBD>? <EFBFBD>𣂼<EFBFBD>摨?
<EFBFBD><EFBFBD><EFBFBD>摮烾<EFBFBD> font-bold (700) font-semibold (600) <EFBFBD>?<3F><EFBFBD>靚?
<EFBFBD>𨭌<EFBFBD><EFBFBD><EFBFBD> text-gray-500 text-slate-500 + leading-relaxed <EFBFBD>?<3F><EFBFBD><E6B994>?
颲寞<EFBFBD>憸𡏭𠧧 border-gray-200 border-gray-100 <EFBFBD>?<3F><EFBFBD><E6B994>?
<EFBFBD><EFBFBD><EFBFBD>憭批<EFBFBD> 銝滨<EFBFBD><EFBFBD> 蝏煺<EFBFBD>8px (rounded-lg) <EFBFBD>?<3F><EFBFBD><E6B8AF>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 銝滩<EFBFBD><EFBFBD>? px-6 py-5 <20><><EFBFBD><EFBFBD>? <EFBFBD>?<3F><EFBFBD><E6B8B2>?
<EFBFBD>游蔣<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> shadow-sm頧餃凝<E9A483>游蔣 <EFBFBD>?<3F><EFBFBD>雿?
Tab擃睃漲 56px (餈<><E9A488>) 48px (蝎曉<E89D8E>) <EFBFBD>?<3F>渡移<E6B8A1>?
<EFBFBD><EFBFBD><EFBFBD>噬蝡? <EFBFBD><EFBFBD>? 蝎曇稲<EFBFBD><EFBFBD>+<2B><EFBFBD> <EFBFBD>?<3F><EFBFBD>銝?

<EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>撖寞<EFBFBD>

摮𦯀<EFBFBD><EFBFBD>

- <20><><EFBFBD>: font-bold
+ <20><><EFBFBD>: font-semibold

- <20>讛膩: text-xs text-gray-500
+ <20>讛膩: text-xs text-slate-500 leading-relaxed

<EFBFBD><EFBFBD><EFBFBD>

- padding: p-3 (12px)
+ padding: px-5 py-4 (20px/16px)

- margin: mb-3 (12px)
+ margin: mb-5 (20px)

憸𡏭𠧧撅<EFBFBD>

- 颲寞<E9A2B2>: border-gray-200 (#E5E7EB)
+ 颲寞<E9A2B2>: border-gray-100 (#F3F4F6)

- 颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>: text-gray-500
+ 颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>: text-slate-500

<EFBFBD><EFBFBD> 靽格㺿<E6A0BC><E3BABF>辣皜<E8BEA3><E79A9C>

靽格㺿<EFBFBD><EFBFBD>辣嚗?銝迎<E98A9D>

frontend-v2/src/modules/pkb/
<0A><EFBFBD><E98EBF><EFBFBD> pages/
<0A>?  <20><EFBFBD><E5A999><EFBFBD> WorkspacePage.tsx       (<28>券𢒰蝎曄<E89D8E><E69B84><EFBFBD><E7A2B6>?
<0A><EFBFBD><E98EBF><EFBFBD> components/Workspace/
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> WorkModeSelector.tsx    (摮𦯀<E691AE><F0A6AF80><EFBFBD>𡢿頝腈<E9A09D><E88588><EFBFBD>閫雴<E996AB><E99BB4>?
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> FullTextMode.tsx        (Alert<72><EFBFBD>隡睃<E99AA1>)
<0A>?  <20><EFBFBD><E5A999><EFBFBD> DeepReadMode.tsx        (Alert<72><EFBFBD>隡睃<E99AA1>)
<0A><EFBFBD><E5A999><EFBFBD> styles/
    <20><EFBFBD><E5A999><EFBFBD> workspace.css           (<28><EFBFBD><E595A3><EFBFBD>銋㗇甅撘?

<EFBFBD>綫 霈曇恣閫<E681A3><E996AB><EFBFBD><EFBFBD>

憸𡏭𠧧閫<EFBFBD><EFBFBD>

const colors = {
  // <20><><EFBFBD>憸𡏭𠧧
  primary: '#1F2937',    // text-slate-800 (銝餅<E98A9D>憸?
  secondary: '#334155',  // text-slate-700 (<28><EFBFBD>憸?
  tertiary: '#64748B',   // text-slate-500 (颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>)
  quaternary: '#94A3B8', // text-slate-400 (甈∟<E79488>靽⊥<E99DBD>)
  
  // 颲寞<E9A2B2>憸𡏭𠧧
  border: '#F3F4F6',     // border-gray-100 (頧餃凝<E9A483><E5879D><EFBFBD>)
  borderStrong: '#E5E7EB', // border-gray-200 (<28>擧遬<E693A7><E981AC><EFBFBD>)
  
  // <20>峕艶憸𡏭𠧧
  bgPrimary: '#FFFFFF',  // bg-white (銝餉<E98A9D><E9A489>?
  bgSecondary: '#F9FAFB', // bg-gray-50 (甈∟<E79488><E2889F>?
};

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

const spacing = {
  // 瘞游像padding
  px: {
    xs: 'px-3',  // 12px
    sm: 'px-4',  // 16px
    md: 'px-5',  // 20px
    lg: 'px-6',  // 24px
  },
  
  // <20><>凒padding
  py: {
    xs: 'py-2',  // 8px
    sm: 'py-3',  // 12px
    md: 'py-4',  // 16px
    lg: 'py-5',  // 20px
  },
  
  // 蝏<><EFBFBD><EFBFBD>
  gap: {
    sm: 'space-y-3',  // 12px
    md: 'space-y-4',  // 16px
    lg: 'space-y-6',  // 24px
  },
};

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

const borderRadius = {
  sm: 'rounded-md',   // 6px (敺賜<E695BA>)
  md: 'rounded-lg',   // 8px (<28><EFBFBD><E288A0><EFBFBD><EFBFBD><EFBFBD>?
  lg: 'rounded-xl',   // 12px (颲枏<E9A2B2>獢?
  full: 'rounded-full', // 9999px (憭游<E686AD>)
};

<EFBFBD>游蔣閫<EFBFBD><EFBFBD>

const shadows = {
  sm: 'shadow-sm',   // 頧餃凝<E9A483>游蔣 (<28><EFBFBD>)
  md: 'shadow',      // <20><><EFBFBD><EFBFBD>游蔣 (撘寧<E69298>)
  lg: 'shadow-md',   // 銝剔<E98A9D><E58994>游蔣 (銝餅<E98A9D><E9A485>?
  xl: 'shadow-lg',   // 憭折狍敶?(璅⊥<E79285><E28AA5><EFBFBD>)
};

摮𦯀<EFBFBD><EFBFBD><EFBFBD>

const typography = {
  // 摮烾<E691AE>
  weight: {
    medium: 'font-medium',    // 500 (甈∟<E79488><E2889F><EFBFBD><EFBFBD>)
    semibold: 'font-semibold', // 600 (銝餉<E98A9D><E9A489><EFBFBD><EFBFBD>)
    bold: 'font-bold',        // 700 (<28><EFBFBD>撘箄<E69298>)
  },
  
  // 摮堒噡
  size: {
    xs: 'text-xs',    // 12px (颲<>𨭌霂湔<E99C82>)
    sm: 'text-sm',    // 14px (甇<><E79487>)
    base: 'text-base', // 16px (<28><><EFBFBD>)
    lg: 'text-lg',    // 18px (憭扳<E686AD>憸?
  },
  
  // 銵屸<E98AB5>
  leading: {
    normal: 'leading-normal',   // 1.5
    relaxed: 'leading-relaxed', // 1.625
  },
};

<EFBFBD>?撉諹<E69289><EFBFBD><E79A9C>

<EFBFBD>◆撉諹<EFBFBD>嚗㇊0嚗?

  • Tab撖潸⏛擃睃漲銝?8px
  • 摮𦯀<EFBFBD>雿輻鍂font-semibold
  • 颲寞<EFBFBD>憸𡏭𠧧銝槓order-gray-100
  • <EFBFBD><EFBFBD><EFBFBD>蝏煺<EFBFBD>銝氳ounded-lg (8px)
  • <EFBFBD><EFBFBD>蝏煺<EFBFBD>嚗īx-6 py-5蝑㚁<E89D91>
  • 頧餃凝<EFBFBD>游蔣<EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD>𨭌<EFBFBD><EFBFBD><EFBFBD>憸𡏭𠧧瘛<EFBFBD>

摨磰砲撉諹<EFBFBD>嚗㇊1嚗?

  • 銵冽聢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD><EFBFBD><EFBFBD>噬蝡䭾甅撘讐移<EFBFBD>?
  • Alert<EFBFBD>峕艶<EFBFBD>𢠃<EFBFBD>𤩺<EFBFBD>
  • Progress餈𥕦漲<EFBFBD><EFBFBD><EFBFBD>?

<EFBFBD>臭誑隡睃<EFBFBD>嚗㇊2嚗?

  • <EFBFBD>函𤫇餈<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD><EFBFBD>撘誩<EFBFBD><EFBFBD>隡睃<EFBFBD>
  • 瘛梯𠧧璅<EFBFBD><EFBFBD><EFBFBD>

<EFBFBD>働 霈曇恣<E69B87><EFBFBD><E7AC94><EFBFBD>

<EFBFBD>寞旿撌株<EFBFBD><EFBFBD><EFBFBD>﹝嚗峕<EFBFBD>隞祇<EFBFBD>敺芯<EFBFBD>隞乩<EFBFBD>霈曇恣<EFBFBD><EFBFBD>嚗?

1. 閫<><E996AB><EFBFBD>漣皜<E6BCA3>

  • <EFBFBD>?<3F><><EFBFBD>雿輻鍂font-semibold嚗𣬚<E59A97><F0A3AC9A><EFBFBD><E7B2B9>?
  • <EFBFBD>?颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>憸𡏭𠧧瘛<E7989B>嚗峕<E59A97><EFBFBD><EFBFBD>
  • <EFBFBD>?<3F><EFBFBD><E6B8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘?

2. 蝏<><E89D8F>蝎曇稲

  • <EFBFBD>?<3F><><EFBFBD>蝏煺<E89D8F>銝?px
  • <EFBFBD>?頧餃凝<E9A483>游蔣憓𧼮<E68693>蝡衤<E89DA1><E8A1A4>?
  • <EFBFBD>?颲寞<E9A2B2>憸𡏭𠧧瘛<E7989B>嚗峕凒<E5B395>𥪜<EFBFBD>

3. <20><EFBFBD><E6B8B2><EFBFBD>?

  • <EFBFBD>?憿菟𢒰颲寡<E9A2B2>20-24px
  • <EFBFBD>?蝏<><EFBFBD><EFBFBD>16-20px
  • <EFBFBD>?<3F><>捆銝滩斐颲?

4. 憸𡏭𠧧<F0A18FAD><EFBFBD>

  • <EFBFBD>?銝餅<E98A9D>摮?1F2937
  • <EFBFBD>?颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>#64748B
  • <EFBFBD>?颲寞<E9A2B2>#F3F4F6

隡睃<EFBFBD>摰峕<EFBFBD><EFBFBD>園𡢿: 2026-01-06
**隡睃<E99AA1>鈭?: AI Assistant
**撉諹<E69289><E8ABB9><EFBFBD>?
: 敺<><EFBFBD><EFBFBD><E79195>圈△<E59C88>霈?