fuli-context 0.2.0 → 0.4.0

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 (91) hide show
  1. package/README.md +94 -25
  2. package/dist/web/assets/ConnectionsPage-CCKWm-6p.js +1 -0
  3. package/dist/web/assets/KnowledgeInspector-BZkB2wJn.js +1 -0
  4. package/dist/web/assets/KnowledgeInspector-CrGYxEob.css +1 -0
  5. package/dist/web/assets/KnowledgeOrganizerPage-CJCNI2Wd.css +1 -0
  6. package/dist/web/assets/KnowledgeOrganizerPage-PXH-TlGt.js +1 -0
  7. package/dist/web/assets/KnowledgePage-CNQXd15y.js +1 -0
  8. package/dist/web/assets/KnowledgeWorkspace-CXPE4GCD.js +4 -0
  9. package/dist/web/assets/OverviewPage-ul7g7HXh.js +1 -0
  10. package/dist/web/assets/PersonalProfilePage-CC40Pw2L.js +1 -0
  11. package/dist/web/assets/PersonalProfilePage-S8ZcG2LU.css +1 -0
  12. package/dist/web/assets/PersonalProjectsPage-CPIEcShD.js +1 -0
  13. package/dist/web/assets/PublicProjectsPage-C700sR7z.js +1 -0
  14. package/dist/web/assets/ReviewPage-7MDDUDgA.js +1 -0
  15. package/dist/web/assets/console-B_Ena2DS.js +5 -0
  16. package/dist/web/assets/identity-CjBwYSMX.js +1 -0
  17. package/dist/web/assets/index-BQRkOwPx.js +2 -0
  18. package/dist/web/assets/{index-Devf7glZ.css → index-CpLDx3of.css} +1 -1
  19. package/dist/web/assets/model-C-5RVIJ2.js +1 -0
  20. package/dist/web/assets/{paths-B790iniO.js → paths-BkULqmGI.js} +1 -1
  21. package/dist/web/assets/{vue-router-BYTAoWT3.js → vue-router-DnD3hUm7.js} +1 -1
  22. package/dist/web/index.html +5 -6
  23. package/graph-provider/fuli_graph/app.py +48 -0
  24. package/graph-provider/fuli_graph/common_knowledge.py +443 -0
  25. package/graph-provider/fuli_graph/common_knowledge_models.py +54 -0
  26. package/graph-provider/fuli_graph/graph_models.py +9 -0
  27. package/graph-provider/fuli_graph/graph_query.py +25 -0
  28. package/graph-provider/fuli_graph/knowledge_audit.py +211 -0
  29. package/graph-provider/fuli_graph/knowledge_feedback_models.py +69 -0
  30. package/graph-provider/fuli_graph/knowledge_management.py +37 -0
  31. package/graph-provider/fuli_graph/knowledge_search.py +24 -2
  32. package/graph-provider/fuli_graph/models.py +69 -0
  33. package/graph-provider/fuli_graph/search_projection.py +59 -0
  34. package/graph-provider/fuli_graph/store_knowledge.py +2 -0
  35. package/graph-provider/pyproject.toml +1 -1
  36. package/npm-shrinkwrap.json +97 -2
  37. package/package.json +2 -1
  38. package/skills/capturing-session-knowledge/SKILL.md +86 -15
  39. package/src/agent-tools/graph-definitions.js +181 -13
  40. package/src/agent-tools/graph-handlers.js +19 -0
  41. package/src/cli/command-registry.js +6 -59
  42. package/src/cli/update-command.js +293 -0
  43. package/src/cli.js +7 -34
  44. package/src/graphiti/agent-knowledge-workflows.js +543 -0
  45. package/src/graphiti/federated-application.js +85 -104
  46. package/src/graphiti/knowledge-provider-mapping.js +91 -0
  47. package/src/graphiti/provider-client.js +15 -0
  48. package/src/graphiti/source-marker.js +1 -7
  49. package/src/graphiti/source-uri.js +29 -0
  50. package/src/http/static-handler.js +29 -3
  51. package/src/mcp/common-knowledge-preview-tokens.js +67 -0
  52. package/src/mcp/create-mcp-server.js +43 -7
  53. package/src/mcp/instructions.js +7 -8
  54. package/src/mcp/lifecycle-audit.js +27 -0
  55. package/src/mcp/task-context-registry.js +93 -0
  56. package/src/mcp/tool-annotations.js +16 -1
  57. package/src/mcp/tool-result.js +24 -0
  58. package/src/runtime-options.js +7 -8
  59. package/src/setup/agent-installation-status.js +14 -2
  60. package/src/setup/agents.js +12 -1
  61. package/src/setup/claude-code-config.js +194 -0
  62. package/src/setup/config-backup.js +20 -5
  63. package/src/setup/options.js +9 -1
  64. package/dist/web/assets/ConnectionsPage-CY6H_mJJ.js +0 -1
  65. package/dist/web/assets/KnowledgeInspector-BSpz5Sfm.js +0 -1
  66. package/dist/web/assets/KnowledgeInspector-CHbB_0rC.css +0 -1
  67. package/dist/web/assets/KnowledgeOrganizerPage-BlEvhPrv.css +0 -1
  68. package/dist/web/assets/KnowledgeOrganizerPage-CvjGPlUc.js +0 -1
  69. package/dist/web/assets/KnowledgePage-Khuo3cNs.js +0 -1
  70. package/dist/web/assets/KnowledgeWorkspace-DVZusvem.js +0 -4
  71. package/dist/web/assets/OverviewPage-DC4C4Fhn.js +0 -1
  72. package/dist/web/assets/PersonalProfilePage-CSV9Mtgz.js +0 -1
  73. package/dist/web/assets/PersonalProfilePage-CVJ3TcRi.css +0 -1
  74. package/dist/web/assets/PersonalProjectsPage-A50EaseQ.js +0 -1
  75. package/dist/web/assets/PublicProjectsPage-BAdO_bae.js +0 -1
  76. package/dist/web/assets/ReviewPage-Dztk2jDG.js +0 -1
  77. package/dist/web/assets/console-tbvTUi6p.js +0 -1
  78. package/dist/web/assets/identity-B3s5CXhv.js +0 -1
  79. package/dist/web/assets/index-DwUDhQKc.js +0 -6
  80. package/dist/web/assets/model-DVT8sjy9.js +0 -1
  81. package/dist/web/assets/runtime-dom.esm-bundler-DttsK21F.js +0 -1
  82. package/src/cli/commands/candidates.js +0 -17
  83. package/src/cli/commands/ingestion.js +0 -32
  84. package/src/cli/commands/reads.js +0 -50
  85. package/src/cli/commands/spaces.js +0 -20
  86. package/src/cli/invocation.js +0 -47
  87. package/src/cli/migrate-command.js +0 -71
  88. package/src/cli/migration-destination.js +0 -117
  89. package/src/storage/import-json.js +0 -70
  90. package/src/storage/legacy-record-validation.js +0 -152
  91. package/src/storage/legacy-snapshot-validation.js +0 -32
@@ -1 +0,0 @@
1
- import{A as e,D as t,L as n,M as r,N as i,P as a,T as o,_ as s,a as c,c as l,d as u,i as d,m as f,nt as p,p as m,t as h,tt as g,u as _,v,y}from"./console-tbvTUi6p.js";import{a as b,n as x,o as S}from"./runtime-dom.esm-bundler-DttsK21F.js";import{n as C,r as w,t as T}from"./identity-B3s5CXhv.js";import{C as E,D,E as O,S as k,T as A,d as j,f as M,g as N,h as P,i as F,l as I,r as L,s as R,u as z,w as B,x as V}from"./model-DVT8sjy9.js";var H=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},U={key:0,open:``,class:`knowledge-confirm-dialog vue-dialog`},W={class:`project-dialog-header`},G=[`disabled`],K={class:`knowledge-confirm-summary`},q={class:`knowledge-confirm-fields`},J={class:`knowledge-confirm-acknowledgement`},Y={key:0,class:`publish-dialog-error`,role:`alert`},X={class:`project-profile-dialog-actions`},ee=[`disabled`],te=[`disabled`],ne=H(y({__name:`KnowledgeConfirmDialog`,props:{item:{},personalSpaceId:{},personalProjectId:{}},emits:[`close`,`saved`],setup(t,{emit:i}){let s=t,c=i,l=h(),g=a(``),v=a(``),y=a(``),C=a(!1),w=a(!1),T=a(``),E=a({kind:`import`,label:`历史记录`}),D=_(()=>s.item?.profileAspect?`这条偏好`:`这条知识`);e(()=>s.item,e=>{if(!e)return;let t=e.evidence.at(0),n=e.confirmationBasis;g.value=n?.existence_reason||t?.source_description||t?.summary||`该内容由已保留的来源记录支持。`,v.value=n?.quadrant_reason||e.reasoningSummary||`该内容在发现时符合“${A(e.originQuadrant)}”:${B(e.originQuadrant)}`,E.value=n?.proposed_by??k(t),y.value=`已核对内容与发现时象限,确认无误。`,C.value=!1,T.value=``},{immediate:!0});async function O(){let e=s.item;if(!(!e||w.value)){if(!e.classificationExplicit)return j(`请先补充发现时象限,再确认这条知识`);if(!g.value.trim())return j(`请说明为什么会有这条知识`);if(!v.value.trim())return j(`请说明为什么属于当前象限`);if(!y.value.trim())return j(`请填写确认说明`);if(!C.value)return j(`请先确认已经核对内容与发现时象限`);w.value=!0,T.value=``;try{await d(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}`,{personalSpaceId:s.personalSpaceId,personalProjectId:s.personalProjectId,action:`confirm`,reason:y.value.trim(),confirmationStatus:`confirmed`,confirmationBasis:{existenceReason:g.value.trim(),quadrantReason:v.value.trim(),proposedBy:E.value,confirmedBy:{kind:`user`,label:`当前用户`},confirmedAt:new Date().toISOString()}}),l.notify(`${D.value}已确认,并记录了确认人和确认时间。`),c(`saved`),c(`close`)}catch(e){T.value=e instanceof Error?e.message:`确认失败`,l.reportError(e)}finally{w.value=!1}}}function k(e){let t={codex:`Codex`,claude_code:`Claude Code`,cursor:`Cursor`,kiro:`Kiro`,other:`其他 Agent`}[e?.source_application??``];return t?{kind:`agent`,label:t}:{kind:`import`,label:`历史记录`}}function j(e){T.value=e}return(e,i)=>t.item?(o(),f(`dialog`,U,[u(`form`,{class:`knowledge-confirm-dialog-shell`,onSubmit:S(O,[`prevent`])},[u(`header`,W,[u(`div`,null,[i[6]||=u(`p`,{class:`eyebrow`},`KNOWLEDGE CONFIRMATION`,-1),u(`h3`,null,`确认`+p(D.value),1),i[7]||=u(`p`,null,`确认表示你已核对内容与发现时象限;系统会记录当前用户和确认时间。`,-1)]),u(`button`,{class:`secondary-action`,type:`button`,disabled:w.value,onClick:i[0]||=e=>c(`close`)},` 关闭 `,8,G)]),u(`section`,K,[u(`span`,null,p(t.item.profileAspect?`协作偏好`:`知识内容`),1),u(`strong`,null,p(t.item.title),1),u(`p`,null,p(t.item.body),1),u(`small`,null,`发现时象限 · `+p(n(A)(t.item.originQuadrant)),1)]),u(`div`,q,[u(`label`,null,[i[8]||=u(`span`,null,`为什么会有这条知识`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[1]||=e=>g.value=e,name:`confirmation-existence-reason`,maxlength:`4096`,rows:`3`,required:``},null,512),[[b,g.value]])]),u(`label`,null,[i[9]||=u(`span`,null,`为什么属于当前象限`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[2]||=e=>v.value=e,name:`confirmation-quadrant-reason`,maxlength:`4096`,rows:`3`,required:``},null,512),[[b,v.value]])]),u(`label`,null,[i[10]||=u(`span`,null,`确认说明`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[3]||=e=>y.value=e,name:`confirmation-reason`,maxlength:`2000`,rows:`2`,required:``},null,512),[[b,y.value]])])]),u(`label`,J,[r(u(`input`,{"onUpdate:modelValue":i[4]||=e=>C.value=e,name:`confirmation-acknowledged`,type:`checkbox`},null,512),[[x,C.value]]),i[11]||=u(`span`,null,`我已核对这条内容及其发现时象限,并确认上述依据准确。`,-1)]),T.value?(o(),f(`p`,Y,p(T.value),1)):m(``,!0),u(`footer`,X,[u(`button`,{class:`secondary-action`,type:`button`,disabled:w.value,onClick:i[5]||=e=>c(`close`)},` 取消 `,8,ee),u(`button`,{class:`primary-action`,type:`submit`,disabled:w.value||!C.value},p(w.value?`正在确认…`:`确认${D.value}`),9,te)])],32)])):m(``,!0)}}),[[`__scopeId`,`data-v-65eb248e`]]),re={key:0,open:``,class:`project-dialog knowledge-edit-dialog vue-dialog`},ie={class:`project-dialog-shell`},ae={class:`project-dialog-header`},oe={class:`knowledge-edit-columns`},se={key:0},ce={key:1},le={key:2},ue={class:`knowledge-taxonomy-fields`},de={class:`knowledge-classification-warning`},fe={key:3,class:`knowledge-classification-warning`},pe={class:`knowledge-confirmation-fields`},me={class:`knowledge-taxonomy-fields`},he={key:4,class:`knowledge-replacement-fields`},ge={key:0},_e={class:`knowledge-replacement-fields`},ve={key:5,class:`publish-dialog-error`,role:`alert`},ye={class:`knowledge-editor-actions`},be=[`disabled`],xe=[`disabled`],Se=[`disabled`],Ce=[`disabled`],we={key:0},Te=[`disabled`],Ee={key:1},De={key:0},Oe=[`disabled`],ke=y({__name:`KnowledgeEditDialog`,props:{item:{},personalSpaceId:{},personalProjectId:{},projects:{},replacementItems:{default:()=>[]}},emits:[`close`,`saved`],setup(t,{emit:g}){let y=t,x=g,E=h(),D=a(!1),O=a(``),k=a(``),j=a(``),M=a(`global`),N=a(``),P=a(``),F=a(``),I=a(``),L=i({name:``,summary:``,fact:``,currentQuadrant:``,confirmationStatus:`pending`,existenceReason:``,quadrantReason:``,proposedByKind:`agent`,proposedByLabel:``,confirmedByKind:`user`,confirmedByLabel:``,profileAspect:`none`,inheritanceMode:`local_only`,reason:``}),R=_(()=>y.item?.itemKind===`relationship`),z=_(()=>!!y.item?.invalidAt),B=_(()=>!!y.item?.raw.profile_aspect),V=_(()=>y.projects.map(e=>({value:e.project_id,label:e.profile.name,meta:`#${T(e.project_id,26)}`,search:C(e.project_id)}))),H=[{value:`known_known`,label:`已知的已知 · 被明确表达的知识或结论`},{value:`known_unknown`,label:`已知的未知 · 被明确提出的未解问题`},{value:`unknown_known`,label:`未知的已知 · 从行为或反馈提炼的隐性知识`},{value:`unknown_unknown`,label:`未知的未知 · 探索中发现的潜在盲点`}],U=[{value:`pending`,label:`待确认 · 尚未完成内容与象限审核`},{value:`confirmed`,label:`已确认 · 内容与象限归类均已确认`}],W=[{value:`local_only`,label:`仅当前项目 · 不自动借给其他项目`},{value:`descendants`,label:`子项目可继承 · 仅沿明确知识关系`},{value:`selected_projects`,label:`仅指定项目可继承`}],G=[{value:`user`,label:`用户`},{value:`agent`,label:`Agent`},{value:`authoritative_source`,label:`权威来源`},{value:`import`,label:`导入记录`}],K=[{value:`user`,label:`用户`},{value:`authoritative_source`,label:`权威来源`}],q=[{value:`none`,label:`不属于协作偏好`},{value:`taste`,label:`品味`},{value:`personality`,label:`个性`},{value:`judgment_preference`,label:`判断偏好`}],J=_(()=>[{value:`global`,label:`个人全局`},{value:`project`,label:`指定个人项目`,disabled:y.projects.length===0}]),Y=_(()=>[{value:``,label:`没有明确的替代内容`},...y.replacementItems.filter(e=>!e.invalidAt&&(e.itemKind!==y.item?.itemKind||e.id!==y.item?.id)).map(e=>({value:Me(e.itemKind,e.id),label:e.title,meta:e.type,search:`${e.body} ${e.id}`}))]),X=_(()=>{if(!I.value)return null;try{let[e,t]=JSON.parse(I.value);return e!==`entity`&&e!==`relationship`||typeof t!=`string`?null:{itemKind:e,id:t}}catch{return null}}),ee=_(()=>y.item?.assignments.at(0)?.project_id??y.item?.evidence.find(({personal_project_id:e})=>e)?.personal_project_id??y.personalProjectId??null);e(()=>y.item,e=>{if(!e)return;let t=e.raw;L.name=e.itemKind===`entity`?t.name:``,L.summary=e.itemKind===`entity`?t.summary??``:``,L.fact=e.itemKind===`relationship`?t.fact??``:``;let n=e.confirmationBasis,r=e.evidence.at(0);L.currentQuadrant=e.classificationExplicit?t.current_quadrant??t.origin_quadrant??`known_known`:``,L.confirmationStatus=e.confirmationStatus===`confirmed`?`confirmed`:`pending`,L.existenceReason=n?.existence_reason??r?.source_description??r?.summary??``,L.quadrantReason=n?.quadrant_reason??t.reasoning_summary??``,L.proposedByKind=n?.proposed_by.kind??`agent`,L.proposedByLabel=n?.proposed_by.label??``,L.confirmedByKind=n?.confirmed_by?.kind??`user`,L.confirmedByLabel=n?.confirmed_by?.label??``,L.profileAspect=t.profile_aspect??`none`,L.inheritanceMode=t.profile_aspect?`local_only`:t.inheritance_mode??`local_only`,F.value=t.inherited_project_ids?.at(0)??y.projects[0]?.project_id??``,L.reason=``,k.value=``,j.value=ee.value??y.projects[0]?.project_id??``,M.value=t.preference_scope??`global`,N.value=t.preference_project_id??y.projects[0]?.project_id??``,P.value=``,I.value=e.replacedByItemId&&e.replacedByItemKind?Me(e.replacedByItemKind,e.replacedByItemId):``,O.value=``},{immediate:!0});async function te(){let e=y.item;if(!e)return;if(!L.reason.trim())return $(`请说明纠正原因`);if(!R.value&&!L.name.trim())return $(`名称不能为空`);if(R.value&&!L.fact.trim())return $(`关系事实不能为空`);if(!L.currentQuadrant||!L.confirmationStatus)return $(`请先明确当前分类与确认状态`);if(!L.existenceReason.trim())return $(`请说明为什么会有这条知识`);if(!L.quadrantReason.trim())return $(`请说明为什么被分到这个象限`);if(!L.proposedByKind)return $(`请选择提出者`);if(L.confirmationStatus===`confirmed`&&!L.confirmedByKind)return $(`已确认状态必须记录确认者`);if(L.inheritanceMode===`selected_projects`&&!F.value)return $(`请选择可以继承这条知识的项目`);let t={...Z(`update`),confirmationStatus:L.confirmationStatus,confirmationBasis:{existenceReason:L.existenceReason.trim(),quadrantReason:L.quadrantReason.trim(),proposedBy:{kind:L.proposedByKind,label:L.proposedByLabel.trim()||null},confirmedBy:L.confirmationStatus===`confirmed`?{kind:L.confirmedByKind,label:L.confirmedByLabel.trim()||null}:null,confirmedAt:L.confirmationStatus===`confirmed`?new Date().toISOString():null},profileAspect:L.profileAspect,inheritanceMode:L.profileAspect===`none`?L.inheritanceMode:`local_only`,inheritedProjectIds:L.profileAspect===`none`&&L.inheritanceMode===`selected_projects`?[F.value]:[],reasoningSummary:L.quadrantReason.trim()};y.item.classificationExplicit?t.currentQuadrant=L.currentQuadrant:t.originQuadrant=L.currentQuadrant,R.value?t.fact=L.fact.trim():(t.name=L.name.trim(),t.summary=L.summary.trim()),await Q(async()=>{await d(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}`,t),E.notify(`知识已纠正,原始证据仍然保留。`)})}async function ne(e){let t=y.item;if(t){if(!L.reason.trim())return $(e===`invalidate`?`请说明为什么这条知识已经失效`:`请说明为什么恢复有效`);await Q(async()=>{let n=Z(e);e===`invalidate`&&X.value&&(n.replacementItemId=X.value.id,n.replacementItemKind=X.value.itemKind),await d(`/api/knowledge/${t.itemKind}/${encodeURIComponent(t.id)}`,n),E.notify(e===`invalidate`?X.value?`知识已标记为失效,并已关联替代内容。`:`知识已标记为失效,历史记录已保留。`:`知识已恢复为有效。`)})}}async function ke(){let e=y.item,t=X.value;if(!(!e||!z.value)){if(!t)return $(`请选择明确的替代内容`);if(!L.reason.trim())return $(`请说明补充替代关联的依据`);await Q(async()=>{await d(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}`,{...Z(`link_replacement`),replacementItemId:t.id,replacementItemKind:t.itemKind}),E.notify(`替代关联已保存,现在可以从历史记录直接跳转。`)})}}async function Ae(){let e=y.item;if(e){if(!j.value)return $(`请选择目标个人项目`);if(!k.value.trim())return $(`请说明调整原因`);if(j.value===ee.value)return $(`这条知识已经属于该项目`);await Q(async()=>{await c(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}/assignment`,{personalSpaceId:y.personalSpaceId,targetProjectId:j.value,reason:k.value.trim()}),E.notify(`项目归属已调整,来源会话和历史证据没有改变。`)})}}async function je(){let e=y.item;if(!e)return;let t=M.value===`project`?N.value:null;if(M.value===`project`&&!t)return $(`请选择生效的个人项目`);if(!P.value.trim())return $(`请说明为什么调整生效范围`);await Q(async()=>{await c(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}/preference-scope`,{personalSpaceId:y.personalSpaceId,scope:M.value,projectId:t,reason:P.value.trim()}),E.notify(M.value===`global`?`这条协作偏好现在对所有个人项目生效。`:`这条协作偏好现在只对所选个人项目生效。`)})}function Z(e){return{personalSpaceId:y.personalSpaceId,personalProjectId:y.personalProjectId,action:e,reason:L.reason.trim()}}function Me(e,t){return JSON.stringify([e,t])}async function Q(e){D.value=!0,O.value=``;try{await e(),x(`close`),x(`saved`)}catch(e){O.value=e instanceof Error?e.message:`保存失败`,E.reportError(e)}finally{D.value=!1}}function $(e){O.value=e}return(e,i)=>t.item?(o(),f(`dialog`,re,[u(`div`,ie,[u(`header`,ae,[u(`div`,null,[i[24]||=u(`p`,{class:`eyebrow`},`PERSONAL KNOWLEDGE`,-1),u(`h3`,null,p(z.value?`查看和恢复知识`:`纠正知识`),1),i[25]||=u(`p`,null,`修改会新增修订历史;发现时象限保持不变,当前分类可纠正,确认状态记录审核结果。`,-1)]),u(`button`,{class:`secondary-action`,type:`button`,onClick:i[0]||=e=>x(`close`)},`关闭`)]),u(`div`,oe,[u(`section`,null,[i[46]||=u(`h4`,null,`当前内容`,-1),u(`form`,{class:`knowledge-editor-form`,onSubmit:S(te,[`prevent`])},[R.value?m(``,!0):(o(),f(`label`,se,[i[26]||=s(`名称`,-1),r(u(`input`,{"onUpdate:modelValue":i[1]||=e=>L.name=e,maxlength:`512`},null,512),[[b,L.name]])])),R.value?(o(),f(`label`,le,[i[28]||=s(`关系事实`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[3]||=e=>L.fact=e,maxlength:`8192`,rows:`5`},null,512),[[b,L.fact]])])):(o(),f(`label`,ce,[i[27]||=s(`说明`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[2]||=e=>L.summary=e,maxlength:`4096`,rows:`5`},null,512),[[b,L.summary]])])),u(`div`,ue,[u(`label`,null,[i[29]||=s(`当前分类 `,-1),v(w,{modelValue:L.currentQuadrant,"onUpdate:modelValue":i[4]||=e=>L.currentQuadrant=e,options:H,label:`当前分类`},null,8,[`modelValue`])]),u(`label`,null,[i[30]||=s(`确认状态 `,-1),v(w,{modelValue:L.confirmationStatus,"onUpdate:modelValue":i[5]||=e=>L.confirmationStatus=e,options:U,label:`确认状态`},null,8,[`modelValue`])]),u(`label`,null,[i[31]||=s(`协作偏好维度 `,-1),v(w,{modelValue:L.profileAspect,"onUpdate:modelValue":i[6]||=e=>L.profileAspect=e,options:q,label:`协作偏好维度`},null,8,[`modelValue`])])]),u(`p`,de,` 发现时象限:`+p(n(A)(t.item.originQuadrant))+`。这是捕获来源标签,后续编辑不会覆盖。 `,1),t.item.classificationExplicit?m(``,!0):(o(),f(`p`,fe,` 这条旧内容没有显式象限。保存前请人工选择,系统不会再自动补成“已知的已知”。 `)),u(`fieldset`,pe,[i[38]||=u(`legend`,null,`确认依据`,-1),u(`label`,null,[i[32]||=s(`为什么会有这条知识 `,-1),r(u(`textarea`,{"onUpdate:modelValue":i[7]||=e=>L.existenceReason=e,maxlength:`4096`,rows:`3`,required:``},null,512),[[b,L.existenceReason]])]),u(`label`,null,[i[33]||=s(`为什么被分到这个象限 `,-1),r(u(`textarea`,{"onUpdate:modelValue":i[8]||=e=>L.quadrantReason=e,maxlength:`4096`,rows:`3`,required:``},null,512),[[b,L.quadrantReason]])]),u(`div`,me,[u(`label`,null,[i[34]||=s(`提出者 `,-1),v(w,{modelValue:L.proposedByKind,"onUpdate:modelValue":i[9]||=e=>L.proposedByKind=e,options:G,label:`提出者`},null,8,[`modelValue`])]),u(`label`,null,[i[35]||=s(`提出者说明 `,-1),r(u(`input`,{"onUpdate:modelValue":i[10]||=e=>L.proposedByLabel=e,maxlength:`160`,placeholder:`可选,例如 Codex`},null,512),[[b,L.proposedByLabel]])]),L.confirmationStatus===`confirmed`?(o(),f(l,{key:0},[u(`label`,null,[i[36]||=s(`确认者 `,-1),v(w,{modelValue:L.confirmedByKind,"onUpdate:modelValue":i[11]||=e=>L.confirmedByKind=e,options:K,label:`确认者`},null,8,[`modelValue`])]),u(`label`,null,[i[37]||=s(`确认者说明 `,-1),r(u(`input`,{"onUpdate:modelValue":i[12]||=e=>L.confirmedByLabel=e,maxlength:`160`,placeholder:`可选,例如当前用户`},null,512),[[b,L.confirmedByLabel]])])],64)):m(``,!0)]),i[39]||=u(`p`,null,` “Agent 已确认”只能由实际使用证据策略产生;人工在这里可保留待确认,或记录用户/权威来源确认。 `,-1)]),B.value?m(``,!0):(o(),f(`fieldset`,he,[i[42]||=u(`legend`,null,`跨项目知识继承`,-1),u(`label`,null,[i[40]||=s(`继承范围 `,-1),v(w,{modelValue:L.inheritanceMode,"onUpdate:modelValue":i[13]||=e=>L.inheritanceMode=e,options:W,label:`知识继承范围`},null,8,[`modelValue`])]),L.inheritanceMode===`selected_projects`?(o(),f(`label`,ge,[i[41]||=s(`可继承项目 `,-1),v(w,{modelValue:F.value,"onUpdate:modelValue":i[14]||=e=>F.value=e,options:V.value,label:`可继承项目`,searchable:``},null,8,[`modelValue`,`options`])])):m(``,!0),i[43]||=u(`p`,null,` 只有沿 PART_OF 或 USES_KNOWLEDGE_FROM 可达时才会继承;RELATED_TO 不扩展检索范围。 `,-1)])),u(`fieldset`,_e,[u(`legend`,null,p(z.value?`替代内容`:`失效时的替代内容(可选)`),1),u(`label`,null,[s(p(z.value?`这条历史记录被哪条内容取代`:`选择当前有效的内容`)+` `,1),v(w,{modelValue:I.value,"onUpdate:modelValue":i[15]||=e=>I.value=e,options:Y.value,label:`替代内容`,searchable:``},null,8,[`modelValue`,`options`])]),i[44]||=u(`p`,null,` 只有明确选择后才会建立可跳转的替代关联;系统不会根据失效原因自动猜测。 `,-1)]),u(`label`,null,[i[45]||=s(`纠正原因`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[16]||=e=>L.reason=e,maxlength:`2000`,rows:`3`,required:``},null,512),[[b,L.reason]])]),O.value?(o(),f(`p`,ve,p(O.value),1)):m(``,!0),u(`div`,ye,[z.value?(o(),f(l,{key:1},[u(`button`,{class:`secondary-action`,type:`button`,disabled:D.value,onClick:i[18]||=e=>ne(`restore`)},`恢复为有效`,8,xe),u(`button`,{class:`secondary-action`,type:`button`,disabled:D.value,onClick:ke},`保存替代关联`,8,Se)],64)):(o(),f(`button`,{key:0,class:`secondary-action`,type:`button`,disabled:D.value,onClick:i[17]||=e=>ne(`invalidate`)},`标记为失效`,8,be)),u(`button`,{class:`primary-action`,type:`submit`,disabled:D.value},p(D.value?`正在保存…`:L.confirmationStatus===`confirmed`?`保存并确认`:`保存为待确认`),9,Ce)])],32)]),B.value?(o(),f(`section`,Ee,[i[54]||=u(`h4`,null,`偏好生效范围`,-1),i[55]||=u(`p`,null,`个人全局默认跨项目生效;项目范围只对明确选择的项目生效。`,-1),u(`form`,{class:`knowledge-editor-form`,onSubmit:S(je,[`prevent`])},[u(`label`,null,[i[51]||=s(`生效范围 `,-1),v(w,{modelValue:M.value,"onUpdate:modelValue":i[21]||=e=>M.value=e,options:J.value,label:`偏好生效范围`},null,8,[`modelValue`,`options`])]),M.value===`project`?(o(),f(`label`,De,[i[52]||=s(`个人项目 `,-1),v(w,{modelValue:N.value,"onUpdate:modelValue":i[22]||=e=>N.value=e,options:V.value,label:`偏好个人项目`,searchable:``},null,8,[`modelValue`,`options`])])):m(``,!0),u(`label`,null,[i[53]||=s(`调整原因`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[23]||=e=>P.value=e,maxlength:`2000`,rows:`3`,required:``},null,512),[[b,P.value]])]),u(`button`,{class:`primary-action`,type:`submit`,disabled:D.value},`保存生效范围`,8,Oe)],32)])):(o(),f(`section`,we,[i[49]||=u(`h4`,null,`项目归属`,-1),i[50]||=u(`p`,null,`只调整这条知识的项目归属,来源会话和历史证据保持不变。`,-1),u(`form`,{class:`knowledge-editor-form`,onSubmit:S(Ae,[`prevent`])},[u(`label`,null,[i[47]||=s(`目标个人项目 `,-1),v(w,{modelValue:j.value,"onUpdate:modelValue":i[19]||=e=>j.value=e,options:V.value,label:`目标个人项目`,searchable:``,required:``},null,8,[`modelValue`,`options`])]),u(`label`,null,[i[48]||=s(`调整原因`,-1),r(u(`textarea`,{"onUpdate:modelValue":i[20]||=e=>k.value=e,maxlength:`2000`,rows:`3`,required:``},null,512),[[b,k.value]])]),u(`button`,{class:`primary-action`,type:`submit`,disabled:D.value||t.projects.length===0},`调整归属`,8,Te)],32)]))])])])):m(``,!0)}}),Ae={class:`graph-inspector`},je={class:`eyebrow`},Z={class:`inspector-identity`},Me={class:`muted`},Q={key:0,class:`inspector-project-material`},$={key:3,class:`inspector-replacement`},Ne={class:`inspector-replacement-heading`},Pe={key:1},Fe={key:2},Ie={class:`inspector-meta`},Le={key:0},Re={key:1},ze={key:2},Be={key:3},Ve={key:4},He={key:5},Ue={key:6},We={key:7},Ge={key:8},Ke={key:9},qe={key:10},Je={key:12},Ye={key:0,class:`inspector-meta inspector-confirmation-basis`},Xe={key:0},Ze={key:1,class:`inspector-reasoning`},Qe={class:`inspector-meta inspector-attributes`},$e={class:`inspector-reasoning`},et={key:7,class:`inspector-actions`},tt={class:`inspector-relations`},nt={class:`relation-type`},rt={class:`relation-target`},it={class:`inspector-evidence`},at={key:0,class:`evidence-excerpt`},ot={class:`inspector-history`},st={class:`inspector-history inspector-audit-history`},ct={key:0},lt=y({__name:`KnowledgeInspector`,props:{item:{},graph:{},editable:{type:Boolean},currentProjectId:{},canPublishProject:{type:Boolean},canManageProject:{type:Boolean},mode:{}},emits:[`confirm`,`edit`,`createProject`,`openProject`,`publishProject`,`openDirectory`,`openGraph`,`openReplacement`,`manageProject`],setup(e,{emit:r}){let i=e,a=r,s=_(()=>i.item?.itemKind===`entity`?i.item.raw:null),c=_(()=>i.item?.itemKind===`relationship`?i.item.raw:null),d=_(()=>new Map(i.graph?.nodes.map(e=>[e.id,e.name])??[])),h=_(()=>!s.value||!i.graph?[]:i.graph.edges.filter(e=>R(e.source)===s.value?.id||R(e.target)===s.value?.id).slice(0,12)),v=_(()=>Object.entries(i.item?.raw.attributes??{}).filter(([,e])=>e!=null&&e!==``)),y=_(()=>j(i.item)),b=_(()=>V(i.item)),x=_(()=>i.item?.itemKind===`entity`&&[`PersonalProject`,`RelatedPersonalProject`].includes(i.item.type)),S=_(()=>i.editable&&i.item?.itemKind===`entity`&&!i.item.invalidAt&&!i.item.profileAspect&&!y.value),C=_(()=>i.editable&&!y.value),w=_(()=>i.editable&&!y.value&&!i.item?.invalidAt&&!!i.item?.classificationExplicit&&U.value===`pending`),T=_(()=>y.value&&i.canManageProject),H=_(()=>S.value||C.value||w.value||T.value||!!i.mode||x.value&&!!b.value&&b.value!==i.currentProjectId||x.value&&!!b.value&&i.canPublishProject),U=_(()=>i.item?N(i.item):`unclassified`),W=_(()=>i.item?L(i.item):``),G=_(()=>i.item?.confirmationBasis??null),K=_(()=>{let e=i.item?.replacedByItemId,t=i.item?.replacedByItemKind;return!e||!t?null:P(i.graph).find(n=>n.id===e&&n.itemKind===t)??null}),q=_(()=>{let e=i.item;return e?.humanEdited?e.humanChangeStatus===`unseen`?`这次人工修改还没有被 Agent 调用查看,提醒会持续保留。`:e.humanChangeStatus===`viewed`?`Agent 已查看当前版本,但还没有同时完成冲突检查和分类合理性审核。`:`Agent 已对当前人工修改版本完成无冲突与分类合理性审核;历史记录仍永久保留。`:``});function J(e){return typeof e==`string`?e:JSON.stringify(e)}function Y(e){return`${Math.round(e*100)}%`}function X(e){return e.inheritanceMode===`descendants`?`允许子项目继承`:e.inheritanceMode===`selected_projects`?`仅指定项目(${e.inheritedProjectIds.length})`:`仅当前项目`}return(r,i)=>(o(),f(`aside`,Ae,[e.item?(o(),f(l,{key:0},[u(`p`,je,p(y.value?`PROJECT MATERIAL`:e.item.itemKind===`entity`?`ENTITY`:`RELATIONSHIP`),1),u(`h3`,null,p(e.item.itemKind===`entity`?e.item.title:c.value?.type),1),u(`div`,Z,[u(`span`,null,p(y.value?`资料投影 ID`:e.item.itemKind===`entity`?`节点 ID`:`关系 ID`),1),u(`code`,null,p(e.item.id),1)]),u(`p`,Me,p(e.item.body),1),y.value?(o(),f(`section`,Q,[u(`div`,null,[i[9]||=u(`span`,null,`内容归属`,-1),u(`strong`,null,p(n(E)(e.item)),1)]),i[10]||=u(`p`,null,` 这是项目档案在关系图中的投影,不是可独立确认、失效或恢复的知识记录。 如需改变内容,请编辑项目资料。 `,-1)])):(o(),f(`section`,{key:1,class:g([`inspector-classification`,`state-${U.value}`])},[u(`div`,null,[i[11]||=u(`span`,null,`当前判定`,-1),u(`strong`,null,p(n(O)(e.item)),1)]),u(`p`,null,p(W.value),1)],2)),!y.value&&e.item.humanEdited?(o(),f(`section`,{key:2,class:g([`inspector-human-change`,`state-${e.item.humanChangeStatus}`])},[u(`div`,null,[i[12]||=u(`span`,null,`人工变更审核`,-1),u(`strong`,null,p(n(z)(e.item.humanChangeStatus)),1)]),u(`p`,null,p(q.value),1),u(`small`,null,`人工变更版本 `+p(e.item.humanChangeVersion),1)],2)):m(``,!0),!y.value&&e.item.invalidAt?(o(),f(`section`,$,[u(`div`,Ne,[i[13]||=u(`span`,null,`替代关系`,-1),u(`strong`,null,p(K.value?`已被以下内容取代`:`没有可跳转的替代内容`),1)]),K.value?(o(),f(`button`,{key:0,class:`inspector-replacement-link`,type:`button`,onClick:i[0]||=e=>a(`openReplacement`,K.value)},[u(`span`,null,[u(`strong`,null,p(K.value.title),1),u(`small`,null,p(K.value.body),1)]),i[14]||=u(`b`,null,`查看替代内容 →`,-1)])):e.item.replacedByItemId?(o(),f(`p`,Pe,` 已记录替代对象,但它不在当前查看范围内。 `)):(o(),f(`p`,Fe,` 这条历史记录只有失效原因,没有记录明确的替代对象;系统不会根据文字猜测链接。 `))])):m(``,!0),u(`dl`,Ie,[u(`div`,null,[i[15]||=u(`dt`,null,`类型`,-1),u(`dd`,null,p(e.item.type),1)]),y.value?m(``,!0):(o(),f(`div`,Le,[i[16]||=u(`dt`,null,`发现时象限`,-1),u(`dd`,null,p(n(A)(e.item.originQuadrant)),1)])),y.value?m(``,!0):(o(),f(`div`,Re,[i[17]||=u(`dt`,null,`当前分类`,-1),u(`dd`,null,p(n(A)(e.item.currentQuadrant)),1)])),y.value?m(``,!0):(o(),f(`div`,ze,[i[18]||=u(`dt`,null,`象限解释`,-1),u(`dd`,null,p(n(B)(e.item.originQuadrant)),1)])),y.value?m(``,!0):(o(),f(`div`,Be,[i[19]||=u(`dt`,null,`确认状态`,-1),u(`dd`,null,p(n(O)(e.item)),1)])),y.value?m(``,!0):(o(),f(`div`,Ve,[i[20]||=u(`dt`,null,`置信分`,-1),u(`dd`,null,p(Y(e.item.confidenceScore)),1)])),y.value?m(``,!0):(o(),f(`div`,He,[i[21]||=u(`dt`,null,`效用分`,-1),u(`dd`,null,p(Y(e.item.utilityScore)),1)])),y.value?m(``,!0):(o(),f(`div`,Ue,[i[22]||=u(`dt`,null,`有效使用`,-1),u(`dd`,null,p(e.item.qualifiedUseCount)+` 次 / `+p(e.item.distinctTaskCount)+` 个任务`,1)])),y.value?m(``,!0):(o(),f(`div`,We,[i[23]||=u(`dt`,null,`最近使用`,-1),u(`dd`,null,p(n(I)(e.item.lastUsedAt)),1)])),!y.value&&!e.item.profileAspect?(o(),f(`div`,Ge,[i[24]||=u(`dt`,null,`知识继承`,-1),u(`dd`,null,p(X(e.item)),1)])):m(``,!0),!y.value&&e.item.profileAspect?(o(),f(`div`,Ke,[i[25]||=u(`dt`,null,`协作偏好`,-1),u(`dd`,null,p(n(k)(e.item.profileAspect)),1)])):m(``,!0),!y.value&&e.item.profileAspect?(o(),f(`div`,qe,[i[26]||=u(`dt`,null,`生效范围`,-1),u(`dd`,null,p(e.item.preferenceScope===`project`?`指定项目`:`个人全局`),1)])):m(``,!0),c.value?(o(),f(l,{key:11},[u(`div`,null,[i[27]||=u(`dt`,null,`来源`,-1),u(`dd`,null,p(d.value.get(n(R)(c.value.source))??n(R)(c.value.source)),1)]),u(`div`,null,[i[28]||=u(`dt`,null,`目标`,-1),u(`dd`,null,p(d.value.get(n(R)(c.value.target))??n(R)(c.value.target)),1)])],64)):m(``,!0),y.value?m(``,!0):(o(),f(`div`,Je,[i[29]||=u(`dt`,null,`状态`,-1),u(`dd`,null,p(e.item.invalidAt?`历史 · 已失效`:`当前有效`),1)]))]),y.value?m(``,!0):(o(),f(l,{key:4},[i[36]||=u(`h4`,{class:`inspector-subtitle`},`确认依据`,-1),G.value?(o(),f(`dl`,Ye,[u(`div`,null,[i[30]||=u(`dt`,null,`为什么会有`,-1),u(`dd`,null,p(G.value.existence_reason),1)]),u(`div`,null,[i[31]||=u(`dt`,null,`为什么属于该象限`,-1),u(`dd`,null,p(G.value.quadrant_reason),1)]),u(`div`,null,[i[32]||=u(`dt`,null,`提出者`,-1),u(`dd`,null,p(n(F)(G.value.proposed_by)),1)]),u(`div`,null,[i[33]||=u(`dt`,null,`确认者`,-1),u(`dd`,null,p(n(F)(G.value.confirmed_by)),1)]),u(`div`,null,[i[34]||=u(`dt`,null,`确认时间`,-1),u(`dd`,null,p(n(I)(G.value.confirmed_at)),1)]),G.value.agent_policy_version?(o(),f(`div`,Xe,[i[35]||=u(`dt`,null,`Agent 策略`,-1),u(`dd`,null,p(G.value.agent_policy_version),1)])):m(``,!0)])):(o(),f(`p`,Ze,` 旧数据没有结构化的确认依据,因此已放入待确认,不会自动作为已确认知识使用。 `))],64)),v.value.length?(o(),f(l,{key:5},[i[37]||=u(`h4`,{class:`inspector-subtitle`},`内容详情`,-1),u(`dl`,Qe,[(o(!0),f(l,null,t(v.value,([e,t])=>(o(),f(`div`,{key:e},[u(`dt`,null,p(e),1),u(`dd`,null,p(J(t)),1)]))),128))])],64)):m(``,!0),e.item.reasoningSummary?(o(),f(l,{key:6},[i[38]||=u(`h4`,{class:`inspector-subtitle`},`形成过程`,-1),u(`p`,$e,p(e.item.reasoningSummary),1)],64)):m(``,!0),H.value?(o(),f(`div`,et,[w.value?(o(),f(`button`,{key:0,class:`primary-action inspector-confirm-action`,type:`button`,onClick:i[1]||=t=>a(`confirm`,e.item)},p(e.item.profileAspect?`确认这条偏好`:`确认这条知识`),1)):m(``,!0),T.value?(o(),f(`button`,{key:1,class:`primary-action`,type:`button`,onClick:i[2]||=t=>a(`manageProject`,e.item)},` 编辑项目资料 `)):m(``,!0),e.mode===`graph`?(o(),f(`button`,{key:2,class:`secondary-action`,type:`button`,onClick:i[3]||=t=>a(`openDirectory`,e.item)},` 在内容目录中定位 `)):m(``,!0),e.mode===`directory`?(o(),f(`button`,{key:3,class:`secondary-action`,type:`button`,onClick:i[4]||=t=>a(`openGraph`,e.item)},` 在关系图中定位 `)):m(``,!0),x.value&&b.value&&b.value!==e.currentProjectId?(o(),f(`button`,{key:4,class:`primary-action`,type:`button`,onClick:i[5]||=e=>a(`openProject`,b.value)},` 进入这个项目 `)):m(``,!0),x.value&&b.value&&e.canPublishProject?(o(),f(`button`,{key:5,class:`secondary-action`,type:`button`,onClick:i[6]||=e=>a(`publishProject`,b.value)},` 发布 / 同步到公共 `)):m(``,!0),S.value?(o(),f(`button`,{key:6,class:`primary-action`,type:`button`,onClick:i[7]||=t=>a(`createProject`,e.item)},` 基于此创建项目 `)):m(``,!0),C.value?(o(),f(`button`,{key:7,class:`secondary-action inspector-edit-action`,type:`button`,onClick:i[8]||=t=>a(`edit`,e.item)},p(e.item.profileAspect?`纠正这条偏好`:`纠正或调整归属`),1)):m(``,!0)])):m(``,!0),h.value.length?(o(),f(l,{key:8},[i[39]||=u(`h4`,{class:`inspector-subtitle`},`关联关系`,-1),u(`div`,tt,[(o(!0),f(l,null,t(h.value,e=>(o(),f(`div`,{key:e.id,class:`inspector-relation`},[u(`strong`,nt,p(e.type),1),u(`p`,rt,p(e.fact||`关系`),1)]))),128))])],64)):m(``,!0),e.item.evidence.length?(o(),f(l,{key:9},[i[40]||=u(`h4`,{class:`inspector-subtitle`},`证据与来源`,-1),u(`div`,it,[(o(!0),f(l,null,t(e.item.evidence,(e,t)=>(o(),f(`article`,{key:String(e.id??t),class:`evidence-card`},[u(`strong`,null,p(e.name||e.source_description||`来源记录`),1),u(`p`,null,p(e.summary||e.source_description),1),u(`span`,null,p(e.source_kind||`来源`)+` · `+p(n(I)(e.reference_time||e.created_at)),1),e.source_excerpt?(o(),f(`p`,at,p(e.source_excerpt),1)):m(``,!0)]))),128))])],64)):m(``,!0),e.item.revisions.length?(o(),f(l,{key:10},[i[41]||=u(`h4`,{class:`inspector-subtitle`},`修订历史`,-1),u(`div`,ot,[(o(!0),f(l,null,t(e.item.revisions,(e,t)=>(o(),f(`article`,{key:String(e.id??t),class:`history-row`},[u(`strong`,null,p(n(D)(e.action)),1),u(`p`,null,p(e.reason??e.summary??`未填写说明`),1),u(`span`,null,p(n(I)(e.created_at)),1)]))),128))])],64)):m(``,!0),e.item.auditEvents.length?(o(),f(l,{key:11},[i[42]||=u(`h4`,{class:`inspector-subtitle`},`人工与 Agent 记录`,-1),u(`div`,st,[(o(!0),f(l,null,t(e.item.auditEvents,e=>(o(),f(`article`,{key:e.id,class:`history-row`},[u(`strong`,null,p(n(M)(e.action)),1),u(`p`,null,p(e.reason),1),u(`span`,null,` 版本 `+p(e.human_change_version)+` · `+p(n(I)(e.created_at)),1),e.action===`agent_review`?(o(),f(`small`,ct,` 冲突:`+p(e.conflict_check===`no_conflict`?`无冲突`:`有冲突`)+` · 分类:`+p(e.classification_check===`reasonable`?`合理`:`需调整`),1)):m(``,!0)]))),128))])],64)):m(``,!0)],64)):(o(),f(l,{key:1},[i[43]||=u(`p`,{class:`eyebrow`},`内容详情`,-1),i[44]||=u(`h3`,null,`选择一个节点或关系`,-1),i[45]||=u(`p`,{class:`inspector-placeholder`},`点击后查看完整说明、来源证据和关联关系。`,-1)],64))]))}});export{H as i,ke as n,ne as r,lt as t};
@@ -1 +0,0 @@
1
- .knowledge-confirm-dialog[data-v-65eb248e]{width:min(680px,100vw - 48px)}.knowledge-confirm-dialog-shell[data-v-65eb248e]{gap:18px;padding:24px;display:grid}.knowledge-confirm-summary[data-v-65eb248e]{border-top:1px solid #e1e5e2;border-bottom:1px solid #e1e5e2;gap:6px;padding:14px 0;display:grid}.knowledge-confirm-summary span[data-v-65eb248e],.knowledge-confirm-summary small[data-v-65eb248e]{color:#7d8780;font-size:10px}.knowledge-confirm-summary strong[data-v-65eb248e]{color:#29382f;font-size:16px}.knowledge-confirm-summary p[data-v-65eb248e]{color:#606b63;font-size:12px;line-height:1.65}.knowledge-confirm-fields[data-v-65eb248e]{gap:14px;display:grid}.knowledge-confirm-fields label[data-v-65eb248e]{color:#59645c;gap:6px;font-size:11px;font-weight:600;display:grid}.knowledge-confirm-acknowledgement[data-v-65eb248e]{color:#4e5c53;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:9px;font-size:11px;line-height:1.5;display:grid}
@@ -1 +0,0 @@
1
- .batch-confirm-dialog[data-v-f18528e4]{width:min(980px,100vw - 64px)}.batch-confirm-form[data-v-f18528e4]{grid-template-columns:320px minmax(0,1fr);gap:24px;padding-top:20px;display:grid}.batch-confirm-controls[data-v-f18528e4]{align-content:start;gap:14px;display:grid}.batch-confirm-controls>label[data-v-f18528e4],.batch-confirmer-fields label[data-v-f18528e4]{color:#5f6962;gap:6px;font-size:10px;font-weight:600;display:grid}.batch-confirm-controls[data-v-f18528e4] .searchable-select{width:100%}.batch-group-summary[data-v-f18528e4]{border-top:1px solid #e1e5e2;border-bottom:1px solid #e1e5e2;gap:4px;padding:12px 0;display:grid}.batch-group-summary span[data-v-f18528e4],.batch-group-summary small[data-v-f18528e4]{color:#89918b;font-size:8px}.batch-group-summary strong[data-v-f18528e4]{color:#35443b;font-size:12px}.batch-group-summary p[data-v-f18528e4]{color:#6e7871;font-size:9px;line-height:1.5}.batch-confirmer-fields[data-v-f18528e4]{grid-template-columns:112px minmax(0,1fr);gap:8px;display:grid}.batch-confirm-rule[data-v-f18528e4],.batch-limit-note[data-v-f18528e4]{color:#7c857f;font-size:9px;line-height:1.5}.batch-confirm-review[data-v-f18528e4]{border-left:1px solid #e1e5e2;min-width:0;padding-left:24px}.batch-review-heading[data-v-f18528e4]{justify-content:space-between;align-items:center;gap:16px;padding-bottom:10px;display:flex}.batch-review-heading h4[data-v-f18528e4]{color:#344239;font-size:13px}.batch-review-heading p[data-v-f18528e4]{color:#858e87;margin-top:2px;font-size:9px}.batch-review-list[data-v-f18528e4]{border-top:1px solid #e3e6e3;border-bottom:1px solid #e3e6e3;max-height:410px;overflow:auto}.batch-review-item[data-v-f18528e4]{cursor:pointer;border-bottom:1px solid #eceeec;grid-template-columns:auto minmax(0,1fr);gap:9px;padding:10px 2px;display:grid}.batch-review-item[data-v-f18528e4]:last-child{border-bottom:0}.batch-review-item>input[data-v-f18528e4]{margin-top:2px}.batch-review-item>span[data-v-f18528e4]{gap:3px;min-width:0;display:grid}.batch-review-item strong[data-v-f18528e4]{color:#3a4740;font-size:10px}.batch-review-item small[data-v-f18528e4]{color:#77817a;font-size:8px}.batch-review-item em[data-v-f18528e4]{color:#848d87;text-overflow:ellipsis;white-space:nowrap;font-size:8px;font-style:normal;line-height:1.4;overflow:hidden}.batch-confirm-acknowledgement[data-v-f18528e4]{color:#4f5d55;cursor:pointer;align-items:flex-start;gap:8px;margin-top:12px;font-size:9px;line-height:1.5;display:flex}.batch-confirm-form>.publish-dialog-error[data-v-f18528e4],.batch-confirm-form>.publish-dialog-actions[data-v-f18528e4]{grid-column:1/-1}@media (width<=820px){.batch-confirm-form[data-v-f18528e4]{grid-template-columns:1fr}.batch-confirm-review[data-v-f18528e4]{border-left:0;padding:0}}.knowledge-organizer[data-v-90794584]{flex-direction:column;gap:12px;padding:18px 24px 20px;display:flex;overflow:hidden}.organizer-head[data-v-90794584]{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px 24px;min-width:0;display:grid}.organizer-principle[data-v-90794584]{align-self:center;min-width:0;padding:0 2px}.organizer-principle h3[data-v-90794584]{font-size:16px}.organizer-principle>p[data-v-90794584]:last-child{color:#6e7771;max-width:760px;margin-top:5px;font-size:11px;line-height:1.55}.organizer-attention[data-v-90794584]{text-align:right;border-left:1px solid #dde2de;grid-area:1/2;min-width:152px;padding-left:20px}.organizer-attention strong[data-v-90794584],.organizer-attention span[data-v-90794584],.organizer-attention small[data-v-90794584]{display:block}.organizer-attention strong[data-v-90794584]{color:#6f582b;font-size:23px;font-weight:620}.organizer-attention span[data-v-90794584]{color:#5f675f;font-size:10px;font-weight:650}.organizer-attention small[data-v-90794584]{color:#8a918b;margin-top:2px;font-size:8px}.organizer-loading-inline[data-v-90794584]{color:#7b847e;text-align:center;font-size:10px}.organizer-toolbar[data-v-90794584]{align-items:center;gap:8px;min-height:34px;display:flex}.organizer-search[data-v-90794584]{flex:300px;min-width:180px;max-width:360px}.organizer-search>span[data-v-90794584]{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.organizer-search input[data-v-90794584]{width:100%}.review-state-filter[data-v-90794584],.quadrant-filter[data-v-90794584]{white-space:nowrap;background:#f1f4f1;border:1px solid #d7ddd8;border-radius:7px;flex:none;align-items:center;gap:2px;height:31px;padding:2px;display:flex}.quadrant-filter[data-v-90794584]{max-width:470px;overflow-x:auto}.review-state-filter>span[data-v-90794584],.quadrant-filter>span[data-v-90794584]{color:#7a847d;padding:0 6px;font-size:8px;font-weight:650}.review-state-filter button[data-v-90794584],.quadrant-filter button[data-v-90794584]{color:#626d66;white-space:nowrap;background:0 0;border:0;border-radius:5px;height:25px;padding:0 7px;font-size:9px}.review-state-filter button[data-v-90794584]:hover,.quadrant-filter button[data-v-90794584]:hover{color:#35473d;background:#ffffffa8}.review-state-filter button.active[data-v-90794584],.quadrant-filter button.active[data-v-90794584]{color:#30483a;background:#fff;box-shadow:0 1px 3px #2f3d341f}.review-state-filter button.state-pending.active[data-v-90794584]{color:#765d2e}.review-state-filter button.state-agent_confirmed.active[data-v-90794584]{color:#4d5f78}.review-state-filter button.state-confirmed.active[data-v-90794584]{color:#356047}.review-state-filter button strong[data-v-90794584],.quadrant-filter button strong[data-v-90794584]{margin-left:2px;font-size:8px;font-weight:720}.organizer-result-summary[data-v-90794584]{color:#7b847e;white-space:nowrap;flex:none;font-size:9px}.organizer-toolbar .batch-confirm-action[data-v-90794584]{margin-left:auto}.organizer-toolbar .toolbar-action+.toolbar-action[data-v-90794584]{margin-left:0}.organizer-truncated[data-v-90794584]{color:#806536;margin:-4px 0 0;font-size:9px}.organizer-layout[data-v-90794584]{background:#fff;border:1px solid #cfd7d1;border-radius:8px;flex:1;grid-template-columns:minmax(0,1fr);min-height:0;display:grid;overflow:hidden}.organizer-layout.has-selection[data-v-90794584]{grid-template-columns:minmax(0,1fr) 340px}.organizer-layout[data-v-90794584]:not(.has-selection) .graph-inspector{display:none}.organizer-directory[data-v-90794584]{overscroll-behavior:contain;min-width:0;overflow:auto}.organizer-table-head[data-v-90794584],.organizer-row[data-v-90794584]{grid-template-columns:minmax(230px,1.35fr) 114px 130px minmax(160px,.8fr) 118px;align-items:center;gap:12px;min-width:920px;display:grid}.organizer-table-head[data-v-90794584]{z-index:2;color:#8b938d;background:#f7f8f6;border-bottom:1px solid #e0e4e0;padding:10px 15px;font-size:9px;font-weight:680;position:sticky;top:0}.organizer-row[data-v-90794584]{color:#4f5952;text-align:left;background:#fff;border:0;border-bottom:1px solid #e8ebe8;width:100%;min-height:68px;padding:11px 15px}.organizer-row[data-v-90794584]:hover{background:#f8faf8}.organizer-row.selected[data-v-90794584]{background:#f1f6f3;box-shadow:inset 2px 0 #557863}.organizer-item-copy[data-v-90794584]{gap:4px;min-width:0;display:grid}.organizer-item-copy strong[data-v-90794584],.organizer-item-copy small[data-v-90794584]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.organizer-item-copy strong[data-v-90794584]{color:#2f3933;font-size:11px;font-weight:630}.organizer-item-copy small[data-v-90794584],.organizer-basis[data-v-90794584],.organizer-row time[data-v-90794584]{color:#7b847e;font-size:9px}.quadrant-chip[data-v-90794584],.review-chip[data-v-90794584]{white-space:nowrap;border-radius:999px;width:fit-content;padding:4px 7px;font-size:9px;font-weight:650}.quadrant-chip[data-v-90794584]{color:#59655e;background:#f0f2ef;gap:1px;display:grid}.quadrant-chip small[data-v-90794584]{color:inherit;opacity:.75;font-size:7px;font-weight:520}.quadrant-chip.known_known[data-v-90794584]{color:#356047;background:#edf6f0}.quadrant-chip.known_unknown[data-v-90794584]{color:#77602f;background:#f7f2e5}.quadrant-chip.unknown_known[data-v-90794584]{color:#4d5f78;background:#eef2f7}.quadrant-chip.unknown_unknown[data-v-90794584]{color:#725d70;background:#f5eff4}.review-chip.state-confirmed[data-v-90794584]{color:#356047;background:#edf6f0}.review-chip.state-agent_confirmed[data-v-90794584]{color:#4d5f78;background:#eef2f7}.review-chip.state-pending[data-v-90794584]{color:#77602f;background:#f7f2e5}.organizer-basis[data-v-90794584]{overflow-wrap:anywhere}@media (width<=1260px){.review-state-filter>span[data-v-90794584],.quadrant-filter>span[data-v-90794584],.organizer-result-summary[data-v-90794584]{display:none}.organizer-table-head[data-v-90794584],.organizer-row[data-v-90794584]{grid-template-columns:minmax(210px,1fr) 108px 104px minmax(140px,.8fr) 104px;min-width:760px}}@media (width<=1040px){.organizer-layout.has-selection[data-v-90794584]{grid-template-columns:minmax(0,1fr) 280px}.organizer-table-head[data-v-90794584],.organizer-row[data-v-90794584]{grid-template-columns:minmax(210px,1fr) 108px 104px;min-width:470px}.organizer-table-head[data-v-90794584]>:nth-child(n+4),.organizer-basis[data-v-90794584],.organizer-row time[data-v-90794584]{display:none}.batch-confirm-action[data-v-90794584]{text-overflow:ellipsis;white-space:nowrap;max-width:108px;overflow:hidden}}
@@ -1 +0,0 @@
1
- import{A as e,D as t,L as n,M as r,P as i,T as a,_ as o,a as ee,c as s,d as c,f as l,m as u,nt as d,p as f,r as p,t as te,tt as m,u as h,v as g,y as _}from"./console-tbvTUi6p.js";import{a as v,n as y,o as b}from"./runtime-dom.esm-bundler-DttsK21F.js";import{n as x,r as S,t as C}from"./identity-B3s5CXhv.js";import{E as w,T,_ as E,a as D,g as O,h as k,l as A,n as j,t as M}from"./model-DVT8sjy9.js";import{i as N,n as P,r as ne,t as F}from"./KnowledgeInspector-BSpz5Sfm.js";var I={open:``,class:`project-dialog batch-confirm-dialog vue-dialog`},L={class:`project-dialog-shell`},R={class:`project-dialog-header`},z={class:`batch-confirm-controls`},B={key:0,class:`batch-group-summary`},V={class:`batch-confirmer-fields`},re=[`required`,`placeholder`],H={class:`batch-confirm-review`},ie={class:`batch-review-heading`},U={key:0,class:`batch-limit-note`},ae={class:`batch-review-list`},oe=[`value`],W={class:`batch-confirm-acknowledgement`},G={key:0,class:`publish-dialog-error`,role:`alert`},K={class:`publish-dialog-actions`},q=[`disabled`],se=[`disabled`],J=N(_({__name:`KnowledgeBatchConfirmDialog`,props:{groups:{},personalSpaceId:{}},emits:[`close`,`saved`],setup(l,{emit:p}){let m=l,_=p,w=te(),E=i(``),D=i([]),O=i(`user`),k=i(``),A=i(``),j=i(!1),N=i(!1),P=i(``),ne=h(()=>m.groups.map(e=>({value:e.key,label:e.label,meta:`${e.kind===`source`?`同一来源`:`同一会话`} · ${e.items.length} 条`,search:`${x(e.value)} ${e.description}`}))),F=h(()=>m.groups.find(({key:e})=>e===E.value)??null),J=h(()=>F.value?.items.slice(0,200)??[]),Y=h(()=>{let e=new Set(D.value);return J.value.filter(t=>e.has(Z(t)))}),X=h(()=>J.value.length>0&&Y.value.length===J.value.length),ce=h(()=>!N.value&&Y.value.length>=2&&!!A.value.trim()&&j.value&&(O.value!==`authoritative_source`||!!k.value.trim())),le=[{value:`user`,label:`用户`},{value:`authoritative_source`,label:`权威来源`}];e(()=>m.groups,e=>{e.some(({key:e})=>e===E.value)||(E.value=e[0]?.key??``)},{immediate:!0}),e(E,()=>{D.value=J.value.map(Z),j.value=!1,P.value=``},{immediate:!0});function Z(e){return`${e.itemKind}:${e.id}`}function ue(){D.value=X.value?[]:J.value.map(Z),j.value=!1}function Q(e){let t=F.value;return t?M(e,t):null}async function de(){let e=F.value;if(!e)return $(`请选择一个来源或会话`);if(Y.value.length<2)return $(`批量确认至少需要选择两条知识`);if(!A.value.trim())return $(`请说明本次批量确认的依据`);if(O.value===`authoritative_source`&&!k.value.trim())return $(`请填写权威来源名称`);if(!j.value)return $(`请先确认已经核对内容与发现时象限`);N.value=!0,P.value=``;try{let t=await ee(`/api/knowledge/batch-confirmation`,{personalSpaceId:m.personalSpaceId,groupKind:e.kind,groupValue:e.value,reason:A.value.trim(),confirmer:{kind:O.value,label:k.value.trim()||null},items:Y.value.map(e=>{let t=Q(e);return{itemId:e.id,itemKind:e.itemKind,existenceReason:t.existenceReason,quadrantReason:t.quadrantReason,proposedBy:t.proposedBy}})});w.notify(`已确认 ${t.confirmed_count} 条知识;每条都保留了确认依据与本次确认时间。`),_(`saved`),_(`close`)}catch(e){P.value=e instanceof Error?e.message:`批量确认失败`,w.reportError(e)}finally{N.value=!1}}function $(e){P.value=e}return(e,i)=>(a(),u(`dialog`,I,[c(`div`,L,[c(`header`,R,[i[8]||=c(`div`,null,[c(`p`,{class:`eyebrow`},`BATCH CONFIRMATION`),c(`h3`,null,`按来源或会话批量确认`),c(`p`,null,`一次确认会同时覆盖每条知识的内容与发现时象限,并为每条知识写入独立修订历史。`)],-1),c(`button`,{class:`secondary-action`,type:`button`,onClick:i[0]||=e=>_(`close`)},`关闭`)]),c(`form`,{class:`batch-confirm-form`,onSubmit:b(de,[`prevent`])},[c(`section`,z,[c(`label`,null,[i[9]||=o(`确认范围 `,-1),g(S,{modelValue:E.value,"onUpdate:modelValue":i[1]||=e=>E.value=e,options:ne.value,label:`批量确认范围`,searchable:``},null,8,[`modelValue`,`options`])]),F.value?(a(),u(`div`,B,[c(`span`,null,d(F.value.kind===`source`?`同一来源`:`同一会话`),1),c(`strong`,null,d(F.value.label),1),c(`p`,null,d(F.value.description),1),c(`small`,null,`#`+d(n(C)(F.value.value,28)),1)])):f(``,!0),c(`div`,V,[c(`label`,null,[i[10]||=o(`确认者 `,-1),g(S,{modelValue:O.value,"onUpdate:modelValue":i[2]||=e=>O.value=e,options:le,label:`批量确认者`},null,8,[`modelValue`])]),c(`label`,null,[i[11]||=o(`确认者说明 `,-1),r(c(`input`,{"onUpdate:modelValue":i[3]||=e=>k.value=e,maxlength:`160`,required:O.value===`authoritative_source`,placeholder:O.value===`user`?`可选,例如当前用户`:`必填,例如已批准的 PRD`},null,8,re),[[v,k.value]])])]),c(`label`,null,[i[12]||=o(`批量确认依据 `,-1),r(c(`textarea`,{"onUpdate:modelValue":i[4]||=e=>A.value=e,maxlength:`2000`,rows:`3`,required:``,placeholder:`例如:已按本次会话逐条核对内容及其发现时象限`},null,512),[[v,A.value]])]),i[13]||=c(`p`,{class:`batch-confirm-rule`},` Agent 不能作为确认者。确认时间由服务端统一记录,后续修改内容或象限仍会自动回到待确认。 `,-1)]),c(`section`,H,[c(`div`,ie,[c(`div`,null,[i[14]||=c(`h4`,null,`逐条核对`,-1),c(`p`,null,`已选择 `+d(Y.value.length)+` / `+d(J.value.length)+` 条`,1)]),c(`button`,{class:`secondary-action`,type:`button`,onClick:ue},d(X.value?`全部取消`:`全部选择`),1)]),(F.value?.items.length??0)>200?(a(),u(`p`,U,` 单次最多确认 200 条;完成后可继续处理同一组剩余内容。 `)):f(``,!0),c(`div`,ae,[(a(!0),u(s,null,t(J.value,e=>(a(),u(`label`,{key:Z(e),class:`batch-review-item`},[r(c(`input`,{"onUpdate:modelValue":i[5]||=e=>D.value=e,type:`checkbox`,value:Z(e)},null,8,oe),[[y,D.value]]),c(`span`,null,[c(`strong`,null,d(e.title),1),c(`small`,null,d(n(T)(e.originQuadrant))+` · `+d(e.type),1),c(`em`,null,d(Q(e)?.existenceReason),1),c(`em`,null,d(Q(e)?.quadrantReason),1)])]))),128))]),c(`label`,W,[r(c(`input`,{"onUpdate:modelValue":i[6]||=e=>j.value=e,type:`checkbox`},null,512),[[y,j.value]]),i[15]||=c(`span`,null,`我已核对所选知识的内容与发现时象限,并确认上述依据可追溯。`,-1)])]),P.value?(a(),u(`p`,G,d(P.value),1)):f(``,!0),c(`div`,K,[c(`button`,{class:`secondary-action`,type:`button`,disabled:N.value,onClick:i[7]||=e=>_(`close`)},` 取消 `,8,q),c(`button`,{class:`primary-action`,type:`submit`,disabled:!ce.value},d(N.value?`正在确认…`:`确认 ${Y.value.length} 条知识`),9,se)])],32)])]))}}),[[`__scopeId`,`data-v-f18528e4`]]),Y={class:`view knowledge-organizer`},X={class:`organizer-head`},ce={class:`organizer-attention`},le={class:`organizer-toolbar`},Z={class:`organizer-search`},ue={class:`quadrant-filter`,"aria-label":`发现来源筛选`},Q=[`aria-pressed`],de=[`data-quadrant`,`aria-pressed`,`title`,`onClick`],$={class:`review-state-filter`,"aria-label":`确认状态筛选`},fe=[`aria-pressed`],pe=[`data-review-state`,`aria-pressed`,`title`,`onClick`],me={class:`organizer-result-summary`},he={key:0},ge={key:0,class:`organizer-truncated`},_e={key:1,class:`view-loading`},ve={class:`organizer-directory`,"aria-label":`知识整理目录`},ye={class:`organizer-list`},be=[`onClick`],xe={class:`organizer-item-copy`},Se={class:`organizer-basis`},Ce={key:0,class:`empty-state`},we=N(_({__name:`KnowledgeOrganizerPage`,setup(ee){let _=te(),y=i(null),b=i(!1),x=i(``),S=i(`all`),C=i(`all`),M=i(null),N=i(null),I=i(null),L=i(!1),R=[{value:`known_unknown`,short:`明确问题`,coordinate:`已意识 · 未掌握`},{value:`known_known`,short:`明确表达`,coordinate:`已意识 · 已掌握`},{value:`unknown_unknown`,short:`盲点探索`,coordinate:`未意识 · 未掌握`},{value:`unknown_known`,short:`隐性提炼`,coordinate:`未意识 · 已掌握`}],z=[{value:`pending`,label:`待确认`,hint:`尚无有效的确认人和确认时间`},{value:`agent_confirmed`,label:`Agent 已确认`,hint:`实际使用达到策略阈值,权重低于人工确认`},{value:`confirmed`,label:`已确认`,hint:`内容与象限归类均已确认`}],B=h(()=>k(y.value)),V=h(()=>j(B.value)),re=h(()=>Object.fromEntries([...R.map(({value:e})=>e),`unclassified`].map(e=>[e,B.value.filter(t=>t.originQuadrant===e).length]))),H=h(()=>Object.fromEntries(z.map(({value:e})=>[e,B.value.filter(t=>O(t)===e).length]))),ie=h(()=>S.value!==`all`),U=h(()=>ie.value?B.value.filter(e=>e.originQuadrant===S.value):B.value),ae=h(()=>Object.fromEntries(z.map(({value:e})=>[e,U.value.filter(t=>O(t)===e).length]))),oe=h(()=>H.value.pending),W=h(()=>{let e=x.value.trim().toLocaleLowerCase();return B.value.filter(t=>S.value!==`all`&&t.originQuadrant!==S.value||C.value!==`all`&&O(t)!==C.value?!1:!e||[t.title,t.body,t.type,T(t.originQuadrant),w(t),...t.evidence.flatMap(e=>[e.name,e.summary,e.source_description])].filter(Boolean).join(` `).toLocaleLowerCase().includes(e))});e(()=>_.activePersonalSpace?.id,e=>{e&&G(e)},{immediate:!0}),e(W,e=>{M.value&&!e.some(({id:e,itemKind:t})=>e===M.value?.id&&t===M.value?.itemKind)&&(M.value=null)});async function G(e=_.activePersonalSpace?.id){if(e){b.value=!0;try{let t=new URLSearchParams({spaceId:e,limit:`500`});y.value=await p(`/api/graph?${t}`),M.value&&=B.value.find(({id:e})=>e===M.value?.id)??null}catch(e){y.value=null,_.reportError(e)}finally{b.value=!1}}}function K(e){S.value=S.value===e?`all`:e}function q(e){C.value=e}function se(e){x.value=``,S.value=e.originQuadrant,C.value=`all`,M.value=e}return(e,i)=>(a(),u(`section`,Y,[c(`div`,X,[i[15]||=c(`div`,{class:`organizer-principle`},[c(`p`,{class:`eyebrow`},`HOW CLASSIFICATION WORKS`),c(`h3`,null,`先看知识和确认状态,四象限只保留发现来源`),c(`p`,null,` 待确认内容也可被 Agent 检索;实际使用达到阈值会标记为“Agent 已确认”,人工确认仍具有更高权重。 `)],-1),c(`div`,ce,[c(`strong`,null,d(oe.value),1),i[13]||=c(`span`,null,`条需要你处理`,-1),i[14]||=c(`small`,null,`旧数据缺少确认记录时也会进入这里`,-1)])]),c(`template`,null,[c(`div`,le,[c(`label`,Z,[i[16]||=c(`span`,null,`筛选知识`,-1),r(c(`input`,{"onUpdate:modelValue":i[0]||=e=>x.value=e,type:`search`,placeholder:`搜索内容、类型或来源`},null,512),[[v,x.value]])]),c(`div`,ue,[i[18]||=c(`span`,null,`发现来源`,-1),c(`button`,{type:`button`,"data-quadrant":`all`,class:m({active:S.value===`all`}),"aria-pressed":S.value===`all`,onClick:i[1]||=e=>S.value=`all`},[i[17]||=o(` 全部 `,-1),c(`strong`,null,d(B.value.length),1)],10,Q),(a(),u(s,null,t(R,e=>c(`button`,{key:e.value,type:`button`,"data-quadrant":e.value,class:m({active:S.value===e.value}),"aria-pressed":S.value===e.value,title:e.coordinate,onClick:t=>K(e.value)},[o(d(e.short)+` `,1),c(`strong`,null,d(re.value[e.value]),1)],10,de)),64))]),c(`div`,$,[i[20]||=c(`span`,null,`确认状态`,-1),c(`button`,{type:`button`,"data-review-state":`all`,class:m({active:C.value===`all`}),"aria-pressed":C.value===`all`,onClick:i[2]||=e=>q(`all`)},[i[19]||=o(` 全部 `,-1),c(`strong`,null,d(U.value.length),1)],10,fe),(a(),u(s,null,t(z,e=>c(`button`,{key:e.value,type:`button`,"data-review-state":e.value,class:m([`state-${e.value}`,{active:C.value===e.value}]),"aria-pressed":C.value===e.value,title:e.hint,onClick:t=>q(e.value)},[o(d(e.label)+` `,1),c(`strong`,null,d(ae.value[e.value]),1)],10,pe)),64))]),c(`p`,me,[o(` 显示 `+d(W.value.length)+` / `+d(U.value.length)+` 条 `,1),C.value===`all`?f(``,!0):(a(),u(`span`,he,` · `+d(z.find(({value:e})=>e===C.value)?.label),1))]),V.value.length?(a(),u(`button`,{key:0,class:`toolbar-action batch-confirm-action`,type:`button`,onClick:i[3]||=e=>L.value=!0},` 批量确认 · `+d(V.value.length)+` 组 `,1)):f(``,!0),c(`button`,{class:`toolbar-action`,type:`button`,onClick:i[4]||=e=>G()},`刷新`)]),y.value?.truncated?(a(),u(`p`,ge,` 当前知识量超过单次读取上限;本页统计只覆盖本次读取到的内容。 `)):f(``,!0),b.value&&!y.value?(a(),u(`div`,_e,`正在读取知识…`)):(a(),u(`div`,{key:2,class:m([`organizer-layout`,{"has-selection":M.value}])},[c(`section`,ve,[i[21]||=c(`div`,{class:`organizer-table-head`,"aria-hidden":`true`},[c(`span`,null,`知识内容`),c(`span`,null,`发现时象限`),c(`span`,null,`确认状态`),c(`span`,null,`确认依据`),c(`span`,null,`更新时间`)],-1),c(`div`,ye,[(a(!0),u(s,null,t(W.value,e=>(a(),u(`button`,{key:`${e.itemKind}:${e.id}`,type:`button`,class:m([`organizer-row`,{selected:M.value?.id===e.id}]),onClick:t=>M.value=e},[c(`span`,xe,[c(`strong`,null,d(e.title),1),c(`small`,null,d(e.body),1)]),c(`span`,{class:m([`quadrant-chip`,e.originQuadrant])},d(n(T)(e.originQuadrant)),3),c(`span`,{class:m([`review-chip`,`state-${n(O)(e)}`])},d(n(w)(e)),3),c(`span`,Se,d(n(D)(e)),1),c(`time`,null,d(n(A)(n(E)(e))),1)],10,be))),128))]),W.value.length?f(``,!0):(a(),u(`div`,Ce,d(B.value.length?`当前筛选条件下没有内容`:`个人空间还没有可整理的结构化知识`),1))]),g(F,{item:M.value,graph:y.value,editable:``,onConfirm:i[5]||=e=>N.value=e,onEdit:i[6]||=e=>I.value=e,onOpenReplacement:se},null,8,[`item`,`graph`])],2))]),g(P,{item:I.value,"personal-space-id":n(_).activePersonalSpace?.id??``,"personal-project-id":null,projects:n(_).state?.personalProjects??[],"replacement-items":B.value,onClose:i[7]||=e=>I.value=null,onSaved:i[8]||=e=>G()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),g(ne,{item:N.value,"personal-space-id":n(_).activePersonalSpace?.id??``,"personal-project-id":null,onClose:i[9]||=e=>N.value=null,onSaved:i[10]||=e=>G()},null,8,[`item`,`personal-space-id`]),L.value?(a(),l(J,{key:0,groups:V.value,"personal-space-id":n(_).activePersonalSpace?.id??``,onClose:i[11]||=e=>L.value=!1,onSaved:i[12]||=e=>G()},null,8,[`groups`,`personal-space-id`])):f(``,!0)]))}}),[[`__scopeId`,`data-v-90794584`]]);export{we as default};
@@ -1 +0,0 @@
1
- import{T as e,f as t,y as n}from"./console-tbvTUi6p.js";import{t as r}from"./KnowledgeWorkspace-DVZusvem.js";var i=n({__name:`KnowledgePage`,setup(n){return(n,i)=>(e(),t(r))}});export{i as default};
@@ -1,4 +0,0 @@
1
- import{A as e,C as t,D as n,L as r,M as i,P as a,S as o,T as s,_ as c,a as l,c as u,d,f,g as p,j as m,m as h,nt as g,o as _,p as v,r as y,t as b,tt as x,u as S,v as C,w,y as T}from"./console-tbvTUi6p.js";import{a as E,i as D,n as O,o as ee,r as k}from"./runtime-dom.esm-bundler-DttsK21F.js";import{_ as A,n as j,t as M,v as te}from"./paths-B790iniO.js";import{t as N}from"./vue-router-BYTAoWT3.js";import{n as ne,r as P,t as re}from"./identity-B3s5CXhv.js";import{C as F,E as I,S as ie,T as ae,_ as oe,c as se,d as ce,g as le,h as ue,l as de,m as fe,o as pe,p as me,u as he,v as ge,x as _e,y as ve}from"./model-DVT8sjy9.js";import{n as ye,r as be,t as xe}from"./KnowledgeInspector-BSpz5Sfm.js";function Se(e,t){let n=null;function r(){n=null,e()}return{schedule(){n!==null&&clearTimeout(n),n=setTimeout(r,t)},flush(){n!==null&&(clearTimeout(n),r())},cancel(){n!==null&&(clearTimeout(n),n=null)}}}var L=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ce(e,t=18){let n=String(e??``).trim();if(!n)return`未记录`;if(n.length<=t)return n;if(L.test(n))return n.slice(0,8);let r=Math.max(7,Math.ceil((t-1)*.58)),i=Math.max(4,t-r-1);return`${n.slice(0,r)}…${n.slice(-i)}`}function we(e){let t=e?.attributes?.projectId;return Ce(t||e?.id,t?26:18)}var Te=[`#537966`,`#867550`,`#65758a`,`#8a655f`,`#6f6a88`,`#598080`,`#8a765f`],Ee=.18,De=5,Oe=1.5;function ke(e,t,n={}){let r=globalThis.d3;if(!r)throw Error(`D3 graph runtime is unavailable`);let i=typeof n==`function`?{onNodeSelect:n}:n,a=Math.max(e.clientWidth||0,760),o=Math.max(e.clientHeight||0,520),s=t.nodes.map(e=>({...e})),c=new Set(s.map(({id:e})=>e)),l=t.edges.map((e,t)=>R(e,t)).filter(({sourceId:e,targetId:t})=>c.has(e)&&c.has(t)),u=r.select(e);u.selectAll(`*`).remove(),u.attr(`viewBox`,`0 0 ${a} ${o}`).attr(`preserveAspectRatio`,`xMidYMid meet`);let d=`graph-arrow-${Math.random().toString(36).slice(2)}`;u.append(`defs`).append(`marker`).attr(`id`,d).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,28).attr(`refY`,0).attr(`markerWidth`,5).attr(`markerHeight`,5).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`class`,`graph-arrow`);let f=u.append(`g`).attr(`class`,`graph-viewport`),p=f.append(`g`).attr(`class`,`graph-edges`),m=f.append(`g`).attr(`class`,`graph-edge-labels`),h=f.append(`g`).attr(`class`,`graph-nodes`),g=p.selectAll(`line.graph-edge`).data(l,({id:e})=>e).join(`line`).attr(`class`,e=>[`graph-edge`,e.invalid_at?`historical`:null,B(e)?`human-change-pending`:null,e.human_change_status===`viewed`?`human-change-viewed`:null].filter(Boolean).join(` `)).attr(`marker-end`,`url(#${d})`),_=p.selectAll(`line.graph-edge-hit`).data(l,({id:e})=>e).join(`line`).attr(`class`,`graph-edge-hit`).attr(`role`,`button`).attr(`tabindex`,0).attr(`aria-label`,e=>`${e.type}: ${e.fact||`关系`}`);_.append(`title`).text(e=>e.fact||e.type);let v=l.length<=90?m.selectAll(`text`).data(l,({id:e})=>e).join(`text`).attr(`class`,`graph-edge-label`).text(e=>e.type):m.selectAll(`text`),y=h.selectAll(`g.graph-node`).data(s,({id:e})=>e).join(`g`).attr(`class`,e=>[`graph-node`,z(e)?`project-node`:null,B(e)?`human-change-pending`:null,e.human_change_status===`viewed`?`human-change-viewed`:null].filter(Boolean).join(` `)).attr(`tabindex`,0).attr(`role`,`button`).attr(`aria-label`,e=>`${e.name},ID ${we(e)}`);y.filter(e=>!z(e)).append(`circle`).attr(`class`,`graph-node-shape`).attr(`r`,e=>10+Math.min(7,V(e.id,l))).attr(`fill`,e=>je(e.type)),y.filter(z).append(`circle`).attr(`class`,`graph-project-ring`).attr(`r`,24),y.filter(z).append(`circle`).attr(`class`,`graph-node-shape`).attr(`r`,19),y.filter(z).append(`path`).attr(`class`,`graph-project-icon`).attr(`d`,`M-9,-7H-3L0,-4H9V7H-9Z`),y.filter(B).append(`circle`).attr(`class`,`graph-node-human-marker`).attr(`cx`,e=>z(e)?20:12).attr(`cy`,e=>z(e)?-20:-12).attr(`r`,4),y.append(`text`).attr(`class`,`graph-node-label`).attr(`y`,e=>z(e)?39:26+Math.min(7,V(e.id,l))).text(e=>H(e.name,22)),y.append(`text`).attr(`class`,`graph-node-id`).attr(`y`,e=>z(e)?51:38+Math.min(7,V(e.id,l))).text(e=>`#${we(e)}`);let b=y.append(`g`).attr(`class`,`graph-search-badge`).attr(`transform`,e=>`translate(0,${z(e)?-36:-28})`);b.append(`rect`).attr(`x`,-15).attr(`y`,-8).attr(`width`,30).attr(`height`,15).attr(`rx`,4),b.append(`text`).attr(`y`,3).text(`命中`),y.append(`title`).text(e=>[e.name,e.type,`ID: ${e.id}`,z(e)?`已标记为项目`:null,B(e)?e.human_change_status===`unseen`?`人工修改后,Agent 尚未查看`:`Agent 已查看,等待完成审核`:null].filter(Boolean).join(`
2
- `));let x=r.zoom().scaleExtent([Ee,De]).on(`zoom`,e=>f.attr(`transform`,e.transform));u.call(x).on(`dblclick.zoom`,null);let S=r.forceSimulation(s).force(`link`,r.forceLink(l).id(({id:e})=>e).distance(118).strength(.42)).force(`charge`,r.forceManyBody().strength(-390).distanceMax(620)).force(`collide`,r.forceCollide().radius(e=>z(e)?58:38+Math.min(10,V(e.id,l)))).force(`project-focus`,r.forceRadial(e=>z(e)?70:210,a/2,o/2).strength(e=>z(e)?.55:.008)).force(`center`,r.forceCenter(a/2,o/2)).force(`x`,r.forceX(a/2).strength(.025)).force(`y`,r.forceY(o/2).strength(.025)).stop();for(let e=0;e<220;e+=1)S.tick();w();let C=r.drag().on(`start`,function(e,t){e.sourceEvent?.stopPropagation(),t.dragMoved=!1,t.fx=t.x,t.fy=t.y}).on(`drag`,function(e,t){t.dragMoved=!0,t.fx=e.x,t.fy=e.y,t.x=e.x,t.y=e.y,r.select(this).classed(`pinned`,!0),w()}).on(`end`,function(e,t){t.dragMoved?(t.fx=t.x,t.fy=t.y):(t.fx=null,t.fy=null,r.select(this).classed(`pinned`,!1)),delete t.dragMoved});return y.call(C),y.on(`click`,(e,t)=>{e.stopPropagation(),T(t)}).on(`keydown`,(e,t)=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),T(t))}).on(`dblclick`,(e,t)=>{e.stopPropagation(),t.fx=null,t.fy=null,r.select(e.currentTarget).classed(`pinned`,!1),S.alpha(.35).restart(),window.setTimeout(()=>S.stop(),700)}),_.on(`click`,(e,t)=>{e.stopPropagation(),D(t)}).on(`keydown`,(e,t)=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),D(t))}),u.on(`click.selection`,t=>{t.target===e&&k()}),j(s,0),{zoomIn:()=>A(1.32),zoomOut:()=>A(.76),fit:()=>j(s),reset:()=>{k(),u.transition().duration(220).call(x.transform,r.zoomIdentity)},selectItem(e,t){if(e===`entity`){let e=s.find(e=>e.id===t);return e?(E(e),j([e]),!0):!1}let n=l.find(e=>e.id===t);return n?(O(n),j([n.source,n.target]),!0):!1},focusByNames(e,{projectOnly:t=!1,searchMatch:n=!1}={}){let r=s.filter(n=>e.has(n.name)&&(!t||z(n)));if(!r.length)return n?ee({nodeIds:new Set,edgeIds:new Set,selectedNodeId:null,selectedEdgeId:null,searchMatch:n}):k(),0;let i=new Set(r.map(({id:e})=>e));return ee({nodeIds:i,edgeIds:new Set(l.filter(({sourceId:e,targetId:t})=>i.has(e)&&i.has(t)).map(({id:e})=>e)),selectedNodeId:null,selectedEdgeId:null,searchMatch:n}),j(r),r.length},clearSelection:k,destroy(){S.stop(),u.on(`.zoom`,null).on(`.selection`,null),u.selectAll(`*`).remove()}};function w(){g.attr(`x1`,e=>e.source.x).attr(`y1`,e=>e.source.y).attr(`x2`,e=>e.target.x).attr(`y2`,e=>e.target.y),_.attr(`x1`,e=>e.source.x).attr(`y1`,e=>e.source.y).attr(`x2`,e=>e.target.x).attr(`y2`,e=>e.target.y),v.attr(`x`,e=>(e.source.x+e.target.x)/2).attr(`y`,e=>(e.source.y+e.target.y)/2-5),y.attr(`transform`,e=>`translate(${e.x},${e.y})`)}function T(e){E(e),i.onNodeSelect?.(e)}function E(e){let t=new Set([e.id]),n=new Set;for(let r of l)r.sourceId!==e.id&&r.targetId!==e.id||(n.add(r.id),t.add(r.sourceId),t.add(r.targetId));ee({nodeIds:t,edgeIds:n,selectedNodeId:e.id,selectedEdgeId:null})}function D(e){O(e),i.onEdgeSelect?.(e)}function O(e){ee({nodeIds:new Set([e.sourceId,e.targetId]),edgeIds:new Set([e.id]),selectedNodeId:null,selectedEdgeId:e.id})}function ee({nodeIds:e,edgeIds:t,selectedNodeId:n,selectedEdgeId:r,searchMatch:i=!1}){y.classed(`selected`,({id:e})=>e===n).classed(`related`,({id:t})=>e.has(t)&&t!==n).classed(`dimmed`,({id:t})=>!e.has(t)).classed(`search-match`,({id:t})=>i&&e.has(t)),g.classed(`selected`,({id:e})=>e===r).classed(`related`,({id:e})=>t.has(e)).classed(`dimmed`,({id:e})=>t.size>0?!t.has(e):!0).classed(`search-match`,({id:e})=>i&&t.has(e)),v.classed(`selected`,({id:e})=>e===r).classed(`related`,({id:e})=>t.has(e)).classed(`dimmed`,({id:e})=>t.size>0?!t.has(e):!0).classed(`search-match`,({id:e})=>i&&t.has(e))}function k(){y.classed(`selected related dimmed search-match`,!1),g.classed(`selected related dimmed search-match`,!1),v.classed(`selected related dimmed search-match`,!1)}function A(e){u.transition().duration(180).call(x.scaleBy,e)}function j(e,t=220){if(!e.length)return;let n=e.map(({x:e})=>e),i=e.map(({y:e})=>e),s=Math.min(...n),c=Math.max(...n),l=Math.min(...i),d=Math.max(...i),f=Math.max(c-s,90),p=Math.max(d-l,90),m=Math.max(Ee,Math.min(Oe,.82/Math.max(f/a,p/o))),h=(s+c)/2,g=(l+d)/2,_=r.zoomIdentity.translate(a/2-m*h,o/2-m*g).scale(m);(t?u.transition().duration(t):u).call(x.transform,_)}}function R(e,t){let n=Ae(e.source),r=Ae(e.target);return{...e,id:e.id??`edge-${t}-${n}-${r}`,sourceId:n,targetId:r,source:n,target:r}}function Ae(e){return typeof e==`object`&&e?e.id:e}function je(e){return Te[Math.floor(U(e)*Te.length)%Te.length]}function z(e){return e?.type===`PersonalProject`||e?.type===`RelatedPersonalProject`}function B(e){return e?.human_change_status===`unseen`||e?.human_change_status===`viewed`}function V(e,t){return t.reduce((t,n)=>t+Number(n.sourceId===e||n.targetId===e),0)}function H(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e}function U(e=``){let t=2166136261;for(let n of e)t=Math.imul(t^n.charCodeAt(0),16777619);return(t>>>0)%1e4/1e4}var W=ke,Me=T({__name:`GraphCanvas`,props:{graph:{},selectedItem:{}},emits:[`selectNode`,`selectEdge`],setup(n,{expose:r,emit:i}){let c=n,l=i,u=a(null),d=null;w(f),e(()=>c.graph,f,{deep:!1}),e([()=>c.selectedItem?.itemKind,()=>c.selectedItem?.id],p),t(()=>d?.destroy()),r({zoomIn:()=>d?.zoomIn(),zoomOut:()=>d?.zoomOut(),fit:()=>d?.fit(),reset:()=>d?.reset(),clearSelection:()=>d?.clearSelection(),selectItem:(e,t)=>d?.selectItem(e,t)??!1,focusByNames:(e,t)=>d?.focusByNames(e,t)??0});async function f(){await o(),u.value&&(d?.destroy(),d=W(u.value,c.graph,{onNodeSelect:e=>l(`selectNode`,e),onEdgeSelect:e=>l(`selectEdge`,e)}),p())}function p(){let e=c.selectedItem;e&&d?.selectItem(e.itemKind,e.id)}return(e,t)=>(s(),h(`svg`,{ref_key:`svg`,ref:u,viewBox:`0 0 1000 620`,role:`img`,"aria-label":`知识关系图`},null,512))}}),G={key:0,open:``,class:`project-dialog knowledge-project-dialog vue-dialog`},K={class:`project-dialog-shell`},Ne={class:`project-dialog-header`},q={class:`knowledge-project-source`},J={class:`knowledge-project-mode`},Pe=[`disabled`],Fe={key:0,class:`knowledge-project-fields`},Y={class:`full-width`},Ie={key:1,class:`knowledge-project-fields`},Le={class:`full-width`},Re={key:2,class:`knowledge-project-relation`},ze={class:`toggle-row`},Be={class:`knowledge-project-preview`},X={key:0,class:`knowledge-project-compare`},Ve={key:1,class:`knowledge-project-conflict-options`},He={class:`knowledge-project-reason`},Ue={key:3,class:`publish-dialog-error`,role:`alert`},We={class:`knowledge-project-actions`},Ge=[`disabled`],Ke=T({__name:`KnowledgeProjectDialog`,props:{item:{},personalSpaceId:{},personalProjectId:{},projects:{}},emits:[`close`,`saved`],setup(t,{emit:n}){let r=t,o=n,u=b(),f=a(`create`),p=a(``),m=a(``),_=a(``),y=a(``),w=a(!0),T=a(`RELATED_TO`),D=a(`defer`),A=a(``),j=a(null),M=a(!1),te=a(!1),N=a(``),F=a(!1),I=0,ie=S(()=>r.item?.itemKind===`entity`?r.item.raw:null),ae=S(()=>r.item?.assignments.at(0)?.project_id??r.item?.evidence.find(({personal_project_id:e})=>e)?.personal_project_id??r.personalProjectId??null),oe=S(()=>r.projects.filter(({project_id:e})=>e!==ae.value)),se=S(()=>oe.value.map(e=>({value:e.project_id,label:e.profile.name,meta:`#${re(e.project_id,26)}`,search:ne(e.project_id)}))),ce=S(()=>oe.value.find(({project_id:e})=>e===p.value)??null),le=S(()=>{if(f.value===`create`)return{label:`创建预览`,title:`将创建一个新的个人项目`,copy:ae.value?`当前节点继续由来源项目主要维护,新项目会引用它。`:`当前节点会成为新项目的主要归属知识。`};if(M.value)return{label:`正在检查`,title:`正在检查重复与冲突…`,copy:`只比较目标项目和当前节点。`};if(!j.value)return{label:`等待检查`,title:`请选择目标项目`,copy:`选择后会先检查重复与冲突。`};let e={none:[`可以加入`,`未检测到重复或已确认的同名冲突`],already_linked:[`已经加入`,`目标项目已经在使用这条知识`],exact_duplicate:[`发现重复`,`将复用目标项目已有内容,不再创建副本`],conflict:[`发现冲突`,`两条已确认知识同名,但内容不同`]},[t,n]=e[j.value.match.kind]??e.none;return{label:t,title:n,copy:j.value.match.reason}}),ue=S(()=>{let e=f.value===`existing`?`来源项目`:`新项目`,t=f.value===`existing`?`目标项目`:`来源项目`;return{RELATED_TO:`与${t}相关`,PART_OF:`${e}属于${t}`,USES_KNOWLEDGE_FROM:`${e}从${t}继承共享知识`,DEPENDS_ON:`${e}依赖${t}`,PROVIDES_TO:`${e}向${t}提供能力`,SHARES_CAPABILITY_WITH:`与${t}共享能力`,SUCCESSOR_OF:`${e}是${t}的后继`}}),de=S(()=>Object.entries(ue.value).map(([e,t])=>({value:e,label:t}))),fe=S(()=>te.value?`正在处理…`:f.value===`create`?`创建项目`:j.value?.match.kind===`exact_duplicate`?`复用现有内容`:`加入项目`),pe=S(()=>te.value||f.value===`existing`&&(M.value||!j.value));e(()=>r.item,e=>{I+=1,j.value=null,M.value=!1,N.value=``,f.value=`create`,F.value=!1;let t=e?.itemKind===`entity`?e.raw:null;m.value=t?.name??``,_.value=ge(t?.name??``),y.value=t?.summary??``,A.value=t?`基于图谱节点“${t.name}”建立项目知识范围`:``,w.value=!0,T.value=`RELATED_TO`,D.value=`defer`,p.value=oe.value[0]?.project_id??``},{immediate:!0}),e(m,e=>{F.value||(_.value=ge(e))}),e([f,p,()=>r.item],()=>{f.value===`existing`?me():(I+=1,j.value=null,M.value=!1,N.value=``)});async function me(){let e=r.item;if(!e||e.itemKind!==`entity`||!p.value)return;let t=++I;M.value=!0,j.value=null,N.value=``;try{let n=await l(`/api/knowledge/entity/${encodeURIComponent(e.id)}/project-action/preview`,{personalSpaceId:r.personalSpaceId,targetProjectId:p.value});if(t!==I||r.item?.id!==e.id)return;j.value=n,n.match.kind===`conflict`&&(D.value=`defer`)}catch(e){if(t!==I)return;ve(_e(e)),u.reportError(e)}finally{t===I&&(M.value=!1)}}async function he(){let e=r.item;if(!(!e||e.itemKind!==`entity`)){if(f.value===`create`&&(!m.value.trim()||!_.value.trim()))return ve(`请填写项目名称和项目标识`);if(f.value===`existing`&&!p.value)return ve(`请选择目标项目`);if(f.value===`existing`&&!j.value)return ve(`请等待重复与冲突检查完成`);if(!A.value.trim())return ve(`请填写操作说明`);te.value=!0,N.value=``;try{let t=await l(`/api/knowledge/entity/${encodeURIComponent(e.id)}/project-action`,{personalSpaceId:r.personalSpaceId,mode:f.value,targetProjectId:f.value===`existing`?p.value:null,newProjectId:f.value===`create`?_.value.trim():null,newProjectName:f.value===`create`?m.value.trim():null,newProjectPurpose:f.value===`create`?y.value.trim():null,keepSourceRelation:!!(ae.value&&w.value),relationType:T.value,conflictResolution:D.value,reason:A.value.trim()}),n=f.value===`create`?m.value.trim():ce.value?.profile.name??`目标项目`;o(`close`),o(`saved`,t,n)}catch(e){ve(_e(e)),u.reportError(e)}finally{te.value=!1}}}function ge(e){return e.normalize(`NFKC`).toLocaleLowerCase().replace(/[^\p{L}\p{N}]+/gu,`-`).replace(/^-+|-+$/g,``).slice(0,128)||`new-project`}function _e(e){let t=e instanceof Error?e.message:String(e);try{let e=JSON.parse(t);return e.message??e.detail??t}catch{return t}}function ve(e){N.value=e}return(e,n)=>t.item?(s(),h(`dialog`,G,[d(`div`,K,[d(`header`,Ne,[n[16]||=d(`div`,null,[d(`p`,{class:`eyebrow`},`PERSONAL PROJECT`),d(`h3`,null,`建立项目知识范围`),d(`p`,null,`从当前节点创建个人项目,或让已有项目引用这条知识。`)],-1),d(`button`,{class:`secondary-action`,type:`button`,onClick:n[0]||=e=>o(`close`)},`关闭`)]),d(`form`,{class:`knowledge-project-form`,onSubmit:ee(he,[`prevent`])},[d(`div`,q,[n[17]||=d(`span`,null,`来源节点`,-1),d(`strong`,null,g(ie.value?.name),1),d(`p`,null,g(ie.value?.summary||`没有补充说明`),1)]),d(`fieldset`,J,[n[20]||=d(`legend`,null,`选择操作`,-1),d(`label`,null,[i(d(`input`,{"onUpdate:modelValue":n[1]||=e=>f.value=e,type:`radio`,value:`create`},null,512),[[k,f.value]]),n[18]||=d(`span`,null,[d(`strong`,null,`创建新项目`),d(`small`,null,`以当前知识为起点建立独立范围`)],-1)]),d(`label`,{class:x({disabled:oe.value.length===0})},[i(d(`input`,{"onUpdate:modelValue":n[2]||=e=>f.value=e,type:`radio`,value:`existing`,disabled:oe.value.length===0},null,8,Pe),[[k,f.value]]),n[19]||=d(`span`,null,[d(`strong`,null,`加入已有项目`),d(`small`,null,`先检查重复和已确认冲突`)],-1)],2)]),f.value===`create`?(s(),h(`section`,Fe,[d(`label`,null,[n[21]||=c(`项目名称 `,-1),i(d(`input`,{"onUpdate:modelValue":n[3]||=e=>m.value=e,maxlength:`512`,required:``},null,512),[[E,m.value]])]),d(`label`,null,[n[22]||=c(`项目标识 `,-1),i(d(`input`,{"onUpdate:modelValue":n[4]||=e=>_.value=e,maxlength:`128`,required:``,onInput:n[5]||=e=>F.value=!0},null,544),[[E,_.value]])]),d(`label`,Y,[n[23]||=c(`项目用途 `,-1),i(d(`textarea`,{"onUpdate:modelValue":n[6]||=e=>y.value=e,maxlength:`4096`,rows:`3`},null,512),[[E,y.value]])])])):(s(),h(`section`,Ie,[d(`label`,Le,[n[24]||=c(`目标个人项目 `,-1),C(P,{modelValue:p.value,"onUpdate:modelValue":n[7]||=e=>p.value=e,options:se.value,label:`目标个人项目`,searchable:``,required:``},null,8,[`modelValue`,`options`])])])),ae.value?(s(),h(`section`,Re,[d(`label`,ze,[i(d(`input`,{"onUpdate:modelValue":n[8]||=e=>w.value=e,type:`checkbox`},null,512),[[O,w.value]]),n[25]||=d(`span`,null,[d(`strong`,null,`保留与来源项目的关系`),d(`small`,null,`当前知识的主要归属不会被覆盖`)],-1)]),d(`label`,null,[n[26]||=c(`项目关系 `,-1),C(P,{modelValue:T.value,"onUpdate:modelValue":n[9]||=e=>T.value=e,options:de.value,label:`项目关系`,disabled:!w.value},null,8,[`modelValue`,`options`,`disabled`])])])):v(``,!0),d(`section`,Be,[d(`div`,null,[d(`span`,null,g(le.value.label),1),d(`strong`,null,g(le.value.title),1),d(`p`,null,g(le.value.copy),1)]),j.value&&[`exact_duplicate`,`conflict`].includes(j.value.match.kind)?(s(),h(`div`,X,[d(`article`,null,[n[27]||=d(`span`,null,`当前节点`,-1),d(`strong`,null,g(j.value.item_name),1),d(`p`,null,g(j.value.item_summary||`没有补充说明`),1)]),d(`article`,null,[n[28]||=d(`span`,null,`目标项目已有内容`,-1),d(`strong`,null,g(j.value.match.item_name||`目标项目内容`),1),d(`p`,null,g(j.value.match.item_summary||`没有补充说明`),1)])])):v(``,!0),j.value?.match.kind===`conflict`?(s(),h(`fieldset`,Ve,[n[33]||=d(`legend`,null,`冲突处理`,-1),d(`label`,null,[i(d(`input`,{"onUpdate:modelValue":n[10]||=e=>D.value=e,type:`radio`,value:`defer`},null,512),[[k,D.value]]),n[29]||=c(` 暂不采用,保留待处理记录`,-1)]),d(`label`,null,[i(d(`input`,{"onUpdate:modelValue":n[11]||=e=>D.value=e,type:`radio`,value:`keep_target`},null,512),[[k,D.value]]),n[30]||=c(` 保留目标项目现有内容`,-1)]),d(`label`,null,[i(d(`input`,{"onUpdate:modelValue":n[12]||=e=>D.value=e,type:`radio`,value:`use_source`},null,512),[[k,D.value]]),n[31]||=c(` 使用当前来源内容`,-1)]),d(`label`,null,[i(d(`input`,{"onUpdate:modelValue":n[13]||=e=>D.value=e,type:`radio`,value:`coexist`},null,512),[[k,D.value]]),n[32]||=c(` 允许两条内容并存`,-1)])])):v(``,!0)]),d(`label`,He,[n[34]||=c(`操作说明 `,-1),i(d(`textarea`,{"onUpdate:modelValue":n[14]||=e=>A.value=e,maxlength:`2048`,rows:`3`,required:``},null,512),[[E,A.value]])]),N.value?(s(),h(`p`,Ue,g(N.value),1)):v(``,!0),d(`div`,We,[d(`button`,{class:`secondary-action`,type:`button`,onClick:n[15]||=e=>o(`close`)},`取消`),d(`button`,{class:`primary-action`,type:`submit`,disabled:pe.value},g(fe.value),9,Ge)])],32)])])):v(``,!0)}}),qe={key:0,open:``,class:`project-profile-dialog vue-dialog`},Je={class:`project-profile-dialog-header`},Ye=[`disabled`],Xe={class:`project-profile-fields`},Ze={class:`project-profile-wide-field`},Qe={class:`project-profile-wide-field`},$e={class:`project-profile-wide-field`},et={class:`project-profile-wide-field`},tt={class:`project-source-editor`},nt={key:0,class:`project-source-list`},rt=[`onUpdate:modelValue`],it=[`onUpdate:modelValue`],at=[`value`],ot={class:`project-source-wide-field`},st=[`onUpdate:modelValue`],ct={class:`project-source-wide-field`},Z=[`onUpdate:modelValue`],lt=[`onUpdate:modelValue`],ut=[`onClick`],dt={key:1,class:`project-source-empty`},ft={key:0,class:`project-profile-error`,role:`alert`},pt={class:`project-profile-dialog-actions`},mt=[`disabled`],Q=[`disabled`],ht=T({__name:`PersonalProjectProfileDialog`,props:{project:{},materialType:{}},emits:[`close`,`saved`],setup(t,{emit:r}){let c=t,l=r,f=a(``),p=a(``),m=a(``),y=a(``),b=a(`planned`),x=a(``),C=a([]),w=a(``),T=a(!1),O=a(null),k=a(null),A=a(null),j=a(null),M=S(()=>({ProjectPurpose:`项目目标`,ProjectScope:`项目范围`,ProjectSource:`资料来源`,ProjectBoundary:`项目边界`,ProjectAssessment:`档案评估`,AssessmentDimension:`评估维度`,PersonalProject:`项目档案`,RelatedPersonalProject:`关联项目`})[c.materialType??``]??`项目档案`),te=[[`prd`,`PRD`],[`product_document`,`产品文档`],[`technical_document`,`技术文档`],[`frontend_repository`,`前端仓库`],[`backend_repository`,`后端仓库`],[`repository`,`代码仓库`],[`design`,`设计稿`],[`runbook`,`运行手册`],[`monitoring`,`监控`],[`issue_tracker`,`事项追踪`],[`other`,`其他`]],N=new Set(te.map(([e])=>e)),ne=new Set([`normal`,`private`,`restricted`]);e(()=>[c.project,c.materialType],async([e])=>{if(!e)return;let t=e.profile;f.value=t.name,p.value=t.purpose??``,m.value=t.scope??``,y.value=t.technical_summary??``,b.value=t.lifecycle??`planned`,x.value=(t.boundaries??[]).map(e=>String(e)).join(`
3
- `),C.value=(t.sources??[]).map(P),w.value=``,await o(),se()},{immediate:!0});function P(e,t){let n=typeof e.kind==`string`&&N.has(e.kind)?e.kind:`other`,r=typeof e.sensitivity==`string`&&ne.has(e.sensitivity)?e.sensitivity:`normal`;return{key:re(e.key)||`source-${t+1}`,kind:n,title:re(e.title)||re(e.name),uri:re(e.uri),summary:re(e.summary),sensitivity:r}}function re(e){return typeof e==`string`?e:``}function F(e){return e.trim()||null}function I(){return[...new Set(x.value.split(`
4
- `).map(e=>e.trim()).filter(Boolean))].slice(0,64)}function ie(){C.value.push({key:`source-${Date.now().toString(36)}-${C.value.length+1}`,kind:`other`,title:``,uri:``,summary:``,sensitivity:`normal`})}function ae(e){C.value.splice(e,1)}async function oe(){if(!c.project||T.value)return;let e=f.value.trim();if(!e){w.value=`请填写项目名称`;return}if(C.value.some(e=>!e.title.trim())){w.value=`每条资料来源都需要名称`;return}T.value=!0,w.value=``;try{let t=await _(`/api/personal-projects`,{personalSpaceId:c.project.personal_space_id,projectId:c.project.project_id,profile:{name:e,purpose:F(p.value),scope:F(m.value),technicalSummary:F(y.value),lifecycle:b.value,sources:C.value.map(e=>({key:e.key,kind:e.kind,title:e.title.trim(),uri:F(e.uri),summary:F(e.summary),sensitivity:e.sensitivity})),boundaries:I(),assessment:c.project.profile.assessment??null}});l(`saved`,t),l(`close`)}catch(e){w.value=e instanceof Error?e.message:`项目资料保存失败`}finally{T.value=!1}}function se(){c.materialType===`ProjectPurpose`?O.value?.focus():c.materialType===`ProjectScope`?k.value?.focus():c.materialType===`ProjectBoundary`?A.value?.focus():c.materialType===`ProjectSource`&&j.value?.focus()}return(e,r)=>t.project?(s(),h(`dialog`,qe,[d(`form`,{class:`project-profile-dialog-shell`,onSubmit:ee(oe,[`prevent`])},[d(`header`,Je,[d(`div`,null,[r[8]||=d(`p`,{class:`eyebrow`},`PROJECT MATERIAL`,-1),d(`h3`,null,`编辑`+g(M.value),1),r[9]||=d(`p`,null,` 这些字段属于项目档案;保存后会重新生成关系图中的项目资料节点。 `,-1)]),d(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[0]||=e=>l(`close`)},` 关闭 `,8,Ye)]),d(`div`,Xe,[d(`label`,null,[r[10]||=d(`span`,null,`项目名称`,-1),i(d(`input`,{"onUpdate:modelValue":r[1]||=e=>f.value=e,name:`project-name`,maxlength:`160`,required:``},null,512),[[E,f.value]])]),d(`label`,null,[r[12]||=d(`span`,null,`生命周期`,-1),i(d(`select`,{"onUpdate:modelValue":r[2]||=e=>b.value=e,name:`project-lifecycle`},[...r[11]||=[d(`option`,{value:`planned`},`计划中`,-1),d(`option`,{value:`active`},`进行中`,-1),d(`option`,{value:`maintenance`},`维护中`,-1),d(`option`,{value:`archived`},`已归档`,-1)]],512),[[D,b.value]])]),d(`label`,Ze,[r[13]||=d(`span`,null,`项目目标`,-1),i(d(`textarea`,{ref_key:`purposeField`,ref:O,"onUpdate:modelValue":r[3]||=e=>p.value=e,name:`project-purpose`,maxlength:`4096`,rows:`4`,placeholder:`说明项目为什么存在、希望达成什么结果`},null,512),[[E,p.value]])]),d(`label`,Qe,[r[14]||=d(`span`,null,`项目范围`,-1),i(d(`textarea`,{ref_key:`scopeField`,ref:k,"onUpdate:modelValue":r[4]||=e=>m.value=e,name:`project-scope`,maxlength:`4096`,rows:`4`,placeholder:`说明项目包含的对象、流程或交付物`},null,512),[[E,m.value]])]),d(`label`,$e,[r[15]||=d(`span`,null,`技术摘要`,-1),i(d(`textarea`,{"onUpdate:modelValue":r[5]||=e=>y.value=e,name:`project-technical-summary`,maxlength:`4096`,rows:`4`,placeholder:`记录关键技术结构和运行方式`},null,512),[[E,y.value]])]),d(`label`,et,[r[16]||=d(`span`,null,`项目边界`,-1),i(d(`textarea`,{ref_key:`boundariesField`,ref:A,"onUpdate:modelValue":r[6]||=e=>x.value=e,name:`project-boundaries`,maxlength:`8192`,rows:`5`,placeholder:`每行一条明确不在本项目范围内的边界`},null,512),[[E,x.value]]),r[17]||=d(`small`,null,`每行一条;重复内容会在保存时合并。`,-1)])]),d(`section`,tt,[d(`div`,{ref_key:`sourcesHeading`,ref:j,class:`project-source-editor-heading`,tabindex:`-1`},[r[18]||=d(`div`,null,[d(`h4`,null,`资料来源`),d(`p`,null,`保留资料类型、地址和敏感级别;这些内容会投影为图中的资料来源节点。`)],-1),d(`button`,{class:`secondary-action`,type:`button`,onClick:ie},`添加来源`)],512),C.value.length?(s(),h(`div`,nt,[(s(!0),h(u,null,n(C.value,(e,t)=>(s(),h(`article`,{key:e.key,class:`project-source-row`},[d(`label`,null,[r[19]||=d(`span`,null,`名称`,-1),i(d(`input`,{"onUpdate:modelValue":t=>e.title=t,maxlength:`512`,required:``},null,8,rt),[[E,e.title]])]),d(`label`,null,[r[20]||=d(`span`,null,`类型`,-1),i(d(`select`,{"onUpdate:modelValue":t=>e.kind=t},[(s(),h(u,null,n(te,([e,t])=>d(`option`,{key:e,value:e},g(t),9,at)),64))],8,it),[[D,e.kind]])]),d(`label`,ot,[r[21]||=d(`span`,null,`地址`,-1),i(d(`input`,{"onUpdate:modelValue":t=>e.uri=t,maxlength:`2048`,placeholder:`可选,例如仓库或文档地址`},null,8,st),[[E,e.uri]])]),d(`label`,ct,[r[22]||=d(`span`,null,`摘要`,-1),i(d(`textarea`,{"onUpdate:modelValue":t=>e.summary=t,maxlength:`4096`,rows:`2`},null,8,Z),[[E,e.summary]])]),d(`label`,null,[r[24]||=d(`span`,null,`敏感级别`,-1),i(d(`select`,{"onUpdate:modelValue":t=>e.sensitivity=t},[...r[23]||=[d(`option`,{value:`normal`},`普通`,-1),d(`option`,{value:`private`},`私有`,-1),d(`option`,{value:`restricted`},`受限`,-1)]],8,lt),[[D,e.sensitivity]])]),d(`button`,{class:`text-action project-source-remove`,type:`button`,onClick:e=>ae(t)},` 移除 `,8,ut)]))),128))])):(s(),h(`p`,dt,`还没有登记资料来源。`))]),r[25]||=d(`p`,{class:`project-profile-state-note`},` 项目资料不使用普通知识的“确认 / 失效 / 恢复”状态;要改变内容,请直接编辑档案。 `,-1),w.value?(s(),h(`p`,ft,g(w.value),1)):v(``,!0),d(`footer`,pt,[d(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[7]||=e=>l(`close`)},` 取消 `,8,mt),d(`button`,{class:`primary-action`,type:`submit`,disabled:T.value},g(T.value?`正在保存…`:`保存项目资料`),9,Q)])],32)])):v(``,!0)}}),gt={key:0,open:``,class:`publish-dialog vue-dialog`},_t={class:`publish-dialog-shell`},vt={class:`publish-dialog-intro`},yt={class:`publish-release-fields`},bt={key:0,class:`publish-dialog-error`,role:`alert`},xt={class:`publish-dialog-actions`},St=[`disabled`],Ct=[`disabled`],wt=T({__name:`PublishProjectDialog`,props:{project:{}},emits:[`close`,`published`],setup(t,{emit:n}){let r=t,o=n,c=b(),u=a(``),f=a(``),p=a(``),m=a(!1),_=S(()=>c.state?.projects.find(({publication_key:e})=>e&&e===r.project?.publication_key)??null),y=S(()=>_.value?.current_release?.version??null),x=S(()=>c.state?.providers?.workspaces?.find(({status:e})=>e===`ready`)?.providerUrl??null);e(()=>r.project,e=>{e&&(u.value=w(y.value),f.value=``,p.value=``)});async function C(){if(r.project){if(!x.value){p.value=`公共 Provider 当前不可用`;return}if(!u.value.trim()){p.value=`请填写发布版本`;return}if(!f.value.trim()){p.value=`请填写本次更新内容`;return}m.value=!0,p.value=``;try{await l(`/api/projects/publish`,{personalSpaceId:c.activePersonalSpace?.id,localProjectId:r.project.project_id,providerUrl:x.value,releaseVersion:u.value.trim(),updateSummary:f.value.trim()}),c.notify(`“${r.project.profile.name}” ${u.value.trim()} 已发布并记录版本信息。`),await c.refresh(),o(`close`),o(`published`)}catch(e){p.value=e instanceof Error?e.message:`发布失败`,c.reportError(e)}finally{m.value=!1}}}function w(e){if(!e||e===`legacy`)return`v1.0.0`;let t=e.match(/^(v?)(\d+)\.(\d+)\.(\d+)$/);return t?`${t[1]}${t[2]}.${t[3]}.${Number(t[4])+1}`:``}return(e,n)=>t.project?(s(),h(`dialog`,gt,[d(`div`,_t,[n[6]||=d(`p`,{class:`eyebrow`},`PUBLICATION`,-1),n[7]||=d(`h3`,null,`发布到公共空间?`,-1),d(`p`,vt,[d(`strong`,null,g(t.project.profile.name),1),n[3]||=d(`span`,null,`发布后会进入共享 Provider,不再只是本机可见。`,-1)]),d(`div`,yt,[d(`label`,null,[n[4]||=d(`span`,null,`发布版本`,-1),i(d(`input`,{"onUpdate:modelValue":n[0]||=e=>u.value=e,maxlength:`64`,placeholder:`例如 v1.0.0`},null,512),[[E,u.value]]),d(`small`,null,g(y.value?`当前版本 ${y.value}`:`首次发布`),1)]),d(`label`,null,[n[5]||=d(`span`,null,`更新内容`,-1),i(d(`textarea`,{"onUpdate:modelValue":n[1]||=e=>f.value=e,maxlength:`4096`,rows:`4`,placeholder:`说明本次新增、调整或修复了什么`},null,512),[[E,f.value]])])]),n[8]||=d(`div`,{class:`publish-impact`,"aria-label":`发布影响`},[d(`div`,null,[d(`strong`,null,`公开可发现`),d(`span`,null,`连接这个公共服务的用户可以看到该项目。`)]),d(`div`,null,[d(`strong`,null,`你成为 Owner`),d(`span`,null,`系统会自动订阅项目,你可以继续维护项目资料。`)]),d(`div`,null,[d(`strong`,null,`同步项目档案`),d(`span`,null,`项目说明、资料摘要和已登记资料会复制到公共项目。`)])],-1),p.value?(s(),h(`p`,bt,g(p.value),1)):v(``,!0),d(`div`,xt,[d(`button`,{class:`secondary-action`,type:`button`,disabled:m.value,onClick:n[2]||=e=>o(`close`)},`取消`,8,St),d(`button`,{class:`primary-action`,type:`button`,disabled:m.value,onClick:C},g(m.value?`正在发布…`:`确认发布`),9,Ct)])])])):v(``,!0)}}),Tt=15,Et=4;async function Dt({personalSpaceId:e,projects:t,query:n,baseline:r,signal:i,limit:a=Tt,request:o=y}){let s=kt(r),c=t.slice(0,a),l=[];for(let t=0;t<c.length;t+=Et){i?.throwIfAborted();let r=c.slice(t,t+Et);l.push(...await Promise.all(r.map(async t=>{try{let r=At(await o(`/api/search?${new URLSearchParams({personalSpaceId:e,personalProjectId:t.project_id,q:n,limit:`30`})}`,{signal:i})).filter(({key:e})=>!s.has(e));return r.length?{status:`matched`,project:t,count:r.length,score:Math.max(...r.map(({score:e})=>e??0))}:{status:`empty`,project:t}}catch(e){if(i?.aborted)throw e;return{status:`failed`,project:t}}})))}return{matches:l.filter(e=>e.status===`matched`).sort((e,t)=>t.score-e.score||t.count-e.count||e.project.profile.name.localeCompare(t.project.profile.name)),checked:l.length,total:t.length,failed:l.filter(({status:e})=>e===`failed`).length}}function Ot(e){let t=e.failed?`;${e.failed} 个项目暂时无法检查`:``;return e.matches.length?`其他个人项目中有候选内容。当前结果不会混入其他项目,可进入项目查看完整命中${t}。`:e.total?e.failed===e.checked?`其他个人项目暂时无法检查,请稍后重试。`:e.checked<e.total?`已检查前 ${e.checked} / ${e.total} 个其他个人项目,也没有发现候选内容${t}。`:`已检查其他个人项目,也没有发现候选内容${t}。`:`当前没有其他个人项目可继续检查。`}function kt(e){return new Set(At(e).map(({key:e})=>e))}function At(e){return[...(e.entities??[]).map(e=>({key:`entity:${e.id}`,score:e.score})),...(e.facts??[]).map(e=>({key:`fact:${e.id}`,score:e.score}))]}var jt={class:`view graph-view vue-knowledge-view`},Mt={class:`knowledge-view-heading`},Nt={class:`knowledge-mode-switch`,role:`tablist`,"aria-label":`知识查看方式`},Pt=[`aria-selected`],Ft=[`aria-selected`],It={class:`muted`},Lt={class:`graph-toolbar`},Rt={key:0,class:`personal-context-picker`},zt={class:`personal-context-panel`},Bt={class:`personal-context-list`},Vt=[`value`,`checked`],Ht=[`placeholder`,`aria-label`,`value`],Ut={class:`graph-view-actions`},Wt={key:1,class:`graph-controls`,role:`group`,"aria-label":`图谱视图控制`},Gt={key:0,class:`view-loading`},Kt={key:1,class:`knowledge-layout`},qt=[`aria-label`],Jt={key:0,class:`directory-kind-tabs`,role:`tablist`,"aria-label":`目录内容类型`},Yt=[`aria-selected`],Xt=[`aria-selected`],Zt={key:1,id:`directory-panel-knowledge`,class:`directory-tab-panel`,role:`tabpanel`,"aria-labelledby":`directory-tab-knowledge`},Qt={class:`directory-section-heading`},$t={class:`knowledge-status-filter`,role:`group`,"aria-label":`知识内容状态`},en=[`aria-pressed`],tn=[`aria-pressed`],nn=[`aria-pressed`],rn={class:`directory-section-count`},an={class:`knowledge-directory-list`},on=[`data-item-key`,`onClick`],sn={class:`knowledge-row-content`},cn={class:`knowledge-row-title`},ln={class:`knowledge-row-type`},un={class:`knowledge-row-source`},dn={class:`knowledge-row-time`},fn={key:0,class:`empty-state`},pn={key:2,id:`directory-panel-materials`,class:`directory-tab-panel`,role:`tabpanel`,"aria-labelledby":`directory-tab-materials`},mn={class:`directory-section-heading`},hn={class:`directory-section-count`},gn={class:`project-material-list`},_n=[`data-item-key`,`onClick`],vn={class:`project-material-copy`},yn={class:`project-material-type`},bn={key:0,class:`empty-state`},xn={key:1,class:`graph-stage`},Sn={key:0,class:`graph-search-status`,"aria-live":`polite`},Cn={class:`graph-search-status-title`},wn={class:`graph-search-status-copy`},Tn={key:0,class:`graph-search-suggestions`},En={key:2,class:`graph-empty`},Dn={key:2,class:`graph-hint`},On=T({__name:`KnowledgeWorkspace`,props:{personalProjectsOnly:{type:Boolean,default:!1}},setup(i){let l=i,_=b(),w=A(),T=te(),E=a(!1),D=a(null),O=a(null),k=a(null),L=a($(w.query.q)),Ce=a(``),we=a(null),Te=a(null),Ee=a(null),De=a(null),Oe=a(null),ke=a(null),R=a(null),Ae=new Set,je=0,z=0,B=null,V=null,H=S(()=>w.params.mode===`graph`?`graph`:`directory`),U=S(()=>l.personalProjectsOnly?`personal`:w.params.scope===`public`?`public`:`personal`),W=S(()=>String(w.params.spaceId??_.activePersonalSpace?.id??``)),G=S(()=>{let e=w.params.projectId;return typeof e==`string`&&e?e:null}),K=S(()=>Bn(w.query.context)),Ne=S(()=>JSON.stringify([l.personalProjectsOnly,U.value,W.value,G.value,K.value])),q=S(()=>ue(D.value)),J=S(()=>l.personalProjectsOnly?ge(D.value):[]),Pe=S(()=>{let e=L.value.trim().toLocaleLowerCase();return e?J.value.filter(t=>[t.title,t.body,t.type,F(t)].some(t=>t.toLocaleLowerCase().includes(e))):J.value}),Fe=S(()=>[...J.value,...q.value]),Y=S(()=>l.personalProjectsOnly?H.value===`directory`&&O.value?ce(O.value)?`materials`:`knowledge`:$(w.query.section)===`materials`?`materials`:`knowledge`:`knowledge`),Ie=S(()=>[...new Set(q.value.map(({type:e})=>e))].sort()),Le=S(()=>[{value:`all`,label:`全部类型`},...Ie.value.map(e=>({value:e,label:e}))]),Re=[{value:`all`,label:`全部象限`},{value:`known_known`,label:`已知的已知`},{value:`known_unknown`,label:`已知的未知`},{value:`unknown_known`,label:`未知的已知`},{value:`unknown_unknown`,label:`未知的未知`}],ze=[{value:`all`,label:`全部知识`},{value:`profile`,label:`协作偏好`},{value:`regular`,label:`项目与通用知识`}],Be=[{value:`all`,label:`全部人工状态`},{value:`human_changed`,label:`人工改过(全部)`},{value:`unseen`,label:`Agent 未查看`},{value:`viewed`,label:`已查看待审核`},{value:`reviewed`,label:`Agent 已审核`}],X=S(()=>{let e=$(w.query.status);return e===`historical`||e===`all`?e:`current`}),Ve=S(()=>({query:L.value,type:$(w.query.type)||`all`,quadrant:$(w.query.quadrant)||`all`,profile:$(w.query.profile)||`all`,status:X.value,humanChange:$(w.query.human)||`all`})),He=S(()=>se(q.value,Ve.value)),Ue=S(()=>q.value.filter(({invalidAt:e})=>!e).length),We=S(()=>q.value.length-Ue.value),Ge=S(()=>X.value===`current`?Ue.value:X.value===`historical`?We.value:q.value.length),qe=S(()=>X.value===`current`?`当前有效`:X.value===`historical`?`已失效`:`全部状态`),Je=S(()=>D.value?pe(D.value):null),Ye=S(()=>{if(!D.value)return E.value?`正在读取知识…`:`尚未读取图谱`;if(H.value===`graph`){let e=Je.value;return Ce.value||`${e?.nodes.length??0} 个节点 · ${e?.edges.length??0} 条当前关系`}return Y.value===`materials`?Pe.value.length===J.value.length?`${J.value.length} 条项目资料`:`显示 ${Pe.value.length} / ${J.value.length} 条项目资料`:He.value.length===Ge.value?`${qe.value} ${Ge.value} 条知识内容`:`${qe.value}:显示 ${He.value.length} / ${Ge.value} 条知识内容`}),Xe=S(()=>String(q.value.length)),Ze=S(()=>String(J.value.length)),Qe=S(()=>(_.state?.personalProjects??[]).filter(({personal_space_id:e})=>e===W.value)),$e=S(()=>Qe.value.filter(({project_id:e})=>e!==G.value)),et=S(()=>{let e=_.state;if(!e)return[];let t=e.personalSpaces.flatMap(t=>[{key:zn(`personal`,t.id,null),scope:`personal`,spaceId:t.id,projectId:null,providerUrl:null,label:`全部个人项目 · ${t.name}`},...(e.personalProjects??[]).filter(({personal_space_id:e})=>e===t.id).map(e=>({key:zn(`personal`,t.id,e.project_id),scope:`personal`,spaceId:t.id,projectId:e.project_id,providerUrl:null,label:`个人项目 · ${e.profile.name}`}))]);if(l.personalProjectsOnly)return t;let n=e.projects.map(e=>({key:zn(`public`,e.id,null),scope:`public`,spaceId:e.id,projectId:null,providerUrl:e.providerUrl,label:`公共项目 · ${e.name}`}));return[...t,...n]}),tt=S(()=>zn(U.value,W.value,G.value)),nt=S(()=>et.value.map(e=>{let t=e.projectId??e.spaceId;return{value:e.key,label:e.label,meta:`#${re(t,26)}`,search:ne(t)}})),rt=S(()=>U.value===`personal`),it=S(()=>_.state?.personalProjects?.find(({project_id:e})=>e===G.value)??null),at=S(()=>Nn(O.value)),ot=S(()=>R.value?R.value.checking?`当前范围没有命中,正在检查其他个人项目…`:R.value.result?Ot(R.value.result):`当前范围没有找到可定位的内容,可以调整关键词后重试。`:``),st=Se(()=>{vt()},300);e([()=>_.state,()=>w.name,()=>w.params.mode,()=>w.params.spaceId],async([e])=>{e&&await ct()},{immediate:!0}),e([()=>_.state,Ne],async([e])=>{e&&await Z()},{immediate:!0}),e(()=>$(w.query.q),e=>{e===L.value||Ae.has(e)||(st.cancel(),bt(),L.value=e,xt(),H.value===`graph`&&e.trim()&&D.value&&!E.value&&V===Ne.value&&St(e.trim()))},{flush:`sync`}),e(H,async()=>{st.cancel(),bt(),xt(),await o(),kt(),vt()}),e([()=>w.params.itemKind,()=>w.params.itemId],()=>kt()),t(()=>{st.cancel(),bt()});async function ct(){let e=_.activePersonalSpace;if(e){if(w.name===`knowledge-default`){await T.replace(M(`personal`,e.id,`directory`));return}if(W.value===`current`){let t=l.personalProjectsOnly?j(e.id,H.value,G.value):M(U.value,e.id,H.value,{projectId:G.value});await T.replace({path:t,query:w.query});return}w.params.mode!==`directory`&&w.params.mode!==`graph`&&await ft(l.personalProjectsOnly?`graph`:`directory`,!0)}}async function Z(){if(!W.value||W.value===`current`)return;let e=Ne.value,t=++je;bt(),E.value=!0,O.value=null,xt();try{let n=G.value&&U.value===`personal`?await lt():await ut(G.value);if(t!==je)return;D.value=n,V=e,kt(),H.value===`graph`&&L.value.trim()&&(await o(),St(L.value.trim()))}catch(e){if(t!==je)return;D.value=null,V=null,_.reportError(e)}finally{t===je&&(E.value=!1)}}async function lt(){let[e,...t]=await Promise.all([ut(G.value),...K.value.map(e=>ut(e))]);return ve([e,...t])}function ut(e){let t=new URLSearchParams({spaceId:W.value,limit:`360`});if(U.value===`public`){let e=dt();e?.providerUrl&&t.set(`providerUrl`,e.providerUrl)}return e&&t.set(`personalProjectId`,e),y(`/api/graph?${t}`)}function dt(){return _.state?.projects.find(({id:e})=>e===W.value)??null}async function ft(e,t=!1){let n=O.value,r=l.personalProjectsOnly?j(W.value,e,G.value,{itemKind:n?.itemKind,itemId:n?.id}):M(U.value,W.value,e,{projectId:G.value,itemKind:n?.itemKind,itemId:n?.id}),i={...w.query};e===`graph`?delete i.section:l.personalProjectsOnly&&n&&(ce(n)?i.section=`materials`:delete i.section),await T[t?`replace`:`push`]({path:r,query:i})}async function pt(e){if(!l.personalProjectsOnly||e===Y.value)return;O.value=null;let t={...w.query};e===`materials`?t.section=`materials`:delete t.section,await T.push({path:j(W.value,`directory`,G.value),query:t})}async function mt(e){let t=et.value.find(({key:t})=>t===e);if(!t)return;let n=l.personalProjectsOnly?j(t.spaceId,H.value,t.projectId):M(t.scope,t.spaceId,H.value,{projectId:t.projectId});await T.push({path:n})}async function Q(e,t){let n={...w.query};!t||t===`all`&&e!==`status`||e===`status`&&t===`current`?delete n[e]:n[e]=t,await T.replace({query:n})}function gt(e){L.value=e,bt(),xt(),st.schedule()}function _t(){st.cancel(),vt()}async function vt(){let e=L.value,t=e.trim();if(await yt(e),!(L.value!==e||H.value===`directory`)){if(!t){bt(),xt();return}E.value||!D.value||V!==Ne.value||await St(t)}}async function yt(e){if($(w.query.q)!==e){Ae.add(e);try{await Q(`q`,e)}catch(e){_.reportError(e)}finally{await o(),Ae.delete(e)}}}function bt(){z+=1,B?.abort(),B=null}function xt(){Ce.value=``,R.value=null,k.value?.clearSelection();let e=O.value;H.value===`graph`&&e&&k.value?.selectItem(e.itemKind,e.id)}async function St(e){let t=_.activePersonalSpace?.id;if(!t)return;bt();let n=z,r=new AbortController;B=r,R.value=null,Ce.value=`正在搜索…`;let i=new URLSearchParams({personalSpaceId:t,q:e,limit:`30`});G.value&&i.set(`personalProjectId`,G.value);for(let e of K.value)i.append(`contextPersonalProjectId`,e);U.value===`public`&&i.append(`projectId`,W.value);try{let a=await y(`/api/search?${i}`,{signal:r.signal});if(n!==z)return;let o=a.facts??[],s=new Set([...(a.entities??[]).map(({name:e})=>e),...o.flatMap(({source_entity:e,target_entity:t})=>[e,t])]),c=k.value?.focusByNames(s,{searchMatch:!0})??0;if(c){Ce.value=`找到 ${a.entities?.length??0} 个实体 · ${o.length} 条关系 · 图中高亮 ${c} 个节点`;return}Ce.value=`当前范围未检索到匹配结果`;let l=U.value===`personal`&&!G.value;if(R.value={query:e,checking:l,result:null},!l)return;let u=await Dt({personalSpaceId:t,projects:Qe.value,query:e,baseline:a,signal:r.signal});if(n!==z)return;R.value={query:e,checking:!1,result:u}}catch(e){if(r.signal.aborted||n!==z)return;Ce.value=`搜索失败`,_.reportError(e)}finally{B===r&&(B=null)}}async function Ct(e){O.value=e;let t=l.personalProjectsOnly?j(W.value,H.value,G.value,{itemKind:e.itemKind,itemId:e.id}):M(U.value,W.value,H.value,{projectId:G.value,itemKind:e.itemKind,itemId:e.id}),n={...w.query};H.value===`directory`&&l.personalProjectsOnly&&(ce(e)?n.section=`materials`:delete n.section),await T.replace({path:t,query:n})}function Tt(e){Ct(Fe.value.find(({itemKind:t,id:n})=>t===`entity`&&n===e.id)??fe(e))}function Et(e){Ct(Fe.value.find(({itemKind:t,id:n})=>t===`relationship`&&n===e.id)??me(e,new Map(D.value?.nodes.map(e=>[e.id,e.name])??[])))}function kt(){let e=w.params.itemKind,t=w.params.itemId;if(typeof e!=`string`||typeof t!=`string`){O.value=null;return}let n=Fe.value.find(n=>n.itemKind===e&&n.id===t),r=e===`entity`?D.value?.nodes.find(({id:e})=>e===t):D.value?.edges.find(({id:e})=>e===t);if(O.value=n??(e===`entity`&&r?fe(r):e===`relationship`&&r?me(r,new Map(D.value?.nodes.map(e=>[e.id,e.name])??[])):null),O.value&&H.value===`directory`){let e=Rn(O.value);o(()=>{let t=[...document.querySelectorAll(`[data-item-key]`)].find(t=>t.dataset.itemKey===e);t?.scrollIntoView?.({block:`center`}),t?.focus({preventScroll:!0})})}}function At(e){let t=e.currentTarget,n=new Set(K.value);t.checked?n.add(t.value):n.delete(t.value),Q(`context`,[...n])}async function On(e){await T.push(j(W.value,H.value,e))}async function kn(e,t){let n=l.personalProjectsOnly?j(W.value,t,G.value,{itemKind:e.itemKind,itemId:e.id}):M(U.value,W.value,t,{projectId:G.value,itemKind:e.itemKind,itemId:e.id}),r={...w.query};if(t===`directory`&&l.personalProjectsOnly&&ce(e)?r.section=`materials`:delete r.section,t===`directory`&&!ce(e)&&!se([e],Ve.value).length)for(let e of[`q`,`type`,`quadrant`,`profile`,`status`,`human`])delete r[e];await T.push({path:n,query:r})}async function An(e){let t=l.personalProjectsOnly?j(W.value,`directory`,G.value,{itemKind:e.itemKind,itemId:e.id}):M(U.value,W.value,`directory`,{projectId:G.value,itemKind:e.itemKind,itemId:e.id}),n={...w.query};for(let e of[`q`,`type`,`quadrant`,`profile`,`human`,`section`])delete n[e];e.invalidAt?n.status=`historical`:delete n.status,await T.push({path:t,query:n})}function jn(e){let t=Nn(e);if(!t){_.reportError(Error(`无法确定这条项目资料所属的个人项目`));return}ke.value=e.itemKind===`entity`?e.type:`PersonalProject`,Oe.value=t}function Mn(e){return e?.profileAspect?null:G.value}function Nn(e){if(!e||!ce(e))return null;let t=_e(e),n=G.value,r=new Set;if(e.itemKind===`entity`)r.add(e.id);else{let t=e.raw;r.add(typeof t.source==`string`?t.source:t.source.id),r.add(typeof t.target==`string`?t.target:t.target.id)}for(let e of D.value?.nodes??[]){if(!r.has(e.id))continue;let t=e.attributes?.projectId;typeof t==`string`&&t&&r.add(t)}if(!t&&!n)for(let e of D.value?.edges??[]){if(!String(e.id).startsWith(`project-profile-edge:`))continue;let t=typeof e.source==`string`?e.source:e.source.id,n=typeof e.target==`string`?e.target:e.target.id;if(!r.has(t)&&!r.has(n))continue;let i=r.has(t)?n:t,a=(D.value?.nodes.find(({id:e})=>e===i))?.attributes?.projectId;typeof a==`string`&&a&&r.add(a)}let i=t??n??[...r].find(e=>_.state?.personalProjects?.some(({project_id:t})=>t===e));return _.state?.personalProjects?.find(({project_id:e})=>e===i)??null}async function Pn(e){await _.refresh(),await Z(),_.notify(`“${e.profile.name}”的项目资料已更新。`)}function Fn(e){let t=_.state?.personalProjects?.find(({project_id:t})=>t===e);t&&(De.value=t)}async function In(e,t){let n={created:`个人项目“${t}”已创建。`,linked:`这条知识已加入“${t}”,主要归属保持不变。`,already_linked:`“${t}”已经在使用这条知识。`,duplicate_reused:`“${t}”已有相同内容,已复用现有节点。`,conflict_pending:`已保留项目操作;冲突内容暂不在“${t}”生效。`,conflict_resolved:`冲突已按当前选择处理,并保留处理记录。`};await _.refresh(),await Z(),_.notify(n[e.status]??`项目知识范围已更新。`)}function Ln(e){if(e.profileAspect)return`${e.preferenceScope===`project`?`项目偏好`:`个人全局`} · ${e.evidence.length?`${e.evidence.length} 个来源`:`无来源记录`}`;let t=e.assignments.at(0),n=e.evidence.find(({personal_project_id:e})=>e)?.personal_project_id,r=t?.project_id??n,i=_.state?.personalProjects?.find(({project_id:e})=>e===r)?.profile.name;return`${i?`主要 ${i}`:`个人全局`} · ${e.evidence.length} 个来源`}function Rn(e){return`${e.itemKind}:${e.id}`}function zn(e,t,n){return JSON.stringify([e,t,n])}function $(e){return typeof e==`string`?e:``}function Bn(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):typeof e==`string`?[e]:[]}return(e,t)=>(s(),h(`section`,jt,[d(`div`,Mt,[d(`div`,Nt,[d(`button`,{type:`button`,role:`tab`,"aria-selected":H.value===`directory`,onClick:t[0]||=e=>ft(`directory`)},`内容目录`,8,Pt),d(`button`,{type:`button`,role:`tab`,"aria-selected":H.value===`graph`,onClick:t[1]||=e=>ft(`graph`)},`关系图谱`,8,Ft)]),d(`span`,It,g(Ye.value),1)]),d(`div`,Lt,[C(P,{"model-value":tt.value,options:nt.value,label:`图谱空间`,"control-id":`graph-space`,searchable:``,"onUpdate:modelValue":mt},null,8,[`model-value`,`options`]),G.value&&$e.value.length?(s(),h(`details`,Rt,[d(`summary`,null,[t[27]||=c(` 借鉴其他项目 `,-1),d(`span`,null,g(K.value.length?`已选 ${K.value.length}`:`未选择`),1),t[28]||=d(`i`,{class:`searchable-select-arrow`,"aria-hidden":`true`},null,-1)]),d(`div`,zt,[t[30]||=d(`strong`,null,`本次上下文`,-1),t[31]||=d(`p`,null,`只加入当前查看和查询,不改变知识归属。`,-1),d(`div`,Bt,[(s(!0),h(u,null,n($e.value,e=>(s(),h(`label`,{key:e.project_id,class:`personal-context-option`},[d(`input`,{type:`checkbox`,value:e.project_id,checked:K.value.includes(e.project_id),onChange:At},null,40,Vt),d(`span`,null,[d(`strong`,null,g(e.profile.name),1),t[29]||=d(`small`,null,`仅加入当前范围`,-1)])]))),128))])])])):v(``,!0),d(`form`,{class:`search-form`,role:`search`,"aria-label":`知识搜索`,onSubmit:ee(_t,[`prevent`])},[d(`input`,{type:`search`,placeholder:H.value===`directory`&&Y.value===`materials`?`搜索项目资料`:`搜索内容、来源或关系`,"aria-label":H.value===`directory`&&Y.value===`materials`?`搜索项目资料`:`搜索知识内容`,autocomplete:`off`,enterkeyhint:`search`,value:L.value,onInput:t[2]||=e=>gt(e.currentTarget.value)},null,40,Ht)],32),H.value===`directory`&&Y.value===`knowledge`?(s(),h(u,{key:1},[C(P,{"model-value":Ve.value.type,options:Le.value,label:`内容类型`,"control-id":`knowledge-type-filter`,"onUpdate:modelValue":t[3]||=e=>Q(`type`,e)},null,8,[`model-value`,`options`]),C(P,{"model-value":Ve.value.quadrant,options:Re,label:`发现时象限`,"control-id":`knowledge-quadrant-filter`,"onUpdate:modelValue":t[4]||=e=>Q(`quadrant`,e)},null,8,[`model-value`]),C(P,{"model-value":Ve.value.profile,options:ze,label:`知识归类`,"control-id":`knowledge-profile-filter`,"onUpdate:modelValue":t[5]||=e=>Q(`profile`,e)},null,8,[`model-value`]),C(P,{"model-value":Ve.value.humanChange,options:Be,label:`人工变更状态`,"control-id":`knowledge-human-change-filter`,"onUpdate:modelValue":t[6]||=e=>Q(`human`,e)},null,8,[`model-value`])],64)):v(``,!0),d(`div`,Ut,[i.personalProjectsOnly&&it.value&&r(_).state?.capabilities?.publishProject?(s(),h(`button`,{key:0,class:`toolbar-action`,type:`button`,onClick:t[7]||=e=>De.value=it.value},` 发布当前项目 `)):v(``,!0),H.value===`graph`?(s(),h(`div`,Wt,[d(`button`,{class:`toolbar-action`,type:`button`,"aria-label":`缩小图谱`,onClick:t[8]||=e=>k.value?.zoomOut()},`−`),d(`button`,{class:`toolbar-action`,type:`button`,"aria-label":`放大图谱`,onClick:t[9]||=e=>k.value?.zoomIn()},`+`),d(`button`,{class:`toolbar-action`,type:`button`,onClick:t[10]||=e=>k.value?.fit()},`适应`),d(`button`,{class:`toolbar-action`,type:`button`,onClick:t[11]||=e=>k.value?.reset()},`重置`)])):v(``,!0),d(`button`,{class:`toolbar-action`,type:`button`,onClick:Z},`刷新`)])]),E.value&&!D.value?(s(),h(`div`,Gt,`正在读取知识…`)):(s(),h(`div`,Kt,[H.value===`directory`?(s(),h(`section`,{key:0,class:x([`knowledge-directory-panel`,{"has-directory-tabs":i.personalProjectsOnly}]),"aria-label":Y.value===`materials`?`项目资料目录`:`知识内容目录`},[i.personalProjectsOnly?(s(),h(`div`,Jt,[d(`button`,{id:`directory-tab-knowledge`,class:`directory-kind-tab`,type:`button`,role:`tab`,"aria-controls":`directory-panel-knowledge`,"aria-selected":Y.value===`knowledge`,onClick:t[12]||=e=>pt(`knowledge`)},[t[32]||=d(`span`,null,`知识内容`,-1),d(`small`,null,g(Xe.value),1)],8,Yt),d(`button`,{id:`directory-tab-materials`,class:`directory-kind-tab`,type:`button`,role:`tab`,"aria-controls":`directory-panel-materials`,"aria-selected":Y.value===`materials`,onClick:t[13]||=e=>pt(`materials`)},[t[33]||=d(`span`,null,`项目资料`,-1),d(`small`,null,g(Ze.value),1)],8,Xt)])):v(``,!0),Y.value===`knowledge`?(s(),h(`div`,Zt,[d(`header`,Qt,[t[37]||=d(`div`,{class:`directory-section-copy`},[d(`strong`,null,`知识内容`),d(`span`,null,`可确认、纠正、失效或恢复的知识记录。`)],-1),d(`div`,$t,[d(`button`,{class:`knowledge-status-option`,"data-status":`current`,type:`button`,"aria-pressed":X.value===`current`,onClick:t[14]||=e=>Q(`status`,`current`)},[t[34]||=c(` 当前有效 `,-1),d(`span`,null,g(Ue.value),1)],8,en),d(`button`,{class:`knowledge-status-option`,"data-status":`historical`,type:`button`,"aria-pressed":X.value===`historical`,onClick:t[15]||=e=>Q(`status`,`historical`)},[t[35]||=c(` 已失效 `,-1),d(`span`,null,g(We.value),1)],8,tn),d(`button`,{class:`knowledge-status-option`,"data-status":`all`,type:`button`,"aria-pressed":X.value===`all`,onClick:t[16]||=e=>Q(`status`,`all`)},[t[36]||=c(` 全部 `,-1),d(`span`,null,g(q.value.length),1)],8,nn)]),d(`small`,rn,g(He.value.length)+` 条`,1)]),t[38]||=p(`<div class="knowledge-table-head" aria-hidden="true"><span class="knowledge-column-content">内容</span><span class="knowledge-column-quadrant">发现时象限</span><span class="knowledge-column-review">确认状态</span><span class="knowledge-column-type">类型</span><span class="knowledge-column-source">来源</span><span class="knowledge-column-time">更新时间</span><span class="knowledge-column-validity">有效性</span></div>`,1),d(`div`,an,[(s(!0),h(u,null,n(He.value,e=>(s(),h(`button`,{key:`${e.itemKind}:${e.id}`,class:x([`knowledge-row`,{selected:O.value?.itemKind===e.itemKind&&O.value?.id===e.id}]),type:`button`,"data-item-key":Rn(e),onClick:t=>Ct(e)},[d(`span`,sn,[d(`span`,cn,[d(`strong`,null,g(e.title),1),e.humanChangeStatus===`unseen`||e.humanChangeStatus===`viewed`?(s(),h(`em`,{key:0,class:x([`human-change-badge`,`state-${e.humanChangeStatus}`])},g(r(he)(e.humanChangeStatus)),3)):v(``,!0)]),d(`small`,null,g(e.profileAspect?`${r(ie)(e.profileAspect)} · ${e.body}`:e.body),1)]),d(`span`,{class:x([`knowledge-row-quadrant`,e.originQuadrant])},g(r(ae)(e.originQuadrant)),3),d(`span`,{class:x([`knowledge-review-state`,`state-${r(le)(e)}`])},g(r(I)(e)),3),d(`span`,ln,g(e.type),1),d(`span`,un,g(Ln(e)),1),d(`span`,dn,g(r(de)(r(oe)(e))),1),d(`span`,{class:x([`knowledge-status`,e.invalidAt?`historical`:`current`])},g(e.invalidAt?`已失效`:`有效`),3)],10,on))),128))]),He.value.length?v(``,!0):(s(),h(`div`,fn,g(q.value.length?`当前筛选条件下没有知识内容`:`这个项目还没有可确认或翻转状态的知识内容`),1))])):(s(),h(`div`,pn,[d(`header`,mn,[t[39]||=d(`div`,{class:`directory-section-copy`},[d(`strong`,null,`项目资料`),d(`span`,null,`项目目标、范围和结构关系;通过“编辑项目资料”修改。`)],-1),d(`small`,hn,g(Pe.value.length)+` 条`,1)]),d(`div`,gn,[(s(!0),h(u,null,n(Pe.value,e=>(s(),h(`button`,{key:Rn(e),class:x([`project-material-row`,{selected:O.value?.itemKind===e.itemKind&&O.value?.id===e.id}]),type:`button`,"data-item-key":Rn(e),onClick:t=>Ct(e)},[d(`span`,vn,[d(`strong`,null,g(e.itemKind===`entity`?e.title:e.type),1),d(`small`,null,g(e.body),1)]),d(`span`,yn,g(r(F)(e)),1),t[40]||=d(`span`,{class:`project-material-link`},`查看详情 →`,-1)],10,_n))),128))]),Pe.value.length?v(``,!0):(s(),h(`div`,bn,g(J.value.length?`当前搜索条件下没有项目资料`:`这个项目还没有项目资料`),1))]))],10,qt)):(s(),h(`div`,xn,[R.value?(s(),h(`aside`,Sn,[t[42]||=d(`span`,{class:`graph-search-status-kicker`},`当前范围未命中`,-1),d(`strong`,Cn,`没有检索到“`+g(R.value.query)+`”`,1),d(`p`,wn,g(ot.value),1),R.value.result?.matches.length?(s(),h(`div`,Tn,[(s(!0),h(u,null,n(R.value.result.matches.slice(0,5),e=>(s(),f(r(N),{key:e.project.project_id,class:`graph-search-suggestion`,to:{path:r(j)(W.value,`graph`,e.project.project_id),query:{q:R.value.query}}},{default:m(()=>[d(`span`,null,[d(`strong`,null,g(e.project.profile.name),1),d(`small`,null,g(e.count)+` 条候选内容`,1)]),t[41]||=d(`b`,null,`进入项目搜索 →`,-1)]),_:2},1032,[`to`]))),128))])):v(``,!0)])):v(``,!0),Je.value?.nodes.length?(s(),f(Me,{key:1,ref_key:`graphCanvas`,ref:k,graph:Je.value,"selected-item":O.value,onSelectNode:Tt,onSelectEdge:Et},null,8,[`graph`,`selected-item`])):(s(),h(`div`,En,g(E.value?`正在读取知识…`:`这个空间还没有可展示的关系图`),1))])),C(xe,{item:O.value,graph:D.value,editable:rt.value,"current-project-id":G.value,"can-publish-project":r(_).state?.capabilities?.publishProject,"can-manage-project":!!at.value,mode:H.value,onConfirm:t[17]||=e=>we.value=e,onEdit:t[18]||=e=>Te.value=e,onCreateProject:t[19]||=e=>Ee.value=e,onOpenProject:On,onPublishProject:Fn,onOpenDirectory:t[20]||=e=>kn(e,`directory`),onOpenGraph:t[21]||=e=>kn(e,`graph`),onOpenReplacement:An,onManageProject:jn},null,8,[`item`,`graph`,`editable`,`current-project-id`,`can-publish-project`,`can-manage-project`,`mode`])])),H.value===`graph`?(s(),h(`p`,Dn,`滚轮缩放 · 拖动画布 · 点击查看详情 · 悬停显示节点短 ID`)):v(``,!0),C(ye,{item:Te.value,"personal-space-id":r(_).activePersonalSpace?.id??W.value,"personal-project-id":Mn(Te.value),projects:r(_).state?.personalProjects??[],"replacement-items":q.value,onClose:t[22]||=e=>Te.value=null,onSaved:Z},null,8,[`item`,`personal-space-id`,`personal-project-id`,`projects`,`replacement-items`]),C(be,{item:we.value,"personal-space-id":r(_).activePersonalSpace?.id??W.value,"personal-project-id":Mn(we.value),onClose:t[23]||=e=>we.value=null,onSaved:Z},null,8,[`item`,`personal-space-id`,`personal-project-id`]),C(Ke,{item:Ee.value,"personal-space-id":r(_).activePersonalSpace?.id??W.value,"personal-project-id":G.value,projects:r(_).state?.personalProjects??[],onClose:t[24]||=e=>Ee.value=null,onSaved:In},null,8,[`item`,`personal-space-id`,`personal-project-id`,`projects`]),C(wt,{project:De.value,onClose:t[25]||=e=>De.value=null,onPublished:Z},null,8,[`project`]),C(ht,{project:Oe.value,"material-type":ke.value,onClose:t[26]||=e=>Oe.value=null,onSaved:Pn},null,8,[`project`,`material-type`])]))}});export{On as t};
@@ -1 +0,0 @@
1
- import{L as e,T as t,d as n,g as r,m as i,nt as a,t as o,tt as s,u as c,y as l}from"./console-tbvTUi6p.js";var u={class:`view`},d={class:`metrics`,"aria-label":`运行概览`},f={class:`two-column`},p={class:`section-block`},m={class:`provider-list`},h={class:`provider-row`},g={class:`provider-state`},_={class:`provider-row`},v={class:`provider-state`},y=l({__name:`OverviewPage`,setup(l){let y=o(),b=c(()=>y.state),x=c(()=>b.value?.providers?.workspaces??[]),S=c(()=>x.value.filter(({status:e})=>e===`ready`).length);return(o,c)=>(t(),i(`section`,u,[c[8]||=n(`div`,{class:`intro-row`},[n(`div`,null,[n(`h3`,null,`知识在会话中静默生长`),n(`p`,null,`个人知识直接进入本机图谱;只有主动提交公共项目时才会进入发布审核。`)]),n(`span`,{class:`mode-chip`},`Agent structured`)],-1),n(`div`,d,[n(`article`,null,[n(`strong`,null,a(b.value?.personalSpaces.length??0),1),c[0]||=n(`span`,null,`个人图谱`,-1)]),n(`article`,null,[n(`strong`,null,a(b.value?.projects.length??0),1),c[1]||=n(`span`,null,`可访问项目`,-1)]),n(`article`,null,[n(`strong`,null,a(b.value?.subscriptions.length??0),1),c[2]||=n(`span`,null,`项目订阅`,-1)]),n(`article`,null,[n(`strong`,null,a(b.value?.personalProjects?.length??0),1),c[3]||=n(`span`,null,`个人项目`,-1)])]),n(`div`,f,[c[7]||=r(`<section class="section-block"><div class="section-title"><h3>数据流</h3></div><ol class="flow-list"><li><span>1</span><div><strong>Agent 识别稳定知识</strong><p>不保存整段会话和临时输出。</p></div></li><li><span>2</span><div><strong>生成结构化实体与关系</strong><p>带来源、发现时象限、确认依据和幂等键。</p></div></li><li><span>3</span><div><strong>按归属路由</strong><p>个人知识直接生效;主动提交公共时才经过审核。</p></div></li></ol></section>`,1),n(`section`,p,[c[6]||=n(`div`,{class:`section-title`},[n(`h3`,null,`Provider`)],-1),n(`div`,m,[n(`div`,h,[n(`i`,{class:s({error:b.value?.providers?.personal?.status!==`ready`})},null,2),c[4]||=n(`div`,null,[n(`strong`,null,`本地知识库`),n(`span`,null,`Graphiti / Neo4j`)],-1),n(`span`,g,a(b.value?.providers?.personal?.status===`ready`?`已连接`:`连接异常`),1)]),n(`div`,_,[n(`i`,{class:s(e(y).publicRuntimeStatus)},null,2),n(`div`,null,[c[5]||=n(`strong`,null,`公共服务`,-1),n(`span`,null,a(e(y).publicRuntimeStatus===`ready`?`${S.value||x.value.length} 个共享服务可用`:e(y).publicRuntimeStatus===`error`?`已配置但暂时不可用`:`未连接 · 不影响本机`),1)]),n(`span`,v,a(e(y).publicRuntimeStatus===`ready`?`已连接`:e(y).publicRuntimeStatus===`error`?`连接异常`:`未连接`),1)])])])])]))}});export{y as default};
@@ -1 +0,0 @@
1
- import{A as e,D as t,L as n,M as r,P as i,T as a,_ as o,a as s,c,d as l,i as u,m as d,nt as f,p,r as m,t as ee,tt as h,u as g,v as _,y as v}from"./console-tbvTUi6p.js";import{a as y,i as b}from"./runtime-dom.esm-bundler-DttsK21F.js";import{r as te}from"./identity-B3s5CXhv.js";import{E as x,S,T as C,_ as w,b as T,g as E,l as D}from"./model-DVT8sjy9.js";import{i as O,n as ne,r as k,t as A}from"./KnowledgeInspector-BSpz5Sfm.js";function j(e,t=[]){let n=[],r=e.filter(e=>!e.invalidAt);for(let e=0;e<r.length;e+=1)for(let i=e+1;i<r.length;i+=1){let a=r[e],o=r[i];if(!V(a,o)||!H(a,o)||U(a,o))continue;let[s,c]=W(a,o),l=R(F(s),F(c)),u=B(l)?`complementary`:`review`,d=t.find(e=>e.status===`ai_pending`&&N(e,s,c))??null;n.push({id:K(s,c),preferenceKey:P(s),scopeKey:I(s),scopeLabel:L(s),left:s,right:c,difference:l,relation:u,recommendedAction:u===`complementary`?`merge`:null,reason:`偏好键“${P(s)}”和生效范围相同,但当前内容不一致。`,aiRecord:d})}return n.sort((e,t)=>e.scopeKey.localeCompare(t.scopeKey,`zh-CN`)||e.preferenceKey.localeCompare(t.preferenceKey,`zh-CN`))}function M(e){return[e.left_item_id,e.right_item_id]}function N(e,t,n){let r=new Set([`${e.left_item_kind}:${e.left_item_id}`,`${e.right_item_kind}:${e.right_item_id}`]);return r.has(`${t.itemKind}:${t.id}`)&&r.has(`${n.itemKind}:${n.id}`)}function P(e){let t=e.raw.attributes??{};return String(t.preferenceKey??t.preference_key??e.title).trim()}function F(e){return e.body.trim()}function I(e){return e.preferenceScope===`project`&&e.preferenceProjectId?`project:${e.preferenceProjectId}`:`global`}function L(e){return e.preferenceScope===`project`&&e.preferenceProjectId?`项目范围 · ${e.preferenceProjectId}`:`个人全局`}function R(e,t){let n=q(e),r=q(t),i=new Set,a=[],o=[];for(let e of n){let t=r.findIndex((t,n)=>!i.has(n)&&J(e,t));if(t<0){o.push(e);continue}i.add(t),a.push(Y(e,r[t]))}return{shared:a,leftOnly:o,rightOnly:r.filter((e,t)=>!i.has(t)),similarity:a.length/Math.max(n.length,r.length,1)}}function z(e,t){let n=[...q(e)];for(let e of q(t)){let t=n.findIndex(t=>J(t,e));if(t<0){n.push(e);continue}n[t]=Y(n[t],e)}if(!n.length)return``;let r=n.some(e=>e.length>24)?`;`:`、`;return n.join(r)}function B(e){return e.shared.length>0&&(e.leftOnly.length===0||e.rightOnly.length===0)}function V(e,t){return I(e)===I(t)}function H(e,t){return X(P(e))===X(P(t))}function U(e,t){return X(F(e))===X(F(t))}function W(e,t){let n=G(e),r=G(t);return n===r?e.id.localeCompare(t.id)<=0?[e,t]:[t,e]:n<=r?[e,t]:[t,e]}function G(e){let t=w(e);if(!t)return 0;let n=new Date(t).getTime();return Number.isNaN(n)?0:n}function K(e,t){return[e.itemKind,e.id,t.itemKind,t.id].join(`:`)}function q(e){return e.split(/[\n\r,,、;;。.!!??]+/u).map(e=>e.trim()).filter(Boolean)}function J(e,t){let n=X(e),r=X(t);if(n===r)return!0;let i=n.length<=r.length?n:r,a=i===n?r:n;return i.length>=2&&a.includes(i)}function Y(e,t){return X(e).length>=X(t).length?e:t}function X(e){return String(e??``).trim().toLocaleLowerCase().replace(/[“”‘’"'`]/gu,``).replace(/\s+/gu,` `)}var re={key:0,open:``,class:`project-dialog conflict-resolution-dialog vue-dialog`},ie={class:`project-dialog-shell conflict-resolution-shell`},Z={class:`project-dialog-header`},ae=[`disabled`],oe={class:`conflict-pair-context`,"aria-label":`冲突判断依据`},Q={class:`conflict-comparison`,"aria-label":`冲突双方`},se={class:`conflict-side conflict-side-left`},ce={class:`conflict-side-heading`},le={class:`conflict-side conflict-side-right`},$={class:`conflict-side-heading`},ue={class:`conflict-difference`,"aria-label":`差异摘要`},de={key:0},fe={key:1,class:`muted`},pe={key:0},me={key:1,class:`muted`},he={key:0},ge={key:1,class:`muted`},_e={class:`conflict-resolution-options`,"aria-label":`处理方式`},ve=[`aria-pressed`],ye={key:0},be=[`aria-pressed`],xe=[`aria-pressed`],Se=[`disabled`,`aria-pressed`],Ce={key:0,class:`conflict-resolution-detail`},we={class:`conflict-inline-options`,role:`group`,"aria-label":`合并后保留哪条记录`},Te=[`aria-pressed`],Ee=[`aria-pressed`],De={key:1,class:`conflict-resolution-detail`},Oe={class:`conflict-inline-options`,role:`group`,"aria-label":`调整哪条记录`},ke=[`aria-pressed`],Ae=[`aria-pressed`],je=[`value`],Me={class:`conflict-impact-preview`},Ne={class:`conflict-resolution-reason`},Pe={key:2,class:`dialog-error`},Fe={class:`project-dialog-actions conflict-resolution-actions`},Ie=[`disabled`],Le=[`disabled`],Re=O(v({__name:`PreferenceConflictDialog`,props:{conflict:{},personalSpaceId:{},projects:{}},emits:[`close`,`resolved`,`edit`],setup(m,{emit:h}){let _=m,v=h,te=ee(),x=i(null),S=i(`right`),C=i(`right`),T=i(``),E=i(``),O=i(``),ne=i(``),k=i(!1),A=i(``),j=g(()=>{let e=_.conflict;if(!e)return[];let t=C.value===`left`?e.left:e.right;return _.projects.filter(({project_id:e})=>t.preferenceScope!==`project`||e!==t.preferenceProjectId)}),M=g(()=>j.value.length>0),N=g(()=>{let e=_.conflict;if(!e||!x.value)return`先选择处理方式;确认前不会写入任何更改。`;if(x.value===`merge`){let t=S.value===`left`?e.left:e.right,n=S.value===`left`?e.right:e.left;return`“${t.title}”将更新为合并后的规范内容并由你确认;“${n.title}”转为历史记录,并链接到保留项。两条记录的修订与来源仍可追溯。`}if(x.value===`keep_left`||x.value===`keep_right`){let t=x.value===`keep_left`?e.left:e.right,n=x.value===`keep_left`?e.right:e.left;return`“${t.title}”继续生效;“${n.title}”转为历史记录,并明确指向保留项。`}let t=C.value===`left`?e.left:e.right,n=j.value.find(({project_id:e})=>e===T.value);return n?`“${t.title}”将改为仅在“${n.profile.name}”生效;另一条保留原范围,两条内容不再争夺同一个生效位置。`:`请选择一个不同的项目范围,系统才会执行拆分。`});e(()=>_.conflict,e=>{e&&(S.value=`right`,C.value=`right`,E.value=z(F(e.right),F(e.left)),x.value=e.recommendedAction,T.value=``,A.value=``,I(e.recommendedAction))},{immediate:!0}),e([C,j],()=>{T.value&&j.value.some(({project_id:e})=>e===T.value)||(T.value=j.value[0]?.project_id??``)},{immediate:!0});function P(e){x.value=e,(!O.value.trim()||O.value===ne.value)&&I(e)}function I(e){let t=_.conflict,n=t&&e?U(e,t):``;ne.value=n,O.value=n}async function L(){let e=_.conflict;if(!e||!x.value)return W(`请选择一种处理方式`);if(!O.value.trim())return W(`请说明本次判断依据`);if(x.value===`merge`&&!E.value.trim())return W(`合并后的规范内容不能为空`);if(x.value===`split_scope`&&!T.value)return W(`请选择拆分后的项目范围`);k.value=!0,A.value=``;try{x.value===`merge`?await R(e):x.value===`split_scope`?await V(e):await B(e,x.value),e.aiRecord&&await s(`/api/preference-conflicts/${encodeURIComponent(e.aiRecord.id)}/complete`,{personalSpaceId:_.personalSpaceId,resolution:x.value,reason:O.value.trim()}),te.notify(`疑似冲突已处理,生效结果与历史记录均已更新。`),v(`resolved`),v(`close`)}catch(e){A.value=e instanceof Error?e.message:`冲突处理失败`,te.reportError(e)}finally{k.value=!1}}async function R(e){let t=S.value===`left`?e.left:e.right,n=S.value===`left`?e.right:e.left,r={personalSpaceId:_.personalSpaceId,personalProjectId:null,action:`update`,reason:O.value.trim()};t.itemKind===`entity`?(r.name=t.title,r.summary=E.value.trim()):r.fact=E.value.trim(),t.classificationExplicit&&t.originQuadrant!==`unclassified`&&(r.originQuadrant=t.originQuadrant,r.confirmationStatus=`confirmed`,r.confirmationBasis={existenceReason:`由两条疑似冲突偏好合并:${e.reason}`,quadrantReason:t.confirmationBasis?.quadrant_reason||t.reasoningSummary||`沿用保留记录的发现时分类。`,proposedBy:t.confirmationBasis?.proposed_by?H(t.confirmationBasis.proposed_by):{kind:`import`,label:`历史记录`},confirmedBy:{kind:`user`,label:`用户`},confirmedAt:new Date().toISOString()}),await u(`/api/knowledge/${t.itemKind}/${encodeURIComponent(t.id)}`,r),await u(`/api/knowledge/${n.itemKind}/${encodeURIComponent(n.id)}`,{personalSpaceId:_.personalSpaceId,personalProjectId:null,action:`invalidate`,reason:O.value.trim(),replacementItemId:t.id,replacementItemKind:t.itemKind})}async function B(e,t){let n=t===`keep_left`?e.left:e.right,r=t===`keep_left`?e.right:e.left;await u(`/api/knowledge/${r.itemKind}/${encodeURIComponent(r.id)}`,{personalSpaceId:_.personalSpaceId,personalProjectId:null,action:`invalidate`,reason:O.value.trim(),replacementItemId:n.id,replacementItemKind:n.itemKind})}async function V(e){let t=C.value===`left`?e.left:e.right;await s(`/api/knowledge/${t.itemKind}/${encodeURIComponent(t.id)}/preference-scope`,{personalSpaceId:_.personalSpaceId,scope:`project`,projectId:T.value,reason:O.value.trim()})}function H(e){return{kind:e.kind,label:e.label??null}}function U(e,t){return e===`merge`?`两条偏好描述同一规则且内容互补,合并为一条规范版本。`:e===`keep_left`?`较早记录“${t.left.title}”仍是当前准确口径,另一条转为历史。`:e===`keep_right`?`较新记录“${t.right.title}”是当前准确口径,另一条转为历史。`:`两条偏好适用于不同项目,拆分生效范围并同时保留。`}function W(e){A.value=e}return(e,i)=>m.conflict?(a(),d(`dialog`,re,[l(`div`,ie,[l(`header`,Z,[l(`div`,null,[i[15]||=l(`p`,{class:`eyebrow`},`CONFLICT RESOLUTION`,-1),i[16]||=l(`h3`,null,`比较并处理疑似冲突`,-1),l(`p`,null,f(m.conflict.reason)+` 系统只提供证据和影响预览,最终决定由你确认。`,1)]),l(`button`,{class:`secondary-action`,type:`button`,disabled:k.value,onClick:i[0]||=e=>v(`close`)},` 关闭 `,8,ae)]),l(`section`,oe,[l(`span`,null,[i[17]||=o(`偏好键 `,-1),l(`strong`,null,f(m.conflict.preferenceKey),1)]),l(`span`,null,[i[18]||=o(`生效范围 `,-1),l(`strong`,null,f(m.conflict.scopeLabel),1)]),l(`span`,null,[i[19]||=o(` 建议 `,-1),l(`strong`,null,f(m.conflict.recommendedAction===`merge`?`内容互补,优先合并`:`差异较大,先人工判断`),1)])]),l(`section`,Q,[l(`article`,se,[l(`div`,ce,[i[20]||=l(`span`,null,`A · 较早记录`,-1),l(`time`,null,f(n(D)(n(w)(m.conflict.left))),1)]),l(`h4`,null,f(m.conflict.left.title),1),l(`p`,null,f(n(F)(m.conflict.left)),1),l(`small`,null,f(m.conflict.left.evidence.length)+` 个来源 · `+f(m.conflict.left.id),1),l(`button`,{class:`text-action`,type:`button`,onClick:i[1]||=e=>v(`edit`,m.conflict.left)},` 单独纠正 A `)]),l(`article`,le,[l(`div`,$,[i[21]||=l(`span`,null,`B · 较新记录`,-1),l(`time`,null,f(n(D)(n(w)(m.conflict.right))),1)]),l(`h4`,null,f(m.conflict.right.title),1),l(`p`,null,f(n(F)(m.conflict.right)),1),l(`small`,null,f(m.conflict.right.evidence.length)+` 个来源 · `+f(m.conflict.right.id),1),l(`button`,{class:`text-action`,type:`button`,onClick:i[2]||=e=>v(`edit`,m.conflict.right)},` 单独纠正 B `)])]),l(`section`,ue,[l(`div`,null,[i[22]||=l(`span`,null,`双方共有`,-1),m.conflict.difference.shared.length?(a(),d(`p`,de,[(a(!0),d(c,null,t(m.conflict.difference.shared,e=>(a(),d(`b`,{key:e},f(e),1))),128))])):(a(),d(`p`,fe,`没有检测到可以直接对齐的共同片段`))]),l(`div`,null,[i[23]||=l(`span`,null,`仅 A 有`,-1),m.conflict.difference.leftOnly.length?(a(),d(`p`,pe,[(a(!0),d(c,null,t(m.conflict.difference.leftOnly,e=>(a(),d(`b`,{key:e},f(e),1))),128))])):(a(),d(`p`,me,`没有独有片段`))]),l(`div`,null,[i[24]||=l(`span`,null,`仅 B 有`,-1),m.conflict.difference.rightOnly.length?(a(),d(`p`,he,[(a(!0),d(c,null,t(m.conflict.difference.rightOnly,e=>(a(),d(`b`,{key:e},f(e),1))),128))])):(a(),d(`p`,ge,`没有独有片段`))])]),l(`section`,_e,[l(`button`,{type:`button`,"aria-pressed":x.value===`merge`,onClick:i[3]||=e=>P(`merge`)},[i[25]||=l(`strong`,null,`合并为规范版本`,-1),i[26]||=l(`span`,null,`保留双方独有信息;一条更新,一条转为历史。`,-1),m.conflict.recommendedAction===`merge`?(a(),d(`em`,ye,`推荐`)):p(``,!0)],8,ve),l(`button`,{type:`button`,"aria-pressed":x.value===`keep_left`,onClick:i[4]||=e=>P(`keep_left`)},[...i[27]||=[l(`strong`,null,`保留 A`,-1),l(`span`,null,`B 转为历史,并链接到 A。`,-1)]],8,be),l(`button`,{type:`button`,"aria-pressed":x.value===`keep_right`,onClick:i[5]||=e=>P(`keep_right`)},[...i[28]||=[l(`strong`,null,`保留 B`,-1),l(`span`,null,`A 转为历史,并链接到 B。`,-1)]],8,xe),l(`button`,{type:`button`,disabled:!M.value,"aria-pressed":x.value===`split_scope`,onClick:i[6]||=e=>P(`split_scope`)},[i[29]||=l(`strong`,null,`拆分生效范围`,-1),l(`span`,null,f(M.value?`两条都保留,但不再作用于同一范围。`:`没有其他个人项目可选。`),1)],8,Se)]),x.value===`merge`?(a(),d(`section`,Ce,[l(`div`,we,[i[30]||=l(`span`,null,`规范版本沿用`,-1),l(`button`,{type:`button`,"aria-pressed":S.value===`left`,onClick:i[7]||=e=>S.value=`left`},` A 的记录身份 `,8,Te),l(`button`,{type:`button`,"aria-pressed":S.value===`right`,onClick:i[8]||=e=>S.value=`right`},` B 的记录身份 `,8,Ee)]),l(`label`,null,[i[31]||=o(` 合并后的规范内容 `,-1),r(l(`textarea`,{"onUpdate:modelValue":i[9]||=e=>E.value=e,rows:`4`,maxlength:`4096`},null,512),[[y,E.value]])])])):p(``,!0),x.value===`split_scope`?(a(),d(`section`,De,[l(`div`,Oe,[i[32]||=l(`span`,null,`调整记录`,-1),l(`button`,{type:`button`,"aria-pressed":C.value===`left`,onClick:i[10]||=e=>C.value=`left`},` A `,8,ke),l(`button`,{type:`button`,"aria-pressed":C.value===`right`,onClick:i[11]||=e=>C.value=`right`},` B `,8,Ae)]),l(`label`,null,[i[34]||=o(` 改为仅在以下项目生效 `,-1),r(l(`select`,{"onUpdate:modelValue":i[12]||=e=>T.value=e},[i[33]||=l(`option`,{value:``,disabled:``},`请选择个人项目`,-1),(a(!0),d(c,null,t(j.value,e=>(a(),d(`option`,{key:e.project_id,value:e.project_id},f(e.profile.name),9,je))),128))],512),[[b,T.value]])])])):p(``,!0),l(`section`,Me,[i[35]||=l(`span`,null,`确认后会发生什么`,-1),l(`p`,null,f(N.value),1)]),l(`label`,Ne,[i[36]||=o(` 本次判断依据 `,-1),r(l(`textarea`,{"onUpdate:modelValue":i[13]||=e=>O.value=e,rows:`2`,maxlength:`2000`},null,512),[[y,O.value]])]),A.value?(a(),d(`p`,Pe,f(A.value),1)):p(``,!0),l(`footer`,Fe,[i[37]||=l(`span`,null,`暂不处理不会更改数据,这组记录会继续显示为疑似冲突。`,-1),l(`div`,null,[l(`button`,{class:`secondary-action`,type:`button`,disabled:k.value,onClick:i[14]||=e=>v(`close`)},` 暂不处理 `,8,Ie),l(`button`,{class:`primary-action`,type:`button`,disabled:k.value||!x.value,onClick:L},f(k.value?`正在处理…`:`确认并执行`),9,Le)])])])])):p(``,!0)}}),[[`__scopeId`,`data-v-18d4346c`]]),ze={class:`view vue-personal-profile`},Be={class:`personal-profile-summary`,"aria-label":`协作偏好状态`},Ve=[`aria-label`,`aria-pressed`],He=[`aria-label`,`aria-pressed`],Ue=[`aria-label`,`aria-pressed`],We={key:0},Ge={key:1},Ke=[`aria-label`,`aria-pressed`],qe={key:0,class:`preference-conflict-alert`,"aria-label":`待处理的疑似冲突`},Je={class:`personal-profile-toolbar`},Ye={class:`personal-profile-filter-groups`},Xe={class:`personal-profile-filters`,role:`group`,"aria-label":`协作偏好维度`},Ze=[`aria-pressed`,`onClick`],Qe={class:`personal-profile-toolbar-actions`},$e={key:0,class:`muted`},et={key:1,class:`muted`},tt={key:2,class:`muted`},nt={key:1,class:`preference-conflict-workbench`,"aria-label":`疑似冲突待判断组`},rt={class:`preference-conflict-list`},it={class:`preference-conflict-card-heading`},at={class:`preference-conflict-pair`},ot={key:0},st={class:`preference-conflict-actions`},ct=[`disabled`,`onClick`],lt=[`onClick`],ut={key:0,class:`empty-state`},dt={key:2,class:`personal-profile-layout`},ft={class:`personal-profile-directory`,"aria-label":`协作偏好内容`},pt={class:`personal-profile-list`},mt=[`onClick`],ht={class:`personal-profile-copy`},gt={class:`personal-profile-origin`},_t={key:0,class:`empty-state`},vt=O(v({__name:`PersonalProfilePage`,setup(r){let u=ee(),v=i(null),y=i(!1),b=i(`all`),O=i(`all`),N=i(`all`),P=i(!1),I=i(null),L=i(null),R=i(null),z=i(null),B=i([]),V=i(``),H=g(()=>T(v.value)),U=g(()=>j(H.value,B.value)),W=g(()=>new Set(U.value.flatMap(({left:e,right:t})=>[e.id,t.id]))),G=g(()=>new Set(B.value.filter(({status:e,resolved_by:t})=>e===`resolved`&&t===`agent`).flatMap(M))),K=g(()=>H.value.filter(e=>Q(e)&&(N.value===`all`||E(e)===N.value))),q=g(()=>U.value.filter(({left:e,right:t})=>Q(e)||Q(t))),J=g(()=>{let e=new Map((u.state?.personalProjects??[]).map(e=>[e.project_id,e.profile.name])),t=[...new Set(H.value.filter(({preferenceScope:e,preferenceProjectId:t})=>e===`project`&&!!t).map(({preferenceProjectId:e})=>e))].sort((t,n)=>(e.get(t)??t).localeCompare(e.get(n)??n,`zh-CN`));return[{value:`all`,label:`全部范围`,meta:`${H.value.length} 条`},{value:`global`,label:`个人全局`,meta:`${H.value.filter(({preferenceScope:e})=>e!==`project`).length} 条`},...t.map(t=>({value:`project:${t}`,label:e.get(t)??t,meta:`${H.value.filter(({preferenceScope:e,preferenceProjectId:n})=>e===`project`&&n===t).length} 条项目偏好`,search:t}))]}),Y=g(()=>H.value.filter(e=>E(e)===`confirmed`).length),X=g(()=>H.value.filter(e=>E(e)===`pending`).length),re=g(()=>H.value.filter(e=>E(e)===`agent_confirmed`).length),ie=g(()=>P.value?`正在成对查看疑似冲突;再次点击可返回全部偏好。`:N.value===`pending`?`已筛出待确认偏好。点击条目核对依据,再选择确认、纠正或标记失效。`:N.value===`confirmed`?`已筛出确认人和确认时间完整的偏好;再次点击可返回全部偏好。`:N.value===`agent_confirmed`?`已筛出由实际使用证据形成的 Agent 已确认偏好;它们仍低于人工确认。`:`点击状态数字可筛选内容;疑似冲突会进入成对处理工作台。`);e(()=>u.activePersonalSpace?.id,e=>{e&&Z(e)},{immediate:!0}),e([b,O,N,P],()=>{I.value&&!K.value.some(({id:e})=>e===I.value?.id)&&(I.value=null)}),e(J,e=>{e.some(({value:e})=>e===O.value)||(O.value=`all`)});async function Z(e=u.activePersonalSpace?.id){if(e){y.value=!0;try{let t=new URLSearchParams({spaceId:e,limit:`500`}),n=new URLSearchParams({personalSpaceId:e,limit:`500`}),[r,i]=await Promise.all([m(`/api/graph?${t}`),m(`/api/preference-conflicts?${n}`)]);v.value=r,B.value=Array.isArray(i)?i:[],I.value&&=H.value.find(({id:e})=>e===I.value?.id)??null}catch(e){v.value=null,u.reportError(e)}finally{y.value=!1}}}function ae(e){let t=x(e),n=U.value.find(({left:t,right:n})=>t.id===e.id||n.id===e.id);return n?.aiRecord?`${t} · 待 AI 使用时判断`:n?`${t} · 疑似冲突`:G.value.has(e.id)?`${t} · 曾冲突 / AI 已处理`:t}function oe(e){return e.preferenceScope!==`project`||!e.preferenceProjectId?`个人全局`:`仅 ${(u.state?.personalProjects?.find(({project_id:t})=>t===e.preferenceProjectId))?.profile.name??e.preferenceProjectId}`}function Q(e){if(b.value!==`all`&&e.profileAspect!==b.value||O.value===`global`&&e.preferenceScope===`project`)return!1;if(O.value.startsWith(`project:`)){let t=O.value.slice(8);return e.preferenceScope===`project`&&e.preferenceProjectId===t}return!0}function se(e){if(e.scopeKey===`global`)return`个人全局`;let t=e.scopeKey.slice(8);return`仅 ${(u.state?.personalProjects?.find(({project_id:e})=>e===t))?.profile.name??t}`}function ce(e){b.value=e.profileAspect??`all`,O.value=e.preferenceScope===`project`&&e.preferenceProjectId?`project:${e.preferenceProjectId}`:`global`,P.value=!1,I.value=e}function le(e){z.value=null,R.value=e}function $(e){let t=!P.value&&N.value===e?`all`:e;P.value=!1,N.value=t,t!==`all`&&(I.value=K.value.at(0)??null)}function ue(e=!1){let t=e||!P.value;P.value=t,t&&(N.value=`all`,I.value=null)}async function de(e){let t=u.activePersonalSpace?.id;if(!(!t||e.aiRecord)){V.value=e.id;try{let n=await s(`/api/preference-conflicts/defer`,{personalSpaceId:t,conflictId:e.id,preferenceKey:e.preferenceKey,preferenceScope:e.left.preferenceScope??`global`,preferenceProjectId:e.left.preferenceProjectId,leftItemId:e.left.id,leftItemKind:e.left.itemKind,rightItemId:e.right.id,rightItemKind:e.right.itemKind,reason:`用户选择交给 AI,在首次相关使用前判断并处理。`});B.value=[n,...B.value.filter(({id:e})=>e!==n.id)],u.notify(`已交给 AI:只有后续任务实际用到这组内容时,Agent 才会先判断并处理。`)}catch(e){u.reportError(e)}finally{V.value=``}}}return(e,r)=>(a(),d(`section`,ze,[l(`div`,Be,[l(`button`,{type:`button`,class:`profile-summary-action state-confirmed`,"aria-label":`查看 ${Y.value} 条已确认偏好`,"aria-pressed":!P.value&&N.value===`confirmed`,onClick:r[0]||=e=>$(`confirmed`)},[l(`strong`,null,f(Y.value),1),r[15]||=o(`已确认 `,-1),r[16]||=l(`small`,null,`查看记录`,-1)],8,Ve),l(`button`,{type:`button`,class:`profile-summary-action state-agent-confirmed`,"aria-label":`查看 ${re.value} 条 Agent 已确认偏好`,"aria-pressed":!P.value&&N.value===`agent_confirmed`,onClick:r[1]||=e=>$(`agent_confirmed`)},[l(`strong`,null,f(re.value),1),r[17]||=o(`Agent 已确认 `,-1),r[18]||=l(`small`,null,`低于人工确认`,-1)],8,He),l(`button`,{type:`button`,class:`profile-summary-action state-pending`,"aria-label":`查看并处理 ${X.value} 条待确认偏好`,"aria-pressed":!P.value&&N.value===`pending`,onClick:r[2]||=e=>$(`pending`)},[l(`strong`,null,f(X.value),1),r[19]||=o(`待确认 `,-1),X.value?(a(),d(`small`,We,`查看并确认`)):(a(),d(`small`,Ge,`查看记录`))],8,Ue),l(`button`,{type:`button`,class:`profile-summary-action state-conflict`,"aria-label":U.value.length?`查看并处理 ${U.value.length} 组疑似冲突`:`当前没有疑似冲突`,"aria-pressed":P.value,onClick:r[3]||=e=>ue()},[l(`strong`,null,f(U.value.length),1),r[20]||=o(`疑似冲突 `,-1),l(`small`,null,f(U.value.length?`查看并处理`:`查看记录`),1)],8,Ke),l(`p`,null,f(ie.value),1)]),U.value.length&&!P.value&&N.value===`all`?(a(),d(`section`,qe,[r[23]||=l(`div`,{class:`preference-conflict-alert-icon`,"aria-hidden":`true`},`!`,-1),l(`div`,null,[r[21]||=l(`span`,null,`需要你判断`,-1),l(`h2`,null,`发现 `+f(U.value.length)+` 组疑似冲突`,1),r[22]||=l(`p`,null,`你可以现在人工处理,也可以交给 AI,等后续任务真正用到相关内容时再先判断、处理并留下审计标记。`,-1)]),l(`button`,{class:`primary-action`,type:`button`,onClick:r[4]||=e=>ue(!0)},` 查看冲突双方并处理 `)])):p(``,!0),l(`div`,Je,[l(`div`,Ye,[l(`div`,Xe,[(a(),d(c,null,t([[`all`,`全部`],[`taste`,`品味`],[`personality`,`个性`],[`judgment_preference`,`判断偏好`]],([e,t])=>l(`button`,{key:e,type:`button`,"aria-pressed":b.value===e,onClick:t=>b.value=e},f(t),9,Ze)),64))]),_(te,{modelValue:O.value,"onUpdate:modelValue":r[5]||=e=>O.value=e,class:`personal-profile-scope-filter`,"control-id":`personal-profile-scope`,label:`协作偏好生效范围`,options:J.value,"search-placeholder":`搜索项目名称或 ID`},null,8,[`modelValue`,`options`])]),l(`div`,Qe,[P.value?(a(),d(`span`,$e,` 显示 `+f(q.value.length)+` / `+f(U.value.length)+` 组待判断 `,1)):N.value===`all`?(a(),d(`span`,tt,f(K.value.length===H.value.length?`${H.value.length} 条个人理解`:`显示 ${K.value.length} / ${H.value.length}`),1)):(a(),d(`span`,et,` 显示 `+f(K.value.length)+` 条`+f(N.value===`pending`?`待确认`:`已确认`)+`偏好 `,1)),l(`button`,{class:`toolbar-action`,type:`button`,onClick:r[6]||=e=>Z()},`刷新`)])]),P.value?(a(),d(`section`,nt,[r[28]||=l(`header`,null,[l(`div`,null,[l(`p`,{class:`eyebrow`},`CONFLICT WORKBENCH`),l(`h2`,null,`逐组成对比较,再决定如何生效`)]),l(`p`,null,`系统只根据“同一偏好键、同一生效范围、内容不同”提出疑似冲突,不会自动覆盖任何记录。`)],-1),l(`div`,rt,[(a(!0),d(c,null,t(q.value,(e,t)=>(a(),d(`article`,{key:e.id,class:`preference-conflict-card`},[l(`div`,it,[l(`div`,null,[l(`span`,null,`待判断组 `+f(t+1),1),l(`h3`,null,f(e.preferenceKey),1)]),l(`div`,null,[l(`span`,null,f(se(e)),1),l(`strong`,null,f(e.aiRecord?`待 AI 使用时判断`:e.recommendedAction===`merge`?`建议合并`:`需要人工判断`),1)])]),l(`div`,at,[l(`section`,null,[r[24]||=l(`span`,null,`A · 较早记录`,-1),l(`strong`,null,f(e.left.title),1),l(`p`,null,f(n(F)(e.left)),1),l(`small`,null,f(n(D)(n(w)(e.left))),1)]),r[26]||=l(`i`,{"aria-hidden":`true`},`↔`,-1),l(`section`,null,[r[25]||=l(`span`,null,`B · 较新记录`,-1),l(`strong`,null,f(e.right.title),1),l(`p`,null,f(n(F)(e.right)),1),l(`small`,null,f(n(D)(n(w)(e.right))),1)])]),l(`footer`,null,[l(`div`,null,[r[27]||=l(`span`,null,`判断原因`,-1),l(`p`,null,f(e.reason),1),e.difference.rightOnly.length?(a(),d(`small`,ot,` B 新增:`+f(e.difference.rightOnly.join(`、`)),1)):p(``,!0)]),l(`div`,st,[l(`button`,{class:`secondary-action`,type:`button`,disabled:!!e.aiRecord||V.value===e.id,onClick:t=>de(e)},f(e.aiRecord?`已交给 AI`:V.value===e.id?`正在交给 AI…`:`交给 AI,使用时处理`),9,ct),l(`button`,{class:`primary-action`,type:`button`,onClick:t=>z.value=e},` 现在人工处理 `,8,lt)])])]))),128))]),y.value||!q.value.length?(a(),d(`div`,ut,f(y.value?`正在检查疑似冲突…`:U.value.length?`当前筛选范围没有疑似冲突`:`当前没有需要处理的疑似冲突`),1)):p(``,!0)])):(a(),d(`div`,dt,[l(`section`,ft,[r[29]||=l(`div`,{class:`personal-profile-table-head`,"aria-hidden":`true`},[l(`span`,null,`维度`),l(`span`,null,`内容`),l(`span`,null,`状态、范围与来源`),l(`span`,null,`更新时间`)],-1),l(`div`,pt,[(a(!0),d(c,null,t(K.value,e=>(a(),d(`button`,{key:`${e.itemKind}:${e.id}`,class:h([`personal-profile-row`,{selected:I.value?.id===e.id,"pending-review":n(E)(e)===`pending`,"ai-resolved-conflict":G.value.has(e.id)}]),type:`button`,onClick:t=>I.value=e},[l(`span`,{class:h([`profile-aspect-mark`,e.profileAspect])},f(n(S)(e.profileAspect)),3),l(`span`,ht,[l(`strong`,null,f(e.title),1),l(`small`,null,f(e.body),1)]),l(`span`,gt,[l(`strong`,{class:h({"has-conflict":W.value.has(e.id)})},f(ae(e)),3),l(`small`,null,f(n(C)(e.originQuadrant))+` · `+f(oe(e))+` · `+f(e.evidence.length)+` 个来源`,1)]),l(`time`,null,f(n(D)(n(w)(e))),1)],10,mt))),128))]),y.value||!K.value.length?(a(),d(`div`,_t,f(y.value?`正在读取协作偏好…`:H.value.length?`当前维度和范围还没有内容`:`会话中出现稳定偏好后,会在这里形成可纠正的协作偏好。`),1)):p(``,!0)]),_(A,{class:`personal-profile-inspector`,item:I.value,graph:v.value,editable:``,onConfirm:r[7]||=e=>L.value=e,onEdit:r[8]||=e=>R.value=e,onOpenReplacement:ce},null,8,[`item`,`graph`])])),_(ne,{item:R.value,"personal-space-id":n(u).activePersonalSpace?.id??``,"personal-project-id":null,projects:n(u).state?.personalProjects??[],"replacement-items":H.value,onClose:r[9]||=e=>R.value=null,onSaved:r[10]||=e=>Z()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),_(k,{item:L.value,"personal-space-id":n(u).activePersonalSpace?.id??``,"personal-project-id":null,onClose:r[11]||=e=>L.value=null,onSaved:r[12]||=e=>Z()},null,8,[`item`,`personal-space-id`]),_(Re,{conflict:z.value,"personal-space-id":n(u).activePersonalSpace?.id??``,projects:n(u).state?.personalProjects??[],onClose:r[13]||=e=>z.value=null,onResolved:r[14]||=e=>Z(),onEdit:le},null,8,[`conflict`,`personal-space-id`,`projects`])]))}}),[[`__scopeId`,`data-v-8c91a202`]]);export{vt as default};
@@ -1 +0,0 @@
1
- .conflict-resolution-dialog.vue-dialog[data-v-18d4346c]{width:min(1180px,100vw - 48px)}.conflict-resolution-shell[data-v-18d4346c]{overflow:auto}.conflict-pair-context[data-v-18d4346c]{flex-wrap:wrap;gap:8px;padding:14px 0;display:flex}.conflict-pair-context span[data-v-18d4346c]{color:#747d77;border:1px solid #e1e5e2;border-radius:999px;padding:6px 9px;font-size:10px}.conflict-pair-context strong[data-v-18d4346c]{color:#3c4941;margin-left:4px}.conflict-comparison[data-v-18d4346c]{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.conflict-side[data-v-18d4346c]{background:#f9fbfa;border:1px solid #dfe5e1;border-radius:10px;align-content:start;gap:8px;min-width:0;padding:16px;display:grid}.conflict-side-left[data-v-18d4346c]{background:#f1f8fd;border-color:#b8d8ef}.conflict-side-right[data-v-18d4346c]{background:#f7f4fd;border-color:#d2c6ef}.conflict-side-heading[data-v-18d4346c]{color:#69736c;justify-content:space-between;gap:12px;font-size:10px;display:flex}.conflict-side h4[data-v-18d4346c],.conflict-side p[data-v-18d4346c]{margin:0}.conflict-side h4[data-v-18d4346c]{color:#2f3d35;font-size:14px}.conflict-side p[data-v-18d4346c]{color:#45524a;white-space:pre-wrap;min-height:48px;font-size:12px;line-height:1.6}.conflict-side small[data-v-18d4346c]{color:#7c857f;text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.text-action[data-v-18d4346c]{color:#52705f;background:0 0;border:0;justify-self:start;padding:0;font-size:10px}.conflict-difference[data-v-18d4346c]{background:#fbfcfb;border:1px solid #e5e7e5;border-radius:9px;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px;padding:12px;display:grid}.conflict-difference>div[data-v-18d4346c]{align-content:start;gap:7px;min-width:0;display:grid}.conflict-difference span[data-v-18d4346c]{color:#7a837d;font-size:9px;font-weight:700}.conflict-difference p[data-v-18d4346c]{flex-wrap:wrap;gap:5px;margin:0;display:flex}.conflict-difference b[data-v-18d4346c]{color:#46534b;background:#e9efeb;border-radius:5px;padding:4px 7px;font-size:10px;font-weight:600}.conflict-difference .muted[data-v-18d4346c]{color:#929993;font-size:10px;display:block}.conflict-resolution-options[data-v-18d4346c]{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:14px;display:grid}.conflict-resolution-options>button[data-v-18d4346c]{color:#3d4942;text-align:left;background:#fff;border:1px solid #dfe4e0;border-radius:9px;align-content:start;gap:6px;min-height:86px;padding:12px;display:grid;position:relative}.conflict-resolution-options>button[aria-pressed=true][data-v-18d4346c]{background:#f1f7f3;border-color:#7ba08a;box-shadow:inset 0 0 0 1px #7ba08a}.conflict-resolution-options strong[data-v-18d4346c]{font-size:11px}.conflict-resolution-options span[data-v-18d4346c]{color:#7a837d;font-size:9px;line-height:1.45}.conflict-resolution-options em[data-v-18d4346c]{color:#376047;background:#dcecdf;border-radius:999px;padding:2px 5px;font-size:8px;font-style:normal;position:absolute;top:8px;right:8px}.conflict-resolution-detail[data-v-18d4346c],.conflict-impact-preview[data-v-18d4346c]{background:#fafcfb;border:1px solid #dfe5e1;border-radius:9px;gap:10px;margin-top:12px;padding:13px;display:grid}.conflict-resolution-detail label[data-v-18d4346c],.conflict-resolution-reason[data-v-18d4346c]{color:#5f6962;gap:6px;font-size:10px;font-weight:600;display:grid}.conflict-resolution-detail textarea[data-v-18d4346c],.conflict-resolution-reason textarea[data-v-18d4346c],.conflict-resolution-detail select[data-v-18d4346c]{width:100%}.conflict-inline-options[data-v-18d4346c]{align-items:center;gap:6px;display:flex}.conflict-inline-options span[data-v-18d4346c]{color:#667169;margin-right:4px;font-size:10px}.conflict-inline-options button[data-v-18d4346c]{color:#58645c;background:#fff;border:1px solid #d9dfdb;border-radius:6px;padding:5px 8px;font-size:10px}.conflict-inline-options button[aria-pressed=true][data-v-18d4346c]{color:#315141;background:#eaf2ed;border-color:#789986}.conflict-impact-preview[data-v-18d4346c]{background:#fffaf0;border-color:#f0d99d}.conflict-impact-preview span[data-v-18d4346c]{color:#826b37;text-transform:uppercase;font-size:9px;font-weight:700}.conflict-impact-preview p[data-v-18d4346c]{color:#554d3c;margin:0;font-size:11px;line-height:1.55}.conflict-resolution-reason[data-v-18d4346c]{margin-top:12px}.conflict-resolution-actions>div[data-v-18d4346c]{gap:8px;display:flex}@media (width<=900px){.conflict-comparison[data-v-18d4346c],.conflict-difference[data-v-18d4346c]{grid-template-columns:1fr}.conflict-resolution-options[data-v-18d4346c]{grid-template-columns:repeat(2,minmax(0,1fr))}}.preference-conflict-alert[data-v-8c91a202]{background:#f7f9f7;border:1px solid #d6ddd8;border-radius:11px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:13px;margin-top:12px;padding:12px 14px;display:grid;box-shadow:0 7px 20px #3142380d}.preference-conflict-alert-icon[data-v-8c91a202]{color:#fff;background:#52685b;border-radius:50%;place-items:center;width:30px;height:30px;font-size:16px;font-weight:800;display:grid}.preference-conflict-alert>div[data-v-8c91a202]:nth-child(2){gap:2px;display:grid}.preference-conflict-alert span[data-v-8c91a202]{color:#65736b;letter-spacing:.08em;text-transform:uppercase;font-size:9px;font-weight:800}.preference-conflict-alert h2[data-v-8c91a202],.preference-conflict-alert p[data-v-8c91a202]{margin:0}.preference-conflict-alert h2[data-v-8c91a202]{color:#344239;font-size:14px}.preference-conflict-alert p[data-v-8c91a202]{color:#6f7972;font-size:10px;line-height:1.5}.preference-conflict-workbench[data-v-8c91a202]{flex:1;min-height:0;padding:18px 0 4px;overflow:auto}.preference-conflict-workbench>header[data-v-8c91a202]{justify-content:space-between;align-items:flex-end;gap:24px;padding:0 2px 14px;display:flex}.preference-conflict-workbench h2[data-v-8c91a202],.preference-conflict-workbench p[data-v-8c91a202]{margin:0}.preference-conflict-workbench h2[data-v-8c91a202]{color:#2e3d35;font-size:17px}.preference-conflict-workbench>header>p[data-v-8c91a202]{color:#778079;text-align:right;max-width:520px;font-size:10px;line-height:1.55}.preference-conflict-list[data-v-8c91a202]{gap:12px;display:grid}.preference-conflict-card[data-v-8c91a202]{background:#fff;border:1px solid #d9dfdb;border-radius:11px;gap:12px;padding:15px;display:grid;box-shadow:0 7px 20px #2d3d340a}.preference-conflict-card-heading[data-v-8c91a202],.preference-conflict-card footer[data-v-8c91a202]{justify-content:space-between;align-items:flex-start;gap:20px;display:flex}.preference-conflict-card-heading>div[data-v-8c91a202]{gap:3px;display:grid}.preference-conflict-card-heading>div[data-v-8c91a202]:last-child{justify-items:end}.preference-conflict-card-heading span[data-v-8c91a202],.preference-conflict-card footer span[data-v-8c91a202]{color:#7d8780;text-transform:uppercase;font-size:9px;font-weight:700}.preference-conflict-card-heading h3[data-v-8c91a202]{color:#344239;margin:0;font-size:14px}.preference-conflict-card-heading strong[data-v-8c91a202]{color:#53685b;font-size:10px}.preference-conflict-pair[data-v-8c91a202]{grid-template-columns:minmax(0,1fr) 26px minmax(0,1fr);align-items:stretch;gap:8px;display:grid}.preference-conflict-pair>section[data-v-8c91a202]{background:#fff;border:1px solid #e0e5e1;border-radius:8px;align-content:start;gap:6px;min-width:0;padding:12px;display:grid}.preference-conflict-pair>section[data-v-8c91a202]:first-child{background:#f5fafe;border-color:#c7ddec}.preference-conflict-pair>section[data-v-8c91a202]:last-child{background:#faf8fd;border-color:#d8ceeb}.preference-conflict-pair span[data-v-8c91a202],.preference-conflict-pair small[data-v-8c91a202]{color:#7d8780;font-size:9px}.preference-conflict-pair strong[data-v-8c91a202]{color:#35423a;font-size:11px}.preference-conflict-pair p[data-v-8c91a202]{color:#566159;font-size:10px;line-height:1.55}.preference-conflict-pair>i[data-v-8c91a202]{color:#9b9486;text-align:center;align-self:center;font-size:14px;font-style:normal}.preference-conflict-card footer[data-v-8c91a202]{border-top:1px solid #e5e9e6;padding-top:11px}.preference-conflict-card footer>div[data-v-8c91a202]{gap:4px;display:grid}.preference-conflict-card footer p[data-v-8c91a202]{color:#5d625d;font-size:10px}.preference-conflict-card footer small[data-v-8c91a202]{color:#758079;font-size:9px}.preference-conflict-card footer button[data-v-8c91a202]{flex:none}.preference-conflict-card footer .preference-conflict-actions[data-v-8c91a202]{justify-content:flex-end;align-items:center;gap:8px;display:flex}.preference-conflict-card footer .preference-conflict-actions .secondary-action[data-v-8c91a202]{color:#5e665f;background:#f5f7f5}.personal-profile-row.ai-resolved-conflict[data-v-8c91a202]{background:#f6fbf8;border-color:#b8d5c3}.personal-profile-row.ai-resolved-conflict .personal-profile-origin strong[data-v-8c91a202]{color:#39724f}.personal-profile-inspector[data-v-8c91a202] .inspector-classification.state-pending,.personal-profile-inspector[data-v-8c91a202] .inspector-classification.state-needs_review{background:#f5f7f5;border-color:#d8dfda}.personal-profile-inspector[data-v-8c91a202] .inspector-classification.state-pending strong,.personal-profile-inspector[data-v-8c91a202] .inspector-classification.state-needs_review strong{color:#53645a}@media (width<=860px){.preference-conflict-alert[data-v-8c91a202]{grid-template-columns:auto minmax(0,1fr)}.preference-conflict-alert>button[data-v-8c91a202]{grid-column:1/-1}.preference-conflict-workbench>header[data-v-8c91a202],.preference-conflict-card-heading[data-v-8c91a202],.preference-conflict-card footer[data-v-8c91a202]{flex-direction:column;align-items:stretch}.preference-conflict-workbench>header>p[data-v-8c91a202]{text-align:left}.preference-conflict-card-heading>div[data-v-8c91a202]:last-child{justify-items:start}.preference-conflict-pair[data-v-8c91a202]{grid-template-columns:1fr}.preference-conflict-card footer .preference-conflict-actions[data-v-8c91a202]{flex-wrap:wrap;justify-content:flex-start}}
@@ -1 +0,0 @@
1
- import{T as e,f as t,y as n}from"./console-tbvTUi6p.js";import{t as r}from"./KnowledgeWorkspace-DVZusvem.js";var i=n({__name:`PersonalProjectsPage`,setup(n){return(n,i)=>(e(),t(r,{"personal-projects-only":``}))}});export{i as default};
@@ -1 +0,0 @@
1
- import{D as e,L as t,P as n,T as r,_ as i,a,c as o,d as s,m as c,n as l,nt as u,p as d,r as f,t as ee,tt as te,u as p,v as m,y as ne}from"./console-tbvTUi6p.js";import{o as re}from"./runtime-dom.esm-bundler-DttsK21F.js";import{t as ie,v as ae}from"./paths-B790iniO.js";import{n as h,r as g,t as _}from"./identity-B3s5CXhv.js";var oe={class:`view`},se={class:`space-heading public-space-heading`},ce={class:`public-space-stats`,"aria-label":`公共项目概览`},le={class:`project-grid`},ue={class:`project-card-heading`},de={class:`project-card-heading-actions`},fe=[`onClick`],pe={class:`completion-badge`},me={class:`project-purpose`},he={class:`evidence-row`},v={key:0,class:`muted`},y={class:`project-access`},b={class:`muted`},x={key:0,class:`project-release-meta`},S={class:`project-card-footer`},C=[`onClick`],w=[`onClick`],T={key:0,class:`empty-state project-empty`},E={class:`project-section`},D={class:`section-toolbar compact-toolbar relation-section-toolbar`},O=[`disabled`],k=[`open`],A={key:0,class:`project-dialog-shell`},j={class:`project-dialog-header`},M={class:`project-latest-release`},N={key:0},P={key:1,class:`muted`},F={class:`project-detail-columns`},I={key:0,class:`muted`},L={key:1,class:`muted`},ge={key:0,class:`muted`},_e={class:`project-dialog-actions`},R=ne({__name:`PublicProjectsPage`,setup(ne){let R=ee(),ve=ae(),z=n(null),B=n([]),V=n([]),H=n(!1),U=n(!1),W=n(``),G=n(``),K=n(`RELATED_TO`),q=p(()=>R.state?.projects??[]),J=p(()=>new Set((R.state?.subscriptions??[]).map(({provider_url:e,project_id:t})=>`${e}::${t}`))),Y=p(()=>q.value.filter(({role:e,isOwner:t})=>e===`maintainer`||t)),ye=p(()=>Y.value.map(e=>({value:e.id,label:e.name,meta:`#${_(e.id,26)}`,search:h(e.id)}))),be=p(()=>{let e=q.value.find(({id:e})=>e===W.value);return q.value.filter(({id:t,providerUrl:n})=>t!==e?.id&&n===e?.providerUrl)}),xe=p(()=>be.value.map(e=>({value:e.id,label:e.name,meta:`#${_(e.id,26)}`,search:h(e.id)}))),Se=[{value:`PART_OF`,label:`属于`},{value:`USES_KNOWLEDGE_FROM`,label:`使用其共享知识`},{value:`DEPENDS_ON`,label:`依赖`},{value:`PROVIDES_TO`,label:`提供能力`},{value:`SHARES_CAPABILITY_WITH`,label:`共享能力`},{value:`SUCCESSOR_OF`,label:`后继于`},{value:`RELATED_TO`,label:`相关`}];function X(e){return`${e.providerUrl}::${e.id}`}function Z(e){return e.profile?.purpose||e.profile?.scope||e.profile?.technical_summary||e.description||`公共项目`}async function Ce(e){try{if(J.value.has(X(e))){let t=new URLSearchParams({personalSpaceId:R.activePersonalSpace?.id??``,providerUrl:e.providerUrl});await l(`/api/subscriptions/${encodeURIComponent(e.id)}?${t}`),R.notify(`已取消订阅“${e.name}”;公共项目内容没有被删除。`)}else await a(`/api/subscriptions`,{personalSpaceId:R.activePersonalSpace?.id,projectId:e.id,providerUrl:e.providerUrl,projectName:e.name}),R.notify(`已订阅“${e.name}”。`);await R.refresh()}catch(e){R.reportError(e)}}async function we(e){z.value=e,B.value=[],V.value=[],H.value=!0;try{let t=new URLSearchParams({providerUrl:e.providerUrl}),[n,r]=await Promise.all([f(`/api/projects/${encodeURIComponent(e.id)}/releases?${t}`),f(`/api/project-relations?${new URLSearchParams({projectId:e.id,providerUrl:e.providerUrl})}`)]);B.value=n.releases??[],V.value=r.relations??[]}catch(e){R.reportError(e)}finally{H.value=!1}}async function Q(e){z.value=null,await ve.push(ie(`public`,e.id,`graph`))}async function Te(e){if(window.confirm(`确认永久删除公共项目“${e.name}”?个人项目不会被删除。`))try{let t=new URLSearchParams({providerUrl:e.providerUrl});await l(`/api/projects/${encodeURIComponent(e.id)}?${t}`),z.value=null,R.notify(`公共项目“${e.name}”已删除;本机个人项目仍保留。`),await R.refresh()}catch(e){R.reportError(e)}}async function Ee(){let e=q.value.find(({id:e})=>e===W.value),t=q.value.find(({id:e})=>e===G.value);if(!e||!t){R.reportError(Error(`请选择来源项目和关联项目`));return}try{await a(`/api/project-relations`,{sourceProjectId:e.id,targetProjectId:t.id,providerUrl:e.providerUrl,relationType:K.value,note:null}),U.value=!1,W.value=``,G.value=``,R.notify(K.value===`PART_OF`?`关系已提交,等待父项目确认。`:`项目关系已建立。`)}catch(e){R.reportError(e)}}function $(e){return e?new Date(e).toLocaleString(`zh-CN`):`时间未记录`}return(n,a)=>(r(),c(`section`,oe,[s(`div`,se,[a[9]||=s(`span`,{class:`space-heading-icon`,"aria-hidden":`true`},[s(`span`,{class:`nav-icon nav-icon-public-project`})],-1),a[10]||=s(`div`,null,[s(`p`,null,`浏览共享 Provider 上的项目,按需订阅。项目关系不会自动授予权限,也不会替你订阅。`)],-1),s(`div`,ce,[s(`span`,null,[s(`strong`,null,u(q.value.length),1),a[7]||=i(`可发现`,-1)]),s(`span`,null,[s(`strong`,null,u(t(R).state?.subscriptions.length??0),1),a[8]||=i(`已订阅`,-1)])])]),s(`div`,le,[(r(!0),c(o,null,e(q.value,t=>(r(),c(`article`,{key:X(t),class:`project-card`},[s(`div`,ue,[s(`div`,null,[a[11]||=s(`p`,{class:`eyebrow`},`PUBLIC PROJECT`,-1),s(`h4`,null,u(t.name),1)]),s(`div`,de,[t.can_manage?(r(),c(`button`,{key:0,class:`management-action`,type:`button`,onClick:e=>Te(t)},`管理项目`,8,fe)):d(``,!0),s(`div`,pe,[s(`strong`,null,u(t.profile?.assessment?.score??`—`),1),s(`span`,null,u(t.profile?.assessment?`资料覆盖`:`暂无摘要`),1)])])]),s(`p`,me,u(Z(t)),1),s(`div`,he,[(r(!0),c(o,null,e(t.profile?.sources??[],(e,t)=>(r(),c(`span`,{key:t,class:`status-chip`},u(e.kind??`资料`),1))),128)),t.profile?.sources?.length?d(``,!0):(r(),c(`span`,v,`暂无已登记资料`))]),s(`div`,y,[s(`span`,{class:te([`status-chip`,{owner:t.isOwner}])},u(t.isOwner?`Owner`:t.role??`Reader`),3),s(`span`,b,u(t.isOwner?`你发布的项目`:`公共可发现`),1),t.current_release?(r(),c(`span`,x,[s(`strong`,null,u(t.current_release.version),1),s(`span`,null,u($(t.current_release.published_at)),1)])):d(``,!0)]),s(`footer`,S,[s(`button`,{class:`secondary-action`,type:`button`,onClick:e=>Ce(t)},u(J.value.has(X(t))?`取消订阅`:`订阅项目`),9,C),s(`button`,{class:`primary-action`,type:`button`,onClick:e=>we(t)},`查看详情`,8,w)])]))),128)),q.value.length?d(``,!0):(r(),c(`div`,T,`暂无公共项目`))]),s(`section`,E,[s(`div`,D,[a[12]||=s(`div`,null,[s(`p`,{class:`eyebrow`},`PROJECT RELATIONS`),s(`h3`,null,`项目关系`),s(`p`,null,`只在同一个公共 Provider 内建立显式关系。`)],-1),s(`button`,{class:`primary-action`,type:`button`,disabled:!Y.value.length,onClick:a[0]||=e=>U.value=!U.value},` 添加项目关系 `,8,O)]),U.value?(r(),c(`form`,{key:0,class:`relation-composer relation-composer-form compact-relation-form`,onSubmit:re(Ee,[`prevent`])},[s(`label`,null,[a[13]||=i(`来源项目 `,-1),m(g,{modelValue:W.value,"onUpdate:modelValue":a[1]||=e=>W.value=e,options:ye.value,label:`关系来源项目`,placeholder:`选择项目`,searchable:``,required:``,onChange:a[2]||=e=>G.value=``},null,8,[`modelValue`,`options`])]),s(`label`,null,[a[14]||=i(`关系 `,-1),m(g,{modelValue:K.value,"onUpdate:modelValue":a[3]||=e=>K.value=e,options:Se,label:`项目关系类型`},null,8,[`modelValue`])]),s(`label`,null,[a[15]||=i(`关联项目 `,-1),m(g,{modelValue:G.value,"onUpdate:modelValue":a[4]||=e=>G.value=e,options:xe.value,label:`关系目标项目`,placeholder:`选择项目`,searchable:``,required:``},null,8,[`modelValue`,`options`])]),a[16]||=s(`button`,{class:`primary-action`,type:`submit`},`添加关系`,-1)],32)):d(``,!0)]),s(`dialog`,{open:!!z.value,class:`project-dialog vue-dialog`},[z.value?(r(),c(`div`,A,[s(`header`,j,[s(`div`,null,[a[17]||=s(`p`,{class:`eyebrow`},`PUBLIC PROJECT`,-1),s(`h3`,null,u(z.value.name),1),s(`p`,null,u(Z(z.value)),1)]),s(`button`,{class:`secondary-action`,type:`button`,onClick:a[5]||=e=>z.value=null},`关闭`)]),s(`section`,M,[a[18]||=s(`p`,{class:`eyebrow`},`LATEST RELEASE`,-1),a[19]||=s(`h4`,null,`最新发布`,-1),z.value.current_release?(r(),c(`p`,N,[s(`strong`,null,u(z.value.current_release.version),1),i(` · `+u($(z.value.current_release.published_at)),1)])):(r(),c(`p`,P,`这个项目还没有版本记录`))]),s(`div`,F,[s(`section`,null,[a[20]||=s(`h4`,null,`版本记录`,-1),H.value?(r(),c(`p`,I,`正在读取…`)):d(``,!0),(r(!0),c(o,null,e(B.value,e=>(r(),c(`article`,{key:e.version,class:`project-release-item`},[s(`strong`,null,u(e.version),1),s(`p`,null,u(e.update_summary),1),s(`small`,null,u($(e.published_at)),1)]))),128)),!H.value&&!B.value.length?(r(),c(`p`,L,`暂无版本记录`)):d(``,!0)]),s(`section`,null,[a[21]||=s(`h4`,null,`项目关系`,-1),(r(!0),c(o,null,e(V.value,e=>(r(),c(`article`,{key:e.id,class:`project-detail-relation`},[s(`strong`,null,u(e.relation_type),1),s(`small`,null,u(e.status??`active`),1)]))),128)),!H.value&&!V.value.length?(r(),c(`p`,ge,`暂无项目关系`)):d(``,!0)])]),s(`footer`,_e,[a[22]||=s(`span`,null,`项目内容与管理操作已分开。`,-1),s(`button`,{class:`primary-action`,type:`button`,onClick:a[6]||=e=>Q(z.value)},`查看知识图谱`)])])):d(``,!0)],8,k)]))}});export{R as default};
@@ -1 +0,0 @@
1
- import{A as e,D as t,L as n,P as r,T as i,a,c as o,d as s,m as c,nt as l,p as u,r as d,t as f,u as p,v as m,y as h}from"./console-tbvTUi6p.js";import{n as g,r as _,t as v}from"./identity-B3s5CXhv.js";import{l as y}from"./model-DVT8sjy9.js";var b={class:`view`},x={class:`review-list`},S={class:`review-meta`},C={class:`review-actions stacked-actions`},w=[`onClick`],T=[`onClick`],E=[`onClick`],D={key:0,class:`empty-state`},O={key:0,class:`project-section`},k={class:`section-toolbar`},A={class:`review-list`},j={class:`review-meta`},M={class:`review-actions`},N=[`onClick`],P=[`onClick`],F={key:0,class:`empty-state`},I=h({__name:`ReviewPage`,setup(h){let I=f(),L=r([]),R=r([]),z=r(``),B=r(!1),V=p(()=>(I.state?.projects??[]).filter(({role:e})=>e===`maintainer`)),H=p(()=>V.value.map(e=>({value:e.id,label:e.name,meta:`#${v(e.id,26)}`,search:g(e.id)}))),U=p(()=>V.value.find(({id:e})=>e===z.value)??null);e(()=>I.state,e=>{e&&(z.value||=V.value[0]?.id??``,W())},{immediate:!0}),e(z,()=>void K());async function W(){B.value=!0,await Promise.all([G(),K()]),B.value=!1}async function G(){let e=I.activePersonalSpace?.id;if(e)try{let t=await d(`/api/personal-review?${new URLSearchParams({personalSpaceId:e,status:`pending`})}`);L.value=t.drafts??[]}catch(e){I.reportError(e)}}async function K(){let e=U.value;if(!e){R.value=[];return}try{let t=await d(`/api/review?${new URLSearchParams({projectId:e.id,providerUrl:e.providerUrl,status:`pending`})}`);R.value=t.proposals??[]}catch(e){R.value=[],I.reportError(e)}}async function q(e,t){try{await a(`/api/personal-review/${encodeURIComponent(e.id)}/decision`,{decision:t}),await Promise.all([G(),I.refresh()])}catch(e){I.reportError(e)}}async function J(e,t){let n=U.value;if(n)try{await a(`/api/review/${encodeURIComponent(e.id)}/decision`,{projectId:n.id,providerUrl:n.providerUrl,decision:t,note:null}),await K()}catch(e){I.reportError(e)}}return(e,r)=>(i(),c(`section`,b,[r[4]||=s(`div`,{class:`section-title`},[s(`h3`,null,`个人发布确认`),s(`p`,null,`从会话提取的知识先由你决定保留在个人空间、忽略,或提交公共项目。`)],-1),s(`div`,x,[(i(!0),c(o,null,t(L.value,e=>(i(),c(`article`,{key:e.id,class:`review-item review-item-detailed`},[s(`div`,null,[r[1]||=s(`div`,{class:`review-stage`},`提交公共前确认`,-1),s(`h4`,null,l(e.episode.name),1),s(`p`,null,l(e.episode.summary||e.episode.source_description),1),s(`div`,S,[s(`span`,null,l(e.episode.entities?.length??0)+` 个实体`,1),s(`span`,null,l(e.episode.relationships?.length??0)+` 条关系`,1),s(`span`,null,l(n(y)(e.created_at)),1)])]),s(`div`,C,[s(`button`,{class:`secondary-action`,type:`button`,onClick:t=>q(e,`keep_personal`)},`仅保留个人`,8,w),s(`button`,{class:`reject`,type:`button`,onClick:t=>q(e,`ignore`)},`忽略`,8,T),n(I).state?.capabilities?.submitKnowledge?(i(),c(`button`,{key:0,class:`approve`,type:`button`,onClick:t=>q(e,`submit_public`)},`提交公共`,8,E)):u(``,!0)])]))),128)),!B.value&&!L.value.length?(i(),c(`div`,D,`当前没有待个人确认的内容`)):u(``,!0)]),n(I).state?.capabilities?.reviewProposals?(i(),c(`section`,O,[s(`div`,k,[r[2]||=s(`div`,null,[s(`h3`,null,`公共项目维护审核`),s(`p`,null,`Maintainer 只审核明确提交到项目的 Proposal。`)],-1),m(_,{modelValue:z.value,"onUpdate:modelValue":r[0]||=e=>z.value=e,options:H.value,label:`审核项目`,"control-id":`review-project`,searchable:``},null,8,[`modelValue`,`options`])]),s(`div`,A,[(i(!0),c(o,null,t(R.value,e=>(i(),c(`article`,{key:e.id,class:`review-item`},[s(`div`,null,[r[3]||=s(`div`,{class:`review-stage`},`共享 Maintainer 审核`,-1),s(`h4`,null,l(e.episode.name),1),s(`p`,null,l(e.episode.summary||e.episode.source_description),1),s(`div`,j,[s(`span`,null,l(n(y)(e.created_at)),1)])]),s(`div`,M,[s(`button`,{class:`reject`,type:`button`,onClick:t=>J(e,`reject`)},`拒绝`,8,N),s(`button`,{class:`approve`,type:`button`,onClick:t=>J(e,`approve`)},`通过`,8,P)])]))),128)),!B.value&&!R.value.length?(i(),c(`div`,F,`当前没有待审核 Proposal`)):u(``,!0)])])):u(``,!0)]))}});export{I as default};