fuli-context 0.7.3 → 0.7.4-beta.1

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 (107) hide show
  1. package/README.md +170 -18
  2. package/README.zh-CN.md +146 -12
  3. package/compose.graphiti.yml +2 -0
  4. package/dist/web/assets/{AboutPage-qeO_vm0T.js → AboutPage-CftRexSY.js} +1 -1
  5. package/dist/web/assets/{ConnectionsPage-DO0GR9Xg.js → ConnectionsPage-D5J91x6d.js} +1 -1
  6. package/dist/web/assets/{useMinimumLoadingDisplay-BpCyBeko.css → KnowledgeEditDialog-DWUV_NPp.css} +1 -1
  7. package/dist/web/assets/KnowledgeEditDialog-wotVahvr.js +1 -0
  8. package/dist/web/assets/{KnowledgeInspector-Bjhdu2mf.css → KnowledgeInspector--1NujtXW.css} +1 -1
  9. package/dist/web/assets/KnowledgeInspector-BzkW0mVs.js +1 -0
  10. package/dist/web/assets/KnowledgeOrganizerPage-BebUDiHt.js +1 -0
  11. package/dist/web/assets/KnowledgePage-OUT07aKH.js +1 -0
  12. package/dist/web/assets/KnowledgeWorkspace-1pHJ0MNZ.js +4 -0
  13. package/dist/web/assets/{OverviewPage-CmCcDCAs.js → OverviewPage-CHE6XhdS.js} +1 -1
  14. package/dist/web/assets/PersonalProfilePage-B7T09bow.css +1 -0
  15. package/dist/web/assets/PersonalProfilePage-CXXiabUy.js +1 -0
  16. package/dist/web/assets/PersonalProjectsPage-d2wYGW8n.js +1 -0
  17. package/dist/web/assets/PublicProjectsPage-hxLShtnZ.js +1 -0
  18. package/dist/web/assets/{ReviewPage-B3vnZ6gn.js → ReviewPage-DUeyu7E8.js} +1 -1
  19. package/dist/web/assets/{SearchableSelect-ih69qbcS.js → SearchableSelect-C5RiB5F8.js} +1 -1
  20. package/dist/web/assets/SettingsPage-BMuASSzQ.js +1 -0
  21. package/dist/web/assets/SettingsPage-CAfz4qiV.css +1 -0
  22. package/dist/web/assets/WritingTastePage-B9BCYIwQ.js +1 -0
  23. package/dist/web/assets/WritingTastePage-DSgvTH6x.css +1 -0
  24. package/dist/web/assets/{console-DE40hXGC.js → console-DMvHxKf9.js} +1 -1
  25. package/dist/web/assets/conversation-launcher-settings-Dnlcw7Rj.js +1 -0
  26. package/dist/web/assets/{i18n-CDxBs1sz.js → i18n-CWfd8Dtt.js} +1 -1
  27. package/dist/web/assets/{identity-BCxb1mcy.js → identity-C9mLdR8L.js} +1 -1
  28. package/dist/web/assets/index-F5e2sQ7p.js +2 -0
  29. package/dist/web/assets/{index-CCOGfZzE.css → index-X2j29j8i.css} +1 -1
  30. package/dist/web/assets/{model-CCMdt10Q.js → model-CsYAR8O3.js} +1 -1
  31. package/dist/web/assets/paths-CDREouhi.js +1 -0
  32. package/dist/web/assets/useApi-CROJJdhE-BLQiPVw0.js +1 -0
  33. package/dist/web/assets/vue-router-DN8x6iY1.js +1 -0
  34. package/dist/web/index.html +7 -6
  35. package/graph-provider/fuli_graph/app.py +238 -2
  36. package/graph-provider/fuli_graph/auth.py +18 -0
  37. package/graph-provider/fuli_graph/collaboration_context.py +253 -17
  38. package/graph-provider/fuli_graph/common_knowledge.py +6 -2
  39. package/graph-provider/fuli_graph/config.py +5 -0
  40. package/graph-provider/fuli_graph/graph_models.py +6 -0
  41. package/graph-provider/fuli_graph/graph_projection.py +14 -0
  42. package/graph-provider/fuli_graph/graph_query.py +27 -3
  43. package/graph-provider/fuli_graph/knowledge_management.py +19 -1
  44. package/graph-provider/fuli_graph/knowledge_search.py +11 -0
  45. package/graph-provider/fuli_graph/models.py +15 -2
  46. package/graph-provider/fuli_graph/personal_global_preference_models.py +234 -0
  47. package/graph-provider/fuli_graph/personal_global_preferences.py +1247 -0
  48. package/graph-provider/fuli_graph/project_action_models.py +22 -0
  49. package/graph-provider/fuli_graph/project_knowledge.py +121 -2
  50. package/graph-provider/fuli_graph/provider_values.py +24 -0
  51. package/graph-provider/fuli_graph/runtime.py +78 -0
  52. package/graph-provider/fuli_graph/search_projection.py +14 -1
  53. package/graph-provider/fuli_graph/store_knowledge.py +116 -2
  54. package/graph-provider/fuli_graph/workflow_candidate_models.py +168 -0
  55. package/graph-provider/fuli_graph/workflow_candidates.py +996 -0
  56. package/graph-provider/fuli_graph/workflow_observation_models.py +30 -0
  57. package/graph-provider/fuli_graph/workflow_observations.py +84 -0
  58. package/graph-provider/pyproject.toml +1 -1
  59. package/npm-shrinkwrap.json +18 -18
  60. package/package.json +4 -4
  61. package/skills/capturing-session-knowledge/SKILL.md +32 -5
  62. package/skills/flreview/SKILL.md +4 -3
  63. package/src/agent-tools/graph-definitions.js +136 -20
  64. package/src/agent-tools/graph-handlers.js +10 -4
  65. package/src/cli/command-registry.js +1 -1
  66. package/src/cli/local-runtime-command.js +69 -2
  67. package/src/graphiti/agent-knowledge-workflows.js +497 -16
  68. package/src/graphiti/collaboration-preference-projection.js +162 -0
  69. package/src/graphiti/federated-application.js +155 -161
  70. package/src/graphiti/federated-search-support.js +102 -0
  71. package/src/graphiti/knowledge-provider-mapping.js +15 -0
  72. package/src/graphiti/provider-client.js +162 -10
  73. package/src/graphiti/related-project-suggestions.js +109 -0
  74. package/src/graphiti/runtime-config.js +14 -0
  75. package/src/graphiti/source-marker.js +2 -2
  76. package/src/graphiti/user-taste-skill.js +241 -0
  77. package/src/graphiti/workflow-candidate-mapping.js +87 -0
  78. package/src/graphiti/workflow-observation.js +82 -0
  79. package/src/graphiti/writing-taste-profile-workflow.js +25 -0
  80. package/src/graphiti/writing-taste-profile.js +490 -0
  81. package/src/http/graph-api-router.js +15 -2
  82. package/src/mcp/context-resources.js +158 -0
  83. package/src/mcp/create-mcp-server.js +39 -5
  84. package/src/mcp/instructions.js +5 -7
  85. package/src/mcp/session-id.js +60 -0
  86. package/src/mcp/task-context-registry.js +15 -3
  87. package/src/mcp/tool-annotations.js +8 -1
  88. package/src/mcp/tool-result.js +28 -4
  89. package/src/server.js +0 -1
  90. package/src/setup/claude-code-config.js +17 -6
  91. package/src/setup/graph-runtime.js +20 -2
  92. package/src/system/runtime-settings.js +121 -2
  93. package/src/system/system-service.js +5 -1
  94. package/dist/web/assets/KnowledgeInspector-DEW5lA1m.js +0 -1
  95. package/dist/web/assets/KnowledgeOrganizerPage-BkM568Ld.js +0 -1
  96. package/dist/web/assets/KnowledgePage-BAT4aZIm.js +0 -1
  97. package/dist/web/assets/KnowledgeWorkspace-DyGtBz--.js +0 -4
  98. package/dist/web/assets/PersonalProfilePage-C42mwKN8.js +0 -1
  99. package/dist/web/assets/PersonalProfilePage-CdmEzyvZ.css +0 -1
  100. package/dist/web/assets/PersonalProjectsPage-BwaXR62K.js +0 -1
  101. package/dist/web/assets/PublicProjectsPage-egKBulOq.js +0 -1
  102. package/dist/web/assets/SettingsPage-C6ouU0sR.css +0 -1
  103. package/dist/web/assets/SettingsPage-oLE8mNs5.js +0 -1
  104. package/dist/web/assets/index-BzhNfzU_.js +0 -2
  105. package/dist/web/assets/paths-DwHeiGMT.js +0 -1
  106. package/dist/web/assets/useMinimumLoadingDisplay-HdI7XAmu.js +0 -1
  107. package/dist/web/assets/vue-router-Drfl1F8i.js +0 -1
@@ -0,0 +1 @@
1
+ import{D as e,F as t,O as n,Q as r,R as i,_ as a,a as o,b as s,d as ee,et as c,f as l,g as u,i as d,j as f,k as p,m,n as te,p as h,q as g,s as _,tt as v,u as y,x as ne,y as re}from"./i18n-CWfd8Dtt.js";import{o as ie,r as b,t as ae}from"./console-DMvHxKf9.js";import{t as x}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as S}from"./SearchableSelect-C5RiB5F8.js";import{o as oe,r as se,t as C}from"./conversation-launcher-settings-Dnlcw7Rj.js";var ce=[`aria-label`],le={class:`settings-content`},ue={key:0,class:`settings-top-status`,role:`status`},de={key:0},fe={key:1},pe={class:`settings-card resource-card`},me={class:`section-heading`},he={key:0},ge=[`disabled`],_e={key:0,class:`settings-error`,role:`alert`},ve={class:`resource-totals`},ye={class:`resource-breakdowns`},w={class:`resource-group`},T={class:`resource-group`},E={class:`resource-notes`},D={key:0},O={key:1},k={key:2,class:`settings-skeleton`,"aria-hidden":`true`},A={class:`settings-card ports-card`},j={class:`section-heading`},M={key:0,class:`restart-chip`},N={class:`port-section`},P={class:`port-grid`},be=[`onUpdate:modelValue`],xe={class:`port-section development-section`},Se={id:`conversation-launchers`,class:`settings-card conversation-launcher-card`},Ce={class:`conversation-launcher-list`},we={class:`conversation-launcher-heading`},Te={class:`conversation-launcher-switch`},Ee=[`onUpdate:modelValue`],De={key:0,class:`conversation-launcher-note`},Oe={key:1,class:`conversation-launcher-fields`},ke=[`onUpdate:modelValue`],Ae={class:`conversation-launcher-template`},je=[`onUpdate:modelValue`],Me={class:`settings-card behavior-card`},Ne={class:`setting-list`},Pe={class:`setting-row`},Fe=[`checked`],Ie={class:`setting-row`},Le=[`checked`],Re={class:`setting-row`},ze={class:`setting-row select-row`},Be={class:`setting-row select-row`},Ve={key:0,class:`settings-error`,role:`alert`},He={key:2,class:`settings-error`,role:`alert`},F=x(ne({__name:`SettingsPage`,setup(ne){let x=ae(),F=g(null),I=g(null),L=g(null),R=g(!0),z=g(!1),B=g(!1),V=g(``),H=g(``),U=g(!1),W=null,Ue=[`console`,`personalProvider`,`personalNeo4jHttp`,`personalNeo4jBolt`],G=h({get:()=>te(),set:e=>d(e)}),K=[5,10,30,60],We=se,Ge=h(()=>[{value:`zh-CN`,label:o(`settings.behavior.zh`)},{value:`en-US`,label:o(`settings.behavior.en`)}]),Ke=h(()=>K.map(e=>({value:String(e),label:o(`settings.resources.refreshUnit`,{seconds:e})}))),qe=h(()=>[{value:`any`,label:o(`settings.conversationLaunchers.idFormats.any`)},{value:`uuid`,label:o(`settings.conversationLaunchers.idFormats.uuid`)}]),Je=h(()=>x.state?.capturePolicy?.enabled!==!1),Ye=h(()=>x.state?.agentAccessPolicy?.enabled!==!1),Xe=h(()=>Math.max(1,...L.value?.memory.components.map(({bytes:e})=>e)??[1])),Ze=h(()=>Math.max(1,...L.value?.disk.components.map(({bytes:e})=>e)??[1]));n(async()=>{x.runtimeStatus===`idle`&&x.refresh(),await Promise.all([Qe(),q()]),R.value=!1}),e(Y),t(()=>I.value?.resourceRefreshSeconds,()=>J());async function Qe(){try{let e=await b(`/api/system/settings`);F.value=e,I.value=structuredClone(e.configured),C(e.configured.conversationLaunchers),V.value=``}catch(e){V.value=e instanceof Error?e.message:o(`settings.loadError`)}}async function q(){if(!(B.value||document.visibilityState===`hidden`)){B.value=!0;try{L.value=await b(`/api/system/resources`),H.value=``}catch(e){H.value=e instanceof Error?e.message:o(`settings.resources.unavailable`)}finally{B.value=!1}}}async function $e(){if(!(!I.value||z.value)){z.value=!0,U.value=!1;try{let e=await ie(`/api/system/settings`,I.value);F.value=e,I.value=structuredClone(e.configured),C(e.configured.conversationLaunchers),U.value=!0,V.value=``,window.setTimeout(()=>{U.value=!1},2400)}catch(e){V.value=e instanceof Error?e.message:o(`settings.saveError`)}finally{z.value=!1}}}function J(){Y();let e=I.value?.resourceRefreshSeconds;e&&(W=setInterval(()=>void q(),e*1e3))}function Y(){W&&clearInterval(W),W=null}function et(e){x.updateCapturePolicy(e.currentTarget.checked)}function tt(e){x.updateAgentAccessPolicy(e.currentTarget.checked)}function nt(e){(e===`zh-CN`||e===`en-US`)&&d(e)}function rt(e){let t=K.find(t=>String(t)===e);t===void 0||!I.value||(I.value.resourceRefreshSeconds=t)}function it(e){let t=o(`settings.conversationLaunchers.applications.${e}`);return t===`settings.conversationLaunchers.applications.${e}`?oe(e):t}function at(e){return F.value?.active.ports[e]??`—`}function X(e){let t=`settings.resources.components.${e.id}`,n=o(t);return n===t?e.label:n}function Z(e){if(!Number.isFinite(e))return`—`;let t=Number(e),n=[`B`,`KiB`,`MiB`,`GiB`,`TiB`],r=t,i=0;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;let a=i===0||r>=100?0:r>=10?1:2;return`${r.toFixed(a)} ${n[i]}`}function Q(e,t){return`${Math.max(3,Math.round(e/t*100))}%`}function $(e){return e?new Intl.DateTimeFormat(G.value,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}).format(new Date(e)):`—`}return(e,t)=>(p(),a(`section`,{class:`view settings-view`,"aria-label":r(o)(`settings.aria`)},[m(`div`,le,[U.value||F.value?.restartRequired?(p(),a(`div`,ue,[U.value?(p(),a(`strong`,de,v(r(o)(`settings.saved`)),1)):u(``,!0),F.value?.restartRequired?(p(),a(`span`,fe,v(r(o)(`settings.restartCopy`)),1)):u(``,!0)])):u(``,!0),m(`section`,pe,[m(`header`,me,[m(`div`,null,[m(`h3`,null,v(r(o)(`settings.resources.title`)),1),L.value?(p(),a(`p`,he,v(r(o)(`settings.resources.measuredAt`,{time:$(L.value.sampledAt)})),1)):u(``,!0)]),m(`button`,{class:`quiet-button`,type:`button`,disabled:B.value,onClick:q},v(r(o)(`common.actions.refresh`)),9,ge)]),H.value?(p(),a(`p`,_e,v(H.value),1)):L.value?(p(),a(l,{key:1},[m(`div`,ve,[m(`article`,null,[m(`span`,null,v(r(o)(`settings.resources.memory`)),1),m(`strong`,null,v(Z(L.value.memory.usedBytes)),1),m(`small`,null,v(r(o)(`settings.resources.available`,{value:Z(L.value.memory.hostFreeBytes)})),1)]),m(`article`,null,[m(`span`,null,v(r(o)(`settings.resources.disk`)),1),m(`strong`,null,v(Z(L.value.disk.usedBytes)),1),m(`small`,null,v(r(o)(`settings.resources.available`,{value:Z(L.value.disk.hostFreeBytes)})),1)])]),m(`div`,ye,[m(`div`,w,[m(`h4`,null,v(r(o)(`settings.resources.memory`)),1),(p(!0),a(l,null,f(L.value.memory.components,e=>(p(),a(`div`,{key:e.id,class:`resource-row`},[m(`div`,null,[m(`span`,null,v(X(e)),1),m(`strong`,null,v(Z(e.bytes)),1)]),m(`i`,null,[m(`b`,{style:c({width:Q(e.bytes,Xe.value)})},null,4)])]))),128))]),m(`div`,T,[m(`h4`,null,v(r(o)(`settings.resources.disk`)),1),(p(!0),a(l,null,f(L.value.disk.components,e=>(p(),a(`div`,{key:e.id,class:`resource-row`},[m(`div`,null,[m(`span`,null,v(X(e)),1),m(`strong`,null,v(Z(e.bytes)),1)]),m(`i`,null,[m(`b`,{style:c({width:Q(e.bytes,Ze.value)})},null,4)])]))),128))])]),m(`div`,E,[m(`span`,null,v(r(o)(`settings.resources.diskMeasuredAt`,{time:$(L.value.disk.measuredAt)})),1),L.value.status===`partial`?(p(),a(`span`,D,v(r(o)(`settings.resources.partial`)),1)):u(``,!0),L.value.disk.temporaryBytes?(p(),a(`span`,O,v(r(o)(`settings.resources.temporary`,{value:Z(L.value.disk.temporaryBytes)})),1)):u(``,!0),m(`span`,null,v(r(o)(`settings.resources.exclusions`)),1)])],64)):(p(),a(`div`,k))]),I.value?(p(),a(`form`,{key:1,id:`settings-form`,class:`settings-form`,onSubmit:ee($e,[`prevent`])},[m(`section`,A,[m(`header`,j,[m(`h3`,null,v(r(o)(`settings.ports.title`)),1),F.value?.restartRequired?(p(),a(`span`,M,v(r(o)(`settings.restartRequired`)),1)):u(``,!0)]),m(`div`,N,[m(`h4`,null,v(r(o)(`settings.ports.personal`)),1),m(`div`,P,[(p(),a(l,null,f(Ue,e=>m(`label`,{key:e},[m(`span`,null,v(r(o)(`settings.ports.${e}`)),1),i(m(`input`,{"onUpdate:modelValue":t=>I.value.ports[e]=t,type:`number`,min:`1`,max:`65535`,required:``},null,8,be),[[y,I.value.ports[e],void 0,{number:!0}]]),m(`small`,null,v(r(o)(`settings.ports.active`,{port:at(e)})),1)])),64))])]),m(`div`,xe,[m(`div`,null,[m(`h4`,null,v(r(o)(`settings.ports.development`)),1),m(`span`,null,v(r(o)(`settings.ports.developing`)),1)]),m(`p`,null,v(r(o)(`settings.ports.developmentMeta`)),1)])]),m(`section`,Se,[m(`h3`,null,v(r(o)(`settings.conversationLaunchers.title`)),1),m(`div`,Ce,[(p(!0),a(l,null,f(r(We),e=>(p(),a(`article`,{key:e,class:`conversation-launcher-row`},[m(`div`,we,[m(`span`,null,[m(`strong`,null,v(it(e)),1),m(`small`,null,v(r(o)(`settings.conversationLaunchers.sourceId`,{id:e})),1)]),m(`label`,Te,[m(`span`,null,v(r(o)(`settings.conversationLaunchers.enabled`)),1),i(m(`input`,{"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].enabled=t,type:`checkbox`,role:`switch`},null,8,Ee),[[_,I.value.conversationLaunchers[e].enabled]])])]),I.value.conversationLaunchers[e].enabled&&e===`codex`?(p(),a(`small`,De,v(r(o)(`settings.conversationLaunchers.idFormatMeta`)),1)):u(``,!0),I.value.conversationLaunchers[e].enabled?(p(),a(`div`,Oe,[m(`label`,null,[m(`span`,null,v(r(o)(`settings.conversationLaunchers.idFormat`)),1),s(S,{modelValue:I.value.conversationLaunchers[e].idFormat,"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].idFormat=t,class:`launcher-select`,"control-id":`settings-conversation-${e}-id-format`,options:qe.value,label:r(o)(`settings.conversationLaunchers.idFormat`)},null,8,[`modelValue`,`onUpdate:modelValue`,`control-id`,`options`,`label`])]),m(`label`,null,[m(`span`,null,v(r(o)(`settings.conversationLaunchers.appName`)),1),i(m(`input`,{"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].appName=t,type:`text`,maxlength:`64`,required:``},null,8,ke),[[y,I.value.conversationLaunchers[e].appName,void 0,{trim:!0}]])]),m(`label`,Ae,[m(`span`,null,[re(v(r(o)(`settings.conversationLaunchers.urlTemplate`))+` `,1),t[1]||=m(`small`,null,[m(`code`,null,`{id}`)],-1)]),i(m(`input`,{"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].urlTemplate=t,type:`text`,maxlength:`1024`,spellcheck:`false`,required:``},null,8,je),[[y,I.value.conversationLaunchers[e].urlTemplate,void 0,{trim:!0}]])])])):u(``,!0)]))),128))])]),m(`section`,Me,[m(`h3`,null,v(r(o)(`settings.behavior.title`)),1),m(`div`,Ne,[m(`label`,Pe,[m(`span`,null,[m(`strong`,null,v(r(o)(`settings.behavior.capture`)),1),m(`small`,null,v(r(o)(`settings.behavior.captureMeta`)),1)]),m(`input`,{type:`checkbox`,role:`switch`,checked:Je.value,onChange:et},null,40,Fe)]),m(`label`,Ie,[m(`span`,null,[m(`strong`,null,v(r(o)(`settings.behavior.agentAccess`)),1),m(`small`,null,v(r(o)(`settings.behavior.agentAccessMeta`)),1)]),m(`input`,{type:`checkbox`,role:`switch`,checked:Ye.value,onChange:tt},null,40,Le)]),m(`label`,Re,[m(`span`,null,[m(`strong`,null,v(r(o)(`settings.behavior.lanAccess`)),1),m(`small`,null,v(r(o)(`settings.behavior.lanAccessMeta`)),1)]),i(m(`input`,{"onUpdate:modelValue":t[0]||=e=>I.value.lanAccess=e,type:`checkbox`,role:`switch`},null,512),[[_,I.value.lanAccess]])]),m(`div`,ze,[m(`span`,null,[m(`strong`,null,v(r(o)(`settings.behavior.language`)),1)]),s(S,{class:`settings-select`,"control-id":`settings-language`,"model-value":G.value,options:Ge.value,label:r(o)(`settings.behavior.language`),"onUpdate:modelValue":nt},null,8,[`model-value`,`options`,`label`])]),m(`div`,Be,[m(`span`,null,[m(`strong`,null,v(r(o)(`settings.resources.refresh`)),1)]),s(S,{class:`settings-select`,"control-id":`settings-refresh-interval`,"model-value":String(I.value.resourceRefreshSeconds),options:Ke.value,label:r(o)(`settings.resources.refresh`),"onUpdate:modelValue":rt},null,8,[`model-value`,`options`,`label`])])])]),V.value?(p(),a(`p`,Ve,v(V.value),1)):u(``,!0)],32)):R.value?u(``,!0):(p(),a(`p`,He,v(V.value||r(o)(`settings.loadError`)),1))])],8,ce))}}),[[`__scopeId`,`data-v-951d162b`]]);export{F as default};
@@ -0,0 +1 @@
1
+ .settings-view[data-v-951d162b]{background:#f7f8f6;padding-top:24px}.settings-content[data-v-951d162b]{gap:18px;width:min(1120px,100%);margin:0 auto;display:grid}.settings-form[data-v-951d162b]{gap:18px;display:grid}.settings-card[data-v-951d162b]{background:#fff;border:1px solid #d7ddd8;border-radius:12px;padding:26px;box-shadow:0 8px 30px #2b3b320a}.section-heading[data-v-951d162b]{justify-content:space-between;align-items:center;gap:18px;margin-bottom:22px;display:flex}.settings-card h3[data-v-951d162b]{color:#2e3c34;font-size:19px}.section-heading p[data-v-951d162b]{color:#879089;margin-top:5px;font-size:11px}.resource-totals[data-v-951d162b]{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.resource-totals article[data-v-951d162b]{background:#f7f9f7;border:1px solid #dce2dd;border-radius:10px;align-content:center;gap:7px;min-height:126px;padding:20px 22px;display:grid}.resource-totals span[data-v-951d162b]{color:#667169;font-size:12px}.resource-totals strong[data-v-951d162b]{color:#24332a;letter-spacing:-.04em;font-size:clamp(25px,3vw,34px)}.resource-totals small[data-v-951d162b]{color:#8a938d;font-size:11px}.resource-breakdowns[data-v-951d162b]{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px;margin-top:26px;display:grid}.resource-group[data-v-951d162b]{gap:13px;display:grid}.resource-group h4[data-v-951d162b],.port-section h4[data-v-951d162b]{color:#536058;font-size:12px}.resource-row[data-v-951d162b]{gap:6px;display:grid}.resource-row>div[data-v-951d162b]{color:#67736b;justify-content:space-between;gap:12px;font-size:11px;display:flex}.resource-row strong[data-v-951d162b]{color:#36443b;font-weight:650}.resource-row i[data-v-951d162b]{background:#eef1ee;border-radius:999px;height:5px;overflow:hidden}.resource-row b[data-v-951d162b]{border-radius:inherit;background:#6f8f79;height:100%;display:block}.resource-group:last-child .resource-row b[data-v-951d162b]{background:#82958a}.resource-notes[data-v-951d162b]{color:#8a938d;flex-wrap:wrap;gap:8px 18px;margin-top:22px;font-size:10px;display:flex}.settings-skeleton[data-v-951d162b]{background:#f2f4f2;border-radius:9px;height:260px}.restart-chip[data-v-951d162b]{color:#8d5a18;background:#fff8ec;border:1px solid #d7aa68;border-radius:999px;padding:5px 9px;font-size:10px;font-weight:700}.port-section[data-v-951d162b]{gap:13px;display:grid}.port-section+.port-section[data-v-951d162b]{border-top:1px solid #edf0ed;margin-top:25px;padding-top:22px}.development-section>div[data-v-951d162b]{align-items:center;gap:9px;display:flex}.development-section>div>span[data-v-951d162b]{color:#78633a;background:#f6f0e4;border-radius:999px;padding:4px 8px;font-size:9px;font-weight:700}.development-section>p[data-v-951d162b]{color:#8b948e;font-size:10px}.port-grid[data-v-951d162b]{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.port-grid label[data-v-951d162b]{color:#59655e;gap:7px;font-size:11px;display:grid}.port-grid input[data-v-951d162b],.select-row[data-v-951d162b] .settings-select .searchable-select-trigger{color:#2f3d34;width:100%;min-height:40px;font:inherit;background:#fbfcfb;border:1px solid #ccd4ce;border-radius:8px;outline:none;padding:0 11px}.port-grid input[data-v-951d162b]:focus,.select-row[data-v-951d162b] .settings-select .searchable-select-trigger:focus-visible{border-color:#6f8f79;box-shadow:0 0 0 3px #6f8f791f}.port-grid small[data-v-951d162b]{color:#9aa29d;font-size:9px}.behavior-card>h3[data-v-951d162b],.conversation-launcher-card>h3[data-v-951d162b]{margin-bottom:14px}.conversation-launcher-list[data-v-951d162b]{display:grid}.conversation-launcher-row[data-v-951d162b]{border-top:1px solid #edf0ed;padding:16px 0}.conversation-launcher-row[data-v-951d162b]:first-child{border-top:0}.conversation-launcher-heading[data-v-951d162b]{justify-content:space-between;align-items:center;gap:20px;min-height:34px;display:flex}.conversation-launcher-heading>span[data-v-951d162b]{gap:4px;display:grid}.conversation-launcher-heading strong[data-v-951d162b]{color:#354239;font-size:12px}.conversation-launcher-heading small[data-v-951d162b]{color:#8b948e;font-size:9px}.conversation-launcher-switch[data-v-951d162b]{color:#667169;align-items:center;gap:9px;font-size:10px;display:flex}.conversation-launcher-switch input[role=switch][data-v-951d162b]{margin:0}.conversation-launcher-note[data-v-951d162b]{color:#8b948e;max-width:760px;margin-top:9px;font-size:9px;line-height:1.45;display:block}.conversation-launcher-fields[data-v-951d162b]{grid-template-columns:minmax(150px,.7fr) minmax(160px,.8fr) minmax(280px,1.5fr);align-items:start;gap:12px;margin-top:14px;display:grid}.conversation-launcher-fields>label[data-v-951d162b]{color:#59655e;grid-template-rows:18px 40px;align-content:start;gap:7px;min-width:0;font-size:10px;display:grid}.conversation-launcher-fields>label>span[data-v-951d162b]{text-overflow:ellipsis;white-space:nowrap;min-width:0;line-height:18px;display:block;overflow:hidden}.conversation-launcher-fields code[data-v-951d162b]{color:#7b857e;font-size:9px}.conversation-launcher-fields[data-v-951d162b] .launcher-select{width:100%;min-width:0;height:40px}.conversation-launcher-fields input[data-v-951d162b],.conversation-launcher-fields[data-v-951d162b] .launcher-select .searchable-select-trigger{box-sizing:border-box;color:#2f3d34;width:100%;height:40px;min-height:40px;font:inherit;background:#fbfcfb;border:1px solid #ccd4ce;border-radius:8px;outline:none;padding:0 11px;line-height:1.2}.conversation-launcher-fields input[data-v-951d162b]:focus,.conversation-launcher-fields[data-v-951d162b] .launcher-select .searchable-select-trigger:focus-visible{border-color:#6f8f79;box-shadow:0 0 0 3px #6f8f791f}.conversation-launcher-fields[data-v-951d162b] .launcher-select .searchable-select-current{align-items:center}.conversation-launcher-fields[data-v-951d162b] .launcher-select .searchable-select-current-label{font-weight:500}.conversation-launcher-fields[data-v-951d162b] .launcher-select .searchable-select-panel{width:100%;min-width:0}.setting-list[data-v-951d162b]{display:grid}.setting-row[data-v-951d162b]{cursor:pointer;border-top:1px solid #edf0ed;justify-content:space-between;align-items:center;gap:24px;min-height:64px;display:flex}.setting-row[data-v-951d162b]:first-child{border-top:0}.setting-row>span[data-v-951d162b]{gap:4px;display:grid}.setting-row strong[data-v-951d162b]{color:#354239;font-size:12px}.setting-row small[data-v-951d162b]{color:#8b948e;font-size:10px}.setting-row input[role=switch][data-v-951d162b],.conversation-launcher-switch input[role=switch][data-v-951d162b]{appearance:none;cursor:pointer;background:#cbd2cd;border-radius:999px;width:38px;height:21px;transition:background .18s;position:relative}.setting-row input[role=switch][data-v-951d162b]:after,.conversation-launcher-switch input[role=switch][data-v-951d162b]:after{content:"";background:#fff;border-radius:50%;width:17px;height:17px;transition:transform .18s;position:absolute;top:50%;left:2px;transform:translateY(-50%);box-shadow:0 0 4px #0000002e}.setting-row input[role=switch][data-v-951d162b]:checked,.conversation-launcher-switch input[role=switch][data-v-951d162b]:checked{background:#688b73}.setting-row input[role=switch][data-v-951d162b]:checked:after,.conversation-launcher-switch input[role=switch][data-v-951d162b]:checked:after{transform:translate(17px,-50%)}.select-row .settings-select[data-v-951d162b]{width:180px;min-width:0}.select-row[data-v-951d162b] .settings-select .searchable-select-trigger{background:#fbfcfb;border-radius:8px;padding:0 14px 0 11px}.select-row[data-v-951d162b] .settings-select .searchable-select-current{align-items:center}.select-row[data-v-951d162b] .settings-select .searchable-select-current-label{font-weight:500}.select-row[data-v-951d162b] .settings-select .searchable-select-arrow{border-width:1.5px;width:8px;height:8px;margin-right:1px}.select-row[data-v-951d162b] .settings-select .searchable-select-panel{width:100%;min-width:0}.settings-top-status[data-v-951d162b]{color:#7d8780;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:0 4px 2px;font-size:10px;display:flex}.settings-top-status strong[data-v-951d162b]{color:#477356;font-weight:700}.settings-error[data-v-951d162b]{color:#8c3934;background:#fff2f0;border-radius:8px;padding:11px 13px;font-size:11px}@media (width<=900px){.port-grid[data-v-951d162b],.conversation-launcher-fields[data-v-951d162b]{grid-template-columns:repeat(2,minmax(0,1fr))}.conversation-launcher-template[data-v-951d162b]{grid-column:1/-1}}@media (width<=680px){.settings-card[data-v-951d162b]{padding:20px}.resource-totals[data-v-951d162b],.resource-breakdowns[data-v-951d162b],.port-grid[data-v-951d162b],.conversation-launcher-fields[data-v-951d162b]{grid-template-columns:1fr}.conversation-launcher-template[data-v-951d162b]{grid-column:auto}.select-row[data-v-951d162b]{flex-direction:column;align-items:flex-start;padding:14px 0}.select-row .settings-select[data-v-951d162b]{width:100%}}
@@ -0,0 +1 @@
1
+ import{$ as e,F as t,L as n,Q as r,_ as i,a,b as o,f as s,g as c,h as l,j as u,k as d,m as f,p,q as m,tt as h,x as g,y as _}from"./i18n-CWfd8Dtt.js";import{r as v,t as ee}from"./console-DMvHxKf9.js";import{t as y}from"./vue-router-DN8x6iY1.js";import{t as b}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{a as x,i as S,n as te,t as ne}from"./KnowledgeEditDialog-wotVahvr.js";import{u as re,x as ie}from"./model-CsYAR8O3.js";var ae={class:`view writing-taste-view`},oe={key:1,class:`writing-taste-unavailable`},C={class:`writing-taste-hero__copy`},w={class:`writing-taste-status`},T={class:`writing-taste-hero__score`,"aria-hidden":`true`},E=[`aria-label`],D={"aria-hidden":`true`},O={class:`writing-taste-rules`},k={key:0,class:`writing-taste-rule-list`},A={class:`writing-taste-rule__status`},j={key:0,class:`conflict`},M={class:`writing-taste-rule__body`},N={key:0},P={key:1},F={key:0},I={key:0,class:`writing-taste-rule__actions`},L=[`onClick`],R=[`onClick`],z={key:1,class:`writing-taste-empty`},B={key:0,class:`writing-taste-agent-preview`},V={key:0},H=b(g({__name:`WritingTastePage`,setup(g){let b=ee(),H=m(null),U=m(null),W=m(!1),G=m(null),K=m(null),q=m(!1),J=0,se=S(p(()=>W.value&&!H.value)),Y=p(()=>ie(U.value)),X=p(()=>new Map(Y.value.map(e=>[`${e.itemKind}:${e.id}`,e]))),ce=p(()=>H.value?.status===`active`?a(`writingTaste.page.activeTitle`):H.value?.status===`preview_ready`?a(`writingTaste.page.previewTitle`):a(`writingTaste.page.collectingTitle`)),Z=p(()=>H.value?.status===`active`?a(`writingTaste.page.activeCopy`):H.value?.status===`preview_ready`?a(`writingTaste.page.previewCopy`):a(`writingTaste.page.collectingCopy`));t(()=>b.activePersonalSpace?.id,e=>{e&&Q(e)},{immediate:!0});async function Q(e=b.activePersonalSpace?.id){if(!e)return;let t=++J;W.value=!0;try{let n=new URLSearchParams({personalSpaceId:e,limit:`500`}),r=new URLSearchParams({spaceId:e,limit:`500`}),[i,a]=await Promise.all([v(`/api/writing-taste-profile?${n}`),v(`/api/graph?${r}`)]);if(t!==J)return;H.value=me(i)?i:null,U.value=he(a)?a:null,pe()}catch(e){if(t!==J)return;H.value=null,U.value=null,b.reportError(e)}finally{t===J&&(W.value=!1)}}function $(e){return X.value.get(`${e.item_kind}:${e.item_id}`)??null}function le(e){G.value=$(e)}function ue(e){K.value=$(e)}function de(e){if(e.preference_scope!==`project`||!e.preference_project_id)return a(`writingTaste.page.globalScope`);let t=b.state?.personalProjects?.find(({project_id:t})=>t===e.preference_project_id);return a(`writingTaste.page.projectScope`,{project:t?.profile.name??e.preference_project_id})}function fe(e){return e.key===`conflicts`?a(`writingTaste.criteria.conflictsProgress`,{current:e.current}):a(`writingTaste.criteria.progress`,{current:e.current,target:e.target})}function pe(){G.value&&=X.value.get(`${G.value.itemKind}:${G.value.id}`)??null,K.value&&=X.value.get(`${K.value.itemKind}:${K.value.id}`)??null}function me(e){if(!e||typeof e!=`object`)return!1;let t=e;return[`collecting`,`preview_ready`,`active`].includes(t.status??``)&&!!t.readiness&&Array.isArray(t.rules)}function he(e){if(!e||typeof e!=`object`)return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.edges)}return(t,p)=>(d(),i(`section`,ae,[o(r(y),{class:`writing-taste-back`,to:`/preferences`},{default:n(()=>[p[5]||=f(`span`,{"aria-hidden":`true`},`←`,-1),_(` `+h(r(a)(`writingTaste.page.back`)),1)]),_:1}),r(se)?(d(),l(x,{key:0,label:r(a)(`writingTaste.page.loading`)},null,8,[`label`])):H.value?(d(),i(s,{key:2},[f(`header`,{class:e([`writing-taste-hero`,`status-${H.value.status}`])},[f(`div`,C,[f(`span`,w,[p[6]||=f(`i`,{"aria-hidden":`true`},null,-1),_(` `+h(r(a)(`writingTaste.status.${H.value.status}`)),1)]),f(`h2`,null,h(ce.value),1),f(`p`,null,h(Z.value),1)]),f(`div`,T,[f(`strong`,null,h(H.value.readiness.rule_count),1),f(`span`,null,`/ `+h(H.value.readiness.thresholds.rule_count),1),f(`small`,null,h(r(a)(`writingTaste.criteria.rules`)),1)])],2),f(`section`,{class:`writing-taste-readiness`,"aria-label":r(a)(`writingTaste.page.readinessAria`)},[(d(!0),i(s,null,u(H.value.readiness.criteria,t=>(d(),i(`article`,{key:t.key,class:e({met:t.met})},[f(`span`,D,h(t.met?`✓`:`·`),1),f(`div`,null,[f(`strong`,null,h(r(a)(`writingTaste.criteria.${t.key}`)),1),f(`small`,null,h(fe(t)),1)])],2))),128))],8,E),f(`section`,O,[f(`header`,null,[f(`h2`,null,h(r(a)(`writingTaste.page.rulesTitle`)),1),f(`span`,null,h(H.value.rules.length),1)]),H.value.rules.length?(d(),i(`div`,k,[(d(!0),i(s,null,u(H.value.rules,t=>(d(),i(`article`,{key:`${t.item_kind}:${t.item_id}`,class:e([`writing-taste-rule`,{"has-conflict":t.has_conflict,"is-hypothesis":t.evidence_status===`Working hypothesis`}])},[f(`div`,A,[f(`span`,{class:e(t.evidence_status.replaceAll(` `,`-`).toLowerCase())},h(r(a)(`writingTaste.evidenceStatus.${t.evidence_status}`)),3),f(`span`,null,h(de(t)),1),t.has_conflict?(d(),i(`span`,j,h(r(a)(`writingTaste.page.conflict`)),1)):c(``,!0)]),f(`div`,M,[f(`h3`,null,h(t.title),1),f(`p`,null,h(t.instruction),1),t.reason?(d(),i(`small`,N,h(t.reason),1)):c(``,!0),t.contexts.length?(d(),i(`small`,P,h(r(a)(`writingTaste.page.contexts`,{contexts:t.contexts.join(`、`)})),1)):c(``,!0)]),f(`footer`,null,[f(`div`,null,[f(`span`,null,h(r(a)(`writingTaste.page.evidence`,{evidence:t.evidence_count})),1),f(`span`,null,h(r(a)(`writingTaste.page.sessions`,{sessions:t.session_count})),1),t.updated_at?(d(),i(`span`,F,h(r(a)(`writingTaste.page.updated`,{time:r(re)(t.updated_at)})),1)):c(``,!0)]),$(t)?(d(),i(`div`,I,[f(`button`,{class:`secondary-action`,type:`button`,onClick:e=>ue(t)},h(r(a)(`writingTaste.page.edit`)),9,L),t.evidence_status===`Confirmed`?c(``,!0):(d(),i(`button`,{key:0,class:`primary-action`,type:`button`,onClick:e=>le(t)},h(r(a)(`writingTaste.page.confirm`)),9,R))])):c(``,!0)])],2))),128))])):(d(),i(`div`,z,h(r(a)(`writingTaste.page.rulesEmpty`)),1))]),H.value.ready&&H.value.agent_markdown?(d(),i(`section`,B,[f(`div`,null,[f(`h2`,null,h(r(a)(`writingTaste.page.agentPreviewTitle`)),1),f(`p`,null,h(r(a)(`writingTaste.page.agentPreviewCopy`)),1)]),f(`button`,{class:`secondary-action`,type:`button`,onClick:p[0]||=e=>q.value=!q.value},h(q.value?r(a)(`writingTaste.page.hideAgentPreview`):r(a)(`writingTaste.page.showAgentPreview`)),1),q.value?(d(),i(`pre`,V,h(H.value.agent_markdown),1)):c(``,!0)])):c(``,!0)],64)):(d(),i(`div`,oe,h(r(a)(`writingTaste.page.profileUnavailable`)),1)),o(ne,{item:K.value,"personal-space-id":r(b).activePersonalSpace?.id??``,"personal-project-id":null,projects:r(b).state?.personalProjects??[],"replacement-items":Y.value,onClose:p[1]||=e=>K.value=null,onSaved:p[2]||=e=>Q()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),o(te,{item:G.value,"personal-space-id":r(b).activePersonalSpace?.id??``,"personal-project-id":null,onClose:p[3]||=e=>G.value=null,onSaved:p[4]||=e=>Q()},null,8,[`item`,`personal-space-id`])]))}}),[[`__scopeId`,`data-v-c14a3671`]]);export{H as default};
@@ -0,0 +1 @@
1
+ .writing-taste-view[data-v-c14a3671]{background:#f7f8f6;padding:18px 32px 40px;overflow:auto}.writing-taste-view[data-v-c14a3671]>:not(.vue-dialog){width:min(980px,100%);margin-inline:auto}.writing-taste-back[data-v-c14a3671]{color:#65746b;align-items:center;gap:7px;margin-bottom:14px;font-size:10px;font-weight:700;text-decoration:none;display:inline-flex}.writing-taste-back[data-v-c14a3671]:hover{color:#344b3e}.writing-taste-hero[data-v-c14a3671]{background:#fff;border:1px solid #d7ded9;border-radius:14px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;padding:24px 26px;display:grid;box-shadow:0 12px 32px #2d3d340f}.writing-taste-hero.status-preview_ready[data-v-c14a3671],.writing-taste-hero.status-active[data-v-c14a3671]{border-color:#c9d8ce}.writing-taste-hero__copy[data-v-c14a3671]{gap:7px;display:grid}.writing-taste-status[data-v-c14a3671]{color:#5c7064;background:#e9eeea;border-radius:999px;justify-self:start;align-items:center;gap:6px;padding:3px 8px;font-size:9px;font-weight:800;display:inline-flex}.writing-taste-status i[data-v-c14a3671]{background:#668572;border-radius:50%;width:5px;height:5px}.writing-taste-hero h2[data-v-c14a3671],.writing-taste-hero p[data-v-c14a3671]{margin:0}.writing-taste-hero h2[data-v-c14a3671]{color:#2d3e35;letter-spacing:-.015em;font-size:22px}.writing-taste-hero p[data-v-c14a3671]{color:#6e7972;max-width:680px;font-size:11px;line-height:1.65}.writing-taste-hero__score[data-v-c14a3671]{color:#809087;border-left:1px solid #e0e5e1;grid-template-columns:auto 1fr;align-items:baseline;min-width:104px;padding:14px 16px;display:grid}.writing-taste-hero__score strong[data-v-c14a3671]{color:#3d5b4b;font-size:28px}.writing-taste-hero__score span[data-v-c14a3671]{font-size:12px}.writing-taste-hero__score small[data-v-c14a3671]{grid-column:1/-1;font-size:9px}.writing-taste-readiness[data-v-c14a3671]{grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.writing-taste-readiness article[data-v-c14a3671]{color:#89918c;background:#fbfcfb;border:1px solid #e0e4e1;border-radius:9px;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px;min-width:0;padding:10px;display:grid}.writing-taste-readiness article.met[data-v-c14a3671]{color:#577364;background:#f6f9f7;border-color:#d3ddd7}.writing-taste-readiness article>span[data-v-c14a3671]{background:#ecefed;border-radius:50%;place-items:center;width:18px;height:18px;font-size:10px;font-weight:800;display:grid}.writing-taste-readiness article.met>span[data-v-c14a3671]{color:#fff;background:#6f8c7b}.writing-taste-readiness article div[data-v-c14a3671]{gap:2px;min-width:0;display:grid}.writing-taste-readiness strong[data-v-c14a3671],.writing-taste-readiness small[data-v-c14a3671]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.writing-taste-readiness strong[data-v-c14a3671]{color:#526159;font-size:9px}.writing-taste-readiness small[data-v-c14a3671]{font-size:9px}.writing-taste-rules[data-v-c14a3671]{margin-top:24px}.writing-taste-rules>header[data-v-c14a3671]{align-items:center;gap:8px;padding:0 2px 10px;display:flex}.writing-taste-rules>header h2[data-v-c14a3671]{color:#34433b;margin:0;font-size:15px}.writing-taste-rules>header span[data-v-c14a3671]{color:#6c786f;text-align:center;background:#e5e9e6;border-radius:999px;min-width:20px;padding:2px 6px;font-size:9px;font-weight:800}.writing-taste-rule-list[data-v-c14a3671]{gap:9px;display:grid}.writing-taste-rule[data-v-c14a3671]{background:#fff;border:1px solid #dce2de;border-radius:11px;gap:10px;padding:15px 17px;display:grid}.writing-taste-rule.is-hypothesis[data-v-c14a3671]{background:#fbfbfa}.writing-taste-rule.has-conflict[data-v-c14a3671]{border-color:#d8b9b5}.writing-taste-rule__status[data-v-c14a3671]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.writing-taste-rule__status span[data-v-c14a3671]{color:#68756d;background:#edf0ee;border-radius:999px;padding:2px 7px;font-size:8px;font-weight:800}.writing-taste-rule__status .confirmed[data-v-c14a3671],.writing-taste-rule__status .observed[data-v-c14a3671]{color:#466352;background:#e2ebe5}.writing-taste-rule__status .conflict[data-v-c14a3671]{color:#874a45;background:#f3e3e1}.writing-taste-rule__body[data-v-c14a3671]{gap:5px;display:grid}.writing-taste-rule h3[data-v-c14a3671],.writing-taste-rule p[data-v-c14a3671]{margin:0}.writing-taste-rule h3[data-v-c14a3671]{color:#33443b;font-size:13px}.writing-taste-rule p[data-v-c14a3671]{color:#49574f;font-size:11px;line-height:1.65}.writing-taste-rule__body small[data-v-c14a3671]{color:#818a84;font-size:9px;line-height:1.5}.writing-taste-rule footer[data-v-c14a3671]{border-top:1px solid #edf0ee;justify-content:space-between;align-items:center;gap:14px;padding-top:9px;display:flex}.writing-taste-rule footer>div[data-v-c14a3671]:first-child{color:#89918c;flex-wrap:wrap;gap:10px;font-size:8px;display:flex}.writing-taste-rule__actions[data-v-c14a3671]{gap:7px;display:flex}.writing-taste-rule__actions button[data-v-c14a3671],.writing-taste-agent-preview button[data-v-c14a3671]{padding:6px 10px;font-size:9px}.writing-taste-empty[data-v-c14a3671],.writing-taste-unavailable[data-v-c14a3671]{color:#7d8780;border:1px dashed #d8ded9;border-radius:11px;place-items:center;min-height:180px;font-size:11px;display:grid}.writing-taste-agent-preview[data-v-c14a3671]{background:#f2f5f3;border:1px solid #d8dfda;border-radius:11px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;margin-top:22px;padding:16px 18px;display:grid}.writing-taste-agent-preview h2[data-v-c14a3671],.writing-taste-agent-preview p[data-v-c14a3671]{margin:0}.writing-taste-agent-preview h2[data-v-c14a3671]{color:#3c4d44;font-size:13px}.writing-taste-agent-preview p[data-v-c14a3671]{color:#758078;margin-top:4px;font-size:9px;line-height:1.5}.writing-taste-agent-preview pre[data-v-c14a3671]{color:#dce7df;white-space:pre-wrap;overflow-wrap:anywhere;background:#26372e;border-radius:8px;grid-column:1/-1;max-height:360px;margin:0;padding:14px;font:10px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}@media (width<=980px){.writing-taste-readiness[data-v-c14a3671]{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=680px){.writing-taste-view[data-v-c14a3671]{padding-inline:18px}.writing-taste-hero[data-v-c14a3671]{grid-template-columns:1fr}.writing-taste-hero__score[data-v-c14a3671]{border-top:1px solid #e0e5e1;border-left:0}.writing-taste-readiness[data-v-c14a3671]{grid-template-columns:repeat(2,minmax(0,1fr))}.writing-taste-rule footer[data-v-c14a3671],.writing-taste-agent-preview[data-v-c14a3671]{flex-direction:column;grid-template-columns:1fr;align-items:start}.writing-taste-agent-preview pre[data-v-c14a3671]{grid-column:1}}
@@ -1 +1 @@
1
- import{B as e,C as t,E as n,F as r,G as i,H as a,U as o,V as s,W as c,X as l,Y as u,Z as d,a as f,p,q as m,w as h,z as g}from"./i18n-CDxBs1sz.js";var _=typeof window<`u`,v,y=e=>v=e,b=Symbol();function x(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var S=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof global==`object`&&global.global===global?global:typeof globalThis==`object`?globalThis:{HTMLElement:null};function C(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function w(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){k(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function T(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function E(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var D=typeof navigator==`object`?navigator:{userAgent:``},O=/Macintosh/.test(D.userAgent)&&/AppleWebKit/.test(D.userAgent)&&!/Safari/.test(D.userAgent),k=_?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!O?A:`msSaveOrOpenBlob`in D?j:M:()=>{};function A(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?E(r):T(r.href)?w(e,t,n):(r.target=`_blank`,E(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){E(r)},0))}function j(e,t=`download`,n){if(typeof e==`string`)if(T(e))w(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){E(t)})}else navigator.msSaveOrOpenBlob(C(e,n),t)}function M(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return w(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(S.HTMLElement))||`safari`in S,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||O)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:ee}=Object;function N(){let e=g(!0),t=e.run(()=>m({})),n=[],r=[],i=o({install(e){y(i),i._a=e,e.provide(b,i),e.config.globalProperties.$pinia=i,r.forEach(e=>n.push(e)),r=[]},use(e){return this._a?n.push(e):r.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}var P=()=>{};function F(t,n,r,i=P){t.add(n);let a=()=>{t.delete(n)&&i()};return!r&&e()&&c(a),a}function I(e,...t){e.forEach(e=>{e(...t)})}var L=e=>e(),R=Symbol(),z=Symbol();function B(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!Object.hasOwn(t,n))continue;let r=t[n],i=e[n];x(i)&&x(r)&&Object.hasOwn(e,n)&&!a(r)&&!s(r)?e[n]=B(i,r):e[n]=r}return e}var V=Symbol();function H(e){return!e||typeof e!=`object`||!Object.hasOwn(e,V)}var{assign:U}=Object;function W(e){return!!(a(e)&&e.effect)}function G(e,t,n,r){let{state:i,actions:a,getters:s}=t,c=n.state.value[e],l;function u(){return c||(n.state.value[e]=i?i():{}),U(d(n.state.value[e]),a,Object.keys(s||{}).reduce((t,r)=>(t[r]=o(p(()=>{y(n);let t=n._s.get(e);return s[r].call(t,t)})),t),{}))}return l=K(e,u,t,n,r,!0),l}function K(e,t,o={},c,u,d){let f,p=U({actions:{}},o),m={deep:!0},h,_,v=new Set,b=new Set,x=c.state.value[e];!d&&!x&&(c.state.value[e]={});let S;function C(t){let r;h=_=!1,typeof t==`function`?(t(c.state.value[e]),r={type:`patch function`,storeId:e,events:void 0}):(B(c.state.value[e],t),r={type:`patch object`,payload:t,storeId:e,events:void 0});let i=S=Symbol();n().then(()=>{S===i&&(h=!0)}),_=!0,I(v,r,c.state.value[e])}let w=d?function(){let{state:e}=o,t=e?e():{};this.$patch(e=>{U(e,t)})}:P;function T(){f.stop(),v.clear(),b.clear(),c._s.delete(e)}let E=(t,n=``)=>{if(R in t)return t[z]=n,t;let r=function(){y(c);let n=Array.from(arguments),i=new Set,a=new Set;function o(e){i.add(e)}function s(e){a.add(e)}I(b,{args:n,name:r[z],store:D,after:o,onError:s});let l;try{l=t.apply(this&&this.$id===e?this:D,n)}catch(e){throw I(a,e),e}return l instanceof Promise?l.then(e=>(I(i,e),e)).catch(e=>(I(a,e),Promise.reject(e))):(I(i,l),l)};return r[R]=!0,r[z]=n,r},D=i({_p:c,$id:e,$onAction:F.bind(null,b),$patch:C,$reset:w,$subscribe(t,n={}){if(v.has(t))return P;let i=F(v,t,n.detached,()=>a()),a=f.run(()=>r(()=>c.state.value[e],r=>{(n.flush===`sync`?_:h)&&t({storeId:e,type:`direct`,events:void 0},r)},U({},m,n)));return i},$dispose:T});c._s.set(e,D);let O=(c._a&&c._a.runWithContext||L)(()=>c._e.run(()=>(f=g()).run(()=>t({action:E}))));for(let t in O){let n=O[t];a(n)&&!W(n)||s(n)?d||(x&&H(n)&&(a(n)?n.value=x[t]:B(n,x[t])),c.state.value[e][t]=n):typeof n==`function`&&(O[t]=E(n,t),p.actions[t]=n)}return U(D,O),U(l(D),O),Object.defineProperty(D,"$state",{get:()=>c.state.value[e],set:e=>{C(t=>{U(t,e)})}}),c._p.forEach(e=>{let t=f.run(()=>e({store:D,app:c._a,pinia:c,options:p}));U(D,t)}),x&&d&&o.hydrate&&o.hydrate(D.$state,x),h=!0,_=!0,D}function q(e,n,r){let i,a=typeof n==`function`;i=a?r:n;function o(r,o){let s=t();return r||=s?h(b,null):null,r&&y(r),r=v,r._s.has(e)||(a?K(e,n,i,r):G(e,i,r)),r._s.get(e)}return o.$id=e,o}var J=class extends Error{status;constructor(e,t){super(e),this.name=`ApiError`,this.status=t}};async function Y(e,t){let n=await fetch(e,t);if(!n.ok)throw new J((await n.text()).trim()||f(`common.errors.requestFailed`,{status:n.status}),n.status);return n.json()}function X(e,t){return Y(e,t)}function Z(e,t){return Y(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function Q(e,t){return Y(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function $(e,t){return Y(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function te(e){return Y(e,{method:`DELETE`})}var ne=q(`console`,()=>{let e=u(null),t=m(`idle`),n=m(null),r=p(()=>{let t=e.value;return t?t.personalSpaces.find(({id:e})=>e===t.activePersonalSpaceId)??t.personalSpaces[0]??null:null}),i=p(()=>e.value?.mode===`connected`?`ready`:e.value?.mode===`degraded`?`error`:`disconnected`);async function a(){t.value=`loading`;try{e.value=await X(`/api/state`),t.value=`ready`}catch(e){t.value=`error`,d(e)}}async function o(t){try{let n=await $(`/api/capture-policy`,{enabled:t});e.value&&={...e.value,capturePolicy:n},l(f(t?`console.captureNotices.enabled`:`console.captureNotices.disabled`))}catch(e){d(e)}}async function s(t){try{let n=await $(`/api/agent-access-policy`,{enabled:t});e.value&&={...e.value,agentAccessPolicy:n},l(f(t?`console.agentAccess.enabledNotice`:`console.agentAccess.disabledNotice`))}catch(e){d(e)}}function c(t){return e.value?.capabilities?.[t]===!0}function l(e){n.value={message:e,tone:`success`}}function d(e){n.value={message:e instanceof Error?e.message:f(`common.errors.operationFailed`),tone:`error`}}function h(){n.value=null}return{state:e,runtimeStatus:t,feedback:n,activePersonalSpace:r,publicRuntimeStatus:i,refresh:a,updateCapturePolicy:o,updateAgentAccessPolicy:s,hasCapability:c,notify:l,reportError:d,clearFeedback:h}});export{Z as a,$ as i,te as n,Q as o,X as r,N as s,ne as t};
1
+ import{B as e,C as t,E as n,F as r,G as i,H as a,U as o,V as s,W as c,X as l,Y as u,Z as d,a as f,p,q as m,w as h,z as g}from"./i18n-CWfd8Dtt.js";var _=typeof window<`u`,v,y=e=>v=e,b=Symbol();function x(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var S=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof global==`object`&&global.global===global?global:typeof globalThis==`object`?globalThis:{HTMLElement:null};function C(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function w(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){k(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function T(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function E(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var D=typeof navigator==`object`?navigator:{userAgent:``},O=/Macintosh/.test(D.userAgent)&&/AppleWebKit/.test(D.userAgent)&&!/Safari/.test(D.userAgent),k=_?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!O?A:`msSaveOrOpenBlob`in D?j:M:()=>{};function A(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?E(r):T(r.href)?w(e,t,n):(r.target=`_blank`,E(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){E(r)},0))}function j(e,t=`download`,n){if(typeof e==`string`)if(T(e))w(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){E(t)})}else navigator.msSaveOrOpenBlob(C(e,n),t)}function M(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return w(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(S.HTMLElement))||`safari`in S,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||O)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:ee}=Object;function N(){let e=g(!0),t=e.run(()=>m({})),n=[],r=[],i=o({install(e){y(i),i._a=e,e.provide(b,i),e.config.globalProperties.$pinia=i,r.forEach(e=>n.push(e)),r=[]},use(e){return this._a?n.push(e):r.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}var P=()=>{};function F(t,n,r,i=P){t.add(n);let a=()=>{t.delete(n)&&i()};return!r&&e()&&c(a),a}function I(e,...t){e.forEach(e=>{e(...t)})}var L=e=>e(),R=Symbol(),z=Symbol();function B(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!Object.hasOwn(t,n))continue;let r=t[n],i=e[n];x(i)&&x(r)&&Object.hasOwn(e,n)&&!a(r)&&!s(r)?e[n]=B(i,r):e[n]=r}return e}var V=Symbol();function H(e){return!e||typeof e!=`object`||!Object.hasOwn(e,V)}var{assign:U}=Object;function W(e){return!!(a(e)&&e.effect)}function G(e,t,n,r){let{state:i,actions:a,getters:s}=t,c=n.state.value[e],l;function u(){return c||(n.state.value[e]=i?i():{}),U(d(n.state.value[e]),a,Object.keys(s||{}).reduce((t,r)=>(t[r]=o(p(()=>{y(n);let t=n._s.get(e);return s[r].call(t,t)})),t),{}))}return l=K(e,u,t,n,r,!0),l}function K(e,t,o={},c,u,d){let f,p=U({actions:{}},o),m={deep:!0},h,_,v=new Set,b=new Set,x=c.state.value[e];!d&&!x&&(c.state.value[e]={});let S;function C(t){let r;h=_=!1,typeof t==`function`?(t(c.state.value[e]),r={type:`patch function`,storeId:e,events:void 0}):(B(c.state.value[e],t),r={type:`patch object`,payload:t,storeId:e,events:void 0});let i=S=Symbol();n().then(()=>{S===i&&(h=!0)}),_=!0,I(v,r,c.state.value[e])}let w=d?function(){let{state:e}=o,t=e?e():{};this.$patch(e=>{U(e,t)})}:P;function T(){f.stop(),v.clear(),b.clear(),c._s.delete(e)}let E=(t,n=``)=>{if(R in t)return t[z]=n,t;let r=function(){y(c);let n=Array.from(arguments),i=new Set,a=new Set;function o(e){i.add(e)}function s(e){a.add(e)}I(b,{args:n,name:r[z],store:D,after:o,onError:s});let l;try{l=t.apply(this&&this.$id===e?this:D,n)}catch(e){throw I(a,e),e}return l instanceof Promise?l.then(e=>(I(i,e),e)).catch(e=>(I(a,e),Promise.reject(e))):(I(i,l),l)};return r[R]=!0,r[z]=n,r},D=i({_p:c,$id:e,$onAction:F.bind(null,b),$patch:C,$reset:w,$subscribe(t,n={}){if(v.has(t))return P;let i=F(v,t,n.detached,()=>a()),a=f.run(()=>r(()=>c.state.value[e],r=>{(n.flush===`sync`?_:h)&&t({storeId:e,type:`direct`,events:void 0},r)},U({},m,n)));return i},$dispose:T});c._s.set(e,D);let O=(c._a&&c._a.runWithContext||L)(()=>c._e.run(()=>(f=g()).run(()=>t({action:E}))));for(let t in O){let n=O[t];a(n)&&!W(n)||s(n)?d||(x&&H(n)&&(a(n)?n.value=x[t]:B(n,x[t])),c.state.value[e][t]=n):typeof n==`function`&&(O[t]=E(n,t),p.actions[t]=n)}return U(D,O),U(l(D),O),Object.defineProperty(D,"$state",{get:()=>c.state.value[e],set:e=>{C(t=>{U(t,e)})}}),c._p.forEach(e=>{let t=f.run(()=>e({store:D,app:c._a,pinia:c,options:p}));U(D,t)}),x&&d&&o.hydrate&&o.hydrate(D.$state,x),h=!0,_=!0,D}function q(e,n,r){let i,a=typeof n==`function`;i=a?r:n;function o(r,o){let s=t();return r||=s?h(b,null):null,r&&y(r),r=v,r._s.has(e)||(a?K(e,n,i,r):G(e,i,r)),r._s.get(e)}return o.$id=e,o}var J=class extends Error{status;constructor(e,t){super(e),this.name=`ApiError`,this.status=t}};async function Y(e,t){let n=await fetch(e,t);if(!n.ok)throw new J((await n.text()).trim()||f(`common.errors.requestFailed`,{status:n.status}),n.status);return n.json()}function X(e,t){return Y(e,t)}function Z(e,t){return Y(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function Q(e,t){return Y(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function $(e,t){return Y(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function te(e){return Y(e,{method:`DELETE`})}var ne=q(`console`,()=>{let e=u(null),t=m(`idle`),n=m(null),r=p(()=>{let t=e.value;return t?t.personalSpaces.find(({id:e})=>e===t.activePersonalSpaceId)??t.personalSpaces[0]??null:null}),i=p(()=>e.value?.mode===`connected`?`ready`:e.value?.mode===`degraded`?`error`:`disconnected`);async function a(){t.value=`loading`;try{e.value=await X(`/api/state`),t.value=`ready`}catch(e){t.value=`error`,d(e)}}async function o(t){try{let n=await $(`/api/capture-policy`,{enabled:t});e.value&&={...e.value,capturePolicy:n},l(f(t?`console.captureNotices.enabled`:`console.captureNotices.disabled`))}catch(e){d(e)}}async function s(t){try{let n=await $(`/api/agent-access-policy`,{enabled:t});e.value&&={...e.value,agentAccessPolicy:n},l(f(t?`console.agentAccess.enabledNotice`:`console.agentAccess.disabledNotice`))}catch(e){d(e)}}function c(t){return e.value?.capabilities?.[t]===!0}function l(e){n.value={message:e,tone:`success`}}function d(e){n.value={message:e instanceof Error?e.message:f(`common.errors.operationFailed`),tone:`error`}}function h(){n.value=null}return{state:e,runtimeStatus:t,feedback:n,activePersonalSpace:r,publicRuntimeStatus:i,refresh:a,updateCapturePolicy:o,updateAgentAccessPolicy:s,hasCapability:c,notify:l,reportError:d,clearFeedback:h}});export{Z as a,$ as i,te as n,Q as o,X as r,N as s,ne as t};
@@ -0,0 +1 @@
1
+ import{K as e,Y as t,a as n}from"./i18n-CWfd8Dtt.js";import{r}from"./console-DMvHxKf9.js";var i=[`codex`,`claude_code`,`cursor`,`gemini_cli`,`kiro`,`other`],a={codex:`Codex`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`Other Agent`},o=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,s=/^[^\u0000-\u001f\u007f]{1,512}$/,c=new Set([`about`,`blob`,`data`,`file`,`javascript`]),l={codex:{enabled:!0,idFormat:`uuid`,appName:`Codex`,urlTemplate:`codex://threads/{id}`},claude_code:{enabled:!1,idFormat:`any`,appName:`Claude Code`,urlTemplate:``},cursor:{enabled:!1,idFormat:`any`,appName:`Cursor`,urlTemplate:``},gemini_cli:{enabled:!1,idFormat:`any`,appName:`Gemini CLI`,urlTemplate:``},kiro:{enabled:!1,idFormat:`any`,appName:`Kiro`,urlTemplate:``},other:{enabled:!1,idFormat:`any`,appName:`Other Agent`,urlTemplate:``}};function u(e={}){let t=e.source_application?.trim().toLocaleLowerCase().replaceAll(`-`,`_`).replaceAll(` `,`_`);if(t&&a[t])return t;let n=`${e.source_kind??``} ${e.source_description??``}`.toLocaleLowerCase();return n.includes(`claude`)?`claude_code`:n.includes(`cursor`)?`cursor`:n.includes(`gemini`)?`gemini_cli`:n.includes(`kiro`)?`kiro`:n.includes(`codex`)?`codex`:`other`}function d(e){let t=u(e);return t===`other`?n(`knowledge.domain.actors.otherAgent`):a[t]}function f(e){return a[e]}function p(e={},t=l){if(m(e,t)!==`available`)return null;let n=t[u(e)],r=e.session_id.trim();return n.urlTemplate.replace(`{id}`,encodeURIComponent(r))}function m(e={},t=l){let n=t[u(e)];return n?.enabled?_(e.session_id?.trim()??``,n.idFormat)?v(n.urlTemplate)?`available`:`invalid_template`:`invalid_id`:`disabled`}function h(e={},t=l){let n=t[u(e)];return n?.enabled&&n.appName.trim()?n.appName.trim():null}async function g(e={},t=globalThis.navigator?.clipboard){return!e.session_id||!t?.writeText?!1:(await t.writeText(e.session_id),!0)}function _(e,t){return s.test(e)?t===`any`||o.test(e):!1}function v(e){if(e.split(`{id}`).length!==2||/\s/.test(e))return!1;let t=/^([a-z][a-z0-9+.-]*):/i.exec(e)?.[1]?.toLocaleLowerCase();return!!t&&!c.has(t)}var y=t(w(l)),b=null;function x(){return C(),e(y)}function S(e){y.value=w(e)}function C({force:e=!1}={}){return!e&&b||(b=r(`/api/system/settings`).then(e=>{S(e.configured.conversationLaunchers)}).catch(()=>void 0)),b}function w(e){return Object.fromEntries(i.map(t=>[t,{...l[t],...e?.[t]??{}}]))}export{d as a,p as c,g as i,x as n,f as o,i as r,h as s,S as t};