ltcai 10.2.0 → 10.3.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 (69) hide show
  1. package/README.md +39 -44
  2. package/docs/CHANGELOG.md +48 -0
  3. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  4. package/docs/DEVELOPMENT.md +1 -1
  5. package/docs/MYPY_BACKLOG.md +98 -0
  6. package/docs/ONBOARDING.md +1 -1
  7. package/docs/OPERATIONS.md +1 -1
  8. package/docs/TRUST_MODEL.md +1 -1
  9. package/docs/WHY_LATTICE.md +1 -1
  10. package/docs/kg-schema.md +1 -1
  11. package/lattice_brain/__init__.py +1 -1
  12. package/lattice_brain/graph/_kg_fsutil.py +1 -1
  13. package/lattice_brain/runtime/agent_runtime.py +7 -2
  14. package/lattice_brain/runtime/hooks.py +1 -1
  15. package/lattice_brain/runtime/multi_agent.py +1 -1
  16. package/latticeai/__init__.py +1 -1
  17. package/latticeai/app_factory.py +43 -67
  18. package/latticeai/core/legacy_compatibility.py +1 -1
  19. package/latticeai/core/marketplace.py +1 -1
  20. package/latticeai/core/workspace_os_constants.py +1 -1
  21. package/latticeai/runtime/history_writer.py +138 -0
  22. package/latticeai/services/architecture_readiness.py +1 -1
  23. package/latticeai/services/product_readiness.py +1 -1
  24. package/package.json +4 -2
  25. package/scripts/check_current_release_docs.mjs +1 -1
  26. package/src-tauri/Cargo.lock +1 -1
  27. package/src-tauri/Cargo.toml +1 -1
  28. package/src-tauri/tauri.conf.json +1 -1
  29. package/static/app/asset-manifest.json +37 -37
  30. package/static/app/assets/{Act-CbdGD-2i.js → Act-DrKIGZeJ.js} +1 -1
  31. package/static/app/assets/{AdminConsole-LgCkXpnf.js → AdminConsole-CEV1VefA.js} +1 -1
  32. package/static/app/assets/{Brain-CoPGJI1L.js → Brain-BZSXnwWU.js} +1 -1
  33. package/static/app/assets/{BrainHome-gVnaxSwp.js → BrainHome-CEBd86k6.js} +1 -1
  34. package/static/app/assets/{BrainSignals-ChxAYHtj.js → BrainSignals-O4s6R7av.js} +1 -1
  35. package/static/app/assets/{Capture-DBtgkHZg.js → Capture-AGbOxsg-.js} +1 -1
  36. package/static/app/assets/{CommandPalette-Ovtv5I0Y.js → CommandPalette-CeqBjCn2.js} +1 -1
  37. package/static/app/assets/Library-CXnbNiQW.js +1 -0
  38. package/static/app/assets/{LivingBrain-CNz-6NSd.js → LivingBrain-D9Iei2ZJ.js} +1 -1
  39. package/static/app/assets/{ProductFlow-ePX-Y73J.js → ProductFlow-JlXiDfMM.js} +1 -1
  40. package/static/app/assets/{ReviewCard-C4mpvkwH.js → ReviewCard-QQly2bTV.js} +1 -1
  41. package/static/app/assets/{System-BvWNK1zc.js → System-Bp9ZY4ER.js} +1 -1
  42. package/static/app/assets/{activity-CiauPV_3.js → activity-CxRPOQ2F.js} +1 -1
  43. package/static/app/assets/{bot-Dwct-Q1x.js → bot-1bcsWB2s.js} +1 -1
  44. package/static/app/assets/{brain-BKDW1F0T.js → brain-CxaeKCRM.js} +1 -1
  45. package/static/app/assets/{button-CCB9Kuw7.js → button-ZYFqGan7.js} +1 -1
  46. package/static/app/assets/{circle-pause-DNa8WHC5.js → circle-pause-B5NOIqvk.js} +1 -1
  47. package/static/app/assets/{circle-play-8jmxn5mf.js → circle-play-BiJVFXf7.js} +1 -1
  48. package/static/app/assets/{cpu-mxvF3V1I.js → cpu-Vvq0OKTr.js} +1 -1
  49. package/static/app/assets/{download--SmCcx0p.js → download-SEcXzkx1.js} +1 -1
  50. package/static/app/assets/{folder-open-D4Wy5roo.js → folder-open-Dw1ff_Qa.js} +1 -1
  51. package/static/app/assets/{hard-drive-BwQcSPlS.js → hard-drive-B00fR7_r.js} +1 -1
  52. package/static/app/assets/index-CEkL4_M-.css +2 -0
  53. package/static/app/assets/{index-DDV2YZwM.js → index-Dm9VXl1o.js} +3 -3
  54. package/static/app/assets/{input-DFhSjmLS.js → input-DtdWYQEa.js} +1 -1
  55. package/static/app/assets/{network-Bts7VO94.js → network-CpjBu0kI.js} +1 -1
  56. package/static/app/assets/{primitives-BuSMEJY8.js → primitives-CwsudBwc.js} +1 -1
  57. package/static/app/assets/search-CwEJWBEA.js +1 -0
  58. package/static/app/assets/{shield-alert-BfTO6X_G.js → shield-alert-CpjBc-gQ.js} +1 -1
  59. package/static/app/assets/{textarea-BjctW1oh.js → textarea-DUPyjHQs.js} +1 -1
  60. package/static/app/assets/{useFocusTrap-CE43-LrA.js → useFocusTrap-BWcMtCWH.js} +1 -1
  61. package/static/app/assets/{useQuery-Bv3ejLL5.js → useQuery-Dg5fPqTS.js} +1 -1
  62. package/static/app/assets/{users-CsNqLZAj.js → users-BgcdTQGM.js} +1 -1
  63. package/static/app/assets/{utils-KFFdVG_t.js → utils-a3YXFtEO.js} +1 -1
  64. package/static/app/assets/{workspace-wdCvdyPF.js → workspace-BMUEiXUm.js} +1 -1
  65. package/static/app/index.html +4 -4
  66. package/static/sw.js +1 -1
  67. package/static/app/assets/Library-CBia2Fvm.js +0 -1
  68. package/static/app/assets/index-CQWdDU3z.css +0 -2
  69. package/static/app/assets/search-DZzxhWaQ.js +0 -1
@@ -1 +1 @@
1
- import{S as e,b as t,h as n}from"./utils-KFFdVG_t.js";import{_ as r,c as i,m as a,r as o,u as s,v as c,x as l}from"./useQuery-Bv3ejLL5.js";import{S as u}from"./index-DDV2YZwM.js";var d=class extends l{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),r(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&s(t.mutationKey)!==s(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??u();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){i.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},f=e(t(),1);function p(e,t){let n=o(t),[r]=f.useState(()=>new d(n,e));f.useEffect(()=>{r.setOptions(e)},[r,e]);let s=f.useSyncExternalStore(f.useCallback(e=>r.subscribe(i.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),l=f.useCallback((e,t)=>{r.mutate(e,t).catch(a)},[r]);if(s.error&&c(r.options.throwOnError,[s.error]))throw s.error;return{...s,mutate:l,mutateAsync:s.mutate}}n({ko:{"library.kicker":`AI 모델`,"library.title":`Lattice가 사용할 AI를 선택하세요.`,"library.body":`이 컴퓨터에 맞는 추천 모델부터 시작할 수 있습니다. 모델을 바꿔도 저장된 기억은 그대로 유지됩니다.`,"library.tab.models":`모델`,"library.tab.skills":`스킬`,"library.tab.mcp":`연결`,"library.tab.marketplace":`마켓`,"library.models.setup.title":`모델 고르기`,"library.models.setup.desc":`먼저 가벼운 추천 모델을 안내해 드려요. 인터넷이나 다운로드가 필요한지 알려주고, 모든 다운로드는 동의를 받은 뒤에만 진행합니다.`,"library.models.embedding.basic":`의미로 찾는 검색`,"library.models.validation":`모델 점검`,"library.models.runtime.available":`모델을 사용할 수 있어요`,"library.models.runtime.none":`아직 불러온 모델이 없어요`,"library.runtime.computer":`컴퓨터`,"library.runtime.loaded":`불러온 모델`,"library.runtime.noneShort":`없음`,"library.runtime.reload":`다시 불러오기`,"library.runtime.unload":`내리기`,"library.steps.aria":`모델 준비 진행 상황`,"library.step.environment":`환경 확인`,"library.step.recommend":`추천 모델`,"library.step.install":`설치`,"library.step.download":`내려받기`,"library.step.validate":`점검`,"library.step.ready":`사용 준비`,"library.step.done":`완료`,"library.step.pending":`대기`,"library.consent":`이 작업에 필요한 로컬 모델 구성요소 설치나 모델 파일 다운로드를 허용합니다. 다운로드에만 인터넷을 쓰고, 모델 실행은 이 컴퓨터에서만 이뤄집니다.`,"library.preparing":`모델 준비 중`,"library.panel.recommended.basic":`추천 모델`,"library.panel.recommended.other":`추천 및 고급 모델`,"library.btn.preparing":`준비 중`,"library.btn.installLoad":`설치하고 사용`,"library.btn.validateLoad":`점검하고 사용`,"system.kicker":`설정`,"system.title":`Lattice를 내 방식에 맞게 설정하세요.`,"system.body":`계정, 작업공간, 화면, 개인정보와 백업을 관리할 수 있습니다.`,"system.tab.account":`계정`,"system.tab.workspaces":`작업공간`,"system.tab.snapshots":`스냅샷`,"system.tab.activity":`기록`,"system.tab.network":`기기`,"system.tab.settings":`환경설정`,"system.tab.admin":`관리자`,"system.permission.title":`에이전트 자율성`,"system.permission.hint":`에이전트가 승인 없이 어디까지 실행할지 정합니다. 위험한 작업은 어떤 설정에서도 차단됩니다.`,"system.permission.current":`현재 설정`,"system.permission.apply":`이 설정으로 변경`,"system.permission.ack":`위험을 이해했고 이 설정을 사용하겠습니다.`,"system.permission.guards":`어떤 설정에서도 차단되는 것`,"system.permission.guards.detail":`파괴적 작업, 루트·홈 경로 삭제, rm -rf / 류 명령, 검토할 수 없는 바이너리 덮어쓰기.`,"system.permission.risk.low":`낮음`,"system.permission.risk.medium":`보통`,"system.permission.risk.high":`높음`,"system.network.title":`내 지식이 나가는 범위`,"system.network.hint":`내 Brain은 항상 이 컴퓨터에 있습니다. 클라우드 모델을 쓸 때 관련 있는 최소한의 기억만 내보낼지 정합니다.`,"system.network.current":`현재 설정`,"system.network.apply":`이 설정으로 변경`,"system.network.ack":`무엇이 나가는지 이해했고 클라우드 사용을 허용합니다.`,"system.network.guards":`어떤 설정에서도 나가지 않는 것`,"system.network.guards.detail":`지식 그래프 전체, 파일 원본, 백업 아카이브. 그리고 민감·비공개·공유금지·로컬전용으로 표시된 기억은 클라우드를 허용해도 제외됩니다.`,"system.network.preview.title":`무엇이 나가는지 미리 보기`,"system.network.preview.hint":`실제로 보내기 전에, 이 질문이라면 어떤 기억이 나갈지 확인할 수 있습니다.`,"system.network.preview.placeholder":`확인해 볼 질문을 적어보세요`,"system.network.preview.run":`미리 보기`,"system.network.preview.empty":`이 질문으로 내보낼 기억이 없습니다.`,"system.network.preview.count":`기억 {count}개`,"system.network.preview.tokens":`약 {tokens}토큰`,"system.network.preview.blocked":`이 질문은 사용량 한도에 걸려 전송되지 않습니다`,"system.network.preview.hold":`내보내지 않기`,"system.network.preview.release":`다시 허용`,"system.network.preview.autoHeld":`비밀번호·키가 들어 있는 위치의 파일은 자동으로 제외됩니다.`,"system.network.preview.localOnly":`지금은 로컬만으로 설정돼 있어 아무것도 나가지 않습니다. 아래는 클라우드를 허용했을 때 나갈 내용입니다.`,"system.network.policy.title":`클라우드 답변을 기억에 반영하는 방법`,"system.network.policy.autoCommit":`검토 없이 바로 기억에 저장`,"system.network.policy.autoCommitHint":`꺼두면 클라우드가 찾아낸 내용은 검토 센터에 제안으로 쌓이고, 승인해야 기억이 됩니다.`,"system.network.policy.multimodal":`이미지·영상도 클라우드로 보내기`,"system.network.policy.multimodalHint":`글자만 보내는 것보다 더 많은 것이 나갑니다. 기본은 꺼짐입니다.`,"system.network.budget":`이번 세션 사용량`,"system.panel.appearance":`화면 모양`,"system.panel.appearance.hint":`이 브라우저에서만 적용됩니다.`,"system.panel.detailLevel":`보여줄 내용의 양`,"system.panel.detailLevel.hint":`화면에 얼마나 자세히 보여줄지 정합니다. 화면 색과는 관계없습니다.`,"system.theme.dark":`어둡게`,"system.theme.light":`밝게`,"system.panel.brainStatus":`브레인 상태`,"system.panel.readiness":`컴퓨터 준비 상태`,"system.stat.cpu":`CPU`,"system.stat.memory":`메모리`,"system.stat.gpu":`그래픽 메모리`,"system.stat.localStatus":`상태`,"system.stat.ready":`준비됨`,"system.storage.title":`기억이 저장되는 곳`,"system.storage.local.title":`이 컴퓨터에 저장됨`,"system.storage.local.badge":`비공개`,"system.storage.local.detail":`브레인이 기억하는 모든 것은 이 기기에 저장됩니다. 직접 공유하지 않는 한 아무것도 컴퓨터를 벗어나지 않습니다.`,"system.storage.search.title":`스마트 검색`,"system.storage.search.on":`켜짐`,"system.storage.search.pending":`준비 중`,"system.storage.search.detailOn":`단어가 정확히 일치하지 않아도 의미로 기억을 찾아 줍니다.`,"system.storage.search.detailPending":`첫 기억이 정리되면 스마트 검색이 자동으로 켜집니다.`,"system.health.title":`브레인이 정상 작동 중이에요`,"system.health.ok":`정상`,"system.health.detail":`지금 이 컴퓨터에서 안전하게 실행되고 있어요.`,"capture.tab.files":`파일`,"capture.tab.local":`폴더`,"capture.tab.browser":`웹`,"capture.tab.pipeline":`흐름`,"capture.kicker":`자료`,"capture.title":`어떤 자료를 기억할까요?`,"capture.body":`파일, 폴더, 웹페이지를 추가하면 Lattice가 출처와 함께 기억하고 대화에서 찾아드립니다.`,"capture.retry":`다시 시도`,"capture.files.title":`문서 추가`,"capture.files.description":`파일을 선택하면 Lattice가 검색과 기억에 들어갈 수 있게 준비합니다.`,"capture.files.drop":`파일을 놓거나 문서를 선택`,"capture.files.dropDetail":`넣은 파일은 내용을 읽어 기억에 저장되고, 어디서 온 자료인지도 함께 남습니다. 이후 대화에서 바로 찾아 쓸 수 있어요.`,"capture.files.uploaded":`업로드된 문서`,"capture.files.completed":`기억에 저장된 자료가 여기에 표시됩니다. 관련 주제로 이어지는 데는 잠시 더 걸릴 수 있어요.`,"capture.files.success":`기억에 저장됨`,"capture.files.queued":`저장 준비 중`,"capture.files.uploading":`파싱 후 Memory로 전송 중`,"capture.files.failed":`Brain에 들어가기 전에 수집에 실패했습니다.`,"capture.files.captured":`출처 정보와 함께 저장됨`,"capture.files.capturedWithNode":`출처 정보와 함께 저장됨 · {node}`,"capture.local.title":`폴더 연결`,"capture.local.description":`폴더를 선택하면 Lattice가 바로 스캔해 Brain에 연결합니다.`,"capture.local.placeholder":`이 Mac의 폴더 경로`,"capture.local.choose":`폴더 선택`,"capture.local.choosing":`선택 중`,"capture.local.connect":`스캔하고 연결`,"capture.local.success":`폴더 스캔 요청됨`,"capture.local.pickUnavailable":`폴더 선택 창을 열 수 없습니다. 데스크톱 앱 권한을 확인하거나 경로를 직접 입력해 주세요.`,"capture.local.emptyFolder":`선택한 폴더에서 업로드할 파일을 찾지 못했습니다.`,"capture.folderHealth.title":`폴더별 기억 상태`,"capture.folderHealth.coverage":`{percent}% 기억됨 ({indexed}/{total})`,"capture.folderHealth.unknown":`아직 살펴보지 않았어요`,"capture.folderHealth.watching":`변경되면 자동으로 따라갑니다`,"capture.folderHealth.failed":`들어오지 못한 파일 {count}개`,"capture.folderHealth.vectorGlobal":`전체 색인 기준으로 {count}건이 아직 검색 준비 중입니다 (폴더별 아님)`,"capture.local.browserFolder":`선택한 폴더`,"capture.local.browserImporting":`폴더 파일 업로드 중`,"capture.local.browserImportSuccess":`{folder} 파일을 Brain에 넣었습니다.`,"capture.local.browserImportFailed":`폴더 파일을 Brain에 넣지 못했습니다.`,"capture.local.sources":`연결된 출처`,"capture.local.access":`폴더 접근`,"capture.local.stop":`{source} 감시 중지`,"capture.local.source":`출처`,"capture.browser.title":`웹페이지 저장`,"capture.browser.description":`유용한 내용을 기억할 수 있게 페이지를 수집합니다.`,"capture.browser.placeholder":`https://example.com/article`,"capture.browser.paste":`붙여넣기`,"capture.browser.capture":`스캔하고 저장`,"capture.browser.success":`웹페이지 저장 요청됨`,"capture.pipeline.status":`처리 상태`,"capture.pipeline.growth":`Brain 성장`,"capture.pipeline.refresh":`기억 새로고침`,"capture.pipeline.description":`수집한 자료를 Lattice가 다시 확인해야 할 때 검색을 새로고침합니다.`,"capture.pipeline.rebuild":`검색 인덱스 다시 만들기`,"review.inbox.title":`검토함`,"review.inbox.description":`결정 대기 중인 자동화 제안입니다. 지금 실행은 승인 없이 미리보기만 수행합니다.`,"review.status.connected":`연결됨`,"review.status.unavailable":`사용 불가`,"review.inbox.loadError":`검토함을 불러올 수 없습니다.`,"review.inbox.unavailable":`지금은 검토 대기열을 사용할 수 없습니다.`,"review.inbox.empty":`검토할 항목 없음`,"review.inbox.emptySnoozed":`일시 중지된 항목은 해제되거나 다시 대기 상태가 될 때까지 여기에 표시됩니다.`,"review.inbox.emptyPending":`자동화가 검토 대기열을 사용하면 새 제안이 여기에 표시됩니다.`,"review.snoozed.detail":`해당 시점까지 대기열에서 빠져 있습니다. 일시 중지 해제 시 즉시 돌아옵니다.`,"review.unsnooze":`일시 중지 해제`,"review.runNow.detail":`지금 실행은 승인 없이 작업을 미리봅니다. 결과가 맞으면 승인하거나 기각하세요.`,"review.chat.detail":`Brain 대화에서 저장한 작업 초안입니다. 실제 후속 작업으로 남길 항목은 승인하고, 필요 없으면 기각하세요.`,"review.agent.detail":`Agent가 실행 결과에서 뽑은 후속 작업 후보입니다. 실제 작업으로 남길 항목은 승인하고, 필요 없으면 기각하세요.`,"review.actions.aria":`검토 작업`,"review.runNow":`지금 실행`,"review.regenerated":`다시 생성됨`,"review.executed":`실행됨`,"review.approve":`승인`,"review.snoozeDay":`하루 일시 중지`,"review.dismiss":`기각`,"review.feedback.open":`승인 또는 기각 전까지 항목은 열린 상태로 유지됩니다.`,"review.action.failed":`{action} 실패`,"review.filter.status.pending":`대기`,"review.filter.status.snoozed":`일시 중지`,"review.filter.status.all":`전체`,"review.filter.status.approved":`승인됨`,"review.filter.status.dismissed":`기각됨`,"review.filter.source.all":`전체 출처`,"review.filter.source.workflow_run":`워크플로`,"review.filter.source.trigger":`트리거`,"review.filter.source.kg_change_digest":`지식 요약`,"review.filter.source.chat_followup":`Brain 대화`,"review.filter.source.agent_followup":`Agent 후속 작업`,"review.filter.source.change_proposal":`변경 제안`,"review.proposal.detail":`Agent가 기존 파일을 바꾸려는 변경 제안입니다. 승인하면 검토한 내용 그대로 적용되고, 거절하면 아무것도 바뀌지 않습니다.`,"review.proposal.badge":`변경 제안 {count}건 대기`,"review.proposal.rejectReason":`거절 사유 (선택)`,"review.source.workflow_run":`워크플로 실행`,"review.source.trigger":`트리거`,"review.source.kg_change_digest":`지식 요약`,"review.source.chat_followup":`Brain 대화`,"review.source.agent_followup":`Agent 후속 작업`,"review.source.change_proposal":`변경 제안`,"review.source.automation":`자동화`,"review.itemStatus.pending":`검토 대기`,"review.itemStatus.snoozed":`일시 중지`,"review.itemStatus.approved":`승인됨`,"review.itemStatus.dismissed":`기각됨`,"review.snoozed.badge":`일시 중지됨`,"review.snoozed.until":`{value}까지 일시 중지`,"review.summary.tool":`사용 도구`,"review.summary.proposedBy":`제안한 주체`,"review.risk.read":`안전한 읽기`,"review.risk.write":`파일을 수정함`,"review.risk.write_scoped":`작업 폴더 안에서만 수정`,"review.risk.exec":`명령을 실행함`,"review.risk.destructive":`내용을 지울 수 있음`,"review.change.read":`읽기만 함`,"review.change.additive":`새 내용 추가`,"review.change.mutation":`기존 내용 수정`,"review.change.destructive":`내용 삭제`,"review.change.exec":`동작 실행`,"review.technical.title":`기술 정보`,"review.feedback.error":`요청을 처리하지 못했어요. 잠시 후 다시 시도해 주세요.`,"proposals.diff.header":`제안된 변경`,"proposals.diff.more":`{count}줄 더 있음`,"proposals.error":`변경 제안을 불러오지 못했어요. 로컬 Lattice 서비스가 실행 중인지 확인해 주세요.`,"common.retry":`다시 시도`,"common.error.unknown":`알 수 없는 문제가 생겼어요. 잠시 후 다시 시도해 주세요.`,"api.error.timeout":`응답이 너무 오래 걸려 요청을 멈췄어요. 로컬 Lattice 서비스가 실행 중인지 확인해 주세요.`,"api.error.unreachable":`로컬 Lattice 서비스에 연결할 수 없어요. 앱이 실행 중인지 확인해 주세요.`,"api.error.request":`요청을 처리하지 못했어요. (오류 {status})`,"intelligence.loadError":`지금은 브레인 상태를 불러올 수 없어요. 잠시 후 다시 시도해 주세요.`,"act.kicker":`작업`,"act.title":`Lattice에 맡길 일을 적어주세요.`,"act.copy":`목표와 완료 조건을 알려주면 진행 과정을 보여드리고, 중요한 변경은 실행 전에 확인받습니다.`,"act.goal.title":`새 작업`,"act.goal.description":`원하는 결과와 완료 조건을 자연스럽게 적어주세요.`,"act.goal.placeholder":`예: 이번 주 회의 자료를 읽고 결정 사항과 담당자별 할 일을 정리해줘`,"act.goal.start":`작업 시작`,"act.goal.needsModel":`AI 모델 준비하기`,"act.goal.modelRequired":`작업을 시작하려면 먼저 AI 모델을 준비해 주세요.`,"act.goal.safety":`중요한 변경은 실행하기 전에 항상 확인받습니다.`,"act.goal.completed":`Agent run 완료 — 결과가 Brain 기억과 그래프에 합성됨`,"act.goal.brainSaved":`Brain에 합성 메모리가 추가되었습니다.`,"act.tab.goals":`목표`,"act.tab.runs":`실행`,"act.tab.review":`검토함`,"act.tab.recipes":`레시피`,"act.suggest.title":`나를 위한 자동화 제안`,"act.suggest.subtitle":`자주 하는 질문과 연결된 폴더를 보고 Brain이 자동화를 제안합니다.`,"act.suggest.empty":`아직 제안이 없습니다. 질문을 하고 폴더를 연결할수록 제안이 생깁니다.`,"act.suggest.scanned":`최근 질문 {count}개 분석`,"act.suggest.question":`반복 질문`,"act.suggest.folder":`연결된 폴더`,"act.suggest.evidence.count":`{count}번 반복해서 물어보셨어요`,"act.suggest.evidence.folder":`파일 {count}개가 Brain에 담긴 폴더예요`,"act.suggest.cadence.daily":`매일 자동 초안`,"act.suggest.cadence.newKnowledge":`새 지식이 들어올 때`,"act.suggest.install":`자동화 만들기`,"act.suggest.installing":`만드는 중...`,"act.suggest.installed":`초안 생성됨 — 검토 후 켜세요`,"act.suggest.note":`제안을 수락하면 꺼진 초안으로 만들어지고, 검토 후 직접 켤 때만 실행됩니다.`,"act.automation.title":`기억 기반 자동화`,"act.automation.local":`로컬에서만 실행`,"act.automation.consent":`초안 확인 후 활성화`,"act.automation.create":`검토 가능한 자동화 초안 만들기`,"act.automation.creating":`초안 만드는 중...`,"act.automation.created":`✓ 자동화 초안 생성됨`,"act.automation.enable":`이 기억 자동화 활성화`,"act.automation.enabling":`자동화 연결 중...`,"act.automation.active":`✓ 기억 자동화 작동 중`,"act.automation.draftReady":`초안이 준비됐습니다. 내용을 확인한 뒤 활성화하세요.`,"act.automation.enableHint":`초안이 안전하게 꺼진 상태입니다. 선택하면 Brain 이벤트에 연결됩니다.`,"act.automation.activeHint":`새 기억이 들어오면 결과를 검토함에 초안으로 만듭니다.`,"act.installed.title":`설치된 자동화`,"act.installed.subtitle":`설치한 자동화를 바로 시험해 보고, 마지막 실행 결과를 확인하세요.`,"act.installed.empty":`아직 설치된 자동화가 없습니다. 위의 제안이나 레시피로 만들어 보세요.`,"act.installed.runNow":`지금 한 번 실행`,"act.installed.dryRunning":`모의 실행 중...`,"act.installed.runLive":`실제로 한 번 실행`,"act.installed.liveRunning":`실행 중...`,"act.installed.dryRunHint":`먼저 부작용 없는 모의 실행으로 무엇이 실행될지 보여드리고, 그다음에 실제 실행을 열어드립니다.`,"act.installed.lastRun":`마지막 실행`,"act.installed.noRuns":`아직 실행 기록이 없습니다`,"act.installed.mode.dry":`모의`,"act.installed.mode.live":`실제`,"act.installed.failedReview":`실행이 실패해 검토함에 추가했습니다.`,"act.installed.onBadge":`켜짐`,"act.installed.draftBadge":`초안(꺼짐)`,"act.tab.safeguards":`보호 장치`,"act.tab.permissions":`권한`,"act.tab.hooks":`훅`,"act.tab.tools":`도구`,"admin.back":`Brain`,"admin.aria.console":`Lattice 관리자`,"admin.kicker":`분리된 관리자 작업공간`,"admin.title":`Admin Console`,"admin.body":`사용자, 로그, 보안, Brain 상태는 일반 사용자 화면과 분리됩니다.`,"admin.overview":`관리 개요`,"admin.metric.users":`사용자`,"admin.metric.logs":`최근 로그`,"admin.metric.security":`보안`,"admin.metric.index":`Brain 인덱스`,"admin.status.ready":`준비됨`,"admin.status.unavailable":`사용 불가`,"admin.status.indexed":`인덱싱됨`,"admin.status.unknown":`알 수 없음`,"admin.panel.users":`사용자 디렉터리`,"admin.panel.people":`사람`,"admin.panel.roles":`역할 권한`,"admin.panel.access":`접근`,"admin.panel.logs":`활동 로그`,"admin.panel.audit":`감사`,"admin.panel.securityEvents":`보안 이벤트`,"admin.panel.protection":`보호`,"admin.panel.brainOps":`Brain 운영`,"admin.panel.maintenance":`유지보수`,"admin.panel.runtimeTrust":`런타임 신뢰도`,"admin.panel.contracts":`계약`,"admin.empty.users":`관리 API가 보고한 사용자가 없습니다.`,"admin.empty.roles":`보고된 역할 매트릭스가 없습니다.`,"admin.empty.audit":`최근 감사 이벤트가 없습니다.`,"admin.empty.security":`보고된 보안 이벤트가 없습니다.`,"admin.fallback.localUser":`로컬 사용자`,"admin.fallback.member":`멤버`,"admin.fallback.role":`역할`,"admin.fallback.noCaps":`권한 없음`,"admin.filters.label":`감사 로그 필터`,"admin.filters.search":`로그 검색`,"admin.filters.searchAria":`감사 로그 검색`,"admin.filters.severityAria":`심각도별 필터`,"admin.filters.all":`모든 심각도`,"admin.filters.informational":`정보`,"admin.filters.notice":`알림`,"admin.filters.warning":`경고`,"admin.filters.high":`높음`,"admin.filters.matched":`{count}개 일치`,"admin.brain.summaryFallback":`로컬 Brain 서비스는 사용자 대화와 분리되어 있습니다.`,"admin.brain.rebuilding":`재구성 중`,"admin.brain.rebuild":`인덱스 재구성`,"admin.runtime.agent":`AgentRuntime`,"admin.runtime.tools":`ToolRegistry`,"admin.runtime.readyDetail":`실행 preview와 실제 실행이 준비되었습니다.`,"admin.runtime.blockedFallback":`실행 전 preview가 차단 사유를 반환합니다.`,"admin.runtime.aligned":`정렬됨`,"admin.runtime.drift":`점검 필요`,"admin.runtime.toolCounts":`등록 {registered} · 정책 {governed} · 설명 {described}`,"admin.runtime.mode":`mode {mode}`,"admin.runtime.execution":`exec {mode}`,"admin.runtime.health":`health {status}`,"admin.policy.fallback":`정책`,"admin.policy.quiet":`정책 API 대기 중`,"admin.retention.days":`{days}일 보관`,"admin.retention.detail":`{events}개 보관 · {candidates}개 내보내기/정리 검토 가능`,"admin.log.event":`이벤트`,"admin.log.system":`시스템`,"admin.log.recently":`최근`,"admin.source.loading":`불러오는 중`,"admin.source.live":`라이브`,"admin.index.ready":`인덱스 상태 준비됨`,"act.panel.readiness":`준비 상태`,"act.panel.agentTeam":`Agent 팀`,"act.agentRole.researcher":`조사 담당`,"act.agentRole.researcher.detail":`목표에 필요한 자료와 기억, 연결을 먼저 모읍니다.`,"act.agentRole.planner":`계획 담당`,"act.agentRole.planner.detail":`목표를 순서가 있는, 검토 가능한 단계로 나눕니다.`,"act.agentRole.executor":`실행 담당`,"act.agentRole.executor.detail":`계획된 각 단계를 도구와 워크플로로 실행합니다.`,"act.agentRole.reviewer":`검토 담당`,"act.agentRole.reviewer.detail":`실행 결과를 검토해 승인·반려·재시도를 정합니다.`,"act.agentRole.release":`마무리 담당`,"act.agentRole.release.detail":`결과를 정리하고 최종 요약을 남깁니다.`,"act.agent.namePlaceholder":`새 사용자 Agent 이름`,"act.panel.capabilities":`Agent가 할 수 있는 일`,"act.recipe.daily-memory-digest":`오늘의 기억 정리`,"act.recipe.daily-memory-digest.summary":`오늘 새로 쌓인 기억을 짧은 검토 초안으로 모읍니다.`,"act.recipe.daily-memory-digest.value":`대화를 뒤지지 않아도 Brain이 오늘 무엇을 기억했는지 알 수 있어요.`,"act.recipe.weekly-project-review":`주간 프로젝트 점검`,"act.recipe.weekly-project-review.summary":`프로젝트 맥락을 주간 점검 초안으로 정리합니다.`,"act.recipe.weekly-project-review.value":`한 주를 다시 설명하지 않고도 프로젝트를 이어갈 수 있어요.`,"act.recipe.follow-up-radar":`후속 작업 살피기`,"act.recipe.follow-up-radar.summary":`새 기억이 저장될 때 이어서 할 일이 있는지 찾습니다.`,"act.recipe.follow-up-radar.value":`약속한 일을 잊지 않도록 Brain이 먼저 짚어 줍니다.`,"act.cadence.daily":`매일`,"act.cadence.weekly":`매주`,"act.cadence.when new memory is saved":`새 기억이 저장될 때`,"act.creates.memory digest":`기억 요약`,"act.creates.decision summary":`결정 요약`,"act.creates.next-action suggestions":`다음 행동 제안`,"act.creates.project checkpoint":`프로젝트 점검`,"act.creates.risk list":`위험 목록`,"act.creates.open-question list":`미해결 질문 목록`,"act.creates.follow-up suggestions":`후속 작업 제안`,"act.panel.agentRuns":`Agent 실행`,"act.panel.workflowRuns":`워크플로 실행`,"act.panel.approvalInbox":`승인함`,"act.workflow.graph":`워크플로 그래프`,"act.workflow.graphDetail":`저장된 워크플로를 간단한 지도로 확인합니다.`,"act.panel.definitions":`정의`,"act.workflow.namePlaceholder":`워크플로 이름`,"act.workflow.importPlaceholder":`워크플로 내보내기 내용을 붙여넣으세요`,"act.workflow.created":`워크플로를 만들었습니다`,"act.workflow.imported":`워크플로를 가져왔습니다`,"act.panel.triggers":`자동화 트리거`,"act.panel.safeguards":`보호 장치`,"act.hooks.detailed":`상세 훅 로그`,"act.hooks.detailedHint":`훅 실행 로그와 수동 진단 제어가 필요하면 고급 모드로 전환하세요.`,"act.panel.hooks":`훅`,"act.panel.hookRuns":`훅 실행 로그`,"act.hooks.runManual":`수동 훅 실행`,"act.hooks.runManualHint":`훅을 명시적으로 실행하고 기록된 결과를 검토합니다.`,"act.panel.permissions":`작업 권한`,"library.model.hfVerified":`Hugging Face 검증 완료(설정과 토크나이저 확인)`,"library.model.shortListHint":`가장 안전한 후보만 표시합니다. 전체 레지스트리, 런타임 세부 정보, 라이선스와 안전 참고 사항은 고급 모드에서 확인하세요.`,"library.model.noneChecked":`아직 점검한 모델이 없습니다`,"library.model.noneCheckedHint":`사용하기 전에 모델을 불러와 응답 가능 여부를 확인하세요.`,"library.skills.installed":`설치된 스킬`,"library.skills.marketplace":`스킬 마켓`,"library.connector.recommend":`연결 추천`,"library.connector.recommendHint":`연결하려는 대상을 설명하면 Lattice가 적합한 연결을 추천합니다.`,"library.connector.recommendDone":`연결 추천을 완료했습니다`,"library.market.templates":`템플릿`,"library.market.installedPlugins":`설치된 플러그인`,"library.market.pluginDirectory":`플러그인 디렉터리`,"library.market.templateInstall":`템플릿 설치`,"library.market.templateInstallHint":`재사용 가능한 작업공간 패턴에서 시작하세요.`,"system.account.profile":`프로필`,"system.account.title":`계정`,"system.account.detail":`로그인하거나 로컬 계정을 만들고 프로필을 최신 상태로 유지합니다.`,"system.account.email":`이메일`,"system.account.password":`현재 비밀번호`,"system.account.name":`이름`,"system.account.nickname":`닉네임`,"system.account.newPassword":`새 비밀번호`,"system.account.save":`프로필 저장`,"system.account.changePassword":`비밀번호 변경`,"system.account.requestDone":`계정 요청을 완료했습니다`,"system.account.signInOptions":`로그인 옵션`,"system.workspace.yours":`내 작업공간`,"system.workspace.organizations":`조직과 초대`,"system.workspace.organizationsHint":`지식을 추가하기 전에 작업공간을 만들거나 참여하세요.`,"system.workspace.orgPlaceholder":`새 조직 이름`,"system.workspace.createOrg":`조직 만들기`,"system.workspace.inviteeEmail":`초대할 이메일`,"system.workspace.createInvite":`초대 만들기`,"system.workspace.inviteToken":`초대 토큰`,"system.workspace.acceptInvite":`초대 수락`,"system.workspace.invitations":`초대`,"system.snapshots.title":`스냅샷`,"system.snapshots.actions":`스냅샷 작업`,"system.snapshots.actionsHint":`체크포인트를 만들고 시간에 따른 변경을 비교합니다.`,"system.snapshots.namePlaceholder":`스냅샷 이름`,"system.snapshots.create":`스냅샷 만들기`,"system.snapshots.beforeId":`이전 ID`,"system.snapshots.afterId":`이후 ID`,"system.snapshots.compareDone":`스냅샷 비교를 완료했습니다`,"system.snapshots.timeline":`타임머신`,"system.activity.feed":`실시간 피드`,"system.activity.presence":`접속 현황`,"system.network.identity":`기기 신원`,"system.network.pair":`기기 연결`,"system.network.pairHint":`신뢰하는 기기를 연결해 작업공간을 교환합니다.`,"system.network.deviceName":`기기 이름`,"system.network.address":`신뢰하는 기기 주소`,"system.network.publicKey":`신뢰하는 공개 키`,"system.network.pairDone":`기기 연결 요청을 완료했습니다`,"system.network.peers":`연결된 기기`,"system.backup.health":`백업 상태`,"system.archive.detail":`암호화된 휴대용 Brain 파일을 만들고 검증하거나 복원 전에 미리 확인합니다.`,"system.archive.exportPath":`내보내기 경로(선택)`,"system.archive.restorePath":`검사 또는 복원할 아카이브 경로`,"system.archive.passphrase":`아카이브 암호문`,"system.archive.export":`아카이브 내보내기`,"system.archive.restoreDryRun":`복원 미리 실행`,"system.archive.importDryRun":`가져오기 미리 실행`,"system.archive.confirmRestore":`복원 확인`,"system.archive.confirmImport":`가져오기 확인`,"system.archive.requestDone":`아카이브 요청을 완료했습니다`,"system.scale.title":`확장 모드`,"system.scale.detail":`선택형 고급 저장소입니다. 로컬 SQLite가 계속 기본값입니다.`,"system.scale.dsn":`Postgres 연결 문자열`,"system.scale.schema":`데이터베이스 스키마`,"system.scale.dockerPlan":`Docker 계획`,"system.scale.dockerConsent":`Docker 시작 동의`,"system.scale.dockerStart":`Docker 시작`,"system.scale.migrationPlan":`마이그레이션 계획`,"system.scale.dockerDone":`Docker 설정 요청을 완료했습니다`,"system.scale.migrationDone":`마이그레이션 계획을 완료했습니다`,"system.computerMemory.title":`컴퓨터 메모리`,"system.presence.empty":`활성 접속 없음`,"system.presence.emptyDetail":`현재 보고된 실시간 사용자나 클라이언트가 없습니다.`,"system.device.thisMac":`이 Mac`,"system.device.thisMacDetail":`신뢰하는 다른 기기를 연결하면 이 기기가 로컬 작업공간 교환에 참여할 수 있습니다.`,"system.storage.sqlite":`SQLite`,"system.storage.vector":`벡터 검색`,"system.storage.postgres":`Postgres`,"system.hardening.startup":`시작`,"system.hardening.startupDetail":`Lattice는 기본적으로 로컬에서 시작하며 네트워크 접근이 활성화되면 알립니다.`,"system.hardening.integrations":`통합`,"system.hardening.integrationsDetail":`외부 통합은 사용자가 명시적으로 활성화할 때까지 꺼져 있습니다.`,"system.hardening.identity":`기기 신원`,"system.hardening.permissions":`권한`,"system.hardening.permissionsDetail":`내보내기, 가져오기와 파괴적 복원 권한을 관리자 상태에서 확인할 수 있습니다.`,"system.admin.controls":`관리자 제어`,"system.admin.controlsDetail":`사용자, 감사 이벤트, 정책, 보안 상태와 비공개 네트워크 진단을 검토하려면 관리자 모드로 전환하세요.`,"system.admin.summary":`관리자 요약`,"system.admin.users":`사용자`,"system.admin.audit":`감사`,"system.admin.roles":`역할`,"system.admin.policies":`정책`,"system.admin.hardening":`제품 강화`,"system.admin.security":`보안 개요`,"system.admin.vpc":`비공개 VPC`,"system.admin.communityUnavailable":`Community에서 비활성화된 기능은 사용 불가 상태로 정확히 표시됩니다.`,"act.runtime.modelUnavailable":`Agent를 실행하려면 LLM 기반 모델을 먼저 불러오세요.`,"act.agent.register":`등록`,"act.approval.request":`승인 요청 {index}`,"act.action.approve":`승인`,"act.action.deny":`거부`,"act.action.stop":`중지`,"act.action.resumeApproved":`승인 후 재개`,"act.action.resumeDenied":`거부 후 재개`,"act.status.unknown":`알 수 없음`,"act.status.draft":`초안`,"act.workflow.defaultName":`수동 워크플로`,"act.workflow.fallbackName":`워크플로 {index}`,"act.workflow.create":`만들기`,"act.workflow.import":`가져오기`,"act.workflow.run":`실행`,"act.workflow.export":`내보내기`,"act.workflow.manualStart":`수동 시작`,"act.workflow.output":`결과`,"act.workflow.completed":`워크플로 완료`,"act.hooks.runAll":`모든 수동 훅 실행`,"library.model.needsDownloadFirst":`아직 이 컴퓨터에 모델 파일이 없습니다. 받으면 바로 쓸 수 있어요.`,"library.model.sourceVerified":`출처 확인됨`,"library.runtime.appleSilicon":`Apple Silicon Mac`,"library.runtime.thisComputer":`이 컴퓨터`,"library.embedding.state.production":`의미 검색 사용 중`,"library.embedding.state.fallback":`기본 검색 사용 중 (의미 모델 없음)`,"library.embedding.state.unknown":`확인 필요`,"library.model.notReady":`이 모델은 아직 불러올 준비가 되지 않았습니다.`,"library.model.localFormat":`이 로컬 모델 형식`,"library.model.localSupport":`로컬 모델 지원`,"library.model.support":`모델 지원`,"library.model.format":`모델 형식`,"library.model.ramRecommended":`약 {ram}GB RAM 권장`,"library.model.needsAttention":`확인 필요`,"library.btn.needsConsent":`위의 다운로드 허용에 먼저 체크해 주세요.`,"library.model.status.loaded":`사용 중`,"library.model.status.ready":`바로 사용 가능`,"library.model.status.download_required":`다운로드 필요`,"library.model.status.unavailable":`지금은 사용 불가`,"library.model.status.unsupported":`이 컴퓨터에서 미지원`,"library.model.status.unknown":`확인 필요`,"library.model.recommended":`추천`,"library.model.multimodal":`멀티모달`,"library.model.local":`로컬 모델`,"library.model.downloadSize":`다운로드: {size}`,"library.model.downloadRequired":`필요`,"library.model.noDownload":`지금은 다운로드 불필요`,"library.model.internetDuringDownload":`다운로드 중에만 인터넷 사용`,"library.model.runsLocally":`불러온 뒤 로컬에서 실행`,"library.model.attentionBeforeLoad":`불러오기 전에 확인이 필요합니다`,"library.model.compatiblePath":`호환되는 실행 경로를 사용할 수 있습니다`,"library.model.runtimeFallback":`대체 런타임을 사용할 수 있습니다`,"library.model.compatibilityFallback":`지원되지 않는 모델로 표시하기 전에 Lattice가 호환되는 로컬 실행 경로를 시도합니다.`,"library.model.license":`라이선스: {license}`,"library.model.loaded":`불러옴`,"library.models.embedding.advanced":`임베딩 제공자`,"library.models.validationAdvanced":`모델 검증`,"library.model.loadedName":`불러온 모델`,"library.model.checked":`점검됨`,"library.model.compatibleAlternative":`호환 대안`,"library.runtime.engine":`엔진`,"library.runtime.noLoaded":`불러온 로컬 모델 없음`,"library.runtime.state":`런타임 상태`,"library.runtime.cacheStorage":`캐시/저장소: {path}`,"library.model.setupAttention":`모델 설정을 확인해야 합니다.`,"library.skills.disable":`비활성화`,"library.skills.enable":`활성화`,"library.skills.install":`설치`,"library.connector.connections":`도구 연결`,"library.connector.mcpTools":`MCP 도구`,"library.connector.recommendAction":`추천`,"library.market.installTemplate":`{name} 설치`,"library.value.local":`로컬`,"library.value.ready":`준비됨`,"library.value.idle":`대기`,"library.value.detected":`감지됨`,"system.account.login":`로그인`,"system.account.register":`가입`,"system.account.logout":`로그아웃`,"system.workspace.use":`사용`,"system.workspace.activate":`활성화`,"system.workspace.archive":`보관`,"system.snapshots.defaultName":`데스크톱 체크포인트`,"system.snapshots.export":`내보내기`,"system.snapshots.mergeRestore":`병합 복원`,"system.snapshots.compare":`비교`,"system.network.pushWorkspace":`작업공간 보내기`,"system.network.unpair":`연결 해제`,"system.panel.serverHealth":`서버 상태`,"system.panel.hostTelemetry":`호스트 측정값`,"system.panel.brainStorage":`Brain 저장소`,"system.archive.title":`.latticebrain 이동 및 복원`,"system.archive.inspect":`검사`,"system.archive.verify":`검증`,"system.archive.restore":`복원`,"system.archive.import":`가져오기`,"system.computerMemory.enable":`메모리 활성화`,"system.computerMemory.disable":`메모리 비활성화`,"system.value.notReported":`보고되지 않음`,"system.value.noneReported":`보고된 항목 없음`,"system.value.enabled":`활성화됨`,"system.value.disabled":`비활성화됨`,"system.value.reported":`보고됨`,"system.value.local":`로컬`,"system.value.configured":`구성됨`,"system.value.trusted":`신뢰됨`,"system.value.localIdentity":`로컬 신원`,"system.value.localDevice":`로컬 기기`,"system.value.identityKey":`신원 키`,"system.value.scaleMode":`확장 모드`,"system.value.available":`사용 가능`,"system.value.optional":`선택 사항`,"system.value.unavailable":`사용 불가`,"system.value.default":`기본값`,"system.value.notEnabled":`활성화되지 않음`,"system.value.no":`아니요`,"system.value.yes":`예`,"system.value.networkExposed":`네트워크 노출`,"system.value.localOnly":`로컬 전용`,"system.value.reviewRequired":`검토 필요`,"system.value.optIn":`사용자 선택`,"system.value.guarded":`보호됨`,"system.health.status":`상태`,"system.health.version":`버전`,"system.health.mode":`모드`,"system.health.port":`포트`,"system.storage.activeEngine":`활성 엔진`,"system.storage.sqliteDefault":`SQLite 기본값`,"system.storage.sqliteDetail":`로컬 Brain 저장소가 기본으로 활성화되어 있습니다.`,"system.storage.vectorDetail":`구성된 로컬 벡터 기능을 사용하거나 사용할 수 없는 이유를 표시합니다.`,"system.storage.postgresDetail":`Postgres 확장 모드는 선택 사항이며 로컬 사용에 필요하지 않습니다.`,"system.backup.available":`사용 가능`,"system.backup.backups":`백업`,"system.backup.encrypted":`암호화됨`,"system.backup.zip":`ZIP 백업`,"system.hardening.version":`버전`,"system.hardening.localOnly":`로컬 전용`,"system.hardening.storage":`저장소`,"system.hardening.backups":`백업`,"system.hardening.identityStorage":`로컬에 저장되며 서명된 번들 교환에 사용됩니다.`,"system.security.eventsToday":`오늘 이벤트`,"system.security.highRisk":`고위험`,"system.security.review":`검토`,"system.security.riskRate":`위험 비율`},en:{"library.kicker":`AI model`,"library.title":`Choose the AI Lattice will use.`,"library.body":`Start with a model recommended for this computer. You can switch later without losing saved memories.`,"library.tab.models":`Models`,"library.tab.skills":`Skills`,"library.tab.mcp":`Connections`,"library.tab.marketplace":`Marketplace`,"library.models.setup.title":`Choose a model`,"library.models.setup.desc":`We suggest a few light models first, tell you when internet or a download is needed, and never download anything without your consent.`,"library.models.embedding.basic":`Search by meaning`,"library.models.validation":`Model check`,"library.models.runtime.available":`A local model is ready`,"library.models.runtime.none":`No model loaded yet`,"library.runtime.computer":`Computer`,"library.runtime.loaded":`Loaded model`,"library.runtime.noneShort":`None`,"library.runtime.reload":`Reload`,"library.runtime.unload":`Unload`,"library.steps.aria":`Model setup progress`,"library.step.environment":`Environment check`,"library.step.recommend":`Recommended models`,"library.step.install":`Install`,"library.step.download":`Download`,"library.step.validate":`Check`,"library.step.ready":`Ready to use`,"library.step.done":`ready`,"library.step.pending":`pending`,"library.consent":`Allow Lattice to install a missing local model component or download model files for this action. Downloading uses the internet; running the model stays on this computer.`,"library.preparing":`Preparing model`,"library.panel.recommended.basic":`Recommended models`,"library.panel.recommended.other":`Recommended and advanced models`,"library.btn.preparing":`Preparing`,"library.btn.installLoad":`Install & use`,"library.btn.validateLoad":`Check & use`,"system.kicker":`Settings`,"system.title":`Make Lattice work your way.`,"system.body":`Manage your account, workspaces, appearance, privacy, and backups.`,"system.tab.account":`Account`,"system.tab.workspaces":`Spaces`,"system.tab.snapshots":`Backups`,"system.tab.activity":`History`,"system.tab.network":`Devices`,"system.tab.settings":`Settings`,"system.tab.admin":`Admin`,"system.permission.title":`Agent autonomy`,"system.permission.hint":`How far the agent may go without asking. Dangerous actions stay blocked in every setting.`,"system.permission.current":`Current setting`,"system.permission.apply":`Switch to this`,"system.permission.ack":`I understand the risk and want this setting.`,"system.permission.guards":`Blocked in every setting`,"system.permission.guards.detail":`Destructive actions, root/home path deletions, rm -rf / style commands, and binary overwrites that cannot be reviewed.`,"system.permission.risk.low":`Low`,"system.permission.risk.medium":`Medium`,"system.permission.risk.high":`High`,"system.network.title":`How far your knowledge travels`,"system.network.hint":`Your Brain always stays on this computer. This decides whether a minimal, related slice of it may go to a cloud model.`,"system.network.current":`Current setting`,"system.network.apply":`Switch to this`,"system.network.ack":`I understand what gets sent and want to allow cloud use.`,"system.network.guards":`Never sent, in any setting`,"system.network.guards.detail":`The knowledge graph itself, your original files, and backup archives. Memories marked sensitive, private, do-not-share, or local-only are left out even when cloud is allowed.`,"system.network.preview.title":`See what would be sent`,"system.network.preview.hint":`Check which memories a question would send before anything actually goes out.`,"system.network.preview.placeholder":`Type a question to check`,"system.network.preview.run":`Preview`,"system.network.preview.empty":`Nothing would be sent for this question.`,"system.network.preview.count":`{count} memories`,"system.network.preview.tokens":`about {tokens} tokens`,"system.network.preview.blocked":`This question would be refused — it exceeds the usage limit`,"system.network.preview.hold":`Keep this in`,"system.network.preview.release":`Allow again`,"system.network.preview.autoHeld":`Files from locations that hold passwords or keys are excluded automatically.`,"system.network.preview.localOnly":`You are on local only, so nothing is sent. Below is what would go out if you allowed cloud.`,"system.network.policy.title":`How cloud answers reach your memory`,"system.network.policy.autoCommit":`Save to memory without review`,"system.network.policy.autoCommitHint":`Off means anything the cloud finds waits in the Review Center as a proposal until you approve it.`,"system.network.policy.multimodal":`Send images and video too`,"system.network.policy.multimodalHint":`More leaves the machine than with text alone. Off by default.`,"system.network.budget":`Used this session`,"system.panel.appearance":`Appearance`,"system.panel.appearance.hint":`Applies to this browser only.`,"system.panel.detailLevel":`How much to show`,"system.panel.detailLevel.hint":`Choose how much detail each screen shows. Unrelated to light or dark.`,"system.theme.dark":`Dark`,"system.theme.light":`Light`,"system.panel.brainStatus":`Brain status`,"system.panel.readiness":`Computer readiness`,"system.stat.cpu":`CPU`,"system.stat.memory":`Memory`,"system.stat.gpu":`GPU memory`,"system.stat.localStatus":`Status`,"system.stat.ready":`ready`,"system.storage.title":`Where your memories live`,"system.storage.local.title":`Saved on this computer`,"system.storage.local.badge":`private`,"system.storage.local.detail":`Everything your Brain remembers is stored right here on your device — nothing leaves your computer unless you choose to share it.`,"system.storage.search.title":`Smart search`,"system.storage.search.on":`on`,"system.storage.search.pending":`getting ready`,"system.storage.search.detailOn":`Your Brain can find memories by meaning, not just exact words.`,"system.storage.search.detailPending":`Smart search turns on automatically once your first memories are indexed.`,"system.health.title":`Your Brain is running normally`,"system.health.ok":`all good`,"system.health.detail":`Running safely on this computer right now.`,"capture.tab.files":`Files`,"capture.tab.local":`Folders`,"capture.tab.browser":`Web`,"capture.tab.pipeline":`Flow`,"capture.kicker":`Sources`,"capture.title":`What should Lattice remember?`,"capture.body":`Add a file, folder, or webpage. Lattice keeps the source and can find it again in conversation.`,"capture.retry":`Retry`,"capture.files.title":`Add documents`,"capture.files.description":`Choose files and Lattice will prepare them for search and memory.`,"capture.files.drop":`Drop files or choose documents`,"capture.files.dropDetail":`Files you add are read into memory along with where they came from, so you can find them in conversation.`,"capture.files.uploaded":`Uploaded documents`,"capture.files.completed":`Saved files appear here. Linking them to related topics can take a moment longer.`,"capture.files.success":`Saved to memory`,"capture.files.queued":`Getting ready to save`,"capture.files.uploading":`Parsing and sending to Memory`,"capture.files.failed":`Ingest failed before it entered the Brain`,"capture.files.captured":`Captured with source metadata`,"capture.files.capturedWithNode":`Captured with source metadata · {node}`,"capture.local.title":`Connect a folder`,"capture.local.description":`Choose a folder and Lattice will scan it into the Brain.`,"capture.local.placeholder":`Folder path on this Mac`,"capture.local.choose":`Choose Folder`,"capture.local.choosing":`Choosing`,"capture.local.connect":`Scan and Connect`,"capture.local.success":`Folder scan requested`,"capture.local.pickUnavailable":`The folder picker could not open. Check desktop app permissions or type the path manually.`,"capture.local.emptyFolder":`No uploadable files were found in the selected folder.`,"capture.folderHealth.title":`Folder memory state`,"capture.folderHealth.coverage":`{percent}% remembered ({indexed}/{total})`,"capture.folderHealth.unknown":`Not scanned yet`,"capture.folderHealth.watching":`Changes are followed automatically`,"capture.folderHealth.failed":`{count} file(s) did not make it in`,"capture.folderHealth.vectorGlobal":`{count} item(s) are still being prepared for search across the whole index (not per folder)`,"capture.local.browserFolder":`Selected folder`,"capture.local.browserImporting":`Uploading folder files`,"capture.local.browserImportSuccess":`{folder} files entered the Brain.`,"capture.local.browserImportFailed":`Folder files could not enter the Brain.`,"capture.local.sources":`Connected sources`,"capture.local.access":`Folder access`,"capture.local.stop":`Stop {source}`,"capture.local.source":`source`,"capture.browser.title":`Save a web page`,"capture.browser.description":`Capture a page so Lattice can remember the useful parts.`,"capture.browser.placeholder":`https://example.com/article`,"capture.browser.paste":`Paste`,"capture.browser.capture":`Scan and Save`,"capture.browser.success":`Web page save requested`,"capture.pipeline.status":`Processing status`,"capture.pipeline.growth":`Brain growth`,"capture.pipeline.refresh":`Refresh memory`,"capture.pipeline.description":`Refresh search when you want Lattice to re-check captured material.`,"capture.pipeline.rebuild":`Rebuild retrieval index`,"review.inbox.title":`Review inbox`,"review.inbox.description":`Automation suggestions waiting for your decision. Run now previews without approving.`,"review.status.connected":`connected`,"review.status.unavailable":`unavailable`,"review.inbox.loadError":`Could not load review inbox`,"review.inbox.unavailable":`The review queue is not available right now.`,"review.inbox.empty":`Nothing to review`,"review.inbox.emptySnoozed":`Snoozed items will appear here until they are unsnoozed or become pending again.`,"review.inbox.emptyPending":`When automations opt into the review queue, new suggestions will appear here.`,"review.snoozed.detail":`This stays out of the pending queue until then. Unsnooze brings it back immediately.`,"review.unsnooze":`Unsnooze`,"review.runNow.detail":`Run now previews the action without approving it. Approve or dismiss when the result looks right.`,"review.chat.detail":`Saved from Brain chat. Approve it when it should become a real follow-up, or dismiss it when it is no longer useful.`,"review.agent.detail":`A follow-up candidate extracted from an Agent result. Approve it when it should become real work, or dismiss it when it is no longer useful.`,"review.actions.aria":`Review actions`,"review.runNow":`Run now`,"review.regenerated":`Regenerated`,"review.executed":`Executed`,"review.approve":`Approve`,"review.snoozeDay":`Snooze 1 day`,"review.dismiss":`Dismiss`,"review.feedback.open":`item stays open until you approve or dismiss.`,"review.action.failed":`{action} failed`,"review.filter.status.pending":`Pending`,"review.filter.status.snoozed":`Snoozed`,"review.filter.status.all":`All`,"review.filter.status.approved":`Approved`,"review.filter.status.dismissed":`Dismissed`,"review.filter.source.all":`All sources`,"review.filter.source.workflow_run":`Workflow`,"review.filter.source.trigger":`Trigger`,"review.filter.source.kg_change_digest":`Knowledge digest`,"review.filter.source.chat_followup":`Brain chat`,"review.filter.source.agent_followup":`Agent follow-up`,"review.filter.source.change_proposal":`Change proposals`,"review.proposal.detail":`The agent proposed changing an existing file. Approving applies exactly what you reviewed; rejecting changes nothing.`,"review.proposal.badge":`{count} change proposals pending`,"review.proposal.rejectReason":`Reason for rejecting (optional)`,"review.source.workflow_run":`Workflow run`,"review.source.trigger":`Trigger`,"review.source.kg_change_digest":`Knowledge digest`,"review.source.chat_followup":`Brain chat`,"review.source.agent_followup":`Agent follow-up`,"review.source.change_proposal":`Change proposal`,"review.source.automation":`Automation`,"review.itemStatus.pending":`Waiting for review`,"review.itemStatus.snoozed":`Snoozed`,"review.itemStatus.approved":`Approved`,"review.itemStatus.dismissed":`Dismissed`,"review.snoozed.badge":`Snoozed`,"review.snoozed.until":`Snoozed until {value}`,"review.summary.tool":`Tool`,"review.summary.proposedBy":`Proposed by`,"review.risk.read":`Safe read`,"review.risk.write":`Edits files`,"review.risk.write_scoped":`Edits inside the workspace only`,"review.risk.exec":`Runs a command`,"review.risk.destructive":`May remove content`,"review.change.read":`Read-only`,"review.change.additive":`Adds new content`,"review.change.mutation":`Edits existing content`,"review.change.destructive":`Removes content`,"review.change.exec":`Runs an action`,"review.technical.title":`Technical details`,"review.feedback.error":`We couldn't complete that action. Please try again in a moment.`,"proposals.diff.header":`Proposed change`,"proposals.diff.more":`{count} more lines`,"proposals.error":`We couldn't load your change proposals. Check that the local Lattice service is running.`,"common.retry":`Try again`,"common.error.unknown":`Something went wrong. Please try again in a moment.`,"api.error.timeout":`The request took too long, so we stopped waiting. Check that the local Lattice service is running.`,"api.error.unreachable":`We couldn't reach the local Lattice service. Make sure the app is running.`,"api.error.request":`The request couldn't be completed. (error {status})`,"intelligence.loadError":`We can't load your brain status right now. Please try again in a moment.`,"act.kicker":`Work`,"act.title":`Tell Lattice what you want done.`,"act.copy":`Share the goal and what done looks like. Lattice shows its progress and asks before any important change.`,"act.goal.title":`New task`,"act.goal.description":`Describe the result you want and what done should look like.`,"act.goal.placeholder":`Example: Read this week's meeting notes and organize decisions and action items by owner`,"act.goal.start":`Start task`,"act.goal.needsModel":`Set up an AI model`,"act.goal.modelRequired":`Set up an AI model before starting a task.`,"act.goal.safety":`Lattice always asks before making an important change.`,"act.goal.completed":`Agent run completed — result synthesized into Brain memory and graph`,"act.goal.brainSaved":`Synthetic Brain memory was added.`,"act.tab.goals":`Goals`,"act.tab.runs":`Runs`,"act.tab.review":`Review Center`,"act.tab.recipes":`Recipes`,"act.suggest.title":`Automation suggestions for you`,"act.suggest.subtitle":`Your Brain proposes automations from your recurring questions and connected folders.`,"act.suggest.empty":`No suggestions yet. Ask questions and connect folders to grow suggestions.`,"act.suggest.scanned":`analyzed {count} recent questions`,"act.suggest.question":`Recurring question`,"act.suggest.folder":`Connected folder`,"act.suggest.evidence.count":`you asked this {count} times`,"act.suggest.evidence.folder":`a folder with {count} files in your Brain`,"act.suggest.cadence.daily":`daily draft`,"act.suggest.cadence.newKnowledge":`when new knowledge arrives`,"act.suggest.install":`Create automation`,"act.suggest.installing":`Creating...`,"act.suggest.installed":`Draft created — review, then enable`,"act.suggest.note":`Accepting a suggestion creates a disabled draft; it only runs after you review and enable it.`,"act.automation.title":`Memory-based automation`,"act.automation.local":`local only`,"act.automation.consent":`review draft, then enable`,"act.automation.create":`Create reviewable automation draft`,"act.automation.creating":`Creating draft...`,"act.automation.created":`✓ Automation draft created`,"act.automation.enable":`Enable this memory automation`,"act.automation.enabling":`Connecting automation...`,"act.automation.active":`✓ Memory automation active`,"act.automation.draftReady":`The draft is ready. Review it, then enable it.`,"act.automation.enableHint":`This draft is safely disabled. Enable it to connect Brain events.`,"act.automation.activeHint":`New memory events now create a reviewable result in your inbox.`,"act.installed.title":`Installed automations`,"act.installed.subtitle":`Try an installed automation right away and see its last run result.`,"act.installed.empty":`No automations installed yet. Create one from the suggestions or recipes above.`,"act.installed.runNow":`Run now`,"act.installed.dryRunning":`Dry-running...`,"act.installed.runLive":`Run once for real`,"act.installed.liveRunning":`Running...`,"act.installed.dryRunHint":`A side-effect-free dry run shows what would happen first, then the real run unlocks.`,"act.installed.lastRun":`Last run`,"act.installed.noRuns":`No runs yet`,"act.installed.mode.dry":`dry run`,"act.installed.mode.live":`live`,"act.installed.failedReview":`The run failed and was added to your review inbox.`,"act.installed.onBadge":`On`,"act.installed.draftBadge":`Draft (off)`,"act.tab.safeguards":`Safeguards`,"act.tab.permissions":`Permissions`,"act.tab.hooks":`Hooks`,"act.tab.tools":`Tools`,"admin.back":`Brain`,"admin.aria.console":`Lattice Admin`,"admin.kicker":`Separate admin workspace`,"admin.title":`Admin Console`,"admin.body":`Users, logs, security, and Brain health stay out of the normal user experience.`,"admin.overview":`Admin overview`,"admin.metric.users":`Users`,"admin.metric.logs":`Recent logs`,"admin.metric.security":`Security`,"admin.metric.index":`Brain index`,"admin.status.ready":`Ready`,"admin.status.unavailable":`Unavailable`,"admin.status.indexed":`Indexed`,"admin.status.unknown":`Unknown`,"admin.panel.users":`User Directory`,"admin.panel.people":`People`,"admin.panel.roles":`Role Permissions`,"admin.panel.access":`Access`,"admin.panel.logs":`Activity Logs`,"admin.panel.audit":`Audit`,"admin.panel.securityEvents":`Security Events`,"admin.panel.protection":`Protection`,"admin.panel.brainOps":`Brain Operations`,"admin.panel.maintenance":`Maintenance`,"admin.panel.runtimeTrust":`Runtime Trust`,"admin.panel.contracts":`Contracts`,"admin.empty.users":`No users reported by the admin API.`,"admin.empty.roles":`No role matrix reported.`,"admin.empty.audit":`No recent audit events.`,"admin.empty.security":`No security events reported.`,"admin.fallback.localUser":`Local user`,"admin.fallback.member":`member`,"admin.fallback.role":`role`,"admin.fallback.noCaps":`No caps`,"admin.filters.label":`Audit log filters`,"admin.filters.search":`Search logs`,"admin.filters.searchAria":`Search audit logs`,"admin.filters.severityAria":`Filter by severity`,"admin.filters.all":`All severities`,"admin.filters.informational":`Informational`,"admin.filters.notice":`Notice`,"admin.filters.warning":`Warning`,"admin.filters.high":`High`,"admin.filters.matched":`{count} matched`,"admin.brain.summaryFallback":`Local Brain services are separated from user chat.`,"admin.brain.rebuilding":`Rebuilding`,"admin.brain.rebuild":`Rebuild index`,"admin.runtime.agent":`AgentRuntime`,"admin.runtime.tools":`ToolRegistry`,"admin.runtime.readyDetail":`Run preview and execution are ready.`,"admin.runtime.blockedFallback":`Run preview returns the blocking reason before execution.`,"admin.runtime.aligned":`Aligned`,"admin.runtime.drift":`Needs review`,"admin.runtime.toolCounts":`Registered {registered} · governed {governed} · described {described}`,"admin.runtime.mode":`mode {mode}`,"admin.runtime.execution":`exec {mode}`,"admin.runtime.health":`health {status}`,"admin.policy.fallback":`Policy`,"admin.policy.quiet":`Policy API quiet`,"admin.retention.days":`{days} day retention`,"admin.retention.detail":`{events} retained · {candidates} ready for export/prune review`,"admin.log.event":`Event`,"admin.log.system":`system`,"admin.log.recently":`recently`,"admin.source.loading":`Loading`,"admin.source.live":`Live`,"admin.index.ready":`Index status ready`,"act.panel.readiness":`Readiness`,"act.panel.agentTeam":`Agent team`,"act.agentRole.researcher":`Researcher`,"act.agentRole.researcher.detail":`Gathers the material, memory, and connections the goal needs.`,"act.agentRole.planner":`Planner`,"act.agentRole.planner.detail":`Breaks the goal into ordered, reviewable steps.`,"act.agentRole.executor":`Executor`,"act.agentRole.executor.detail":`Runs each planned step with tools and workflows.`,"act.agentRole.reviewer":`Reviewer`,"act.agentRole.reviewer.detail":`Reviews the work and approves, rejects, or retries it.`,"act.agentRole.release":`Finisher`,"act.agentRole.release.detail":`Wraps up and writes the final summary.`,"act.agent.namePlaceholder":`New custom agent name`,"act.panel.capabilities":`What agents can do`,"act.recipe.daily-memory-digest":`Daily memory digest`,"act.recipe.daily-memory-digest.summary":`Collects the day's new memories into a short review draft.`,"act.recipe.daily-memory-digest.value":`See what your Brain kept today without searching through chats.`,"act.recipe.weekly-project-review":`Weekly project review`,"act.recipe.weekly-project-review.summary":`Turns project context into a weekly checkpoint draft.`,"act.recipe.weekly-project-review.value":`Pick a project back up without explaining the week again.`,"act.recipe.follow-up-radar":`Follow-up radar`,"act.recipe.follow-up-radar.summary":`Looks for follow-up work whenever a new memory is saved.`,"act.recipe.follow-up-radar.value":`Your Brain raises what you promised before you forget it.`,"act.cadence.daily":`Daily`,"act.cadence.weekly":`Weekly`,"act.cadence.when new memory is saved":`When a new memory is saved`,"act.creates.memory digest":`Memory digest`,"act.creates.decision summary":`Decision summary`,"act.creates.next-action suggestions":`Next-action suggestions`,"act.creates.project checkpoint":`Project checkpoint`,"act.creates.risk list":`Risk list`,"act.creates.open-question list":`Open-question list`,"act.creates.follow-up suggestions":`Follow-up suggestions`,"act.panel.agentRuns":`Agent runs`,"act.panel.workflowRuns":`Workflow runs`,"act.panel.approvalInbox":`Approval inbox`,"act.workflow.graph":`Workflow graph`,"act.workflow.graphDetail":`See your saved workflows as a simple map.`,"act.panel.definitions":`Definitions`,"act.workflow.namePlaceholder":`Workflow name`,"act.workflow.importPlaceholder":`Paste a workflow export`,"act.workflow.created":`Workflow created`,"act.workflow.imported":`Workflow imported`,"act.panel.triggers":`Automation triggers`,"act.panel.safeguards":`Safeguards`,"act.hooks.detailed":`Detailed hook logs`,"act.hooks.detailedHint":`Switch to Advanced when you need hook run logs and manual diagnostic controls.`,"act.panel.hooks":`Hooks`,"act.panel.hookRuns":`Hook run log`,"act.hooks.runManual":`Run manual hooks`,"act.hooks.runManualHint":`Trigger hooks deliberately and review the recorded result.`,"act.panel.permissions":`Action permissions`,"library.model.hfVerified":`HF verified (config and tokenizer present)`,"library.model.shortListHint":`Showing the safest short list. Switch to Advanced for the full registry, runtime details, licenses, and safety notes.`,"library.model.noneChecked":`No model checked yet`,"library.model.noneCheckedHint":`Load a model to confirm it can answer before you start using it.`,"library.skills.installed":`Installed skills`,"library.skills.marketplace":`Skill marketplace`,"library.connector.recommend":`Recommend connector`,"library.connector.recommendHint":`Describe what you want to connect and Lattice will suggest a connector.`,"library.connector.recommendDone":`Recommendation completed`,"library.market.templates":`Templates`,"library.market.installedPlugins":`Installed plugins`,"library.market.pluginDirectory":`Plugin directory`,"library.market.templateInstall":`Template install`,"library.market.templateInstallHint":`Start from a reusable workspace pattern.`,"system.account.profile":`Profile`,"system.account.title":`Account`,"system.account.detail":`Sign in, create a local account, and keep your profile current.`,"system.account.email":`email`,"system.account.password":`current password`,"system.account.name":`name`,"system.account.nickname":`nickname`,"system.account.newPassword":`new password`,"system.account.save":`Save profile`,"system.account.changePassword":`Change password`,"system.account.requestDone":`Account request completed`,"system.account.signInOptions":`Sign-in options`,"system.workspace.yours":`Your workspaces`,"system.workspace.organizations":`Organizations and invitations`,"system.workspace.organizationsHint":`Create or join a workspace before adding knowledge.`,"system.workspace.orgPlaceholder":`New organization name`,"system.workspace.createOrg":`Create organization`,"system.workspace.inviteeEmail":`invitee email`,"system.workspace.createInvite":`Create invitation`,"system.workspace.inviteToken":`invitation token`,"system.workspace.acceptInvite":`Accept invitation`,"system.workspace.invitations":`Invitations`,"system.snapshots.title":`Snapshots`,"system.snapshots.actions":`Snapshot actions`,"system.snapshots.actionsHint":`Create checkpoints and compare changes over time.`,"system.snapshots.namePlaceholder":`snapshot name`,"system.snapshots.create":`Create snapshot`,"system.snapshots.beforeId":`before id`,"system.snapshots.afterId":`after id`,"system.snapshots.compareDone":`Snapshot comparison completed`,"system.snapshots.timeline":`Time machine`,"system.activity.feed":`Realtime feed`,"system.activity.presence":`Presence`,"system.network.identity":`Device identity`,"system.network.pair":`Pair device`,"system.network.pairHint":`Pair a trusted device for workspace exchange.`,"system.network.deviceName":`device name`,"system.network.address":`trusted device address`,"system.network.publicKey":`trusted public key`,"system.network.pairDone":`Peer pairing request completed`,"system.network.peers":`Peers`,"system.backup.health":`Backup health`,"system.archive.detail":`Create an encrypted portable brain file, verify one, or preview a restore before applying it.`,"system.archive.exportPath":`export path (optional)`,"system.archive.restorePath":`archive path for inspect/restore`,"system.archive.passphrase":`archive passphrase`,"system.archive.export":`Export archive`,"system.archive.restoreDryRun":`Restore dry run`,"system.archive.importDryRun":`Import dry run`,"system.archive.confirmRestore":`Confirm restore`,"system.archive.confirmImport":`Confirm import`,"system.archive.requestDone":`Archive request completed`,"system.scale.title":`Scale mode`,"system.scale.detail":`Optional advanced storage. Local SQLite remains the default.`,"system.scale.dsn":`Postgres connection string`,"system.scale.schema":`database schema`,"system.scale.dockerPlan":`Docker plan`,"system.scale.dockerConsent":`Consent to start Docker`,"system.scale.dockerStart":`Start Docker`,"system.scale.migrationPlan":`Plan migration`,"system.scale.dockerDone":`Docker setup request completed`,"system.scale.migrationDone":`Migration plan completed`,"system.computerMemory.title":`Computer memory`,"system.presence.empty":`No active presence`,"system.presence.emptyDetail":`No live collaborators or realtime clients are currently reported.`,"system.device.thisMac":`This Mac`,"system.device.thisMacDetail":`This device can participate in local workspace exchange when you pair another trusted device.`,"system.storage.sqlite":`SQLite`,"system.storage.vector":`Vector search`,"system.storage.postgres":`Postgres`,"system.hardening.startup":`Startup`,"system.hardening.startupDetail":`Lattice starts locally by default and reports when network access is enabled.`,"system.hardening.integrations":`Integrations`,"system.hardening.integrationsDetail":`External integrations remain disabled until the user explicitly enables them.`,"system.hardening.identity":`Device identity`,"system.hardening.permissions":`Permissions`,"system.hardening.permissionsDetail":`Export, import, and destructive restore permissions are surfaced through admin status.`,"system.admin.controls":`Admin controls`,"system.admin.controlsDetail":`Switch to Admin mode to review users, audit events, policies, security posture, and private networking diagnostics.`,"system.admin.summary":`Admin summary`,"system.admin.users":`Users`,"system.admin.audit":`Audit`,"system.admin.roles":`Roles`,"system.admin.policies":`Policies`,"system.admin.hardening":`Product hardening`,"system.admin.security":`Security overview`,"system.admin.vpc":`Private VPC`,"system.admin.communityUnavailable":`Community-disabled features remain honest unavailable states.`,"act.runtime.modelUnavailable":`Load an LLM-backed model before running agents.`,"act.agent.register":`Register`,"act.approval.request":`Approval request {index}`,"act.action.approve":`Approve`,"act.action.deny":`Deny`,"act.action.stop":`Stop`,"act.action.resumeApproved":`Resume approved`,"act.action.resumeDenied":`Resume denied`,"act.status.unknown":`unknown`,"act.status.draft":`draft`,"act.workflow.defaultName":`Manual workflow`,"act.workflow.fallbackName":`Workflow {index}`,"act.workflow.create":`Create`,"act.workflow.import":`Import`,"act.workflow.run":`Run`,"act.workflow.export":`Export`,"act.workflow.manualStart":`Manual start`,"act.workflow.output":`Output`,"act.workflow.completed":`Workflow completed`,"act.hooks.runAll":`Run all manual hooks`,"library.model.needsDownloadFirst":`Model files are not on this computer yet. Download to use it.`,"library.model.sourceVerified":`Source verified`,"library.runtime.appleSilicon":`Apple Silicon Mac`,"library.runtime.thisComputer":`This computer`,"library.embedding.state.production":`Meaning-based search on`,"library.embedding.state.fallback":`Basic search (no meaning model yet)`,"library.embedding.state.unknown":`Needs a check`,"library.model.notReady":`This model is not ready to load yet.`,"library.model.localFormat":`this local model format`,"library.model.localSupport":`local model support`,"library.model.support":`model support`,"library.model.format":`model format`,"library.model.ramRecommended":`About {ram}GB RAM recommended`,"library.model.needsAttention":`needs attention`,"library.btn.needsConsent":`Tick the download permission box above first.`,"library.model.status.loaded":`In use`,"library.model.status.ready":`Ready to use`,"library.model.status.download_required":`Download needed`,"library.model.status.unavailable":`Not available now`,"library.model.status.unsupported":`Not supported on this computer`,"library.model.status.unknown":`Needs a check`,"library.model.recommended":`recommended`,"library.model.multimodal":`multimodal`,"library.model.local":`Local model`,"library.model.downloadSize":`Download: {size}`,"library.model.downloadRequired":`required`,"library.model.noDownload":`No download needed now`,"library.model.internetDuringDownload":`Internet only during download`,"library.model.runsLocally":`Runs locally when loaded`,"library.model.attentionBeforeLoad":`Needs attention before loading`,"library.model.compatiblePath":`Compatible loading path available`,"library.model.runtimeFallback":`Runtime fallback available`,"library.model.compatibilityFallback":`Lattice will try the compatible local runtime path before showing this model as unsupported.`,"library.model.license":`License: {license}`,"library.model.loaded":`loaded`,"library.models.embedding.advanced":`Embedding provider`,"library.models.validationAdvanced":`Model validation`,"library.model.loadedName":`Loaded model`,"library.model.checked":`checked`,"library.model.compatibleAlternative":`Compatible alternative`,"library.runtime.engine":`Engine`,"library.runtime.noLoaded":`No local model loaded`,"library.runtime.state":`Runtime state`,"library.runtime.cacheStorage":`Cache/storage: {path}`,"library.model.setupAttention":`Model setup needs attention.`,"library.skills.disable":`Disable`,"library.skills.enable":`Enable`,"library.skills.install":`Install`,"library.connector.connections":`Tool connections`,"library.connector.mcpTools":`MCP tools`,"library.connector.recommendAction":`Recommend`,"library.market.installTemplate":`Install {name}`,"library.value.local":`local`,"library.value.ready":`ready`,"library.value.idle":`idle`,"library.value.detected":`detected`,"system.account.login":`Login`,"system.account.register":`Register`,"system.account.logout":`Logout`,"system.workspace.use":`Use`,"system.workspace.activate":`Activate`,"system.workspace.archive":`Archive`,"system.snapshots.defaultName":`desktop checkpoint`,"system.snapshots.export":`Export`,"system.snapshots.mergeRestore":`Merge restore`,"system.snapshots.compare":`Compare`,"system.network.pushWorkspace":`Push workspace`,"system.network.unpair":`Unpair`,"system.panel.serverHealth":`Server health`,"system.panel.hostTelemetry":`Host telemetry`,"system.panel.brainStorage":`Brain storage`,"system.archive.title":`.latticebrain portability`,"system.archive.inspect":`Inspect`,"system.archive.verify":`Verify`,"system.archive.restore":`Restore`,"system.archive.import":`Import`,"system.computerMemory.enable":`Enable memory`,"system.computerMemory.disable":`Disable memory`,"system.value.notReported":`not reported`,"system.value.noneReported":`none reported`,"system.value.enabled":`enabled`,"system.value.disabled":`disabled`,"system.value.reported":`reported`,"system.value.local":`local`,"system.value.configured":`configured`,"system.value.trusted":`trusted`,"system.value.localIdentity":`local identity`,"system.value.localDevice":`local device`,"system.value.identityKey":`identity key`,"system.value.scaleMode":`scale mode`,"system.value.available":`available`,"system.value.optional":`optional`,"system.value.unavailable":`unavailable`,"system.value.default":`default`,"system.value.notEnabled":`not enabled`,"system.value.no":`no`,"system.value.yes":`yes`,"system.value.networkExposed":`network exposed`,"system.value.localOnly":`local-only`,"system.value.reviewRequired":`review required`,"system.value.optIn":`opt-in`,"system.value.guarded":`guarded`,"system.health.status":`Status`,"system.health.version":`Version`,"system.health.mode":`Mode`,"system.health.port":`Port`,"system.storage.activeEngine":`Active engine`,"system.storage.sqliteDefault":`SQLite default`,"system.storage.sqliteDetail":`Local brain storage is active by default.`,"system.storage.vectorDetail":`Uses the configured local vector capability or reports why it is unavailable.`,"system.storage.postgresDetail":`Postgres scale mode is opt-in and never required for local use.`,"system.backup.available":`Available`,"system.backup.backups":`Backups`,"system.backup.encrypted":`Encrypted`,"system.backup.zip":`ZIP backups`,"system.hardening.version":`Version`,"system.hardening.localOnly":`Local only`,"system.hardening.storage":`Storage`,"system.hardening.backups":`Backups`,"system.hardening.identityStorage":`Stored locally and used for signed bundle exchange.`,"system.security.eventsToday":`Events today`,"system.security.highRisk":`High risk`,"system.security.review":`Review`,"system.security.riskRate":`Risk rate`}});export{p as t};
1
+ import{S as e,b as t,h as n}from"./utils-a3YXFtEO.js";import{_ as r,c as i,m as a,r as o,u as s,v as c,x as l}from"./useQuery-Dg5fPqTS.js";import{S as u}from"./index-Dm9VXl1o.js";var d=class extends l{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),r(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&s(t.mutationKey)!==s(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??u();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){i.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},f=e(t(),1);function p(e,t){let n=o(t),[r]=f.useState(()=>new d(n,e));f.useEffect(()=>{r.setOptions(e)},[r,e]);let s=f.useSyncExternalStore(f.useCallback(e=>r.subscribe(i.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),l=f.useCallback((e,t)=>{r.mutate(e,t).catch(a)},[r]);if(s.error&&c(r.options.throwOnError,[s.error]))throw s.error;return{...s,mutate:l,mutateAsync:s.mutate}}n({ko:{"library.kicker":`AI 모델`,"library.title":`Lattice가 사용할 AI를 선택하세요.`,"library.body":`이 컴퓨터에 맞는 추천 모델부터 시작할 수 있습니다. 모델을 바꿔도 저장된 기억은 그대로 유지됩니다.`,"library.tab.models":`모델`,"library.tab.skills":`스킬`,"library.tab.mcp":`연결`,"library.tab.marketplace":`마켓`,"library.models.setup.title":`모델 고르기`,"library.models.setup.desc":`먼저 가벼운 추천 모델을 안내해 드려요. 인터넷이나 다운로드가 필요한지 알려주고, 모든 다운로드는 동의를 받은 뒤에만 진행합니다.`,"library.models.embedding.basic":`의미로 찾는 검색`,"library.models.validation":`모델 점검`,"library.models.runtime.available":`모델을 사용할 수 있어요`,"library.models.runtime.none":`아직 불러온 모델이 없어요`,"library.runtime.computer":`컴퓨터`,"library.runtime.loaded":`불러온 모델`,"library.runtime.noneShort":`없음`,"library.runtime.reload":`다시 불러오기`,"library.runtime.unload":`내리기`,"library.steps.aria":`모델 준비 진행 상황`,"library.step.environment":`환경 확인`,"library.step.recommend":`추천 모델`,"library.step.install":`설치`,"library.step.download":`내려받기`,"library.step.validate":`점검`,"library.step.ready":`사용 준비`,"library.step.done":`완료`,"library.step.pending":`대기`,"library.consent":`이 작업에 필요한 로컬 모델 구성요소 설치나 모델 파일 다운로드를 허용합니다. 다운로드에만 인터넷을 쓰고, 모델 실행은 이 컴퓨터에서만 이뤄집니다.`,"library.preparing":`모델 준비 중`,"library.panel.recommended.basic":`추천 모델`,"library.panel.recommended.other":`추천 및 고급 모델`,"library.btn.preparing":`준비 중`,"library.btn.installLoad":`설치하고 사용`,"library.btn.validateLoad":`점검하고 사용`,"system.kicker":`설정`,"system.title":`Lattice를 내 방식에 맞게 설정하세요.`,"system.body":`계정, 작업공간, 화면, 개인정보와 백업을 관리할 수 있습니다.`,"system.tab.account":`계정`,"system.tab.workspaces":`작업공간`,"system.tab.snapshots":`스냅샷`,"system.tab.activity":`기록`,"system.tab.network":`기기`,"system.tab.settings":`환경설정`,"system.tab.admin":`관리자`,"system.permission.title":`에이전트 자율성`,"system.permission.hint":`에이전트가 승인 없이 어디까지 실행할지 정합니다. 위험한 작업은 어떤 설정에서도 차단됩니다.`,"system.permission.current":`현재 설정`,"system.permission.apply":`이 설정으로 변경`,"system.permission.ack":`위험을 이해했고 이 설정을 사용하겠습니다.`,"system.permission.guards":`어떤 설정에서도 차단되는 것`,"system.permission.guards.detail":`파괴적 작업, 루트·홈 경로 삭제, rm -rf / 류 명령, 검토할 수 없는 바이너리 덮어쓰기.`,"system.permission.risk.low":`낮음`,"system.permission.risk.medium":`보통`,"system.permission.risk.high":`높음`,"system.network.title":`내 지식이 나가는 범위`,"system.network.hint":`내 Brain은 항상 이 컴퓨터에 있습니다. 클라우드 모델을 쓸 때 관련 있는 최소한의 기억만 내보낼지 정합니다.`,"system.network.current":`현재 설정`,"system.network.apply":`이 설정으로 변경`,"system.network.ack":`무엇이 나가는지 이해했고 클라우드 사용을 허용합니다.`,"system.network.guards":`어떤 설정에서도 나가지 않는 것`,"system.network.guards.detail":`지식 그래프 전체, 파일 원본, 백업 아카이브. 그리고 민감·비공개·공유금지·로컬전용으로 표시된 기억은 클라우드를 허용해도 제외됩니다.`,"system.network.preview.title":`무엇이 나가는지 미리 보기`,"system.network.preview.hint":`실제로 보내기 전에, 이 질문이라면 어떤 기억이 나갈지 확인할 수 있습니다.`,"system.network.preview.placeholder":`확인해 볼 질문을 적어보세요`,"system.network.preview.run":`미리 보기`,"system.network.preview.empty":`이 질문으로 내보낼 기억이 없습니다.`,"system.network.preview.count":`기억 {count}개`,"system.network.preview.tokens":`약 {tokens}토큰`,"system.network.preview.blocked":`이 질문은 사용량 한도에 걸려 전송되지 않습니다`,"system.network.preview.hold":`내보내지 않기`,"system.network.preview.release":`다시 허용`,"system.network.preview.autoHeld":`비밀번호·키가 들어 있는 위치의 파일은 자동으로 제외됩니다.`,"system.network.preview.localOnly":`지금은 로컬만으로 설정돼 있어 아무것도 나가지 않습니다. 아래는 클라우드를 허용했을 때 나갈 내용입니다.`,"system.network.policy.title":`클라우드 답변을 기억에 반영하는 방법`,"system.network.policy.autoCommit":`검토 없이 바로 기억에 저장`,"system.network.policy.autoCommitHint":`꺼두면 클라우드가 찾아낸 내용은 검토 센터에 제안으로 쌓이고, 승인해야 기억이 됩니다.`,"system.network.policy.multimodal":`이미지·영상도 클라우드로 보내기`,"system.network.policy.multimodalHint":`글자만 보내는 것보다 더 많은 것이 나갑니다. 기본은 꺼짐입니다.`,"system.network.budget":`이번 세션 사용량`,"system.panel.appearance":`화면 모양`,"system.panel.appearance.hint":`이 브라우저에서만 적용됩니다.`,"system.panel.detailLevel":`보여줄 내용의 양`,"system.panel.detailLevel.hint":`화면에 얼마나 자세히 보여줄지 정합니다. 화면 색과는 관계없습니다.`,"system.theme.dark":`어둡게`,"system.theme.light":`밝게`,"system.panel.brainStatus":`브레인 상태`,"system.panel.readiness":`컴퓨터 준비 상태`,"system.stat.cpu":`CPU`,"system.stat.memory":`메모리`,"system.stat.gpu":`그래픽 메모리`,"system.stat.localStatus":`상태`,"system.stat.ready":`준비됨`,"system.storage.title":`기억이 저장되는 곳`,"system.storage.local.title":`이 컴퓨터에 저장됨`,"system.storage.local.badge":`비공개`,"system.storage.local.detail":`브레인이 기억하는 모든 것은 이 기기에 저장됩니다. 직접 공유하지 않는 한 아무것도 컴퓨터를 벗어나지 않습니다.`,"system.storage.search.title":`스마트 검색`,"system.storage.search.on":`켜짐`,"system.storage.search.pending":`준비 중`,"system.storage.search.detailOn":`단어가 정확히 일치하지 않아도 의미로 기억을 찾아 줍니다.`,"system.storage.search.detailPending":`첫 기억이 정리되면 스마트 검색이 자동으로 켜집니다.`,"system.health.title":`브레인이 정상 작동 중이에요`,"system.health.ok":`정상`,"system.health.detail":`지금 이 컴퓨터에서 안전하게 실행되고 있어요.`,"capture.tab.files":`파일`,"capture.tab.local":`폴더`,"capture.tab.browser":`웹`,"capture.tab.pipeline":`흐름`,"capture.kicker":`자료`,"capture.title":`어떤 자료를 기억할까요?`,"capture.body":`파일, 폴더, 웹페이지를 추가하면 Lattice가 출처와 함께 기억하고 대화에서 찾아드립니다.`,"capture.retry":`다시 시도`,"capture.files.title":`문서 추가`,"capture.files.description":`파일을 선택하면 Lattice가 검색과 기억에 들어갈 수 있게 준비합니다.`,"capture.files.drop":`파일을 놓거나 문서를 선택`,"capture.files.dropDetail":`넣은 파일은 내용을 읽어 기억에 저장되고, 어디서 온 자료인지도 함께 남습니다. 이후 대화에서 바로 찾아 쓸 수 있어요.`,"capture.files.uploaded":`업로드된 문서`,"capture.files.completed":`기억에 저장된 자료가 여기에 표시됩니다. 관련 주제로 이어지는 데는 잠시 더 걸릴 수 있어요.`,"capture.files.success":`기억에 저장됨`,"capture.files.queued":`저장 준비 중`,"capture.files.uploading":`파싱 후 Memory로 전송 중`,"capture.files.failed":`Brain에 들어가기 전에 수집에 실패했습니다.`,"capture.files.captured":`출처 정보와 함께 저장됨`,"capture.files.capturedWithNode":`출처 정보와 함께 저장됨 · {node}`,"capture.local.title":`폴더 연결`,"capture.local.description":`폴더를 선택하면 Lattice가 바로 스캔해 Brain에 연결합니다.`,"capture.local.placeholder":`이 Mac의 폴더 경로`,"capture.local.choose":`폴더 선택`,"capture.local.choosing":`선택 중`,"capture.local.connect":`스캔하고 연결`,"capture.local.success":`폴더 스캔 요청됨`,"capture.local.pickUnavailable":`폴더 선택 창을 열 수 없습니다. 데스크톱 앱 권한을 확인하거나 경로를 직접 입력해 주세요.`,"capture.local.emptyFolder":`선택한 폴더에서 업로드할 파일을 찾지 못했습니다.`,"capture.folderHealth.title":`폴더별 기억 상태`,"capture.folderHealth.coverage":`{percent}% 기억됨 ({indexed}/{total})`,"capture.folderHealth.unknown":`아직 살펴보지 않았어요`,"capture.folderHealth.watching":`변경되면 자동으로 따라갑니다`,"capture.folderHealth.failed":`들어오지 못한 파일 {count}개`,"capture.folderHealth.vectorGlobal":`전체 색인 기준으로 {count}건이 아직 검색 준비 중입니다 (폴더별 아님)`,"capture.local.browserFolder":`선택한 폴더`,"capture.local.browserImporting":`폴더 파일 업로드 중`,"capture.local.browserImportSuccess":`{folder} 파일을 Brain에 넣었습니다.`,"capture.local.browserImportFailed":`폴더 파일을 Brain에 넣지 못했습니다.`,"capture.local.sources":`연결된 출처`,"capture.local.access":`폴더 접근`,"capture.local.stop":`{source} 감시 중지`,"capture.local.source":`출처`,"capture.browser.title":`웹페이지 저장`,"capture.browser.description":`유용한 내용을 기억할 수 있게 페이지를 수집합니다.`,"capture.browser.placeholder":`https://example.com/article`,"capture.browser.paste":`붙여넣기`,"capture.browser.capture":`스캔하고 저장`,"capture.browser.success":`웹페이지 저장 요청됨`,"capture.pipeline.status":`처리 상태`,"capture.pipeline.growth":`Brain 성장`,"capture.pipeline.refresh":`기억 새로고침`,"capture.pipeline.description":`수집한 자료를 Lattice가 다시 확인해야 할 때 검색을 새로고침합니다.`,"capture.pipeline.rebuild":`검색 인덱스 다시 만들기`,"review.inbox.title":`검토함`,"review.inbox.description":`결정 대기 중인 자동화 제안입니다. 지금 실행은 승인 없이 미리보기만 수행합니다.`,"review.status.connected":`연결됨`,"review.status.unavailable":`사용 불가`,"review.inbox.loadError":`검토함을 불러올 수 없습니다.`,"review.inbox.unavailable":`지금은 검토 대기열을 사용할 수 없습니다.`,"review.inbox.empty":`검토할 항목 없음`,"review.inbox.emptySnoozed":`일시 중지된 항목은 해제되거나 다시 대기 상태가 될 때까지 여기에 표시됩니다.`,"review.inbox.emptyPending":`자동화가 검토 대기열을 사용하면 새 제안이 여기에 표시됩니다.`,"review.snoozed.detail":`해당 시점까지 대기열에서 빠져 있습니다. 일시 중지 해제 시 즉시 돌아옵니다.`,"review.unsnooze":`일시 중지 해제`,"review.runNow.detail":`지금 실행은 승인 없이 작업을 미리봅니다. 결과가 맞으면 승인하거나 기각하세요.`,"review.chat.detail":`Brain 대화에서 저장한 작업 초안입니다. 실제 후속 작업으로 남길 항목은 승인하고, 필요 없으면 기각하세요.`,"review.agent.detail":`Agent가 실행 결과에서 뽑은 후속 작업 후보입니다. 실제 작업으로 남길 항목은 승인하고, 필요 없으면 기각하세요.`,"review.actions.aria":`검토 작업`,"review.runNow":`지금 실행`,"review.regenerated":`다시 생성됨`,"review.executed":`실행됨`,"review.approve":`승인`,"review.snoozeDay":`하루 일시 중지`,"review.dismiss":`기각`,"review.feedback.open":`승인 또는 기각 전까지 항목은 열린 상태로 유지됩니다.`,"review.action.failed":`{action} 실패`,"review.filter.status.pending":`대기`,"review.filter.status.snoozed":`일시 중지`,"review.filter.status.all":`전체`,"review.filter.status.approved":`승인됨`,"review.filter.status.dismissed":`기각됨`,"review.filter.source.all":`전체 출처`,"review.filter.source.workflow_run":`워크플로`,"review.filter.source.trigger":`트리거`,"review.filter.source.kg_change_digest":`지식 요약`,"review.filter.source.chat_followup":`Brain 대화`,"review.filter.source.agent_followup":`Agent 후속 작업`,"review.filter.source.change_proposal":`변경 제안`,"review.proposal.detail":`Agent가 기존 파일을 바꾸려는 변경 제안입니다. 승인하면 검토한 내용 그대로 적용되고, 거절하면 아무것도 바뀌지 않습니다.`,"review.proposal.badge":`변경 제안 {count}건 대기`,"review.proposal.rejectReason":`거절 사유 (선택)`,"review.source.workflow_run":`워크플로 실행`,"review.source.trigger":`트리거`,"review.source.kg_change_digest":`지식 요약`,"review.source.chat_followup":`Brain 대화`,"review.source.agent_followup":`Agent 후속 작업`,"review.source.change_proposal":`변경 제안`,"review.source.automation":`자동화`,"review.itemStatus.pending":`검토 대기`,"review.itemStatus.snoozed":`일시 중지`,"review.itemStatus.approved":`승인됨`,"review.itemStatus.dismissed":`기각됨`,"review.snoozed.badge":`일시 중지됨`,"review.snoozed.until":`{value}까지 일시 중지`,"review.summary.tool":`사용 도구`,"review.summary.proposedBy":`제안한 주체`,"review.risk.read":`안전한 읽기`,"review.risk.write":`파일을 수정함`,"review.risk.write_scoped":`작업 폴더 안에서만 수정`,"review.risk.exec":`명령을 실행함`,"review.risk.destructive":`내용을 지울 수 있음`,"review.change.read":`읽기만 함`,"review.change.additive":`새 내용 추가`,"review.change.mutation":`기존 내용 수정`,"review.change.destructive":`내용 삭제`,"review.change.exec":`동작 실행`,"review.technical.title":`기술 정보`,"review.feedback.error":`요청을 처리하지 못했어요. 잠시 후 다시 시도해 주세요.`,"proposals.diff.header":`제안된 변경`,"proposals.diff.more":`{count}줄 더 있음`,"proposals.error":`변경 제안을 불러오지 못했어요. 로컬 Lattice 서비스가 실행 중인지 확인해 주세요.`,"common.retry":`다시 시도`,"common.error.unknown":`알 수 없는 문제가 생겼어요. 잠시 후 다시 시도해 주세요.`,"api.error.timeout":`응답이 너무 오래 걸려 요청을 멈췄어요. 로컬 Lattice 서비스가 실행 중인지 확인해 주세요.`,"api.error.unreachable":`로컬 Lattice 서비스에 연결할 수 없어요. 앱이 실행 중인지 확인해 주세요.`,"api.error.request":`요청을 처리하지 못했어요. (오류 {status})`,"intelligence.loadError":`지금은 브레인 상태를 불러올 수 없어요. 잠시 후 다시 시도해 주세요.`,"act.kicker":`작업`,"act.title":`Lattice에 맡길 일을 적어주세요.`,"act.copy":`목표와 완료 조건을 알려주면 진행 과정을 보여드리고, 중요한 변경은 실행 전에 확인받습니다.`,"act.goal.title":`새 작업`,"act.goal.description":`원하는 결과와 완료 조건을 자연스럽게 적어주세요.`,"act.goal.placeholder":`예: 이번 주 회의 자료를 읽고 결정 사항과 담당자별 할 일을 정리해줘`,"act.goal.start":`작업 시작`,"act.goal.needsModel":`AI 모델 준비하기`,"act.goal.modelRequired":`작업을 시작하려면 먼저 AI 모델을 준비해 주세요.`,"act.goal.safety":`중요한 변경은 실행하기 전에 항상 확인받습니다.`,"act.goal.completed":`Agent run 완료 — 결과가 Brain 기억과 그래프에 합성됨`,"act.goal.brainSaved":`Brain에 합성 메모리가 추가되었습니다.`,"act.tab.goals":`목표`,"act.tab.runs":`실행`,"act.tab.review":`검토함`,"act.tab.recipes":`레시피`,"act.suggest.title":`나를 위한 자동화 제안`,"act.suggest.subtitle":`자주 하는 질문과 연결된 폴더를 보고 Brain이 자동화를 제안합니다.`,"act.suggest.empty":`아직 제안이 없습니다. 질문을 하고 폴더를 연결할수록 제안이 생깁니다.`,"act.suggest.scanned":`최근 질문 {count}개 분석`,"act.suggest.question":`반복 질문`,"act.suggest.folder":`연결된 폴더`,"act.suggest.evidence.count":`{count}번 반복해서 물어보셨어요`,"act.suggest.evidence.folder":`파일 {count}개가 Brain에 담긴 폴더예요`,"act.suggest.cadence.daily":`매일 자동 초안`,"act.suggest.cadence.newKnowledge":`새 지식이 들어올 때`,"act.suggest.install":`자동화 만들기`,"act.suggest.installing":`만드는 중...`,"act.suggest.installed":`초안 생성됨 — 검토 후 켜세요`,"act.suggest.note":`제안을 수락하면 꺼진 초안으로 만들어지고, 검토 후 직접 켤 때만 실행됩니다.`,"act.automation.title":`기억 기반 자동화`,"act.automation.local":`로컬에서만 실행`,"act.automation.consent":`초안 확인 후 활성화`,"act.automation.create":`검토 가능한 자동화 초안 만들기`,"act.automation.creating":`초안 만드는 중...`,"act.automation.created":`✓ 자동화 초안 생성됨`,"act.automation.enable":`이 기억 자동화 활성화`,"act.automation.enabling":`자동화 연결 중...`,"act.automation.active":`✓ 기억 자동화 작동 중`,"act.automation.draftReady":`초안이 준비됐습니다. 내용을 확인한 뒤 활성화하세요.`,"act.automation.enableHint":`초안이 안전하게 꺼진 상태입니다. 선택하면 Brain 이벤트에 연결됩니다.`,"act.automation.activeHint":`새 기억이 들어오면 결과를 검토함에 초안으로 만듭니다.`,"act.installed.title":`설치된 자동화`,"act.installed.subtitle":`설치한 자동화를 바로 시험해 보고, 마지막 실행 결과를 확인하세요.`,"act.installed.empty":`아직 설치된 자동화가 없습니다. 위의 제안이나 레시피로 만들어 보세요.`,"act.installed.runNow":`지금 한 번 실행`,"act.installed.dryRunning":`모의 실행 중...`,"act.installed.runLive":`실제로 한 번 실행`,"act.installed.liveRunning":`실행 중...`,"act.installed.dryRunHint":`먼저 부작용 없는 모의 실행으로 무엇이 실행될지 보여드리고, 그다음에 실제 실행을 열어드립니다.`,"act.installed.lastRun":`마지막 실행`,"act.installed.noRuns":`아직 실행 기록이 없습니다`,"act.installed.mode.dry":`모의`,"act.installed.mode.live":`실제`,"act.installed.failedReview":`실행이 실패해 검토함에 추가했습니다.`,"act.installed.onBadge":`켜짐`,"act.installed.draftBadge":`초안(꺼짐)`,"act.tab.safeguards":`보호 장치`,"act.tab.permissions":`권한`,"act.tab.hooks":`훅`,"act.tab.tools":`도구`,"admin.back":`Brain`,"admin.aria.console":`Lattice 관리자`,"admin.kicker":`분리된 관리자 작업공간`,"admin.title":`Admin Console`,"admin.body":`사용자, 로그, 보안, Brain 상태는 일반 사용자 화면과 분리됩니다.`,"admin.overview":`관리 개요`,"admin.metric.users":`사용자`,"admin.metric.logs":`최근 로그`,"admin.metric.security":`보안`,"admin.metric.index":`Brain 인덱스`,"admin.status.ready":`준비됨`,"admin.status.unavailable":`사용 불가`,"admin.status.indexed":`인덱싱됨`,"admin.status.unknown":`알 수 없음`,"admin.panel.users":`사용자 디렉터리`,"admin.panel.people":`사람`,"admin.panel.roles":`역할 권한`,"admin.panel.access":`접근`,"admin.panel.logs":`활동 로그`,"admin.panel.audit":`감사`,"admin.panel.securityEvents":`보안 이벤트`,"admin.panel.protection":`보호`,"admin.panel.brainOps":`Brain 운영`,"admin.panel.maintenance":`유지보수`,"admin.panel.runtimeTrust":`런타임 신뢰도`,"admin.panel.contracts":`계약`,"admin.empty.users":`관리 API가 보고한 사용자가 없습니다.`,"admin.empty.roles":`보고된 역할 매트릭스가 없습니다.`,"admin.empty.audit":`최근 감사 이벤트가 없습니다.`,"admin.empty.security":`보고된 보안 이벤트가 없습니다.`,"admin.fallback.localUser":`로컬 사용자`,"admin.fallback.member":`멤버`,"admin.fallback.role":`역할`,"admin.fallback.noCaps":`권한 없음`,"admin.filters.label":`감사 로그 필터`,"admin.filters.search":`로그 검색`,"admin.filters.searchAria":`감사 로그 검색`,"admin.filters.severityAria":`심각도별 필터`,"admin.filters.all":`모든 심각도`,"admin.filters.informational":`정보`,"admin.filters.notice":`알림`,"admin.filters.warning":`경고`,"admin.filters.high":`높음`,"admin.filters.matched":`{count}개 일치`,"admin.brain.summaryFallback":`로컬 Brain 서비스는 사용자 대화와 분리되어 있습니다.`,"admin.brain.rebuilding":`재구성 중`,"admin.brain.rebuild":`인덱스 재구성`,"admin.runtime.agent":`AgentRuntime`,"admin.runtime.tools":`ToolRegistry`,"admin.runtime.readyDetail":`실행 preview와 실제 실행이 준비되었습니다.`,"admin.runtime.blockedFallback":`실행 전 preview가 차단 사유를 반환합니다.`,"admin.runtime.aligned":`정렬됨`,"admin.runtime.drift":`점검 필요`,"admin.runtime.toolCounts":`등록 {registered} · 정책 {governed} · 설명 {described}`,"admin.runtime.mode":`mode {mode}`,"admin.runtime.execution":`exec {mode}`,"admin.runtime.health":`health {status}`,"admin.policy.fallback":`정책`,"admin.policy.quiet":`정책 API 대기 중`,"admin.retention.days":`{days}일 보관`,"admin.retention.detail":`{events}개 보관 · {candidates}개 내보내기/정리 검토 가능`,"admin.log.event":`이벤트`,"admin.log.system":`시스템`,"admin.log.recently":`최근`,"admin.source.loading":`불러오는 중`,"admin.source.live":`라이브`,"admin.index.ready":`인덱스 상태 준비됨`,"act.panel.readiness":`준비 상태`,"act.panel.agentTeam":`Agent 팀`,"act.agentRole.researcher":`조사 담당`,"act.agentRole.researcher.detail":`목표에 필요한 자료와 기억, 연결을 먼저 모읍니다.`,"act.agentRole.planner":`계획 담당`,"act.agentRole.planner.detail":`목표를 순서가 있는, 검토 가능한 단계로 나눕니다.`,"act.agentRole.executor":`실행 담당`,"act.agentRole.executor.detail":`계획된 각 단계를 도구와 워크플로로 실행합니다.`,"act.agentRole.reviewer":`검토 담당`,"act.agentRole.reviewer.detail":`실행 결과를 검토해 승인·반려·재시도를 정합니다.`,"act.agentRole.release":`마무리 담당`,"act.agentRole.release.detail":`결과를 정리하고 최종 요약을 남깁니다.`,"act.agent.namePlaceholder":`새 사용자 Agent 이름`,"act.panel.capabilities":`Agent가 할 수 있는 일`,"act.recipe.daily-memory-digest":`오늘의 기억 정리`,"act.recipe.daily-memory-digest.summary":`오늘 새로 쌓인 기억을 짧은 검토 초안으로 모읍니다.`,"act.recipe.daily-memory-digest.value":`대화를 뒤지지 않아도 Brain이 오늘 무엇을 기억했는지 알 수 있어요.`,"act.recipe.weekly-project-review":`주간 프로젝트 점검`,"act.recipe.weekly-project-review.summary":`프로젝트 맥락을 주간 점검 초안으로 정리합니다.`,"act.recipe.weekly-project-review.value":`한 주를 다시 설명하지 않고도 프로젝트를 이어갈 수 있어요.`,"act.recipe.follow-up-radar":`후속 작업 살피기`,"act.recipe.follow-up-radar.summary":`새 기억이 저장될 때 이어서 할 일이 있는지 찾습니다.`,"act.recipe.follow-up-radar.value":`약속한 일을 잊지 않도록 Brain이 먼저 짚어 줍니다.`,"act.cadence.daily":`매일`,"act.cadence.weekly":`매주`,"act.cadence.when new memory is saved":`새 기억이 저장될 때`,"act.creates.memory digest":`기억 요약`,"act.creates.decision summary":`결정 요약`,"act.creates.next-action suggestions":`다음 행동 제안`,"act.creates.project checkpoint":`프로젝트 점검`,"act.creates.risk list":`위험 목록`,"act.creates.open-question list":`미해결 질문 목록`,"act.creates.follow-up suggestions":`후속 작업 제안`,"act.panel.agentRuns":`Agent 실행`,"act.panel.workflowRuns":`워크플로 실행`,"act.panel.approvalInbox":`승인함`,"act.workflow.graph":`워크플로 그래프`,"act.workflow.graphDetail":`저장된 워크플로를 간단한 지도로 확인합니다.`,"act.panel.definitions":`정의`,"act.workflow.namePlaceholder":`워크플로 이름`,"act.workflow.importPlaceholder":`워크플로 내보내기 내용을 붙여넣으세요`,"act.workflow.created":`워크플로를 만들었습니다`,"act.workflow.imported":`워크플로를 가져왔습니다`,"act.panel.triggers":`자동화 트리거`,"act.panel.safeguards":`보호 장치`,"act.hooks.detailed":`상세 훅 로그`,"act.hooks.detailedHint":`훅 실행 로그와 수동 진단 제어가 필요하면 고급 모드로 전환하세요.`,"act.panel.hooks":`훅`,"act.panel.hookRuns":`훅 실행 로그`,"act.hooks.runManual":`수동 훅 실행`,"act.hooks.runManualHint":`훅을 명시적으로 실행하고 기록된 결과를 검토합니다.`,"act.panel.permissions":`작업 권한`,"library.model.hfVerified":`Hugging Face 검증 완료(설정과 토크나이저 확인)`,"library.model.shortListHint":`가장 안전한 후보만 표시합니다. 전체 레지스트리, 런타임 세부 정보, 라이선스와 안전 참고 사항은 고급 모드에서 확인하세요.`,"library.model.noneChecked":`아직 점검한 모델이 없습니다`,"library.model.noneCheckedHint":`사용하기 전에 모델을 불러와 응답 가능 여부를 확인하세요.`,"library.skills.installed":`설치된 스킬`,"library.skills.marketplace":`스킬 마켓`,"library.connector.recommend":`연결 추천`,"library.connector.recommendHint":`연결하려는 대상을 설명하면 Lattice가 적합한 연결을 추천합니다.`,"library.connector.recommendDone":`연결 추천을 완료했습니다`,"library.market.templates":`템플릿`,"library.market.installedPlugins":`설치된 플러그인`,"library.market.pluginDirectory":`플러그인 디렉터리`,"library.market.templateInstall":`템플릿 설치`,"library.market.templateInstallHint":`재사용 가능한 작업공간 패턴에서 시작하세요.`,"system.account.profile":`프로필`,"system.account.title":`계정`,"system.account.detail":`로그인하거나 로컬 계정을 만들고 프로필을 최신 상태로 유지합니다.`,"system.account.email":`이메일`,"system.account.password":`현재 비밀번호`,"system.account.name":`이름`,"system.account.nickname":`닉네임`,"system.account.newPassword":`새 비밀번호`,"system.account.save":`프로필 저장`,"system.account.changePassword":`비밀번호 변경`,"system.account.requestDone":`계정 요청을 완료했습니다`,"system.account.signInOptions":`로그인 옵션`,"system.workspace.yours":`내 작업공간`,"system.workspace.organizations":`조직과 초대`,"system.workspace.organizationsHint":`지식을 추가하기 전에 작업공간을 만들거나 참여하세요.`,"system.workspace.orgPlaceholder":`새 조직 이름`,"system.workspace.createOrg":`조직 만들기`,"system.workspace.inviteeEmail":`초대할 이메일`,"system.workspace.createInvite":`초대 만들기`,"system.workspace.inviteToken":`초대 토큰`,"system.workspace.acceptInvite":`초대 수락`,"system.workspace.invitations":`초대`,"system.snapshots.title":`스냅샷`,"system.snapshots.actions":`스냅샷 작업`,"system.snapshots.actionsHint":`체크포인트를 만들고 시간에 따른 변경을 비교합니다.`,"system.snapshots.namePlaceholder":`스냅샷 이름`,"system.snapshots.create":`스냅샷 만들기`,"system.snapshots.beforeId":`이전 ID`,"system.snapshots.afterId":`이후 ID`,"system.snapshots.compareDone":`스냅샷 비교를 완료했습니다`,"system.snapshots.timeline":`타임머신`,"system.activity.feed":`실시간 피드`,"system.activity.presence":`접속 현황`,"system.network.identity":`기기 신원`,"system.network.pair":`기기 연결`,"system.network.pairHint":`신뢰하는 기기를 연결해 작업공간을 교환합니다.`,"system.network.deviceName":`기기 이름`,"system.network.address":`신뢰하는 기기 주소`,"system.network.publicKey":`신뢰하는 공개 키`,"system.network.pairDone":`기기 연결 요청을 완료했습니다`,"system.network.peers":`연결된 기기`,"system.backup.health":`백업 상태`,"system.archive.detail":`암호화된 휴대용 Brain 파일을 만들고 검증하거나 복원 전에 미리 확인합니다.`,"system.archive.exportPath":`내보내기 경로(선택)`,"system.archive.restorePath":`검사 또는 복원할 아카이브 경로`,"system.archive.passphrase":`아카이브 암호문`,"system.archive.export":`아카이브 내보내기`,"system.archive.restoreDryRun":`복원 미리 실행`,"system.archive.importDryRun":`가져오기 미리 실행`,"system.archive.confirmRestore":`복원 확인`,"system.archive.confirmImport":`가져오기 확인`,"system.archive.requestDone":`아카이브 요청을 완료했습니다`,"system.scale.title":`확장 모드`,"system.scale.detail":`선택형 고급 저장소입니다. 로컬 SQLite가 계속 기본값입니다.`,"system.scale.dsn":`Postgres 연결 문자열`,"system.scale.schema":`데이터베이스 스키마`,"system.scale.dockerPlan":`Docker 계획`,"system.scale.dockerConsent":`Docker 시작 동의`,"system.scale.dockerStart":`Docker 시작`,"system.scale.migrationPlan":`마이그레이션 계획`,"system.scale.dockerDone":`Docker 설정 요청을 완료했습니다`,"system.scale.migrationDone":`마이그레이션 계획을 완료했습니다`,"system.computerMemory.title":`컴퓨터 메모리`,"system.presence.empty":`활성 접속 없음`,"system.presence.emptyDetail":`현재 보고된 실시간 사용자나 클라이언트가 없습니다.`,"system.device.thisMac":`이 Mac`,"system.device.thisMacDetail":`신뢰하는 다른 기기를 연결하면 이 기기가 로컬 작업공간 교환에 참여할 수 있습니다.`,"system.storage.sqlite":`SQLite`,"system.storage.vector":`벡터 검색`,"system.storage.postgres":`Postgres`,"system.hardening.startup":`시작`,"system.hardening.startupDetail":`Lattice는 기본적으로 로컬에서 시작하며 네트워크 접근이 활성화되면 알립니다.`,"system.hardening.integrations":`통합`,"system.hardening.integrationsDetail":`외부 통합은 사용자가 명시적으로 활성화할 때까지 꺼져 있습니다.`,"system.hardening.identity":`기기 신원`,"system.hardening.permissions":`권한`,"system.hardening.permissionsDetail":`내보내기, 가져오기와 파괴적 복원 권한을 관리자 상태에서 확인할 수 있습니다.`,"system.admin.controls":`관리자 제어`,"system.admin.controlsDetail":`사용자, 감사 이벤트, 정책, 보안 상태와 비공개 네트워크 진단을 검토하려면 관리자 모드로 전환하세요.`,"system.admin.summary":`관리자 요약`,"system.admin.users":`사용자`,"system.admin.audit":`감사`,"system.admin.roles":`역할`,"system.admin.policies":`정책`,"system.admin.hardening":`제품 강화`,"system.admin.security":`보안 개요`,"system.admin.vpc":`비공개 VPC`,"system.admin.communityUnavailable":`Community에서 비활성화된 기능은 사용 불가 상태로 정확히 표시됩니다.`,"act.runtime.modelUnavailable":`Agent를 실행하려면 LLM 기반 모델을 먼저 불러오세요.`,"act.agent.register":`등록`,"act.approval.request":`승인 요청 {index}`,"act.action.approve":`승인`,"act.action.deny":`거부`,"act.action.stop":`중지`,"act.action.resumeApproved":`승인 후 재개`,"act.action.resumeDenied":`거부 후 재개`,"act.status.unknown":`알 수 없음`,"act.status.draft":`초안`,"act.workflow.defaultName":`수동 워크플로`,"act.workflow.fallbackName":`워크플로 {index}`,"act.workflow.create":`만들기`,"act.workflow.import":`가져오기`,"act.workflow.run":`실행`,"act.workflow.export":`내보내기`,"act.workflow.manualStart":`수동 시작`,"act.workflow.output":`결과`,"act.workflow.completed":`워크플로 완료`,"act.hooks.runAll":`모든 수동 훅 실행`,"library.model.needsDownloadFirst":`아직 이 컴퓨터에 모델 파일이 없습니다. 받으면 바로 쓸 수 있어요.`,"library.model.sourceVerified":`출처 확인됨`,"library.runtime.appleSilicon":`Apple Silicon Mac`,"library.runtime.thisComputer":`이 컴퓨터`,"library.embedding.state.production":`의미 검색 사용 중`,"library.embedding.state.fallback":`기본 검색 사용 중 (의미 모델 없음)`,"library.embedding.state.unknown":`확인 필요`,"library.model.notReady":`이 모델은 아직 불러올 준비가 되지 않았습니다.`,"library.model.localFormat":`이 로컬 모델 형식`,"library.model.localSupport":`로컬 모델 지원`,"library.model.support":`모델 지원`,"library.model.format":`모델 형식`,"library.model.ramRecommended":`약 {ram}GB RAM 권장`,"library.model.needsAttention":`확인 필요`,"library.btn.needsConsent":`위의 다운로드 허용에 먼저 체크해 주세요.`,"library.model.status.loaded":`사용 중`,"library.model.status.ready":`바로 사용 가능`,"library.model.status.download_required":`다운로드 필요`,"library.model.status.unavailable":`지금은 사용 불가`,"library.model.status.unsupported":`이 컴퓨터에서 미지원`,"library.model.status.unknown":`확인 필요`,"library.model.recommended":`추천`,"library.model.multimodal":`멀티모달`,"library.model.local":`로컬 모델`,"library.model.downloadSize":`다운로드: {size}`,"library.model.downloadRequired":`필요`,"library.model.noDownload":`지금은 다운로드 불필요`,"library.model.internetDuringDownload":`다운로드 중에만 인터넷 사용`,"library.model.runsLocally":`불러온 뒤 로컬에서 실행`,"library.model.attentionBeforeLoad":`불러오기 전에 확인이 필요합니다`,"library.model.compatiblePath":`호환되는 실행 경로를 사용할 수 있습니다`,"library.model.runtimeFallback":`대체 런타임을 사용할 수 있습니다`,"library.model.compatibilityFallback":`지원되지 않는 모델로 표시하기 전에 Lattice가 호환되는 로컬 실행 경로를 시도합니다.`,"library.model.license":`라이선스: {license}`,"library.model.loaded":`불러옴`,"library.models.embedding.advanced":`임베딩 제공자`,"library.models.validationAdvanced":`모델 검증`,"library.model.loadedName":`불러온 모델`,"library.model.checked":`점검됨`,"library.model.compatibleAlternative":`호환 대안`,"library.runtime.engine":`엔진`,"library.runtime.noLoaded":`불러온 로컬 모델 없음`,"library.runtime.state":`런타임 상태`,"library.runtime.cacheStorage":`캐시/저장소: {path}`,"library.model.setupAttention":`모델 설정을 확인해야 합니다.`,"library.skills.disable":`비활성화`,"library.skills.enable":`활성화`,"library.skills.install":`설치`,"library.connector.connections":`도구 연결`,"library.connector.mcpTools":`MCP 도구`,"library.connector.recommendAction":`추천`,"library.market.installTemplate":`{name} 설치`,"library.value.local":`로컬`,"library.value.ready":`준비됨`,"library.value.idle":`대기`,"library.value.detected":`감지됨`,"system.account.login":`로그인`,"system.account.register":`가입`,"system.account.logout":`로그아웃`,"system.workspace.use":`사용`,"system.workspace.activate":`활성화`,"system.workspace.archive":`보관`,"system.snapshots.defaultName":`데스크톱 체크포인트`,"system.snapshots.export":`내보내기`,"system.snapshots.mergeRestore":`병합 복원`,"system.snapshots.compare":`비교`,"system.network.pushWorkspace":`작업공간 보내기`,"system.network.unpair":`연결 해제`,"system.panel.serverHealth":`서버 상태`,"system.panel.hostTelemetry":`호스트 측정값`,"system.panel.brainStorage":`Brain 저장소`,"system.archive.title":`.latticebrain 이동 및 복원`,"system.archive.inspect":`검사`,"system.archive.verify":`검증`,"system.archive.restore":`복원`,"system.archive.import":`가져오기`,"system.computerMemory.enable":`메모리 활성화`,"system.computerMemory.disable":`메모리 비활성화`,"system.value.notReported":`보고되지 않음`,"system.value.noneReported":`보고된 항목 없음`,"system.value.enabled":`활성화됨`,"system.value.disabled":`비활성화됨`,"system.value.reported":`보고됨`,"system.value.local":`로컬`,"system.value.configured":`구성됨`,"system.value.trusted":`신뢰됨`,"system.value.localIdentity":`로컬 신원`,"system.value.localDevice":`로컬 기기`,"system.value.identityKey":`신원 키`,"system.value.scaleMode":`확장 모드`,"system.value.available":`사용 가능`,"system.value.optional":`선택 사항`,"system.value.unavailable":`사용 불가`,"system.value.default":`기본값`,"system.value.notEnabled":`활성화되지 않음`,"system.value.no":`아니요`,"system.value.yes":`예`,"system.value.networkExposed":`네트워크 노출`,"system.value.localOnly":`로컬 전용`,"system.value.reviewRequired":`검토 필요`,"system.value.optIn":`사용자 선택`,"system.value.guarded":`보호됨`,"system.health.status":`상태`,"system.health.version":`버전`,"system.health.mode":`모드`,"system.health.port":`포트`,"system.storage.activeEngine":`활성 엔진`,"system.storage.sqliteDefault":`SQLite 기본값`,"system.storage.sqliteDetail":`로컬 Brain 저장소가 기본으로 활성화되어 있습니다.`,"system.storage.vectorDetail":`구성된 로컬 벡터 기능을 사용하거나 사용할 수 없는 이유를 표시합니다.`,"system.storage.postgresDetail":`Postgres 확장 모드는 선택 사항이며 로컬 사용에 필요하지 않습니다.`,"system.backup.available":`사용 가능`,"system.backup.backups":`백업`,"system.backup.encrypted":`암호화됨`,"system.backup.zip":`ZIP 백업`,"system.hardening.version":`버전`,"system.hardening.localOnly":`로컬 전용`,"system.hardening.storage":`저장소`,"system.hardening.backups":`백업`,"system.hardening.identityStorage":`로컬에 저장되며 서명된 번들 교환에 사용됩니다.`,"system.security.eventsToday":`오늘 이벤트`,"system.security.highRisk":`고위험`,"system.security.review":`검토`,"system.security.riskRate":`위험 비율`},en:{"library.kicker":`AI model`,"library.title":`Choose the AI Lattice will use.`,"library.body":`Start with a model recommended for this computer. You can switch later without losing saved memories.`,"library.tab.models":`Models`,"library.tab.skills":`Skills`,"library.tab.mcp":`Connections`,"library.tab.marketplace":`Marketplace`,"library.models.setup.title":`Choose a model`,"library.models.setup.desc":`We suggest a few light models first, tell you when internet or a download is needed, and never download anything without your consent.`,"library.models.embedding.basic":`Search by meaning`,"library.models.validation":`Model check`,"library.models.runtime.available":`A local model is ready`,"library.models.runtime.none":`No model loaded yet`,"library.runtime.computer":`Computer`,"library.runtime.loaded":`Loaded model`,"library.runtime.noneShort":`None`,"library.runtime.reload":`Reload`,"library.runtime.unload":`Unload`,"library.steps.aria":`Model setup progress`,"library.step.environment":`Environment check`,"library.step.recommend":`Recommended models`,"library.step.install":`Install`,"library.step.download":`Download`,"library.step.validate":`Check`,"library.step.ready":`Ready to use`,"library.step.done":`ready`,"library.step.pending":`pending`,"library.consent":`Allow Lattice to install a missing local model component or download model files for this action. Downloading uses the internet; running the model stays on this computer.`,"library.preparing":`Preparing model`,"library.panel.recommended.basic":`Recommended models`,"library.panel.recommended.other":`Recommended and advanced models`,"library.btn.preparing":`Preparing`,"library.btn.installLoad":`Install & use`,"library.btn.validateLoad":`Check & use`,"system.kicker":`Settings`,"system.title":`Make Lattice work your way.`,"system.body":`Manage your account, workspaces, appearance, privacy, and backups.`,"system.tab.account":`Account`,"system.tab.workspaces":`Spaces`,"system.tab.snapshots":`Backups`,"system.tab.activity":`History`,"system.tab.network":`Devices`,"system.tab.settings":`Settings`,"system.tab.admin":`Admin`,"system.permission.title":`Agent autonomy`,"system.permission.hint":`How far the agent may go without asking. Dangerous actions stay blocked in every setting.`,"system.permission.current":`Current setting`,"system.permission.apply":`Switch to this`,"system.permission.ack":`I understand the risk and want this setting.`,"system.permission.guards":`Blocked in every setting`,"system.permission.guards.detail":`Destructive actions, root/home path deletions, rm -rf / style commands, and binary overwrites that cannot be reviewed.`,"system.permission.risk.low":`Low`,"system.permission.risk.medium":`Medium`,"system.permission.risk.high":`High`,"system.network.title":`How far your knowledge travels`,"system.network.hint":`Your Brain always stays on this computer. This decides whether a minimal, related slice of it may go to a cloud model.`,"system.network.current":`Current setting`,"system.network.apply":`Switch to this`,"system.network.ack":`I understand what gets sent and want to allow cloud use.`,"system.network.guards":`Never sent, in any setting`,"system.network.guards.detail":`The knowledge graph itself, your original files, and backup archives. Memories marked sensitive, private, do-not-share, or local-only are left out even when cloud is allowed.`,"system.network.preview.title":`See what would be sent`,"system.network.preview.hint":`Check which memories a question would send before anything actually goes out.`,"system.network.preview.placeholder":`Type a question to check`,"system.network.preview.run":`Preview`,"system.network.preview.empty":`Nothing would be sent for this question.`,"system.network.preview.count":`{count} memories`,"system.network.preview.tokens":`about {tokens} tokens`,"system.network.preview.blocked":`This question would be refused — it exceeds the usage limit`,"system.network.preview.hold":`Keep this in`,"system.network.preview.release":`Allow again`,"system.network.preview.autoHeld":`Files from locations that hold passwords or keys are excluded automatically.`,"system.network.preview.localOnly":`You are on local only, so nothing is sent. Below is what would go out if you allowed cloud.`,"system.network.policy.title":`How cloud answers reach your memory`,"system.network.policy.autoCommit":`Save to memory without review`,"system.network.policy.autoCommitHint":`Off means anything the cloud finds waits in the Review Center as a proposal until you approve it.`,"system.network.policy.multimodal":`Send images and video too`,"system.network.policy.multimodalHint":`More leaves the machine than with text alone. Off by default.`,"system.network.budget":`Used this session`,"system.panel.appearance":`Appearance`,"system.panel.appearance.hint":`Applies to this browser only.`,"system.panel.detailLevel":`How much to show`,"system.panel.detailLevel.hint":`Choose how much detail each screen shows. Unrelated to light or dark.`,"system.theme.dark":`Dark`,"system.theme.light":`Light`,"system.panel.brainStatus":`Brain status`,"system.panel.readiness":`Computer readiness`,"system.stat.cpu":`CPU`,"system.stat.memory":`Memory`,"system.stat.gpu":`GPU memory`,"system.stat.localStatus":`Status`,"system.stat.ready":`ready`,"system.storage.title":`Where your memories live`,"system.storage.local.title":`Saved on this computer`,"system.storage.local.badge":`private`,"system.storage.local.detail":`Everything your Brain remembers is stored right here on your device — nothing leaves your computer unless you choose to share it.`,"system.storage.search.title":`Smart search`,"system.storage.search.on":`on`,"system.storage.search.pending":`getting ready`,"system.storage.search.detailOn":`Your Brain can find memories by meaning, not just exact words.`,"system.storage.search.detailPending":`Smart search turns on automatically once your first memories are indexed.`,"system.health.title":`Your Brain is running normally`,"system.health.ok":`all good`,"system.health.detail":`Running safely on this computer right now.`,"capture.tab.files":`Files`,"capture.tab.local":`Folders`,"capture.tab.browser":`Web`,"capture.tab.pipeline":`Flow`,"capture.kicker":`Sources`,"capture.title":`What should Lattice remember?`,"capture.body":`Add a file, folder, or webpage. Lattice keeps the source and can find it again in conversation.`,"capture.retry":`Retry`,"capture.files.title":`Add documents`,"capture.files.description":`Choose files and Lattice will prepare them for search and memory.`,"capture.files.drop":`Drop files or choose documents`,"capture.files.dropDetail":`Files you add are read into memory along with where they came from, so you can find them in conversation.`,"capture.files.uploaded":`Uploaded documents`,"capture.files.completed":`Saved files appear here. Linking them to related topics can take a moment longer.`,"capture.files.success":`Saved to memory`,"capture.files.queued":`Getting ready to save`,"capture.files.uploading":`Parsing and sending to Memory`,"capture.files.failed":`Ingest failed before it entered the Brain`,"capture.files.captured":`Captured with source metadata`,"capture.files.capturedWithNode":`Captured with source metadata · {node}`,"capture.local.title":`Connect a folder`,"capture.local.description":`Choose a folder and Lattice will scan it into the Brain.`,"capture.local.placeholder":`Folder path on this Mac`,"capture.local.choose":`Choose Folder`,"capture.local.choosing":`Choosing`,"capture.local.connect":`Scan and Connect`,"capture.local.success":`Folder scan requested`,"capture.local.pickUnavailable":`The folder picker could not open. Check desktop app permissions or type the path manually.`,"capture.local.emptyFolder":`No uploadable files were found in the selected folder.`,"capture.folderHealth.title":`Folder memory state`,"capture.folderHealth.coverage":`{percent}% remembered ({indexed}/{total})`,"capture.folderHealth.unknown":`Not scanned yet`,"capture.folderHealth.watching":`Changes are followed automatically`,"capture.folderHealth.failed":`{count} file(s) did not make it in`,"capture.folderHealth.vectorGlobal":`{count} item(s) are still being prepared for search across the whole index (not per folder)`,"capture.local.browserFolder":`Selected folder`,"capture.local.browserImporting":`Uploading folder files`,"capture.local.browserImportSuccess":`{folder} files entered the Brain.`,"capture.local.browserImportFailed":`Folder files could not enter the Brain.`,"capture.local.sources":`Connected sources`,"capture.local.access":`Folder access`,"capture.local.stop":`Stop {source}`,"capture.local.source":`source`,"capture.browser.title":`Save a web page`,"capture.browser.description":`Capture a page so Lattice can remember the useful parts.`,"capture.browser.placeholder":`https://example.com/article`,"capture.browser.paste":`Paste`,"capture.browser.capture":`Scan and Save`,"capture.browser.success":`Web page save requested`,"capture.pipeline.status":`Processing status`,"capture.pipeline.growth":`Brain growth`,"capture.pipeline.refresh":`Refresh memory`,"capture.pipeline.description":`Refresh search when you want Lattice to re-check captured material.`,"capture.pipeline.rebuild":`Rebuild retrieval index`,"review.inbox.title":`Review inbox`,"review.inbox.description":`Automation suggestions waiting for your decision. Run now previews without approving.`,"review.status.connected":`connected`,"review.status.unavailable":`unavailable`,"review.inbox.loadError":`Could not load review inbox`,"review.inbox.unavailable":`The review queue is not available right now.`,"review.inbox.empty":`Nothing to review`,"review.inbox.emptySnoozed":`Snoozed items will appear here until they are unsnoozed or become pending again.`,"review.inbox.emptyPending":`When automations opt into the review queue, new suggestions will appear here.`,"review.snoozed.detail":`This stays out of the pending queue until then. Unsnooze brings it back immediately.`,"review.unsnooze":`Unsnooze`,"review.runNow.detail":`Run now previews the action without approving it. Approve or dismiss when the result looks right.`,"review.chat.detail":`Saved from Brain chat. Approve it when it should become a real follow-up, or dismiss it when it is no longer useful.`,"review.agent.detail":`A follow-up candidate extracted from an Agent result. Approve it when it should become real work, or dismiss it when it is no longer useful.`,"review.actions.aria":`Review actions`,"review.runNow":`Run now`,"review.regenerated":`Regenerated`,"review.executed":`Executed`,"review.approve":`Approve`,"review.snoozeDay":`Snooze 1 day`,"review.dismiss":`Dismiss`,"review.feedback.open":`item stays open until you approve or dismiss.`,"review.action.failed":`{action} failed`,"review.filter.status.pending":`Pending`,"review.filter.status.snoozed":`Snoozed`,"review.filter.status.all":`All`,"review.filter.status.approved":`Approved`,"review.filter.status.dismissed":`Dismissed`,"review.filter.source.all":`All sources`,"review.filter.source.workflow_run":`Workflow`,"review.filter.source.trigger":`Trigger`,"review.filter.source.kg_change_digest":`Knowledge digest`,"review.filter.source.chat_followup":`Brain chat`,"review.filter.source.agent_followup":`Agent follow-up`,"review.filter.source.change_proposal":`Change proposals`,"review.proposal.detail":`The agent proposed changing an existing file. Approving applies exactly what you reviewed; rejecting changes nothing.`,"review.proposal.badge":`{count} change proposals pending`,"review.proposal.rejectReason":`Reason for rejecting (optional)`,"review.source.workflow_run":`Workflow run`,"review.source.trigger":`Trigger`,"review.source.kg_change_digest":`Knowledge digest`,"review.source.chat_followup":`Brain chat`,"review.source.agent_followup":`Agent follow-up`,"review.source.change_proposal":`Change proposal`,"review.source.automation":`Automation`,"review.itemStatus.pending":`Waiting for review`,"review.itemStatus.snoozed":`Snoozed`,"review.itemStatus.approved":`Approved`,"review.itemStatus.dismissed":`Dismissed`,"review.snoozed.badge":`Snoozed`,"review.snoozed.until":`Snoozed until {value}`,"review.summary.tool":`Tool`,"review.summary.proposedBy":`Proposed by`,"review.risk.read":`Safe read`,"review.risk.write":`Edits files`,"review.risk.write_scoped":`Edits inside the workspace only`,"review.risk.exec":`Runs a command`,"review.risk.destructive":`May remove content`,"review.change.read":`Read-only`,"review.change.additive":`Adds new content`,"review.change.mutation":`Edits existing content`,"review.change.destructive":`Removes content`,"review.change.exec":`Runs an action`,"review.technical.title":`Technical details`,"review.feedback.error":`We couldn't complete that action. Please try again in a moment.`,"proposals.diff.header":`Proposed change`,"proposals.diff.more":`{count} more lines`,"proposals.error":`We couldn't load your change proposals. Check that the local Lattice service is running.`,"common.retry":`Try again`,"common.error.unknown":`Something went wrong. Please try again in a moment.`,"api.error.timeout":`The request took too long, so we stopped waiting. Check that the local Lattice service is running.`,"api.error.unreachable":`We couldn't reach the local Lattice service. Make sure the app is running.`,"api.error.request":`The request couldn't be completed. (error {status})`,"intelligence.loadError":`We can't load your brain status right now. Please try again in a moment.`,"act.kicker":`Work`,"act.title":`Tell Lattice what you want done.`,"act.copy":`Share the goal and what done looks like. Lattice shows its progress and asks before any important change.`,"act.goal.title":`New task`,"act.goal.description":`Describe the result you want and what done should look like.`,"act.goal.placeholder":`Example: Read this week's meeting notes and organize decisions and action items by owner`,"act.goal.start":`Start task`,"act.goal.needsModel":`Set up an AI model`,"act.goal.modelRequired":`Set up an AI model before starting a task.`,"act.goal.safety":`Lattice always asks before making an important change.`,"act.goal.completed":`Agent run completed — result synthesized into Brain memory and graph`,"act.goal.brainSaved":`Synthetic Brain memory was added.`,"act.tab.goals":`Goals`,"act.tab.runs":`Runs`,"act.tab.review":`Review Center`,"act.tab.recipes":`Recipes`,"act.suggest.title":`Automation suggestions for you`,"act.suggest.subtitle":`Your Brain proposes automations from your recurring questions and connected folders.`,"act.suggest.empty":`No suggestions yet. Ask questions and connect folders to grow suggestions.`,"act.suggest.scanned":`analyzed {count} recent questions`,"act.suggest.question":`Recurring question`,"act.suggest.folder":`Connected folder`,"act.suggest.evidence.count":`you asked this {count} times`,"act.suggest.evidence.folder":`a folder with {count} files in your Brain`,"act.suggest.cadence.daily":`daily draft`,"act.suggest.cadence.newKnowledge":`when new knowledge arrives`,"act.suggest.install":`Create automation`,"act.suggest.installing":`Creating...`,"act.suggest.installed":`Draft created — review, then enable`,"act.suggest.note":`Accepting a suggestion creates a disabled draft; it only runs after you review and enable it.`,"act.automation.title":`Memory-based automation`,"act.automation.local":`local only`,"act.automation.consent":`review draft, then enable`,"act.automation.create":`Create reviewable automation draft`,"act.automation.creating":`Creating draft...`,"act.automation.created":`✓ Automation draft created`,"act.automation.enable":`Enable this memory automation`,"act.automation.enabling":`Connecting automation...`,"act.automation.active":`✓ Memory automation active`,"act.automation.draftReady":`The draft is ready. Review it, then enable it.`,"act.automation.enableHint":`This draft is safely disabled. Enable it to connect Brain events.`,"act.automation.activeHint":`New memory events now create a reviewable result in your inbox.`,"act.installed.title":`Installed automations`,"act.installed.subtitle":`Try an installed automation right away and see its last run result.`,"act.installed.empty":`No automations installed yet. Create one from the suggestions or recipes above.`,"act.installed.runNow":`Run now`,"act.installed.dryRunning":`Dry-running...`,"act.installed.runLive":`Run once for real`,"act.installed.liveRunning":`Running...`,"act.installed.dryRunHint":`A side-effect-free dry run shows what would happen first, then the real run unlocks.`,"act.installed.lastRun":`Last run`,"act.installed.noRuns":`No runs yet`,"act.installed.mode.dry":`dry run`,"act.installed.mode.live":`live`,"act.installed.failedReview":`The run failed and was added to your review inbox.`,"act.installed.onBadge":`On`,"act.installed.draftBadge":`Draft (off)`,"act.tab.safeguards":`Safeguards`,"act.tab.permissions":`Permissions`,"act.tab.hooks":`Hooks`,"act.tab.tools":`Tools`,"admin.back":`Brain`,"admin.aria.console":`Lattice Admin`,"admin.kicker":`Separate admin workspace`,"admin.title":`Admin Console`,"admin.body":`Users, logs, security, and Brain health stay out of the normal user experience.`,"admin.overview":`Admin overview`,"admin.metric.users":`Users`,"admin.metric.logs":`Recent logs`,"admin.metric.security":`Security`,"admin.metric.index":`Brain index`,"admin.status.ready":`Ready`,"admin.status.unavailable":`Unavailable`,"admin.status.indexed":`Indexed`,"admin.status.unknown":`Unknown`,"admin.panel.users":`User Directory`,"admin.panel.people":`People`,"admin.panel.roles":`Role Permissions`,"admin.panel.access":`Access`,"admin.panel.logs":`Activity Logs`,"admin.panel.audit":`Audit`,"admin.panel.securityEvents":`Security Events`,"admin.panel.protection":`Protection`,"admin.panel.brainOps":`Brain Operations`,"admin.panel.maintenance":`Maintenance`,"admin.panel.runtimeTrust":`Runtime Trust`,"admin.panel.contracts":`Contracts`,"admin.empty.users":`No users reported by the admin API.`,"admin.empty.roles":`No role matrix reported.`,"admin.empty.audit":`No recent audit events.`,"admin.empty.security":`No security events reported.`,"admin.fallback.localUser":`Local user`,"admin.fallback.member":`member`,"admin.fallback.role":`role`,"admin.fallback.noCaps":`No caps`,"admin.filters.label":`Audit log filters`,"admin.filters.search":`Search logs`,"admin.filters.searchAria":`Search audit logs`,"admin.filters.severityAria":`Filter by severity`,"admin.filters.all":`All severities`,"admin.filters.informational":`Informational`,"admin.filters.notice":`Notice`,"admin.filters.warning":`Warning`,"admin.filters.high":`High`,"admin.filters.matched":`{count} matched`,"admin.brain.summaryFallback":`Local Brain services are separated from user chat.`,"admin.brain.rebuilding":`Rebuilding`,"admin.brain.rebuild":`Rebuild index`,"admin.runtime.agent":`AgentRuntime`,"admin.runtime.tools":`ToolRegistry`,"admin.runtime.readyDetail":`Run preview and execution are ready.`,"admin.runtime.blockedFallback":`Run preview returns the blocking reason before execution.`,"admin.runtime.aligned":`Aligned`,"admin.runtime.drift":`Needs review`,"admin.runtime.toolCounts":`Registered {registered} · governed {governed} · described {described}`,"admin.runtime.mode":`mode {mode}`,"admin.runtime.execution":`exec {mode}`,"admin.runtime.health":`health {status}`,"admin.policy.fallback":`Policy`,"admin.policy.quiet":`Policy API quiet`,"admin.retention.days":`{days} day retention`,"admin.retention.detail":`{events} retained · {candidates} ready for export/prune review`,"admin.log.event":`Event`,"admin.log.system":`system`,"admin.log.recently":`recently`,"admin.source.loading":`Loading`,"admin.source.live":`Live`,"admin.index.ready":`Index status ready`,"act.panel.readiness":`Readiness`,"act.panel.agentTeam":`Agent team`,"act.agentRole.researcher":`Researcher`,"act.agentRole.researcher.detail":`Gathers the material, memory, and connections the goal needs.`,"act.agentRole.planner":`Planner`,"act.agentRole.planner.detail":`Breaks the goal into ordered, reviewable steps.`,"act.agentRole.executor":`Executor`,"act.agentRole.executor.detail":`Runs each planned step with tools and workflows.`,"act.agentRole.reviewer":`Reviewer`,"act.agentRole.reviewer.detail":`Reviews the work and approves, rejects, or retries it.`,"act.agentRole.release":`Finisher`,"act.agentRole.release.detail":`Wraps up and writes the final summary.`,"act.agent.namePlaceholder":`New custom agent name`,"act.panel.capabilities":`What agents can do`,"act.recipe.daily-memory-digest":`Daily memory digest`,"act.recipe.daily-memory-digest.summary":`Collects the day's new memories into a short review draft.`,"act.recipe.daily-memory-digest.value":`See what your Brain kept today without searching through chats.`,"act.recipe.weekly-project-review":`Weekly project review`,"act.recipe.weekly-project-review.summary":`Turns project context into a weekly checkpoint draft.`,"act.recipe.weekly-project-review.value":`Pick a project back up without explaining the week again.`,"act.recipe.follow-up-radar":`Follow-up radar`,"act.recipe.follow-up-radar.summary":`Looks for follow-up work whenever a new memory is saved.`,"act.recipe.follow-up-radar.value":`Your Brain raises what you promised before you forget it.`,"act.cadence.daily":`Daily`,"act.cadence.weekly":`Weekly`,"act.cadence.when new memory is saved":`When a new memory is saved`,"act.creates.memory digest":`Memory digest`,"act.creates.decision summary":`Decision summary`,"act.creates.next-action suggestions":`Next-action suggestions`,"act.creates.project checkpoint":`Project checkpoint`,"act.creates.risk list":`Risk list`,"act.creates.open-question list":`Open-question list`,"act.creates.follow-up suggestions":`Follow-up suggestions`,"act.panel.agentRuns":`Agent runs`,"act.panel.workflowRuns":`Workflow runs`,"act.panel.approvalInbox":`Approval inbox`,"act.workflow.graph":`Workflow graph`,"act.workflow.graphDetail":`See your saved workflows as a simple map.`,"act.panel.definitions":`Definitions`,"act.workflow.namePlaceholder":`Workflow name`,"act.workflow.importPlaceholder":`Paste a workflow export`,"act.workflow.created":`Workflow created`,"act.workflow.imported":`Workflow imported`,"act.panel.triggers":`Automation triggers`,"act.panel.safeguards":`Safeguards`,"act.hooks.detailed":`Detailed hook logs`,"act.hooks.detailedHint":`Switch to Advanced when you need hook run logs and manual diagnostic controls.`,"act.panel.hooks":`Hooks`,"act.panel.hookRuns":`Hook run log`,"act.hooks.runManual":`Run manual hooks`,"act.hooks.runManualHint":`Trigger hooks deliberately and review the recorded result.`,"act.panel.permissions":`Action permissions`,"library.model.hfVerified":`HF verified (config and tokenizer present)`,"library.model.shortListHint":`Showing the safest short list. Switch to Advanced for the full registry, runtime details, licenses, and safety notes.`,"library.model.noneChecked":`No model checked yet`,"library.model.noneCheckedHint":`Load a model to confirm it can answer before you start using it.`,"library.skills.installed":`Installed skills`,"library.skills.marketplace":`Skill marketplace`,"library.connector.recommend":`Recommend connector`,"library.connector.recommendHint":`Describe what you want to connect and Lattice will suggest a connector.`,"library.connector.recommendDone":`Recommendation completed`,"library.market.templates":`Templates`,"library.market.installedPlugins":`Installed plugins`,"library.market.pluginDirectory":`Plugin directory`,"library.market.templateInstall":`Template install`,"library.market.templateInstallHint":`Start from a reusable workspace pattern.`,"system.account.profile":`Profile`,"system.account.title":`Account`,"system.account.detail":`Sign in, create a local account, and keep your profile current.`,"system.account.email":`email`,"system.account.password":`current password`,"system.account.name":`name`,"system.account.nickname":`nickname`,"system.account.newPassword":`new password`,"system.account.save":`Save profile`,"system.account.changePassword":`Change password`,"system.account.requestDone":`Account request completed`,"system.account.signInOptions":`Sign-in options`,"system.workspace.yours":`Your workspaces`,"system.workspace.organizations":`Organizations and invitations`,"system.workspace.organizationsHint":`Create or join a workspace before adding knowledge.`,"system.workspace.orgPlaceholder":`New organization name`,"system.workspace.createOrg":`Create organization`,"system.workspace.inviteeEmail":`invitee email`,"system.workspace.createInvite":`Create invitation`,"system.workspace.inviteToken":`invitation token`,"system.workspace.acceptInvite":`Accept invitation`,"system.workspace.invitations":`Invitations`,"system.snapshots.title":`Snapshots`,"system.snapshots.actions":`Snapshot actions`,"system.snapshots.actionsHint":`Create checkpoints and compare changes over time.`,"system.snapshots.namePlaceholder":`snapshot name`,"system.snapshots.create":`Create snapshot`,"system.snapshots.beforeId":`before id`,"system.snapshots.afterId":`after id`,"system.snapshots.compareDone":`Snapshot comparison completed`,"system.snapshots.timeline":`Time machine`,"system.activity.feed":`Realtime feed`,"system.activity.presence":`Presence`,"system.network.identity":`Device identity`,"system.network.pair":`Pair device`,"system.network.pairHint":`Pair a trusted device for workspace exchange.`,"system.network.deviceName":`device name`,"system.network.address":`trusted device address`,"system.network.publicKey":`trusted public key`,"system.network.pairDone":`Peer pairing request completed`,"system.network.peers":`Peers`,"system.backup.health":`Backup health`,"system.archive.detail":`Create an encrypted portable brain file, verify one, or preview a restore before applying it.`,"system.archive.exportPath":`export path (optional)`,"system.archive.restorePath":`archive path for inspect/restore`,"system.archive.passphrase":`archive passphrase`,"system.archive.export":`Export archive`,"system.archive.restoreDryRun":`Restore dry run`,"system.archive.importDryRun":`Import dry run`,"system.archive.confirmRestore":`Confirm restore`,"system.archive.confirmImport":`Confirm import`,"system.archive.requestDone":`Archive request completed`,"system.scale.title":`Scale mode`,"system.scale.detail":`Optional advanced storage. Local SQLite remains the default.`,"system.scale.dsn":`Postgres connection string`,"system.scale.schema":`database schema`,"system.scale.dockerPlan":`Docker plan`,"system.scale.dockerConsent":`Consent to start Docker`,"system.scale.dockerStart":`Start Docker`,"system.scale.migrationPlan":`Plan migration`,"system.scale.dockerDone":`Docker setup request completed`,"system.scale.migrationDone":`Migration plan completed`,"system.computerMemory.title":`Computer memory`,"system.presence.empty":`No active presence`,"system.presence.emptyDetail":`No live collaborators or realtime clients are currently reported.`,"system.device.thisMac":`This Mac`,"system.device.thisMacDetail":`This device can participate in local workspace exchange when you pair another trusted device.`,"system.storage.sqlite":`SQLite`,"system.storage.vector":`Vector search`,"system.storage.postgres":`Postgres`,"system.hardening.startup":`Startup`,"system.hardening.startupDetail":`Lattice starts locally by default and reports when network access is enabled.`,"system.hardening.integrations":`Integrations`,"system.hardening.integrationsDetail":`External integrations remain disabled until the user explicitly enables them.`,"system.hardening.identity":`Device identity`,"system.hardening.permissions":`Permissions`,"system.hardening.permissionsDetail":`Export, import, and destructive restore permissions are surfaced through admin status.`,"system.admin.controls":`Admin controls`,"system.admin.controlsDetail":`Switch to Admin mode to review users, audit events, policies, security posture, and private networking diagnostics.`,"system.admin.summary":`Admin summary`,"system.admin.users":`Users`,"system.admin.audit":`Audit`,"system.admin.roles":`Roles`,"system.admin.policies":`Policies`,"system.admin.hardening":`Product hardening`,"system.admin.security":`Security overview`,"system.admin.vpc":`Private VPC`,"system.admin.communityUnavailable":`Community-disabled features remain honest unavailable states.`,"act.runtime.modelUnavailable":`Load an LLM-backed model before running agents.`,"act.agent.register":`Register`,"act.approval.request":`Approval request {index}`,"act.action.approve":`Approve`,"act.action.deny":`Deny`,"act.action.stop":`Stop`,"act.action.resumeApproved":`Resume approved`,"act.action.resumeDenied":`Resume denied`,"act.status.unknown":`unknown`,"act.status.draft":`draft`,"act.workflow.defaultName":`Manual workflow`,"act.workflow.fallbackName":`Workflow {index}`,"act.workflow.create":`Create`,"act.workflow.import":`Import`,"act.workflow.run":`Run`,"act.workflow.export":`Export`,"act.workflow.manualStart":`Manual start`,"act.workflow.output":`Output`,"act.workflow.completed":`Workflow completed`,"act.hooks.runAll":`Run all manual hooks`,"library.model.needsDownloadFirst":`Model files are not on this computer yet. Download to use it.`,"library.model.sourceVerified":`Source verified`,"library.runtime.appleSilicon":`Apple Silicon Mac`,"library.runtime.thisComputer":`This computer`,"library.embedding.state.production":`Meaning-based search on`,"library.embedding.state.fallback":`Basic search (no meaning model yet)`,"library.embedding.state.unknown":`Needs a check`,"library.model.notReady":`This model is not ready to load yet.`,"library.model.localFormat":`this local model format`,"library.model.localSupport":`local model support`,"library.model.support":`model support`,"library.model.format":`model format`,"library.model.ramRecommended":`About {ram}GB RAM recommended`,"library.model.needsAttention":`needs attention`,"library.btn.needsConsent":`Tick the download permission box above first.`,"library.model.status.loaded":`In use`,"library.model.status.ready":`Ready to use`,"library.model.status.download_required":`Download needed`,"library.model.status.unavailable":`Not available now`,"library.model.status.unsupported":`Not supported on this computer`,"library.model.status.unknown":`Needs a check`,"library.model.recommended":`recommended`,"library.model.multimodal":`multimodal`,"library.model.local":`Local model`,"library.model.downloadSize":`Download: {size}`,"library.model.downloadRequired":`required`,"library.model.noDownload":`No download needed now`,"library.model.internetDuringDownload":`Internet only during download`,"library.model.runsLocally":`Runs locally when loaded`,"library.model.attentionBeforeLoad":`Needs attention before loading`,"library.model.compatiblePath":`Compatible loading path available`,"library.model.runtimeFallback":`Runtime fallback available`,"library.model.compatibilityFallback":`Lattice will try the compatible local runtime path before showing this model as unsupported.`,"library.model.license":`License: {license}`,"library.model.loaded":`loaded`,"library.models.embedding.advanced":`Embedding provider`,"library.models.validationAdvanced":`Model validation`,"library.model.loadedName":`Loaded model`,"library.model.checked":`checked`,"library.model.compatibleAlternative":`Compatible alternative`,"library.runtime.engine":`Engine`,"library.runtime.noLoaded":`No local model loaded`,"library.runtime.state":`Runtime state`,"library.runtime.cacheStorage":`Cache/storage: {path}`,"library.model.setupAttention":`Model setup needs attention.`,"library.skills.disable":`Disable`,"library.skills.enable":`Enable`,"library.skills.install":`Install`,"library.connector.connections":`Tool connections`,"library.connector.mcpTools":`MCP tools`,"library.connector.recommendAction":`Recommend`,"library.market.installTemplate":`Install {name}`,"library.value.local":`local`,"library.value.ready":`ready`,"library.value.idle":`idle`,"library.value.detected":`detected`,"system.account.login":`Login`,"system.account.register":`Register`,"system.account.logout":`Logout`,"system.workspace.use":`Use`,"system.workspace.activate":`Activate`,"system.workspace.archive":`Archive`,"system.snapshots.defaultName":`desktop checkpoint`,"system.snapshots.export":`Export`,"system.snapshots.mergeRestore":`Merge restore`,"system.snapshots.compare":`Compare`,"system.network.pushWorkspace":`Push workspace`,"system.network.unpair":`Unpair`,"system.panel.serverHealth":`Server health`,"system.panel.hostTelemetry":`Host telemetry`,"system.panel.brainStorage":`Brain storage`,"system.archive.title":`.latticebrain portability`,"system.archive.inspect":`Inspect`,"system.archive.verify":`Verify`,"system.archive.restore":`Restore`,"system.archive.import":`Import`,"system.computerMemory.enable":`Enable memory`,"system.computerMemory.disable":`Disable memory`,"system.value.notReported":`not reported`,"system.value.noneReported":`none reported`,"system.value.enabled":`enabled`,"system.value.disabled":`disabled`,"system.value.reported":`reported`,"system.value.local":`local`,"system.value.configured":`configured`,"system.value.trusted":`trusted`,"system.value.localIdentity":`local identity`,"system.value.localDevice":`local device`,"system.value.identityKey":`identity key`,"system.value.scaleMode":`scale mode`,"system.value.available":`available`,"system.value.optional":`optional`,"system.value.unavailable":`unavailable`,"system.value.default":`default`,"system.value.notEnabled":`not enabled`,"system.value.no":`no`,"system.value.yes":`yes`,"system.value.networkExposed":`network exposed`,"system.value.localOnly":`local-only`,"system.value.reviewRequired":`review required`,"system.value.optIn":`opt-in`,"system.value.guarded":`guarded`,"system.health.status":`Status`,"system.health.version":`Version`,"system.health.mode":`Mode`,"system.health.port":`Port`,"system.storage.activeEngine":`Active engine`,"system.storage.sqliteDefault":`SQLite default`,"system.storage.sqliteDetail":`Local brain storage is active by default.`,"system.storage.vectorDetail":`Uses the configured local vector capability or reports why it is unavailable.`,"system.storage.postgresDetail":`Postgres scale mode is opt-in and never required for local use.`,"system.backup.available":`Available`,"system.backup.backups":`Backups`,"system.backup.encrypted":`Encrypted`,"system.backup.zip":`ZIP backups`,"system.hardening.version":`Version`,"system.hardening.localOnly":`Local only`,"system.hardening.storage":`Storage`,"system.hardening.backups":`Backups`,"system.hardening.identityStorage":`Stored locally and used for signed bundle exchange.`,"system.security.eventsToday":`Events today`,"system.security.highRisk":`High risk`,"system.security.review":`Review`,"system.security.riskRate":`Risk rate`}});export{p as t};
@@ -8,10 +8,10 @@
8
8
  <link rel="manifest" href="/manifest.json" />
9
9
  <link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32.png" />
10
10
  <script src="/static/app/theme-boot.js"></script>
11
- <script type="module" crossorigin src="/static/app/assets/index-DDV2YZwM.js"></script>
12
- <link rel="modulepreload" crossorigin href="/static/app/assets/utils-KFFdVG_t.js">
13
- <link rel="modulepreload" crossorigin href="/static/app/assets/useQuery-Bv3ejLL5.js">
14
- <link rel="stylesheet" crossorigin href="/static/app/assets/index-CQWdDU3z.css">
11
+ <script type="module" crossorigin src="/static/app/assets/index-Dm9VXl1o.js"></script>
12
+ <link rel="modulepreload" crossorigin href="/static/app/assets/utils-a3YXFtEO.js">
13
+ <link rel="modulepreload" crossorigin href="/static/app/assets/useQuery-Dg5fPqTS.js">
14
+ <link rel="stylesheet" crossorigin href="/static/app/assets/index-CEkL4_M-.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="root"></div>
package/static/sw.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Lattice Service Worker — PWA install + offline shell for the /app SPA.
2
2
  // Strategy: precache the Vite app bundle from its asset manifest,
3
3
  // cache-first for static assets, network-only for everything dynamic.
4
- const CACHE = "lattice-v1020";
4
+ const CACHE = "lattice-v1030";
5
5
  const MANIFEST_URL = "/static/app/asset-manifest.json";
6
6
 
7
7
  // Non-manifest assets the shell needs offline.
@@ -1 +0,0 @@
1
- import{S as e,_ as t,b as n,d as r,g as i,m as a,t as o,y as s}from"./utils-KFFdVG_t.js";import{r as c,t as l}from"./useQuery-Bv3ejLL5.js";import{t as u}from"./workspace-wdCvdyPF.js";import{_ as d,c as f,d as p,f as m,g as h,h as g,i as _,l as v,m as y,n as b,p as x,r as S,t as C,u as w,v as T}from"./primitives-BuSMEJY8.js";import{n as E,t as D}from"./input-DFhSjmLS.js";import{t as O}from"./circle-play-8jmxn5mf.js";import{t as k}from"./cpu-mxvF3V1I.js";import{t as A}from"./download--SmCcx0p.js";import{t as j}from"./shield-alert-BfTO6X_G.js";import{i as M}from"./index-DDV2YZwM.js";import{t as N}from"./button-CCB9Kuw7.js";var P=i(`boxes`,[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]),F=i(`package-plus`,[[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`path`,{d:`M16 17h6`,key:`1ook5g`}],[`path`,{d:`M19 14v6`,key:`1ckrd5`}],[`path`,{d:`M21 10.535V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.729l7 4a2 2 0 0 0 2 .001l1.675-.955`,key:`28k6lz`}],[`path`,{d:`M3.29 7 12 12l8.71-5`,key:`19ckod`}],[`path`,{d:`m7.5 4.27 8.997 5.148`,key:`9yrvtv`}]]),I=i(`plug`,[[`path`,{d:`M12 22v-5`,key:`1ega77`}],[`path`,{d:`M15 8V2`,key:`18g5xt`}],[`path`,{d:`M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z`,key:`1xoxul`}],[`path`,{d:`M9 8V2`,key:`14iosj`}]]),L=e(n()),R=s();function z(e,t){let n=String(e||``).toLowerCase();return n===`production`?a(t,`library.embedding.state.production`):n===`fallback`||n===`hash`||n===`local`?a(t,`library.embedding.state.fallback`):a(t,`library.embedding.state.unknown`)}function B(e,t){let n=String(e?.os||``).toLowerCase(),r=String(e?.arch||``).toLowerCase();return n?n===`darwin`&&r.startsWith(`arm`)?a(t,`library.runtime.appleSilicon`):n===`darwin`?`Mac`:n===`win32`||n.startsWith(`win`)?`Windows`:n===`linux`?`Linux`:a(t,`library.runtime.thisComputer`):a(t,`library.value.detected`)}var ee=new Set([`loaded`,`ready`,`download_required`,`unavailable`,`unsupported`]),V=[{id:`models`,labelKey:`library.tab.models`},{id:`skills`,labelKey:`library.tab.skills`},{id:`mcp`,labelKey:`library.tab.mcp`},{id:`marketplace`,labelKey:`library.tab.marketplace`}];function H({initialTab:e}){let n=t(e=>e.mode),r=t(e=>e.language),[i,o]=L.useState(e||`models`);L.useEffect(()=>{V.some(t=>t.id===e)&&o(e)},[e]);let s=(n===`basic`?V.filter(e=>e.id===`models`):V).map(e=>({id:e.id,label:a(r,e.labelKey)})),c=e=>{o(e),M(`/`+e)};return(0,R.jsxs)(`div`,{className:`product-page library-page space-y-5`,children:[(0,R.jsxs)(`header`,{className:`page-hero`,children:[(0,R.jsxs)(`div`,{className:`page-kicker`,children:[(0,R.jsx)(P,{className:`h-4 w-4`}),` `,a(r,`library.kicker`)]}),(0,R.jsx)(`h1`,{className:`page-title`,children:a(r,`library.title`)}),(0,R.jsx)(`p`,{className:`page-copy`,children:a(r,`library.body`)})]}),(0,R.jsx)(p,{tabs:s,value:i,onChange:e=>c(e)}),i===`models`?(0,R.jsx)(U,{}):null,i===`skills`?(0,R.jsx)(K,{}):null,i===`mcp`?(0,R.jsx)(q,{}):null,i===`marketplace`?(0,R.jsx)(J,{}):null]})}function U(){let e=c(),n=t(e=>e.mode),i=t(e=>e.language),s=l({queryKey:[`models`],queryFn:r.models}),u=l({queryKey:[`modelRecommendations`,`local_mlx`],queryFn:()=>r.modelRecommendations(`local_mlx`)}),d=l({queryKey:[`embeddings`],queryFn:r.embeddingsStatus}),[f,p]=L.useState(!1),[h,g]=L.useState(null),[v,y]=L.useState([]),[x,D]=L.useState(null),[M,P]=L.useState(null),[I,B]=L.useState(!1),V=o(s.data?.data?.loaded),H=String(s.data?.data?.current||``),U=e=>{let t=String(e.id||e.model_id||``);return V.includes(t)||t===H?0:e.load_available||e.load_status===`ready`?1:e.pulled?2:3},K=[...o(s.data?.data?.catalog),...o(s.data?.data?.recommended)].map((e,t)=>({model:e,index:t})).sort((e,t)=>U(e.model)-U(t.model)||e.index-t.index).map(e=>e.model),q=o(u.data?.data?.recommendations?.models),J=new Map(q.map(e=>[String(e.id),e])),Y=K.find(e=>V.includes(String(e.id))||String(e.id)===H),X=u.data?.data?.recommendations?.top_pick||null,Z=v[v.length-1]||null,Q=L.useCallback(e=>{let t=String(e||a(i,`library.model.notReady`));if(n!==`basic`)return t;let r=t.replace(/gemma4_unified/gi,a(i,`library.model.localFormat`)).replace(/mlx[-_ ]?vlm|mlx[-_ ]?lm|local_mlx|\bmlx\b|\bgguf\b|\bollama\b|hugging face/gi,a(i,`library.model.localSupport`)).replace(/runtime/gi,a(i,`library.model.support`)).replace(/model_type/gi,a(i,`library.model.format`));return i===`en`?r.replace(/this local model format local model support format/gi,a(i,`library.model.localFormat`)).replace(/local model support model support/gi,a(i,`library.model.localSupport`)):r},[i,n]);async function $(t,n,i){B(!0),g(t),y([]),D(null),P(null);let a=await r.streamModelPrepare({model:t,engine:n||`local_mlx`,allow_download:i},{onProgress:e=>y(t=>[...t.slice(-8),e]),onDone:e=>D(e),onError:e=>P(e)});B(!1),await e.invalidateQueries({queryKey:[`models`]}),await e.invalidateQueries({queryKey:[`modelRecommendations`,`local_mlx`]}),!a.ok&&!M&&P(a.data)}return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1.2fr_0.8fr]`,children:[(0,R.jsxs)(`div`,{className:`space-y-4`,children:[(0,R.jsx)(b,{title:a(i,`library.models.setup.title`),description:a(i,`library.models.setup.desc`),result:u.data,children:t=>{let o=t.recommendations,s=t.profile;return(0,R.jsxs)(`div`,{className:`space-y-4`,children:[(0,R.jsx)(te,{language:i,mode:n,profile:s||{},recommendation:o||{},current:Y,currentId:H,latestProgress:Z,lastResult:x,onReload:()=>{Y&&$(String(Y.recommended_load_id||Y.id||H),String(Y.recommended_engine||Y.engine||`local_mlx`),f)},onUnload:()=>{H&&r.unloadModel(H).then(()=>e.invalidateQueries({queryKey:[`models`]}))}}),(0,R.jsx)(`ol`,{className:`library-setup-track`,"aria-label":a(i,`library.steps.aria`),children:[[a(i,`library.step.environment`),!0,k],[a(i,`library.step.recommend`),!!(X||K.length),E],[a(i,`library.step.install`),!!(Y||Z?.stage===`engine`),F],[a(i,`library.step.download`),!!(Y||Z?.stage===`download`),A],[a(i,`library.step.validate`),!!(Y||Z?.stage===`smoke_test`),j],[a(i,`library.step.ready`),!!(Y||x),O]].map(([e,t,n])=>(0,R.jsxs)(`li`,{className:t?`is-done`:``,children:[(0,R.jsx)(`span`,{className:`library-setup-mark`,"aria-hidden":`true`,children:L.createElement(n,{className:`h-3.5 w-3.5`})}),(0,R.jsx)(`span`,{className:`library-setup-label`,children:String(e)}),(0,R.jsx)(`span`,{className:`library-setup-state`,children:t?a(i,`library.step.done`):a(i,`library.step.pending`)})]},String(e)))}),(0,R.jsxs)(`label`,{className:`flex items-start gap-2 rounded-lg border border-border bg-background/55 p-3 text-sm leading-6`,children:[(0,R.jsx)(`input`,{className:`mt-1`,type:`checkbox`,checked:f,onChange:e=>p(e.target.checked)}),(0,R.jsx)(`span`,{children:a(i,`library.consent`)})]}),Z?(0,R.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(Z.message||a(i,`library.preparing`))}),(0,R.jsx)(`div`,{className:`mt-2 h-2 overflow-hidden rounded-full bg-muted`,children:(0,R.jsx)(`div`,{className:`h-full bg-primary`,style:{width:`${Number(Z.percent||8)}%`}})}),Z.detail?(0,R.jsx)(`div`,{className:`mt-2 text-xs text-muted-foreground`,children:String(Z.detail)}):null]}):null,M?(0,R.jsx)(ne,{error:M}):null]})}}),(0,R.jsx)(b,{title:n===`basic`?a(i,`library.panel.recommended.basic`):a(i,`library.panel.recommended.other`),result:s.data,children:e=>(0,R.jsxs)(`div`,{className:`grid gap-2`,children:[(K.length?K:o(e.loaded)).slice(0,n===`basic`?3:14).map((t,s)=>{let c=String(t.id||t.model_id||t.name||s),l=o(e.loaded).includes(c)||e.current===c||t.state===`loaded`,u=String(t.recommended_load_id||c),d=String(t.recommended_engine||t.engine||``),p=J.get(c)||J.get(u)||{},m=G(t.verification),g=G(p.verification),_=G(t.hardware),v=G(p.hardware),y=!!t.download_required,b=_.recommended_ram_gb||v.recommended_ram_gb,x=b?a(i,`library.model.ramRecommended`,{ram:String(b)}):n===`basic`?``:String(_.notes||v.notes||``),S=t.safety_notes||p.safety_notes,w=t.license||p.license,E=t.runtime_compatibility||p.runtime_compatibility||{},D=String(E.status||``)===`fallback_available`,O=t.load_status===`unsupported`||E.supported===!1,k=(!!t.load_available||l)&&!O,A=String(t.load_status||(l?`loaded`:`unavailable`)),j=y?a(i,`library.model.needsDownloadFirst`):Q(t.unavailable_reason||a(i,`library.model.notReady`)),M=String(t.runtime_label||E.preferred_runtime||d||`local_mlx`),P=String(E.action||A.replace(/_/g,` `)),F=ee.has(A)?a(i,`library.model.status.${A}`):a(i,`library.model.status.unknown`),L=O&&n===`basic`?a(i,`library.model.needsAttention`):F,z=k||y,B=t.download_size||t.estimated_size||p.download_size||p.estimated_size||t.size||p.size,V=t.provider||p.provider||t.organization||p.organization;return(0,R.jsxs)(`div`,{className:`grid gap-3 rounded-lg border border-border bg-background/55 p-4 md:grid-cols-[1fr_auto]`,children:[(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,R.jsx)(`div`,{className:`text-base font-semibold`,children:String(t.name||c)}),X?.id===c||t.recommended_default?(0,R.jsx)(T,{variant:`success`,children:a(i,`library.model.recommended`)}):null,String(t.modality||p.modality||``).includes(`multi`)||String(t.modality||``)===`multimodal`?(0,R.jsx)(T,{variant:`muted`,children:a(i,`library.model.multimodal`)}):null,m.verified||g.verified?(0,R.jsx)(T,{variant:`success`,title:a(i,`library.model.hfVerified`),children:a(i,`library.model.sourceVerified`)}):null]}),(0,R.jsx)(`div`,{className:`mt-1 text-sm text-muted-foreground`,children:n===`basic`?[Q(t.family||p.family||a(i,`library.model.local`)),/mlx|gguf|ollama/i.test(String(t.size||p.size||``))?``:t.size||p.size].filter(Boolean).map(String).join(` · `):[t.family||p.family||a(i,`library.value.local`),t.size||p.size].filter(Boolean).map(String).join(` · `)}),t.hardware||p.hardware?(0,R.jsx)(`div`,{className:`mt-1 text-[11px] text-muted-foreground/80`,children:String(x)}):null,(0,R.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1 text-[11px] text-muted-foreground`,children:[(0,R.jsx)(T,{variant:`muted`,children:y?a(i,`library.model.downloadSize`,{size:String(B||a(i,`library.model.downloadRequired`))}):a(i,`library.model.noDownload`)}),(0,R.jsx)(T,{variant:`muted`,children:y?a(i,`library.model.internetDuringDownload`):a(i,`library.model.runsLocally`)}),V?(0,R.jsx)(T,{variant:`muted`,children:String(V)}):null]}),O?(0,R.jsxs)(`div`,{className:`mt-3 rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:n===`basic`?a(i,`library.model.attentionBeforeLoad`):P}),(0,R.jsx)(`div`,{className:`text-muted-foreground`,children:Q(E.user_message||j)})]}):D?(0,R.jsxs)(`div`,{className:`mt-3 rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:n===`basic`?a(i,`library.model.compatiblePath`):a(i,`library.model.runtimeFallback`)}),(0,R.jsx)(`div`,{className:`text-muted-foreground`,children:Q(E.user_message||a(i,`library.model.compatibilityFallback`))})]}):!l&&!k?(0,R.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:j}):null,n===`basic`?null:(0,R.jsxs)(`div`,{className:`mt-2 space-y-1 text-xs text-muted-foreground`,children:[(0,R.jsxs)(`div`,{children:[M,` · `,u,t.load_strategy||p.load_strategy?` · ${String(t.load_strategy||p.load_strategy)}`:``,m.notes?` · ${String(m.notes).slice(0,60)}`:``]}),S||w?(0,R.jsx)(`div`,{children:[w?a(i,`library.model.license`,{license:String(w)}):``,S?String(S):``].filter(Boolean).join(` · `)}):null]}),O||D?(0,R.jsx)(W,{compatibility:E}):null]}),(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 md:justify-end`,children:[(0,R.jsx)(T,{variant:l?`success`:k?`muted`:`warning`,children:l?a(i,`library.model.loaded`):L}),l?(0,R.jsx)(C,{label:a(i,`library.runtime.unload`),action:()=>r.unloadModel(u),invalidate:[`models`]}):(0,R.jsx)(N,{variant:`outline`,disabled:I||O||!z||y&&!f,title:O?a(i,`library.model.status.unsupported`):y&&!f?a(i,`library.btn.needsConsent`):z?void 0:j,onClick:()=>$(u,d||`local_mlx`,f),children:h===u&&I?a(i,`library.btn.preparing`):y?a(i,`library.btn.installLoad`):a(i,`library.btn.validateLoad`)})]})]},c)}),n===`basic`&&K.length>3?(0,R.jsx)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3 text-sm text-muted-foreground`,children:a(i,`library.model.shortListHint`)}):null]})})]}),(0,R.jsxs)(`div`,{className:`space-y-4`,children:[(0,R.jsx)(b,{title:n===`basic`?a(i,`library.models.embedding.basic`):a(i,`library.models.embedding.advanced`),result:d.data,children:e=>(0,R.jsxs)(`div`,{className:`space-y-3`,children:[(0,R.jsx)(m,{value:z(e.state,i)}),n===`basic`?null:(0,R.jsx)(w,{value:e})]})}),(0,R.jsx)(b,{title:n===`basic`?a(i,`library.models.validation`):a(i,`library.models.validationAdvanced`),result:s.data,children:e=>{let t=o(e.compat_profiles);return t.length?(0,R.jsx)(_,{items:t.map(e=>({...e,name:n===`basic`?e.name||e.display_name||a(i,`library.model.loadedName`):e.name||e.display_name||e.model_id,status:e.quality_status||e.load_status||a(i,`library.model.checked`)})),titleKey:`name`,metaKey:`status`,limit:6}):(0,R.jsx)(S,{title:a(i,`library.model.noneChecked`),detail:a(i,`library.model.noneCheckedHint`)})}})]})]})}function W({compatibility:e}){let n=t(e=>e.mode),r=t(e=>e.language),i=o(e.alternatives);return i.length?(0,R.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1`,children:i.slice(0,3).map(e=>(0,R.jsx)(T,{variant:`muted`,children:n===`basic`&&/mlx|gguf|ollama|lm studio/i.test(String(e.name||e.id))?a(r,`library.model.compatibleAlternative`):String(e.name||e.id)},String(e.id||e.name)))}):null}function te({language:e=`en`,mode:t=`advanced`,profile:n,recommendation:r,current:i,currentId:o,latestProgress:s,lastResult:c,onReload:l,onUnload:u}){let d=String(i?.name||i?.id||o||``),f=String(i?.engine||i?.recommended_engine||s?.engine||`local_mlx`),p=String(i?.local_path||i?.storage_location||r.cache_path||r.storage_location||`~/.cache/huggingface / ~/.latticeai/models`),m=String(s?.stage||c?.stage||(d?a(e,`library.value.ready`):a(e,`library.value.idle`))),h=t===`basic`;return(0,R.jsxs)(`div`,{className:`space-y-3`,children:[(0,R.jsx)(v,{stats:h?[{label:a(e,`library.runtime.computer`),value:B(n,e)},{label:a(e,`library.runtime.loaded`),value:d||a(e,`library.runtime.noneShort`)}]:[{label:a(e,`library.runtime.computer`),value:B(n,e)},{label:a(e,`library.runtime.engine`),value:f},{label:a(e,`library.runtime.loaded`),value:d||a(e,`library.runtime.noLoaded`)},{label:a(e,`library.runtime.state`),value:m}]}),(0,R.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3 text-sm`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`font-medium`,children:d?a(e,`library.models.runtime.available`):a(e,`library.models.runtime.none`)}),h?null:(0,R.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:a(e,`library.runtime.cacheStorage`,{path:p})})]}),(0,R.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,R.jsx)(N,{variant:`outline`,size:`sm`,disabled:!d,onClick:l,children:a(e,`library.runtime.reload`)}),(0,R.jsx)(N,{variant:`outline`,size:`sm`,disabled:!d,onClick:u,children:a(e,`library.runtime.unload`)})]})]}),s?(0,R.jsxs)(`div`,{className:`mt-3`,children:[(0,R.jsxs)(`div`,{className:`flex justify-between text-xs text-muted-foreground`,children:[(0,R.jsx)(`span`,{children:String(s.message||a(e,`library.preparing`))}),(0,R.jsxs)(`span`,{children:[Number(s.percent||0),`%`]})]}),(0,R.jsx)(`div`,{className:`mt-1 h-2 overflow-hidden rounded-full bg-muted`,children:(0,R.jsx)(`div`,{className:`h-full bg-primary`,style:{width:`${Number(s.percent||8)}%`}})})]}):null]})]})}function ne({error:e}){let n=t(e=>e.language),r=o(e.recovery_guidance);return(0,R.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(e.user_message||a(n,`library.model.setupAttention`))}),r.length?(0,R.jsx)(`ul`,{className:`mt-2 list-inside list-disc text-muted-foreground`,children:r.slice(0,3).map(e=>(0,R.jsx)(`li`,{children:e},e))}):null]})}function G(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function K(){let e=c(),n=t(e=>e.language),i=l({queryKey:[`skills`],queryFn:r.skills}),s=l({queryKey:[`skillsMarketplace`],queryFn:r.skillsMarketplace}),d=u({mutationFn:e=>r.skillInstall(String(e.name||e.id),String(e.plugin||``)),onSuccess:()=>e.invalidateQueries({queryKey:[`skills`]})});return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,R.jsx)(b,{title:a(n,`library.skills.installed`),result:i.data,children:e=>(0,R.jsx)(`div`,{className:`grid gap-2`,children:o(e.skills).map(e=>(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border border-border p-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(e.name||e.id)}),(0,R.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:String(e.plugin||e.description||``)})]}),(0,R.jsx)(C,{label:a(n,e.enabled?`library.skills.disable`:`library.skills.enable`),action:()=>r.skillToggle(String(e.name||e.id),!!e.enabled),invalidate:[`skills`]})]},String(e.name||e.id)))})}),(0,R.jsx)(b,{title:a(n,`library.skills.marketplace`),result:s.data,children:e=>(0,R.jsx)(`div`,{className:`grid gap-2`,children:o(e.skills).slice(0,10).map(e=>(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border border-border p-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(e.name||e.id)}),(0,R.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:String(e.description||e.category||``)})]}),(0,R.jsx)(N,{variant:`outline`,disabled:d.isPending,onClick:()=>d.mutate(e),children:a(n,`library.skills.install`)})]},String(e.name||e.id)))})})]})}function q(){let e=t(e=>e.mode),n=t(e=>e.language),[i,o]=L.useState(`github`),s=l({queryKey:[`mcpTools`],queryFn:r.mcpTools}),c=u({mutationFn:()=>r.mcpRecommend(i)});return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1fr_1fr]`,children:[(0,R.jsx)(b,{title:a(n,e===`basic`?`library.connector.connections`:`library.connector.mcpTools`),result:s.data,children:e=>(0,R.jsx)(_,{items:e.tools||e.installed_mcps,titleKey:`name`,metaKey:`status`})}),(0,R.jsxs)(x,{children:[(0,R.jsxs)(h,{children:[(0,R.jsxs)(d,{className:`flex items-center gap-2`,children:[(0,R.jsx)(I,{className:`h-4 w-4`}),` `,a(n,`library.connector.recommend`)]}),(0,R.jsx)(g,{children:a(n,`library.connector.recommendHint`)})]}),(0,R.jsxs)(y,{className:`space-y-3`,children:[(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[(0,R.jsx)(D,{value:i,onChange:e=>o(e.target.value)}),(0,R.jsx)(N,{onClick:()=>c.mutate(),disabled:!i.trim()||c.isPending,children:a(n,`library.connector.recommendAction`)})]}),c.data?(0,R.jsx)(f,{result:c.data,successLabel:a(n,`library.connector.recommendDone`)}):null]})]})]})}function J(){let e=t(e=>e.language),n=l({queryKey:[`templates`],queryFn:r.templates}),i=l({queryKey:[`plugins`],queryFn:r.pluginsRegistry}),s=l({queryKey:[`pluginsDirectory`],queryFn:r.pluginsDirectory});return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-3`,children:[(0,R.jsx)(b,{title:a(e,`library.market.templates`),result:n.data,children:e=>(0,R.jsx)(_,{items:e.templates,titleKey:`name`,metaKey:`kind`})}),(0,R.jsx)(b,{title:a(e,`library.market.installedPlugins`),result:i.data,children:e=>(0,R.jsx)(_,{items:e.plugins,titleKey:`name`,metaKey:`status`})}),(0,R.jsx)(b,{title:a(e,`library.market.pluginDirectory`),result:s.data,children:e=>(0,R.jsx)(_,{items:e.plugins,titleKey:`name`,metaKey:`category`})}),(0,R.jsxs)(x,{className:`xl:col-span-3`,children:[(0,R.jsxs)(h,{children:[(0,R.jsxs)(d,{className:`flex items-center gap-2`,children:[(0,R.jsx)(F,{className:`h-4 w-4`}),` `,a(e,`library.market.templateInstall`)]}),(0,R.jsx)(g,{children:a(e,`library.market.templateInstallHint`)})]}),(0,R.jsx)(y,{children:o(n.data?.data?.templates).length?(0,R.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:o(n.data?.data?.templates).slice(0,6).map(t=>(0,R.jsx)(C,{label:a(e,`library.market.installTemplate`,{name:String(t.name||t.id)}),action:()=>r.installTemplate(t)},String(t.id||t.name)))}):(0,R.jsx)(_,{items:[]})})]})]})}export{H as LibraryPage};