panoma 0.1.0 → 0.1.2
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.
- package/README.md +1 -1
- package/app/BUILD-INFO.json +2 -2
- package/app/apps/web/.next-bundle/BUILD_ID +1 -1
- package/app/apps/web/.next-bundle/app-build-manifest.json +128 -128
- package/app/apps/web/.next-bundle/app-path-routes-manifest.json +31 -31
- package/app/apps/web/.next-bundle/build-manifest.json +2 -2
- package/app/apps/web/.next-bundle/prerender-manifest.json +9 -9
- package/app/apps/web/.next-bundle/server/app/(app)/agents/page.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/agents/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/ai/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/bridge/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/copies/page.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/copies/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/credentials/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/disk/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/hidden/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/p/[slug]/page.js +2 -2
- package/app/apps/web/.next-bundle/server/app/(app)/p/[slug]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/packages/page.js +2 -2
- package/app/apps/web/.next-bundle/server/app/(app)/packages/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/runs/[id]/page.js +2 -2
- package/app/apps/web/.next-bundle/server/app/(app)/runs/[id]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/runs/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/search/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/twin/look/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/twin/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/unsaved/page.js +1 -1
- package/app/apps/web/.next-bundle/server/app/(app)/unsaved/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/accounts/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/consult/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/context/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/journal/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/keys/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/log/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/mcp/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/notes/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/agent/tasks/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/ai/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/assets/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/assignments/launch/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/assignments/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/catalog/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/check/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/consultations/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/describe/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/disk/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/enrich/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/environment/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/ingest/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/md/apply/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/md/context/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/md/inspect/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/md/repair/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/md/review/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/north/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/notes/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/open/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/project/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/rescan/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/roots/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/runs/[id]/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/runs/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/scale/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/secrets/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/tasks/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/today/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/assign/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/classify/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/critique/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/design/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/distill/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/look/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/mine/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/score/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/shot/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/sources/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/synthesize/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/taste/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/twin/verdicts/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/api/watch/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app/icon/[id]/route_client-reference-manifest.js +1 -1
- package/app/apps/web/.next-bundle/server/app-paths-manifest.json +31 -31
- package/app/apps/web/.next-bundle/server/chunks/2643.js +1 -0
- package/app/apps/web/.next-bundle/server/chunks/2930.js +1 -1
- package/app/apps/web/.next-bundle/server/chunks/3677.js +1 -1
- package/app/apps/web/.next-bundle/server/chunks/6790.js +1 -1
- package/app/apps/web/.next-bundle/server/functions-config-manifest.json +12 -12
- package/app/apps/web/.next-bundle/server/middleware-manifest.json +5 -5
- package/app/apps/web/.next-bundle/server/pages/500.html +1 -1
- package/app/apps/web/.next-bundle/server/pages-manifest.json +1 -1
- package/app/apps/web/.next-bundle/server/server-reference-manifest.json +1 -1
- package/app/apps/web/.next-bundle/static/chunks/7911-22e5c2227cd664f0.js +1 -0
- package/app/apps/web/.next-bundle/static/chunks/app/(app)/{layout-31d29c0c446300c6.js → layout-d7eece5b47fcac36.js} +1 -1
- package/app/apps/web/.next-bundle/static/css/6de932bb4718a4fa.css +1 -0
- package/app/node_modules/@panoma/db/dist/index.js +6 -2
- package/app/package.json +2 -2
- package/dist/{ai-command-GXVWRPG5.js → ai-command-XQGHWOY5.js} +1 -1
- package/dist/{check-command-OZAOBH66.js → check-command-2SZH5KYN.js} +3 -3
- package/dist/{chunk-A7NMMQSL.js → chunk-4ZMDIOH5.js} +2 -2
- package/dist/{chunk-WBUYXOB3.js → chunk-ELBBRUIH.js} +3 -3
- package/dist/{chunk-Y5BA6DCQ.js → chunk-JLPWKPLM.js} +19 -2
- package/dist/{chunk-UFPX4W7T.js → chunk-VP225OGF.js} +70 -10
- package/dist/index.js +52 -21
- package/dist/{md-command-KAU5D3BI.js → md-command-76RMDZKU.js} +9 -3
- package/dist/{next-command-5WF34ATC.js → next-command-KUHZCZPR.js} +3 -3
- package/dist/{north-command-Q3BYJOZF.js → north-command-VRD6EQP6.js} +3 -3
- package/dist/{review-command-32A4QW2P.js → review-command-ILJVQMZU.js} +1 -1
- package/dist/{twin-command-PFZKINMK.js → twin-command-XJEJ6453.js} +3 -3
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
- package/app/apps/web/.next-bundle/static/chunks/7911-9b61377ca797a490.js +0 -1
- package/app/apps/web/.next-bundle/static/css/d0521a5944efa1d9.css +0 -1
- /package/app/apps/web/.next-bundle/static/{fNv6G6KHYkmFvg6vUfSi4 → EAuc0Br8TdDur7GG5w5XO}/_buildManifest.js +0 -0
- /package/app/apps/web/.next-bundle/static/{fNv6G6KHYkmFvg6vUfSi4 → EAuc0Br8TdDur7GG5w5XO}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
exports.id=2930,exports.ids=[2930],exports.modules={1012:(a,b,c)=>{"use strict";c.d(b,{SearchProvider:()=>e});var d=c(44700);(0,d.registerClientReference)(function(){throw Error("Attempted to call useSearch() from the server but useSearch is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/search-provider.tsx","useSearch");let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call SearchProvider() from the server but SearchProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/search-provider.tsx","SearchProvider")},5532:(a,b,c)=>{"use strict";c.d(b,{R:()=>h,b:()=>f});var d=c(97019);let e={remote:!1,editor:null,editors:[],apps:[],agents:[]};function f(a=!0){let[b,c]=(0,d.useState)(e);return b}let g={cursor:"cursor",code:"vscode",windsurf:"windsurf",zed:"zed"};function h(a,b,c,d){let e=g[a??"code"];if(!e)return null;let f=encodeURI(`${b.replace(/\/$/,"")}/${c}`).replace(/#/g,"%23").replace(/\?/g,"%3F");return`${e}://file${f.startsWith("/")?"":"/"}${f}:${d}`}},9724:(a,b,c)=>{"use strict";c.d(b,{I18nProvider:()=>e});var d=c(44700);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call I18nProvider() from the server but I18nProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/i18n-provider.tsx","I18nProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/i18n-provider.tsx","useLocale"),(0,d.registerClientReference)(function(){throw Error("Attempted to call useT() from the server but useT is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/i18n-provider.tsx","useT")},9845:(a,b,c)=>{"use strict";c.d(b,{n:()=>g});var d=c(64824),e=c(63507),f=c.n(e);function g({es:a}){return(0,d.jsxs)("main",{style:{minHeight:"100dvh",margin:0,display:"grid",placeContent:"center",gap:14,padding:24,textAlign:"center",background:"#fafafa",color:"#0a0a0a",fontFamily:"ui-sans-serif, system-ui, -apple-system, sans-serif",WebkitFontSmoothing:"antialiased"},children:[(0,d.jsx)("img",{src:"/assets/brand/panoma.svg",alt:"",width:36,height:36,style:{display:"block",margin:"0 auto 6px"}}),(0,d.jsx)("h1",{style:{margin:0,fontSize:20,fontWeight:650,letterSpacing:"-0.02em"},children:a?"Aqu\xed no hay nada":"Nothing here"}),(0,d.jsx)("p",{style:{margin:0,fontSize:14,color:"#5c5c5c"},children:a?"Esta direcci\xf3n no lleva a ninguna parte.":"This address doesn't lead anywhere."}),(0,d.jsx)(f(),{href:"/",style:{marginTop:6,justifySelf:"center",padding:"9px 16px",borderRadius:6,background:"#0a0a0a",color:"#fafafa",fontSize:13,fontWeight:600,textDecoration:"none"},children:a?"Ir al cat\xe1logo":"Go to the catalog"})]})}},10372:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(83458),e=c(67304),f=c(15966);function g({reset:a}){let b=(0,f.k)(),c=(0,e.t)();return(0,d.jsx)("div",{id:"app-main",tabIndex:-1,children:c?.catalog?(0,d.jsx)(e.K,{failure:c.catalog}):(0,d.jsxs)("section",{className:"catalog-down",role:"alert",children:[(0,d.jsx)("h2",{children:b("error.title")}),(0,d.jsx)("p",{children:b("error.body")}),(0,d.jsx)("button",{type:"button",className:"catalog-down__button",onClick:a,children:b("error.retry")})]})})}},15966:(a,b,c)=>{"use strict";c.d(b,{I18nProvider:()=>h,Y:()=>i,k:()=>j});var d=c(83458),e=c(97019),f=c(63679);let g=(0,e.createContext)("en");function h({locale:a,children:b}){return(0,d.jsx)(g.Provider,{value:a,children:b})}function i(){return(0,e.useContext)(g)}function j(){let a=(0,e.useContext)(g);return(0,e.useCallback)((b,c)=>(0,f.t)(a,b,c),[a])}},18499:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(64824),e=c(83677),f=c(9845);async function g(){let a=await (0,e.JK)();return(0,d.jsx)(f.n,{es:"es"===a})}},20195:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(14313);let e=async a=>[{type:"image/png",sizes:"180x180",url:(0,d.fillMetadataSegment)(".",await a.params,"apple-icon.png")+"?01e055d15a833be4"}]},26252:(a,b,c)=>{"use strict";c.d(b,{SearchProvider:()=>i,S:()=>h});var d=c(83458),e=c(57476),f=c(97019);let g=(0,f.createContext)({query:"",setQuery:()=>{}});function h(){return(0,f.useContext)(g)}function i({children:a}){let b=(0,e.usePathname)(),c=(0,e.useSearchParams)(),[h,i]=(0,f.useState)(()=>"/"!==b?"":("string"==typeof c?new URLSearchParams(c):c).get("q")??""),j=(0,f.useMemo)(()=>({query:h,setQuery:i}),[h]);return(0,d.jsx)(g.Provider,{value:j,children:a})}},28103:(a,b,c)=>{"use strict";c.d(b,{AppShell:()=>w});var d=c(83458),e=c(66881),f=c.n(e),g=c(57476),h=c(97019),i=c(17069),j=c(63679),k=c(15966),l=c(5532),m=c(94016),n=c(51775);let o=[{href:"/",label:"nav.projects",icon:i.ENP},{href:"/bridge",label:"dest.bridge",icon:i.YT$},{href:"/unsaved",label:"dest.unsaved",icon:i.YUE},{href:"/disk",label:"dest.disk",icon:i.o7e},{href:"/search",label:"dest.searchCode",icon:i.JJh},{href:"/credentials",label:"dest.credentials",icon:i.JPZ},{href:"/agents",label:"dest.agents",icon:i.gj5},{href:"/twin",label:"dest.twin",icon:i.YL0},{href:"/twin/look",label:"dest.look",icon:i.bZk},{href:"/ai",label:"dest.ai",icon:i.K8V},{href:"/packages",label:"nav.packages",icon:i.XVA},{href:"/runs",label:"nav.activity",icon:i.G7A},{href:"/copies",label:"nav.copies",icon:i.Zs_},{href:"/hidden",label:"dest.hidden",icon:i.B3U}];function p(){let a=(0,g.useRouter)(),b=(0,k.k)(),[c,e]=(0,h.useState)(!1),[f,j]=(0,h.useState)(""),[p,s]=(0,h.useState)(null),[t,u]=(0,h.useState)(0),[v,w]=(0,h.useState)(null),x=(0,h.useRef)(null),y=(0,h.useRef)(null),z=(0,h.useRef)(null),{remote:A}=(0,l.b)(c),B=(0,h.useCallback)(async(a,c)=>{w(b("palette.opening",{name:a.name}));try{let d=await fetch("/api/open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:a.id,tool:c})}),f=await d.json();w(d.ok?null:f.error??b("palette.openFailed")),d.ok&&e(!1)}catch{w(b("palette.unreachable"))}},[b]),C=(0,h.useCallback)(b=>{e(!1),a.push(b)},[a]),D=(0,h.useMemo)(()=>{let a=(0,n.A)(f.trim()),b=(p??[]).filter(b=>{var c,d;return!a||(c=b,d=a,(0,n.A)([c.name,c.root,c.language??""].join(" ")).includes(d))});return a&&b.sort((b,c)=>q(c.name,a)-q(b.name,a)),b.slice(0,8)},[p,f]),[E,F]=(0,h.useState)(0),G=D[Math.min(E,D.length-1)],H=(0,h.useMemo)(()=>{let a=(0,n.A)(f.trim()),c=D.map(a=>({key:`p:${a.id}`,label:a.name,hint:r(a.root),enter:b(A?"palette.enterCard":"palette.enterEditor"),icon:A?i.wl$:i.KQe,group:"palette.groupProjects",run:()=>A?C(`/p/${a.slug}`):B(a,"editor")}));for(let d of(G&&(A||(c.push({key:`folder:${G.id}`,label:b("palette.openFolderOf",{name:G.name}),hint:r(G.root),icon:i.gBk,group:"palette.groupActions",run:()=>B(G,"folder")}),c.push({key:`terminal:${G.id}`,label:b("palette.openTerminalOf",{name:G.name}),hint:r(G.root),icon:i.Jhl,group:"palette.groupActions",run:()=>B(G,"terminal")})),c.push({key:`card:${G.id}`,label:b("palette.openCardOf",{name:G.name}),icon:i.wl$,group:"palette.groupActions",run:()=>C(`/p/${G.slug}`)})),a.length>=2&&c.push({key:"search-code",label:b("palette.searchEverywhere",{query:f.trim()}),icon:i.JJh,group:"palette.groupActions",run:()=>C(`/search?q=${encodeURIComponent(f.trim())}`)}),o))(!a||(0,n.A)(b(d.label)).includes(a))&&c.push({key:`go:${d.href}`,label:b(d.label),icon:d.icon,group:"palette.groupGoTo",run:()=>C(d.href)});return c},[C,D,B,f,A,b,G]),I=null!==p&&H.length>0;if((0,m.r)(z,c),!c)return null;let J="";return(0,d.jsx)("div",{className:"palette-backdrop",role:"presentation",onClick:a=>{a.target===a.currentTarget&&e(!1)},children:(0,d.jsxs)("div",{className:"palette",role:"dialog","aria-modal":"true","aria-label":b("palette.aria"),ref:z,children:[(0,d.jsxs)("div",{className:"palette__search",children:[(0,d.jsx)(i.JJh,{"aria-hidden":!0}),(0,d.jsx)("input",{ref:x,value:f,onChange:a=>{j(a.target.value),u(0)},onKeyDown:function(a){null!==p&&("ArrowDown"===a.key?(a.preventDefault(),u(a=>(a+1)%Math.max(1,H.length))):"ArrowUp"===a.key?(a.preventDefault(),u(a=>(a-1+H.length)%Math.max(1,H.length))):"Enter"===a.key&&(a.preventDefault(),H[t]?.run()))},placeholder:b("palette.placeholder"),"aria-label":b("palette.searchAria"),role:"combobox","aria-autocomplete":"list","aria-expanded":I,"aria-controls":"palette-results","aria-activedescendant":I?`palette-option-${t}`:void 0}),(0,d.jsx)("kbd",{children:"esc"})]}),(0,d.jsx)("p",{className:"sr-only",role:"status",children:null===p?b("palette.loading"):b("palette.results",{n:H.length})}),null===p?(0,d.jsx)("p",{className:"palette__empty",children:b("palette.loading")}):0===H.length?(0,d.jsx)("p",{className:"palette__empty",children:b("palette.noMatch",{query:f})}):(0,d.jsx)("ul",{className:"palette__list",id:"palette-results",ref:y,role:"listbox","aria-label":b("palette.aria"),children:H.map((a,c)=>{let e=a.icon,f=a.group!==J?a.group:null;return J=a.group,(0,d.jsxs)(h.Fragment,{children:[f&&(0,d.jsx)("li",{role:"presentation","aria-hidden":!0,children:(0,d.jsx)("p",{className:"palette__group",children:b(f)})}),(0,d.jsx)("li",{role:"presentation",children:(0,d.jsxs)("button",{id:`palette-option-${c}`,type:"button",role:"option",tabIndex:-1,"aria-selected":c===t,className:c===t?"is-active":void 0,onMouseEnter:()=>u(c),onClick:()=>void a.run(),children:[(0,d.jsx)(e,{"aria-hidden":!0}),(0,d.jsx)("span",{children:a.label}),a.hint&&(0,d.jsx)("span",{className:"palette__hint",children:a.hint}),c===t&&a.enter&&(0,d.jsx)("kbd",{className:"palette__enter",children:a.enter})]})})]},a.key)})}),v&&(0,d.jsx)("p",{className:"palette__notice",role:"status",children:v}),(0,d.jsxs)("p",{className:"palette__footer",children:[(0,d.jsx)("span",{children:b("palette.keysMove")}),(0,d.jsx)("span",{children:b("palette.keysOpen")}),(0,d.jsx)("span",{children:b("palette.keysClose")})]})]})})}function q(a,b){let c=(0,n.A)(a);return c===b?3:c.startsWith(b)?2:+!!c.includes(b)}function r(a){let b=a.split("/");return b.length<=3?a:`…/${b.slice(-2).join("/")}`}var s=c(26252),t=c(41762);let u=[{href:"/",label:"nav.projects",icon:i.ENP,exact:!0},{href:"/bridge",label:"nav.bridge",icon:i.YT$},{href:"/runs",label:"nav.activity",icon:i.G7A,badge:"proposedRuns"},{href:"/unsaved",label:"nav.unsaved",icon:i.YUE,badge:"unsaved"},{href:"/agents",label:"nav.agents",icon:i.gj5},{href:"/twin",label:"nav.twin",icon:i.YL0},{href:"/ai",label:"nav.ai",icon:i.K8V},{href:"/packages",label:"nav.packages",icon:i.XVA},{href:"/search",label:"nav.searchCode",icon:i.JJh},{href:"/credentials",label:"nav.credentials",icon:i.JPZ},{href:"/copies",label:"nav.copies",icon:i.Zs_},{href:"/disk",label:"nav.disk",icon:i.o7e}],v="https://github.com/panomahq/panoma";function w({stats:a}){let b=(0,g.usePathname)(),c=(0,g.useRouter)(),e=(0,k.k)(),l=(0,k.Y)(),{query:m,setQuery:n}=(0,s.S)(),[o,q]=(0,h.useState)(!0);function r(a){a!==l&&(document.cookie=`${j.CL}=${a}; path=/; max-age=31536000; samesite=lax`,c.refresh())}return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p,{}),(0,d.jsxs)("header",{className:"app-topbar",children:[(0,d.jsxs)("div",{className:"brand-cluster",children:[(0,d.jsx)("button",{type:"button",className:"sidebar-toggle",onClick:function(){q(a=>{let b=!a;return window.localStorage.setItem("panoma-shell-sidebar",b?"open":"hidden"),b})},"aria-expanded":o,"aria-controls":"app-sidebar","aria-label":e(o?"shell.hideSidebar":"shell.showSidebar"),title:e(o?"shell.hideSidebar":"shell.showSidebar"),children:o?(0,d.jsx)(i.Y48,{"aria-hidden":!0}):(0,d.jsx)(i.ngD,{"aria-hidden":!0})}),(0,d.jsxs)(f(),{href:"/",className:"brand-lockup","aria-label":e("shell.brandHome"),children:[(0,d.jsx)("img",{src:"/assets/brand/panoma.svg",alt:"",width:38,height:38}),(0,d.jsx)("span",{children:"Panoma"})]})]}),(0,d.jsxs)("form",{className:"global-search",role:"search",onSubmit:function(a){a.preventDefault();let b=new URLSearchParams;m.trim()&&b.set("q",m.trim()),c.push(b.size>0?`/?${b.toString()}`:"/")},children:[(0,d.jsx)(i.JJh,{"aria-hidden":!0}),(0,d.jsx)("input",{value:m,onChange:a=>n(a.target.value),placeholder:e("shell.searchPlaceholder"),"aria-label":e("shell.searchPlaceholder")}),(0,d.jsx)("button",{type:"button",onClick:()=>window.dispatchEvent(new CustomEvent("panoma:palette")),"aria-label":e("shell.openPalette"),children:(0,d.jsx)("kbd",{children:"⌘ K"})})]}),(0,d.jsx)(x,{})]}),(0,d.jsxs)("aside",{id:"app-sidebar",className:"app-sidebar","aria-label":e("shell.sections"),children:[(0,d.jsxs)("div",{className:"sidebar-scroll",children:[(0,d.jsx)("nav",{children:u.map(c=>{let g=c.icon,h=c.exact?b===c.href:b.startsWith(c.href),i=c.badge?a?.[c.badge]:void 0;return(0,d.jsxs)(f(),{href:c.href,className:h?"is-active":void 0,title:o?void 0:e(c.label),children:[(0,d.jsx)(g,{"aria-hidden":!0}),(0,d.jsx)("span",{className:"nav-label",children:e(c.label)}),"number"==typeof i&&i>0&&(0,d.jsx)("span",{className:"nav-badge","aria-label":e("shell.pending",{n:i}),children:i}),(0,d.jsx)(z,{})]},c.label)})}),a&&(0,d.jsxs)("div",{className:"catalog-summary","aria-label":e("shell.summary"),children:[(0,d.jsxs)("div",{className:"catalog-summary__title",children:[(0,d.jsx)(i.ENP,{"aria-hidden":!0}),(0,d.jsxs)("p",{children:[(0,d.jsx)("strong",{children:e("shell.summaryProjects",{n:a.projects})}),(0,d.jsx)("span",{children:e("shell.summaryScope")})]}),(0,d.jsx)("strong",{className:"catalog-summary__count",title:`${e("shell.summaryProjects",{n:a.projects})} \xb7 ${e("shell.summaryScope")}`,"aria-hidden":!0,children:a.projects})]}),(0,d.jsxs)("dl",{children:[(0,d.jsx)(y,{label:e("shell.live"),value:a.live,tone:"live"}),(0,d.jsx)(y,{label:e("shell.paused"),value:a.paused,tone:"paused"}),(0,d.jsx)(y,{label:e("shell.dormant"),value:a.dormant,tone:"dormant"}),(0,d.jsx)(y,{label:e("shell.noGit"),value:a.noGit,tone:"muted"})]}),(0,d.jsx)("dl",{className:"catalog-summary__aside",children:(0,d.jsx)(y,{label:e("shell.copies"),value:a.copies,tone:"muted"})})]})]}),(0,d.jsxs)("div",{className:"sidebar-foot",children:[(0,d.jsxs)("p",{className:"sidebar-update",children:[(0,d.jsx)("span",{children:e("shell.footerLocal")}),(0,d.jsx)("span",{children:e("shell.footerPrivate")}),(0,d.jsx)("a",{href:v,target:"_blank",rel:"noreferrer",children:e("shell.footerSource")})]}),(0,d.jsxs)("div",{className:"lang-toggle",role:"group","aria-label":e("shell.language"),children:[(0,d.jsx)("button",{type:"button",onClick:()=>r("es"),className:"es"===l?"is-active":void 0,"aria-pressed":"es"===l,title:"Espa\xf1ol",children:"ES"}),(0,d.jsx)("button",{type:"button",onClick:()=>r("en"),className:"en"===l?"is-active":void 0,"aria-pressed":"en"===l,title:"English",children:"EN"})]})]})]})]})}function x(){let a=(0,k.k)(),[b,c]=(0,h.useState)(!1),e=(0,h.useRef)(null),f=(0,h.useRef)(null);return(0,t.y)(e,b,a=>{c(!1),"escape"===a&&f.current?.focus()}),(0,d.jsxs)("div",{className:"account-holder",ref:e,children:[(0,d.jsx)("button",{ref:f,type:"button",className:"account-button","aria-expanded":b,"aria-label":a("shell.localAccount"),title:a("shell.localAccount"),onClick:()=>c(a=>!a),children:(0,d.jsx)(i.vsK,{"aria-hidden":!0})}),b&&(0,d.jsxs)("div",{className:"account-card",role:"dialog","aria-label":a("shell.localAccount"),children:[(0,d.jsx)("strong",{children:a("shell.footerLocal")}),(0,d.jsx)("p",{children:a("shell.accountNone")}),(0,d.jsx)("a",{href:v,target:"_blank",rel:"noreferrer",children:a("shell.footerSource")})]})]})}function y({label:a,value:b,tone:c}){return(0,d.jsx)("div",{children:(0,d.jsxs)("dt",{title:a,children:[(0,d.jsx)("span",{className:`summary-dot summary-dot--${c}`,"aria-hidden":!0}),(0,d.jsxs)("span",{className:"summary-figure",children:[b," ",(0,d.jsx)("span",{className:"summary-label",children:a})]})]})})}function z(){let{pending:a}=(0,e.useLinkStatus)();return a?(0,d.jsx)("span",{className:"nav-pending","aria-hidden":!0}):null}},31928:(a,b,c)=>{Promise.resolve().then(c.bind(c,10372))},38683:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(14313);let e=async a=>[{type:"image/png",sizes:"64x64",url:(0,d.fillMetadataSegment)(".",await a.params,"icon.png")+"?f1a203a899ce38a5"}]},41762:(a,b,c)=>{"use strict";c.d(b,{y:()=>e});var d=c(97019);function e(a,b,c){(0,d.useRef)(c)}},51310:(a,b,c)=>{Promise.resolve().then(c.bind(c,28103)),Promise.resolve().then(c.bind(c,15966)),Promise.resolve().then(c.bind(c,26252))},51775:(a,b,c)=>{"use strict";function d(a){return(a??"").toLowerCase().normalize("NFD").replace(/\p{Diacritic}/gu,"")}c.d(b,{A:()=>d})},54432:()=>{},63679:(a,b,c)=>{"use strict";c.d(b,{CL:()=>d,P3:()=>h,t:()=>g});let d="panoma-lang",e={es:{"meta.description":"Tu cat\xe1logo personal de software. Abre, revisa y mant\xe9n al d\xeda cada proyecto.","watch.off":"El vig\xeda no est\xe1 en marcha: los proyectos nuevos y los commits de hoy pueden no aparecer hasta que vuelvas a escanear.","catalog.down.title":"El cat\xe1logo no abre","catalog.down.body":"La web sigue en pie, pero sin datos. Aparta {path} con otro nombre y vuelve a arrancar: se crea uno nuevo y se rellena con \xabpanoma scan\xbb. No borres nada: si alg\xfan d\xeda se puede rescatar, ser\xe1 de ah\xed.","catalog.down.detail":"Lo que dijo la base: {detail}","error.title":"Algo se rompi\xf3 al pintar esta p\xe1gina","error.body":"No es el cat\xe1logo: eso se avisa aparte. Vuelve a intentarlo, y si insiste, el motivo est\xe1 en el registro del servidor.","error.retry":"Reintentar","shell.brandHome":"Panoma \xb7 Inicio","shell.searchPlaceholder":"Buscar proyectos, tecnolog\xedas o agentes","shell.openPalette":"Abrir la paleta de comandos","shell.topNav":"Navegaci\xf3n principal","shell.sections":"Secciones de Panoma","shell.skipToContent":"Saltar al contenido","shell.localAccount":"Cuenta local","shell.accountNone":"No hay cuenta ni nube que administrar: panoma corre en este ordenador y el cat\xe1logo se queda aqu\xed.","shell.pending":"{n} pendiente{s}","shell.summary":"Resumen del cat\xe1logo","shell.summaryProjects":"{n} proyecto{s}","shell.summaryScope":"en tu cat\xe1logo","shell.live":"activos","shell.paused":"en pausa","shell.dormant":"dormidos","shell.noGit":"sin git","shell.copies":"copias","shell.footerLocal":"Cat\xe1logo local","shell.footerPrivate":"Privado por dise\xf1o","shell.footerSource":"AGPL-3.0 \xb7 c\xf3digo fuente","shell.language":"Idioma","shell.hideSidebar":"Plegar men\xfa","shell.showSidebar":"Desplegar men\xfa","nav.projects":"Proyectos","nav.unsaved":"Sin guardar","nav.searchCode":"C\xf3digo","nav.credentials":"Claves","nav.agents":"MCP","nav.ai":"IA","nav.packages":"Paquetes","nav.activity":"Ejecuciones","nav.copies":"Copias","nav.bridge":"Puente","dest.bridge":"Puente de mando","bridge.title":"Encender panoma, paso a paso","bridge.titleReady":"Todo encendido","bridge.lead":"Cada pieza de panoma, con su estado y un solo siguiente paso se\xf1alado. Nada de adivinar comandos: lo que toca ahora est\xe1 marcado con una flecha, y lo dem\xe1s espera su turno.","bridge.leadReady":"El cat\xe1logo, el modelo, los agentes y los ganchos est\xe1n en marcha. Desde aqu\xed solo queda ver la memoria respirar — y decidir en las fichas lo que los agentes propongan.","bridge.step.catalog.title":"El cat\xe1logo","bridge.step.catalog.detail":"proyectos: {count}","bridge.step.catalog.pending":"Escanea una carpeta con tus proyectos. Un solo comando los analiza y arranca esta web.","bridge.step.model.title":"Un modelo de IA","bridge.step.model.detail":"conectados: {count}","bridge.step.model.pending":"El cr\xedtico, el destilador y el doble necesitan un modelo. Conecta un proveedor o exporta una clave.","bridge.step.model.go":"Ir a la pantalla de IA","bridge.step.agent.title":"Un agente conectado","bridge.step.agent.detail":"activos: {count}","bridge.step.agent.pending":"Conecta tu agente (Claude Code, Cursor…) para que reciba el parte, la memoria y las nueve herramientas.","bridge.step.agent.keyUnused":"La clave existe pero ning\xfan agente la ha usado todav\xeda: instala la configuraci\xf3n y reinicia la sesi\xf3n del agente.","bridge.step.agent.go":"Ir a la pantalla de Agentes","bridge.step.hooks.title":"Los ganchos","bridge.step.hooks.detail":"proyectos con ganchos: {count} de {total}","bridge.step.hooks.pending":"Dentro de cada proyecto donde trabajes: apuntan la actividad sin que el modelo se acuerde, y entregan las notas dormidas en su ruta.","bridge.step.alive.title":"La memoria, viva","bridge.step.alive.detail":"entradas de bit\xe1cora: {count}","bridge.step.alive.pending":"Se enciende sola cuando lo anterior est\xe9 en marcha: los agentes empiezan a apuntar, el destilador a proponer, y t\xfa a decidir.","bridge.restartHint":"Despu\xe9s de instalar, reinicia la sesi\xf3n del agente: una sesi\xf3n ya abierta no recoge nada.","bridge.todayTitle":"Los n\xfameros de hoy","bridge.stat.journal":"Bit\xe1cora","bridge.stat.approved":"Notas servidas","bridge.stat.sleeping":"Notas dormidas","bridge.stat.pending":"Propuestas esperando","bridge.stat.consultations":"Preguntas al doble","bridge.stat.watcher":"Vig\xeda","bridge.stat.ablation":"B\xe1scula (ablaci\xf3n)","bridge.on":"encendido","bridge.off":"apagado","bridge.copy":"copiar","bridge.copied":"copiado","bridge.step.hooks.install":"Ponerlos en todos los proyectos","bridge.step.hooks.installing":"Poniendo los ganchos…","bridge.hooksDone":"Hecho — con ganchos: {installed} \xb7 sin repositorio: {noRepo} \xb7 ajenos respetados: {foreign} \xb7 fallos: {failed}","bridge.hooksAlt":"O desde el terminal, proyecto a proyecto:","bridge.hooksNoCli":"El servidor no encuentra el comando panoma: ponlos desde el terminal con el comando de al lado.","projectHooks.on":"Ganchos puestos: la bit\xe1cora de este proyecto se escribe sola.","projectHooks.off":"Sin ganchos: el cat\xe1logo solo sabr\xe1 lo que el agente se acuerde de contarle.","projectHooks.install":"Ponerlos","bridge.scaleHint":"La medida fina —si la memoria reduce correcciones de verdad— vive en GET /api/scale.","nav.disk":"Disco","nav.twin":"Twin","nav.hidden":"Apartados","dest.agents":"MCP: conectar tus agentes","dest.unsaved":"Trabajo sin guardar","dest.disk":"Espacio en disco","dest.twin":"Tu doble: el retrato de tu gusto","dest.searchCode":"Buscar en el c\xf3digo","dest.credentials":"Credenciales en el historial","dest.hidden":"Ocultos y excluidos","dest.ai":"Con qu\xe9 piensa Panoma","palette.aria":"Paleta de comandos","palette.placeholder":"Busca un proyecto o escribe una acci\xf3n…","palette.searchAria":"Buscar en el cat\xe1logo","palette.loading":"cargando el cat\xe1logo…","palette.noMatch":"Nada coincide con \xab{query}\xbb.","palette.results":"{n} resultado{s}","palette.groupProjects":"Proyectos","palette.groupActions":"Acciones","palette.groupGoTo":"Ir a","palette.openFolderOf":"Abrir la carpeta de {name}","palette.searchEverywhere":"Buscar \xab{query}\xbb en el c\xf3digo de todos los proyectos","palette.opening":"abriendo {name}…","palette.openFailed":"No se pudo abrir.","palette.unreachable":"No se pudo contactar con el servidor.","palette.enterEditor":"↵ abrir en el editor","palette.enterCard":"↵ ver la ficha","palette.openTerminalOf":"Abrir un terminal en {name}","palette.openCardOf":"Ver la ficha de {name}","palette.keysMove":"↑↓ moverse","palette.keysOpen":"↵ elegir","palette.keysClose":"esc cerrar","home.emptyKicker":"Cat\xe1logo vac\xedo","home.emptyTitle":"A\xfan no has escaneado nada","home.emptyBody":"Analiza una carpeta con tus proyectos para llenar el cat\xe1logo. El escaneo es local y solo guarda metadatos: tu c\xf3digo nunca sale del disco.","activityKind.change":"cambio","activityKind.decision":"decisi\xf3n","activityKind.note":"nota","activityKind.blocker":"bloqueo","taskState.open":"abierta","taskState.in-progress":"en curso","taskState.done":"hecha","taskState.discarded":"descartada","severity.critical":"cr\xedtica","severity.high":"alta","severity.medium":"media","severity.low":"baja","severity.unknown":"desconocida","run.pending":"pendiente","run.running":"ejecutando","run.proposed":"propuesto","run.failed":"fallido","run.no-changes":"sin cambios","run.applied":"aplicado","run.discarded":"descartado","risk.unversioned":"sin control de versiones","risk.no-commits":"repositorio sin ning\xfan commit","risk.no-commits.n":"{n} fichero{s} y ning\xfan commit","risk.no-remote":"sin remoto \xb7 {n} commit solo en este disco","risk.no-remote.n":"sin remoto \xb7 {n} commit{s} solo en este disco","risk.unpushed":"{n} commit sin subir","risk.unpushed.n":"{n} commit{s} sin subir","risk.uncommitted":"{n} fichero sin commitear","risk.uncommitted.n":"{n} fichero{s} sin commitear","risk.untracked":"{n} sin a\xf1adir a git","risk.stashes":"{n} stash guardado","risk.stashes.n":"{n} stash{es} guardado{s}","risk.behind":"{n} commit por traer","risk.behind.n":"{n} commit{s} por traer","store.kicker":"Explorar","store.title":"Descubre lo que has construido","store.subtitle":"Tu cat\xe1logo personal de software. Abre, revisa y mant\xe9n al d\xeda cada proyecto.","store.spotlight":"Resumen destacado","store.review":"Revisar","filter.all":"Todos","filter.attention":"Atenci\xf3n","filter.favorites":"Favoritos","filter.notMine":"No es m\xedo","filter.web":"Web","filter.mobile":"M\xf3vil","filter.backend":"Backend","filter.tools":"Herramientas","filter.ai":"IA","filter.other":"Otros","store.filterAria":"Filtrar proyectos","store.hideNames":"Ocultar nombres e iconos","store.showNames":"Volver a ense\xf1ar nombres e iconos","store.hidden":"Proyecto {n}","share.abrir":"Compartir mi panorama","share.cerrar":"Cerrar","share.preview":"Vista previa de la tarjeta","share.titulo":"{n} proyecto{s} creados.","share.proyectos":"proyectos en total","share.tecnologias":"tecnolog\xedas","share.commits":"commits","share.agentes":"del historial con agentes","share.activos":"en marcha","share.salud":"Salud de cada proyecto","share.saludBien":"Bien","share.saludRevisar":"Revisar","share.saludAtencion":"Atenci\xf3n","share.more":"+{n} m\xe1s","share.local":"Local-first \xb7 Tus datos, en tu disco.","share.idioma":"Idioma de la imagen","share.usuario":"tu cuenta","share.usuarioVacio":"sin poner","share.conIconos":"Incluir iconos y nombres de mis proyectos","share.descargar":"descargar la imagen","share.copiarTexto":"copiar el texto","share.textoCopiado":"copiado","share.image.idle":"compartir imagen","share.image.preparing":"preparando imagen…","share.image.copied":"imagen copiada","share.image.downloaded":"imagen descargada","share.image.failed":"no se pudo compartir","share.x.idle":"abrir directamente en X","share.x.preparing":"abriendo X…","share.x.copied":"X abierto \xb7 pega la imagen","share.x.downloaded":"X abierto \xb7 sube la imagen","share.x.failed":"no se pudo abrir X","share.nota":"Compartir imagen abre el men\xfa del sistema. X abre el compositor directamente y deja el PNG copiado para que lo pegues; Panoma no sube la imagen.","share.texto":"{n} proyecto{s} creados — mi centro de control local con {domain}.","store.sortLabel":"Ordenar proyectos","store.sortRecent":"M\xe1s recientes","store.sortName":"Nombre","store.sortHealth":"Mejor salud","store.viewAria":"Vista del cat\xe1logo","store.viewGrid":"Vista de cuadr\xedcula","store.viewList":"Vista de lista","store.browseTitle":"Explorar proyectos","store.total":"{n} proyecto{s} en total","store.noResults":"No encontramos proyectos","store.noResultsBody":"Prueba con otra b\xfasqueda o cambia el filtro seleccionado.","store.clearFilters":"Limpiar filtros","store.justHidden":"\xab{name}\xbb ya no est\xe1 en el cat\xe1logo.","store.undoHide":"deshacer","store.seeHidden":"ver ocultos","store.showing":"Mostrando {shown} de {total} proyecto{totals}","store.lastCommit":"\xdaltimo commit {when}","store.workedOn":"Has trabajado en este proyecto {when}.","store.openProject":"Abrir proyecto","store.proposalsWaitingOne":"1 propuesta sin decidir","store.proposalsWaitingMany":"{n} propuestas sin decidir","store.proposalsBody":"El cambio ya est\xe1 hecho y probado. Nadie lo aplica hasta que lo digas t\xfa.","store.resume":"Retomar donde lo dejaste","store.editorShort":"editor","store.openingEditor":"abriendo…","store.openedEditor":"✓ abierto","store.openNamedInEditor":"abrir {name} en el editor","store.unreachable":"No se pudo contactar con el servidor.","store.attention":"Atenci\xf3n","store.attentionBody":"Proyectos que necesitan tu revisi\xf3n.","store.viewAll":"Ver todo","store.allClear":"Todo est\xe1 al d\xeda.","store.viewAllIssues":"Ver los {n} proyecto{s} con problemas","store.depsBehind":"{n} dep. atrasada{s}","store.depsBehindRatio":"{n}/{total} dep. atrasada{s}","store.depsUnchecked":"dependencias sin comprobar","summary.kind.mobileApp":"App m\xf3vil","summary.kind.webApp":"Aplicaci\xf3n web","summary.kind.cli":"Herramienta de l\xednea de comandos","summary.kind.package":"Paquete publicable","summary.kind.backend":"Servicio de backend","summary.kind.container":"Servicio en contenedor","summary.kind.project":"Proyecto","summary.builtWith":"{kind} en {stack}","summary.uses":"usa {list}","summary.publishedOn":"se publica en {list}","summary.writtenBy":"{share}% del historial lo escribi\xf3 {agent}","summary.and":"y","store.noticeOne":"1 aviso","store.noticesMany":"{n} aviso{s}","store.commitCount":"{n} commit{s}","store.noAlerts":"Sin alertas","store.open":"Abrir","store.openNamed":"Abrir {name}","store.favoriteAdd":"A\xf1adir {name} a favoritos","store.favoriteRemove":"Quitar {name} de favoritos","store.hideNamed":"Ocultar {name}","store.noStack":"Pila no detectada","store.builtWith":"Proyecto local construido con {tech}.","store.detected":"Proyecto local detectado en tu cat\xe1logo.","catalog.title":"Cat\xe1logo de proyectos","catalog.count":"{n} proyecto{s}","catalog.countOne":"1 proyecto","catalog.filterPlaceholder":"Filtrar el cat\xe1logo","catalog.category":"Categor\xeda","catalog.colProject":"Proyecto","catalog.colHealth":"Salud","catalog.colStack":"Stack","catalog.colActivity":"\xdaltima actividad","catalog.rowsAria":"Proyectos del cat\xe1logo","catalog.hint":"Un clic ense\xf1a los detalles. Dos abren la ficha.","catalog.openHandle":"Abrir la ficha de {name} — o haz doble clic","catalog.opening":"Abriendo la ficha…","catalog.healthOf":"Salud {n} sobre 100","catalog.noHealth":"Sin medir","catalog.detailsOf":"Detalles de {name}","catalog.close":"Cerrar los detalles","catalog.repository":"Repositorio","catalog.remote":"Con copia remota","catalog.localOnly":"Solo en este disco","catalog.noGit":"Sin git","catalog.size":"Tama\xf1o","catalog.commits":"Commits","catalog.origin":"Origen","catalog.openIn":"Abrir en","catalog.editor":"Editor","catalog.editorSub":"Editar el c\xf3digo","catalog.terminal":"Terminal","catalog.terminalSub":"Una terminal en esta carpeta","catalog.folder":"Carpeta","catalog.folderSub":"Ver los archivos","catalog.fullDetail":"Ver la ficha completa","catalog.emptyTitle":"Ning\xfan proyecto seleccionado","catalog.emptyBody":"Elige uno de la lista y sus detalles salen aqu\xed.","catalog.needsReview":"Necesita revisi\xf3n","catalog.agentSub":"Agente, en un terminal","catalog.appSub":"App de escritorio","catalog.agentBroken":"Instalado, pero no arranca","catalog.reviewUnsaved":"Ver qu\xe9 hay sin guardar","catalog.reviewSecurity":"Ver los avisos de seguridad","catalog.reviewDeps":"Ver las dependencias atrasadas","state.active":"Activo","state.paused":"En pausa","state.dormant":"Dormido","state.no-git":"Sin git","origin.foreign":"no es tuyo","origin.forked":"parti\xf3 de otro","origin.template":"plantilla","origin.templateTitle":"Lo gener\xf3 una herramienta y no se ha tocado desde entonces.","origin.startedBy":"Empezado por {name}. Abre la ficha para ver en qu\xe9 se basa.","origin.openDetail":"Abre la ficha para ver en qu\xe9 se basa.","today.title":"Desde la \xfaltima vez","today.since":"desde {when}","today.last24h":"en las \xfaltimas 24 horas","today.nothing":"Sin novedades {period}. Todo tuyo.","today.commitOne":"{n} commit","today.commitMany":"{n} commit{s}","today.fromAgents":"({n} de agentes)","today.inProject":"en {project}","today.agentNoted":"{name} anot\xf3 {n}","today.born":"Nuevos en el cat\xe1logo:","today.resume":"Retomar","today.opening":"Abriendo…","today.openFailed":"No se pudo","today.openNamed":"Abrir {name} en el editor","today.waitingOne":"1 espera tu decisi\xf3n","today.waitingMany":"{n} esperan tu decisi\xf3n","today.inProjectsOne":"{c} en 1 proyecto","today.inProjectsMany":"{c} en {n} proyecto{s}","today.bornOne":"1 proyecto nuevo","today.bornMany":"{n} proyecto{s} nuevos","today.expand":"Ver el parte del d\xeda","today.collapse":"Plegar el parte del d\xeda","today.quiet":"Sin novedades","today.attempts":"{n} intento{s}","proposals.waiting":"Esperan tu decisi\xf3n","proposals.readyOne":"Hay una propuesta preparada y sin decidir","proposals.readyMany":"Hay {n} propuestas preparadas y sin decidir","proposals.branchNote":"El cambio ya est\xe1 hecho y probado en una rama aparte. Nadie lo aplica a tu carpeta hasta que lo digas t\xfa.","proposals.fallbackName":"propuesta","proposals.andMore":"y {n} m\xe1s","proposals.testsGreen":"tests en verde","proposals.unverified":"sin verificar","changes.question":"Qu\xe9 ha pasado aqu\xed","changes.latest":"Lo \xfaltimo, {when}","changes.nothingYet":"Todav\xeda no ha pasado nada","changes.totalCommits":"{n} commit{s} en total","changes.window24h":"En las \xfaltimas 24 horas","changes.window48h":"El d\xeda anterior","changes.windowBefore":"Antes de eso","changes.signedBy":"Firmado por {agent} con un trailer Co-Authored-By","changes.unsignedNote":"Los commits sin etiqueta no llevan firma de nadie. Eso no quiere decir que los escribieras t\xfa.","changes.moreOne":"Hay 1 m\xe1s entre los \xfaltimos veinte que guarda el cat\xe1logo.","changes.moreMany":"Hay {n} m\xe1s entre los \xfaltimos veinte que guarda el cat\xe1logo.","changes.empty":"A\xfan no hay commits recientes que mostrar.","changes.agentLog":"Ver actividad de agentes","task.title":"D\xe9jalo anotado","task.openOne":"{n} abierta","task.openMany":"{n} abiertas","task.placeholder":"ma\xf1ana arregla el login","task.fieldLabel":"Qu\xe9 hay que hacer en este proyecto","task.save":"anotar","task.saving":"anotando…","task.mcpNote":"Panoma no administra tareas: las guarda. Tu agente las lee por MCP cuando entra al proyecto, las coge y las cierra \xe9l.","task.saveFailed":"No se pudo anotar.","task.byHuman":"t\xfa","task.unreachable":"No se pudo contactar con el cat\xe1logo.","assignment.question":"\xbfQu\xe9 hacemos con esto?","assignment.title":"Enc\xe1rgaselo a tu agente","assignment.note":"Panoma redacta el encargo con lo que sabe del proyecto. \xc1brelo en tu terminal y tu agente empieza ahora, en este ordenador; d\xe9jalo en la cola y no pasa nada hasta que entre en el proyecto; o c\xf3piatelo y ll\xe9vatelo donde quieras.","assignment.see":"ver el encargo","assignment.copy":"copiar","assignment.copied":"copiado","assignment.copyFailed":"No se pudo copiar. Abre \xabver el encargo\xbb y selecci\xf3nalo a mano.","assignment.send":"dejarlo en la cola","assignment.sending":"a la cola…","assignment.sendTitle":"Se queda esperando a que tu agente entre en este proyecto. Ahora mismo no se ejecuta nada","assignment.launch":"abrir en tu terminal","assignment.launching":"abriendo…","assignment.launchTitle":"Abre un terminal en este ordenador con {agent} dentro del proyecto y el encargo puesto: empieza a trabajar en cuanto se abra","assignment.launched":"{agent} est\xe1 trabajando en tu terminal.","assignment.launchFailed":"No se pudo abrir el terminal.","assignment.queued":"en la cola","assignment.queuedNote":"En la cola. Tu agente lo recoge al entrar en el proyecto.","assignment.withdraw":"retirarlo","assignment.withdrawing":"retirando…","assignment.withdrawn":"Retirado. Tu agente ya no lo va a ver.","assignment.withdrawFailed":"No se pudo retirar.","assignment.failed":"No se pudo dejar en la cola.","assignment.resume":"Dime qu\xe9 me falta para retomarlo","assignment.resume.promise":"Que intente arrancarlo, apunte cada tropiezo y diga en qu\xe9 se qued\xf3 el trabajo.","assignment.competitors":"Busca a sus competidores","assignment.competitors.promise":"Qui\xe9n resuelve lo mismo hoy —vivo o muerto—, y qu\xe9 hueco queda de verdad.","assignment.plan":"Hazme un plan de mejora","assignment.plan.promise":"Qu\xe9 tocar primero y por qu\xe9, cruzando el c\xf3digo con lo que panoma ya mide.","assignment.presentable":"Ponlo en forma para ense\xf1arlo","assignment.presentable.promise":"Un README honesto, para que alguien de fuera lo entienda en dos minutos.","assignment.review":"Arregla lo que se ve sin abrir nada","assignment.review.promise":"Colores y esquinas sueltos, im\xe1genes que no dicen qu\xe9 muestran, enlaces rotos: lo que panoma vio leyendo la carpeta.","assignment.securityTitle":"Cierra la vulnerabilidad m\xe1s grave","assignment.securityPromise":"Panoma prepara el arreglo en una copia aparte del proyecto y te deja la propuesta esperando.","assignment.depsTitle":"Pon al d\xeda sus dependencias","assignment.depsPromiseOne":"{n} directa atrasada — elige cu\xe1l y panoma te trae la propuesta.","assignment.depsPromiseMany":"{n} directa{s} atrasadas — elige cu\xe1l y panoma te trae la propuesta.","assignment.depsChoose":"elegir cu\xe1l","sites.summaryOne":"{n} proyecto, mirando en {where}{extra}","sites.summaryMany":"{n} proyecto{s}, mirando en {where}{extra}","sites.andMore":"y {n} m\xe1s","sites.manage":"cambiar","sites.close":"cerrar","sites.countOne":"{n} proyecto","sites.countMany":"{n} proyecto{s}","sites.missing":"la carpeta ya no est\xe1","sites.remove":"quitar","sites.removeConfirm":"s\xed, quitar y retirar sus proyectos: {n}","sites.removed":"Deja de mirarse, y se retiran sus proyectos: {n}. Si la vuelves a a\xf1adir, vuelven.","sites.add":"a\xf1adir","sites.adding":"buscando…","sites.addedOne":"A\xf1adida. Encontr\xe9 1 proyecto.","sites.addedMany":"A\xf1adida. Encontr\xe9 {n} proyecto{s}.","sites.placeholder":"~/Documents","sites.fieldLabel":"Carpeta donde tambi\xe9n quieres que mire","sites.note":"Panoma solo encuentra proyectos dentro de estas carpetas. Uno que viva fuera no aparecer\xe1 nunca, ni escaneando ni esperando.","sites.search":"buscar por mi disco","sites.searching":"buscando…","sites.searchHint":"Recorre tu carpeta personal y propone d\xf3nde tienes m\xe1s proyectos.","sites.searchNone":"No encontr\xe9 proyectos fuera de lo que ya se mira.","sites.failed":"No se pudo.","ai.title":"Con qu\xe9 piensa Panoma","ai.intro":"Panoma no llama a ning\xfan modelo por su cuenta: solo cuando t\xfa se lo pides — al describir un proyecto, al redactar un encargo. Aqu\xed eliges con cu\xe1l.","ai.loading":"leyendo la configuraci\xf3n…","ai.loadingSlow":"sigue leyendo… la primera vez tarda m\xe1s.","ai.loadFailed":"No se pudo leer la configuraci\xf3n de IA ({status}).","ai.loadTimeout":"La configuraci\xf3n tard\xf3 demasiado en llegar.","ai.retry":"reintentar","ai.retrying":"reintentando…","ai.brokenTitle":"La configuraci\xf3n no se puede leer","ai.fileNote":"La configuraci\xf3n vive en {path}, con permisos 0600. Eso impide que otro usuario de esta m\xe1quina la lea, pero no est\xe1 cifrada: cualquier proceso que corra con tu usuario puede abrirla. Si prefieres no guardar nada en disco, exporta la clave como variable de entorno o usa un agente que ya tengas instalado.","ai.remote":"El cat\xe1logo es remoto: el modelo se configura en la m\xe1quina que lo sirve.","ai.activeTitle":"Proveedor activo","ai.none":"Ninguno todav\xeda. Elige uno de los de abajo.","ai.defaultModel":"modelo por defecto","ai.modelLabel":"modelo","ai.modelPlaceholder":"el de por defecto del proveedor","ai.modelSaved":"Ahora usa {model}.","ai.modelCleared":"Vuelve al modelo por defecto del proveedor.","ai.modelsFetch":"traer los suyos","ai.modelsLoading":"preguntando…","ai.modelsOpen":"ver los modelos","ai.modelsLive":"Dichos por el proveedor ahora mismo: {n}.","ai.modelsHint":"Sugerencias nuestras, que pueden estar viejas: {n}. Pulsa \xabtraer los suyos\xbb para la lista de verdad — o escribe el nombre que quieras.","ai.modelsEmpty":"No traemos sugerencias para este proveedor. Pulsa \xabtraer los suyos\xbb para ped\xedrselas — o escribe el nombre a mano.","ai.modelsNoMatch":"Ninguno se llama as\xed. Se guarda tal cual lo escribas.","ai.modelsNone":"Este proveedor no publica su cat\xe1logo. Escribe el nombre del modelo a mano.","ai.redirected":"Una variable de entorno redirigi\xf3 este proveedor a otra direcci\xf3n. Tu clave se manda ah\xed.","ai.sourceEnv":"del entorno","ai.sourceFile":"del fichero","ai.sourceAgent":"sesi\xf3n de tu agente","ai.sourceKey":"{source} \xb7 {key}","ai.sourceLogin":"sesi\xf3n iniciada","ai.connected":"sesi\xf3n iniciada","ai.notConnected":"sin sesi\xf3n","ai.login":"entrar","ai.loginAgain":"volver a entrar","ai.loggingIn":"esperando…","ai.loginWaiting":"Se abri\xf3 una pesta\xf1a para entrar en {name}. Aqu\xed te espero.","ai.loginDone":"Sesi\xf3n iniciada en {name}.","ai.loginFailed":"No se pudo iniciar sesi\xf3n.","ai.loginTimeout":"Se acab\xf3 el plazo esperando la vuelta del navegador.","ai.logout":"cerrar sesi\xf3n","ai.test":"probar","ai.testing":"probando…","ai.testOk":"Contest\xf3 {model} en {s}s.","ai.testHint":"Guarda una clave arriba, o elige un agente que ya tengas instalado.","ai.failed":"No se pudo.","ai.nowUsing":"Ahora usa {name}.","ai.forgotten":"Clave olvidada.","ai.forgottenButEnv":"Clave olvidada del fichero, pero {var} sigue puesta en el entorno.","ai.subscriptionTitle":"Usa una suscripci\xf3n que ya tienes","ai.subscriptionNote":"Si ya pagas Claude Pro o ChatGPT y tienes su herramienta con sesi\xf3n iniciada, Panoma le pasa el trabajo a ella. No guarda ning\xfan token ni ve tus credenciales: la suscripci\xf3n la usa tu propia herramienta, en tu m\xe1quina.","ai.installed":"instalado","ai.notInstalled":"no encontr\xe9 \xab{command}\xbb","ai.keysTitle":"Conecta con una clave","ai.fromEnv":"{var} en el entorno","ai.stored":"guardada {key}","ai.noKey":"sin clave","ai.keyPlaceholder":"pega la clave","ai.keyLabel":"Clave de {name}","ai.save":"guardar","ai.saving":"guardando…","ai.forget":"olvidar","ai.getKey":"sacar una","ai.inUse":"en uso","ai.choose":"usar este","ai.choosing":"cambiando…","ai.cantUse":"Necesita una clave guardada o el agente instalado.","search.fieldLabel":"Texto a buscar en el c\xf3digo","search.submit":"buscar","search.searching":"buscando…","search.scopeNote":"Texto literal, sin distinguir may\xfasculas. Solo se miran ficheros seguidos por git, as\xed que un fichero sin commitear no aparece.","search.scopeVendors":"Tampoco se busca en dependencias de terceros aunque est\xe9n en el historial —es c\xf3digo que no escribiste—:","search.matchOne":"1 coincidencia","search.matchMany":"{n} coincidencias","search.inProjectOne":"en 1 proyecto","search.inProjectMany":"en {n} proyecto{s}","search.reposSearched":"{n} repositorio{s} buscado{s}","search.skipped":"{n} sin git, no se pudieron buscar","search.skippedTitle":"Carpetas sin git: no hay nada que preguntar.","search.clickToOpen":"pulsa una coincidencia para abrirla en el editor","search.noMatch":"Ning\xfan fichero seguido por git contiene \xab{query}\xbb.","search.openAt":"Abrir {file} en la l\xednea {line}","search.truncated":"Solo se ense\xf1an las primeras {n}. Abre la carpeta para verlas todas.","search.openFolder":"Abrir la carpeta","search.openFolderAria":"Abrir la carpeta del proyecto","search.failed":"No se pudo buscar.","search.openFailed":"No se pudo abrir.","search.unreachable":"No se pudo contactar con el servidor.","open.folder":"abrir carpeta","open.editor":"abrir en el editor","open.terminal":"abrir terminal aqu\xed","open.busy":"abriendo…","open.doneFolder":"✓ abierta","open.done":"✓ abierto","open.unreachable":"No se pudo contactar con el servidor.","open.openWith":"Abrir en {name}","open.moreDestinations":"M\xe1s sitios donde abrirlo","open.defaultDestination":"Predeterminado","copy.command":"Copiar \xab{command}\xbb","copy.done":"copiado","project.health":"Salud {n}","project.healthTitle":"Salud {n} de 100","project.heroStatus":"Estado","project.heroActivity":"Actividad","project.heroCommits":"Commits","project.heroHealth":"Salud","project.commitOne":"{n} commit","project.commitMany":"{n} commit{s}","project.sections":"Secciones del proyecto","project.navAll":"Todo","project.navSummary":"Resumen","project.navChanges":"Qu\xe9 pas\xf3","project.navResume":"Retomar","project.navAssignments":"Encargos","project.navDeps":"Mantenimiento","project.navAgents":"Agentes","project.navMd":"El .md","project.mdQuestion":"\xbfLo que leen tus agentes es verdad?","project.mdTitle":"El fichero de instrucciones","project.mdCost":"{n} tokens de contexto en cada sesi\xf3n","project.mdNone":"Aqu\xed no hay AGENTS.md ni CLAUDE.md, que son los dos que los agentes leen solos al entrar: entran a este proyecto sin saber nada de \xe9l.","project.mdOnlyInherited":"Este proyecto no tiene AGENTS.md ni CLAUDE.md propio, pero hereda lo que dicen las carpetas de arriba: eso es lo que tus agentes leen al entrar aqu\xed.","project.mdNoneHint":"El bot\xf3n crea AGENTS.md con un bloque de contexto —pila, comandos, avisos, tareas— que Panoma mantiene al d\xeda solo.","project.mdFileMeta":"{tokens} tokens \xb7 {lines} l\xedneas","project.mdManaged":"bloque de Panoma","project.mdClean":"Todo lo que afirma existe.","project.mdFindingOne":"1 afirmaci\xf3n que ya no es verdad","project.mdFindings":"{n} afirmaciones que ya no son verdad","project.mdLine":"l\xednea {n}","project.mdPathMissing":"no existe en el proyecto","project.mdPathMovedTo":"no existe; hay uno en {path}","project.mdScriptMissing":"no est\xe1 en los scripts del package.json","project.mdScriptNear":"no est\xe1 en los scripts; hay {names}","project.mdBlockBroken":"el bloque de Panoma no se cierra: rev\xedsalo a mano","project.navAccounts":"Cuentas","accounts.copy":"copiar","accounts.copied":"copiado","accounts.editList":"Editar la lista","accounts.title":"Cuentas y enlaces","accounts.question":"\xbfCon qu\xe9 cuenta iba esto?","accounts.hint":"Lo que falta al volver: el correo del despliegue, el dominio, el panel de siempre.","accounts.empty":"Nada apuntado todav\xeda. El correo de la cuenta de despliegue, el registrador del dominio, el panel que siempre cuesta encontrar…","accounts.addFirst":"Apuntar la primera","accounts.edit":"Editar","accounts.addRow":"A\xf1adir otra","accounts.save":"Guardar","accounts.saving":"Guardando…","accounts.cancel":"cancelar","accounts.remove":"Quitar entrada","accounts.label":"Qu\xe9 es (Vercel, dominio, Stripe…)","accounts.email":"correo de la cuenta","accounts.note":"nota","accounts.noSecrets":"Sin contrase\xf1as ni claves: esto viaja en claro por el cat\xe1logo. Los secretos, al Llavero del sistema.","accounts.badUrl":"Hay un enlace que no se entiende. Vale el dominio (vercel.com/x), la direcci\xf3n entera (https://…) o la m\xe1quina con su puerto (localhost:3000). No se ha guardado nada.","accounts.needsLabel":"Hay una fila con datos y sin nombre. Ponle qu\xe9 es —Vercel, dominio, Stripe— o qu\xedtala con la \xd7. No se ha guardado nada.","check.title":"\xbfTodav\xeda compila?","check.none":"Nadie lo ha comprobado a\xfan. La salud de arriba deduce; esto demuestra: se instala y se compila en un worktree aparte, con aislamiento, sin tocar tu carpeta.","check.run":"Comprobarlo ahora","check.rerun":"Volver a comprobar","check.running":"Instalando y compilando en un worktree aparte… puede tardar unos minutos. Tu carpeta no se toca.","check.ok":"Compila","check.broken":"La build est\xe1 rota","check.inconclusive":"Sin veredicto","check.checkedOn":"comprobado el {date} \xb7 {seconds}s","check.dirty":"Hab\xeda cambios sin confirmar: el veredicto habla del \xfaltimo commit.","project.mdVersionWrong":"el proyecto lleva la {v}","project.mdEnvMissing":"el ejemplo de entorno no la declara","project.mdEnvNear":"el ejemplo no la declara; hay {names}","project.mdLead":"Es lo primero que tus agentes leen al entrar en este proyecto. Panoma vigila que lo que diga siga siendo verdad.","project.mdInitButton":"Crear AGENTS.md con el contexto","project.mdAddBlockButton":"A\xf1adir el bloque de contexto","project.mdSyncButton":"Regenerar el bloque","project.mdApplyWorking":"Escribiendo…","project.mdInitDone":"Hecho: {file} creado con el bloque de contexto. Tus agentes lo leer\xe1n en su pr\xf3xima sesi\xf3n, y Panoma lo mantendr\xe1 al d\xeda solo.","project.mdBlockAdded":"Hecho: el bloque de contexto ya est\xe1 en {file}. Se regenera solo cuando cambie la realidad.","project.mdSyncDone":"Bloque regenerado en {file}.","project.mdSyncSame":"El bloque ya estaba al d\xeda: nada que cambiar.","project.mdBridgeMissing":"Claude Code no leer\xe1 este fichero: solo carga CLAUDE.md, y este proyecto no tiene. El bot\xf3n de abajo escribe tambi\xe9n el puente — un CLAUDE.md de una l\xednea que importa AGENTS.md.","project.mdBridgeWritten":"Y CLAUDE.md qued\xf3 escrito con la importaci\xf3n @AGENTS.md, que es lo \xfanico que Claude Code carga.","project.mdTerminalAlt":"o en el terminal:","project.mdFindingsIntro":"Esto es lo que el fichero afirma y ya no es verdad. Lo que lleva pista lo repara el bot\xf3n; el resto se arregla editando el fichero, y al guardar Panoma lo repasa de nuevo.","project.mdReviewTitle":"La opini\xf3n del modelo","project.mdReviewAsk":"Pedir opini\xf3n al modelo","project.mdReviewAsking":"Leyendo el fichero…","project.mdReviewAgain":"volver a pedirla","project.mdReviewStale":"El fichero cambi\xf3 despu\xe9s de esta opini\xf3n: p\xeddela de nuevo si quieres juicio fresco.","project.mdReviewNote":"Contradicciones, redundancia y lo que falta: lo que el verificador mec\xe1nico no puede ver.","project.mdInherited":"Tambi\xe9n hereda, de las carpetas de arriba","project.mdInheritedMeta":"{tokens} tokens","project.mdInspectButton":"Repasarlo ahora","project.mdInspectWorking":"Repasando contra el disco…","project.mdRepairButton":"Reparar lo evidente ({n})","project.mdRepairWorking":"Reparando…","project.mdRepairDone":"{n} arreglo{s} aplicado{s}. Quedan {m} para tu mano.","project.mdRepairDoneAll":"{n} arreglo{s} aplicado{s}. No queda ninguno.","project.mdInheritedNote":"Tus agentes tambi\xe9n leen estos, de las carpetas de arriba. El repaso ense\xf1a qu\xe9 afirma cada uno que ya no es verdad, con su l\xednea.","project.mdTouches":"\xdaltimos toques al fichero","project.mdTouchAnon":"sin firma","project.mdTruncated":"El proyecto tiene m\xe1s ficheros de los que se indexan: las rutas no se comprobaron.","project.navDetails":"Detalles","project.moreActions":"M\xe1s acciones del proyecto","project.copyPath":"Copiar ruta","project.pathCopied":"Ruta copiada","project.pathCopyFailed":"No se pudo copiar la ruta","project.rescan":"Volver a escanear","project.rescanning":"Actualizando…","project.rescanned":"Proyecto actualizado","project.rescanFailed":"No se pudo actualizar","project.show":"mostrar","project.hide":"ocultar","project.showTitle":"Volver a ense\xf1arlo en la vista principal","project.hideTitle":"Sacarlo de la vista principal. Sigue en el cat\xe1logo.","project.remove":"quitar del cat\xe1logo","project.removeTitle":"Sacarlo del cat\xe1logo. No borra ninguna carpeta.","project.actionFailed":"No se pudo.","project.unreachable":"No se pudo contactar con el servidor.","project.removeHeading":"Quitar {name} del cat\xe1logo","project.removeBody":"Panoma se olvidar\xe1 de este proyecto y ning\xfan escaneo lo volver\xe1 a a\xf1adir. Se pierden su ficha, su historial de an\xe1lisis y lo que hayas escrito sobre \xe9l aqu\xed.","project.removeSafeStrong":"Tu carpeta no se toca.","project.removeSafeBody":"El c\xf3digo, el historial de git y todo lo que hay dentro se quedan exactamente donde est\xe1n. Esto solo borra lo que Panoma sab\xeda.","project.removeTypeBefore":"Escribe","project.removeTypeAfter":"para confirmar","project.removeTypeAria":"Escribe {name} para confirmar","project.cancel":"Cancelar","project.removing":"quitando…","project.removeConfirm":"Quitar del cat\xe1logo","project.overviewTitle":"Resumen del proyecto","project.whatChanged":"Qu\xe9 cambi\xf3","project.recentActivity":"Actividad reciente","project.today":"hoy","project.whereProtected":"D\xf3nde est\xe1 protegido","project.versionControl":"Control de c\xf3digo","project.withRemote":"Con remoto","project.withoutRemote":"Sin remoto","project.withoutGit":"Sin Git","project.historyCopied":"El historial tiene una copia fuera de este disco.","project.onlyHereOne":"1 commit solo en este disco.","project.onlyHereMany":"{n} commit{s} solo en este disco.","project.whatNeedsAttention":"Qu\xe9 necesita atenci\xf3n","project.maintenance":"Mantenimiento y salud","project.noMajorIssues":"No hay problemas importantes.","project.issuesOne":"1 asunto requiere revisi\xf3n.","project.issuesMany":"{n} asuntos requieren revisi\xf3n.","project.outOf100":"de 100","project.commitChartAria":"Commits de los \xfaltimos siete d\xedas","project.attnNoRemote":"Sin repositorio remoto","project.attnNoRemoteDetail":"El proyecto solo existe en este disco.","project.attnNoRemoteAction":"Configurar remoto","project.attnAdvisoriesOne":"1 aviso de seguridad","project.attnAdvisoriesMany":"{n} aviso{s} de seguridad","project.attnAdvisoriesDetail":"Hay dependencias que requieren revisi\xf3n.","project.attnAdvisoriesAction":"Revisar avisos","project.depsUnchecked":"sin comprobar","project.depsUncheckedWhy":"No se ha podido leer {file}, as\xed que no se conocen las versiones exactas y no se ha preguntado por avisos de seguridad.","project.attnUnchecked":"Los avisos de seguridad est\xe1n sin comprobar","project.attnUncheckedDetail":"{file} no se puede leer, y sin las versiones exactas no hay nada que preguntar. El cero de aqu\xed abajo no dice que est\xe9 limpio.","project.attnUncheckedAction":"Ver dependencias","project.attnOutdated":"{n}/{total} dependencia{totals} atrasada{totals}","project.attnOutdatedDetail":"Actualizar mejora la salud del proyecto.","project.attnOutdatedAction":"Ver dependencias","project.allGood":"Todo en orden","project.allGoodDetail":"No hay riesgos importantes ahora mismo.","project.whoBuilt":"Qui\xe9n lo construy\xf3","project.ofHistory":"del historial","project.agentsShare":"Agentes: {n}% del historial","project.noAgentCommits":"No se detectaron commits de agentes.","project.builtWith":"Con qu\xe9 est\xe1 hecho","project.kindLanguage":"Lenguaje","project.kindFramework":"Framework","project.seeFullStack":"Ver pila completa","project.fullStackTitle":"Pila tecnol\xf3gica completa","project.signalsDetected":"{n} se\xf1al{es} detectada{s}","project.confidence":"{n}% de confianza","project.resumeQuestion":"Vuelve a entrar sin investigar","project.resumeTitle":"C\xf3mo retomar el proyecto","project.noCommands":"No se han detectado comandos de arranque en esta carpeta.","project.lastYouDid":"Lo \xfaltimo que hiciste","project.howToStart":"C\xf3mo se arranca","project.whatItNeeds":"Qu\xe9 necesita instalado","project.runtimeChecking":"comprobando…","project.runtimeHave":"tienes {version}","project.runtimeMissing":"no est\xe1 instalado","project.missingEnv":"Variables de entorno que faltan ({n})","project.envDeclaredIn":"Declaradas en","project.envNoValue":"y sin valor en tu","project.envWhy":"Es la causa m\xe1s com\xfan de que un proyecto viejo arranque y falle en la primera pantalla.","purpose.install":"instalar","purpose.start":"arrancar","purpose.tests":"tests","purpose.build":"compilar","project.protectQuestion":"Protege tu trabajo","project.protectTitle":"Hay cambios que solo existen en este disco","project.protectBody":"Panoma no publica nada por ti: te deja el comando listo y t\xfa decides cu\xe1ndo ejecutarlo.","project.depsQuestion":"Mant\xe9nlo saludable","project.depsTitle":"Dependencias","project.depsInstalled":"{n} instalada{s}","project.depsDirect":"{n} directa{s}","project.depsOutdated":"{n} atrasada{s}","project.depsDirectAria":"Dependencias directas de {ecosystem}","project.depsTransitiveAria":"Dependencias transitivas de {ecosystem}","project.depsTransitiveOne":"1 transitiva, que arrastra una directa","project.depsTransitiveMany":"{n} transitivas, que arrastran las directa{s}","project.depDev":"Desarrollo","project.depDirect":"Directa","project.depTransitive":"Transitiva","project.depUpToDate":"Al d\xeda","project.noDeps":"No se detectaron dependencias.","project.propose":"proponer","project.proposing":"probando…","project.proposeDone":"Hecho.","project.alreadyFailed":"Ya se intent\xf3 y fall\xf3:","project.tryAnyway":"intentarlo de todos modos","project.proposeRefused":"El servidor no acept\xf3 la propuesta ({status}).","project.proposeUnreadable":"El servidor contest\xf3 algo que este bot\xf3n no sabe leer ({status}).","project.runUnreachable":"No se pudo contactar con el cat\xe1logo.","project.securityQuestion":"Revisa lo importante","project.securityTitle":"Seguridad","project.fixedIn":"Corregido en {versions}","project.detailsQuestion":"Contexto t\xe9cnico","project.detailsTitle":"Ficha del proyecto","project.whatItIs":"Prop\xf3sito","project.noDescription":"No hay suficiente contexto escrito para explicar el prop\xf3sito de este proyecto.","project.detected":"Detectado: {text}","project.aiExplain":"explicar de qu\xe9 trata","project.aiReading":"leyendo el proyecto…","project.aiWriting":"escribiendo…","project.aiRewrite":"volver a escribir","project.aiWrittenBy":"escrito por {model}","project.aiSomeModel":"un modelo","project.aiWrittenIn":"escrito en {lang}","lang.es":"espa\xf1ol","lang.en":"ingl\xe9s","project.aiNoteBefore":"Usa el modelo que hayas conectado con","project.aiNoteAfter":"Se le da el README, la pila detectada y los \xfaltimos commits, y se le proh\xedbe afirmar nada que no est\xe9 ah\xed. No sustituye a la descripci\xf3n del proyecto: se guarda aparte.","project.whereFrom":"Procedencia","project.originOwn":"Lo hiciste t\xfa","project.originForked":"Parti\xf3 del trabajo de otro","project.originForeign":"No lo empezaste t\xfa","project.originTemplate":"Lo gener\xf3 una plantilla","project.originUnknown":"No hay forma de saberlo","project.originEvidence":"Se\xf1ales que sustentan el resultado","origin.remote-foreign":"el remoto est\xe1 en la cuenta de {value}, no en la tuya","origin.first-commit-foreign":"el primer commit lo hizo {value}","origin.license-foreign":"la licencia es de {value}","origin.history-restarted":"el historial de git empieza contigo, as\xed que se reinici\xf3 al copiarlo","origin.your-share":"{value}% del historial es tuyo","origin.zip-suffix":"la carpeta acaba en \xab-{value}\xbb, como los ZIP de GitHub","origin.scaffold-first-commit":"el primer commit lo escribi\xf3 {value}","origin.only-commit":"y es el \xfanico que hay: nadie lo ha tocado desde entonces","origin.commit-count":"y el historial tiene {n} commit{s}","origin.container-yours":"el repositorio que lo contiene lo empezaste t\xfa ({value})","origin.first-commit-yours":"el primer commit es tuyo ({value})","origin.all-history-yours":"todo el historial es tuyo ({n} commit{s})","origin.remote-yours":"el remoto est\xe1 en tu cuenta ({value})","origin.scaffold-continued":"empez\xf3 desde {value} y lo has seguido t\xfa","origin.zip-suffix-own":"la carpeta acaba en \xab-{value}\xbb, como los ZIP que sirve GitHub: probablemente empez\xf3 como una descarga","origin.zip-suffix-none":"la carpeta acaba en \xab-{value}\xbb, que es como GitHub nombra los ZIP de \xabDownload ZIP\xbb","origin.manifest-repo":"el manifiesto apunta a {value}","origin.readme-foreign":"el README se presenta como material ajeno: \xab{value}\xbb","origin.no-own-repo":"y no hay repositorio propio donde empezara","origin.no-repo":"no hay repositorio: sin historial no se puede saber qui\xe9n lo empez\xf3","project.noOriginEvidence":"Panoma no encontr\xf3 se\xf1ales suficientes para justificar una procedencia.","project.localDataQuestion":"Lo que Panoma ha medido","project.localData":"Inventario local","project.primaryLanguage":"Lenguaje principal","project.notDetected":"No detectado","project.versionControlRemote":"Git \xb7 con copia remota","project.versionControlLocal":"Git \xb7 solo en este equipo","project.versionControlNone":"Sin Git","project.versionControlUnknown":"No comprobado","project.firstSeen":"En el cat\xe1logo desde","project.fileCount":"Ficheros de c\xf3digo","project.path":"Ruta","project.branch":"Rama","project.lastScan":"\xdaltimo escaneo","project.size":"Tama\xf1o","project.files":"{n} fichero{s}","project.logQuestion":"Trabajo coordinado","project.logTitle":"Actividad de agentes","project.logMore":"y m\xe1s: {n}","project.logFiles":"ficheros: {n}","project.logbook":"Bit\xe1cora","project.launches":"En tu terminal","project.launchOf":"encargo redactado","project.logEmpty":"Ning\xfan agente ha apuntado nada aqu\xed por MCP todav\xeda.","project.logEmptyHow":"Conecta uno a este proyecto y lo que vaya apuntando —cambios, decisiones, bloqueos— queda escrito aqu\xed, para quien pase dentro de tres meses.","project.tasks":"Tareas","project.proposals":"Propuestas","project.servicesQuestion":"D\xf3nde vive","project.servicesTitle":"Servicios y distribuci\xf3n","project.servicesEmpty":"No se detectaron servicios ni destinos de distribuci\xf3n.","project.noTechnologies":"No se detectaron tecnolog\xedas todav\xeda.","project.cleanupQuestion":"Limpieza","project.cleanupTitle":"Recursos sin usar","project.assetsSearch":"buscar recursos sin usar","project.assetsReading":"leyendo el c\xf3digo…","project.assetsSlow":"Lee todos los ficheros de c\xf3digo del proyecto, as\xed que tarda unos segundos.","project.assetsFailed":"No se pudo analizar.","project.assetsStats":"{n} recursos analizados \xb7 {platform} gestionados por la plataforma (no se miran) \xb7 {sources} ficheros de c\xf3digo le\xeddos","project.assetsAllUsed":"Todos los recursos aparecen mencionados en el c\xf3digo.","project.assetsUnused":"{n} sin referencia","project.assetsDynamic":"En {dirs} el c\xf3digo construye las rutas a trozos, as\xed que esas carpetas quedan fuera del an\xe1lisis: un fichero puede usarse sin que su nombre aparezca escrito.","project.assetsCaveat":"\xabSin referencia\xbb significa que el nombre del fichero no aparece en ning\xfan fichero de c\xf3digo. Es una pista, no una prueba — compru\xe9balo antes de borrar nada.","project.updated":"Actualizado {when}","project.codeSize":"{size} de c\xf3digo","project.backToCatalog":"Volver al cat\xe1logo","common.copyOf":"copia de {name}","common.iconOf":"Icono de {name}","common.health":"Salud {score}/100","search.title":"Busca en todos tus proyectos a la vez","search.intro":"\xab\xbfD\xf3nde escrib\xed yo aquello del webhook de Stripe?\xbb. Ning\xfan editor puede contestarlo, porque ninguno tiene abiertos los ochenta proyectos.","credentials.title":"Claves commiteadas en tus repositorios","credentials.intro":"Se busca en lo que git sigue, en todos tus repositorios a la vez. Una clave en un {env} ignorado est\xe1 en tu disco; una clave commiteada est\xe1 en cada copia que alguien haya clonado, y sigue en el historial aunque borres el fichero. Hoy se lee el contenido actual de lo seguido: una clave que ya borraste del \xe1rbol sigue en los commits viejos y todav\xeda no se busca ah\xed.","credentials.allowlist":"Solo se marcan credenciales con forma reconocible —prefijos que emite un \xfanico proveedor—, nunca heur\xedsticas del tipo \xabuna cadena larga junto a la palabra key\xbb. Y hay una lista expl\xedcita de lo que {not} es un secreto: las claves de cliente de Firebase y Google Maps son p\xfablicas por dise\xf1o, viajan dentro del APK y marcarlas ser\xeda la forma m\xe1s r\xe1pida de que dejaras de mirar esta p\xe1gina.","credentials.not":"no","scan.start":"revisar el portafolio","scan.again":"revisar otra vez","scan.busy":"leyendo el historial…","scan.failed":"No se pudo revisar.","scan.unreachable":"No se pudo contactar con el servidor.","scan.findingOne":"{n} hallazgo","scan.findingMany":"{n} hallazgos","scan.reposScanned":"{n} repositorio{s} revisado{s}","scan.skipped":"{n} sin git","scan.public":"{n} descartado{s} por ser p\xfablicos por dise\xf1o","scan.publicTitle":"Claves de cliente de Firebase y Google Maps, ficheros de ejemplo y dependencias de terceros.","scan.clean":"Ninguna credencial con forma reconocible en el historial de tus repositorios.","scan.trackedByGit":"{label} seguido por git","secret.stripe-live":"Clave secreta de Stripe en producci\xf3n","secret.stripe-test":"Clave secreta de Stripe de pruebas","secret.aws":"Clave de acceso de AWS","secret.github-token":"Token de GitHub","secret.anthropic":"Clave de API de Anthropic","secret.openai":"Clave de API de OpenAI","secret.slack":"Token de Slack","secret.private-key":"Clave privada","secret.supabase-service":"Clave service_role de Supabase","secret.google-api-key":"Clave de API de Google","secret.sendgrid":"Clave de SendGrid","secret.env-file":"fichero .env","secret.key-file":"fichero de claves","secret.google-service-account":"cuenta de servicio de Google","secret.ssh-private-key":"clave SSH privada","secretWhy.stripe-live":"Permite cobrar y mover dinero de la cuenta real.","secretWhy.stripe-test":"Solo afecta al entorno de pruebas, pero no deber\xeda estar en el historial.","secretWhy.aws":"Da acceso a la cuenta de AWS seg\xfan los permisos del usuario.","secretWhy.github-token":"Da acceso a los repositorios del usuario seg\xfan sus permisos.","secretWhy.anthropic":"Se factura a tu cuenta hasta que la revoques.","secretWhy.openai":"Se factura a tu cuenta hasta que la revoques.","secretWhy.slack":"Da acceso al espacio de trabajo de Slack.","secretWhy.private-key":"Una clave privada en el historial deja de ser privada.","secretWhy.supabase-service":"Salta todas las pol\xedticas de seguridad a nivel de fila. Es la llave maestra.","secretWhy.google-api-key":"Fuera de la configuraci\xf3n de cliente, una clave de Google sin restricciones de dominio la puede usar cualquiera y se factura a tu cuenta.","secretWhy.sendgrid":"Permite enviar correo en tu nombre.","secretWhy.file":"Borrarlo del \xe1rbol no basta: lo commiteado sigue en el historial y la clave hay que rotarla.","scan.orderTitle":"Si algo de esto es real, el orden importa","scan.step1Act":"Revoca la clave en el panel del proveedor.","scan.step1":"{act} Es lo \xfanico que la desactiva de verdad.","scan.step2":"Emite una nueva y ponla en un `.env` ignorado.","scan.step3Act":"Despu\xe9s, si quieres, l\xedmpiala del historial con `git filter-repo`.","scan.step3":"{act} Borrarla del fichero y commitear no sirve: sigue en todos los commits anteriores, y en cualquier copia que alguien haya clonado.","scan.notStored":"Este informe no se guarda en la base de datos. Guardar d\xf3nde est\xe1n exactamente tus claves filtradas ser\xeda crear un segundo sitio del que se pueden filtrar.","packages.title":"{n} dependencia{s} en tu portafolio","packages.emptyTitle":"Sin dependencias todav\xeda","packages.emptyBody":"Salen de los proyectos del cat\xe1logo: escanea una carpeta y las dependencias de cada proyecto aparecen aqu\xed, con su versi\xf3n y sus avisos.","packages.intro":"El portafolio visto por paquete en vez de por proyecto. Ning\xfan gestor de paquetes puede darte esta vista: solo ve un proyecto a la vez.","packages.stats":"{outdated} dependencias directas atrasadas \xb7 {advisories} avisos \xb7 comprobado {when}","packages.colPackage":"paquete","packages.colProjects":"proyectos","packages.colInUse":"en uso","packages.colLatest":"\xfaltima","packages.colAdvisories":"avisos","packages.deprecated":"obsoleto","packages.unpinned":"sin fijar","agents.empty":"Ning\xfan agente conectado","agents.countOne":"{n} agente","agents.countMany":"{n} agentes","agents.intro":"Lo que los agentes de IA han hecho en tus proyectos, en un solo sitio. Se conectan por MCP y reportan lo que hacen mientras trabajan.","agents.connectFirst":"Conecta uno desde la terminal:","agents.connectNote":"El comando imprime la clave y la configuraci\xf3n MCP lista para pegar. Mientras tanto, la atribuci\xf3n por trailers de git ya funciona sin instalar nada — mira cualquier proyecto con historial.","agents.entries":"{entries} entradas \xb7 {projects} proyectos","agents.seen":"visto {when}","agents.recentActivity":"Actividad reciente","families.title":"{n} carpeta{s} que son copia","families.intro":"Agrupadas por commit ra\xedz, remoto de git, nombre y dependencias compartidas. Para cada familia, panoma se\xf1ala cu\xe1l conservar — no borra nada. Que sea la principal no significa que el proyecto est\xe9 vivo: eso lo dice su estado, aparte.","families.stats":"{families} familias \xb7 {bytes} de c\xf3digo repetido","families.empty":"No hay copias en el cat\xe1logo. Escanea una carpeta con {cmd} para buscarlas.","families.copiesAndSize":"{n} copia{s} \xb7 {bytes}","families.canonical":"principal","families.copy":"copia","families.noGit":"sin git","families.sameDate":"misma fecha","families.daysBehind":"{n} d por detr\xe1s","runs.empty":"Ninguna propuesta todav\xeda","runs.countOne":"{n} propuesta","runs.countMany":"{n} propuestas","runs.intro":"Cada propuesta se prepara en un worktree aislado: se edita el manifiesto, se instala y se ejecutan los tests. El resultado es una rama con el parche — nunca un cambio aplicado en tu carpeta, y nunca un push.","runs.tryHint":"Prueba con una dependencia atrasada:","runs.argProject":"proyecto","runs.argPackage":"paquete","runs.branch":"rama","runs.security":"seguridad","runs.advisory":"aviso","runs.noTestsEmphasis":"nadie ha comprobado","runs.noTests":"Este proyecto no tiene tests, as\xed que {nobody} que siga funcionando con esta versi\xf3n. Revisa el parche con m\xe1s cuidado del habitual.","runs.steps":"Pasos","runs.patchLines":"Parche \xb7 {n} l\xednea{s}","patch.output":"output ({n} caracteres)","runActions.apply":"Aplicar en mi repositorio","runActions.merging":"Fusionando…","runActions.discard":"Descartar","runActions.discarding":"Borrando…","runActions.note":"Fusiona {branch} en tu rama actual. No hace push.","runActions.noDetail":"Sin detalle.","runActions.unreachable":"No se pudo contactar con el servidor.","isolation.container":"contenedor","isolation.container.title":"Ejecutado en un contenedor ef\xedmero: sin acceso a tu disco ni a tus procesos.","isolation.hardened":"entorno limpio","isolation.hardened.title":"Ejecutado con las variables de entorno filtradas y HOME desechable: los scripts de instalaci\xf3n no vieron tus credenciales. Siguen ejecut\xe1ndose en tu m\xe1quina y con red.","isolation.local":"sin aislar","isolation.local.title":"Ejecutado en tu m\xe1quina con tu entorno completo. Un script de instalaci\xf3n tuvo acceso a tus variables y a tu disco.","isolation.degraded":"degradado","hidden.empty":"No has apartado nada","hidden.count":"{hidden} ocultos y {excluded} fuera del cat\xe1logo","hidden.wordHidden":"oculto","hidden.wordExcluded":"fuera del cat\xe1logo","hidden.intro":"Un proyecto {hidden} sigue en el cat\xe1logo con todos sus datos: solo deja de aparecer en la rejilla y en los contadores. Uno {excluded} se ha borrado de Panoma, y ning\xfan escaneo lo vuelve a a\xf1adir hasta que lo readmitas.","hidden.diskNote":"Ninguna de las dos cosas ha tocado tu disco. Todas las carpetas siguen donde estaban, con su c\xf3digo y su historial intactos.","hidden.sectionHidden":"Ocultos ({n})","hidden.sectionExcluded":"Fuera del cat\xe1logo ({n})","hidden.outSince":"fuera desde {when}","hidden.readmitNote":"Readmitir solo levanta el veto: el proyecto reaparece en el siguiente {cmd}, con sus datos analizados de nuevo desde cero.","hidden.emptyBody":"Cuando ocultes o quites un proyecto, aparecer\xe1 aqu\xed para que puedas devolverlo.","undo.unhide":"volver a mostrar","undo.readmit":"readmitir","undo.failed":"No se pudo.","undo.unreachable":"No se pudo contactar con el servidor.","disk.empty":"Todav\xeda no has medido nada","disk.title":"{bytes} vuelven con un comando","disk.intro":"Dependencias instaladas, cach\xe9s y salidas de compilaci\xf3n. Panoma no borra nada: mide, dice de d\xf3nde sale cada cifra y te deja el comando que la regenera.","disk.metricTotal":"ocupan en total","disk.metricReclaimable":"regenerable","disk.metricShare":"{n}% del total","disk.metricDormant":"en proyectos dormidos","disk.metricDormantDetail":"sin un commit en m\xe1s de un a\xf1o","disk.metricMeasured":"proyectos medidos","disk.ofTotal":"de {bytes}","disk.shareAria":"{n}% del proyecto es regenerable","disk.moreDirs":"+{n} m\xe1s","disk.measuredAt":"medido {when}","disk.rules":"Una carpeta entra en esta lista por una de dos razones: su nombre solo significa \xabgenerado\xbb ({generated}) o el propio proyecto la ignora en git. Las de nombre ambiguo —{ambiguous}— que git no ignora se quedan fuera: en un proyecto son basura y en el de al lado son c\xf3digo escrito a mano.","measure.start":"medir el disco","measure.again":"volver a medir","measure.busy":"recorriendo el disco…","measure.noteFirst":"Recorre el \xe1rbol completo de cada proyecto. La primera vez tarda varios minutos.","measure.noteBusy":"Recorre el \xe1rbol completo de cada proyecto. Puede tardar varios minutos; no cierres esta pesta\xf1a.","measure.noteLast":"\xdaltima medici\xf3n: {when}. Los tama\xf1os cambian cada vez que instalas o compilas.","measure.done":"{n} proyecto{s} medidos","measure.missing":"{n} carpeta{s} ya no en el disco","measure.failed":"No se pudo medir.","measure.unreachable":"No se pudo contactar con el servidor.","unsaved.safe":"Todo est\xe1 a salvo","unsaved.countOne":"{n} proyecto con trabajo sin guardar","unsaved.countMany":"{n} proyecto{s} con trabajo sin guardar","unsaved.intro":"Lo que existe solo en este disco. Panoma lee el estado de git de cada carpeta y no toca nada: aqu\xed se ense\xf1a el comando, lo ejecutas t\xfa.","unsaved.statUnversioned":"{n} carpeta{s} sin control de versiones","unsaved.statOrphanCommits":"{n} commit{s} sin ninguna copia remota","unsaved.statUnpushed":"{n} commit{s} sin subir","unsaved.statChecked":"comprobado en el \xfaltimo escaneo \xb7 vuelve a correr {cmd} para refrescarlo","unsaved.emptyBody":"Ning\xfan proyecto del cat\xe1logo tiene cambios sin commitear, commits sin subir ni repositorios sin remoto.","unsaved.emptyNote":"Los proyectos escaneados con {flag} no aparecen aqu\xed: de esos no se sabe nada, que no es lo mismo que estar limpios.","unsaved.group.no-git":"Sin control de versiones","unsaved.blurb.no-git":"Carpetas con c\xf3digo y sin repositorio. No hay historial, ni remoto, ni forma de deshacer nada: un borrado accidental aqu\xed no se recupera.","unsaved.group.no-commits":"Con repositorio y ning\xfan commit","unsaved.blurb.no-commits":"Alguien hizo `git init` y ah\xed se qued\xf3. Todo lo que hay dentro est\xe1 fuera de cualquier historial.","unsaved.group.no-remote":"Solo en este disco","unsaved.blurb.no-remote":"Repositorios sin remoto configurado. Todo su historial existe en un \xfanico sitio: aqu\xed.","unsaved.group.unpushed":"Con commits sin subir","unsaved.blurb.unpushed":"Tienen remoto, pero hay commits que todav\xeda no han salido de aqu\xed.","unsaved.group.uncommitted":"Con cambios sin commitear","unsaved.blurb.uncommitted":"Ficheros tocados o sin a\xf1adir que no est\xe1n en ning\xfan historial.","unsaved.group.stashes":"Con stashes olvidados","unsaved.blurb.stashes":"Cambios apartados \xabun momento\xbb que llevan ah\xed desde entonces.","unsaved.files":"{n} fichero{s}","unsaved.copyOfTitle":"Panoma la considera una copia de {name}. Aun as\xed, lo que hayas tocado aqu\xed solo est\xe1 aqu\xed.","api.localOnly":"{action} solo funciona con el cat\xe1logo local.","api.action.openFolder":"Abrir carpetas","api.action.aiConfig":"Configurar el modelo","api.action.assign":"Encargar","api.action.withdraw":"Retirar un encargo","api.action.launchAgent":"Lanzar un agente","api.action.check":"Comprobar la build","api.action.measureDisk":"Medir el disco","api.action.writeBlock":"Escribir el bloque","api.action.rescan":"Volver a escanear","api.action.noteTask":"Anotar tareas","api.action.noteMemory":"Curar la memoria","api.action.hooks":"Poner los ganchos","api.missingId":"Falta el identificador del proyecto.","api.missingProject":"Falta el proyecto.","api.noProject":"Proyecto no encontrado.","api.noAssignment":"Ese encargo no existe.","api.unknownAction":"Acci\xf3n desconocida.","api.badLimit":"\xab{value}\xbb no vale como l\xedmite: hace falta un entero de 1 a {cap}.","api.unreachable":"No se pudo contactar con el servidor.","api.folderGone":"La carpeta ya no est\xe1 en {root}. Vuelve a escanear.","guard.rejected":"Petici\xf3n rechazada: {detail}.","guard.rejectedHint":"Panoma solo acepta acciones desde su propia interfaz o desde el CLI.","guard.otherSite":"la petici\xf3n viene de otro sitio ({site})","guard.otherOrigin":"el origen {origin} no es esta aplicaci\xf3n","guard.localOperatorOnly":"Esto le da \xf3rdenes al ordenador donde vive el cat\xe1logo, y para eso hace falta su clave de operador.","guard.localOperatorOnlyHint":"Abre el cat\xe1logo con el enlace de \xabesta m\xe1quina\xbb que imprime \xabpanoma up --network\xbb, o hazlo desde el propio ordenador.","open.unknownTool":"No s\xe9 abrir con \xab{tool}\xbb.","open.gone":"La carpeta ya no est\xe1 en {root}.","open.goneHint":"Puede que la movieras o la borraras. Vuelve a escanear para actualizar el cat\xe1logo.","open.noEditor":"No encontr\xe9 ning\xfan editor en el PATH.","open.noConfig":"No sabemos d\xf3nde guarda ese agente su configuraci\xf3n.","open.noEditorHint":"Se buscan, por este orden: {order}. En VS Code o Cursor se instala con \xabShell Command: Install 'code' command in PATH\xbb, y el orden se cambia con la variable PANOMA_EDITOR.","open.unsupportedTool":"No s\xe9 abrir \xab{tool}\xbb en {os}.","open.launchFailed":"No se pudo abrir con {command}.","open.launchNamedFailed":"No se pudo abrir {name}: {detail}","open.noTerminalHere":"Todav\xeda no s\xe9 abrir un terminal en {os}.","open.noTerminalHereHint":"Abre la carpeta y lanza tu agente a mano.","open.noAgent":"No encontr\xe9 ning\xfan agente instalado.","open.noAgentHint":"Se buscan, por este orden: {agents}. Con uno instalado y con la sesi\xf3n iniciada, este bot\xf3n lo lanza.","open.appMissing":"Esa aplicaci\xf3n no est\xe1 instalada en esta m\xe1quina.","ai.unknownProvider":"Proveedor desconocido.","ai.noKeyNeeded":"{name} no usa clave: usa tu sesi\xf3n ya iniciada.","ai.emptyKey":"La clave lleg\xf3 vac\xeda.","ai.notAKey":"Eso no parece una clave.","ai.noLogin":"Ese proveedor no usa inicio de sesi\xf3n.","ai.loginBusy":"Ya hay un inicio de sesi\xf3n a medias. Term\xednalo o espera a que caduque.","assign.alreadyQueued":"Ese encargo ya est\xe1 en la cola.","assign.pasteHint":"Copia el encargo y p\xe9gaselo a tu agente.","check.busy":"Ya hay una comprobaci\xf3n en marcha para este proyecto.","check.failed":"No se pudo comprobar: {detail}","tasks.needTitle":"La tarea necesita una frase.","tasks.tooLong":"La frase no puede pasar de {n} caracteres.","notes.tooLong":"Una nota es un hecho en una o dos frases: ni vac\xeda ni un p\xe1rrafo. El tope de caracteres es 500.","notes.overBudget":"La memoria est\xe1 llena: consolida o descarta alguna nota antes de aprobar otra. El tope de caracteres es 2000.","notes.sleepingFull":"Las se\xf1ales dormidas est\xe1n al completo: descarta o consolida una antes de aprobar otra. El tope de plazas es 30.","notes.pendingFull":"Hay demasiadas propuestas esperando: decide sobre las que hay antes de a\xf1adir m\xe1s. El tope es 20.","notes.gone":"Esa nota ya est\xe1 decidida.","notes.saveFailed":"No se pudo guardar.","notes.title":"Memoria","notes.hint":"Hechos durables que cualquier agente recibe al abrir el proyecto. Lo que propone un agente espera aqu\xed tu s\xed.","notes.empty":"Nada apuntado todav\xeda.","notes.pendingTitle":"Propuestas","notes.approve":"Aprobar","notes.discard":"Descartar","notes.add":"Apuntar","notes.addPlaceholder":"Un hecho durable del proyecto…","notes.proposedBy":"propuesta de {agent}","notes.sleepsAt":"duerme en {trigger}","notes.badTrigger":"El d\xf3nde tiene que ser una ruta relativa del proyecto: exacta o zona con /** al final.","notes.challengedTitle":"Impugnadas","notes.challengedEvidence":"el disco cambi\xf3: {target} ({observed})","notes.reapprove":"Reaprobar","double.title":"El doble","double.shadowTag":"en sombra","double.hint":"Lo que tus agentes te habr\xedan preguntado, y lo que tu doble habr\xeda contestado. Nadie ha visto estas respuestas: etiquetarlas es su examen.","double.askedBy":"pregunta de {agent}","double.drafting":"El doble a\xfan no ha redactado.","double.abstained":"El doble se abstuvo: ninguna de tus creencias cubre esta pregunta.","double.cites":"Se apoya en:","double.backed":"Habr\xeda dicho lo mismo","double.vetoed":"No","double.labeledBacked":"coincidiste","double.labeledVetoed":"no coincidiste","double.gone":"Esa consulta ya est\xe1 etiquetada.","double.saveFailed":"No se pudo guardar.","roots.serverOnly":"Los sitios vigilados son de la m\xe1quina que sirve el cat\xe1logo.","roots.missingFolder":"Falta la carpeta.","roots.system":"{path} es del sistema: ah\xed no hay proyectos tuyos.","roots.home":"Tu carpeta personal entera es demasiado: a\xf1ade las carpetas donde programas.","roots.library":"Ah\xed solo hay datos de apps.","roots.notAFolder":"{path} no es una carpeta que exista.","roots.covered":"{path} ya est\xe1 dentro de {covering}, que se mira entera. Si solo quieres esa, quita antes la de fuera.","rescan.failed":"No se pudo actualizar {name}: {detail}","md.missingSlugPath":"Falta el proyecto o el fichero.","md.missingSlugAction":"Falta el proyecto, o qu\xe9 hacer con el bloque.","accounts.missingInput":"Falta el proyecto o la lista de cuentas.","accounts.badUrlAt":"El enlace de \xab{label}\xbb no se entiende. No se ha guardado nada.","agentMcp.localOnly":"Conectar un agente escribe en este disco: solo desde la m\xe1quina local.","agentMcp.missingInput":"Falta el agente.","agentMcp.noServer":"El servidor MCP no est\xe1 en esta instalaci\xf3n. Constr\xfayelo con: pnpm --filter @panoma/mcp run build","agentMcp.badJson":"{path} tiene un error de sintaxis. No lo toco: arr\xe9glalo y pega esto t\xfa, o vuelve a intentarlo.","agentMcp.notAnObject":"{path} no tiene la forma que esper\xe1bamos. No lo toco: pega esto donde corresponda.","agentMcp.badToml":"{path} tiene un error de sintaxis. No lo toco: arr\xe9glalo y pega esto t\xfa, o vuelve a intentarlo.","agentMcp.tomlManual":"Panoma ya est\xe1 en {path}, escrito a tu manera. No lo toco: actual\xedzalo t\xfa con esto.","agentKeys.localOnly":"Solo desde la m\xe1quina local.","agentKeys.missingField":"Falta \xab{field}\xbb.","agentKeys.gone":"Ese agente ya no est\xe1.","verdicts.malformed":"Falta la lista de reacciones, o alguna no tiene la forma esperada. No se ha guardado nada.","verdicts.tooMany":"Llegan {n} reacciones y de una vez caben {cap}. No se ha guardado nada: m\xe1ndalas por tandas.","verdicts.badSource":"\xab{source}\xbb no es una fuente que se pueda olvidar. Las que hay: {sources}, o \xaball\xbb para todas.","verdicts.unknownSource":"\xab{source}\xbb no es una fuente conocida. Las que hay: {sources}.","verdicts.badAccepted":"\xab{value}\xbb no dice nada sobre la revisi\xf3n. Escribe accepted=true, accepted=false o accepted=pending.","distill.failed":"No se pudo destilar: {detail}","distill.noProvider":"Configura un proveedor con: panoma ai use <proveedor>","api.modelFailed":"No se pudo pedir al modelo: {detail}","model.noneConnected":"no hay ning\xfan modelo conectado","model.connectHint":"Conecta uno en la p\xe1gina Modelo, o desde el terminal: panoma ai use <proveedor>","model.noCredential":"falta la credencial de {name}","model.hintCli":"Instala {name} e inicia sesi\xf3n; Panoma llamar\xe1 a \xab{command}\xbb.","model.hintOauth":"Inicia sesi\xf3n en {name} desde la p\xe1gina Modelo.","model.hintKey":"Guarda la clave en la p\xe1gina Modelo o con \xabpanoma ai key {id}\xbb. Se saca en {url}","look.noImage":"Falta la captura: no hay ninguna imagen que mirar.","look.badImage":"Esa imagen no se puede leer: llega vac\xeda o en un formato que no es imagen.","look.noProfile":"No hay con qu\xe9 medir esta pantalla: tu retrato est\xe1 vac\xedo y este proyecto no tiene norte. Destila tu historial —panoma twin distill— o escribe un norte con panoma north.","look.budgetSpent":"Las miradas de hoy est\xe1n gastadas: {used} de {cap}. Vuelven ma\xf1ana, o sube el tope con PANOMA_LOOK_BUDGET.","look.failed":"No se pudo mirar: {detail}","look.noVision":"El proveedor que tienes configurado no sabe recibir im\xe1genes: {detail}","look.assignMalformed":"Falta decir qu\xe9 hallazgo hay que encargar.","look.assignGone":"Ese hallazgo ya no est\xe1: la mirada de la que sal\xeda se borr\xf3.","look.assignQueued":"Eso ya est\xe1 en la cola.","look.assignButton":"Dejarlo en la cola","look.assignDone":"Encargado en {project}: {title}","look.assignNow":"Hazlo ahora","look.assignAgain":"M\xe1ndalo otra vez","look.dismissButton":"Descartarlo","look.dismissed":"descartado","look.dismissDone":"Descartado. Si cambias de idea, se puede volver a poner en la cola.","critique.showOne":"Ver el hallazgo","critique.showMany":"Verlos de uno en uno — hallazgos: {findings}","critique.hide":"Cerrar la lista","critique.moved":"Esta revisi\xf3n ya no es la que est\xe1s viendo: la carpeta cambi\xf3 y panoma la rehizo. Recarga para ver los hallazgos de ahora.","critique.never":"Panoma todav\xeda no ha le\xeddo esta carpeta, as\xed que aqu\xed no hay nada que ense\xf1ar: ni bueno ni malo.","critique.clean":"Panoma la ley\xf3 y no encontr\xf3 ni una pega mec\xe1nica. Ficheros mirados: {n}.","critique.partial":"Y no lleg\xf3 a mirarla entera: la carpeta trae m\xe1s de lo que cabe en una pasada.","critique.queued":"En la cola. Tu agente lo recoge al entrar en el proyecto.","critique.dismissed":"Descartado. Si cambias de idea, se puede volver a poner en la cola.","look.assignLaunched":"Terminal abierto con {agent} trabajando en ello.","look.assigning":"A la cola…","look.assigned":"en la cola","assign.noTask":"Ese encargo ya no est\xe1 en la cola.","assign.notQueued":"Ese encargo ya no estaba en la cola: puede que un agente lo cerrara.","assign.taskIdLine":"Este encargo est\xe1 en la cola de panoma con el id {id}: c\xf3gelo con panoma_claim_task antes de empezar y ci\xe9rralo con panoma_complete_task al terminar.","look.noIdentity":"Este proyecto todav\xeda no tiene identidad estable —sale del primer commit—, as\xed que no habr\xeda d\xf3nde guardar lo que se mirase. Haz el primer commit y vuelve a intentarlo.","look.noShot":"Esa captura ya no est\xe1 en el buz\xf3n: {name}","look.noShotName":"Falta decir qu\xe9 captura hay que mirar.","look.unreadableShot":"Esa captura estaba en la lista y no se pudo abrir: {detail}. La habr\xe1n borrado, o pesa m\xe1s de lo que se puede mirar.","dest.look":"El cr\xedtico: qu\xe9 est\xe1 mal en lo que te entregaron","look.kicker":"Twin \xb7 el cr\xedtico","look.title":"Qu\xe9 est\xe1 mal en lo que te acaban de entregar","look.intro":"El turno del medio, hecho por otro. Mira la pantalla con tu retrato delante y dice qu\xe9 frase tuya rompe, con la siguiente orden ya redactada. Un juicio que no cuelgue de una frase que firmaste no sale de aqu\xed.","look.yardstick":"vara de medir \xb7 frases del retrato: {n}","look.noYardstick":"Tu retrato est\xe1 vac\xedo, as\xed que no hay con qu\xe9 medir: esto solo denuncia lo que incumple una frase tuya. Empieza por tu doble.","look.budget":"miradas de hoy: {used} \xb7 tope del d\xeda: {cap}","look.watch":"El vig\xeda mira solo lo que aparezca en un buz\xf3n, y cada captura una vez. Su reserva del d\xeda: {cap}.","look.notRedacted":"Una captura viaja entera: no hay forma de tachar p\xedxeles. Lo que se vea en ella —una clave en un terminal, un correo real— sale con la imagen.","look.inboxTitle":"El buz\xf3n","look.inboxOf":"El buz\xf3n de {project}","look.inboxEmpty":"Montado y vac\xedo: todav\xeda no ha dejado nada ning\xfan agente.","look.inboxSkipped":"ficheros que no son im\xe1genes y no se miran: {n}","look.noInbox":"Ning\xfan proyecto tiene el buz\xf3n montado.","look.noInboxHint":"Se monta con \xabpanoma md init\xbb dentro del proyecto. A partir de ah\xed tus agentes leen en AGENTS.md d\xf3nde dejar lo que construyen, y aparece aqu\xed.","look.button":"Mirar","look.buttonAgain":"Volver a mirar","look.looking":"Mirando…","look.looked":"ya mirada \xb7 hallazgos: {n}","look.lookedClean":"ya mirada \xb7 no romp\xeda nada","look.estimate":"frases: {statements} \xb7 tokens del encargo: {tokens} \xb7 imagen: {size}","look.verdictOf":"Lo que dice de {subject}","look.clean":"No rompe ninguna de tus frases.","look.unreadable":"La respuesta no ten\xeda forma de hallazgos. La llamada se pag\xf3 igual, y se puede volver a mirar.","look.fix":"P\xeddele: {fix}","look.against":"contra: {statement}","look.measured":"medido contra frases: {statements}","look.dropped":"juicios sin respaldo descartados: {n}","look.uploadTitle":"\xbfNo est\xe1 en ning\xfan buz\xf3n?","look.uploadHint":"Una aplicaci\xf3n de escritorio, un marco de Figma, la foto de un m\xf3vil: lo que ning\xfan agente puede capturar se sube desde aqu\xed.","look.uploadPick":"Elegir imagen","look.uploadTarget":"Proyecto al que subir la captura","look.badType":"Eso no es una imagen de las que se pueden mirar: PNG, JPEG, WebP o GIF.","look.tooBig":"Esa imagen pesa {size} y el tope est\xe1 en {cap}. Rec\xf3rtala o exp\xf3rtala a JPEG.","look.historyTitle":"Lo que ya ha mirado","look.historyEmpty":"Todav\xeda no ha mirado nada.","look.firedWatch":"lo mir\xf3 el vig\xeda","look.firedHand":"lo pediste t\xfa","taste.full":"No cabe: el retrato ocupar\xeda {chars} de {cap} caracteres. No se ha guardado nada. Quita alguna frase, o ac\xf3tala a su proyecto para que solo cuente all\xed, y vuelve a guardar.","twin.toCritic":"Ense\xf1arle una pantalla al cr\xedtico →","twin.title":"Esto es lo que he aprendido de ti","twin.titleEmpty":"Todav\xeda no he aprendido nada de ti","twin.intro":"Cada creencia sale de cosas que le escribiste a tus agentes, con las citas debajo. No hay nada que aprobar: si no tocas nada, esto es lo que leen tus agentes. L\xe9elo, y corrige lo que no seas t\xfa.","twin.introWaiting":"Cada creencia sale de cosas que le escribiste a tus agentes, con las citas debajo. Todav\xeda no llegan a ellos: esto lo dedujo una m\xe1quina y hace falta que digas que s\xed una vez, ah\xed abajo.","twin.introEmpty":"Panoma lee tu historial con los agentes en tu propio disco y saca de ah\xed las pocas cosas que de verdad piensas sobre c\xf3mo quieres que quede tu trabajo, con las citas de las que sali\xf3 cada una.","twin.introEmptyHint":"Empieza aqu\xed abajo, en tus historias: dice cu\xe1les hay en esta m\xe1quina y cu\xe1nto ocupan, medido sin abrir ninguna.","twin.counts":"creencias: {beliefs} \xb7 en formaci\xf3n: {forming} \xb7 evidencia: {observations}","twin.density":"observaciones por creencia: {density}","twin.corrections":"has corregido {corrections} de {shown}","twin.rate":"{rate} % ha necesitado que lo corrijas","today.criticWhere":"Lo que vio, y d\xf3nde","today.criticFindingOne":"{n} cosa","today.criticFindingMany":"{n} cosa{s}","today.criticOne":"el cr\xedtico ha visto algo mientras no mirabas","today.criticMany":"el cr\xedtico ha visto cosas mientras no mirabas: {n}","twin.briefs":"de lo que el cr\xedtico ha visto has encargado {ordered} de {findings}","twin.briefsRate":"{rate} % de lo que se\xf1ala te vale","twin.briefsLaunched":"de esos han salido a un agente: {launched}","twin.briefsDiscarded":"y has dicho que no a: {discarded}","twin.reachTitle":"Qui\xe9n lo lee","twin.reach":"Tu retrato baja al .md de estos proyectos: {reached} de {projects}","twin.reachNone":"Ahora mismo no lo lee ning\xfan agente: ninguno de tus proyectos tiene abierto el canal. Se abre uno a uno, dentro de la carpeta.","twin.reachSome":"En los dem\xe1s no est\xe1 abierto el canal, as\xed que ah\xed tus agentes trabajan sin saber nada de esto.","twin.reachHow":"panoma md init","twin.designTitle":"C\xf3mo se ve lo tuyo","twin.designFrom":"Sale de los proyectos que el cr\xedtico ha le\xeddo, sin contar copias: {read} \xb7 de esos, con algo que mirar: {withUi}","twin.designProjects":"proyectos: {projects}","twin.designFonts":"Tipograf\xedas: {fonts}","twin.designRadii":"Esquinas: {radii}","twin.designTraits":"Con modo oscuro: {dark} \xb7 con animaci\xf3n: {animation}","twin.briefsRelaunched":"alguno m\xe1s de una vez — lanzamientos: {launches}","twin.digest":"En los \xfaltimos {days} d\xedas — nuevas: {created} \xb7 afinadas: {refined} \xb7 retiradas: {retired}.","twin.corpusLeft":"Todo esto sale de {read} citas tuyas de las {total} que hay guardadas: quedan {left} sin leer.","twin.distillAll":"Leer el resto de mi historial \xb7 quedan {n} cita{s}","twin.distilling":"Leyendo…","twin.distillEstimate":"esta pasada lee {verdicts} citas \xb7 unos {tokens} tokens de entrada","twin.distillProgress":"le\xeddas: {read} \xb7 observaciones guardadas: {saved} \xb7 quedan: {left}","twin.distillNothing":"No queda historial por leer.","twin.corpusDone":"Sale de tu historial entero: las {total} cita{totals} guardadas ya se han le\xeddo.","twin.scopeOnly":"Solo en {project}","twin.scopeAll":"Vale en todo lo que haces","twin.scopedTag":"solo en {project}","twin.badgeSigned":"firmada por ti","twin.badgeStanding":"en pie","twin.badgeForming":"en formaci\xf3n","twin.formingWhy":"le faltan pruebas: hacen falta tres, de dos d\xedas o de dos proyectos","twin.support":"observaciones: {observations} \xb7 proyectos: {projects} \xb7 d\xedas: {days}","twin.showCitations":"ver las citas: {n}","twin.hideCitations":"ocultar las citas","twin.sign":"Est\xe1 bien dicha","twin.edit":"Decirlo con mis palabras","twin.editSave":"Guardar mi versi\xf3n","twin.editText":"Texto de la creencia","twin.veto":"Eso no lo pienso","twin.markedGestures":"cambios marcados: {n}","twin.topicDesign":"Dise\xf1o","twin.topicFrontend":"La interfaz por dentro","twin.topicBackend":"El servidor y sus datos","twin.topicCli":"La terminal","twin.topicTesting":"C\xf3mo se comprueba","twin.topicCopy":"Las palabras","twin.topicWorkflow":"C\xf3mo trabajas con tus agentes","twin.topicTooling":"Las herramientas","twin.topicData":"Los datos","twin.topicOther":"Lo dem\xe1s","twin.consentTitle":"Una sola pregunta","twin.consentBody":"Hay creencias que la m\xe1quina ha deducido sola y que todav\xeda no has mirado. Mientras no digas que s\xed, el fichero que leen tus agentes es exactamente lo que t\xfa firmaste: nada que no hayas escrito habla en tu nombre.","twin.consentCount":"esperando: {n} \xb7 ocupar\xedan en total: {chars} caracteres","twin.consentOver":"con ellas el retrato no cabr\xeda en {cap} caracteres, as\xed que habr\xeda que sacar algo","twin.consentAllow":"Que bajen al fichero","twin.consentRevoke":"Se retira borrando twin.json, sin abrir esto.","twin.proposalsTitle":"Quiere cambiar algo que firmaste","twin.proposalsNote":"Estas las escribiste t\xfa, as\xed que la m\xe1quina no las toca: dice c\xf3mo las dir\xeda ahora y espera.","twin.proposalJoins":"junta estas: {n}","twin.proposalAccept":"Que lo cambie","twin.proposalReject":"D\xe9jalo como est\xe1","twin.graveyardTitle":"Lo que dijiste que no eras","twin.graveyardNote":"No se borra: se queda aqu\xed para que la s\xedntesis no lo vuelva a proponer con otras palabras.","twin.save":"Guardar","twin.saving":"Guardando…","twin.cancel":"Descartar lo marcado","twin.saveFailed":"No se pudo guardar: {detail}","twin.fileTitle":"TASTE.md","twin.fileSize":"{chars} de {cap} caracteres","twin.fileHint":"Es el fichero que leen tus agentes, y la otra puerta para lo mismo: \xe1brelo y borra una l\xednea, y esa frase sale del retrato la pr\xf3xima vez que decidas algo aqu\xed.","twin.fileFull":"No cabe. Hasta que saques algo, lo que decidas se guarda en el cat\xe1logo pero no llega al fichero, y el fichero es lo \xfanico que leen tus agentes.","twin.fileWritten":"escritas ahora mismo: {n}","twin.fileRoom":"Queda sitio para {n} caracteres.","twin.spendTitle":"Lo que ha costado hoy","twin.spendLooks":"miradas: {used} de {cap}","twin.spendTokens":"{input} tokens de entrada \xb7 {output} de salida","twin.spendNone":"Hoy no se ha llamado a ning\xfan modelo.","twin.spendUnmetered":"{n} sin medir: ese proveedor no publica el consumo.","twin.spendDistills":"destilaciones: {n}","twin.spendClassify":"repartos por materia: {n}","twin.spendSynth":"s\xedntesis: {n}","twin.sourcesTitle":"Tus historias con tus agentes","twin.sourcesLead":"Panoma las mide sin abrirlas. Nada se lee hasta que digas que s\xed, y el s\xed es de una en una: leer Claude Code no es leer Codex.","twin.sourcesNone":"En este disco no hay ninguna historia de agente que Panoma sepa medir.","twin.sourceSize":"ficheros: {files} \xb7 {size}","twin.sourceGone":"ya no est\xe1 en este disco","twin.sourceAllow":"Dejar que la lea","twin.sourceRevoke":"Dejar de leerla","twin.sourceNoReader":"todav\xeda no sabemos leerla","twin.sourcesRevokeNote":"Dejar de leerla cierra la puerta y no borra lo que ya entr\xf3: eso lo hace panoma twin forget.","twin.consentMalformed":"Falta decir qu\xe9 fuente y si se permite.","twin.consentUnknown":"Esa fuente no existe en este disco: {source}","twin.mineNoConsent":"Ninguna de tus historias tiene permiso, as\xed que no se ha abierto ni un fichero. Dilo aqu\xed abajo, en tus historias.","twin.mineNoReadable":"Las historias de este disco todav\xeda no se saben leer, as\xed que no hay permiso que valga: no se ha abierto ni un fichero.","twin.mineNoHistories":"En este disco no hay ninguna historia de agente que leer, as\xed que no se ha abierto ni un fichero.","twin.mineButton":"Buscar lo nuevo en mi historial","twin.mineButtonLeft":"Leer mi historial \xb7 quedan {n}","twin.mining":"Leyendo tus historias…","twin.mined":"citas nuevas: {saved} \xb7 ya estaban: {duplicates}","twin.minedNone":"No hay nada nuevo en tus historias desde la \xfaltima vez.","twin.churnTitle":"C\xf3mo se ha movido tu retrato","twin.churnMonth":"{month} — nuevas: {created} \xb7 afinadas: {refined} \xb7 retiradas: {retired}","twin.churnStill":"Este mes no se ha movido: lo que hay ya est\xe1 dicho.","twin.churnOnlyRefined":"Este mes solo se ha reescrito lo que ya hab\xeda: nada nuevo y nada retirado.","twin.projectQuestion":"\xbfCon qu\xe9 se mide lo que se entrega aqu\xed?","twin.projectTitle":"Lo que tus agentes leen aqu\xed","twin.projectLead":"Baja por AGENTS.md a cada sesi\xf3n que abras en esta carpeta. Lo global va en todos tus proyectos; lo dem\xe1s vale solo aqu\xed.","twin.projectLeadUnmanaged":"Lo global vale en todos tus proyectos; lo dem\xe1s, solo aqu\xed. Todav\xeda no baja a tus agentes: este proyecto no tiene el bloque de Panoma en su AGENTS.md.","twin.projectCount":"frases que rigen aqu\xed: {n}","twin.projectOnly":"solo de este proyecto: {n}","twin.projectOnlyHere":"solo aqu\xed","twin.projectNone":"Todav\xeda no hay retrato, as\xed que aqu\xed no se mide nada.","twin.projectNoneHere":"Tu retrato no dice nada que rija en este proyecto.","twin.projectForming":"en formaci\xf3n sobre este proyecto: {n}","twin.projectOpen":"Abrir tu gemelo","twin.spendReads":"lecturas: {used} de {cap}","twin.readsSpent":"Las lecturas de hoy est\xe1n gastadas: {used} de {cap}. Vuelven ma\xf1ana, o sube el tope con PANOMA_READ_BUDGET.","twin.synthesize":"Rehacer el retrato","twin.synthesizing":"Escribiendo…","twin.synthHint":"Lee toda tu evidencia y reescribe lo que la m\xe1quina cree de ti.","twin.synthDone":"nuevas: {created} \xb7 afinadas: {refined} \xb7 retiradas: {retired}.","twin.synthAsks":"Y te pregunta por creencias que firmaste: {n}.","twin.synthSame":"Nada ha cambiado: la evidencia dice lo mismo que la \xfaltima vez.","twin.synthNothing":"Todav\xeda no hay evidencia que sintetizar. Lee tu historial aqu\xed arriba: de ah\xed salen las observaciones de las que sale el retrato.","twin.synthUpToDate":"El retrato ya est\xe1 al d\xeda: no ha entrado evidencia nueva.","twin.synthFailed":"No se pudo escribir el retrato.","twin.citedIn":"en {project}","score.tooFew":"Te ha dicho {shown}. Hacen falta {floor} para que un porcentaje signifique algo: por debajo, una sola correcci\xf3n lo mueve m\xe1s de cinco puntos y hablar\xeda de la \xfaltima creencia que miraste, no de tu gusto.","score.noTrend":"El {rate} % es c\xf3mo est\xe1 hoy, no si mejora: ninguno de los dos meses ya juzgados llega a {floor} creencias, as\xed que la comparaci\xf3n mes a mes todav\xeda no se puede hacer. El mes en curso no entra: sus creencias no se han terminado de mirar.","score.better":"De lo que te dijo el mes pasado has corregido el {recent} %, y de lo del anterior el {previous} %: baja, que es lo \xfanico que quiere decir que el doble est\xe1 aprendiendo.","score.notBetter":"De lo que te dijo el mes pasado has corregido el {recent} %, y de lo del anterior el {previous} %: no baja. Mientras no baje mes a mes, el doble no est\xe1 aprendiendo, y este marcador no va a decir otra cosa.","connect.title":"Conectar un agente por MCP","connect.lead":"MCP es el canal por el que un agente habla con tu cat\xe1logo. Estos son los que hay en esta m\xe1quina: conectar uno le da las seis herramientas —el resumen del proyecto al empezar, la bit\xe1cora y la cola de tareas— y escribe su configuraci\xf3n donde ese agente la lee.","connect.do":"Conectar","connect.again":"Volver a conectar","connect.alreadyOn":"conectado","connect.againCost":"Ya est\xe1 conectado. Volver a conectarlo emite una clave nueva: donde panoma escribe el fichero se actualiza sola, pero si pegaste el bloque a mano en alg\xfan sitio, esa copia dejar\xe1 de funcionar y habr\xe1 que volver a pegarla.","connect.working":"Conectando…","connect.written":"Configuraci\xf3n MCP escrita.","connect.updated":"Se ha actualizado la entrada de panoma que ya hab\xeda.","connect.coexists":"Siguen ah\xed: {list}.","connect.gitWarning":"Ojo: este fichero lleva la clave del agente en claro y git se lo llevar\xeda. A\xf1ade su nombre al .gitignore antes de commitear.","connect.restart":"Reinicia {name} para que la lea.","connect.pasteInto":"Este agente guarda sus servidores MCP en un formato que no vamos a tocar. Pega esto en:","connect.pasteSomewhere":"No sabemos d\xf3nde guarda este agente sus servidores MCP. Pega esto donde los tenga:","connect.copy":"Copiar la configuraci\xf3n MCP","connect.openFile":"Abrir el fichero","connect.opened":"Abierto en {editor}. Pega el bloque, guarda, y reinicia {name}.","connect.copied":"copiado","disconnect.do":"desconectar","disconnect.confirm":"S\xed, desconectar","disconnect.working":"Quitando…","disconnect.losing":"Se ir\xe1 tambi\xe9n lo que {name} anot\xf3 aqu\xed: {n} entrada{s}.","disconnect.nothingLost":"{name} no ha anotado nada todav\xeda.","md.noBlock":"No hay bloque de Panoma en este proyecto; cr\xe9alo primero.","md.notInherited":"Ese fichero no es un heredado de este proyecto.","md.fileGone":"El fichero ya no est\xe1 donde estaba.","md.noFiles":"Este proyecto no tiene AGENTS.md ni CLAUDE.md.","md.inspectLocalOnly":"El repaso lee tu disco: solo funciona con el cat\xe1logo local.","md.repairLocalOnly":"Reparar escribe en tu disco: solo funciona con el cat\xe1logo local.","runs.notFound":"Ejecuci\xf3n no encontrada.","runs.noBranch":"Esta ejecuci\xf3n no dej\xf3 ninguna rama que aplicar.","runs.alreadyRunning":"Ya hay una ejecuci\xf3n en marcha en {name}.","runs.alreadyRunningHint":"Espera a que termine, o m\xedralo en Actividad.","runs.missingPackage":"Falta el nombre del paquete.","runs.noFixForPackage":"{package} no tiene ning\xfan aviso con versi\xf3n corregida en {name}.","runs.noFixes":"{name} no tiene vulnerabilidades con arreglo publicado.","runs.enrichAdvisories":"Ejecuta 'panoma enrich' para refrescar los avisos de OSV.","runs.notADependency":"{package} no est\xe1 entre las dependencias de {name}, o no s\xe9 cu\xe1l es su \xfaltima versi\xf3n.","runs.enrichVersions":"Ejecuta 'panoma enrich' para traer las versiones de los registros.","runs.unsupportedEcosystem":"Todav\xeda no s\xe9 actualizar dependencias de {ecosystem}.","runs.knownFailureHint":"Vuelve a intentarlo con --force si crees que algo ha cambiado.","runs.quarantined":"{package} {version} se public\xf3 hace {age} y la cuarentena de Panoma son {days} d\xedas.","runs.quarantinedHint":"Una versi\xf3n reci\xe9n publicada es donde aparecen los compromisos de cadena de suministro, y casi siempre se retiran en el primer d\xeda o dos. Vuelve a intentarlo m\xe1s adelante, o ahora mismo con --force si sabes lo que haces. El umbral se cambia con PANOMA_CUARENTENA_DIAS.","runs.crashed":"La ejecuci\xf3n se rompi\xf3: {detail}","north.missing":"Falta la frase: escribe qu\xe9 ser\xeda tener este proyecto terminado.","north.tooLong":"Son {n} caracteres y el norte es una l\xednea: cabe hasta {max}. Lo largo es un plan, y para eso est\xe1 el encargo de plan.","north.noIdentity":"Este proyecto todav\xeda no tiene una identidad estable, as\xed que no hay d\xf3nde guardar la frase para que sobreviva a mover la carpeta. Vuelve a escanearlo y prueba otra vez.","move.noNorth":"nadie ha escrito todav\xeda qu\xe9 es \xabterminado\xbb aqu\xed","move.unsavedWork":"{n} aviso de trabajo sin guardar","move.unsavedWork.n":"{n} aviso{s} de trabajo sin guardar","move.noReadme":"no hay ning\xfan README que lo explique","move.neverBuilt":"nadie ha comprobado nunca si todav\xeda compila","move.critiques":"{n} cosa a la vista sin abrir el proyecto","move.critiques.n":"{n} cosa{s} a la vista sin abrir el proyecto","move.idle":"{n} mes parado","move.idle.n":"{n} mes{es} parado","move.advisories":"{n} aviso de seguridad abierto","move.advisories.n":"{n} aviso{s} de seguridad abierto{s}","move.outdated":"{n} dependencia directa atrasada","move.outdated.n":"{n} dependencia{s} directa{s} atrasada{s}","move.lowHealth":"salud {n} de 100","move.longIdle":"{n} mes{es} parado: la pregunta ya no es de mantenimiento"},en:{"watch.off":"The watcher isn’t running: new projects and today’s commits may not show up until you scan again.","catalog.down.title":"The catalog will not open","catalog.down.body":"The app is still up, but with no data. Rename {path} to something else and start again: a fresh one is created, and \xabpanoma scan\xbb fills it. Delete nothing — if it can ever be rescued, it will be rescued from there.","catalog.down.detail":"What the database said: {detail}","error.title":"Something broke while rendering this page","error.body":"Not the catalog — that gets its own notice. Try again, and if it keeps happening, the reason is in the server log.","error.retry":"Try again","meta.description":"Your personal software catalog. Open, review, and keep every project current.","shell.brandHome":"Panoma \xb7 Home","shell.searchPlaceholder":"Search projects, technologies, or agents","shell.openPalette":"Open the command palette","shell.topNav":"Main navigation","shell.sections":"Panoma sections","shell.skipToContent":"Skip to content","shell.localAccount":"Local account","shell.accountNone":"There’s no account or cloud to manage: panoma runs on this computer and the catalog stays here.","shell.pending":"{n} pending","shell.summary":"Catalog summary","shell.summaryProjects":"{n} project{s}","shell.summaryScope":"in your catalog","shell.live":"live","shell.paused":"paused","shell.dormant":"dormant","shell.noGit":"no git","shell.copies":"copies","shell.footerLocal":"Local catalog","shell.footerPrivate":"Private by design","shell.footerSource":"AGPL-3.0 \xb7 source code","shell.language":"Language","shell.hideSidebar":"Collapse menu","shell.showSidebar":"Expand menu","nav.projects":"Projects","nav.unsaved":"Unbacked","nav.searchCode":"Code","nav.credentials":"Keys","nav.agents":"MCP","nav.ai":"AI","nav.packages":"Packages","nav.activity":"Runs","nav.copies":"Copies","nav.bridge":"Bridge","dest.bridge":"The bridge","bridge.title":"Power panoma on, step by step","bridge.titleReady":"Everything is on","bridge.lead":"Every piece of panoma with its state, and a single next step marked. No more guessing commands: what to do now carries an arrow, and the rest waits its turn.","bridge.leadReady":"Catalog, model, agents and hooks are running. From here you just watch the memory breathe — and decide on what agents propose, project by project.","bridge.step.catalog.title":"The catalog","bridge.step.catalog.detail":"projects: {count}","bridge.step.catalog.pending":"Scan a folder with your projects. One command analyzes them and starts this web app.","bridge.step.model.title":"An AI model","bridge.step.model.detail":"connected: {count}","bridge.step.model.pending":"The critic, the distiller and the double need a model. Connect a provider or export a key.","bridge.step.model.go":"Go to the AI screen","bridge.step.agent.title":"A connected agent","bridge.step.agent.detail":"active: {count}","bridge.step.agent.pending":"Connect your agent (Claude Code, Cursor…) so it receives the brief, the memory and the nine tools.","bridge.step.agent.keyUnused":"The key exists but no agent has ever used it: install the config and restart the agent's session.","bridge.step.agent.go":"Go to the Agents screen","bridge.step.hooks.title":"The hooks","bridge.step.hooks.detail":"projects with hooks: {count} of {total}","bridge.step.hooks.pending":"Inside each project you work on: they record activity without the model having to remember, and deliver sleeping notes on their paths.","bridge.step.alive.title":"The memory, alive","bridge.step.alive.detail":"journal entries: {count}","bridge.step.alive.pending":"It turns on by itself once the rest is running: agents start logging, the distiller starts proposing, and you decide.","bridge.restartHint":"After installing, restart the agent's session: an already-open session picks up nothing.","bridge.todayTitle":"Today's numbers","bridge.stat.journal":"Journal","bridge.stat.approved":"Notes served","bridge.stat.sleeping":"Sleeping notes","bridge.stat.pending":"Proposals waiting","bridge.stat.consultations":"Questions to the double","bridge.stat.watcher":"Watcher","bridge.stat.ablation":"Scale (ablation)","bridge.on":"on","bridge.off":"off","bridge.copy":"copy","bridge.copied":"copied","bridge.step.hooks.install":"Install in every project","bridge.step.hooks.installing":"Installing the hooks…","bridge.hooksDone":"Done — hooked: {installed} \xb7 no repository: {noRepo} \xb7 foreign left alone: {foreign} \xb7 failures: {failed}","bridge.hooksAlt":"Or from the terminal, project by project:","bridge.hooksNoCli":"The server cannot find the panoma command: install from the terminal with the command shown.","projectHooks.on":"Hooks installed: this project's journal writes itself.","projectHooks.off":"No hooks: the catalog only learns what the agent remembers to tell it.","projectHooks.install":"Install them","bridge.scaleHint":"The fine measure — whether memory actually reduces corrections — lives in GET /api/scale.","nav.disk":"Disk","nav.twin":"Twin","nav.hidden":"Hidden","dest.agents":"MCP: connect your agents","dest.unsaved":"Unbacked work","dest.disk":"Disk space","dest.twin":"Your twin: the portrait of your taste","dest.searchCode":"Search the code","dest.credentials":"Credentials in git history","dest.hidden":"Hidden & excluded","dest.ai":"What Panoma thinks with","palette.aria":"Command palette","palette.placeholder":"Find a project or type an action…","palette.searchAria":"Search the catalog","palette.loading":"loading the catalog…","palette.noMatch":"Nothing matches “{query}”.","palette.results":"{n} result{s}","palette.groupProjects":"Projects","palette.groupActions":"Actions","palette.groupGoTo":"Go to","palette.openFolderOf":"Open {name}’s folder","palette.searchEverywhere":"Search every project’s code for “{query}”","palette.opening":"opening {name}…","palette.openFailed":"Couldn’t open it.","palette.unreachable":"Couldn’t reach the server.","palette.enterEditor":"↵ open in the editor","palette.enterCard":"↵ open the project page","palette.openTerminalOf":"Open a terminal in {name}","palette.openCardOf":"Open {name}’s project page","palette.keysMove":"↑↓ move","palette.keysOpen":"↵ choose","palette.keysClose":"esc close","home.emptyKicker":"Empty catalog","home.emptyTitle":"Nothing scanned yet","home.emptyBody":"Scan a folder of projects to fill the catalog. Scanning runs locally and stores metadata only: your code never leaves this disk.","activityKind.change":"change","activityKind.decision":"decision","activityKind.note":"note","activityKind.blocker":"blocker","taskState.open":"open","taskState.in-progress":"in progress","taskState.done":"done","taskState.discarded":"discarded","severity.critical":"critical","severity.high":"high","severity.medium":"medium","severity.low":"low","severity.unknown":"unknown","run.pending":"pending","run.running":"running","run.proposed":"proposed","run.failed":"failed","run.no-changes":"no changes","run.applied":"applied","run.discarded":"discarded","risk.unversioned":"not under version control","risk.no-commits":"repository with no commits at all","risk.no-commits.n":"{n} file{s} and not a single commit","risk.no-remote":"no remote \xb7 {n} commit only on this disk","risk.no-remote.n":"no remote \xb7 {n} commit{s} only on this disk","risk.unpushed":"{n} commit not pushed","risk.unpushed.n":"{n} commit{s} not pushed","risk.uncommitted":"{n} file not committed","risk.uncommitted.n":"{n} file{s} not committed","risk.untracked":"{n} not added to git","risk.stashes":"{n} stash saved","risk.stashes.n":"{n} stash{es} saved","risk.behind":"{n} commit to pull","risk.behind.n":"{n} commit{s} to pull","store.kicker":"Explore","store.title":"Discover what you’ve built","store.subtitle":"Your personal software catalog. Open, review, and keep every project current.","store.spotlight":"Highlights","store.review":"Review","filter.all":"All","filter.attention":"Attention","filter.favorites":"Favorites","filter.notMine":"Not mine","filter.web":"Web","filter.mobile":"Mobile","filter.backend":"Backend","filter.tools":"Tools","filter.ai":"AI","filter.other":"Other","store.filterAria":"Filter projects","store.hideNames":"Hide names and icons","store.showNames":"Show names and icons again","store.hidden":"Project {n}","share.abrir":"Share my panorama","share.cerrar":"Close","share.preview":"Preview of the card","share.titulo":"{n} project{s} built.","share.proyectos":"projects in total","share.tecnologias":"technologies","share.commits":"commits","share.agentes":"of history with agents","share.activos":"still moving","share.salud":"Health of each project","share.saludBien":"Healthy","share.saludRevisar":"Review","share.saludAtencion":"Attention","share.more":"+{n} more","share.local":"Local-first \xb7 Your data, on your disk.","share.idioma":"Image language","share.usuario":"your handle","share.usuarioVacio":"left out","share.conIconos":"Include my projects’ icons and names","share.descargar":"download the image","share.copiarTexto":"copy the text","share.textoCopiado":"copied","share.image.idle":"share image","share.image.preparing":"preparing image…","share.image.copied":"image copied","share.image.downloaded":"image downloaded","share.image.failed":"couldn’t share image","share.x.idle":"open directly on X","share.x.preparing":"opening X…","share.x.copied":"X opened \xb7 paste the image","share.x.downloaded":"X opened \xb7 upload the image","share.x.failed":"couldn’t open X","share.nota":"Share image opens the system menu. X opens the composer directly and copies the PNG for you to paste; Panoma uploads nothing.","share.texto":"{n} project{s} built — my local control center with {domain}.","store.sortLabel":"Sort projects","store.sortRecent":"Most recent","store.sortName":"Name","store.sortHealth":"Healthiest","store.viewAria":"Catalog view","store.viewGrid":"Grid view","store.viewList":"List view","store.browseTitle":"Browse projects","store.total":"{n} project{s} in total","store.noResults":"No projects found","store.noResultsBody":"Try another search or switch the selected filter.","store.clearFilters":"Clear filters","store.justHidden":"“{name}” is out of the catalog.","store.undoHide":"undo","store.seeHidden":"see hidden","store.showing":"Showing {shown} of {total} project{totals}","store.lastCommit":"Last commit {when}","store.workedOn":"You worked on this project {when}.","store.openProject":"Open project","store.proposalsWaitingOne":"1 proposal to decide on","store.proposalsWaitingMany":"{n} proposals to decide on","store.proposalsBody":"The change is made and tested. Nothing gets applied until you say so.","store.resume":"Pick up where you left off","store.editorShort":"editor","store.openingEditor":"opening…","store.openedEditor":"✓ opened","store.openNamedInEditor":"open {name} in the editor","store.unreachable":"Couldn’t reach the server.","store.attention":"Needs attention","store.attentionBody":"Projects that need your review.","store.viewAll":"View all","store.allClear":"Everything is up to date.","store.viewAllIssues":"See all {n} project{s} with issues","store.depsBehind":"{n} outdated deps","store.depsBehindRatio":"{n}/{total} outdated deps","store.depsUnchecked":"dependencies not checked","summary.kind.mobileApp":"Mobile app","summary.kind.webApp":"Web app","summary.kind.cli":"Command-line tool","summary.kind.package":"Publishable package","summary.kind.backend":"Backend service","summary.kind.container":"Containerized service","summary.kind.project":"Project","summary.builtWith":"{kind} in {stack}","summary.uses":"uses {list}","summary.publishedOn":"published on {list}","summary.writtenBy":"{share}% of the history written by {agent}","summary.and":"and","store.noticeOne":"1 advisory","store.noticesMany":"{n} advisorie{s}","store.commitCount":"{n} commit{s}","store.noAlerts":"No alerts","store.open":"Open","store.openNamed":"Open {name}","store.favoriteAdd":"Add {name} to favorites","store.favoriteRemove":"Remove {name} from favorites","store.hideNamed":"Hide {name}","store.noStack":"No stack detected","store.builtWith":"A local project built with {tech}.","store.detected":"A local project found in your catalog.","catalog.title":"Project catalog","catalog.count":"{n} project{s}","catalog.countOne":"1 project","catalog.filterPlaceholder":"Filter the catalog","catalog.category":"Category","catalog.colProject":"Project","catalog.colHealth":"Health","catalog.colStack":"Stack","catalog.colActivity":"Last activity","catalog.rowsAria":"Catalog projects","catalog.hint":"One click shows the details. Two open the project.","catalog.openHandle":"Open {name}’s page — or double-click","catalog.opening":"Opening the project…","catalog.healthOf":"Health {n} out of 100","catalog.noHealth":"Not measured","catalog.detailsOf":"Details for {name}","catalog.close":"Close the details","catalog.repository":"Repository","catalog.remote":"Has a remote copy","catalog.localOnly":"Only on this disk","catalog.noGit":"No git","catalog.size":"Size","catalog.commits":"Commits","catalog.origin":"Origin","catalog.openIn":"Open in","catalog.editor":"Editor","catalog.editorSub":"Edit the code","catalog.terminal":"Terminal","catalog.terminalSub":"A terminal in this folder","catalog.folder":"Folder","catalog.folderSub":"Browse the files","catalog.fullDetail":"Open the full project page","catalog.emptyTitle":"No project selected","catalog.emptyBody":"Pick one from the list and its details show up here.","catalog.needsReview":"Needs review","catalog.agentSub":"Agent, in a terminal","catalog.appSub":"Desktop app","catalog.agentBroken":"Installed, but it does not run","catalog.reviewUnsaved":"See what is unsaved","catalog.reviewSecurity":"See the security advisories","catalog.reviewDeps":"See the outdated dependencies","state.active":"Active","state.paused":"Paused","state.dormant":"Dormant","state.no-git":"No git","origin.foreign":"not yours","origin.forked":"forked","origin.template":"template","origin.templateTitle":"A tool generated it, and it hasn’t been touched since.","origin.startedBy":"Started by {name}. Open the project page to see where it comes from.","origin.openDetail":"Open the project page to see where it comes from.","today.title":"Since you last looked","today.since":"since {when}","today.last24h":"in the last 24 hours","today.nothing":"Nothing new {period}. The day is yours.","today.commitOne":"{n} commit","today.commitMany":"{n} commit{s}","today.fromAgents":"({n} from agents)","today.inProject":"in {project}","today.agentNoted":"{name} logged {n}","today.born":"New in the catalog:","today.resume":"Resume","today.opening":"Opening…","today.openFailed":"Didn’t work","today.openNamed":"Open {name} in the editor","today.waitingOne":"1 waiting on you","today.waitingMany":"{n} waiting on you","today.inProjectsOne":"{c} in 1 project","today.inProjectsMany":"{c} in {n} project{s}","today.bornOne":"1 new project","today.bornMany":"{n} new project{s}","today.expand":"Show the daily brief","today.collapse":"Collapse the daily brief","today.quiet":"Nothing new","today.attempts":"{n} attempt{s}","proposals.waiting":"Waiting on you","proposals.readyOne":"One proposal is ready and undecided","proposals.readyMany":"{n} proposals are ready and undecided","proposals.branchNote":"The change is made and tested on a branch of its own. Nothing touches your folder until you say so.","proposals.fallbackName":"proposal","proposals.andMore":"{n} more","proposals.testsGreen":"tests passing","proposals.unverified":"unverified","changes.question":"What happened here","changes.latest":"Last thing, {when}","changes.nothingYet":"Nothing has happened yet","changes.totalCommits":"{n} commit{s} in total","changes.window24h":"In the last 24 hours","changes.window48h":"The day before","changes.windowBefore":"Before that","changes.signedBy":"Signed by {agent} with a Co-Authored-By trailer","changes.unsignedNote":"Commits with no tag carry nobody’s signature. That doesn’t mean you wrote them.","changes.moreOne":"There’s 1 more among the twenty the catalog keeps.","changes.moreMany":"There are {n} more among the twenty the catalog keeps.","changes.empty":"No recent commits to show yet.","changes.agentLog":"See agent activity","task.title":"Jot it down","task.openOne":"{n} open","task.openMany":"{n} open","task.placeholder":"tomorrow, fix the login","task.fieldLabel":"What needs doing in this project","task.save":"jot it","task.saving":"jotting…","task.mcpNote":"Panoma doesn’t manage tasks, it keeps them. Your agent reads them over MCP when it enters the project, picks them up, and closes them itself.","task.saveFailed":"Couldn’t jot that down.","task.byHuman":"you","task.unreachable":"Couldn’t reach the catalog.","assignment.question":"What do we do with this?","assignment.title":"Hand it to your agent","assignment.note":"Panoma writes the assignment from what it knows about the project. Open it in your terminal and your agent starts now, on this machine; add it to the queue and nothing happens until it next enters the project; or copy it and take it anywhere.","assignment.see":"see the assignment","assignment.copy":"copy","assignment.copied":"copied","assignment.copyFailed":"Couldn’t copy. Open “see the assignment” and select it by hand.","assignment.send":"add to the queue","assignment.sending":"queueing…","assignment.sendTitle":"It waits until your agent next enters this project. Nothing runs right now","assignment.launch":"open in your terminal","assignment.launching":"opening…","assignment.launchTitle":"Opens a terminal on this machine with {agent} inside the project and the assignment loaded: it starts working as soon as it opens","assignment.launched":"{agent} is working in your terminal.","assignment.launchFailed":"Couldn’t open the terminal.","assignment.queued":"in the queue","assignment.queuedNote":"Queued. Your agent picks it up when it enters the project.","assignment.withdraw":"take it back","assignment.withdrawing":"taking it back…","assignment.withdrawn":"Taken back. Your agent won’t see it.","assignment.withdrawFailed":"Couldn’t take it back.","assignment.failed":"Couldn’t add it to the queue.","assignment.resume":"Tell me what it takes to pick it back up","assignment.resume.promise":"Have it try to start the project, note every stumble, and say where the work left off.","assignment.competitors":"Find its competitors","assignment.competitors.promise":"Who solves the same thing today — alive or dead — and what gap is really left.","assignment.plan":"Draft an improvement plan","assignment.plan.promise":"What to touch first and why, crossing the code with what panoma already measures.","assignment.presentable":"Get it fit to show","assignment.presentable.promise":"An honest README, so an outsider gets it in two minutes.","assignment.review":"Fix what shows without opening anything","assignment.review.promise":"Stray colours and corners, images that don’t say what they show, broken links: what panoma saw by reading the folder.","assignment.securityTitle":"Close the worst vulnerability","assignment.securityPromise":"Panoma prepares the fix on a separate copy of the project and leaves the proposal waiting for you.","assignment.depsTitle":"Bring its dependencies up to date","assignment.depsPromiseOne":"{n} direct dependency behind — pick which, and panoma brings you a proposal.","assignment.depsPromiseMany":"{n} direct dependencie{s} behind — pick which, and panoma brings you a proposal.","assignment.depsChoose":"pick which","sites.summaryOne":"{n} project, looking in {where}{extra}","sites.summaryMany":"{n} project{s}, looking in {where}{extra}","sites.andMore":"and {n} more","sites.manage":"change","sites.close":"close","sites.countOne":"{n} project","sites.countMany":"{n} project{s}","sites.missing":"the folder is gone","sites.remove":"remove","sites.removeConfirm":"yes, remove it and its projects: {n}","sites.removed":"No longer watched, and its projects are retired: {n}. Add it back and they return.","sites.add":"add","sites.adding":"searching…","sites.addedOne":"Added. Found 1 project.","sites.addedMany":"Added. Found {n} project{s}.","sites.placeholder":"~/Documents","sites.fieldLabel":"Folder you also want watched","sites.note":"Panoma only finds projects inside these folders. One living outside will never show up, no matter how long you wait.","sites.search":"search my disk","sites.searching":"searching…","sites.searchHint":"Walks your home folder and suggests where you have more projects.","sites.searchNone":"Found no projects outside what's already watched.","sites.failed":"Didn’t work.","ai.title":"What Panoma thinks with","ai.intro":"Panoma never calls a model on its own: only when you ask it to — describing a project, drafting an assignment. Here you pick which one.","ai.loading":"reading the configuration…","ai.loadingSlow":"still reading… the first time takes longer.","ai.loadFailed":"Couldn’t read the AI configuration ({status}).","ai.loadTimeout":"The configuration took too long to arrive.","ai.retry":"retry","ai.retrying":"retrying…","ai.brokenTitle":"The configuration can’t be read","ai.fileNote":"The configuration lives in {path}, with 0600 permissions. That stops another user of this machine from reading it, but it isn’t encrypted: any process running as you can open it. If you’d rather keep nothing on disk, export the key as an environment variable or use an agent you already have installed.","ai.remote":"The catalog is remote: the model is configured on the machine that serves it.","ai.activeTitle":"Active provider","ai.none":"None yet. Pick one below.","ai.defaultModel":"default model","ai.modelLabel":"model","ai.modelPlaceholder":"the provider’s default","ai.modelSaved":"Now using {model}.","ai.modelCleared":"Back to the provider’s default model.","ai.modelsFetch":"fetch theirs","ai.modelsLoading":"asking…","ai.modelsOpen":"see the models","ai.modelsLive":"Straight from the provider, right now: {n}.","ai.modelsHint":"Suggestions of ours, which may be stale: {n}. Hit “fetch theirs” for the real list — or type any name you want.","ai.modelsEmpty":"We ship no suggestions for this provider. Hit “fetch theirs” to ask it — or type the name by hand.","ai.modelsNoMatch":"Nothing here goes by that name. It saves exactly what you type.","ai.modelsNone":"This provider doesn’t publish a catalog. Type the model name by hand.","ai.redirected":"An environment variable pointed this provider somewhere else. Your key goes there.","ai.sourceEnv":"from the environment","ai.sourceFile":"from the file","ai.sourceAgent":"your agent’s session","ai.sourceKey":"{source} \xb7 {key}","ai.sourceLogin":"signed in","ai.connected":"signed in","ai.notConnected":"not signed in","ai.login":"sign in","ai.loginAgain":"sign in again","ai.loggingIn":"waiting…","ai.loginWaiting":"A tab opened to sign in to {name}. I’ll wait here.","ai.loginDone":"Signed in to {name}.","ai.loginFailed":"Couldn’t sign in.","ai.loginTimeout":"Timed out waiting for the browser to come back.","ai.logout":"sign out","ai.test":"test it","ai.testing":"testing…","ai.testOk":"{model} answered in {s}s.","ai.testHint":"Save a key above, or pick an agent you already have installed.","ai.failed":"Didn’t work.","ai.nowUsing":"Now using {name}.","ai.forgotten":"Key forgotten.","ai.forgottenButEnv":"Key forgotten from the file, but {var} is still set in the environment.","ai.subscriptionTitle":"Use a subscription you already pay for","ai.subscriptionNote":"If you already pay for Claude Pro or ChatGPT and have their tool signed in, Panoma hands the work to it. It stores no token and never sees your credentials: the subscription is used by your own tool, on your machine.","ai.installed":"installed","ai.notInstalled":"couldn’t find “{command}”","ai.keysTitle":"Connect with a key","ai.fromEnv":"{var} in the environment","ai.stored":"saved {key}","ai.noKey":"no key","ai.keyPlaceholder":"paste the key","ai.keyLabel":"{name} key","ai.save":"save","ai.saving":"saving…","ai.forget":"forget","ai.getKey":"get one","ai.inUse":"in use","ai.choose":"use this","ai.choosing":"switching…","ai.cantUse":"Needs a saved key or the agent installed.","search.fieldLabel":"Text to find in the code","search.submit":"search","search.searching":"searching…","search.scopeNote":"Literal text, case-insensitive. Only files tracked by git are read, so an uncommitted file won’t show up.","search.scopeVendors":"Third-party dependencies are skipped even when git tracks them — it isn’t code you wrote:","search.matchOne":"1 match","search.matchMany":"{n} matches","search.inProjectOne":"in 1 project","search.inProjectMany":"in {n} project{s}","search.reposSearched":"{n} repositor{y} searched","search.skipped":"{n} with no git, couldn’t be searched","search.skippedTitle":"Folders without git: there is nothing to ask.","search.clickToOpen":"click a match to open it in the editor","search.noMatch":"No file tracked by git contains “{query}”.","search.openAt":"Open {file} at line {line}","search.truncated":"Only the first {n} are shown. Open the folder to see them all.","search.openFolder":"Open the folder","search.openFolderAria":"Open the project’s folder","search.failed":"Couldn’t run the search.","search.openFailed":"Couldn’t open it.","search.unreachable":"Couldn’t reach the server.","open.folder":"open folder","open.editor":"open in the editor","open.terminal":"open a terminal here","open.busy":"opening…","open.doneFolder":"✓ opened","open.done":"✓ opened","open.unreachable":"Couldn’t reach the server.","open.openWith":"Open in {name}","open.moreDestinations":"More places to open it","open.defaultDestination":"Default","copy.command":"Copy “{command}”","copy.done":"copied","project.health":"Health {n}","project.healthTitle":"Health {n} out of 100","project.heroStatus":"Status","project.heroActivity":"Activity","project.heroCommits":"Commits","project.heroHealth":"Health","project.commitOne":"{n} commit","project.commitMany":"{n} commit{s}","project.sections":"Project sections","project.navAll":"All","project.navSummary":"Overview","project.navChanges":"What happened","project.navResume":"Resume","project.navAssignments":"Assignments","project.navDeps":"Maintenance","project.navAgents":"Agents","project.navMd":"The .md","project.mdQuestion":"Is what your agents read true?","project.mdTitle":"The instructions file","project.mdCost":"{n} tokens of context every session","project.mdNone":"There’s no AGENTS.md or CLAUDE.md here — the two files agents read on their own when they enter: they come into this project knowing nothing about it.","project.mdOnlyInherited":"This project has no AGENTS.md or CLAUDE.md of its own, but it inherits what the folders above say: that is what your agents read when they come in here.","project.mdNoneHint":"The button creates AGENTS.md with a context block —stack, commands, advisories, tasks— that Panoma keeps fresh on its own.","project.mdFileMeta":"{tokens} tokens \xb7 {lines} lines","project.mdManaged":"Panoma block","project.mdClean":"Everything it claims exists.","project.mdFindingOne":"1 claim that is no longer true","project.mdFindings":"{n} claims that are no longer true","project.mdLine":"line {n}","project.mdPathMissing":"does not exist in the project","project.mdPathMovedTo":"missing; there is one at {path}","project.mdScriptMissing":"not in the package.json scripts","project.mdScriptNear":"not in the scripts; there is {names}","project.mdBlockBroken":"the Panoma block never closes: fix it by hand","project.navAccounts":"Accounts","accounts.copy":"copy","accounts.copied":"copied","accounts.editList":"Edit the list","accounts.title":"Accounts & links","accounts.question":"Which account was this on?","accounts.hint":"What is missing when you come back: the deploy email, the domain, the usual dashboard.","accounts.empty":"Nothing written down yet. The deploy account email, the domain registrar, the dashboard you can never find…","accounts.addFirst":"Write down the first","accounts.edit":"Edit","accounts.addRow":"Add another","accounts.save":"Save","accounts.saving":"Saving…","accounts.cancel":"cancel","accounts.remove":"Remove entry","accounts.label":"What it is (Vercel, domain, Stripe…)","accounts.email":"account email","accounts.note":"note","accounts.noSecrets":"No passwords or keys: this travels in the clear through the catalog. Secrets belong in the system Keychain.","accounts.badUrl":"One of the links doesn’t make sense. A domain (vercel.com/x), a full address (https://…) or a machine with its port (localhost:3000) all work. Nothing was saved.","accounts.needsLabel":"There’s a row with details and no name. Say what it is —Vercel, domain, Stripe— or drop it with the \xd7. Nothing was saved.","check.title":"Does it still build?","check.none":"Nobody has checked yet. The health above deduces; this proves it: install and build run in a separate worktree, isolated, without touching your folder.","check.run":"Check it now","check.rerun":"Check again","check.running":"Installing and building in a separate worktree… this can take a few minutes. Your folder is untouched.","check.ok":"It builds","check.broken":"The build is broken","check.inconclusive":"No verdict","check.checkedOn":"checked on {date} \xb7 {seconds}s","check.dirty":"There were uncommitted changes: the verdict is about the last commit.","project.mdVersionWrong":"the project runs {v}","project.mdEnvMissing":"the env example does not declare it","project.mdEnvNear":"not declared in the env example; there is {names}","project.mdLead":"It is the first thing your agents read when they enter this project. Panoma keeps what it says true.","project.mdInitButton":"Create AGENTS.md with the context","project.mdAddBlockButton":"Add the context block","project.mdSyncButton":"Regenerate the block","project.mdApplyWorking":"Writing…","project.mdInitDone":"Done: {file} created with the context block. Your agents will read it next session, and Panoma keeps it fresh on its own.","project.mdBlockAdded":"Done: the context block is now in {file}. It regenerates itself when reality changes.","project.mdSyncDone":"Block regenerated in {file}.","project.mdSyncSame":"The block was already up to date: nothing to change.","project.mdBridgeMissing":"Claude Code will not read this file: it only loads CLAUDE.md, and this project has none. The button below also writes the bridge — a one-line CLAUDE.md that imports AGENTS.md.","project.mdBridgeWritten":"And CLAUDE.md was written with the @AGENTS.md import, which is all Claude Code loads.","project.mdTerminalAlt":"or in the terminal:","project.mdFindingsIntro":"This is what the file claims that is no longer true. The button fixes the ones with a hint; the rest you fix by editing the file, and Panoma re-checks it on save.","project.mdReviewTitle":"The model's opinion","project.mdReviewAsk":"Ask the model's opinion","project.mdReviewAsking":"Reading the file…","project.mdReviewAgain":"ask again","project.mdReviewStale":"The file changed after this opinion: ask again if you want fresh judgement.","project.mdReviewNote":"Contradictions, redundancy and what is missing: what the mechanical checker cannot see.","project.mdInherited":"Also inherits, from the folders above","project.mdInheritedMeta":"{tokens} tokens","project.mdInspectButton":"Check it now","project.mdInspectWorking":"Checking against the disk…","project.mdRepairButton":"Fix the obvious ({n})","project.mdRepairWorking":"Fixing…","project.mdRepairDone":"{n} fix{es} applied. {m} left for your hand.","project.mdRepairDoneAll":"{n} fix{es} applied. None left.","project.mdInheritedNote":"Your agents read these too, from the folders above. The check shows what each one claims that is no longer true, line by line.","project.mdTouches":"Latest touches to the file","project.mdTouchAnon":"unsigned","project.mdTruncated":"The project has more files than the index holds: paths were not checked.","project.navDetails":"Details","project.moreActions":"More project actions","project.copyPath":"Copy path","project.pathCopied":"Path copied","project.pathCopyFailed":"Couldn’t copy the path","project.rescan":"Scan it again","project.rescanning":"Updating…","project.rescanned":"Project updated","project.rescanFailed":"Couldn’t update it","project.show":"show","project.hide":"hide","project.showTitle":"Put it back in the main view","project.hideTitle":"Take it out of the main view. It stays in the catalog.","project.remove":"remove from the catalog","project.removeTitle":"Take it out of the catalog. No folder gets deleted.","project.actionFailed":"Didn’t work.","project.unreachable":"Couldn’t reach the server.","project.removeHeading":"Remove {name} from the catalog","project.removeBody":"Panoma will forget this project and no scan will bring it back. Its page, its analysis history, and anything you wrote about it here are gone.","project.removeSafeStrong":"Your folder is left alone.","project.removeSafeBody":"The code, the git history, and everything inside stay exactly where they are. This only erases what Panoma knew.","project.removeTypeBefore":"Type","project.removeTypeAfter":"to confirm","project.removeTypeAria":"Type {name} to confirm","project.cancel":"Cancel","project.removing":"removing…","project.removeConfirm":"Remove from the catalog","project.overviewTitle":"Project overview","project.whatChanged":"What changed","project.recentActivity":"Recent activity","project.today":"today","project.whereProtected":"Where it’s backed up","project.versionControl":"Version control","project.withRemote":"Has a remote","project.withoutRemote":"No remote","project.withoutGit":"No Git","project.historyCopied":"The history has a copy off this disk.","project.onlyHereOne":"1 commit lives only on this disk.","project.onlyHereMany":"{n} commit{s} live only on this disk.","project.whatNeedsAttention":"What needs attention","project.maintenance":"Maintenance and health","project.noMajorIssues":"Nothing important is wrong.","project.issuesOne":"1 thing needs a look.","project.issuesMany":"{n} thing{s} need a look.","project.outOf100":"out of 100","project.commitChartAria":"Commits over the last seven days","project.attnNoRemote":"No remote repository","project.attnNoRemoteDetail":"This project exists only on this disk.","project.attnNoRemoteAction":"Set up a remote","project.attnAdvisoriesOne":"1 security advisory","project.attnAdvisoriesMany":"{n} security advisorie{s}","project.attnAdvisoriesDetail":"Some dependencies need reviewing.","project.attnAdvisoriesAction":"Review advisories","project.depsUnchecked":"not checked","project.depsUncheckedWhy":"{file} could not be read, so the exact versions are unknown and nothing was asked about advisories.","project.attnUnchecked":"Advisories have not been checked","project.attnUncheckedDetail":"{file} cannot be read, and without exact versions there is nothing to ask. The zero below does not mean it is clean.","project.attnUncheckedAction":"See dependencies","project.attnOutdated":"{n}/{total} dependencie{totals} behind","project.attnOutdatedDetail":"Updating raises the project’s health.","project.attnOutdatedAction":"See dependencies","project.allGood":"All clear","project.allGoodDetail":"Nothing risky right now.","project.whoBuilt":"Who built it","project.ofHistory":"of the history","project.agentsShare":"Agents: {n}% of the history","project.noAgentCommits":"No agent commits detected.","project.builtWith":"What it’s built with","project.kindLanguage":"Language","project.kindFramework":"Framework","project.seeFullStack":"See the full stack","project.fullStackTitle":"The whole technology stack","project.signalsDetected":"{n} signal{s} detected","project.confidence":"{n}% confidence","project.resumeQuestion":"Get back in without digging","project.resumeTitle":"How to pick this up again","project.noCommands":"No start-up commands found in this folder.","project.lastYouDid":"What you did last","project.howToStart":"How to start it","project.whatItNeeds":"What it needs installed","project.runtimeChecking":"checking…","project.runtimeHave":"you have {version}","project.runtimeMissing":"not installed","project.missingEnv":"Environment variables with no value ({n})","project.envDeclaredIn":"Declared in","project.envNoValue":"and with no value in your","project.envWhy":"It’s the most common reason an old project starts up and dies on the first screen.","purpose.install":"install","purpose.start":"start","purpose.tests":"tests","purpose.build":"build","project.protectQuestion":"Protect your work","project.protectTitle":"Some changes exist only on this disk","project.protectBody":"Panoma publishes nothing for you: it leaves the command ready and you decide when to run it.","project.depsQuestion":"Keep it healthy","project.depsTitle":"Dependencies","project.depsInstalled":"{n} installed","project.depsDirect":"{n} direct","project.depsOutdated":"{n} behind","project.depsDirectAria":"Direct {ecosystem} dependencies","project.depsTransitiveAria":"Transitive {ecosystem} dependencies","project.depsTransitiveOne":"1 transitive, pulled in by a direct one","project.depsTransitiveMany":"{n} transitive, pulled in by the direct ones","project.depDev":"Dev","project.depDirect":"Direct","project.depTransitive":"Transitive","project.depUpToDate":"Up to date","project.noDeps":"No dependencies detected.","project.propose":"propose","project.proposing":"testing…","project.proposeDone":"Done.","project.alreadyFailed":"Tried before, and it failed:","project.tryAnyway":"try anyway","project.proposeRefused":"The server did not accept the proposal ({status}).","project.proposeUnreadable":"The server answered something this button cannot read ({status}).","project.runUnreachable":"Couldn’t reach the catalog.","project.securityQuestion":"Review what matters","project.securityTitle":"Security","project.fixedIn":"Fixed in {versions}","project.detailsQuestion":"Technical context","project.detailsTitle":"Project profile","project.whatItIs":"Purpose","project.noDescription":"There is not enough written context to explain what this project is for.","project.detected":"Detected: {text}","project.aiExplain":"explain what it’s about","project.aiReading":"reading the project…","project.aiWriting":"writing…","project.aiRewrite":"write it again","project.aiWrittenBy":"written by {model}","project.aiSomeModel":"a model","project.aiWrittenIn":"written in {lang}","lang.es":"Spanish","lang.en":"English","project.aiNoteBefore":"Uses whichever model you connected with","project.aiNoteAfter":"It gets the README, the detected stack, and the latest commits, and it isn’t allowed to claim anything that isn’t in them. It doesn’t replace the project description: it’s kept separately.","project.whereFrom":"Provenance","project.originOwn":"You made it","project.originForked":"It started from someone else’s work","project.originForeign":"You didn’t start it","project.originTemplate":"A template generated it","project.originUnknown":"No way to tell","project.originEvidence":"Signals supporting this result","origin.remote-foreign":"the remote lives in {value}’s account, not yours","origin.first-commit-foreign":"the first commit was made by {value}","origin.license-foreign":"the licence belongs to {value}","origin.history-restarted":"the git history starts with you, so it was restarted when the folder was copied","origin.your-share":"{value}% of the history is yours","origin.zip-suffix":"the folder ends in “-{value}”, the way GitHub names its ZIPs","origin.scaffold-first-commit":"the first commit was written by {value}","origin.only-commit":"and it is the only one: nobody has touched it since","origin.commit-count":"and the history has {n} commit{s}","origin.container-yours":"you started the repository that contains it ({value})","origin.first-commit-yours":"the first commit is yours ({value})","origin.all-history-yours":"the whole history is yours ({n} commit{s})","origin.remote-yours":"the remote is in your account ({value})","origin.scaffold-continued":"it started from {value} and you carried it on","origin.zip-suffix-own":"the folder ends in “-{value}”, the way GitHub serves its ZIPs: it probably started as a download","origin.zip-suffix-none":"the folder ends in “-{value}”, which is how GitHub names a “Download ZIP”","origin.manifest-repo":"the manifest points at {value}","origin.readme-foreign":"the README introduces itself as somebody else’s material: “{value}”","origin.no-own-repo":"and there is no repository of its own where it could have started","origin.no-repo":"there is no repository: with no history there is no way to know who started it","project.noOriginEvidence":"Panoma did not find enough evidence to support a provenance result.","project.localDataQuestion":"What Panoma measured","project.localData":"Local inventory","project.primaryLanguage":"Primary language","project.notDetected":"Not detected","project.versionControlRemote":"Git \xb7 remote copy","project.versionControlLocal":"Git \xb7 only on this computer","project.versionControlNone":"No Git","project.versionControlUnknown":"Not checked","project.firstSeen":"In the catalog since","project.fileCount":"Source files","project.path":"Path","project.branch":"Branch","project.lastScan":"Last scan","project.size":"Size","project.files":"{n} file{s}","project.logQuestion":"Coordinated work","project.logTitle":"Agent activity","project.logMore":"and more: {n}","project.logFiles":"files: {n}","project.logbook":"Logbook","project.launches":"In your terminal","project.launchOf":"redacted assignment","project.logEmpty":"No agent has written anything here over MCP yet.","project.logEmptyHow":"Connect one to this project and whatever it notes down — changes, decisions, blockers — gets written here, for whoever comes by three months from now.","project.tasks":"Tasks","project.proposals":"Proposals","project.servicesQuestion":"Where it lives","project.servicesTitle":"Services and distribution","project.servicesEmpty":"No services or distribution targets were detected.","project.noTechnologies":"No technologies have been detected yet.","project.cleanupQuestion":"Cleanup","project.cleanupTitle":"Unused assets","project.assetsSearch":"find unused assets","project.assetsReading":"reading the code…","project.assetsSlow":"It reads every source file in the project, so it takes a few seconds.","project.assetsFailed":"Couldn’t analyze it.","project.assetsStats":"{n} assets analyzed \xb7 {platform} owned by the platform (not checked) \xb7 {sources} source files read","project.assetsAllUsed":"Every asset is mentioned somewhere in the code.","project.assetsUnused":"{n} unreferenced","project.assetsDynamic":"In {dirs} the code builds its paths piece by piece, so those folders stay out of the analysis: a file can be in use without its name ever appearing.","project.assetsCaveat":"“Unreferenced” means the file’s name appears in no source file. That’s a hint, not proof — check before you delete anything.","project.updated":"Updated {when}","project.codeSize":"{size} of code","project.backToCatalog":"Back to the catalog","common.copyOf":"copy of {name}","common.iconOf":"{name} icon","common.health":"Health {score}/100","search.title":"Search every project at once","search.intro":"“Where did I write that Stripe webhook thing?” No editor can answer that, because none of them has all eighty projects open.","credentials.title":"Keys committed to your repositories","credentials.intro":"It searches what git tracks, across every repository at once. A key in an ignored {env} sits on your disk; a committed key sits in every clone anyone ever made, and stays in the history even after you delete the file. Today it reads the current contents of tracked files: a key you already deleted from the tree is still in the old commits, and those aren’t searched yet.","credentials.allowlist":"Only credentials with a recognizable shape get flagged — prefixes issued by exactly one provider — never heuristics along the lines of “a long string next to the word key”. And there’s an explicit list of what is {not} a secret: Firebase and Google Maps client keys are public by design, they ship inside the APK, and flagging them would be the fastest way to make you stop reading this page.","credentials.not":"not","scan.start":"check the portfolio","scan.again":"check again","scan.busy":"reading the history…","scan.failed":"Couldn’t run the check.","scan.unreachable":"Couldn’t reach the server.","scan.findingOne":"{n} finding","scan.findingMany":"{n} findings","scan.reposScanned":"{n} repositor{y} checked","scan.skipped":"{n} without git","scan.public":"{n} skipped as public by design","scan.publicTitle":"Firebase and Google Maps client keys, example files, and third-party dependencies.","scan.clean":"No credential with a recognizable shape anywhere in your repositories.","scan.trackedByGit":"{label} tracked by git","secret.stripe-live":"Stripe live secret key","secret.stripe-test":"Stripe test secret key","secret.aws":"AWS access key","secret.github-token":"GitHub token","secret.anthropic":"Anthropic API key","secret.openai":"OpenAI API key","secret.slack":"Slack token","secret.private-key":"Private key","secret.supabase-service":"Supabase service_role key","secret.google-api-key":"Google API key","secret.sendgrid":"SendGrid key","secret.env-file":".env file","secret.key-file":"key file","secret.google-service-account":"Google service account","secret.ssh-private-key":"SSH private key","secretWhy.stripe-live":"Lets anyone charge and move money out of the real account.","secretWhy.stripe-test":"Only touches the test environment, but it should not be in the history either.","secretWhy.aws":"Opens the AWS account, with whatever that user is allowed to do.","secretWhy.github-token":"Opens the user’s repositories, with whatever their permissions allow.","secretWhy.anthropic":"Billed to your account until you revoke it.","secretWhy.openai":"Billed to your account until you revoke it.","secretWhy.slack":"Opens the Slack workspace.","secretWhy.private-key":"A private key in the history has stopped being private.","secretWhy.supabase-service":"Skips every row-level security policy. It is the master key.","secretWhy.google-api-key":"Outside client configuration, a Google key with no domain restriction can be used by anyone and is billed to you.","secretWhy.sendgrid":"Lets anyone send mail in your name.","secretWhy.file":"Deleting it from the tree is not enough: what was committed stays in the history, and the key has to be rotated.","scan.orderTitle":"If any of this is real, the order matters","scan.step1Act":"Revoke the key in the provider’s console.","scan.step1":"{act} It’s the only thing that actually turns it off.","scan.step2":"Issue a new one and put it in an ignored `.env`.","scan.step3Act":"After that, if you want, scrub it from the history with `git filter-repo`.","scan.step3":"{act} Deleting it from the file and committing doesn’t help: it’s still in every earlier commit, and in any clone anyone made.","scan.notStored":"This report isn’t saved to the database. Storing exactly where your leaked keys are would create a second place to leak them from.","packages.title":"{n} dependencie{s} across your portfolio","packages.emptyTitle":"No dependencies yet","packages.emptyBody":"They come from the projects in the catalog: scan a folder and each project’s dependencies show up here, with versions and advisories.","packages.intro":"Your portfolio seen by package instead of by project. No package manager can show you this: each one only ever sees a single project.","packages.stats":"{outdated} direct dependencies behind \xb7 {advisories} advisories \xb7 checked {when}","packages.colPackage":"package","packages.colProjects":"projects","packages.colInUse":"in use","packages.colLatest":"latest","packages.colAdvisories":"advisories","packages.deprecated":"deprecated","packages.unpinned":"unpinned","agents.empty":"No agents connected","agents.countOne":"{n} agent","agents.countMany":"{n} agents","agents.intro":"What AI agents have done across your projects, in one place. They connect over MCP and report as they work.","agents.connectFirst":"Connect one from the terminal:","agents.connectNote":"The command prints the key and an MCP config ready to paste. Meanwhile, attribution from git trailers already works with nothing installed — open any project with history.","agents.entries":"{entries} entries \xb7 {projects} projects","agents.seen":"seen {when}","agents.recentActivity":"Recent activity","families.title":"{n} folder{s} that are a copy","families.intro":"Grouped by root commit, git remote, name, and shared dependencies. For each family, panoma points at the one to keep — it deletes nothing. Being the main one doesn’t mean the project is alive: its state says that, separately.","families.stats":"{families} families \xb7 {bytes} of repeated code","families.empty":"No copies in the catalog. Scan a folder with {cmd} to look for them.","families.copiesAndSize":"{n} copie{s} \xb7 {bytes}","families.canonical":"main","families.copy":"copy","families.noGit":"no git","families.sameDate":"same date","families.daysBehind":"{n} d behind","runs.empty":"No proposals yet","runs.countOne":"{n} proposal","runs.countMany":"{n} proposals","runs.intro":"Every proposal is prepared in an isolated worktree: edit the manifest, install, run the tests. The result is a branch with the patch — never a change applied in your folder, and never a push.","runs.tryHint":"Try it on a dependency that’s behind:","runs.argProject":"project","runs.argPackage":"package","runs.branch":"branch","runs.security":"security","runs.advisory":"advisory","runs.noTestsEmphasis":"nobody has checked","runs.noTests":"This project has no tests, so {nobody} that it still works with this version. Review the patch more carefully than usual.","runs.steps":"Steps","runs.patchLines":"Patch \xb7 {n} line{s}","patch.output":"output ({n} characters)","runActions.apply":"Apply to my repository","runActions.merging":"Merging…","runActions.discard":"Discard","runActions.discarding":"Deleting…","runActions.note":"Merges {branch} into your current branch. It doesn’t push.","runActions.noDetail":"No detail.","runActions.unreachable":"Couldn’t reach the server.","isolation.container":"container","isolation.container.title":"Ran in a throwaway container: no access to your disk or your processes.","isolation.hardened":"clean environment","isolation.hardened.title":"Ran with filtered environment variables and a throwaway HOME: install scripts never saw your credentials. They still ran on your machine, with network access.","isolation.local":"not isolated","isolation.local.title":"Ran on your machine with your full environment. An install script had access to your variables and your disk.","isolation.degraded":"degraded","hidden.empty":"Nothing set aside","hidden.count":"{hidden} hidden and {excluded} out of the catalog","hidden.wordHidden":"hidden","hidden.wordExcluded":"out of the catalog","hidden.intro":"A {hidden} project stays in the catalog with all its data: it just stops showing up in the grid and the counters. One that’s {excluded} has been deleted from Panoma, and no scan adds it back until you readmit it.","hidden.diskNote":"Neither of those touched your disk. Every folder is still where it was, with its code and its history intact.","hidden.sectionHidden":"Hidden ({n})","hidden.sectionExcluded":"Out of the catalog ({n})","hidden.outSince":"out since {when}","hidden.readmitNote":"Readmitting only lifts the ban: the project comes back on the next {cmd}, with its data analyzed again from scratch.","hidden.emptyBody":"When you hide or remove a project, it shows up here so you can put it back.","undo.unhide":"show again","undo.readmit":"readmit","undo.failed":"Couldn’t do it.","undo.unreachable":"Couldn’t reach the server.","disk.empty":"Nothing measured yet","disk.title":"{bytes} come back with one command","disk.intro":"Installed dependencies, caches, and build output. Panoma deletes nothing: it measures, says where each number comes from, and hands you the command that regenerates it.","disk.metricTotal":"total on disk","disk.metricReclaimable":"regenerable","disk.metricShare":"{n}% of the total","disk.metricDormant":"in dormant projects","disk.metricDormantDetail":"no commit in over a year","disk.metricMeasured":"projects measured","disk.ofTotal":"of {bytes}","disk.shareAria":"{n}% of the project is regenerable","disk.moreDirs":"+{n} more","disk.measuredAt":"measured {when}","disk.rules":"A folder makes this list for one of two reasons: its name only ever means “generated” ({generated}), or the project itself ignores it in git. Ambiguously named ones —{ambiguous}— that git doesn’t ignore stay out: in one project they’re junk, and in the next one they’re hand-written code.","measure.start":"measure the disk","measure.again":"measure again","measure.busy":"walking the disk…","measure.noteFirst":"It walks every project’s full tree. The first run takes several minutes.","measure.noteBusy":"It walks every project’s full tree. This can take several minutes; don’t close this tab.","measure.noteLast":"Last measured: {when}. Sizes change every time you install or build.","measure.done":"{n} project{s} measured","measure.missing":"{n} folder{s} no longer on disk","measure.failed":"Couldn’t measure.","measure.unreachable":"Couldn’t reach the server.","unsaved.safe":"Everything is safe","unsaved.countOne":"{n} project with unbacked work","unsaved.countMany":"{n} project{s} with unbacked work","unsaved.intro":"What exists only on this disk. Panoma reads each folder’s git state and touches nothing: it shows you the command, you run it.","unsaved.statUnversioned":"{n} folder{s} with no version control","unsaved.statOrphanCommits":"{n} commit{s} with no remote copy anywhere","unsaved.statUnpushed":"{n} commit{s} not pushed","unsaved.statChecked":"as of the last scan \xb7 run {cmd} again to refresh it","unsaved.emptyBody":"No project in the catalog has uncommitted changes, unpushed commits, or a repository without a remote.","unsaved.emptyNote":"Projects scanned with {flag} don’t show up here: nothing is known about those, which is not the same as being clean.","unsaved.group.no-git":"No version control","unsaved.blurb.no-git":"Folders with code and no repository. No history, no remote, no way to undo anything: an accidental delete here doesn’t come back.","unsaved.group.no-commits":"A repository and not one commit","unsaved.blurb.no-commits":"Someone ran `git init` and stopped there. Everything inside is outside any history.","unsaved.group.no-remote":"Only on this disk","unsaved.blurb.no-remote":"Repositories with no remote configured. Their entire history exists in exactly one place: here.","unsaved.group.unpushed":"Commits not pushed","unsaved.blurb.unpushed":"They have a remote, but there are commits that haven’t left this machine.","unsaved.group.uncommitted":"Uncommitted changes","unsaved.blurb.uncommitted":"Files touched or never added that aren’t in any history.","unsaved.group.stashes":"Forgotten stashes","unsaved.blurb.stashes":"Changes set aside “for a second” that have been there ever since.","unsaved.files":"{n} file{s}","unsaved.copyOfTitle":"Panoma considers this a copy of {name}. Even so, whatever you touched here is only here.","api.localOnly":"{action} only works with a local catalog.","api.action.openFolder":"Opening folders","api.action.aiConfig":"Configuring the model","api.action.assign":"Assigning work","api.action.withdraw":"Taking an assignment back","api.action.launchAgent":"Launching an agent","api.action.check":"Checking the build","api.action.measureDisk":"Measuring the disk","api.action.writeBlock":"Writing the block","api.action.rescan":"Rescanning","api.action.noteTask":"Noting tasks","api.action.noteMemory":"Curating memory","api.action.hooks":"Installing the hooks","api.missingId":"The project id is missing.","api.missingProject":"The project is missing.","api.noProject":"Project not found.","api.noAssignment":"No such assignment.","api.unknownAction":"Unknown action.","api.badLimit":"“{value}” doesn’t work as a limit: it takes a whole number from 1 to {cap}.","api.unreachable":"Couldn’t reach the server.","api.folderGone":"The folder is no longer at {root}. Scan again.","guard.rejected":"Request rejected: {detail}.","guard.rejectedHint":"Panoma only accepts actions from its own interface or from the CLI.","guard.otherSite":"the request comes from another site ({site})","guard.otherOrigin":"the origin {origin} is not this application","guard.localOperatorOnly":"This gives orders to the computer the catalog lives on, and that needs its operator key.","guard.localOperatorOnlyHint":"Open the catalog with the “this machine” link that “panoma up --network” prints, or do it on the computer itself.","open.unknownTool":"I don’t know how to open with “{tool}”.","open.gone":"The folder is no longer at {root}.","open.goneHint":"You may have moved or deleted it. Scan again to update the catalog.","open.noEditor":"I couldn’t find an editor on the PATH.","open.noConfig":"We don’t know where that agent keeps its configuration.","open.noEditorHint":"It looks for these, in order: {order}. In VS Code or Cursor you install it with “Shell Command: Install 'code' command in PATH”, and the order changes with the PANOMA_EDITOR variable.","open.unsupportedTool":"I don’t know how to open “{tool}” on {os}.","open.launchFailed":"Couldn’t open with {command}.","open.launchNamedFailed":"Couldn’t open {name}: {detail}","open.noTerminalHere":"I can’t open a terminal on {os} yet.","open.noTerminalHereHint":"Open the folder and start your agent by hand.","open.noAgent":"I couldn’t find any agent installed.","open.noAgentHint":"It looks for these, in order: {agents}. With one installed and signed in, this button launches it.","open.appMissing":"That app isn’t installed on this machine.","ai.unknownProvider":"Unknown provider.","ai.noKeyNeeded":"{name} doesn’t use a key: it uses the session you already signed into.","ai.emptyKey":"The key arrived empty.","ai.notAKey":"That doesn’t look like a key.","ai.loginBusy":"There’s already a sign-in half done. Finish it or wait for it to expire.","ai.noLogin":"That provider doesn’t use sign-in.","assign.alreadyQueued":"That assignment is already in the queue.","assign.pasteHint":"Copy the assignment and paste it to your agent.","check.busy":"There’s already a check running for this project.","check.failed":"Couldn’t check it: {detail}","tasks.needTitle":"The task needs a sentence.","tasks.tooLong":"The sentence can’t go past {n} characters.","notes.tooLong":"A note is a durable fact in a sentence or two: neither empty nor an essay. The character cap is 500.","notes.overBudget":"The memory is full: consolidate or discard a note before approving another. The character cap is 2000.","notes.sleepingFull":"Sleeping signals are at capacity: discard or consolidate one before approving another. The slot cap is 30.","notes.pendingFull":"Too many proposals are waiting: decide on those first. The cap is 20.","notes.gone":"That note is already decided.","notes.saveFailed":"Couldn’t save it.","notes.title":"Memory","notes.hint":"Durable facts every agent receives on opening the project. What an agent proposes waits here for your yes.","notes.empty":"Nothing noted yet.","notes.pendingTitle":"Proposed","notes.approve":"Approve","notes.discard":"Discard","notes.add":"Note it","notes.addPlaceholder":"A durable fact about this project…","notes.proposedBy":"proposed by {agent}","notes.sleepsAt":"sleeps on {trigger}","notes.badTrigger":"The where must be a relative path in this project: exact, or a zone ending in /**.","notes.challengedTitle":"Challenged","notes.challengedEvidence":"the disk moved: {target} ({observed})","notes.reapprove":"Re-approve","double.title":"The double","double.shadowTag":"in shadow","double.hint":"What your agents would have asked you, and what your double would have answered. Nobody has seen these answers: grading them is its exam.","double.askedBy":"asked by {agent}","double.drafting":"The double has not drafted yet.","double.abstained":"The double abstained: none of your beliefs covers this question.","double.cites":"Backed by:","double.backed":"I would have said the same","double.vetoed":"No","double.labeledBacked":"you agreed","double.labeledVetoed":"you disagreed","double.gone":"That consultation is already graded.","double.saveFailed":"Couldn’t save it.","roots.serverOnly":"Watched places belong to the machine serving the catalog.","roots.missingFolder":"The folder is missing.","roots.system":"{path} belongs to the system: none of your projects live there.","roots.home":"Your whole home folder is too much: add the folders where you actually code.","roots.library":"That’s app data, not your projects.","roots.notAFolder":"{path} isn’t a folder that exists.","roots.covered":"{path} is already inside {covering}, which is watched whole. If you only want that one, remove the outer folder first.","rescan.failed":"Couldn’t update {name}: {detail}","md.missingSlugPath":"The project or the file is missing.","md.missingSlugAction":"The project is missing, or what to do with the block.","accounts.missingInput":"The project or the list of accounts is missing.","accounts.badUrlAt":"The link on “{label}” doesn’t make sense. Nothing was saved.","agentMcp.localOnly":"Connecting an agent writes to this disk: local machine only.","agentMcp.missingInput":"The agent is missing.","agentMcp.noServer":"The MCP server isn’t in this install. Build it with: pnpm --filter @panoma/mcp run build","agentMcp.badJson":"{path} has a syntax error. Leaving it alone: fix it and paste this yourself, or try again.","agentMcp.notAnObject":"{path} isn’t shaped the way we expected. Leaving it alone: paste this where it belongs.","agentMcp.badToml":"{path} has a syntax error. Leaving it alone: fix it and paste this yourself, or try again.","agentMcp.tomlManual":"Panoma is already in {path}, written your way. Leaving it alone: update it yourself with this.","agentKeys.localOnly":"Local machine only.","agentKeys.missingField":"Missing “{field}”.","agentKeys.gone":"That agent is gone.","verdicts.malformed":"The list of reactions is missing, or one of them isn’t shaped the way we expected. Nothing was saved.","verdicts.tooMany":"{n} reactions arrived and {cap} fit at a time. Nothing was saved: send them in batches.","verdicts.badSource":"“{source}” isn’t a source that can be forgotten. The ones there are: {sources}, or “all” for every one.","verdicts.unknownSource":"“{source}” isn’t a known source. The ones there are: {sources}.","verdicts.badAccepted":"“{value}” says nothing about the review. Write accepted=true, accepted=false or accepted=pending.","distill.failed":"Couldn’t distill that: {detail}","distill.noProvider":"Set up a provider with: panoma ai use <provider>","api.modelFailed":"Couldn’t ask the model: {detail}","model.noneConnected":"no model is connected yet","model.connectHint":"Connect one on the Model page, or from the terminal: panoma ai use <provider>","model.noCredential":"the {name} credential is missing","model.hintCli":"Install {name} and sign in; Panoma will call “{command}”.","model.hintOauth":"Sign in to {name} from the Model page.","model.hintKey":"Save the key on the Model page or with “panoma ai key {id}”. Get one at {url}","look.noImage":"The screenshot is missing: there is no image to look at.","look.badImage":"That image can’t be read: it arrives empty or in a format that isn’t an image.","look.noProfile":"There is nothing to measure this screen against: your portrait is empty and this project has no north. Distill your history —panoma twin distill— or write a north with panoma north.","look.budgetSpent":"Today’s looks are spent: {used} of {cap}. They come back tomorrow, or raise the cap with PANOMA_LOOK_BUDGET.","look.failed":"Couldn’t look at that: {detail}","look.noVision":"The provider you have set up can’t receive images: {detail}","look.assignMalformed":"You didn’t say which finding to turn into an assignment.","look.assignGone":"That finding is gone: the look it came from was deleted.","look.assignQueued":"That is already in the queue.","look.assignButton":"Add to the queue","look.assignDone":"Queued in {project}: {title}","look.assignNow":"Do it now","look.assignAgain":"Send it again","look.dismissButton":"Discard it","look.dismissed":"discarded","look.dismissDone":"Discarded. If you change your mind, you can put it back in the queue.","critique.showOne":"See the finding","critique.showMany":"See them one by one — findings: {findings}","critique.hide":"Close the list","critique.moved":"This review is no longer the one you are looking at: the folder changed and panoma redid it. Reload to see the current findings.","critique.never":"Panoma hasn’t read this folder yet, so there’s nothing to show here: neither good nor bad.","critique.clean":"Panoma read it and found not one mechanical problem. Files read: {n}.","critique.partial":"And it didn’t get through all of it: the folder holds more than one pass covers.","critique.queued":"Queued. Your agent picks it up when it enters the project.","critique.dismissed":"Discarded. If you change your mind, you can put it back in the queue.","look.assignLaunched":"Terminal opened with {agent} working on it.","look.assigning":"Queueing…","look.assigned":"in the queue","assign.noTask":"That assignment is no longer in the queue.","assign.notQueued":"That assignment was no longer in the queue: an agent may have closed it.","assign.taskIdLine":"This assignment is in panoma's queue with id {id}: claim it with panoma_claim_task before you start and close it with panoma_complete_task when you are done.","look.noIdentity":"This project has no stable identity yet —it comes from the first commit— so there would be nowhere to keep what was looked at. Make the first commit and try again.","look.noShot":"That screenshot is no longer in the inbox: {name}","look.noShotName":"You didn’t say which screenshot to look at.","look.unreadableShot":"That screenshot was in the list and couldn’t be opened: {detail}. It was probably deleted, or it weighs more than can be looked at.","dest.look":"The critic: what’s wrong with what you were handed","look.kicker":"Twin \xb7 the critic","look.title":"What’s wrong with what you were just handed","look.intro":"The middle turn, done by someone else. It looks at the screen with your portrait in hand and says which of your statements it breaks, with the next instruction already written. A judgement that doesn’t hang off a statement you signed doesn’t leave here.","look.yardstick":"measured against \xb7 portrait statements: {n}","look.noYardstick":"Your portrait is empty, so there is nothing to measure with: this only reports what breaks a statement of yours. Start with your twin.","look.budget":"looks today: {used} \xb7 cap for the day: {cap}","look.watch":"The watcher only looks at what shows up in an inbox, and at each screenshot once. Its share of the day: {cap}.","look.notRedacted":"A screenshot travels whole: there is no way to redact pixels. Whatever is visible in it —a key in a terminal, a real email address— leaves with the image.","look.inboxTitle":"The inbox","look.inboxOf":"{project}’s inbox","look.inboxEmpty":"Mounted and empty: no agent has left anything yet.","look.inboxSkipped":"files that aren’t images and don’t get looked at: {n}","look.noInbox":"No project has the inbox mounted.","look.noInboxHint":"Mount it with “panoma md init” inside the project. From then on your agents read in AGENTS.md where to leave what they build, and it shows up here.","look.button":"Look","look.buttonAgain":"Look again","look.looking":"Looking…","look.looked":"already looked at \xb7 findings: {n}","look.lookedClean":"already looked at \xb7 broke nothing","look.estimate":"statements: {statements} \xb7 prompt tokens: {tokens} \xb7 image: {size}","look.verdictOf":"What it says about {subject}","look.clean":"It doesn’t break any of your statements.","look.unreadable":"The answer didn’t have the shape of findings. The call was paid for anyway, and you can look again.","look.fix":"Ask for: {fix}","look.against":"against: {statement}","look.measured":"measured against statements: {statements}","look.dropped":"judgements without backing, dropped: {n}","look.uploadTitle":"Not in any inbox?","look.uploadHint":"A desktop app, a Figma frame, a photo taken with a phone: whatever no agent can capture goes up from here.","look.uploadPick":"Choose an image","look.uploadTarget":"Project to upload the screenshot to","look.badType":"That isn’t an image that can be looked at: PNG, JPEG, WebP or GIF.","look.tooBig":"That image weighs {size} and the cap sits at {cap}. Crop it or export it as JPEG.","look.historyTitle":"What it has looked at","look.historyEmpty":"It hasn’t looked at anything yet.","look.firedWatch":"the watcher looked at it","look.firedHand":"you asked for it","taste.full":"It doesn’t fit: the portrait would take {chars} of {cap} characters. Nothing was saved. Take a statement out, or scope it to its project so it only counts there, and save again.","twin.toCritic":"Show the critic a screen →","twin.title":"This is what I learned about you","twin.titleEmpty":"I haven’t learned anything about you yet","twin.intro":"Every belief comes from things you wrote to your agents, with the quotes underneath. There is nothing to approve: if you touch nothing, this is what your agents read. Read it, and correct whatever isn’t you.","twin.introWaiting":"Every belief comes from things you wrote to your agents, with the quotes underneath. They don’t reach them yet: a machine worked these out, and it takes one yes from you, down below.","twin.introEmpty":"Panoma reads your history with your agents on your own disk and pulls out the few things you actually believe about how your work should come out, each with the quotes it came from.","twin.introEmptyHint":"Start just below, under your histories: it says which ones are on this machine and how much they weigh, measured without opening any.","twin.counts":"beliefs: {beliefs} \xb7 forming: {forming} \xb7 evidence: {observations}","twin.density":"observations per belief: {density}","twin.corrections":"you have corrected {corrections} of {shown}","twin.rate":"{rate}% needed correcting","today.criticWhere":"What it saw, and where","today.criticFindingOne":"{n} thing","today.criticFindingMany":"{n} thing{s}","today.criticOne":"the critic saw something while you were away","today.criticMany":"things the critic saw while you were away: {n}","twin.briefs":"of what the critic has seen you have assigned {ordered} of {findings}","twin.briefsRate":"{rate}% of what it points at works for you","twin.briefsLaunched":"of those, sent to an agent: {launched}","twin.briefsDiscarded":"and you said no to: {discarded}","twin.reachTitle":"Who reads it","twin.reach":"Your portrait goes down to the .md of these projects: {reached} of {projects}","twin.reachNone":"Right now no agent reads it: none of your projects has the channel open. You open it one at a time, inside the folder.","twin.reachSome":"In the rest the channel is closed, so there your agents work knowing nothing about this.","twin.reachHow":"panoma md init","twin.designTitle":"What yours looks like","twin.designFrom":"From projects the critic has read, copies aside: {read} \xb7 of those, with something to look at: {withUi}","twin.designProjects":"projects: {projects}","twin.designFonts":"Typefaces: {fonts}","twin.designRadii":"Corners: {radii}","twin.designTraits":"With dark mode: {dark} \xb7 with animation: {animation}","twin.briefsRelaunched":"some more than once — launches: {launches}","twin.digest":"In the last {days} days — new: {created} \xb7 refined: {refined} \xb7 retired: {retired}.","twin.corpusLeft":"All of this comes from {read} of the {total} quote{s} of yours that are stored: {left} still unread.","twin.distillAll":"Read the rest of my history \xb7 {n} quote{s} left","twin.distilling":"Reading…","twin.distillEstimate":"this pass reads {verdicts} quotes \xb7 about {tokens} input tokens","twin.distillProgress":"read: {read} \xb7 observations stored: {saved} \xb7 left: {left}","twin.distillNothing":"There is no history left to read.","twin.corpusDone":"It comes from your whole history: all {total} stored quotes have been read.","twin.scopeOnly":"Only in {project}","twin.scopeAll":"Applies to everything you make","twin.scopedTag":"only in {project}","twin.badgeSigned":"signed by you","twin.badgeStanding":"standing","twin.badgeForming":"forming","twin.formingWhy":"not enough proof yet: it takes three, from two days or two projects","twin.support":"observations: {observations} \xb7 projects: {projects} \xb7 days: {days}","twin.showCitations":"show the quotes: {n}","twin.hideCitations":"hide the quotes","twin.sign":"It’s well put","twin.edit":"Say it in my words","twin.editSave":"Save my version","twin.editText":"Belief text","twin.veto":"That’s not what I think","twin.markedGestures":"changes marked: {n}","twin.topicDesign":"Design","twin.topicFrontend":"The interface itself","twin.topicBackend":"The server and its data","twin.topicCli":"The terminal","twin.topicTesting":"How things are checked","twin.topicCopy":"The words","twin.topicWorkflow":"How you work with your agents","twin.topicTooling":"The tooling","twin.topicData":"The data","twin.topicOther":"Everything else","twin.consentTitle":"One single question","twin.consentBody":"There are beliefs the machine worked out on its own that you haven’t looked at yet. Until you say yes, the file your agents read is exactly what you signed: nothing you didn’t write speaks for you.","twin.consentCount":"waiting: {n} \xb7 they would take: {chars} characters in total","twin.consentOver":"with them the portrait wouldn’t fit in {cap} characters, so something would have to come out","twin.consentAllow":"Let them reach the file","twin.consentRevoke":"Taken back by deleting twin.json, without opening this.","twin.proposalsTitle":"It wants to change something you signed","twin.proposalsNote":"You wrote these, so the machine leaves them alone: it says how it would put them now, and waits.","twin.proposalJoins":"merging this many: {n}","twin.proposalAccept":"Let it change","twin.proposalReject":"Leave it as it is","twin.graveyardTitle":"What you said you are not","twin.graveyardNote":"It isn’t deleted: it stays here so synthesis never proposes it again in other words.","twin.save":"Save","twin.saving":"Saving…","twin.cancel":"Discard what’s marked","twin.saveFailed":"Couldn’t save that: {detail}","twin.fileTitle":"TASTE.md","twin.fileSize":"{chars} of {cap} characters","twin.fileHint":"This is the file your agents read, and the other door to the same thing: open it and delete a line, and that statement leaves the portrait the next time you decide something here.","twin.fileFull":"It doesn’t fit. Until something comes out, what you decide is stored in the catalog but never reaches the file, and the file is all your agents read.","twin.fileWritten":"written right now: {n}","twin.fileRoom":"There is room for {n} more characters.","twin.spendTitle":"What it cost today","twin.spendLooks":"looks: {used} of {cap}","twin.spendTokens":"{input} input tokens \xb7 {output} output","twin.spendNone":"No model was called today.","twin.spendUnmetered":"{n} unmeasured: that provider doesn’t publish usage.","twin.spendDistills":"distillations: {n}","twin.spendClassify":"topic passes: {n}","twin.spendSynth":"syntheses: {n}","twin.sourcesTitle":"Your histories with your agents","twin.sourcesLead":"Panoma measures them without opening them. Nothing is read until you say so, and you say so one at a time: reading Claude Code is not reading Codex.","twin.sourcesNone":"There is no agent history on this disk that Panoma knows how to measure.","twin.sourceSize":"files: {files} \xb7 {size}","twin.sourceGone":"no longer on this disk","twin.sourceAllow":"Let it read this","twin.sourceRevoke":"Stop reading this","twin.sourceNoReader":"we can’t read this one yet","twin.sourcesRevokeNote":"Stopping closes the door and doesn’t delete what already came in: that’s panoma twin forget.","twin.consentMalformed":"It needs to say which source and whether it’s allowed.","twin.consentUnknown":"That source isn’t on this disk: {source}","twin.mineNoConsent":"None of your histories has permission, so not one file was opened. Say so just below, under your histories.","twin.mineNoReadable":"The histories on this disk can’t be read yet, so no permission would help: not one file was opened.","twin.mineNoHistories":"There is no agent history on this disk to read, so not one file was opened.","twin.mineButton":"Look for what’s new in my history","twin.mineButtonLeft":"Read my history \xb7 {n} left","twin.mining":"Reading your histories…","twin.mined":"new quotes: {saved} \xb7 already there: {duplicates}","twin.minedNone":"Nothing new in your histories since last time.","twin.churnTitle":"How your portrait has moved","twin.churnMonth":"{month} — new: {created} \xb7 refined: {refined} \xb7 retired: {retired}","twin.churnStill":"It hasn’t moved this month: what is there is already said.","twin.churnOnlyRefined":"This month only rewrote what was already there: nothing new and nothing retired.","twin.projectQuestion":"What is work here measured against?","twin.projectTitle":"What your agents read here","twin.projectLead":"It goes down through AGENTS.md into every session you open in this folder. The global ones apply across all your projects; the rest only here.","twin.projectLeadUnmanaged":"The global ones apply across all your projects; the rest only here. It doesn’t reach your agents yet: this project has no Panoma block in its AGENTS.md.","twin.projectCount":"statements that apply here: {n}","twin.projectOnly":"only this project: {n}","twin.projectOnlyHere":"only here","twin.projectNone":"There is no portrait yet, so nothing is measured here.","twin.projectNoneHere":"Your portrait says nothing that applies to this project.","twin.projectForming":"still forming about this project: {n}","twin.projectOpen":"Open your twin","twin.spendReads":"reads: {used} of {cap}","twin.readsSpent":"Today’s reads are spent: {used} of {cap}. They come back tomorrow, or raise the cap with PANOMA_READ_BUDGET.","twin.synthesize":"Rewrite the portrait","twin.synthesizing":"Writing…","twin.synthHint":"Reads all your evidence and rewrites what the machine believes about you.","twin.synthDone":"new: {created} \xb7 refined: {refined} \xb7 retired: {retired}.","twin.synthAsks":"And it asks you about beliefs you signed: {n}.","twin.synthSame":"Nothing changed: the evidence says what it said last time.","twin.synthNothing":"There is no evidence to synthesize yet. Read your history above: that’s where the observations the portrait comes from are pulled out.","twin.synthUpToDate":"The portrait is already up to date: no new evidence has come in.","twin.synthFailed":"The portrait couldn’t be written.","twin.citedIn":"in {project}","score.tooFew":"It has told you {shown}. It takes {floor} for a percentage to mean anything: below that, a single correction moves it more than five points, and it would be describing the last belief you looked at rather than your taste.","score.noTrend":"The {rate}% is where it stands today, not whether it improves: neither of the two settled months reaches {floor} beliefs, so the month-over-month comparison can’t be made yet. The current month doesn’t count: its beliefs haven’t been looked at yet.","score.better":"Of what it told you last month you corrected {recent}%, and of the month before {previous}%: it goes down, which is the only thing that means the twin is learning.","score.notBetter":"Of what it told you last month you corrected {recent}%, and of the month before {previous}%: it doesn’t go down. Until it goes down month over month, the twin isn’t learning, and this scoreboard isn’t going to say otherwise.","connect.title":"Connect an agent over MCP","connect.lead":"MCP is the channel an agent uses to talk to your catalog. These are the ones on this machine: connecting one gives it the six tools — the project brief on arrival, the log, and the task queue — and writes its configuration where that agent reads it.","connect.do":"Connect","connect.again":"Connect again","connect.alreadyOn":"connected","connect.againCost":"Already connected. Connecting again issues a new key: where panoma writes the file it updates itself, but if you pasted the block by hand anywhere, that copy will stop working and you will have to paste it again.","connect.working":"Connecting…","connect.written":"MCP configuration written.","connect.updated":"The panoma entry that was already there has been updated.","connect.coexists":"Still there: {list}.","connect.gitWarning":"Heads up: this file holds the agent key in the clear and git would carry it. Add its name to .gitignore before you commit.","connect.restart":"Restart {name} so it picks this up.","connect.pasteInto":"This agent keeps its MCP servers in a format we will not touch. Paste this into:","connect.pasteSomewhere":"We don’t know where this agent keeps its MCP servers. Paste this wherever it does:","connect.copy":"Copy the MCP configuration","connect.openFile":"Open the file","connect.opened":"Opened in {editor}. Paste the block, save, and restart {name}.","connect.copied":"copied","disconnect.do":"disconnect","disconnect.confirm":"Yes, disconnect","disconnect.working":"Removing…","disconnect.losing":"What {name} recorded here goes too: {n} entrie{s}.","disconnect.nothingLost":"{name} hasn’t recorded anything yet.","md.noBlock":"There’s no Panoma block in this project; create it first.","md.notInherited":"That file isn’t an inherited one from this project.","md.fileGone":"The file is no longer where it was.","md.noFiles":"This project has no AGENTS.md or CLAUDE.md.","md.inspectLocalOnly":"The review reads your disk: it only works with a local catalog.","md.repairLocalOnly":"Repairing writes to your disk: it only works with a local catalog.","runs.notFound":"Run not found.","runs.noBranch":"This run left no branch to apply.","runs.alreadyRunning":"There’s already a run in progress on {name}.","runs.alreadyRunningHint":"Wait for it to finish, or watch it under Activity.","runs.missingPackage":"The package name is missing.","runs.noFixForPackage":"{package} has no advisory with a fixed version in {name}.","runs.noFixes":"{name} has no vulnerabilities with a published fix.","runs.enrichAdvisories":"Run 'panoma enrich' to refresh the OSV advisories.","runs.notADependency":"{package} isn’t among {name}’s dependencies, or I don’t know its latest version.","runs.enrichVersions":"Run 'panoma enrich' to pull versions from the registries.","runs.unsupportedEcosystem":"I can’t update {ecosystem} dependencies yet.","runs.knownFailureHint":"Try again with --force if you think something has changed.","runs.quarantined":"{package} {version} was published {age} ago and Panoma’s quarantine is {days} days.","runs.quarantinedHint":"A freshly published version is where supply-chain compromises show up, and they’re almost always pulled within a day or two. Try again later, or right now with --force if you know what you’re doing. The threshold changes with PANOMA_CUARENTENA_DIAS.","runs.crashed":"The run crashed: {detail}","north.missing":"The sentence is missing: write what having this project finished would be.","north.tooLong":"That’s {n} characters and the north is one line: up to {max} fits. Anything longer is a plan, and there’s a plan assignment for that.","north.noIdentity":"This project has no stable identity yet, so there’s nowhere to store the sentence where it would survive moving the folder. Scan it again and try once more.","move.noNorth":"nobody has written what “finished” means here yet","move.unsavedWork":"{n} unsaved-work warning","move.unsavedWork.n":"{n} unsaved-work warnings","move.noReadme":"there is no README that explains it","move.neverBuilt":"nobody has ever checked whether it still builds","move.critiques":"{n} thing showing without opening the project","move.critiques.n":"{n} thing{s} showing without opening the project","move.idle":"idle for {n} month","move.idle.n":"idle for {n} month{s}","move.advisories":"{n} open security advisory","move.advisories.n":"{n} open security advisories","move.outdated":"{n} outdated direct dependency","move.outdated.n":"{n} outdated direct dependencies","move.lowHealth":"health {n} out of 100","move.longIdle":"{n} month{s} idle: the question is no longer about maintenance"}},f={s:["","s"],es:["","es"],y:["y","ies"],ies:["y","ies"]};function g(a,b,c){let d=e[a][b];return c?d.replace(/\{(\w+)\}/g,(a,b)=>{let d=c[b];return void 0!==d?String(d):function(a,b){let c=["ies","es","s","y"].find(b=>a.endsWith(b));if(!c)return;let d=f[c];if(!d)return;let e=a.slice(0,a.length-c.length),g=b[""===e?"n":e];if("number"==typeof g)return 1===g?d[0]:d[1]}(b,c)??a}):d}function h(a,b){let c=b.count??0;return"unversioned"===b.code?a("risk.unversioned"):"untracked"===b.code?a("risk.untracked",{n:c}):"no-commits"===b.code?c>0?a("risk.no-commits.n",{n:c}):a("risk.no-commits"):a(1===c?`risk.${b.code}`:`risk.${b.code}.n`,{n:c})}Function("specifier","return import(specifier)")},67304:(a,b,c)=>{"use strict";c.d(b,{K:()=>i,t:()=>h});var d=c(83458),e=c(97019),f=c(17069),g=c(15966);function h(){let[a,b]=(0,e.useState)();return a}function i({failure:a}){let b=(0,g.k)();return(0,d.jsxs)("section",{className:"catalog-down",role:"alert",children:[(0,d.jsxs)("h2",{children:[(0,d.jsx)(f.z1N,{"aria-hidden":!0}),b("catalog.down.title")]}),(0,d.jsx)("p",{children:b("catalog.down.body",{path:a.path})}),(0,d.jsx)("p",{className:"catalog-down__detail",children:(0,d.jsx)("code",{children:b("catalog.down.detail",{detail:a.detail})})})]})}},67873:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,63507,23))},69070:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,67178,23)),Promise.resolve().then(c.t.bind(c,24221,23)),Promise.resolve().then(c.t.bind(c,67469,23)),Promise.resolve().then(c.t.bind(c,78756,23)),Promise.resolve().then(c.t.bind(c,80156,23)),Promise.resolve().then(c.t.bind(c,47232,23)),Promise.resolve().then(c.t.bind(c,28760,23)),Promise.resolve().then(c.t.bind(c,3406,23)),Promise.resolve().then(c.bind(c,77128))},76510:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(44700).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/private/tmp/panoma-npm/apps/web/app/(app)/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/app/(app)/error.tsx","default")},81025:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,66881,23))},81588:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>o,dynamic:()=>n,generateMetadata:()=>m});var d=c(64824),e=c(47276),f=c.n(e),g=c(46180),h=c(73335),i=c(83677),j=c(93138),k=c(9724),l=c(1012);async function m(){return{title:{default:"Panoma",template:"%s \xb7 Panoma"},description:(0,i.t)(await (0,i.JK)(),"meta.description"),icons:{icon:[{url:"/assets/brand/panoma.svg",type:"image/svg+xml"}],apple:"/apple-icon.png"}}}c(54432);let n="force-dynamic";async function o({children:a}){let[b,c]=await Promise.all([p(),(0,i.JK)()]);return(0,d.jsx)("html",{lang:c,className:f().variable,children:(0,d.jsxs)("body",{children:[(0,d.jsx)("a",{href:"#app-main",className:"skip-link",children:(0,i.t)(c,"shell.skipToContent")}),(0,d.jsx)(k.I18nProvider,{locale:c,children:(0,d.jsxs)(l.SearchProvider,{children:[(0,d.jsx)(j.AppShell,{stats:b}),a]})})]})})}async function p(){try{let{db:a}=await (0,h.db)(),b=await (0,g.GT)(a);return{projects:b.projects,live:b.live,paused:b.paused,dormant:b.dormant,noGit:b.noGit,copies:b.copies,unsaved:b.unsaved,notMine:b.notMine,proposedRuns:b.proposedRuns}}catch{return}}},82982:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,84516,23)),Promise.resolve().then(c.t.bind(c,51199,23)),Promise.resolve().then(c.t.bind(c,17779,23)),Promise.resolve().then(c.t.bind(c,65238,23)),Promise.resolve().then(c.t.bind(c,41634,23)),Promise.resolve().then(c.t.bind(c,21110,23)),Promise.resolve().then(c.t.bind(c,80662,23)),Promise.resolve().then(c.t.bind(c,60883,23)),Promise.resolve().then(c.t.bind(c,48582,23))},90630:(a,b,c)=>{Promise.resolve().then(c.bind(c,93138)),Promise.resolve().then(c.bind(c,9724)),Promise.resolve().then(c.bind(c,1012))},93138:(a,b,c)=>{"use strict";c.d(b,{AppShell:()=>d});let d=(0,c(44700).registerClientReference)(function(){throw Error("Attempted to call AppShell() from the server but AppShell is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/app-shell.tsx","AppShell")},94016:(a,b,c)=>{"use strict";function d(a,b){}c.d(b,{r:()=>d}),c(97019)},95793:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(64824),e=c(83677),f=c(9845);async function g(){let a=await (0,e.JK)();return(0,d.jsx)("html",{lang:a,children:(0,d.jsx)("body",{style:{margin:0},children:(0,d.jsx)(f.n,{es:"es"===a})})})}},97080:(a,b,c)=>{Promise.resolve().then(c.bind(c,76510))}};
|
|
1
|
+
exports.id=2930,exports.ids=[2930],exports.modules={1012:(a,b,c)=>{"use strict";c.d(b,{SearchProvider:()=>e});var d=c(44700);(0,d.registerClientReference)(function(){throw Error("Attempted to call useSearch() from the server but useSearch is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/search-provider.tsx","useSearch");let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call SearchProvider() from the server but SearchProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/search-provider.tsx","SearchProvider")},5532:(a,b,c)=>{"use strict";c.d(b,{R:()=>h,b:()=>f});var d=c(97019);let e={remote:!1,editor:null,editors:[],apps:[],agents:[]};function f(a=!0){let[b,c]=(0,d.useState)(e);return b}let g={cursor:"cursor",code:"vscode",windsurf:"windsurf",zed:"zed"};function h(a,b,c,d){let e=g[a??"code"];if(!e)return null;let f=encodeURI(`${b.replace(/\/$/,"")}/${c}`).replace(/#/g,"%23").replace(/\?/g,"%3F");return`${e}://file${f.startsWith("/")?"":"/"}${f}:${d}`}},9724:(a,b,c)=>{"use strict";c.d(b,{I18nProvider:()=>e});var d=c(44700);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call I18nProvider() from the server but I18nProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/i18n-provider.tsx","I18nProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/i18n-provider.tsx","useLocale"),(0,d.registerClientReference)(function(){throw Error("Attempted to call useT() from the server but useT is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/i18n-provider.tsx","useT")},9845:(a,b,c)=>{"use strict";c.d(b,{n:()=>g});var d=c(64824),e=c(63507),f=c.n(e);function g({es:a}){return(0,d.jsxs)("main",{style:{minHeight:"100dvh",margin:0,display:"grid",placeContent:"center",gap:14,padding:24,textAlign:"center",background:"#fafafa",color:"#0a0a0a",fontFamily:"ui-sans-serif, system-ui, -apple-system, sans-serif",WebkitFontSmoothing:"antialiased"},children:[(0,d.jsx)("img",{src:"/assets/brand/panoma.svg",alt:"",width:36,height:36,style:{display:"block",margin:"0 auto 6px"}}),(0,d.jsx)("h1",{style:{margin:0,fontSize:20,fontWeight:650,letterSpacing:"-0.02em"},children:a?"Aqu\xed no hay nada":"Nothing here"}),(0,d.jsx)("p",{style:{margin:0,fontSize:14,color:"#5c5c5c"},children:a?"Esta direcci\xf3n no lleva a ninguna parte.":"This address doesn't lead anywhere."}),(0,d.jsx)(f(),{href:"/",style:{marginTop:6,justifySelf:"center",padding:"9px 16px",borderRadius:6,background:"#0a0a0a",color:"#fafafa",fontSize:13,fontWeight:600,textDecoration:"none"},children:a?"Ir al cat\xe1logo":"Go to the catalog"})]})}},10372:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(83458),e=c(67304),f=c(15966);function g({reset:a}){let b=(0,f.k)(),c=(0,e.t)();return(0,d.jsx)("div",{id:"app-main",tabIndex:-1,children:c?.catalog?(0,d.jsx)(e.K,{failure:c.catalog}):(0,d.jsxs)("section",{className:"catalog-down",role:"alert",children:[(0,d.jsx)("h2",{children:b("error.title")}),(0,d.jsx)("p",{children:b("error.body")}),(0,d.jsx)("button",{type:"button",className:"catalog-down__button",onClick:a,children:b("error.retry")})]})})}},15966:(a,b,c)=>{"use strict";c.d(b,{I18nProvider:()=>h,Y:()=>i,k:()=>j});var d=c(83458),e=c(97019),f=c(63679);let g=(0,e.createContext)("en");function h({locale:a,children:b}){return(0,d.jsx)(g.Provider,{value:a,children:b})}function i(){return(0,e.useContext)(g)}function j(){let a=(0,e.useContext)(g);return(0,e.useCallback)((b,c)=>(0,f.t)(a,b,c),[a])}},18499:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(64824),e=c(83677),f=c(9845);async function g(){let a=await (0,e.JK)();return(0,d.jsx)(f.n,{es:"es"===a})}},20195:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(14313);let e=async a=>[{type:"image/png",sizes:"180x180",url:(0,d.fillMetadataSegment)(".",await a.params,"apple-icon.png")+"?01e055d15a833be4"}]},26252:(a,b,c)=>{"use strict";c.d(b,{SearchProvider:()=>i,S:()=>h});var d=c(83458),e=c(57476),f=c(97019);let g=(0,f.createContext)({query:"",setQuery:()=>{}});function h(){return(0,f.useContext)(g)}function i({children:a}){let b=(0,e.usePathname)(),c=(0,e.useSearchParams)(),[h,i]=(0,f.useState)(()=>"/"!==b?"":("string"==typeof c?new URLSearchParams(c):c).get("q")??""),j=(0,f.useMemo)(()=>({query:h,setQuery:i}),[h]);return(0,d.jsx)(g.Provider,{value:j,children:a})}},28103:(a,b,c)=>{"use strict";c.d(b,{AppShell:()=>w});var d=c(83458),e=c(66881),f=c.n(e),g=c(57476),h=c(97019),i=c(17069),j=c(63679),k=c(15966),l=c(5532),m=c(94016),n=c(51775);let o=[{href:"/",label:"nav.projects",icon:i.ENP},{href:"/bridge",label:"dest.bridge",icon:i.YT$},{href:"/unsaved",label:"dest.unsaved",icon:i.YUE},{href:"/disk",label:"dest.disk",icon:i.o7e},{href:"/search",label:"dest.searchCode",icon:i.JJh},{href:"/credentials",label:"dest.credentials",icon:i.JPZ},{href:"/agents",label:"dest.agents",icon:i.gj5},{href:"/twin",label:"dest.twin",icon:i.YL0},{href:"/twin/look",label:"dest.look",icon:i.bZk},{href:"/ai",label:"dest.ai",icon:i.K8V},{href:"/packages",label:"nav.packages",icon:i.XVA},{href:"/runs",label:"nav.activity",icon:i.G7A},{href:"/copies",label:"nav.copies",icon:i.Zs_},{href:"/hidden",label:"dest.hidden",icon:i.B3U}];function p(){let a=(0,g.useRouter)(),b=(0,k.k)(),[c,e]=(0,h.useState)(!1),[f,j]=(0,h.useState)(""),[p,s]=(0,h.useState)(null),[t,u]=(0,h.useState)(0),[v,w]=(0,h.useState)(null),x=(0,h.useRef)(null),y=(0,h.useRef)(null),z=(0,h.useRef)(null),{remote:A}=(0,l.b)(c),B=(0,h.useCallback)(async(a,c)=>{w(b("palette.opening",{name:a.name}));try{let d=await fetch("/api/open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:a.id,tool:c})}),f=await d.json();w(d.ok?null:f.error??b("palette.openFailed")),d.ok&&e(!1)}catch{w(b("palette.unreachable"))}},[b]),C=(0,h.useCallback)(b=>{e(!1),a.push(b)},[a]),D=(0,h.useMemo)(()=>{let a=(0,n.A)(f.trim()),b=(p??[]).filter(b=>{var c,d;return!a||(c=b,d=a,(0,n.A)([c.name,c.root,c.language??""].join(" ")).includes(d))});return a&&b.sort((b,c)=>q(c.name,a)-q(b.name,a)),b.slice(0,8)},[p,f]),[E,F]=(0,h.useState)(0),G=D[Math.min(E,D.length-1)],H=(0,h.useMemo)(()=>{let a=(0,n.A)(f.trim()),c=D.map(a=>({key:`p:${a.id}`,label:a.name,hint:r(a.root),enter:b(A?"palette.enterCard":"palette.enterEditor"),icon:A?i.wl$:i.KQe,group:"palette.groupProjects",run:()=>A?C(`/p/${a.slug}`):B(a,"editor")}));for(let d of(G&&(A||(c.push({key:`folder:${G.id}`,label:b("palette.openFolderOf",{name:G.name}),hint:r(G.root),icon:i.gBk,group:"palette.groupActions",run:()=>B(G,"folder")}),c.push({key:`terminal:${G.id}`,label:b("palette.openTerminalOf",{name:G.name}),hint:r(G.root),icon:i.Jhl,group:"palette.groupActions",run:()=>B(G,"terminal")})),c.push({key:`card:${G.id}`,label:b("palette.openCardOf",{name:G.name}),icon:i.wl$,group:"palette.groupActions",run:()=>C(`/p/${G.slug}`)})),a.length>=2&&c.push({key:"search-code",label:b("palette.searchEverywhere",{query:f.trim()}),icon:i.JJh,group:"palette.groupActions",run:()=>C(`/search?q=${encodeURIComponent(f.trim())}`)}),o))(!a||(0,n.A)(b(d.label)).includes(a))&&c.push({key:`go:${d.href}`,label:b(d.label),icon:d.icon,group:"palette.groupGoTo",run:()=>C(d.href)});return c},[C,D,B,f,A,b,G]),I=null!==p&&H.length>0;if((0,m.r)(z,c),!c)return null;let J="";return(0,d.jsx)("div",{className:"palette-backdrop",role:"presentation",onClick:a=>{a.target===a.currentTarget&&e(!1)},children:(0,d.jsxs)("div",{className:"palette",role:"dialog","aria-modal":"true","aria-label":b("palette.aria"),ref:z,children:[(0,d.jsxs)("div",{className:"palette__search",children:[(0,d.jsx)(i.JJh,{"aria-hidden":!0}),(0,d.jsx)("input",{ref:x,value:f,onChange:a=>{j(a.target.value),u(0)},onKeyDown:function(a){null!==p&&("ArrowDown"===a.key?(a.preventDefault(),u(a=>(a+1)%Math.max(1,H.length))):"ArrowUp"===a.key?(a.preventDefault(),u(a=>(a-1+H.length)%Math.max(1,H.length))):"Enter"===a.key&&(a.preventDefault(),H[t]?.run()))},placeholder:b("palette.placeholder"),"aria-label":b("palette.searchAria"),role:"combobox","aria-autocomplete":"list","aria-expanded":I,"aria-controls":"palette-results","aria-activedescendant":I?`palette-option-${t}`:void 0}),(0,d.jsx)("kbd",{children:"esc"})]}),(0,d.jsx)("p",{className:"sr-only",role:"status",children:null===p?b("palette.loading"):b("palette.results",{n:H.length})}),null===p?(0,d.jsx)("p",{className:"palette__empty",children:b("palette.loading")}):0===H.length?(0,d.jsx)("p",{className:"palette__empty",children:b("palette.noMatch",{query:f})}):(0,d.jsx)("ul",{className:"palette__list",id:"palette-results",ref:y,role:"listbox","aria-label":b("palette.aria"),children:H.map((a,c)=>{let e=a.icon,f=a.group!==J?a.group:null;return J=a.group,(0,d.jsxs)(h.Fragment,{children:[f&&(0,d.jsx)("li",{role:"presentation","aria-hidden":!0,children:(0,d.jsx)("p",{className:"palette__group",children:b(f)})}),(0,d.jsx)("li",{role:"presentation",children:(0,d.jsxs)("button",{id:`palette-option-${c}`,type:"button",role:"option",tabIndex:-1,"aria-selected":c===t,className:c===t?"is-active":void 0,onMouseEnter:()=>u(c),onClick:()=>void a.run(),children:[(0,d.jsx)(e,{"aria-hidden":!0}),(0,d.jsx)("span",{children:a.label}),a.hint&&(0,d.jsx)("span",{className:"palette__hint",children:a.hint}),c===t&&a.enter&&(0,d.jsx)("kbd",{className:"palette__enter",children:a.enter})]})})]},a.key)})}),v&&(0,d.jsx)("p",{className:"palette__notice",role:"status",children:v}),(0,d.jsxs)("p",{className:"palette__footer",children:[(0,d.jsx)("span",{children:b("palette.keysMove")}),(0,d.jsx)("span",{children:b("palette.keysOpen")}),(0,d.jsx)("span",{children:b("palette.keysClose")})]})]})})}function q(a,b){let c=(0,n.A)(a);return c===b?3:c.startsWith(b)?2:+!!c.includes(b)}function r(a){let b=a.split("/");return b.length<=3?a:`…/${b.slice(-2).join("/")}`}var s=c(26252),t=c(41762);let u=[{href:"/",label:"nav.projects",icon:i.ENP,exact:!0},{href:"/bridge",label:"nav.bridge",icon:i.YT$},{href:"/runs",label:"nav.activity",icon:i.G7A,badge:"proposedRuns"},{href:"/unsaved",label:"nav.unsaved",icon:i.YUE,badge:"unsaved"},{href:"/agents",label:"nav.agents",icon:i.gj5},{href:"/twin",label:"nav.twin",icon:i.YL0},{href:"/ai",label:"nav.ai",icon:i.K8V},{href:"/packages",label:"nav.packages",icon:i.XVA},{href:"/search",label:"nav.searchCode",icon:i.JJh},{href:"/credentials",label:"nav.credentials",icon:i.JPZ},{href:"/copies",label:"nav.copies",icon:i.Zs_},{href:"/disk",label:"nav.disk",icon:i.o7e}],v="https://github.com/PanomaAI/panoma";function w({stats:a,ephemeral:b}){let c=(0,g.usePathname)(),e=(0,g.useRouter)(),l=(0,k.k)(),m=(0,k.Y)(),{query:n,setQuery:o}=(0,s.S)(),[q,r]=(0,h.useState)(!0);function t(a){a!==m&&(document.cookie=`${j.CL}=${a}; path=/; max-age=31536000; samesite=lax`,e.refresh())}return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p,{}),(0,d.jsxs)("header",{className:"app-topbar",children:[(0,d.jsxs)("div",{className:"brand-cluster",children:[(0,d.jsx)("button",{type:"button",className:"sidebar-toggle",onClick:function(){r(a=>{let b=!a;return window.localStorage.setItem("panoma-shell-sidebar",b?"open":"hidden"),b})},"aria-expanded":q,"aria-controls":"app-sidebar","aria-label":l(q?"shell.hideSidebar":"shell.showSidebar"),title:l(q?"shell.hideSidebar":"shell.showSidebar"),children:q?(0,d.jsx)(i.Y48,{"aria-hidden":!0}):(0,d.jsx)(i.ngD,{"aria-hidden":!0})}),(0,d.jsxs)(f(),{href:"/",className:"brand-lockup","aria-label":l("shell.brandHome"),children:[(0,d.jsx)("img",{src:"/assets/brand/panoma.svg",alt:"",width:38,height:38}),(0,d.jsx)("span",{children:"Panoma"})]})]}),(0,d.jsxs)("form",{className:"global-search",role:"search",onSubmit:function(a){a.preventDefault();let b=new URLSearchParams;n.trim()&&b.set("q",n.trim()),e.push(b.size>0?`/?${b.toString()}`:"/")},children:[(0,d.jsx)(i.JJh,{"aria-hidden":!0}),(0,d.jsx)("input",{value:n,onChange:a=>o(a.target.value),placeholder:l("shell.searchPlaceholder"),"aria-label":l("shell.searchPlaceholder")}),(0,d.jsx)("button",{type:"button",onClick:()=>window.dispatchEvent(new CustomEvent("panoma:palette")),"aria-label":l("shell.openPalette"),children:(0,d.jsx)("kbd",{children:"⌘ K"})})]}),(0,d.jsx)(x,{ephemeral:b})]}),(0,d.jsxs)("aside",{id:"app-sidebar",className:"app-sidebar","aria-label":l("shell.sections"),children:[(0,d.jsxs)("div",{className:"sidebar-scroll",children:[(0,d.jsx)("nav",{children:u.map(b=>{let e=b.icon,g=b.exact?c===b.href:c.startsWith(b.href),h=b.badge?a?.[b.badge]:void 0;return(0,d.jsxs)(f(),{href:b.href,className:g?"is-active":void 0,title:q?void 0:l(b.label),children:[(0,d.jsx)(e,{"aria-hidden":!0}),(0,d.jsx)("span",{className:"nav-label",children:l(b.label)}),"number"==typeof h&&h>0&&(0,d.jsx)("span",{className:"nav-badge","aria-label":l("shell.pending",{n:h}),children:h}),(0,d.jsx)(z,{})]},b.label)})}),a&&(0,d.jsxs)("div",{className:"catalog-summary","aria-label":l("shell.summary"),children:[(0,d.jsxs)("div",{className:"catalog-summary__title",children:[(0,d.jsx)(i.ENP,{"aria-hidden":!0}),(0,d.jsxs)("p",{children:[(0,d.jsx)("strong",{children:l("shell.summaryProjects",{n:a.projects})}),(0,d.jsx)("span",{children:l("shell.summaryScope")})]}),(0,d.jsx)("strong",{className:"catalog-summary__count",title:`${l("shell.summaryProjects",{n:a.projects})} \xb7 ${l("shell.summaryScope")}`,"aria-hidden":!0,children:a.projects})]}),(0,d.jsxs)("dl",{children:[(0,d.jsx)(y,{label:l("shell.live"),value:a.live,tone:"live"}),(0,d.jsx)(y,{label:l("shell.paused"),value:a.paused,tone:"paused"}),(0,d.jsx)(y,{label:l("shell.dormant"),value:a.dormant,tone:"dormant"}),(0,d.jsx)(y,{label:l("shell.noGit"),value:a.noGit,tone:"muted"})]}),(0,d.jsx)("dl",{className:"catalog-summary__aside",children:(0,d.jsx)(y,{label:l("shell.copies"),value:a.copies,tone:"muted"})})]})]}),(0,d.jsxs)("div",{className:"sidebar-foot",children:[(0,d.jsxs)("p",{className:"sidebar-update",children:[(0,d.jsx)("span",{children:l("shell.footerLocal")}),(0,d.jsx)("span",{children:l("shell.footerPrivate")}),(0,d.jsx)("a",{href:v,target:"_blank",rel:"noreferrer",children:l("shell.footerSource")})]}),(0,d.jsxs)("div",{className:"lang-toggle",role:"group","aria-label":l("shell.language"),children:[(0,d.jsx)("button",{type:"button",onClick:()=>t("es"),className:"es"===m?"is-active":void 0,"aria-pressed":"es"===m,title:"Espa\xf1ol",children:"ES"}),(0,d.jsx)("button",{type:"button",onClick:()=>t("en"),className:"en"===m?"is-active":void 0,"aria-pressed":"en"===m,title:"English",children:"EN"})]})]})]})]})}function x({ephemeral:a}){let b=(0,k.k)(),[c,e]=(0,h.useState)(!1),f=(0,h.useRef)(null),g=(0,h.useRef)(null);return(0,t.y)(f,c,a=>{e(!1),"escape"===a&&g.current?.focus()}),(0,d.jsxs)("div",{className:"account-holder",ref:f,children:[(0,d.jsx)("button",{ref:g,type:"button",className:"account-button","aria-expanded":c,"aria-label":b("shell.localAccount"),title:b("shell.localAccount"),onClick:()=>e(a=>!a),children:(0,d.jsx)(i.vsK,{"aria-hidden":!0})}),c&&(0,d.jsxs)("div",{className:"account-card",role:"dialog","aria-label":b("shell.localAccount"),children:[(0,d.jsx)("strong",{children:b("shell.footerLocal")}),(0,d.jsx)("p",{children:b("shell.accountNone")}),a&&(0,d.jsxs)("p",{className:"account-ephemeral",children:[(0,d.jsx)("strong",{children:b("shell.ephemeral")}),(0,d.jsx)("br",{}),b("shell.ephemeralDetail")]}),(0,d.jsx)("a",{href:v,target:"_blank",rel:"noreferrer",children:b("shell.footerSource")})]})]})}function y({label:a,value:b,tone:c}){return(0,d.jsx)("div",{children:(0,d.jsxs)("dt",{title:a,children:[(0,d.jsx)("span",{className:`summary-dot summary-dot--${c}`,"aria-hidden":!0}),(0,d.jsxs)("span",{className:"summary-figure",children:[b," ",(0,d.jsx)("span",{className:"summary-label",children:a})]})]})})}function z(){let{pending:a}=(0,e.useLinkStatus)();return a?(0,d.jsx)("span",{className:"nav-pending","aria-hidden":!0}):null}},31928:(a,b,c)=>{Promise.resolve().then(c.bind(c,10372))},38683:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(14313);let e=async a=>[{type:"image/png",sizes:"64x64",url:(0,d.fillMetadataSegment)(".",await a.params,"icon.png")+"?f1a203a899ce38a5"}]},41762:(a,b,c)=>{"use strict";c.d(b,{y:()=>e});var d=c(97019);function e(a,b,c){(0,d.useRef)(c)}},51310:(a,b,c)=>{Promise.resolve().then(c.bind(c,28103)),Promise.resolve().then(c.bind(c,15966)),Promise.resolve().then(c.bind(c,26252))},51775:(a,b,c)=>{"use strict";function d(a){return(a??"").toLowerCase().normalize("NFD").replace(/\p{Diacritic}/gu,"")}c.d(b,{A:()=>d})},54432:()=>{},63679:(a,b,c)=>{"use strict";c.d(b,{CL:()=>d,P3:()=>h,t:()=>g});let d="panoma-lang",e={es:{"meta.description":"Tu cat\xe1logo personal de software. Abre, revisa y mant\xe9n al d\xeda cada proyecto.","watch.off":"El vig\xeda no est\xe1 en marcha: los proyectos nuevos y los commits de hoy pueden no aparecer hasta que vuelvas a escanear.","catalog.down.title":"El cat\xe1logo no abre","catalog.down.body":"La web sigue en pie, pero sin datos. Aparta {path} con otro nombre y vuelve a arrancar: se crea uno nuevo y se rellena con \xabpanoma scan\xbb. No borres nada: si alg\xfan d\xeda se puede rescatar, ser\xe1 de ah\xed.","catalog.down.detail":"Lo que dijo la base: {detail}","error.title":"Algo se rompi\xf3 al pintar esta p\xe1gina","error.body":"No es el cat\xe1logo: eso se avisa aparte. Vuelve a intentarlo, y si insiste, el motivo est\xe1 en el registro del servidor.","error.retry":"Reintentar","shell.brandHome":"Panoma \xb7 Inicio","shell.searchPlaceholder":"Buscar proyectos, tecnolog\xedas o agentes","shell.openPalette":"Abrir la paleta de comandos","shell.topNav":"Navegaci\xf3n principal","shell.sections":"Secciones de Panoma","shell.skipToContent":"Saltar al contenido","shell.localAccount":"Cuenta local","shell.accountNone":"No hay cuenta ni nube que administrar: panoma corre en este ordenador y el cat\xe1logo se queda aqu\xed.","shell.ephemeral":"Esta copia es temporal","shell.ephemeralDetail":"La arrancaste con npx, que la guarda para un comando y la suelta. El cat\xe1logo se queda; el comando no. Para tenerlo: npm i -g panoma","shell.pending":"{n} pendiente{s}","shell.summary":"Resumen del cat\xe1logo","shell.summaryProjects":"{n} proyecto{s}","shell.summaryScope":"en tu cat\xe1logo","shell.live":"activos","shell.paused":"en pausa","shell.dormant":"dormidos","shell.noGit":"sin git","shell.copies":"copias","shell.footerLocal":"Cat\xe1logo local","shell.footerPrivate":"Privado por dise\xf1o","shell.footerSource":"AGPL-3.0 \xb7 c\xf3digo fuente","shell.language":"Idioma","shell.hideSidebar":"Plegar men\xfa","shell.showSidebar":"Desplegar men\xfa","nav.projects":"Proyectos","nav.unsaved":"Sin guardar","nav.searchCode":"C\xf3digo","nav.credentials":"Claves","nav.agents":"MCP","nav.ai":"IA","nav.packages":"Paquetes","nav.activity":"Ejecuciones","nav.copies":"Copias","nav.bridge":"Puente","dest.bridge":"Puente de mando","bridge.title":"Encender panoma, paso a paso","bridge.titleReady":"Todo encendido","bridge.lead":"Cada pieza de panoma, con su estado y un solo siguiente paso se\xf1alado. Nada de adivinar comandos: lo que toca ahora est\xe1 marcado con una flecha, y lo dem\xe1s espera su turno.","bridge.leadReady":"El cat\xe1logo, el modelo, los agentes y los ganchos est\xe1n en marcha. Desde aqu\xed solo queda ver la memoria respirar — y decidir en las fichas lo que los agentes propongan.","bridge.step.catalog.title":"El cat\xe1logo","bridge.step.catalog.detail":"proyectos: {count}","bridge.step.catalog.pending":"Escanea una carpeta con tus proyectos. Un solo comando los analiza y arranca esta web.","bridge.step.model.title":"Un modelo de IA","bridge.step.model.detail":"conectados: {count}","bridge.step.model.pending":"El cr\xedtico, el destilador y el doble necesitan un modelo. Conecta un proveedor o exporta una clave.","bridge.step.model.go":"Ir a la pantalla de IA","bridge.step.agent.title":"Un agente conectado","bridge.step.agent.detail":"activos: {count}","bridge.step.agent.pending":"Conecta tu agente (Claude Code, Cursor…) para que reciba el parte, la memoria y las nueve herramientas.","bridge.step.agent.keyUnused":"La clave existe pero ning\xfan agente la ha usado todav\xeda: instala la configuraci\xf3n y reinicia la sesi\xf3n del agente.","bridge.step.agent.go":"Ir a la pantalla de Agentes","bridge.step.hooks.title":"Los ganchos","bridge.step.hooks.detail":"proyectos con ganchos: {count} de {total}","bridge.step.hooks.pending":"Dentro de cada proyecto donde trabajes: apuntan la actividad sin que el modelo se acuerde, y entregan las notas dormidas en su ruta.","bridge.step.alive.title":"La memoria, viva","bridge.step.alive.detail":"entradas de bit\xe1cora: {count}","bridge.step.alive.pending":"Se enciende sola cuando lo anterior est\xe9 en marcha: los agentes empiezan a apuntar, el destilador a proponer, y t\xfa a decidir.","bridge.restartHint":"Despu\xe9s de instalar, reinicia la sesi\xf3n del agente: una sesi\xf3n ya abierta no recoge nada.","bridge.todayTitle":"Los n\xfameros de hoy","bridge.stat.journal":"Bit\xe1cora","bridge.stat.approved":"Notas servidas","bridge.stat.sleeping":"Notas dormidas","bridge.stat.pending":"Propuestas esperando","bridge.stat.consultations":"Preguntas al doble","bridge.stat.watcher":"Vig\xeda","bridge.stat.ablation":"B\xe1scula (ablaci\xf3n)","bridge.on":"encendido","bridge.off":"apagado","bridge.copy":"copiar","bridge.copied":"copiado","bridge.step.hooks.install":"Ponerlos en todos los proyectos","bridge.step.hooks.installing":"Poniendo los ganchos…","bridge.hooksDone":"Hecho — con ganchos: {installed} \xb7 sin repositorio: {noRepo} \xb7 ajenos respetados: {foreign} \xb7 fallos: {failed}","bridge.hooksAlt":"O desde el terminal, proyecto a proyecto:","bridge.hooksNoCli":"El servidor no encuentra el comando panoma: ponlos desde el terminal con el comando de al lado.","projectHooks.on":"Ganchos puestos: la bit\xe1cora de este proyecto se escribe sola.","projectHooks.off":"Sin ganchos: el cat\xe1logo solo sabr\xe1 lo que el agente se acuerde de contarle.","projectHooks.install":"Ponerlos","bridge.scaleHint":"La medida fina —si la memoria reduce correcciones de verdad— vive en GET /api/scale.","nav.disk":"Disco","nav.twin":"Twin","nav.hidden":"Apartados","dest.agents":"MCP: conectar tus agentes","dest.unsaved":"Trabajo sin guardar","dest.disk":"Espacio en disco","dest.twin":"Tu doble: el retrato de tu gusto","dest.searchCode":"Buscar en el c\xf3digo","dest.credentials":"Credenciales en el historial","dest.hidden":"Ocultos y excluidos","dest.ai":"Con qu\xe9 piensa Panoma","palette.aria":"Paleta de comandos","palette.placeholder":"Busca un proyecto o escribe una acci\xf3n…","palette.searchAria":"Buscar en el cat\xe1logo","palette.loading":"cargando el cat\xe1logo…","palette.noMatch":"Nada coincide con \xab{query}\xbb.","palette.results":"{n} resultado{s}","palette.groupProjects":"Proyectos","palette.groupActions":"Acciones","palette.groupGoTo":"Ir a","palette.openFolderOf":"Abrir la carpeta de {name}","palette.searchEverywhere":"Buscar \xab{query}\xbb en el c\xf3digo de todos los proyectos","palette.opening":"abriendo {name}…","palette.openFailed":"No se pudo abrir.","palette.unreachable":"No se pudo contactar con el servidor.","palette.enterEditor":"↵ abrir en el editor","palette.enterCard":"↵ ver la ficha","palette.openTerminalOf":"Abrir un terminal en {name}","palette.openCardOf":"Ver la ficha de {name}","palette.keysMove":"↑↓ moverse","palette.keysOpen":"↵ elegir","palette.keysClose":"esc cerrar","home.emptyKicker":"Cat\xe1logo vac\xedo","home.emptyTitle":"A\xfan no has escaneado nada","home.emptyBody":"Analiza una carpeta con tus proyectos para llenar el cat\xe1logo. El escaneo es local y solo guarda metadatos: tu c\xf3digo nunca sale del disco.","activityKind.change":"cambio","activityKind.decision":"decisi\xf3n","activityKind.note":"nota","activityKind.blocker":"bloqueo","taskState.open":"abierta","taskState.in-progress":"en curso","taskState.done":"hecha","taskState.discarded":"descartada","severity.critical":"cr\xedtica","severity.high":"alta","severity.medium":"media","severity.low":"baja","severity.unknown":"desconocida","run.pending":"pendiente","run.running":"ejecutando","run.proposed":"propuesto","run.failed":"fallido","run.no-changes":"sin cambios","run.applied":"aplicado","run.discarded":"descartado","risk.unversioned":"sin control de versiones","risk.no-commits":"repositorio sin ning\xfan commit","risk.no-commits.n":"{n} fichero{s} y ning\xfan commit","risk.no-remote":"sin remoto \xb7 {n} commit solo en este disco","risk.no-remote.n":"sin remoto \xb7 {n} commit{s} solo en este disco","risk.unpushed":"{n} commit sin subir","risk.unpushed.n":"{n} commit{s} sin subir","risk.uncommitted":"{n} fichero sin commitear","risk.uncommitted.n":"{n} fichero{s} sin commitear","risk.untracked":"{n} sin a\xf1adir a git","risk.stashes":"{n} stash guardado","risk.stashes.n":"{n} stash{es} guardado{s}","risk.behind":"{n} commit por traer","risk.behind.n":"{n} commit{s} por traer","store.kicker":"Explorar","store.title":"Descubre lo que has construido","store.subtitle":"Tu cat\xe1logo personal de software. Abre, revisa y mant\xe9n al d\xeda cada proyecto.","store.spotlight":"Resumen destacado","store.review":"Revisar","filter.all":"Todos","filter.attention":"Atenci\xf3n","filter.favorites":"Favoritos","filter.notMine":"No es m\xedo","filter.web":"Web","filter.mobile":"M\xf3vil","filter.backend":"Backend","filter.tools":"Herramientas","filter.ai":"IA","filter.other":"Otros","store.filterAria":"Filtrar proyectos","store.hideNames":"Ocultar nombres e iconos","store.showNames":"Volver a ense\xf1ar nombres e iconos","store.hidden":"Proyecto {n}","share.abrir":"Compartir mi panorama","share.cerrar":"Cerrar","share.preview":"Vista previa de la tarjeta","share.titulo":"{n} proyecto{s} creados.","share.proyectos":"proyectos en total","share.tecnologias":"tecnolog\xedas","share.commits":"commits","share.agentes":"del historial con agentes","share.activos":"en marcha","share.salud":"Salud de cada proyecto","share.saludBien":"Bien","share.saludRevisar":"Revisar","share.saludAtencion":"Atenci\xf3n","share.more":"+{n} m\xe1s","share.local":"Local-first \xb7 Tus datos, en tu disco.","share.idioma":"Idioma de la imagen","share.usuario":"tu cuenta","share.usuarioVacio":"sin poner","share.conIconos":"Incluir iconos y nombres de mis proyectos","share.descargar":"descargar la imagen","share.copiarTexto":"copiar el texto","share.textoCopiado":"copiado","share.image.idle":"compartir imagen","share.image.preparing":"preparando imagen…","share.image.copied":"imagen copiada","share.image.downloaded":"imagen descargada","share.image.failed":"no se pudo compartir","share.x.idle":"abrir directamente en X","share.x.preparing":"abriendo X…","share.x.copied":"X abierto \xb7 pega la imagen","share.x.downloaded":"X abierto \xb7 sube la imagen","share.x.failed":"no se pudo abrir X","share.nota":"Compartir imagen abre el men\xfa del sistema. X abre el compositor directamente y deja el PNG copiado para que lo pegues; Panoma no sube la imagen.","share.texto":"{n} proyecto{s} creados — mi centro de control local con {domain}.","store.sortLabel":"Ordenar proyectos","store.sortRecent":"M\xe1s recientes","store.sortName":"Nombre","store.sortHealth":"Mejor salud","store.viewAria":"Vista del cat\xe1logo","store.viewGrid":"Vista de cuadr\xedcula","store.viewList":"Vista de lista","store.browseTitle":"Explorar proyectos","store.total":"{n} proyecto{s} en total","store.noResults":"No encontramos proyectos","store.noResultsBody":"Prueba con otra b\xfasqueda o cambia el filtro seleccionado.","store.clearFilters":"Limpiar filtros","store.justHidden":"\xab{name}\xbb ya no est\xe1 en el cat\xe1logo.","store.undoHide":"deshacer","store.seeHidden":"ver ocultos","store.showing":"Mostrando {shown} de {total} proyecto{totals}","store.lastCommit":"\xdaltimo commit {when}","store.workedOn":"Has trabajado en este proyecto {when}.","store.openProject":"Abrir proyecto","store.proposalsWaitingOne":"1 propuesta sin decidir","store.proposalsWaitingMany":"{n} propuestas sin decidir","store.proposalsBody":"El cambio ya est\xe1 hecho y probado. Nadie lo aplica hasta que lo digas t\xfa.","store.resume":"Retomar donde lo dejaste","store.editorShort":"editor","store.openingEditor":"abriendo…","store.openedEditor":"✓ abierto","store.openNamedInEditor":"abrir {name} en el editor","store.unreachable":"No se pudo contactar con el servidor.","store.attention":"Atenci\xf3n","store.attentionBody":"Proyectos que necesitan tu revisi\xf3n.","store.viewAll":"Ver todo","store.allClear":"Todo est\xe1 al d\xeda.","store.viewAllIssues":"Ver los {n} proyecto{s} con problemas","store.depsBehind":"{n} dep. atrasada{s}","store.depsBehindRatio":"{n}/{total} dep. atrasada{s}","store.depsUnchecked":"dependencias sin comprobar","summary.kind.mobileApp":"App m\xf3vil","summary.kind.webApp":"Aplicaci\xf3n web","summary.kind.cli":"Herramienta de l\xednea de comandos","summary.kind.package":"Paquete publicable","summary.kind.backend":"Servicio de backend","summary.kind.container":"Servicio en contenedor","summary.kind.project":"Proyecto","summary.builtWith":"{kind} en {stack}","summary.uses":"usa {list}","summary.publishedOn":"se publica en {list}","summary.writtenBy":"{share}% del historial lo escribi\xf3 {agent}","summary.and":"y","store.noticeOne":"1 aviso","store.noticesMany":"{n} aviso{s}","store.commitCount":"{n} commit{s}","store.noAlerts":"Sin alertas","store.open":"Abrir","store.openNamed":"Abrir {name}","store.favoriteAdd":"A\xf1adir {name} a favoritos","store.favoriteRemove":"Quitar {name} de favoritos","store.hideNamed":"Ocultar {name}","store.noStack":"Pila no detectada","store.builtWith":"Proyecto local construido con {tech}.","store.detected":"Proyecto local detectado en tu cat\xe1logo.","catalog.title":"Cat\xe1logo de proyectos","catalog.count":"{n} proyecto{s}","catalog.countOne":"1 proyecto","catalog.filterPlaceholder":"Filtrar el cat\xe1logo","catalog.category":"Categor\xeda","catalog.colProject":"Proyecto","catalog.colHealth":"Salud","catalog.colStack":"Stack","catalog.colActivity":"\xdaltima actividad","catalog.rowsAria":"Proyectos del cat\xe1logo","catalog.hint":"Un clic ense\xf1a los detalles. Dos abren la ficha.","catalog.openHandle":"Abrir la ficha de {name} — o haz doble clic","catalog.opening":"Abriendo la ficha…","catalog.healthOf":"Salud {n} sobre 100","catalog.noHealth":"Sin medir","catalog.detailsOf":"Detalles de {name}","catalog.close":"Cerrar los detalles","catalog.repository":"Repositorio","catalog.remote":"Con copia remota","catalog.localOnly":"Solo en este disco","catalog.noGit":"Sin git","catalog.size":"Tama\xf1o","catalog.commits":"Commits","catalog.origin":"Origen","catalog.openIn":"Abrir en","catalog.editor":"Editor","catalog.editorSub":"Editar el c\xf3digo","catalog.terminal":"Terminal","catalog.terminalSub":"Una terminal en esta carpeta","catalog.folder":"Carpeta","catalog.folderSub":"Ver los archivos","catalog.fullDetail":"Ver la ficha completa","catalog.emptyTitle":"Ning\xfan proyecto seleccionado","catalog.emptyBody":"Elige uno de la lista y sus detalles salen aqu\xed.","catalog.needsReview":"Necesita revisi\xf3n","catalog.agentSub":"Agente, en un terminal","catalog.appSub":"App de escritorio","catalog.agentBroken":"Instalado, pero no arranca","catalog.reviewUnsaved":"Ver qu\xe9 hay sin guardar","catalog.reviewSecurity":"Ver los avisos de seguridad","catalog.reviewDeps":"Ver las dependencias atrasadas","state.active":"Activo","state.paused":"En pausa","state.dormant":"Dormido","state.no-git":"Sin git","origin.foreign":"no es tuyo","origin.forked":"parti\xf3 de otro","origin.template":"plantilla","origin.templateTitle":"Lo gener\xf3 una herramienta y no se ha tocado desde entonces.","origin.startedBy":"Empezado por {name}. Abre la ficha para ver en qu\xe9 se basa.","origin.openDetail":"Abre la ficha para ver en qu\xe9 se basa.","today.title":"Desde la \xfaltima vez","today.since":"desde {when}","today.last24h":"en las \xfaltimas 24 horas","today.nothing":"Sin novedades {period}. Todo tuyo.","today.commitOne":"{n} commit","today.commitMany":"{n} commit{s}","today.fromAgents":"({n} de agentes)","today.inProject":"en {project}","today.agentNoted":"{name} anot\xf3 {n}","today.born":"Nuevos en el cat\xe1logo:","today.resume":"Retomar","today.opening":"Abriendo…","today.openFailed":"No se pudo","today.openNamed":"Abrir {name} en el editor","today.waitingOne":"1 espera tu decisi\xf3n","today.waitingMany":"{n} esperan tu decisi\xf3n","today.inProjectsOne":"{c} en 1 proyecto","today.inProjectsMany":"{c} en {n} proyecto{s}","today.bornOne":"1 proyecto nuevo","today.bornMany":"{n} proyecto{s} nuevos","today.expand":"Ver el parte del d\xeda","today.collapse":"Plegar el parte del d\xeda","today.quiet":"Sin novedades","today.attempts":"{n} intento{s}","proposals.waiting":"Esperan tu decisi\xf3n","proposals.readyOne":"Hay una propuesta preparada y sin decidir","proposals.readyMany":"Hay {n} propuestas preparadas y sin decidir","proposals.branchNote":"El cambio ya est\xe1 hecho y probado en una rama aparte. Nadie lo aplica a tu carpeta hasta que lo digas t\xfa.","proposals.fallbackName":"propuesta","proposals.andMore":"y {n} m\xe1s","proposals.testsGreen":"tests en verde","proposals.unverified":"sin verificar","changes.question":"Qu\xe9 ha pasado aqu\xed","changes.latest":"Lo \xfaltimo, {when}","changes.nothingYet":"Todav\xeda no ha pasado nada","changes.totalCommits":"{n} commit{s} en total","changes.window24h":"En las \xfaltimas 24 horas","changes.window48h":"El d\xeda anterior","changes.windowBefore":"Antes de eso","changes.signedBy":"Firmado por {agent} con un trailer Co-Authored-By","changes.unsignedNote":"Los commits sin etiqueta no llevan firma de nadie. Eso no quiere decir que los escribieras t\xfa.","changes.moreOne":"Hay 1 m\xe1s entre los \xfaltimos veinte que guarda el cat\xe1logo.","changes.moreMany":"Hay {n} m\xe1s entre los \xfaltimos veinte que guarda el cat\xe1logo.","changes.empty":"A\xfan no hay commits recientes que mostrar.","changes.agentLog":"Ver actividad de agentes","task.title":"D\xe9jalo anotado","task.openOne":"{n} abierta","task.openMany":"{n} abiertas","task.placeholder":"ma\xf1ana arregla el login","task.fieldLabel":"Qu\xe9 hay que hacer en este proyecto","task.save":"anotar","task.saving":"anotando…","task.mcpNote":"Panoma no administra tareas: las guarda. Tu agente las lee por MCP cuando entra al proyecto, las coge y las cierra \xe9l.","task.saveFailed":"No se pudo anotar.","task.byHuman":"t\xfa","task.unreachable":"No se pudo contactar con el cat\xe1logo.","assignment.question":"\xbfQu\xe9 hacemos con esto?","assignment.title":"Enc\xe1rgaselo a tu agente","assignment.note":"Panoma redacta el encargo con lo que sabe del proyecto. \xc1brelo en tu terminal y tu agente empieza ahora, en este ordenador; d\xe9jalo en la cola y no pasa nada hasta que entre en el proyecto; o c\xf3piatelo y ll\xe9vatelo donde quieras.","assignment.see":"ver el encargo","assignment.copy":"copiar","assignment.copied":"copiado","assignment.copyFailed":"No se pudo copiar. Abre \xabver el encargo\xbb y selecci\xf3nalo a mano.","assignment.send":"dejarlo en la cola","assignment.sending":"a la cola…","assignment.sendTitle":"Se queda esperando a que tu agente entre en este proyecto. Ahora mismo no se ejecuta nada","assignment.launch":"abrir en tu terminal","assignment.launching":"abriendo…","assignment.launchTitle":"Abre un terminal en este ordenador con {agent} dentro del proyecto y el encargo puesto: empieza a trabajar en cuanto se abra","assignment.launched":"{agent} est\xe1 trabajando en tu terminal.","assignment.launchFailed":"No se pudo abrir el terminal.","assignment.queued":"en la cola","assignment.queuedNote":"En la cola. Tu agente lo recoge al entrar en el proyecto.","assignment.withdraw":"retirarlo","assignment.withdrawing":"retirando…","assignment.withdrawn":"Retirado. Tu agente ya no lo va a ver.","assignment.withdrawFailed":"No se pudo retirar.","assignment.failed":"No se pudo dejar en la cola.","assignment.resume":"Dime qu\xe9 me falta para retomarlo","assignment.resume.promise":"Que intente arrancarlo, apunte cada tropiezo y diga en qu\xe9 se qued\xf3 el trabajo.","assignment.competitors":"Busca a sus competidores","assignment.competitors.promise":"Qui\xe9n resuelve lo mismo hoy —vivo o muerto—, y qu\xe9 hueco queda de verdad.","assignment.plan":"Hazme un plan de mejora","assignment.plan.promise":"Qu\xe9 tocar primero y por qu\xe9, cruzando el c\xf3digo con lo que panoma ya mide.","assignment.presentable":"Ponlo en forma para ense\xf1arlo","assignment.presentable.promise":"Un README honesto, para que alguien de fuera lo entienda en dos minutos.","assignment.review":"Arregla lo que se ve sin abrir nada","assignment.review.promise":"Colores y esquinas sueltos, im\xe1genes que no dicen qu\xe9 muestran, enlaces rotos: lo que panoma vio leyendo la carpeta.","assignment.securityTitle":"Cierra la vulnerabilidad m\xe1s grave","assignment.securityPromise":"Panoma prepara el arreglo en una copia aparte del proyecto y te deja la propuesta esperando.","assignment.depsTitle":"Pon al d\xeda sus dependencias","assignment.depsPromiseOne":"{n} directa atrasada — elige cu\xe1l y panoma te trae la propuesta.","assignment.depsPromiseMany":"{n} directa{s} atrasadas — elige cu\xe1l y panoma te trae la propuesta.","assignment.depsChoose":"elegir cu\xe1l","sites.summaryOne":"{n} proyecto, mirando en {where}{extra}","sites.summaryMany":"{n} proyecto{s}, mirando en {where}{extra}","sites.andMore":"y {n} m\xe1s","sites.manage":"cambiar","sites.close":"cerrar","sites.countOne":"{n} proyecto","sites.countMany":"{n} proyecto{s}","sites.missing":"la carpeta ya no est\xe1","sites.remove":"quitar","sites.removeConfirm":"s\xed, quitar y retirar sus proyectos: {n}","sites.removed":"Deja de mirarse, y se retiran sus proyectos: {n}. Si la vuelves a a\xf1adir, vuelven.","sites.add":"a\xf1adir","sites.adding":"buscando…","sites.addedOne":"A\xf1adida. Encontr\xe9 1 proyecto.","sites.addedMany":"A\xf1adida. Encontr\xe9 {n} proyecto{s}.","sites.placeholder":"~/Documents","sites.fieldLabel":"Carpeta donde tambi\xe9n quieres que mire","sites.note":"Panoma solo encuentra proyectos dentro de estas carpetas. Uno que viva fuera no aparecer\xe1 nunca, ni escaneando ni esperando.","sites.search":"buscar por mi disco","sites.searching":"buscando…","sites.searchHint":"Recorre tu carpeta personal y propone d\xf3nde tienes m\xe1s proyectos.","sites.searchNone":"No encontr\xe9 proyectos fuera de lo que ya se mira.","sites.failed":"No se pudo.","ai.title":"Con qu\xe9 piensa Panoma","ai.intro":"Panoma no llama a ning\xfan modelo por su cuenta: solo cuando t\xfa se lo pides — al describir un proyecto, al redactar un encargo. Aqu\xed eliges con cu\xe1l.","ai.loading":"leyendo la configuraci\xf3n…","ai.loadingSlow":"sigue leyendo… la primera vez tarda m\xe1s.","ai.loadFailed":"No se pudo leer la configuraci\xf3n de IA ({status}).","ai.loadTimeout":"La configuraci\xf3n tard\xf3 demasiado en llegar.","ai.retry":"reintentar","ai.retrying":"reintentando…","ai.brokenTitle":"La configuraci\xf3n no se puede leer","ai.fileNote":"La configuraci\xf3n vive en {path}, con permisos 0600. Eso impide que otro usuario de esta m\xe1quina la lea, pero no est\xe1 cifrada: cualquier proceso que corra con tu usuario puede abrirla. Si prefieres no guardar nada en disco, exporta la clave como variable de entorno o usa un agente que ya tengas instalado.","ai.remote":"El cat\xe1logo es remoto: el modelo se configura en la m\xe1quina que lo sirve.","ai.activeTitle":"Proveedor activo","ai.none":"Ninguno todav\xeda. Elige uno de los de abajo.","ai.defaultModel":"modelo por defecto","ai.modelLabel":"modelo","ai.modelPlaceholder":"el de por defecto del proveedor","ai.modelSaved":"Ahora usa {model}.","ai.modelCleared":"Vuelve al modelo por defecto del proveedor.","ai.modelsFetch":"traer los suyos","ai.modelsLoading":"preguntando…","ai.modelsOpen":"ver los modelos","ai.modelsLive":"Dichos por el proveedor ahora mismo: {n}.","ai.modelsHint":"Sugerencias nuestras, que pueden estar viejas: {n}. Pulsa \xabtraer los suyos\xbb para la lista de verdad — o escribe el nombre que quieras.","ai.modelsEmpty":"No traemos sugerencias para este proveedor. Pulsa \xabtraer los suyos\xbb para ped\xedrselas — o escribe el nombre a mano.","ai.modelsNoMatch":"Ninguno se llama as\xed. Se guarda tal cual lo escribas.","ai.modelsNone":"Este proveedor no publica su cat\xe1logo. Escribe el nombre del modelo a mano.","ai.redirected":"Una variable de entorno redirigi\xf3 este proveedor a otra direcci\xf3n. Tu clave se manda ah\xed.","ai.sourceEnv":"del entorno","ai.sourceFile":"del fichero","ai.sourceAgent":"sesi\xf3n de tu agente","ai.sourceKey":"{source} \xb7 {key}","ai.sourceLogin":"sesi\xf3n iniciada","ai.connected":"sesi\xf3n iniciada","ai.notConnected":"sin sesi\xf3n","ai.login":"entrar","ai.loginAgain":"volver a entrar","ai.loggingIn":"esperando…","ai.loginWaiting":"Se abri\xf3 una pesta\xf1a para entrar en {name}. Aqu\xed te espero.","ai.loginDone":"Sesi\xf3n iniciada en {name}.","ai.loginFailed":"No se pudo iniciar sesi\xf3n.","ai.loginTimeout":"Se acab\xf3 el plazo esperando la vuelta del navegador.","ai.logout":"cerrar sesi\xf3n","ai.test":"probar","ai.testing":"probando…","ai.testOk":"Contest\xf3 {model} en {s}s.","ai.testHint":"Guarda una clave arriba, o elige un agente que ya tengas instalado.","ai.failed":"No se pudo.","ai.nowUsing":"Ahora usa {name}.","ai.forgotten":"Clave olvidada.","ai.forgottenButEnv":"Clave olvidada del fichero, pero {var} sigue puesta en el entorno.","ai.subscriptionTitle":"Usa una suscripci\xf3n que ya tienes","ai.subscriptionNote":"Si ya pagas Claude Pro o ChatGPT y tienes su herramienta con sesi\xf3n iniciada, Panoma le pasa el trabajo a ella. No guarda ning\xfan token ni ve tus credenciales: la suscripci\xf3n la usa tu propia herramienta, en tu m\xe1quina.","ai.installed":"instalado","ai.notInstalled":"no encontr\xe9 \xab{command}\xbb","ai.keysTitle":"Conecta con una clave","ai.fromEnv":"{var} en el entorno","ai.stored":"guardada {key}","ai.noKey":"sin clave","ai.keyPlaceholder":"pega la clave","ai.keyLabel":"Clave de {name}","ai.save":"guardar","ai.saving":"guardando…","ai.forget":"olvidar","ai.getKey":"sacar una","ai.inUse":"en uso","ai.choose":"usar este","ai.choosing":"cambiando…","ai.cantUse":"Necesita una clave guardada o el agente instalado.","search.fieldLabel":"Texto a buscar en el c\xf3digo","search.submit":"buscar","search.searching":"buscando…","search.scopeNote":"Texto literal, sin distinguir may\xfasculas. Solo se miran ficheros seguidos por git, as\xed que un fichero sin commitear no aparece.","search.scopeVendors":"Tampoco se busca en dependencias de terceros aunque est\xe9n en el historial —es c\xf3digo que no escribiste—:","search.matchOne":"1 coincidencia","search.matchMany":"{n} coincidencias","search.inProjectOne":"en 1 proyecto","search.inProjectMany":"en {n} proyecto{s}","search.reposSearched":"{n} repositorio{s} buscado{s}","search.skipped":"{n} sin git, no se pudieron buscar","search.skippedTitle":"Carpetas sin git: no hay nada que preguntar.","search.clickToOpen":"pulsa una coincidencia para abrirla en el editor","search.noMatch":"Ning\xfan fichero seguido por git contiene \xab{query}\xbb.","search.openAt":"Abrir {file} en la l\xednea {line}","search.truncated":"Solo se ense\xf1an las primeras {n}. Abre la carpeta para verlas todas.","search.openFolder":"Abrir la carpeta","search.openFolderAria":"Abrir la carpeta del proyecto","search.failed":"No se pudo buscar.","search.openFailed":"No se pudo abrir.","search.unreachable":"No se pudo contactar con el servidor.","open.folder":"abrir carpeta","open.editor":"abrir en el editor","open.terminal":"abrir terminal aqu\xed","open.busy":"abriendo…","open.doneFolder":"✓ abierta","open.done":"✓ abierto","open.unreachable":"No se pudo contactar con el servidor.","open.openWith":"Abrir en {name}","open.moreDestinations":"M\xe1s sitios donde abrirlo","open.defaultDestination":"Predeterminado","copy.command":"Copiar \xab{command}\xbb","copy.done":"copiado","project.health":"Salud {n}","project.healthTitle":"Salud {n} de 100","project.heroStatus":"Estado","project.heroActivity":"Actividad","project.heroCommits":"Commits","project.heroHealth":"Salud","project.commitOne":"{n} commit","project.commitMany":"{n} commit{s}","project.sections":"Secciones del proyecto","project.navAll":"Todo","project.navSummary":"Resumen","project.navChanges":"Qu\xe9 pas\xf3","project.navResume":"Retomar","project.navAssignments":"Encargos","project.navDeps":"Mantenimiento","project.navAgents":"Agentes","project.navMd":"El .md","project.mdQuestion":"\xbfLo que leen tus agentes es verdad?","project.mdTitle":"El fichero de instrucciones","project.mdCost":"{n} tokens de contexto en cada sesi\xf3n","project.mdNone":"Aqu\xed no hay AGENTS.md ni CLAUDE.md, que son los dos que los agentes leen solos al entrar: entran a este proyecto sin saber nada de \xe9l.","project.mdOnlyInherited":"Este proyecto no tiene AGENTS.md ni CLAUDE.md propio, pero hereda lo que dicen las carpetas de arriba: eso es lo que tus agentes leen al entrar aqu\xed.","project.mdNoneHint":"El bot\xf3n crea AGENTS.md con un bloque de contexto —pila, comandos, avisos, tareas— que Panoma mantiene al d\xeda solo.","project.mdFileMeta":"{tokens} tokens \xb7 {lines} l\xedneas","project.mdManaged":"bloque de Panoma","project.mdClean":"Todo lo que afirma existe.","project.mdFindingOne":"1 afirmaci\xf3n que ya no es verdad","project.mdFindings":"{n} afirmaciones que ya no son verdad","project.mdLine":"l\xednea {n}","project.mdPathMissing":"no existe en el proyecto","project.mdPathMovedTo":"no existe; hay uno en {path}","project.mdScriptMissing":"no est\xe1 en los scripts del package.json","project.mdScriptNear":"no est\xe1 en los scripts; hay {names}","project.mdBlockBroken":"el bloque de Panoma no se cierra: rev\xedsalo a mano","project.navAccounts":"Cuentas","accounts.copy":"copiar","accounts.copied":"copiado","accounts.editList":"Editar la lista","accounts.title":"Cuentas y enlaces","accounts.question":"\xbfCon qu\xe9 cuenta iba esto?","accounts.hint":"Lo que falta al volver: el correo del despliegue, el dominio, el panel de siempre.","accounts.empty":"Nada apuntado todav\xeda. El correo de la cuenta de despliegue, el registrador del dominio, el panel que siempre cuesta encontrar…","accounts.addFirst":"Apuntar la primera","accounts.edit":"Editar","accounts.addRow":"A\xf1adir otra","accounts.save":"Guardar","accounts.saving":"Guardando…","accounts.cancel":"cancelar","accounts.remove":"Quitar entrada","accounts.label":"Qu\xe9 es (Vercel, dominio, Stripe…)","accounts.email":"correo de la cuenta","accounts.note":"nota","accounts.noSecrets":"Sin contrase\xf1as ni claves: esto viaja en claro por el cat\xe1logo. Los secretos, al Llavero del sistema.","accounts.badUrl":"Hay un enlace que no se entiende. Vale el dominio (vercel.com/x), la direcci\xf3n entera (https://…) o la m\xe1quina con su puerto (localhost:3000). No se ha guardado nada.","accounts.needsLabel":"Hay una fila con datos y sin nombre. Ponle qu\xe9 es —Vercel, dominio, Stripe— o qu\xedtala con la \xd7. No se ha guardado nada.","check.title":"\xbfTodav\xeda compila?","check.none":"Nadie lo ha comprobado a\xfan. La salud de arriba deduce; esto demuestra: se instala y se compila en un worktree aparte, con aislamiento, sin tocar tu carpeta.","check.run":"Comprobarlo ahora","check.rerun":"Volver a comprobar","check.running":"Instalando y compilando en un worktree aparte… puede tardar unos minutos. Tu carpeta no se toca.","check.ok":"Compila","check.broken":"La build est\xe1 rota","check.inconclusive":"Sin veredicto","check.checkedOn":"comprobado el {date} \xb7 {seconds}s","check.dirty":"Hab\xeda cambios sin confirmar: el veredicto habla del \xfaltimo commit.","project.mdVersionWrong":"el proyecto lleva la {v}","project.mdEnvMissing":"el ejemplo de entorno no la declara","project.mdEnvNear":"el ejemplo no la declara; hay {names}","project.mdLead":"Es lo primero que tus agentes leen al entrar en este proyecto. Panoma vigila que lo que diga siga siendo verdad.","project.mdInitButton":"Crear AGENTS.md con el contexto","project.mdAddBlockButton":"A\xf1adir el bloque de contexto","project.mdSyncButton":"Regenerar el bloque","project.mdApplyWorking":"Escribiendo…","project.mdInitDone":"Hecho: {file} creado con el bloque de contexto. Tus agentes lo leer\xe1n en su pr\xf3xima sesi\xf3n, y Panoma lo mantendr\xe1 al d\xeda solo.","project.mdBlockAdded":"Hecho: el bloque de contexto ya est\xe1 en {file}. Se regenera solo cuando cambie la realidad.","project.mdSyncDone":"Bloque regenerado en {file}.","project.mdSyncSame":"El bloque ya estaba al d\xeda: nada que cambiar.","project.mdBridgeMissing":"Claude Code no leer\xe1 este fichero: solo carga CLAUDE.md, y este proyecto no tiene. El bot\xf3n de abajo escribe tambi\xe9n el puente — un CLAUDE.md de una l\xednea que importa AGENTS.md.","project.mdBridgeWritten":"Y CLAUDE.md qued\xf3 escrito con la importaci\xf3n @AGENTS.md, que es lo \xfanico que Claude Code carga.","project.mdTerminalAlt":"o en el terminal:","project.mdFindingsIntro":"Esto es lo que el fichero afirma y ya no es verdad. Lo que lleva pista lo repara el bot\xf3n; el resto se arregla editando el fichero, y al guardar Panoma lo repasa de nuevo.","project.mdReviewTitle":"La opini\xf3n del modelo","project.mdReviewAsk":"Pedir opini\xf3n al modelo","project.mdReviewAsking":"Leyendo el fichero…","project.mdReviewAgain":"volver a pedirla","project.mdReviewStale":"El fichero cambi\xf3 despu\xe9s de esta opini\xf3n: p\xeddela de nuevo si quieres juicio fresco.","project.mdReviewNote":"Contradicciones, redundancia y lo que falta: lo que el verificador mec\xe1nico no puede ver.","project.mdInherited":"Tambi\xe9n hereda, de las carpetas de arriba","project.mdInheritedMeta":"{tokens} tokens","project.mdInspectButton":"Repasarlo ahora","project.mdInspectWorking":"Repasando contra el disco…","project.mdRepairButton":"Reparar lo evidente ({n})","project.mdRepairWorking":"Reparando…","project.mdRepairDone":"{n} arreglo{s} aplicado{s}. Quedan {m} para tu mano.","project.mdRepairDoneAll":"{n} arreglo{s} aplicado{s}. No queda ninguno.","project.mdInheritedNote":"Tus agentes tambi\xe9n leen estos, de las carpetas de arriba. El repaso ense\xf1a qu\xe9 afirma cada uno que ya no es verdad, con su l\xednea.","project.mdTouches":"\xdaltimos toques al fichero","project.mdTouchAnon":"sin firma","project.mdTruncated":"El proyecto tiene m\xe1s ficheros de los que se indexan: las rutas no se comprobaron.","project.navDetails":"Detalles","project.moreActions":"M\xe1s acciones del proyecto","project.copyPath":"Copiar ruta","project.pathCopied":"Ruta copiada","project.pathCopyFailed":"No se pudo copiar la ruta","project.rescan":"Volver a escanear","project.rescanning":"Actualizando…","project.rescanned":"Proyecto actualizado","project.rescanFailed":"No se pudo actualizar","project.show":"mostrar","project.hide":"ocultar","project.showTitle":"Volver a ense\xf1arlo en la vista principal","project.hideTitle":"Sacarlo de la vista principal. Sigue en el cat\xe1logo.","project.remove":"quitar del cat\xe1logo","project.removeTitle":"Sacarlo del cat\xe1logo. No borra ninguna carpeta.","project.actionFailed":"No se pudo.","project.unreachable":"No se pudo contactar con el servidor.","project.removeHeading":"Quitar {name} del cat\xe1logo","project.removeBody":"Panoma se olvidar\xe1 de este proyecto y ning\xfan escaneo lo volver\xe1 a a\xf1adir. Se pierden su ficha, su historial de an\xe1lisis y lo que hayas escrito sobre \xe9l aqu\xed.","project.removeSafeStrong":"Tu carpeta no se toca.","project.removeSafeBody":"El c\xf3digo, el historial de git y todo lo que hay dentro se quedan exactamente donde est\xe1n. Esto solo borra lo que Panoma sab\xeda.","project.removeTypeBefore":"Escribe","project.removeTypeAfter":"para confirmar","project.removeTypeAria":"Escribe {name} para confirmar","project.cancel":"Cancelar","project.removing":"quitando…","project.removeConfirm":"Quitar del cat\xe1logo","project.overviewTitle":"Resumen del proyecto","project.whatChanged":"Qu\xe9 cambi\xf3","project.recentActivity":"Actividad reciente","project.today":"hoy","project.whereProtected":"D\xf3nde est\xe1 protegido","project.versionControl":"Control de c\xf3digo","project.withRemote":"Con remoto","project.withoutRemote":"Sin remoto","project.withoutGit":"Sin Git","project.historyCopied":"El historial tiene una copia fuera de este disco.","project.onlyHereOne":"1 commit solo en este disco.","project.onlyHereMany":"{n} commit{s} solo en este disco.","project.whatNeedsAttention":"Qu\xe9 necesita atenci\xf3n","project.maintenance":"Mantenimiento y salud","project.noMajorIssues":"No hay problemas importantes.","project.issuesOne":"1 asunto requiere revisi\xf3n.","project.issuesMany":"{n} asuntos requieren revisi\xf3n.","project.outOf100":"de 100","project.commitChartAria":"Commits de los \xfaltimos siete d\xedas","project.attnNoRemote":"Sin repositorio remoto","project.attnNoRemoteDetail":"El proyecto solo existe en este disco.","project.attnNoRemoteAction":"Configurar remoto","project.attnAdvisoriesOne":"1 aviso de seguridad","project.attnAdvisoriesMany":"{n} aviso{s} de seguridad","project.attnAdvisoriesDetail":"Hay dependencias que requieren revisi\xf3n.","project.attnAdvisoriesAction":"Revisar avisos","project.depsUnchecked":"sin comprobar","project.depsUncheckedWhy":"No se ha podido leer {file}, as\xed que no se conocen las versiones exactas y no se ha preguntado por avisos de seguridad.","project.attnUnchecked":"Los avisos de seguridad est\xe1n sin comprobar","project.attnUncheckedDetail":"{file} no se puede leer, y sin las versiones exactas no hay nada que preguntar. El cero de aqu\xed abajo no dice que est\xe9 limpio.","project.attnUncheckedAction":"Ver dependencias","project.attnUnenriched":"Nadie ha preguntado por las dependencias","project.attnUnenrichedDetail":"Las versiones al d\xeda y los avisos de seguridad se le preguntan a los registros, y en este proyecto no se ha preguntado nunca. Los ceros de aqu\xed abajo no dicen que est\xe9 limpio: ejecuta {cmd}.","project.attnUnenrichedAction":"Ver dependencias","project.depsUnenrichedWhy":"Este proyecto no se ha enriquecido nunca: no se ha preguntado a los registros ni por versiones ni por avisos, as\xed que no hay respuesta que ense\xf1ar.","project.attnOutdated":"{n}/{total} dependencia{totals} atrasada{totals}","project.attnOutdatedDetail":"Actualizar mejora la salud del proyecto.","project.attnOutdatedAction":"Ver dependencias","project.allGood":"Todo en orden","project.allGoodDetail":"No hay riesgos importantes ahora mismo.","project.whoBuilt":"Qui\xe9n lo construy\xf3","project.ofHistory":"del historial","project.agentsShare":"Agentes: {n}% del historial","project.noAgentCommits":"No se detectaron commits de agentes.","project.builtWith":"Con qu\xe9 est\xe1 hecho","project.kindLanguage":"Lenguaje","project.kindFramework":"Framework","project.seeFullStack":"Ver pila completa","project.fullStackTitle":"Pila tecnol\xf3gica completa","project.signalsDetected":"{n} se\xf1al{es} detectada{s}","project.confidence":"{n}% de confianza","project.resumeQuestion":"Vuelve a entrar sin investigar","project.resumeTitle":"C\xf3mo retomar el proyecto","project.noCommands":"No se han detectado comandos de arranque en esta carpeta.","project.lastYouDid":"Lo \xfaltimo que hiciste","project.howToStart":"C\xf3mo se arranca","project.whatItNeeds":"Qu\xe9 necesita instalado","project.runtimeChecking":"comprobando…","project.runtimeHave":"tienes {version}","project.runtimeMissing":"no est\xe1 instalado","project.missingEnv":"Variables de entorno que faltan ({n})","project.envDeclaredIn":"Declaradas en","project.envNoValue":"y sin valor en tu","project.envWhy":"Es la causa m\xe1s com\xfan de que un proyecto viejo arranque y falle en la primera pantalla.","purpose.install":"instalar","purpose.start":"arrancar","purpose.tests":"tests","purpose.build":"compilar","project.protectQuestion":"Protege tu trabajo","project.protectTitle":"Hay cambios que solo existen en este disco","project.protectBody":"Panoma no publica nada por ti: te deja el comando listo y t\xfa decides cu\xe1ndo ejecutarlo.","project.depsQuestion":"Mant\xe9nlo saludable","project.depsTitle":"Dependencias","project.depsInstalled":"{n} instalada{s}","project.depsDirect":"{n} directa{s}","project.depsOutdated":"{n} atrasada{s}","project.depsDirectAria":"Dependencias directas de {ecosystem}","project.depsTransitiveAria":"Dependencias transitivas de {ecosystem}","project.depsTransitiveOne":"1 transitiva, que arrastra una directa","project.depsTransitiveMany":"{n} transitivas, que arrastran las directa{s}","project.depDev":"Desarrollo","project.depDirect":"Directa","project.depTransitive":"Transitiva","project.depUpToDate":"Al d\xeda","project.noDeps":"No se detectaron dependencias.","project.propose":"proponer","project.proposing":"probando…","project.proposeDone":"Hecho.","project.alreadyFailed":"Ya se intent\xf3 y fall\xf3:","project.tryAnyway":"intentarlo de todos modos","project.proposeRefused":"El servidor no acept\xf3 la propuesta ({status}).","project.proposeUnreadable":"El servidor contest\xf3 algo que este bot\xf3n no sabe leer ({status}).","project.runUnreachable":"No se pudo contactar con el cat\xe1logo.","project.securityQuestion":"Revisa lo importante","project.securityTitle":"Seguridad","project.fixedIn":"Corregido en {versions}","project.detailsQuestion":"Contexto t\xe9cnico","project.detailsTitle":"Ficha del proyecto","project.whatItIs":"Prop\xf3sito","project.noDescription":"No hay suficiente contexto escrito para explicar el prop\xf3sito de este proyecto.","project.detected":"Detectado: {text}","project.aiExplain":"explicar de qu\xe9 trata","project.aiReading":"leyendo el proyecto…","project.aiWriting":"escribiendo…","project.aiRewrite":"volver a escribir","project.aiWrittenBy":"escrito por {model}","project.aiSomeModel":"un modelo","project.aiWrittenIn":"escrito en {lang}","lang.es":"espa\xf1ol","lang.en":"ingl\xe9s","project.aiNoteBefore":"Usa el modelo que hayas conectado con","project.aiNoteAfter":"Se le da el README, la pila detectada y los \xfaltimos commits, y se le proh\xedbe afirmar nada que no est\xe9 ah\xed. No sustituye a la descripci\xf3n del proyecto: se guarda aparte.","project.whereFrom":"Procedencia","project.originOwn":"Lo hiciste t\xfa","project.originForked":"Parti\xf3 del trabajo de otro","project.originForeign":"No lo empezaste t\xfa","project.originTemplate":"Lo gener\xf3 una plantilla","project.originUnknown":"No hay forma de saberlo","project.originEvidence":"Se\xf1ales que sustentan el resultado","origin.remote-foreign":"el remoto est\xe1 en la cuenta de {value}, no en la tuya","origin.first-commit-foreign":"el primer commit lo hizo {value}","origin.license-foreign":"la licencia es de {value}","origin.history-restarted":"el historial de git empieza contigo, as\xed que se reinici\xf3 al copiarlo","origin.your-share":"{value}% del historial es tuyo","origin.zip-suffix":"la carpeta acaba en \xab-{value}\xbb, como los ZIP de GitHub","origin.scaffold-first-commit":"el primer commit lo escribi\xf3 {value}","origin.only-commit":"y es el \xfanico que hay: nadie lo ha tocado desde entonces","origin.commit-count":"y el historial tiene {n} commit{s}","origin.container-yours":"el repositorio que lo contiene lo empezaste t\xfa ({value})","origin.first-commit-yours":"el primer commit es tuyo ({value})","origin.all-history-yours":"todo el historial es tuyo ({n} commit{s})","origin.remote-yours":"el remoto est\xe1 en tu cuenta ({value})","origin.scaffold-continued":"empez\xf3 desde {value} y lo has seguido t\xfa","origin.zip-suffix-own":"la carpeta acaba en \xab-{value}\xbb, como los ZIP que sirve GitHub: probablemente empez\xf3 como una descarga","origin.zip-suffix-none":"la carpeta acaba en \xab-{value}\xbb, que es como GitHub nombra los ZIP de \xabDownload ZIP\xbb","origin.manifest-repo":"el manifiesto apunta a {value}","origin.readme-foreign":"el README se presenta como material ajeno: \xab{value}\xbb","origin.no-own-repo":"y no hay repositorio propio donde empezara","origin.no-repo":"no hay repositorio: sin historial no se puede saber qui\xe9n lo empez\xf3","project.noOriginEvidence":"Panoma no encontr\xf3 se\xf1ales suficientes para justificar una procedencia.","project.localDataQuestion":"Lo que Panoma ha medido","project.localData":"Inventario local","project.primaryLanguage":"Lenguaje principal","project.notDetected":"No detectado","project.versionControlRemote":"Git \xb7 con copia remota","project.versionControlLocal":"Git \xb7 solo en este equipo","project.versionControlNone":"Sin Git","project.versionControlUnknown":"No comprobado","project.firstSeen":"En el cat\xe1logo desde","project.fileCount":"Ficheros de c\xf3digo","project.path":"Ruta","project.branch":"Rama","project.lastScan":"\xdaltimo escaneo","project.size":"Tama\xf1o","project.files":"{n} fichero{s}","project.logQuestion":"Trabajo coordinado","project.logTitle":"Actividad de agentes","project.logMore":"y m\xe1s: {n}","project.logFiles":"ficheros: {n}","project.logbook":"Bit\xe1cora","project.launches":"En tu terminal","project.launchOf":"encargo redactado","project.logEmpty":"Ning\xfan agente ha apuntado nada aqu\xed por MCP todav\xeda.","project.logEmptyHow":"Conecta uno a este proyecto y lo que vaya apuntando —cambios, decisiones, bloqueos— queda escrito aqu\xed, para quien pase dentro de tres meses.","project.tasks":"Tareas","project.proposals":"Propuestas","project.servicesQuestion":"D\xf3nde vive","project.servicesTitle":"Servicios y distribuci\xf3n","project.servicesEmpty":"No se detectaron servicios ni destinos de distribuci\xf3n.","project.noTechnologies":"No se detectaron tecnolog\xedas todav\xeda.","project.cleanupQuestion":"Limpieza","project.cleanupTitle":"Recursos sin usar","project.assetsSearch":"buscar recursos sin usar","project.assetsReading":"leyendo el c\xf3digo…","project.assetsSlow":"Lee todos los ficheros de c\xf3digo del proyecto, as\xed que tarda unos segundos.","project.assetsFailed":"No se pudo analizar.","project.assetsStats":"{n} recursos analizados \xb7 {platform} gestionados por la plataforma (no se miran) \xb7 {sources} ficheros de c\xf3digo le\xeddos","project.assetsAllUsed":"Todos los recursos aparecen mencionados en el c\xf3digo.","project.assetsUnused":"{n} sin referencia","project.assetsDynamic":"En {dirs} el c\xf3digo construye las rutas a trozos, as\xed que esas carpetas quedan fuera del an\xe1lisis: un fichero puede usarse sin que su nombre aparezca escrito.","project.assetsCaveat":"\xabSin referencia\xbb significa que el nombre del fichero no aparece en ning\xfan fichero de c\xf3digo. Es una pista, no una prueba — compru\xe9balo antes de borrar nada.","project.updated":"Actualizado {when}","project.codeSize":"{size} de c\xf3digo","project.backToCatalog":"Volver al cat\xe1logo","common.copyOf":"copia de {name}","common.iconOf":"Icono de {name}","common.health":"Salud {score}/100","search.title":"Busca en todos tus proyectos a la vez","search.intro":"\xab\xbfD\xf3nde escrib\xed yo aquello del webhook de Stripe?\xbb. Ning\xfan editor puede contestarlo, porque ninguno tiene abiertos los ochenta proyectos.","credentials.title":"Claves commiteadas en tus repositorios","credentials.intro":"Se busca en lo que git sigue, en todos tus repositorios a la vez. Una clave en un {env} ignorado est\xe1 en tu disco; una clave commiteada est\xe1 en cada copia que alguien haya clonado, y sigue en el historial aunque borres el fichero. Hoy se lee el contenido actual de lo seguido: una clave que ya borraste del \xe1rbol sigue en los commits viejos y todav\xeda no se busca ah\xed.","credentials.allowlist":"Solo se marcan credenciales con forma reconocible —prefijos que emite un \xfanico proveedor—, nunca heur\xedsticas del tipo \xabuna cadena larga junto a la palabra key\xbb. Y hay una lista expl\xedcita de lo que {not} es un secreto: las claves de cliente de Firebase y Google Maps son p\xfablicas por dise\xf1o, viajan dentro del APK y marcarlas ser\xeda la forma m\xe1s r\xe1pida de que dejaras de mirar esta p\xe1gina.","credentials.not":"no","scan.start":"revisar el portafolio","scan.again":"revisar otra vez","scan.busy":"leyendo el historial…","scan.failed":"No se pudo revisar.","scan.unreachable":"No se pudo contactar con el servidor.","scan.findingOne":"{n} hallazgo","scan.findingMany":"{n} hallazgos","scan.reposScanned":"{n} repositorio{s} revisado{s}","scan.skipped":"{n} sin git","scan.public":"{n} descartado{s} por ser p\xfablicos por dise\xf1o","scan.publicTitle":"Claves de cliente de Firebase y Google Maps, ficheros de ejemplo y dependencias de terceros.","scan.clean":"Ninguna credencial con forma reconocible en el historial de tus repositorios.","scan.trackedByGit":"{label} seguido por git","secret.stripe-live":"Clave secreta de Stripe en producci\xf3n","secret.stripe-test":"Clave secreta de Stripe de pruebas","secret.aws":"Clave de acceso de AWS","secret.github-token":"Token de GitHub","secret.anthropic":"Clave de API de Anthropic","secret.openai":"Clave de API de OpenAI","secret.slack":"Token de Slack","secret.private-key":"Clave privada","secret.supabase-service":"Clave service_role de Supabase","secret.google-api-key":"Clave de API de Google","secret.sendgrid":"Clave de SendGrid","secret.env-file":"fichero .env","secret.key-file":"fichero de claves","secret.google-service-account":"cuenta de servicio de Google","secret.ssh-private-key":"clave SSH privada","secretWhy.stripe-live":"Permite cobrar y mover dinero de la cuenta real.","secretWhy.stripe-test":"Solo afecta al entorno de pruebas, pero no deber\xeda estar en el historial.","secretWhy.aws":"Da acceso a la cuenta de AWS seg\xfan los permisos del usuario.","secretWhy.github-token":"Da acceso a los repositorios del usuario seg\xfan sus permisos.","secretWhy.anthropic":"Se factura a tu cuenta hasta que la revoques.","secretWhy.openai":"Se factura a tu cuenta hasta que la revoques.","secretWhy.slack":"Da acceso al espacio de trabajo de Slack.","secretWhy.private-key":"Una clave privada en el historial deja de ser privada.","secretWhy.supabase-service":"Salta todas las pol\xedticas de seguridad a nivel de fila. Es la llave maestra.","secretWhy.google-api-key":"Fuera de la configuraci\xf3n de cliente, una clave de Google sin restricciones de dominio la puede usar cualquiera y se factura a tu cuenta.","secretWhy.sendgrid":"Permite enviar correo en tu nombre.","secretWhy.file":"Borrarlo del \xe1rbol no basta: lo commiteado sigue en el historial y la clave hay que rotarla.","scan.orderTitle":"Si algo de esto es real, el orden importa","scan.step1Act":"Revoca la clave en el panel del proveedor.","scan.step1":"{act} Es lo \xfanico que la desactiva de verdad.","scan.step2":"Emite una nueva y ponla en un `.env` ignorado.","scan.step3Act":"Despu\xe9s, si quieres, l\xedmpiala del historial con `git filter-repo`.","scan.step3":"{act} Borrarla del fichero y commitear no sirve: sigue en todos los commits anteriores, y en cualquier copia que alguien haya clonado.","scan.notStored":"Este informe no se guarda en la base de datos. Guardar d\xf3nde est\xe1n exactamente tus claves filtradas ser\xeda crear un segundo sitio del que se pueden filtrar.","packages.title":"{n} dependencia{s} en tu portafolio","packages.emptyTitle":"Sin dependencias todav\xeda","packages.emptyBody":"Salen de los proyectos del cat\xe1logo: escanea una carpeta y las dependencias de cada proyecto aparecen aqu\xed, con su versi\xf3n y sus avisos.","packages.intro":"El portafolio visto por paquete en vez de por proyecto. Ning\xfan gestor de paquetes puede darte esta vista: solo ve un proyecto a la vez.","packages.stats":"{n} dependencia{s} directa{s} atrasada{s} \xb7 {m} aviso{ms} \xb7 comprobado {when}","packages.statsUnchecked":"Versiones y avisos sin preguntar todav\xeda — ejecuta {cmd} y esta l\xednea se rellena.","packages.colPackage":"paquete","packages.colProjects":"proyectos","packages.colInUse":"en uso","packages.colLatest":"\xfaltima","packages.colAdvisories":"avisos","packages.deprecated":"obsoleto","packages.unpinned":"sin fijar","agents.empty":"Ning\xfan agente conectado","agents.countOne":"{n} agente","agents.countMany":"{n} agentes","agents.intro":"Lo que los agentes de IA han hecho en tus proyectos, en un solo sitio. Se conectan por MCP y reportan lo que hacen mientras trabajan.","agents.connectFirst":"Conecta uno desde la terminal:","agents.connectNote":"El comando imprime la clave y la configuraci\xf3n MCP lista para pegar. Mientras tanto, la atribuci\xf3n por trailers de git ya funciona sin instalar nada — mira cualquier proyecto con historial.","agents.entries":"{n} entrada{s} \xb7 {m} proyecto{ms}","agents.seen":"visto {when}","agents.recentActivity":"Actividad reciente","families.titleOne":"{n} carpeta que es copia","families.titleMany":"{n} carpetas que son copia","families.intro":"Agrupadas por commit ra\xedz, remoto de git, nombre y dependencias compartidas. Para cada familia, panoma se\xf1ala cu\xe1l conservar — no borra nada. Que sea la principal no significa que el proyecto est\xe9 vivo: eso lo dice su estado, aparte.","families.stats":"{families} familias \xb7 {bytes} de c\xf3digo repetido","families.empty":"No hay copias en el cat\xe1logo. Escanea una carpeta con {cmd} para buscarlas.","families.copiesAndSize":"{n} copia{s} \xb7 {bytes}","families.canonical":"principal","families.copy":"copia","families.noGit":"sin git","families.sameDate":"misma fecha","families.daysBehind":"{n} d por detr\xe1s","runs.empty":"Ninguna propuesta todav\xeda","runs.countOne":"{n} propuesta","runs.countMany":"{n} propuestas","runs.intro":"Cada propuesta se prepara en un worktree aislado: se edita el manifiesto, se instala y se ejecutan los tests. El resultado es una rama con el parche — nunca un cambio aplicado en tu carpeta, y nunca un push.","runs.tryHint":"Prueba con una dependencia atrasada:","runs.argProject":"proyecto","runs.argPackage":"paquete","runs.branch":"rama","runs.security":"seguridad","runs.advisory":"aviso","runs.noTestsEmphasis":"nadie ha comprobado","runs.noTests":"Este proyecto no tiene tests, as\xed que {nobody} que siga funcionando con esta versi\xf3n. Revisa el parche con m\xe1s cuidado del habitual.","runs.steps":"Pasos","runs.patchLines":"Parche \xb7 {n} l\xednea{s}","patch.output":"output ({n} caracteres)","runActions.apply":"Aplicar en mi repositorio","runActions.merging":"Fusionando…","runActions.discard":"Descartar","runActions.discarding":"Borrando…","runActions.note":"Fusiona {branch} en tu rama actual. No hace push.","runActions.noDetail":"Sin detalle.","runActions.unreachable":"No se pudo contactar con el servidor.","isolation.container":"contenedor","isolation.container.title":"Ejecutado en un contenedor ef\xedmero: sin acceso a tu disco ni a tus procesos.","isolation.hardened":"entorno limpio","isolation.hardened.title":"Ejecutado con las variables de entorno filtradas y HOME desechable: los scripts de instalaci\xf3n no vieron tus credenciales. Siguen ejecut\xe1ndose en tu m\xe1quina y con red.","isolation.local":"sin aislar","isolation.local.title":"Ejecutado en tu m\xe1quina con tu entorno completo. Un script de instalaci\xf3n tuvo acceso a tus variables y a tu disco.","isolation.degraded":"degradado","hidden.empty":"No has apartado nada","hidden.count":"{hidden} ocultos y {excluded} fuera del cat\xe1logo","hidden.wordHidden":"oculto","hidden.wordExcluded":"fuera del cat\xe1logo","hidden.intro":"Un proyecto {hidden} sigue en el cat\xe1logo con todos sus datos: solo deja de aparecer en la rejilla y en los contadores. Uno {excluded} se ha borrado de Panoma, y ning\xfan escaneo lo vuelve a a\xf1adir hasta que lo readmitas.","hidden.diskNote":"Ninguna de las dos cosas ha tocado tu disco. Todas las carpetas siguen donde estaban, con su c\xf3digo y su historial intactos.","hidden.sectionHidden":"Ocultos ({n})","hidden.sectionExcluded":"Fuera del cat\xe1logo ({n})","hidden.outSince":"fuera desde {when}","hidden.readmitNote":"Readmitir solo levanta el veto: el proyecto reaparece en el siguiente {cmd}, con sus datos analizados de nuevo desde cero.","hidden.emptyBody":"Cuando ocultes o quites un proyecto, aparecer\xe1 aqu\xed para que puedas devolverlo.","undo.unhide":"volver a mostrar","undo.readmit":"readmitir","undo.failed":"No se pudo.","undo.unreachable":"No se pudo contactar con el servidor.","disk.empty":"Todav\xeda no has medido nada","disk.title":"{bytes} vuelven con un comando","disk.intro":"Dependencias instaladas, cach\xe9s y salidas de compilaci\xf3n. Panoma no borra nada: mide, dice de d\xf3nde sale cada cifra y te deja el comando que la regenera.","disk.metricTotal":"ocupan en total","disk.metricReclaimable":"regenerable","disk.metricShare":"{n}% del total","disk.metricDormant":"en proyectos dormidos","disk.metricDormantDetail":"sin un commit en m\xe1s de un a\xf1o","disk.metricMeasured":"proyectos medidos","disk.ofTotal":"de {bytes}","disk.shareAria":"{n}% del proyecto es regenerable","disk.moreDirs":"+{n} m\xe1s","disk.measuredAt":"medido {when}","disk.rules":"Una carpeta entra en esta lista por una de dos razones: su nombre solo significa \xabgenerado\xbb ({generated}) o el propio proyecto la ignora en git. Las de nombre ambiguo —{ambiguous}— que git no ignora se quedan fuera: en un proyecto son basura y en el de al lado son c\xf3digo escrito a mano.","measure.start":"medir el disco","measure.again":"volver a medir","measure.busy":"recorriendo el disco…","measure.noteFirst":"Recorre el \xe1rbol completo de cada proyecto. La primera vez tarda varios minutos.","measure.noteBusy":"Recorre el \xe1rbol completo de cada proyecto. Puede tardar varios minutos; no cierres esta pesta\xf1a.","measure.noteLast":"\xdaltima medici\xf3n: {when}. Los tama\xf1os cambian cada vez que instalas o compilas.","measure.done":"{n} proyecto{s} medidos","measure.missing":"{n} carpeta{s} ya no en el disco","measure.failed":"No se pudo medir.","measure.unreachable":"No se pudo contactar con el servidor.","unsaved.safe":"Todo est\xe1 a salvo","unsaved.countOne":"{n} proyecto con trabajo sin guardar","unsaved.countMany":"{n} proyecto{s} con trabajo sin guardar","unsaved.intro":"Lo que existe solo en este disco. Panoma lee el estado de git de cada carpeta y no toca nada: aqu\xed se ense\xf1a el comando, lo ejecutas t\xfa.","unsaved.statUnversioned":"{n} carpeta{s} sin control de versiones","unsaved.statOrphanCommits":"{shown} commit{s} sin ninguna copia remota","unsaved.statUnpushed":"{n} commit{s} sin subir","unsaved.statChecked":"comprobado en el \xfaltimo escaneo \xb7 vuelve a correr {cmd} para refrescarlo","unsaved.emptyBody":"Ning\xfan proyecto del cat\xe1logo tiene cambios sin commitear, commits sin subir ni repositorios sin remoto.","unsaved.emptyNote":"Los proyectos escaneados con {flag} no aparecen aqu\xed: de esos no se sabe nada, que no es lo mismo que estar limpios.","unsaved.group.no-git":"Sin control de versiones","unsaved.blurb.no-git":"Carpetas con c\xf3digo y sin repositorio. No hay historial, ni remoto, ni forma de deshacer nada: un borrado accidental aqu\xed no se recupera.","unsaved.group.no-commits":"Con repositorio y ning\xfan commit","unsaved.blurb.no-commits":"Alguien hizo `git init` y ah\xed se qued\xf3. Todo lo que hay dentro est\xe1 fuera de cualquier historial.","unsaved.group.no-remote":"Solo en este disco","unsaved.blurb.no-remote":"Repositorios sin remoto configurado. Todo su historial existe en un \xfanico sitio: aqu\xed.","unsaved.group.unpushed":"Con commits sin subir","unsaved.blurb.unpushed":"Tienen remoto, pero hay commits que todav\xeda no han salido de aqu\xed.","unsaved.group.uncommitted":"Con cambios sin commitear","unsaved.blurb.uncommitted":"Ficheros tocados o sin a\xf1adir que no est\xe1n en ning\xfan historial.","unsaved.group.stashes":"Con stashes olvidados","unsaved.blurb.stashes":"Cambios apartados \xabun momento\xbb que llevan ah\xed desde entonces.","unsaved.files":"{n} fichero{s}","unsaved.copyOfTitle":"Panoma la considera una copia de {name}. Aun as\xed, lo que hayas tocado aqu\xed solo est\xe1 aqu\xed.","api.localOnly":"{action} solo funciona con el cat\xe1logo local.","api.action.openFolder":"Abrir carpetas","api.action.aiConfig":"Configurar el modelo","api.action.assign":"Encargar","api.action.withdraw":"Retirar un encargo","api.action.launchAgent":"Lanzar un agente","api.action.check":"Comprobar la build","api.action.measureDisk":"Medir el disco","api.action.writeBlock":"Escribir el bloque","api.action.rescan":"Volver a escanear","api.action.noteTask":"Anotar tareas","api.action.noteMemory":"Curar la memoria","api.action.hooks":"Poner los ganchos","api.missingId":"Falta el identificador del proyecto.","api.missingProject":"Falta el proyecto.","api.noProject":"Proyecto no encontrado.","api.noAssignment":"Ese encargo no existe.","api.unknownAction":"Acci\xf3n desconocida.","api.badLimit":"\xab{value}\xbb no vale como l\xedmite: hace falta un entero de 1 a {cap}.","api.unreachable":"No se pudo contactar con el servidor.","api.folderGone":"La carpeta ya no est\xe1 en {root}. Vuelve a escanear.","guard.rejected":"Petici\xf3n rechazada: {detail}.","guard.rejectedHint":"Panoma solo acepta acciones desde su propia interfaz o desde el CLI.","guard.otherSite":"la petici\xf3n viene de otro sitio ({site})","guard.otherOrigin":"el origen {origin} no es esta aplicaci\xf3n","guard.localOperatorOnly":"Esto le da \xf3rdenes al ordenador donde vive el cat\xe1logo, y para eso hace falta su clave de operador.","guard.localOperatorOnlyHint":"Abre el cat\xe1logo con el enlace de \xabesta m\xe1quina\xbb que imprime \xabpanoma up --network\xbb, o hazlo desde el propio ordenador.","open.unknownTool":"No s\xe9 abrir con \xab{tool}\xbb.","open.gone":"La carpeta ya no est\xe1 en {root}.","open.goneHint":"Puede que la movieras o la borraras. Vuelve a escanear para actualizar el cat\xe1logo.","open.noEditor":"No encontr\xe9 ning\xfan editor en el PATH.","open.noConfig":"No sabemos d\xf3nde guarda ese agente su configuraci\xf3n.","open.noEditorHint":"Se buscan, por este orden: {order}. En VS Code o Cursor se instala con \xabShell Command: Install 'code' command in PATH\xbb, y el orden se cambia con la variable PANOMA_EDITOR.","open.unsupportedTool":"No s\xe9 abrir \xab{tool}\xbb en {os}.","open.launchFailed":"No se pudo abrir con {command}.","open.launchNamedFailed":"No se pudo abrir {name}: {detail}","open.noTerminalHere":"Todav\xeda no s\xe9 abrir un terminal en {os}.","open.noTerminalHereHint":"Abre la carpeta y lanza tu agente a mano.","open.noAgent":"No encontr\xe9 ning\xfan agente instalado.","open.noAgentHint":"Se buscan, por este orden: {agents}. Con uno instalado y con la sesi\xf3n iniciada, este bot\xf3n lo lanza.","open.appMissing":"Esa aplicaci\xf3n no est\xe1 instalada en esta m\xe1quina.","ai.unknownProvider":"Proveedor desconocido.","ai.noKeyNeeded":"{name} no usa clave: usa tu sesi\xf3n ya iniciada.","ai.emptyKey":"La clave lleg\xf3 vac\xeda.","ai.notAKey":"Eso no parece una clave.","ai.noLogin":"Ese proveedor no usa inicio de sesi\xf3n.","ai.loginBusy":"Ya hay un inicio de sesi\xf3n a medias. Term\xednalo o espera a que caduque.","assign.alreadyQueued":"Ese encargo ya est\xe1 en la cola.","assign.pasteHint":"Copia el encargo y p\xe9gaselo a tu agente.","check.busy":"Ya hay una comprobaci\xf3n en marcha para este proyecto.","check.failed":"No se pudo comprobar: {detail}","tasks.needTitle":"La tarea necesita una frase.","tasks.tooLong":"La frase no puede pasar de {n} caracteres.","notes.tooLong":"Una nota es un hecho en una o dos frases: ni vac\xeda ni un p\xe1rrafo. El tope de caracteres es 500.","notes.overBudget":"La memoria est\xe1 llena: consolida o descarta alguna nota antes de aprobar otra. El tope de caracteres es 2000.","notes.sleepingFull":"Las se\xf1ales dormidas est\xe1n al completo: descarta o consolida una antes de aprobar otra. El tope de plazas es 30.","notes.pendingFull":"Hay demasiadas propuestas esperando: decide sobre las que hay antes de a\xf1adir m\xe1s. El tope es 20.","notes.gone":"Esa nota ya est\xe1 decidida.","notes.saveFailed":"No se pudo guardar.","notes.title":"Memoria","notes.hint":"Hechos durables que cualquier agente recibe al abrir el proyecto. Lo que propone un agente espera aqu\xed tu s\xed.","notes.empty":"Nada apuntado todav\xeda.","notes.pendingTitle":"Propuestas","notes.approve":"Aprobar","notes.discard":"Descartar","notes.add":"Apuntar","notes.addPlaceholder":"Un hecho durable del proyecto…","notes.proposedBy":"propuesta de {agent}","notes.sleepsAt":"duerme en {trigger}","notes.badTrigger":"El d\xf3nde tiene que ser una ruta relativa del proyecto: exacta o zona con /** al final.","notes.challengedTitle":"Impugnadas","notes.challengedEvidence":"el disco cambi\xf3: {target} ({observed})","notes.reapprove":"Reaprobar","double.title":"El doble","double.shadowTag":"en sombra","double.hint":"Lo que tus agentes te habr\xedan preguntado, y lo que tu doble habr\xeda contestado. Nadie ha visto estas respuestas: etiquetarlas es su examen.","double.askedBy":"pregunta de {agent}","double.drafting":"El doble a\xfan no ha redactado.","double.abstained":"El doble se abstuvo: ninguna de tus creencias cubre esta pregunta.","double.cites":"Se apoya en:","double.backed":"Habr\xeda dicho lo mismo","double.vetoed":"No","double.labeledBacked":"coincidiste","double.labeledVetoed":"no coincidiste","double.gone":"Esa consulta ya est\xe1 etiquetada.","double.saveFailed":"No se pudo guardar.","roots.serverOnly":"Los sitios vigilados son de la m\xe1quina que sirve el cat\xe1logo.","roots.missingFolder":"Falta la carpeta.","roots.system":"{path} es del sistema: ah\xed no hay proyectos tuyos.","roots.home":"Tu carpeta personal entera es demasiado: a\xf1ade las carpetas donde programas.","roots.library":"Ah\xed solo hay datos de apps.","roots.notAFolder":"{path} no es una carpeta que exista.","roots.covered":"{path} ya est\xe1 dentro de {covering}, que se mira entera. Si solo quieres esa, quita antes la de fuera.","rescan.failed":"No se pudo actualizar {name}: {detail}","md.missingSlugPath":"Falta el proyecto o el fichero.","md.missingSlugAction":"Falta el proyecto, o qu\xe9 hacer con el bloque.","accounts.missingInput":"Falta el proyecto o la lista de cuentas.","accounts.badUrlAt":"El enlace de \xab{label}\xbb no se entiende. No se ha guardado nada.","agentMcp.localOnly":"Conectar un agente escribe en este disco: solo desde la m\xe1quina local.","agentMcp.missingInput":"Falta el agente.","agentMcp.noServer":"El servidor MCP no est\xe1 en esta instalaci\xf3n. Constr\xfayelo con: pnpm --filter @panoma/mcp run build","agentMcp.badJson":"{path} tiene un error de sintaxis. No lo toco: arr\xe9glalo y pega esto t\xfa, o vuelve a intentarlo.","agentMcp.notAnObject":"{path} no tiene la forma que esper\xe1bamos. No lo toco: pega esto donde corresponda.","agentMcp.badToml":"{path} tiene un error de sintaxis. No lo toco: arr\xe9glalo y pega esto t\xfa, o vuelve a intentarlo.","agentMcp.tomlManual":"Panoma ya est\xe1 en {path}, escrito a tu manera. No lo toco: actual\xedzalo t\xfa con esto.","agentKeys.localOnly":"Solo desde la m\xe1quina local.","agentKeys.missingField":"Falta \xab{field}\xbb.","agentKeys.gone":"Ese agente ya no est\xe1.","verdicts.malformed":"Falta la lista de reacciones, o alguna no tiene la forma esperada. No se ha guardado nada.","verdicts.tooMany":"Llegan {n} reacciones y de una vez caben {cap}. No se ha guardado nada: m\xe1ndalas por tandas.","verdicts.badSource":"\xab{source}\xbb no es una fuente que se pueda olvidar. Las que hay: {sources}, o \xaball\xbb para todas.","verdicts.unknownSource":"\xab{source}\xbb no es una fuente conocida. Las que hay: {sources}.","verdicts.badAccepted":"\xab{value}\xbb no dice nada sobre la revisi\xf3n. Escribe accepted=true, accepted=false o accepted=pending.","distill.failed":"No se pudo destilar: {detail}","distill.noProvider":"Configura un proveedor con: panoma ai use <proveedor>","api.modelFailed":"No se pudo pedir al modelo: {detail}","model.noneConnected":"no hay ning\xfan modelo conectado","model.connectHint":"Conecta uno en la p\xe1gina Modelo, o desde el terminal: panoma ai use <proveedor>","model.noCredential":"falta la credencial de {name}","model.hintCli":"Instala {name} e inicia sesi\xf3n; Panoma llamar\xe1 a \xab{command}\xbb.","model.hintOauth":"Inicia sesi\xf3n en {name} desde la p\xe1gina Modelo.","model.hintKey":"Guarda la clave en la p\xe1gina Modelo o con \xabpanoma ai key {id}\xbb. Se saca en {url}","look.noImage":"Falta la captura: no hay ninguna imagen que mirar.","look.badImage":"Esa imagen no se puede leer: llega vac\xeda o en un formato que no es imagen.","look.noProfile":"No hay con qu\xe9 medir esta pantalla: tu retrato est\xe1 vac\xedo y este proyecto no tiene norte. Destila tu historial —panoma twin distill— o escribe un norte con panoma north.","look.budgetSpent":"Las miradas de hoy est\xe1n gastadas: {used} de {cap}. Vuelven ma\xf1ana, o sube el tope con PANOMA_LOOK_BUDGET.","look.failed":"No se pudo mirar: {detail}","look.noVision":"El proveedor que tienes configurado no sabe recibir im\xe1genes: {detail}","look.assignMalformed":"Falta decir qu\xe9 hallazgo hay que encargar.","look.assignGone":"Ese hallazgo ya no est\xe1: la mirada de la que sal\xeda se borr\xf3.","look.assignQueued":"Eso ya est\xe1 en la cola.","look.assignButton":"Dejarlo en la cola","look.assignDone":"Encargado en {project}: {title}","look.assignNow":"Hazlo ahora","look.assignAgain":"M\xe1ndalo otra vez","look.dismissButton":"Descartarlo","look.dismissed":"descartado","look.dismissDone":"Descartado. Si cambias de idea, se puede volver a poner en la cola.","critique.showOne":"Ver el hallazgo","critique.showMany":"Verlos de uno en uno — hallazgos: {findings}","critique.hide":"Cerrar la lista","critique.moved":"Esta revisi\xf3n ya no es la que est\xe1s viendo: la carpeta cambi\xf3 y panoma la rehizo. Recarga para ver los hallazgos de ahora.","critique.never":"Panoma todav\xeda no ha le\xeddo esta carpeta, as\xed que aqu\xed no hay nada que ense\xf1ar: ni bueno ni malo.","critique.clean":"Panoma la ley\xf3 y no encontr\xf3 ni una pega mec\xe1nica. Ficheros mirados: {n}.","critique.partial":"Y no lleg\xf3 a mirarla entera: la carpeta trae m\xe1s de lo que cabe en una pasada.","critique.queued":"En la cola. Tu agente lo recoge al entrar en el proyecto.","critique.dismissed":"Descartado. Si cambias de idea, se puede volver a poner en la cola.","look.assignLaunched":"Terminal abierto con {agent} trabajando en ello.","look.assigning":"A la cola…","look.assigned":"en la cola","assign.noTask":"Ese encargo ya no est\xe1 en la cola.","assign.notQueued":"Ese encargo ya no estaba en la cola: puede que un agente lo cerrara.","assign.taskIdLine":"Este encargo est\xe1 en la cola de panoma con el id {id}: c\xf3gelo con panoma_claim_task antes de empezar y ci\xe9rralo con panoma_complete_task al terminar.","look.noIdentity":"Este proyecto todav\xeda no tiene identidad estable —sale del primer commit—, as\xed que no habr\xeda d\xf3nde guardar lo que se mirase. Haz el primer commit y vuelve a intentarlo.","look.noShot":"Esa captura ya no est\xe1 en el buz\xf3n: {name}","look.noShotName":"Falta decir qu\xe9 captura hay que mirar.","look.unreadableShot":"Esa captura estaba en la lista y no se pudo abrir: {detail}. La habr\xe1n borrado, o pesa m\xe1s de lo que se puede mirar.","dest.look":"El cr\xedtico: qu\xe9 est\xe1 mal en lo que te entregaron","look.kicker":"Twin \xb7 el cr\xedtico","look.title":"Qu\xe9 est\xe1 mal en lo que te acaban de entregar","look.intro":"El turno del medio, hecho por otro. Mira la pantalla con tu retrato delante y dice qu\xe9 frase tuya rompe, con la siguiente orden ya redactada. Un juicio que no cuelgue de una frase que firmaste no sale de aqu\xed.","look.yardstick":"vara de medir \xb7 frases del retrato: {n}","look.noYardstick":"Tu retrato est\xe1 vac\xedo, as\xed que no hay con qu\xe9 medir: esto solo denuncia lo que incumple una frase tuya. Empieza por tu doble.","look.budget":"miradas de hoy: {used} \xb7 tope del d\xeda: {cap}","look.watch":"El vig\xeda mira solo lo que aparezca en un buz\xf3n, y cada captura una vez. Su reserva del d\xeda: {cap}.","look.notRedacted":"Una captura viaja entera: no hay forma de tachar p\xedxeles. Lo que se vea en ella —una clave en un terminal, un correo real— sale con la imagen.","look.inboxTitle":"El buz\xf3n","look.inboxOf":"El buz\xf3n de {project}","look.inboxEmpty":"Montado y vac\xedo: todav\xeda no ha dejado nada ning\xfan agente.","look.inboxSkipped":"ficheros que no son im\xe1genes y no se miran: {n}","look.noInbox":"Ning\xfan proyecto tiene el buz\xf3n montado.","look.noInboxHint":"Se monta con \xabpanoma md init\xbb dentro del proyecto. A partir de ah\xed tus agentes leen en AGENTS.md d\xf3nde dejar lo que construyen, y aparece aqu\xed.","look.button":"Mirar","look.buttonAgain":"Volver a mirar","look.looking":"Mirando…","look.looked":"ya mirada \xb7 hallazgos: {n}","look.lookedClean":"ya mirada \xb7 no romp\xeda nada","look.estimate":"frases: {statements} \xb7 tokens del encargo: {tokens} \xb7 imagen: {size}","look.verdictOf":"Lo que dice de {subject}","look.clean":"No rompe ninguna de tus frases.","look.unreadable":"La respuesta no ten\xeda forma de hallazgos. La llamada se pag\xf3 igual, y se puede volver a mirar.","look.fix":"P\xeddele: {fix}","look.against":"contra: {statement}","look.measured":"medido contra frases: {statements}","look.dropped":"juicios sin respaldo descartados: {n}","look.uploadTitle":"\xbfNo est\xe1 en ning\xfan buz\xf3n?","look.uploadHint":"Una aplicaci\xf3n de escritorio, un marco de Figma, la foto de un m\xf3vil: lo que ning\xfan agente puede capturar se sube desde aqu\xed.","look.uploadPick":"Elegir imagen","look.uploadTarget":"Proyecto al que subir la captura","look.badType":"Eso no es una imagen de las que se pueden mirar: PNG, JPEG, WebP o GIF.","look.tooBig":"Esa imagen pesa {size} y el tope est\xe1 en {cap}. Rec\xf3rtala o exp\xf3rtala a JPEG.","look.historyTitle":"Lo que ya ha mirado","look.historyEmpty":"Todav\xeda no ha mirado nada.","look.firedWatch":"lo mir\xf3 el vig\xeda","look.firedHand":"lo pediste t\xfa","taste.full":"No cabe: el retrato ocupar\xeda {chars} de {cap} caracteres. No se ha guardado nada. Quita alguna frase, o ac\xf3tala a su proyecto para que solo cuente all\xed, y vuelve a guardar.","twin.toCritic":"Ense\xf1arle una pantalla al cr\xedtico →","twin.title":"Esto es lo que he aprendido de ti","twin.titleEmpty":"Todav\xeda no he aprendido nada de ti","twin.intro":"Cada creencia sale de cosas que le escribiste a tus agentes, con las citas debajo. No hay nada que aprobar: si no tocas nada, esto es lo que leen tus agentes. L\xe9elo, y corrige lo que no seas t\xfa.","twin.introWaiting":"Cada creencia sale de cosas que le escribiste a tus agentes, con las citas debajo. Todav\xeda no llegan a ellos: esto lo dedujo una m\xe1quina y hace falta que digas que s\xed una vez, ah\xed abajo.","twin.introEmpty":"Panoma lee tu historial con los agentes en tu propio disco y saca de ah\xed las pocas cosas que de verdad piensas sobre c\xf3mo quieres que quede tu trabajo, con las citas de las que sali\xf3 cada una.","twin.introEmptyHint":"Empieza aqu\xed abajo, en tus historias: dice cu\xe1les hay en esta m\xe1quina y cu\xe1nto ocupan, medido sin abrir ninguna.","twin.counts":"creencias: {beliefs} \xb7 en formaci\xf3n: {forming} \xb7 evidencia: {observations}","twin.density":"observaciones por creencia: {density}","twin.corrections":"has corregido {corrections} de {shown}","twin.rate":"{rate} % ha necesitado que lo corrijas","today.criticWhere":"Lo que vio, y d\xf3nde","today.criticFindingOne":"{n} cosa","today.criticFindingMany":"{n} cosa{s}","today.criticOne":"el cr\xedtico ha visto algo mientras no mirabas","today.criticMany":"el cr\xedtico ha visto cosas mientras no mirabas: {n}","twin.briefs":"de lo que el cr\xedtico ha visto has encargado {ordered} de {findings}","twin.briefsRate":"{rate} % de lo que se\xf1ala te vale","twin.briefsLaunched":"de esos han salido a un agente: {launched}","twin.briefsDiscarded":"y has dicho que no a: {discarded}","twin.reachTitle":"Qui\xe9n lo lee","twin.reach":"Tu retrato baja al .md de estos proyectos: {reached} de {projects}","twin.reachNone":"Ahora mismo no lo lee ning\xfan agente: ninguno de tus proyectos tiene abierto el canal. Se abre uno a uno, dentro de la carpeta.","twin.reachSome":"En los dem\xe1s no est\xe1 abierto el canal, as\xed que ah\xed tus agentes trabajan sin saber nada de esto.","twin.reachHow":"panoma md init","twin.designTitle":"C\xf3mo se ve lo tuyo","twin.designFrom":"Sale de los proyectos que el cr\xedtico ha le\xeddo, sin contar copias: {read} \xb7 de esos, con algo que mirar: {withUi}","twin.designProjects":"proyectos: {projects}","twin.designFonts":"Tipograf\xedas: {fonts}","twin.designRadii":"Esquinas: {radii}","twin.designTraits":"Con modo oscuro: {dark} \xb7 con animaci\xf3n: {animation}","twin.briefsRelaunched":"alguno m\xe1s de una vez — lanzamientos: {launches}","twin.digest":"En los \xfaltimos {days} d\xedas — nuevas: {created} \xb7 afinadas: {refined} \xb7 retiradas: {retired}.","twin.corpusLeft":"Esto sale de {read} de {total} cita{totals} tuya{totals} guardada{totals}. Sin leer: {left}.","twin.distillAll":"Leer el resto de mi historial \xb7 quedan {n} cita{s}","twin.distilling":"Leyendo…","twin.distillEstimate":"esta pasada lee {verdicts} citas \xb7 unos {tokens} tokens de entrada","twin.distillProgress":"le\xeddas: {read} \xb7 observaciones guardadas: {saved} \xb7 quedan: {left}","twin.distillNothing":"No queda historial por leer.","twin.corpusDone":"Sale de tu historial entero: las {total} cita{totals} guardadas ya se han le\xeddo.","twin.scopeOnly":"Solo en {project}","twin.scopeAll":"Vale en todo lo que haces","twin.scopedTag":"solo en {project}","twin.badgeSigned":"firmada por ti","twin.badgeStanding":"en pie","twin.badgeForming":"en formaci\xf3n","twin.formingWhy":"le faltan pruebas: hacen falta tres, de dos d\xedas o de dos proyectos","twin.support":"observaciones: {observations} \xb7 proyectos: {projects} \xb7 d\xedas: {days}","twin.showCitations":"ver las citas: {n}","twin.hideCitations":"ocultar las citas","twin.sign":"Est\xe1 bien dicha","twin.edit":"Decirlo con mis palabras","twin.editSave":"Guardar mi versi\xf3n","twin.editText":"Texto de la creencia","twin.veto":"Eso no lo pienso","twin.markedGestures":"cambios marcados: {n}","twin.topicDesign":"Dise\xf1o","twin.topicFrontend":"La interfaz por dentro","twin.topicBackend":"El servidor y sus datos","twin.topicCli":"La terminal","twin.topicTesting":"C\xf3mo se comprueba","twin.topicCopy":"Las palabras","twin.topicWorkflow":"C\xf3mo trabajas con tus agentes","twin.topicTooling":"Las herramientas","twin.topicData":"Los datos","twin.topicOther":"Lo dem\xe1s","twin.consentTitle":"Una sola pregunta","twin.consentBody":"Hay creencias que la m\xe1quina ha deducido sola y que todav\xeda no has mirado. Mientras no digas que s\xed, el fichero que leen tus agentes es exactamente lo que t\xfa firmaste: nada que no hayas escrito habla en tu nombre.","twin.consentCount":"esperando: {n} \xb7 ocupar\xedan en total: {chars} caracteres","twin.consentOver":"con ellas el retrato no cabr\xeda en {cap} caracteres, as\xed que habr\xeda que sacar algo","twin.consentAllow":"Que bajen al fichero","twin.consentRevoke":"Se retira borrando twin.json, sin abrir esto.","twin.proposalsTitle":"Quiere cambiar algo que firmaste","twin.proposalsNote":"Estas las escribiste t\xfa, as\xed que la m\xe1quina no las toca: dice c\xf3mo las dir\xeda ahora y espera.","twin.proposalJoins":"junta estas: {n}","twin.proposalAccept":"Que lo cambie","twin.proposalReject":"D\xe9jalo como est\xe1","twin.graveyardTitle":"Lo que dijiste que no eras","twin.graveyardNote":"No se borra: se queda aqu\xed para que la s\xedntesis no lo vuelva a proponer con otras palabras.","twin.save":"Guardar","twin.saving":"Guardando…","twin.cancel":"Descartar lo marcado","twin.saveFailed":"No se pudo guardar: {detail}","twin.fileTitle":"TASTE.md","twin.fileSize":"{chars} de {cap} caracteres","twin.fileHint":"Es el fichero que leen tus agentes, y la otra puerta para lo mismo: \xe1brelo y borra una l\xednea, y esa frase sale del retrato la pr\xf3xima vez que decidas algo aqu\xed.","twin.fileFull":"No cabe. Hasta que saques algo, lo que decidas se guarda en el cat\xe1logo pero no llega al fichero, y el fichero es lo \xfanico que leen tus agentes.","twin.fileWritten":"escritas ahora mismo: {n}","twin.fileRoom":"Queda sitio para {n} caracteres.","twin.spendTitle":"Lo que ha costado hoy","twin.spendLooks":"miradas: {used} de {cap}","twin.spendTokens":"{input} tokens de entrada \xb7 {output} de salida","twin.spendNone":"Hoy no se ha llamado a ning\xfan modelo.","twin.spendUnmetered":"{n} sin medir: ese proveedor no publica el consumo.","twin.spendDistills":"destilaciones: {n}","twin.spendClassify":"repartos por materia: {n}","twin.spendSynth":"s\xedntesis: {n}","twin.sourcesTitle":"Tus historias con tus agentes","twin.sourcesLead":"Panoma las mide sin abrirlas. Nada se lee hasta que digas que s\xed, y el s\xed es de una en una: leer Claude Code no es leer Codex.","twin.sourcesNone":"En este disco no hay ninguna historia de agente que Panoma sepa medir.","twin.sourceSize":"ficheros: {files} \xb7 {size}","twin.sourceGone":"ya no est\xe1 en este disco","twin.sourceAllow":"Dejar que la lea","twin.sourceRevoke":"Dejar de leerla","twin.sourceNoReader":"todav\xeda no sabemos leerla","twin.sourcesRevokeNote":"Dejar de leerla cierra la puerta y no borra lo que ya entr\xf3: eso lo hace panoma twin forget.","twin.consentMalformed":"Falta decir qu\xe9 fuente y si se permite.","twin.consentUnknown":"Esa fuente no existe en este disco: {source}","twin.mineNoConsent":"Ninguna de tus historias tiene permiso, as\xed que no se ha abierto ni un fichero. Dilo aqu\xed abajo, en tus historias.","twin.mineNoReadable":"Las historias de este disco todav\xeda no se saben leer, as\xed que no hay permiso que valga: no se ha abierto ni un fichero.","twin.mineNoHistories":"En este disco no hay ninguna historia de agente que leer, as\xed que no se ha abierto ni un fichero.","twin.mineButton":"Buscar lo nuevo en mi historial","twin.mineButtonLeft":"Leer mi historial \xb7 quedan {n}","twin.mining":"Leyendo tus historias…","twin.mined":"citas nuevas: {saved} \xb7 ya estaban: {duplicates}","twin.minedNone":"No hay nada nuevo en tus historias desde la \xfaltima vez.","twin.churnTitle":"C\xf3mo se ha movido tu retrato","twin.churnMonth":"{month} — nuevas: {created} \xb7 afinadas: {refined} \xb7 retiradas: {retired}","twin.churnStill":"Este mes no se ha movido: lo que hay ya est\xe1 dicho.","twin.churnOnlyRefined":"Este mes solo se ha reescrito lo que ya hab\xeda: nada nuevo y nada retirado.","twin.projectQuestion":"\xbfCon qu\xe9 se mide lo que se entrega aqu\xed?","twin.projectTitle":"Lo que tus agentes leen aqu\xed","twin.projectLead":"Baja por AGENTS.md a cada sesi\xf3n que abras en esta carpeta. Lo global va en todos tus proyectos; lo dem\xe1s vale solo aqu\xed.","twin.projectLeadUnmanaged":"Lo global vale en todos tus proyectos; lo dem\xe1s, solo aqu\xed. Todav\xeda no baja a tus agentes: este proyecto no tiene el bloque de Panoma en su AGENTS.md.","twin.projectCount":"frases que rigen aqu\xed: {n}","twin.projectOnly":"solo de este proyecto: {n}","twin.projectOnlyHere":"solo aqu\xed","twin.projectNone":"Todav\xeda no hay retrato, as\xed que aqu\xed no se mide nada.","twin.projectNoneHere":"Tu retrato no dice nada que rija en este proyecto.","twin.projectForming":"en formaci\xf3n sobre este proyecto: {n}","twin.projectOpen":"Abrir tu gemelo","twin.spendReads":"lecturas: {used} de {cap}","twin.readsSpent":"Las lecturas de hoy est\xe1n gastadas: {used} de {cap}. Vuelven ma\xf1ana, o sube el tope con PANOMA_READ_BUDGET.","twin.synthesize":"Rehacer el retrato","twin.synthesizing":"Escribiendo…","twin.synthHint":"Lee toda tu evidencia y reescribe lo que la m\xe1quina cree de ti.","twin.synthDone":"nuevas: {created} \xb7 afinadas: {refined} \xb7 retiradas: {retired}.","twin.synthAsks":"Y te pregunta por creencias que firmaste: {n}.","twin.synthSame":"Nada ha cambiado: la evidencia dice lo mismo que la \xfaltima vez.","twin.synthNothing":"Todav\xeda no hay evidencia que sintetizar. Lee tu historial aqu\xed arriba: de ah\xed salen las observaciones de las que sale el retrato.","twin.synthUpToDate":"El retrato ya est\xe1 al d\xeda: no ha entrado evidencia nueva.","twin.synthFailed":"No se pudo escribir el retrato.","twin.citedIn":"en {project}","score.tooFew":"Te ha dicho {shown}. Hacen falta {floor} para que un porcentaje signifique algo: por debajo, una sola correcci\xf3n lo mueve m\xe1s de cinco puntos y hablar\xeda de la \xfaltima creencia que miraste, no de tu gusto.","score.noTrend":"El {rate} % es c\xf3mo est\xe1 hoy, no si mejora: ninguno de los dos meses ya juzgados llega a {floor} creencias, as\xed que la comparaci\xf3n mes a mes todav\xeda no se puede hacer. El mes en curso no entra: sus creencias no se han terminado de mirar.","score.better":"De lo que te dijo el mes pasado has corregido el {recent} %, y de lo del anterior el {previous} %: baja, que es lo \xfanico que quiere decir que el doble est\xe1 aprendiendo.","score.notBetter":"De lo que te dijo el mes pasado has corregido el {recent} %, y de lo del anterior el {previous} %: no baja. Mientras no baje mes a mes, el doble no est\xe1 aprendiendo, y este marcador no va a decir otra cosa.","connect.title":"Conectar un agente por MCP","connect.lead":"MCP es el canal por el que un agente habla con tu cat\xe1logo. Estos son los que hay en esta m\xe1quina: conectar uno le da las seis herramientas —el resumen del proyecto al empezar, la bit\xe1cora y la cola de tareas— y escribe su configuraci\xf3n donde ese agente la lee.","connect.do":"Conectar","connect.again":"Volver a conectar","connect.alreadyOn":"conectado","connect.againCost":"Ya est\xe1 conectado. Volver a conectarlo emite una clave nueva: donde panoma escribe el fichero se actualiza sola, pero si pegaste el bloque a mano en alg\xfan sitio, esa copia dejar\xe1 de funcionar y habr\xe1 que volver a pegarla.","connect.working":"Conectando…","connect.written":"Configuraci\xf3n MCP escrita.","connect.updated":"Se ha actualizado la entrada de panoma que ya hab\xeda.","connect.coexists":"Siguen ah\xed: {list}.","connect.gitWarning":"Ojo: este fichero lleva la clave del agente en claro y git se lo llevar\xeda. A\xf1ade su nombre al .gitignore antes de commitear.","connect.restart":"Reinicia {name} para que la lea.","connect.pasteInto":"Este agente guarda sus servidores MCP en un formato que no vamos a tocar. Pega esto en:","connect.pasteSomewhere":"No sabemos d\xf3nde guarda este agente sus servidores MCP. Pega esto donde los tenga:","connect.copy":"Copiar la configuraci\xf3n MCP","connect.openFile":"Abrir el fichero","connect.opened":"Abierto en {editor}. Pega el bloque, guarda, y reinicia {name}.","connect.copied":"copiado","disconnect.do":"desconectar","disconnect.confirm":"S\xed, desconectar","disconnect.working":"Quitando…","disconnect.losing":"Se ir\xe1 tambi\xe9n lo que {name} anot\xf3 aqu\xed: {n} entrada{s}.","disconnect.nothingLost":"{name} no ha anotado nada todav\xeda.","md.noBlock":"No hay bloque de Panoma en este proyecto; cr\xe9alo primero.","md.notInherited":"Ese fichero no es un heredado de este proyecto.","md.fileGone":"El fichero ya no est\xe1 donde estaba.","md.noFiles":"Este proyecto no tiene AGENTS.md ni CLAUDE.md.","md.inspectLocalOnly":"El repaso lee tu disco: solo funciona con el cat\xe1logo local.","md.repairLocalOnly":"Reparar escribe en tu disco: solo funciona con el cat\xe1logo local.","runs.notFound":"Ejecuci\xf3n no encontrada.","runs.noBranch":"Esta ejecuci\xf3n no dej\xf3 ninguna rama que aplicar.","runs.alreadyRunning":"Ya hay una ejecuci\xf3n en marcha en {name}.","runs.alreadyRunningHint":"Espera a que termine, o m\xedralo en Actividad.","runs.missingPackage":"Falta el nombre del paquete.","runs.noFixForPackage":"{package} no tiene ning\xfan aviso con versi\xf3n corregida en {name}.","runs.noFixes":"{name} no tiene vulnerabilidades con arreglo publicado.","runs.enrichAdvisories":"Ejecuta 'panoma enrich' para refrescar los avisos de OSV.","runs.notADependency":"{package} no est\xe1 entre las dependencias de {name}, o no s\xe9 cu\xe1l es su \xfaltima versi\xf3n.","runs.enrichVersions":"Ejecuta 'panoma enrich' para traer las versiones de los registros.","runs.unsupportedEcosystem":"Todav\xeda no s\xe9 actualizar dependencias de {ecosystem}.","runs.knownFailureHint":"Vuelve a intentarlo con --force si crees que algo ha cambiado.","runs.quarantined":"{package} {version} se public\xf3 hace {age} y la cuarentena de Panoma son {days} d\xedas.","runs.quarantinedHint":"Una versi\xf3n reci\xe9n publicada es donde aparecen los compromisos de cadena de suministro, y casi siempre se retiran en el primer d\xeda o dos. Vuelve a intentarlo m\xe1s adelante, o ahora mismo con --force si sabes lo que haces. El umbral se cambia con PANOMA_CUARENTENA_DIAS.","runs.crashed":"La ejecuci\xf3n se rompi\xf3: {detail}","north.missing":"Falta la frase: escribe qu\xe9 ser\xeda tener este proyecto terminado.","north.tooLong":"Son {n} caracteres y el norte es una l\xednea: cabe hasta {max}. Lo largo es un plan, y para eso est\xe1 el encargo de plan.","north.noIdentity":"Este proyecto todav\xeda no tiene una identidad estable, as\xed que no hay d\xf3nde guardar la frase para que sobreviva a mover la carpeta. Vuelve a escanearlo y prueba otra vez.","move.noNorth":"nadie ha escrito todav\xeda qu\xe9 es \xabterminado\xbb aqu\xed","move.unsavedWork":"{n} aviso de trabajo sin guardar","move.unsavedWork.n":"{n} aviso{s} de trabajo sin guardar","move.noReadme":"no hay ning\xfan README que lo explique","move.neverBuilt":"nadie ha comprobado nunca si todav\xeda compila","move.critiques":"{n} cosa a la vista sin abrir el proyecto","move.critiques.n":"{n} cosa{s} a la vista sin abrir el proyecto","move.idle":"{n} mes parado","move.idle.n":"{n} mes{es} parado","move.advisories":"{n} aviso de seguridad abierto","move.advisories.n":"{n} aviso{s} de seguridad abierto{s}","move.outdated":"{n} dependencia directa atrasada","move.outdated.n":"{n} dependencia{s} directa{s} atrasada{s}","move.lowHealth":"salud {n} de 100","move.longIdle":"{n} mes{es} parado: la pregunta ya no es de mantenimiento"},en:{"watch.off":"The watcher isn’t running: new projects and today’s commits may not show up until you scan again.","catalog.down.title":"The catalog will not open","catalog.down.body":"The app is still up, but with no data. Rename {path} to something else and start again: a fresh one is created, and \xabpanoma scan\xbb fills it. Delete nothing — if it can ever be rescued, it will be rescued from there.","catalog.down.detail":"What the database said: {detail}","error.title":"Something broke while rendering this page","error.body":"Not the catalog — that gets its own notice. Try again, and if it keeps happening, the reason is in the server log.","error.retry":"Try again","meta.description":"Your personal software catalog. Open, review, and keep every project current.","shell.brandHome":"Panoma \xb7 Home","shell.searchPlaceholder":"Search projects, technologies, or agents","shell.openPalette":"Open the command palette","shell.topNav":"Main navigation","shell.sections":"Panoma sections","shell.skipToContent":"Skip to content","shell.localAccount":"Local account","shell.accountNone":"There’s no account or cloud to manage: panoma runs on this computer and the catalog stays here.","shell.ephemeral":"This copy is temporary","shell.ephemeralDetail":"You started it with npx, which keeps it for one command and lets it go. The catalog stays; the command does not. To keep it: npm i -g panoma","shell.pending":"{n} pending","shell.summary":"Catalog summary","shell.summaryProjects":"{n} project{s}","shell.summaryScope":"in your catalog","shell.live":"live","shell.paused":"paused","shell.dormant":"dormant","shell.noGit":"no git","shell.copies":"copies","shell.footerLocal":"Local catalog","shell.footerPrivate":"Private by design","shell.footerSource":"AGPL-3.0 \xb7 source code","shell.language":"Language","shell.hideSidebar":"Collapse menu","shell.showSidebar":"Expand menu","nav.projects":"Projects","nav.unsaved":"Unbacked","nav.searchCode":"Code","nav.credentials":"Keys","nav.agents":"MCP","nav.ai":"AI","nav.packages":"Packages","nav.activity":"Runs","nav.copies":"Copies","nav.bridge":"Bridge","dest.bridge":"The bridge","bridge.title":"Power panoma on, step by step","bridge.titleReady":"Everything is on","bridge.lead":"Every piece of panoma with its state, and a single next step marked. No more guessing commands: what to do now carries an arrow, and the rest waits its turn.","bridge.leadReady":"Catalog, model, agents and hooks are running. From here you just watch the memory breathe — and decide on what agents propose, project by project.","bridge.step.catalog.title":"The catalog","bridge.step.catalog.detail":"projects: {count}","bridge.step.catalog.pending":"Scan a folder with your projects. One command analyzes them and starts this web app.","bridge.step.model.title":"An AI model","bridge.step.model.detail":"connected: {count}","bridge.step.model.pending":"The critic, the distiller and the double need a model. Connect a provider or export a key.","bridge.step.model.go":"Go to the AI screen","bridge.step.agent.title":"A connected agent","bridge.step.agent.detail":"active: {count}","bridge.step.agent.pending":"Connect your agent (Claude Code, Cursor…) so it receives the brief, the memory and the nine tools.","bridge.step.agent.keyUnused":"The key exists but no agent has ever used it: install the config and restart the agent's session.","bridge.step.agent.go":"Go to the Agents screen","bridge.step.hooks.title":"The hooks","bridge.step.hooks.detail":"projects with hooks: {count} of {total}","bridge.step.hooks.pending":"Inside each project you work on: they record activity without the model having to remember, and deliver sleeping notes on their paths.","bridge.step.alive.title":"The memory, alive","bridge.step.alive.detail":"journal entries: {count}","bridge.step.alive.pending":"It turns on by itself once the rest is running: agents start logging, the distiller starts proposing, and you decide.","bridge.restartHint":"After installing, restart the agent's session: an already-open session picks up nothing.","bridge.todayTitle":"Today's numbers","bridge.stat.journal":"Journal","bridge.stat.approved":"Notes served","bridge.stat.sleeping":"Sleeping notes","bridge.stat.pending":"Proposals waiting","bridge.stat.consultations":"Questions to the double","bridge.stat.watcher":"Watcher","bridge.stat.ablation":"Scale (ablation)","bridge.on":"on","bridge.off":"off","bridge.copy":"copy","bridge.copied":"copied","bridge.step.hooks.install":"Install in every project","bridge.step.hooks.installing":"Installing the hooks…","bridge.hooksDone":"Done — hooked: {installed} \xb7 no repository: {noRepo} \xb7 foreign left alone: {foreign} \xb7 failures: {failed}","bridge.hooksAlt":"Or from the terminal, project by project:","bridge.hooksNoCli":"The server cannot find the panoma command: install from the terminal with the command shown.","projectHooks.on":"Hooks installed: this project's journal writes itself.","projectHooks.off":"No hooks: the catalog only learns what the agent remembers to tell it.","projectHooks.install":"Install them","bridge.scaleHint":"The fine measure — whether memory actually reduces corrections — lives in GET /api/scale.","nav.disk":"Disk","nav.twin":"Twin","nav.hidden":"Hidden","dest.agents":"MCP: connect your agents","dest.unsaved":"Unbacked work","dest.disk":"Disk space","dest.twin":"Your twin: the portrait of your taste","dest.searchCode":"Search the code","dest.credentials":"Credentials in git history","dest.hidden":"Hidden & excluded","dest.ai":"What Panoma thinks with","palette.aria":"Command palette","palette.placeholder":"Find a project or type an action…","palette.searchAria":"Search the catalog","palette.loading":"loading the catalog…","palette.noMatch":"Nothing matches “{query}”.","palette.results":"{n} result{s}","palette.groupProjects":"Projects","palette.groupActions":"Actions","palette.groupGoTo":"Go to","palette.openFolderOf":"Open {name}’s folder","palette.searchEverywhere":"Search every project’s code for “{query}”","palette.opening":"opening {name}…","palette.openFailed":"Couldn’t open it.","palette.unreachable":"Couldn’t reach the server.","palette.enterEditor":"↵ open in the editor","palette.enterCard":"↵ open the project page","palette.openTerminalOf":"Open a terminal in {name}","palette.openCardOf":"Open {name}’s project page","palette.keysMove":"↑↓ move","palette.keysOpen":"↵ choose","palette.keysClose":"esc close","home.emptyKicker":"Empty catalog","home.emptyTitle":"Nothing scanned yet","home.emptyBody":"Scan a folder of projects to fill the catalog. Scanning runs locally and stores metadata only: your code never leaves this disk.","activityKind.change":"change","activityKind.decision":"decision","activityKind.note":"note","activityKind.blocker":"blocker","taskState.open":"open","taskState.in-progress":"in progress","taskState.done":"done","taskState.discarded":"discarded","severity.critical":"critical","severity.high":"high","severity.medium":"medium","severity.low":"low","severity.unknown":"unknown","run.pending":"pending","run.running":"running","run.proposed":"proposed","run.failed":"failed","run.no-changes":"no changes","run.applied":"applied","run.discarded":"discarded","risk.unversioned":"not under version control","risk.no-commits":"repository with no commits at all","risk.no-commits.n":"{n} file{s} and not a single commit","risk.no-remote":"no remote \xb7 {n} commit only on this disk","risk.no-remote.n":"no remote \xb7 {n} commit{s} only on this disk","risk.unpushed":"{n} commit not pushed","risk.unpushed.n":"{n} commit{s} not pushed","risk.uncommitted":"{n} file not committed","risk.uncommitted.n":"{n} file{s} not committed","risk.untracked":"{n} not added to git","risk.stashes":"{n} stash saved","risk.stashes.n":"{n} stash{es} saved","risk.behind":"{n} commit to pull","risk.behind.n":"{n} commit{s} to pull","store.kicker":"Explore","store.title":"Discover what you’ve built","store.subtitle":"Your personal software catalog. Open, review, and keep every project current.","store.spotlight":"Highlights","store.review":"Review","filter.all":"All","filter.attention":"Attention","filter.favorites":"Favorites","filter.notMine":"Not mine","filter.web":"Web","filter.mobile":"Mobile","filter.backend":"Backend","filter.tools":"Tools","filter.ai":"AI","filter.other":"Other","store.filterAria":"Filter projects","store.hideNames":"Hide names and icons","store.showNames":"Show names and icons again","store.hidden":"Project {n}","share.abrir":"Share my panorama","share.cerrar":"Close","share.preview":"Preview of the card","share.titulo":"{n} project{s} built.","share.proyectos":"projects in total","share.tecnologias":"technologies","share.commits":"commits","share.agentes":"of history with agents","share.activos":"still moving","share.salud":"Health of each project","share.saludBien":"Healthy","share.saludRevisar":"Review","share.saludAtencion":"Attention","share.more":"+{n} more","share.local":"Local-first \xb7 Your data, on your disk.","share.idioma":"Image language","share.usuario":"your handle","share.usuarioVacio":"left out","share.conIconos":"Include my projects’ icons and names","share.descargar":"download the image","share.copiarTexto":"copy the text","share.textoCopiado":"copied","share.image.idle":"share image","share.image.preparing":"preparing image…","share.image.copied":"image copied","share.image.downloaded":"image downloaded","share.image.failed":"couldn’t share image","share.x.idle":"open directly on X","share.x.preparing":"opening X…","share.x.copied":"X opened \xb7 paste the image","share.x.downloaded":"X opened \xb7 upload the image","share.x.failed":"couldn’t open X","share.nota":"Share image opens the system menu. X opens the composer directly and copies the PNG for you to paste; Panoma uploads nothing.","share.texto":"{n} project{s} built — my local control center with {domain}.","store.sortLabel":"Sort projects","store.sortRecent":"Most recent","store.sortName":"Name","store.sortHealth":"Healthiest","store.viewAria":"Catalog view","store.viewGrid":"Grid view","store.viewList":"List view","store.browseTitle":"Browse projects","store.total":"{n} project{s} in total","store.noResults":"No projects found","store.noResultsBody":"Try another search or switch the selected filter.","store.clearFilters":"Clear filters","store.justHidden":"“{name}” is out of the catalog.","store.undoHide":"undo","store.seeHidden":"see hidden","store.showing":"Showing {shown} of {total} project{totals}","store.lastCommit":"Last commit {when}","store.workedOn":"You worked on this project {when}.","store.openProject":"Open project","store.proposalsWaitingOne":"1 proposal to decide on","store.proposalsWaitingMany":"{n} proposals to decide on","store.proposalsBody":"The change is made and tested. Nothing gets applied until you say so.","store.resume":"Pick up where you left off","store.editorShort":"editor","store.openingEditor":"opening…","store.openedEditor":"✓ opened","store.openNamedInEditor":"open {name} in the editor","store.unreachable":"Couldn’t reach the server.","store.attention":"Needs attention","store.attentionBody":"Projects that need your review.","store.viewAll":"View all","store.allClear":"Everything is up to date.","store.viewAllIssues":"See all {n} project{s} with issues","store.depsBehind":"{n} outdated deps","store.depsBehindRatio":"{n}/{total} outdated dep{s}","store.depsUnchecked":"dependencies not checked","summary.kind.mobileApp":"Mobile app","summary.kind.webApp":"Web app","summary.kind.cli":"Command-line tool","summary.kind.package":"Publishable package","summary.kind.backend":"Backend service","summary.kind.container":"Containerized service","summary.kind.project":"Project","summary.builtWith":"{kind} in {stack}","summary.uses":"uses {list}","summary.publishedOn":"published on {list}","summary.writtenBy":"{share}% of the history written by {agent}","summary.and":"and","store.noticeOne":"1 advisory","store.noticesMany":"{n} advisorie{s}","store.commitCount":"{n} commit{s}","store.noAlerts":"No alerts","store.open":"Open","store.openNamed":"Open {name}","store.favoriteAdd":"Add {name} to favorites","store.favoriteRemove":"Remove {name} from favorites","store.hideNamed":"Hide {name}","store.noStack":"No stack detected","store.builtWith":"A local project built with {tech}.","store.detected":"A local project found in your catalog.","catalog.title":"Project catalog","catalog.count":"{n} project{s}","catalog.countOne":"1 project","catalog.filterPlaceholder":"Filter the catalog","catalog.category":"Category","catalog.colProject":"Project","catalog.colHealth":"Health","catalog.colStack":"Stack","catalog.colActivity":"Last activity","catalog.rowsAria":"Catalog projects","catalog.hint":"One click shows the details. Two open the project.","catalog.openHandle":"Open {name}’s page — or double-click","catalog.opening":"Opening the project…","catalog.healthOf":"Health {n} out of 100","catalog.noHealth":"Not measured","catalog.detailsOf":"Details for {name}","catalog.close":"Close the details","catalog.repository":"Repository","catalog.remote":"Has a remote copy","catalog.localOnly":"Only on this disk","catalog.noGit":"No git","catalog.size":"Size","catalog.commits":"Commits","catalog.origin":"Origin","catalog.openIn":"Open in","catalog.editor":"Editor","catalog.editorSub":"Edit the code","catalog.terminal":"Terminal","catalog.terminalSub":"A terminal in this folder","catalog.folder":"Folder","catalog.folderSub":"Browse the files","catalog.fullDetail":"Open the full project page","catalog.emptyTitle":"No project selected","catalog.emptyBody":"Pick one from the list and its details show up here.","catalog.needsReview":"Needs review","catalog.agentSub":"Agent, in a terminal","catalog.appSub":"Desktop app","catalog.agentBroken":"Installed, but it does not run","catalog.reviewUnsaved":"See what is unsaved","catalog.reviewSecurity":"See the security advisories","catalog.reviewDeps":"See the outdated dependencies","state.active":"Active","state.paused":"Paused","state.dormant":"Dormant","state.no-git":"No git","origin.foreign":"not yours","origin.forked":"forked","origin.template":"template","origin.templateTitle":"A tool generated it, and it hasn’t been touched since.","origin.startedBy":"Started by {name}. Open the project page to see where it comes from.","origin.openDetail":"Open the project page to see where it comes from.","today.title":"Since you last looked","today.since":"since {when}","today.last24h":"in the last 24 hours","today.nothing":"Nothing new {period}. The day is yours.","today.commitOne":"{n} commit","today.commitMany":"{n} commit{s}","today.fromAgents":"({n} from agents)","today.inProject":"in {project}","today.agentNoted":"{name} logged {n}","today.born":"New in the catalog:","today.resume":"Resume","today.opening":"Opening…","today.openFailed":"Didn’t work","today.openNamed":"Open {name} in the editor","today.waitingOne":"1 waiting on you","today.waitingMany":"{n} waiting on you","today.inProjectsOne":"{c} in 1 project","today.inProjectsMany":"{c} in {n} project{s}","today.bornOne":"1 new project","today.bornMany":"{n} new project{s}","today.expand":"Show the daily brief","today.collapse":"Collapse the daily brief","today.quiet":"Nothing new","today.attempts":"{n} attempt{s}","proposals.waiting":"Waiting on you","proposals.readyOne":"One proposal is ready and undecided","proposals.readyMany":"{n} proposals are ready and undecided","proposals.branchNote":"The change is made and tested on a branch of its own. Nothing touches your folder until you say so.","proposals.fallbackName":"proposal","proposals.andMore":"{n} more","proposals.testsGreen":"tests passing","proposals.unverified":"unverified","changes.question":"What happened here","changes.latest":"Last thing, {when}","changes.nothingYet":"Nothing has happened yet","changes.totalCommits":"{n} commit{s} in total","changes.window24h":"In the last 24 hours","changes.window48h":"The day before","changes.windowBefore":"Before that","changes.signedBy":"Signed by {agent} with a Co-Authored-By trailer","changes.unsignedNote":"Commits with no tag carry nobody’s signature. That doesn’t mean you wrote them.","changes.moreOne":"There’s 1 more among the twenty the catalog keeps.","changes.moreMany":"There are {n} more among the twenty the catalog keeps.","changes.empty":"No recent commits to show yet.","changes.agentLog":"See agent activity","task.title":"Jot it down","task.openOne":"{n} open","task.openMany":"{n} open","task.placeholder":"tomorrow, fix the login","task.fieldLabel":"What needs doing in this project","task.save":"jot it","task.saving":"jotting…","task.mcpNote":"Panoma doesn’t manage tasks, it keeps them. Your agent reads them over MCP when it enters the project, picks them up, and closes them itself.","task.saveFailed":"Couldn’t jot that down.","task.byHuman":"you","task.unreachable":"Couldn’t reach the catalog.","assignment.question":"What do we do with this?","assignment.title":"Hand it to your agent","assignment.note":"Panoma writes the assignment from what it knows about the project. Open it in your terminal and your agent starts now, on this machine; add it to the queue and nothing happens until it next enters the project; or copy it and take it anywhere.","assignment.see":"see the assignment","assignment.copy":"copy","assignment.copied":"copied","assignment.copyFailed":"Couldn’t copy. Open “see the assignment” and select it by hand.","assignment.send":"add to the queue","assignment.sending":"queueing…","assignment.sendTitle":"It waits until your agent next enters this project. Nothing runs right now","assignment.launch":"open in your terminal","assignment.launching":"opening…","assignment.launchTitle":"Opens a terminal on this machine with {agent} inside the project and the assignment loaded: it starts working as soon as it opens","assignment.launched":"{agent} is working in your terminal.","assignment.launchFailed":"Couldn’t open the terminal.","assignment.queued":"in the queue","assignment.queuedNote":"Queued. Your agent picks it up when it enters the project.","assignment.withdraw":"take it back","assignment.withdrawing":"taking it back…","assignment.withdrawn":"Taken back. Your agent won’t see it.","assignment.withdrawFailed":"Couldn’t take it back.","assignment.failed":"Couldn’t add it to the queue.","assignment.resume":"Tell me what it takes to pick it back up","assignment.resume.promise":"Have it try to start the project, note every stumble, and say where the work left off.","assignment.competitors":"Find its competitors","assignment.competitors.promise":"Who solves the same thing today — alive or dead — and what gap is really left.","assignment.plan":"Draft an improvement plan","assignment.plan.promise":"What to touch first and why, crossing the code with what panoma already measures.","assignment.presentable":"Get it fit to show","assignment.presentable.promise":"An honest README, so an outsider gets it in two minutes.","assignment.review":"Fix what shows without opening anything","assignment.review.promise":"Stray colours and corners, images that don’t say what they show, broken links: what panoma saw by reading the folder.","assignment.securityTitle":"Close the worst vulnerability","assignment.securityPromise":"Panoma prepares the fix on a separate copy of the project and leaves the proposal waiting for you.","assignment.depsTitle":"Bring its dependencies up to date","assignment.depsPromiseOne":"{n} direct dependency behind — pick which, and panoma brings you a proposal.","assignment.depsPromiseMany":"{n} direct dependencie{s} behind — pick which, and panoma brings you a proposal.","assignment.depsChoose":"pick which","sites.summaryOne":"{n} project, looking in {where}{extra}","sites.summaryMany":"{n} project{s}, looking in {where}{extra}","sites.andMore":"and {n} more","sites.manage":"change","sites.close":"close","sites.countOne":"{n} project","sites.countMany":"{n} project{s}","sites.missing":"the folder is gone","sites.remove":"remove","sites.removeConfirm":"yes, remove it and its projects: {n}","sites.removed":"No longer watched, and its projects are retired: {n}. Add it back and they return.","sites.add":"add","sites.adding":"searching…","sites.addedOne":"Added. Found 1 project.","sites.addedMany":"Added. Found {n} project{s}.","sites.placeholder":"~/Documents","sites.fieldLabel":"Folder you also want watched","sites.note":"Panoma only finds projects inside these folders. One living outside will never show up, no matter how long you wait.","sites.search":"search my disk","sites.searching":"searching…","sites.searchHint":"Walks your home folder and suggests where you have more projects.","sites.searchNone":"Found no projects outside what's already watched.","sites.failed":"Didn’t work.","ai.title":"What Panoma thinks with","ai.intro":"Panoma never calls a model on its own: only when you ask it to — describing a project, drafting an assignment. Here you pick which one.","ai.loading":"reading the configuration…","ai.loadingSlow":"still reading… the first time takes longer.","ai.loadFailed":"Couldn’t read the AI configuration ({status}).","ai.loadTimeout":"The configuration took too long to arrive.","ai.retry":"retry","ai.retrying":"retrying…","ai.brokenTitle":"The configuration can’t be read","ai.fileNote":"The configuration lives in {path}, with 0600 permissions. That stops another user of this machine from reading it, but it isn’t encrypted: any process running as you can open it. If you’d rather keep nothing on disk, export the key as an environment variable or use an agent you already have installed.","ai.remote":"The catalog is remote: the model is configured on the machine that serves it.","ai.activeTitle":"Active provider","ai.none":"None yet. Pick one below.","ai.defaultModel":"default model","ai.modelLabel":"model","ai.modelPlaceholder":"the provider’s default","ai.modelSaved":"Now using {model}.","ai.modelCleared":"Back to the provider’s default model.","ai.modelsFetch":"fetch theirs","ai.modelsLoading":"asking…","ai.modelsOpen":"see the models","ai.modelsLive":"Straight from the provider, right now: {n}.","ai.modelsHint":"Suggestions of ours, which may be stale: {n}. Hit “fetch theirs” for the real list — or type any name you want.","ai.modelsEmpty":"We ship no suggestions for this provider. Hit “fetch theirs” to ask it — or type the name by hand.","ai.modelsNoMatch":"Nothing here goes by that name. It saves exactly what you type.","ai.modelsNone":"This provider doesn’t publish a catalog. Type the model name by hand.","ai.redirected":"An environment variable pointed this provider somewhere else. Your key goes there.","ai.sourceEnv":"from the environment","ai.sourceFile":"from the file","ai.sourceAgent":"your agent’s session","ai.sourceKey":"{source} \xb7 {key}","ai.sourceLogin":"signed in","ai.connected":"signed in","ai.notConnected":"not signed in","ai.login":"sign in","ai.loginAgain":"sign in again","ai.loggingIn":"waiting…","ai.loginWaiting":"A tab opened to sign in to {name}. I’ll wait here.","ai.loginDone":"Signed in to {name}.","ai.loginFailed":"Couldn’t sign in.","ai.loginTimeout":"Timed out waiting for the browser to come back.","ai.logout":"sign out","ai.test":"test it","ai.testing":"testing…","ai.testOk":"{model} answered in {s}s.","ai.testHint":"Save a key above, or pick an agent you already have installed.","ai.failed":"Didn’t work.","ai.nowUsing":"Now using {name}.","ai.forgotten":"Key forgotten.","ai.forgottenButEnv":"Key forgotten from the file, but {var} is still set in the environment.","ai.subscriptionTitle":"Use a subscription you already pay for","ai.subscriptionNote":"If you already pay for Claude Pro or ChatGPT and have their tool signed in, Panoma hands the work to it. It stores no token and never sees your credentials: the subscription is used by your own tool, on your machine.","ai.installed":"installed","ai.notInstalled":"couldn’t find “{command}”","ai.keysTitle":"Connect with a key","ai.fromEnv":"{var} in the environment","ai.stored":"saved {key}","ai.noKey":"no key","ai.keyPlaceholder":"paste the key","ai.keyLabel":"{name} key","ai.save":"save","ai.saving":"saving…","ai.forget":"forget","ai.getKey":"get one","ai.inUse":"in use","ai.choose":"use this","ai.choosing":"switching…","ai.cantUse":"Needs a saved key or the agent installed.","search.fieldLabel":"Text to find in the code","search.submit":"search","search.searching":"searching…","search.scopeNote":"Literal text, case-insensitive. Only files tracked by git are read, so an uncommitted file won’t show up.","search.scopeVendors":"Third-party dependencies are skipped even when git tracks them — it isn’t code you wrote:","search.matchOne":"1 match","search.matchMany":"{n} matches","search.inProjectOne":"in 1 project","search.inProjectMany":"in {n} project{s}","search.reposSearched":"{n} repositor{y} searched","search.skipped":"{n} with no git, couldn’t be searched","search.skippedTitle":"Folders without git: there is nothing to ask.","search.clickToOpen":"click a match to open it in the editor","search.noMatch":"No file tracked by git contains “{query}”.","search.openAt":"Open {file} at line {line}","search.truncated":"Only the first {n} are shown. Open the folder to see them all.","search.openFolder":"Open the folder","search.openFolderAria":"Open the project’s folder","search.failed":"Couldn’t run the search.","search.openFailed":"Couldn’t open it.","search.unreachable":"Couldn’t reach the server.","open.folder":"open folder","open.editor":"open in the editor","open.terminal":"open a terminal here","open.busy":"opening…","open.doneFolder":"✓ opened","open.done":"✓ opened","open.unreachable":"Couldn’t reach the server.","open.openWith":"Open in {name}","open.moreDestinations":"More places to open it","open.defaultDestination":"Default","copy.command":"Copy “{command}”","copy.done":"copied","project.health":"Health {n}","project.healthTitle":"Health {n} out of 100","project.heroStatus":"Status","project.heroActivity":"Activity","project.heroCommits":"Commits","project.heroHealth":"Health","project.commitOne":"{n} commit","project.commitMany":"{n} commit{s}","project.sections":"Project sections","project.navAll":"All","project.navSummary":"Overview","project.navChanges":"What happened","project.navResume":"Resume","project.navAssignments":"Assignments","project.navDeps":"Maintenance","project.navAgents":"Agents","project.navMd":"The .md","project.mdQuestion":"Is what your agents read true?","project.mdTitle":"The instructions file","project.mdCost":"{n} tokens of context every session","project.mdNone":"There’s no AGENTS.md or CLAUDE.md here — the two files agents read on their own when they enter: they come into this project knowing nothing about it.","project.mdOnlyInherited":"This project has no AGENTS.md or CLAUDE.md of its own, but it inherits what the folders above say: that is what your agents read when they come in here.","project.mdNoneHint":"The button creates AGENTS.md with a context block —stack, commands, advisories, tasks— that Panoma keeps fresh on its own.","project.mdFileMeta":"{tokens} tokens \xb7 {lines} lines","project.mdManaged":"Panoma block","project.mdClean":"Everything it claims exists.","project.mdFindingOne":"1 claim that is no longer true","project.mdFindings":"{n} claims that are no longer true","project.mdLine":"line {n}","project.mdPathMissing":"does not exist in the project","project.mdPathMovedTo":"missing; there is one at {path}","project.mdScriptMissing":"not in the package.json scripts","project.mdScriptNear":"not in the scripts; there is {names}","project.mdBlockBroken":"the Panoma block never closes: fix it by hand","project.navAccounts":"Accounts","accounts.copy":"copy","accounts.copied":"copied","accounts.editList":"Edit the list","accounts.title":"Accounts & links","accounts.question":"Which account was this on?","accounts.hint":"What is missing when you come back: the deploy email, the domain, the usual dashboard.","accounts.empty":"Nothing written down yet. The deploy account email, the domain registrar, the dashboard you can never find…","accounts.addFirst":"Write down the first","accounts.edit":"Edit","accounts.addRow":"Add another","accounts.save":"Save","accounts.saving":"Saving…","accounts.cancel":"cancel","accounts.remove":"Remove entry","accounts.label":"What it is (Vercel, domain, Stripe…)","accounts.email":"account email","accounts.note":"note","accounts.noSecrets":"No passwords or keys: this travels in the clear through the catalog. Secrets belong in the system Keychain.","accounts.badUrl":"One of the links doesn’t make sense. A domain (vercel.com/x), a full address (https://…) or a machine with its port (localhost:3000) all work. Nothing was saved.","accounts.needsLabel":"There’s a row with details and no name. Say what it is —Vercel, domain, Stripe— or drop it with the \xd7. Nothing was saved.","check.title":"Does it still build?","check.none":"Nobody has checked yet. The health above deduces; this proves it: install and build run in a separate worktree, isolated, without touching your folder.","check.run":"Check it now","check.rerun":"Check again","check.running":"Installing and building in a separate worktree… this can take a few minutes. Your folder is untouched.","check.ok":"It builds","check.broken":"The build is broken","check.inconclusive":"No verdict","check.checkedOn":"checked on {date} \xb7 {seconds}s","check.dirty":"There were uncommitted changes: the verdict is about the last commit.","project.mdVersionWrong":"the project runs {v}","project.mdEnvMissing":"the env example does not declare it","project.mdEnvNear":"not declared in the env example; there is {names}","project.mdLead":"It is the first thing your agents read when they enter this project. Panoma keeps what it says true.","project.mdInitButton":"Create AGENTS.md with the context","project.mdAddBlockButton":"Add the context block","project.mdSyncButton":"Regenerate the block","project.mdApplyWorking":"Writing…","project.mdInitDone":"Done: {file} created with the context block. Your agents will read it next session, and Panoma keeps it fresh on its own.","project.mdBlockAdded":"Done: the context block is now in {file}. It regenerates itself when reality changes.","project.mdSyncDone":"Block regenerated in {file}.","project.mdSyncSame":"The block was already up to date: nothing to change.","project.mdBridgeMissing":"Claude Code will not read this file: it only loads CLAUDE.md, and this project has none. The button below also writes the bridge — a one-line CLAUDE.md that imports AGENTS.md.","project.mdBridgeWritten":"And CLAUDE.md was written with the @AGENTS.md import, which is all Claude Code loads.","project.mdTerminalAlt":"or in the terminal:","project.mdFindingsIntro":"This is what the file claims that is no longer true. The button fixes the ones with a hint; the rest you fix by editing the file, and Panoma re-checks it on save.","project.mdReviewTitle":"The model's opinion","project.mdReviewAsk":"Ask the model's opinion","project.mdReviewAsking":"Reading the file…","project.mdReviewAgain":"ask again","project.mdReviewStale":"The file changed after this opinion: ask again if you want fresh judgement.","project.mdReviewNote":"Contradictions, redundancy and what is missing: what the mechanical checker cannot see.","project.mdInherited":"Also inherits, from the folders above","project.mdInheritedMeta":"{tokens} tokens","project.mdInspectButton":"Check it now","project.mdInspectWorking":"Checking against the disk…","project.mdRepairButton":"Fix the obvious ({n})","project.mdRepairWorking":"Fixing…","project.mdRepairDone":"{n} fix{es} applied. {m} left for your hand.","project.mdRepairDoneAll":"{n} fix{es} applied. None left.","project.mdInheritedNote":"Your agents read these too, from the folders above. The check shows what each one claims that is no longer true, line by line.","project.mdTouches":"Latest touches to the file","project.mdTouchAnon":"unsigned","project.mdTruncated":"The project has more files than the index holds: paths were not checked.","project.navDetails":"Details","project.moreActions":"More project actions","project.copyPath":"Copy path","project.pathCopied":"Path copied","project.pathCopyFailed":"Couldn’t copy the path","project.rescan":"Scan it again","project.rescanning":"Updating…","project.rescanned":"Project updated","project.rescanFailed":"Couldn’t update it","project.show":"show","project.hide":"hide","project.showTitle":"Put it back in the main view","project.hideTitle":"Take it out of the main view. It stays in the catalog.","project.remove":"remove from the catalog","project.removeTitle":"Take it out of the catalog. No folder gets deleted.","project.actionFailed":"Didn’t work.","project.unreachable":"Couldn’t reach the server.","project.removeHeading":"Remove {name} from the catalog","project.removeBody":"Panoma will forget this project and no scan will bring it back. Its page, its analysis history, and anything you wrote about it here are gone.","project.removeSafeStrong":"Your folder is left alone.","project.removeSafeBody":"The code, the git history, and everything inside stay exactly where they are. This only erases what Panoma knew.","project.removeTypeBefore":"Type","project.removeTypeAfter":"to confirm","project.removeTypeAria":"Type {name} to confirm","project.cancel":"Cancel","project.removing":"removing…","project.removeConfirm":"Remove from the catalog","project.overviewTitle":"Project overview","project.whatChanged":"What changed","project.recentActivity":"Recent activity","project.today":"today","project.whereProtected":"Where it’s backed up","project.versionControl":"Version control","project.withRemote":"Has a remote","project.withoutRemote":"No remote","project.withoutGit":"No Git","project.historyCopied":"The history has a copy off this disk.","project.onlyHereOne":"1 commit lives only on this disk.","project.onlyHereMany":"{n} commit{s} live only on this disk.","project.whatNeedsAttention":"What needs attention","project.maintenance":"Maintenance and health","project.noMajorIssues":"Nothing important is wrong.","project.issuesOne":"1 thing needs a look.","project.issuesMany":"{n} thing{s} need a look.","project.outOf100":"out of 100","project.commitChartAria":"Commits over the last seven days","project.attnNoRemote":"No remote repository","project.attnNoRemoteDetail":"This project exists only on this disk.","project.attnNoRemoteAction":"Set up a remote","project.attnAdvisoriesOne":"1 security advisory","project.attnAdvisoriesMany":"{n} security advisorie{s}","project.attnAdvisoriesDetail":"Some dependencies need reviewing.","project.attnAdvisoriesAction":"Review advisories","project.depsUnchecked":"not checked","project.depsUncheckedWhy":"{file} could not be read, so the exact versions are unknown and nothing was asked about advisories.","project.attnUnchecked":"Advisories have not been checked","project.attnUncheckedDetail":"{file} cannot be read, and without exact versions there is nothing to ask. The zero below does not mean it is clean.","project.attnUncheckedAction":"See dependencies","project.attnUnenriched":"Nobody has asked about the dependencies","project.attnUnenrichedDetail":"Up-to-date versions and security advisories are asked of the registries, and this project has never asked. The zeros below do not mean it is clean: run {cmd}.","project.attnUnenrichedAction":"See dependencies","project.depsUnenrichedWhy":"This project has never been enriched: the registries were never asked about versions or advisories, so there is no answer to show.","project.attnOutdated":"{n}/{total} dependenc{totalies} behind","project.attnOutdatedDetail":"Updating raises the project’s health.","project.attnOutdatedAction":"See dependencies","project.allGood":"All clear","project.allGoodDetail":"Nothing risky right now.","project.whoBuilt":"Who built it","project.ofHistory":"of the history","project.agentsShare":"Agents: {n}% of the history","project.noAgentCommits":"No agent commits detected.","project.builtWith":"What it’s built with","project.kindLanguage":"Language","project.kindFramework":"Framework","project.seeFullStack":"See the full stack","project.fullStackTitle":"The whole technology stack","project.signalsDetected":"{n} signal{s} detected","project.confidence":"{n}% confidence","project.resumeQuestion":"Get back in without digging","project.resumeTitle":"How to pick this up again","project.noCommands":"No start-up commands found in this folder.","project.lastYouDid":"What you did last","project.howToStart":"How to start it","project.whatItNeeds":"What it needs installed","project.runtimeChecking":"checking…","project.runtimeHave":"you have {version}","project.runtimeMissing":"not installed","project.missingEnv":"Environment variables with no value ({n})","project.envDeclaredIn":"Declared in","project.envNoValue":"and with no value in your","project.envWhy":"It’s the most common reason an old project starts up and dies on the first screen.","purpose.install":"install","purpose.start":"start","purpose.tests":"tests","purpose.build":"build","project.protectQuestion":"Protect your work","project.protectTitle":"Some changes exist only on this disk","project.protectBody":"Panoma publishes nothing for you: it leaves the command ready and you decide when to run it.","project.depsQuestion":"Keep it healthy","project.depsTitle":"Dependencies","project.depsInstalled":"{n} installed","project.depsDirect":"{n} direct","project.depsOutdated":"{n} behind","project.depsDirectAria":"Direct {ecosystem} dependencies","project.depsTransitiveAria":"Transitive {ecosystem} dependencies","project.depsTransitiveOne":"1 transitive, pulled in by a direct one","project.depsTransitiveMany":"{n} transitive, pulled in by the direct ones","project.depDev":"Dev","project.depDirect":"Direct","project.depTransitive":"Transitive","project.depUpToDate":"Up to date","project.noDeps":"No dependencies detected.","project.propose":"propose","project.proposing":"testing…","project.proposeDone":"Done.","project.alreadyFailed":"Tried before, and it failed:","project.tryAnyway":"try anyway","project.proposeRefused":"The server did not accept the proposal ({status}).","project.proposeUnreadable":"The server answered something this button cannot read ({status}).","project.runUnreachable":"Couldn’t reach the catalog.","project.securityQuestion":"Review what matters","project.securityTitle":"Security","project.fixedIn":"Fixed in {versions}","project.detailsQuestion":"Technical context","project.detailsTitle":"Project profile","project.whatItIs":"Purpose","project.noDescription":"There is not enough written context to explain what this project is for.","project.detected":"Detected: {text}","project.aiExplain":"explain what it’s about","project.aiReading":"reading the project…","project.aiWriting":"writing…","project.aiRewrite":"write it again","project.aiWrittenBy":"written by {model}","project.aiSomeModel":"a model","project.aiWrittenIn":"written in {lang}","lang.es":"Spanish","lang.en":"English","project.aiNoteBefore":"Uses whichever model you connected with","project.aiNoteAfter":"It gets the README, the detected stack, and the latest commits, and it isn’t allowed to claim anything that isn’t in them. It doesn’t replace the project description: it’s kept separately.","project.whereFrom":"Provenance","project.originOwn":"You made it","project.originForked":"It started from someone else’s work","project.originForeign":"You didn’t start it","project.originTemplate":"A template generated it","project.originUnknown":"No way to tell","project.originEvidence":"Signals supporting this result","origin.remote-foreign":"the remote lives in {value}’s account, not yours","origin.first-commit-foreign":"the first commit was made by {value}","origin.license-foreign":"the licence belongs to {value}","origin.history-restarted":"the git history starts with you, so it was restarted when the folder was copied","origin.your-share":"{value}% of the history is yours","origin.zip-suffix":"the folder ends in “-{value}”, the way GitHub names its ZIPs","origin.scaffold-first-commit":"the first commit was written by {value}","origin.only-commit":"and it is the only one: nobody has touched it since","origin.commit-count":"and the history has {n} commit{s}","origin.container-yours":"you started the repository that contains it ({value})","origin.first-commit-yours":"the first commit is yours ({value})","origin.all-history-yours":"the whole history is yours ({n} commit{s})","origin.remote-yours":"the remote is in your account ({value})","origin.scaffold-continued":"it started from {value} and you carried it on","origin.zip-suffix-own":"the folder ends in “-{value}”, the way GitHub serves its ZIPs: it probably started as a download","origin.zip-suffix-none":"the folder ends in “-{value}”, which is how GitHub names a “Download ZIP”","origin.manifest-repo":"the manifest points at {value}","origin.readme-foreign":"the README introduces itself as somebody else’s material: “{value}”","origin.no-own-repo":"and there is no repository of its own where it could have started","origin.no-repo":"there is no repository: with no history there is no way to know who started it","project.noOriginEvidence":"Panoma did not find enough evidence to support a provenance result.","project.localDataQuestion":"What Panoma measured","project.localData":"Local inventory","project.primaryLanguage":"Primary language","project.notDetected":"Not detected","project.versionControlRemote":"Git \xb7 remote copy","project.versionControlLocal":"Git \xb7 only on this computer","project.versionControlNone":"No Git","project.versionControlUnknown":"Not checked","project.firstSeen":"In the catalog since","project.fileCount":"Source files","project.path":"Path","project.branch":"Branch","project.lastScan":"Last scan","project.size":"Size","project.files":"{n} file{s}","project.logQuestion":"Coordinated work","project.logTitle":"Agent activity","project.logMore":"and more: {n}","project.logFiles":"files: {n}","project.logbook":"Logbook","project.launches":"In your terminal","project.launchOf":"redacted assignment","project.logEmpty":"No agent has written anything here over MCP yet.","project.logEmptyHow":"Connect one to this project and whatever it notes down — changes, decisions, blockers — gets written here, for whoever comes by three months from now.","project.tasks":"Tasks","project.proposals":"Proposals","project.servicesQuestion":"Where it lives","project.servicesTitle":"Services and distribution","project.servicesEmpty":"No services or distribution targets were detected.","project.noTechnologies":"No technologies have been detected yet.","project.cleanupQuestion":"Cleanup","project.cleanupTitle":"Unused assets","project.assetsSearch":"find unused assets","project.assetsReading":"reading the code…","project.assetsSlow":"It reads every source file in the project, so it takes a few seconds.","project.assetsFailed":"Couldn’t analyze it.","project.assetsStats":"{n} assets analyzed \xb7 {platform} owned by the platform (not checked) \xb7 {sources} source files read","project.assetsAllUsed":"Every asset is mentioned somewhere in the code.","project.assetsUnused":"{n} unreferenced","project.assetsDynamic":"In {dirs} the code builds its paths piece by piece, so those folders stay out of the analysis: a file can be in use without its name ever appearing.","project.assetsCaveat":"“Unreferenced” means the file’s name appears in no source file. That’s a hint, not proof — check before you delete anything.","project.updated":"Updated {when}","project.codeSize":"{size} of code","project.backToCatalog":"Back to the catalog","common.copyOf":"copy of {name}","common.iconOf":"{name} icon","common.health":"Health {score}/100","search.title":"Search every project at once","search.intro":"“Where did I write that Stripe webhook thing?” No editor can answer that, because none of them has all eighty projects open.","credentials.title":"Keys committed to your repositories","credentials.intro":"It searches what git tracks, across every repository at once. A key in an ignored {env} sits on your disk; a committed key sits in every clone anyone ever made, and stays in the history even after you delete the file. Today it reads the current contents of tracked files: a key you already deleted from the tree is still in the old commits, and those aren’t searched yet.","credentials.allowlist":"Only credentials with a recognizable shape get flagged — prefixes issued by exactly one provider — never heuristics along the lines of “a long string next to the word key”. And there’s an explicit list of what is {not} a secret: Firebase and Google Maps client keys are public by design, they ship inside the APK, and flagging them would be the fastest way to make you stop reading this page.","credentials.not":"not","scan.start":"check the portfolio","scan.again":"check again","scan.busy":"reading the history…","scan.failed":"Couldn’t run the check.","scan.unreachable":"Couldn’t reach the server.","scan.findingOne":"{n} finding","scan.findingMany":"{n} findings","scan.reposScanned":"{n} repositor{y} checked","scan.skipped":"{n} without git","scan.public":"{n} skipped as public by design","scan.publicTitle":"Firebase and Google Maps client keys, example files, and third-party dependencies.","scan.clean":"No credential with a recognizable shape anywhere in your repositories.","scan.trackedByGit":"{label} tracked by git","secret.stripe-live":"Stripe live secret key","secret.stripe-test":"Stripe test secret key","secret.aws":"AWS access key","secret.github-token":"GitHub token","secret.anthropic":"Anthropic API key","secret.openai":"OpenAI API key","secret.slack":"Slack token","secret.private-key":"Private key","secret.supabase-service":"Supabase service_role key","secret.google-api-key":"Google API key","secret.sendgrid":"SendGrid key","secret.env-file":".env file","secret.key-file":"key file","secret.google-service-account":"Google service account","secret.ssh-private-key":"SSH private key","secretWhy.stripe-live":"Lets anyone charge and move money out of the real account.","secretWhy.stripe-test":"Only touches the test environment, but it should not be in the history either.","secretWhy.aws":"Opens the AWS account, with whatever that user is allowed to do.","secretWhy.github-token":"Opens the user’s repositories, with whatever their permissions allow.","secretWhy.anthropic":"Billed to your account until you revoke it.","secretWhy.openai":"Billed to your account until you revoke it.","secretWhy.slack":"Opens the Slack workspace.","secretWhy.private-key":"A private key in the history has stopped being private.","secretWhy.supabase-service":"Skips every row-level security policy. It is the master key.","secretWhy.google-api-key":"Outside client configuration, a Google key with no domain restriction can be used by anyone and is billed to you.","secretWhy.sendgrid":"Lets anyone send mail in your name.","secretWhy.file":"Deleting it from the tree is not enough: what was committed stays in the history, and the key has to be rotated.","scan.orderTitle":"If any of this is real, the order matters","scan.step1Act":"Revoke the key in the provider’s console.","scan.step1":"{act} It’s the only thing that actually turns it off.","scan.step2":"Issue a new one and put it in an ignored `.env`.","scan.step3Act":"After that, if you want, scrub it from the history with `git filter-repo`.","scan.step3":"{act} Deleting it from the file and committing doesn’t help: it’s still in every earlier commit, and in any clone anyone made.","scan.notStored":"This report isn’t saved to the database. Storing exactly where your leaked keys are would create a second place to leak them from.","packages.title":"{n} dependencie{s} across your portfolio","packages.emptyTitle":"No dependencies yet","packages.emptyBody":"They come from the projects in the catalog: scan a folder and each project’s dependencies show up here, with versions and advisories.","packages.intro":"Your portfolio seen by package instead of by project. No package manager can show you this: each one only ever sees a single project.","packages.stats":"{n} direct dependenc{ies} behind \xb7 {m} advisor{mies} \xb7 checked {when}","packages.statsUnchecked":"Versions and advisories not asked for yet — run {cmd} and this line fills in.","packages.colPackage":"package","packages.colProjects":"projects","packages.colInUse":"in use","packages.colLatest":"latest","packages.colAdvisories":"advisories","packages.deprecated":"deprecated","packages.unpinned":"unpinned","agents.empty":"No agents connected","agents.countOne":"{n} agent","agents.countMany":"{n} agents","agents.intro":"What AI agents have done across your projects, in one place. They connect over MCP and report as they work.","agents.connectFirst":"Connect one from the terminal:","agents.connectNote":"The command prints the key and an MCP config ready to paste. Meanwhile, attribution from git trailers already works with nothing installed — open any project with history.","agents.entries":"{n} entr{ies} \xb7 {m} project{ms}","agents.seen":"seen {when}","agents.recentActivity":"Recent activity","families.titleOne":"{n} folder that is a copy","families.titleMany":"{n} folders that are a copy","families.intro":"Grouped by root commit, git remote, name, and shared dependencies. For each family, panoma points at the one to keep — it deletes nothing. Being the main one doesn’t mean the project is alive: its state says that, separately.","families.stats":"{families} families \xb7 {bytes} of repeated code","families.empty":"No copies in the catalog. Scan a folder with {cmd} to look for them.","families.copiesAndSize":"{n} cop{ies} \xb7 {bytes}","families.canonical":"main","families.copy":"copy","families.noGit":"no git","families.sameDate":"same date","families.daysBehind":"{n} d behind","runs.empty":"No proposals yet","runs.countOne":"{n} proposal","runs.countMany":"{n} proposals","runs.intro":"Every proposal is prepared in an isolated worktree: edit the manifest, install, run the tests. The result is a branch with the patch — never a change applied in your folder, and never a push.","runs.tryHint":"Try it on a dependency that’s behind:","runs.argProject":"project","runs.argPackage":"package","runs.branch":"branch","runs.security":"security","runs.advisory":"advisory","runs.noTestsEmphasis":"nobody has checked","runs.noTests":"This project has no tests, so {nobody} that it still works with this version. Review the patch more carefully than usual.","runs.steps":"Steps","runs.patchLines":"Patch \xb7 {n} line{s}","patch.output":"output ({n} characters)","runActions.apply":"Apply to my repository","runActions.merging":"Merging…","runActions.discard":"Discard","runActions.discarding":"Deleting…","runActions.note":"Merges {branch} into your current branch. It doesn’t push.","runActions.noDetail":"No detail.","runActions.unreachable":"Couldn’t reach the server.","isolation.container":"container","isolation.container.title":"Ran in a throwaway container: no access to your disk or your processes.","isolation.hardened":"clean environment","isolation.hardened.title":"Ran with filtered environment variables and a throwaway HOME: install scripts never saw your credentials. They still ran on your machine, with network access.","isolation.local":"not isolated","isolation.local.title":"Ran on your machine with your full environment. An install script had access to your variables and your disk.","isolation.degraded":"degraded","hidden.empty":"Nothing set aside","hidden.count":"{hidden} hidden and {excluded} out of the catalog","hidden.wordHidden":"hidden","hidden.wordExcluded":"out of the catalog","hidden.intro":"A {hidden} project stays in the catalog with all its data: it just stops showing up in the grid and the counters. One that’s {excluded} has been deleted from Panoma, and no scan adds it back until you readmit it.","hidden.diskNote":"Neither of those touched your disk. Every folder is still where it was, with its code and its history intact.","hidden.sectionHidden":"Hidden ({n})","hidden.sectionExcluded":"Out of the catalog ({n})","hidden.outSince":"out since {when}","hidden.readmitNote":"Readmitting only lifts the ban: the project comes back on the next {cmd}, with its data analyzed again from scratch.","hidden.emptyBody":"When you hide or remove a project, it shows up here so you can put it back.","undo.unhide":"show again","undo.readmit":"readmit","undo.failed":"Couldn’t do it.","undo.unreachable":"Couldn’t reach the server.","disk.empty":"Nothing measured yet","disk.title":"{bytes} come back with one command","disk.intro":"Installed dependencies, caches, and build output. Panoma deletes nothing: it measures, says where each number comes from, and hands you the command that regenerates it.","disk.metricTotal":"total on disk","disk.metricReclaimable":"regenerable","disk.metricShare":"{n}% of the total","disk.metricDormant":"in dormant projects","disk.metricDormantDetail":"no commit in over a year","disk.metricMeasured":"projects measured","disk.ofTotal":"of {bytes}","disk.shareAria":"{n}% of the project is regenerable","disk.moreDirs":"+{n} more","disk.measuredAt":"measured {when}","disk.rules":"A folder makes this list for one of two reasons: its name only ever means “generated” ({generated}), or the project itself ignores it in git. Ambiguously named ones —{ambiguous}— that git doesn’t ignore stay out: in one project they’re junk, and in the next one they’re hand-written code.","measure.start":"measure the disk","measure.again":"measure again","measure.busy":"walking the disk…","measure.noteFirst":"It walks every project’s full tree. The first run takes several minutes.","measure.noteBusy":"It walks every project’s full tree. This can take several minutes; don’t close this tab.","measure.noteLast":"Last measured: {when}. Sizes change every time you install or build.","measure.done":"{n} project{s} measured","measure.missing":"{n} folder{s} no longer on disk","measure.failed":"Couldn’t measure.","measure.unreachable":"Couldn’t reach the server.","unsaved.safe":"Everything is safe","unsaved.countOne":"{n} project with unbacked work","unsaved.countMany":"{n} project{s} with unbacked work","unsaved.intro":"What exists only on this disk. Panoma reads each folder’s git state and touches nothing: it shows you the command, you run it.","unsaved.statUnversioned":"{n} folder{s} with no version control","unsaved.statOrphanCommits":"{shown} commit{s} with no remote copy anywhere","unsaved.statUnpushed":"{n} commit{s} not pushed","unsaved.statChecked":"as of the last scan \xb7 run {cmd} again to refresh it","unsaved.emptyBody":"No project in the catalog has uncommitted changes, unpushed commits, or a repository without a remote.","unsaved.emptyNote":"Projects scanned with {flag} don’t show up here: nothing is known about those, which is not the same as being clean.","unsaved.group.no-git":"No version control","unsaved.blurb.no-git":"Folders with code and no repository. No history, no remote, no way to undo anything: an accidental delete here doesn’t come back.","unsaved.group.no-commits":"A repository and not one commit","unsaved.blurb.no-commits":"Someone ran `git init` and stopped there. Everything inside is outside any history.","unsaved.group.no-remote":"Only on this disk","unsaved.blurb.no-remote":"Repositories with no remote configured. Their entire history exists in exactly one place: here.","unsaved.group.unpushed":"Commits not pushed","unsaved.blurb.unpushed":"They have a remote, but there are commits that haven’t left this machine.","unsaved.group.uncommitted":"Uncommitted changes","unsaved.blurb.uncommitted":"Files touched or never added that aren’t in any history.","unsaved.group.stashes":"Forgotten stashes","unsaved.blurb.stashes":"Changes set aside “for a second” that have been there ever since.","unsaved.files":"{n} file{s}","unsaved.copyOfTitle":"Panoma considers this a copy of {name}. Even so, whatever you touched here is only here.","api.localOnly":"{action} only works with a local catalog.","api.action.openFolder":"Opening folders","api.action.aiConfig":"Configuring the model","api.action.assign":"Assigning work","api.action.withdraw":"Taking an assignment back","api.action.launchAgent":"Launching an agent","api.action.check":"Checking the build","api.action.measureDisk":"Measuring the disk","api.action.writeBlock":"Writing the block","api.action.rescan":"Rescanning","api.action.noteTask":"Noting tasks","api.action.noteMemory":"Curating memory","api.action.hooks":"Installing the hooks","api.missingId":"The project id is missing.","api.missingProject":"The project is missing.","api.noProject":"Project not found.","api.noAssignment":"No such assignment.","api.unknownAction":"Unknown action.","api.badLimit":"“{value}” doesn’t work as a limit: it takes a whole number from 1 to {cap}.","api.unreachable":"Couldn’t reach the server.","api.folderGone":"The folder is no longer at {root}. Scan again.","guard.rejected":"Request rejected: {detail}.","guard.rejectedHint":"Panoma only accepts actions from its own interface or from the CLI.","guard.otherSite":"the request comes from another site ({site})","guard.otherOrigin":"the origin {origin} is not this application","guard.localOperatorOnly":"This gives orders to the computer the catalog lives on, and that needs its operator key.","guard.localOperatorOnlyHint":"Open the catalog with the “this machine” link that “panoma up --network” prints, or do it on the computer itself.","open.unknownTool":"I don’t know how to open with “{tool}”.","open.gone":"The folder is no longer at {root}.","open.goneHint":"You may have moved or deleted it. Scan again to update the catalog.","open.noEditor":"I couldn’t find an editor on the PATH.","open.noConfig":"We don’t know where that agent keeps its configuration.","open.noEditorHint":"It looks for these, in order: {order}. In VS Code or Cursor you install it with “Shell Command: Install 'code' command in PATH”, and the order changes with the PANOMA_EDITOR variable.","open.unsupportedTool":"I don’t know how to open “{tool}” on {os}.","open.launchFailed":"Couldn’t open with {command}.","open.launchNamedFailed":"Couldn’t open {name}: {detail}","open.noTerminalHere":"I can’t open a terminal on {os} yet.","open.noTerminalHereHint":"Open the folder and start your agent by hand.","open.noAgent":"I couldn’t find any agent installed.","open.noAgentHint":"It looks for these, in order: {agents}. With one installed and signed in, this button launches it.","open.appMissing":"That app isn’t installed on this machine.","ai.unknownProvider":"Unknown provider.","ai.noKeyNeeded":"{name} doesn’t use a key: it uses the session you already signed into.","ai.emptyKey":"The key arrived empty.","ai.notAKey":"That doesn’t look like a key.","ai.loginBusy":"There’s already a sign-in half done. Finish it or wait for it to expire.","ai.noLogin":"That provider doesn’t use sign-in.","assign.alreadyQueued":"That assignment is already in the queue.","assign.pasteHint":"Copy the assignment and paste it to your agent.","check.busy":"There’s already a check running for this project.","check.failed":"Couldn’t check it: {detail}","tasks.needTitle":"The task needs a sentence.","tasks.tooLong":"The sentence can’t go past {n} characters.","notes.tooLong":"A note is a durable fact in a sentence or two: neither empty nor an essay. The character cap is 500.","notes.overBudget":"The memory is full: consolidate or discard a note before approving another. The character cap is 2000.","notes.sleepingFull":"Sleeping signals are at capacity: discard or consolidate one before approving another. The slot cap is 30.","notes.pendingFull":"Too many proposals are waiting: decide on those first. The cap is 20.","notes.gone":"That note is already decided.","notes.saveFailed":"Couldn’t save it.","notes.title":"Memory","notes.hint":"Durable facts every agent receives on opening the project. What an agent proposes waits here for your yes.","notes.empty":"Nothing noted yet.","notes.pendingTitle":"Proposed","notes.approve":"Approve","notes.discard":"Discard","notes.add":"Note it","notes.addPlaceholder":"A durable fact about this project…","notes.proposedBy":"proposed by {agent}","notes.sleepsAt":"sleeps on {trigger}","notes.badTrigger":"The where must be a relative path in this project: exact, or a zone ending in /**.","notes.challengedTitle":"Challenged","notes.challengedEvidence":"the disk moved: {target} ({observed})","notes.reapprove":"Re-approve","double.title":"The double","double.shadowTag":"in shadow","double.hint":"What your agents would have asked you, and what your double would have answered. Nobody has seen these answers: grading them is its exam.","double.askedBy":"asked by {agent}","double.drafting":"The double has not drafted yet.","double.abstained":"The double abstained: none of your beliefs covers this question.","double.cites":"Backed by:","double.backed":"I would have said the same","double.vetoed":"No","double.labeledBacked":"you agreed","double.labeledVetoed":"you disagreed","double.gone":"That consultation is already graded.","double.saveFailed":"Couldn’t save it.","roots.serverOnly":"Watched places belong to the machine serving the catalog.","roots.missingFolder":"The folder is missing.","roots.system":"{path} belongs to the system: none of your projects live there.","roots.home":"Your whole home folder is too much: add the folders where you actually code.","roots.library":"That’s app data, not your projects.","roots.notAFolder":"{path} isn’t a folder that exists.","roots.covered":"{path} is already inside {covering}, which is watched whole. If you only want that one, remove the outer folder first.","rescan.failed":"Couldn’t update {name}: {detail}","md.missingSlugPath":"The project or the file is missing.","md.missingSlugAction":"The project is missing, or what to do with the block.","accounts.missingInput":"The project or the list of accounts is missing.","accounts.badUrlAt":"The link on “{label}” doesn’t make sense. Nothing was saved.","agentMcp.localOnly":"Connecting an agent writes to this disk: local machine only.","agentMcp.missingInput":"The agent is missing.","agentMcp.noServer":"The MCP server isn’t in this install. Build it with: pnpm --filter @panoma/mcp run build","agentMcp.badJson":"{path} has a syntax error. Leaving it alone: fix it and paste this yourself, or try again.","agentMcp.notAnObject":"{path} isn’t shaped the way we expected. Leaving it alone: paste this where it belongs.","agentMcp.badToml":"{path} has a syntax error. Leaving it alone: fix it and paste this yourself, or try again.","agentMcp.tomlManual":"Panoma is already in {path}, written your way. Leaving it alone: update it yourself with this.","agentKeys.localOnly":"Local machine only.","agentKeys.missingField":"Missing “{field}”.","agentKeys.gone":"That agent is gone.","verdicts.malformed":"The list of reactions is missing, or one of them isn’t shaped the way we expected. Nothing was saved.","verdicts.tooMany":"{n} reactions arrived and {cap} fit at a time. Nothing was saved: send them in batches.","verdicts.badSource":"“{source}” isn’t a source that can be forgotten. The ones there are: {sources}, or “all” for every one.","verdicts.unknownSource":"“{source}” isn’t a known source. The ones there are: {sources}.","verdicts.badAccepted":"“{value}” says nothing about the review. Write accepted=true, accepted=false or accepted=pending.","distill.failed":"Couldn’t distill that: {detail}","distill.noProvider":"Set up a provider with: panoma ai use <provider>","api.modelFailed":"Couldn’t ask the model: {detail}","model.noneConnected":"no model is connected yet","model.connectHint":"Connect one on the Model page, or from the terminal: panoma ai use <provider>","model.noCredential":"the {name} credential is missing","model.hintCli":"Install {name} and sign in; Panoma will call “{command}”.","model.hintOauth":"Sign in to {name} from the Model page.","model.hintKey":"Save the key on the Model page or with “panoma ai key {id}”. Get one at {url}","look.noImage":"The screenshot is missing: there is no image to look at.","look.badImage":"That image can’t be read: it arrives empty or in a format that isn’t an image.","look.noProfile":"There is nothing to measure this screen against: your portrait is empty and this project has no north. Distill your history —panoma twin distill— or write a north with panoma north.","look.budgetSpent":"Today’s looks are spent: {used} of {cap}. They come back tomorrow, or raise the cap with PANOMA_LOOK_BUDGET.","look.failed":"Couldn’t look at that: {detail}","look.noVision":"The provider you have set up can’t receive images: {detail}","look.assignMalformed":"You didn’t say which finding to turn into an assignment.","look.assignGone":"That finding is gone: the look it came from was deleted.","look.assignQueued":"That is already in the queue.","look.assignButton":"Add to the queue","look.assignDone":"Queued in {project}: {title}","look.assignNow":"Do it now","look.assignAgain":"Send it again","look.dismissButton":"Discard it","look.dismissed":"discarded","look.dismissDone":"Discarded. If you change your mind, you can put it back in the queue.","critique.showOne":"See the finding","critique.showMany":"See them one by one — findings: {findings}","critique.hide":"Close the list","critique.moved":"This review is no longer the one you are looking at: the folder changed and panoma redid it. Reload to see the current findings.","critique.never":"Panoma hasn’t read this folder yet, so there’s nothing to show here: neither good nor bad.","critique.clean":"Panoma read it and found not one mechanical problem. Files read: {n}.","critique.partial":"And it didn’t get through all of it: the folder holds more than one pass covers.","critique.queued":"Queued. Your agent picks it up when it enters the project.","critique.dismissed":"Discarded. If you change your mind, you can put it back in the queue.","look.assignLaunched":"Terminal opened with {agent} working on it.","look.assigning":"Queueing…","look.assigned":"in the queue","assign.noTask":"That assignment is no longer in the queue.","assign.notQueued":"That assignment was no longer in the queue: an agent may have closed it.","assign.taskIdLine":"This assignment is in panoma's queue with id {id}: claim it with panoma_claim_task before you start and close it with panoma_complete_task when you are done.","look.noIdentity":"This project has no stable identity yet —it comes from the first commit— so there would be nowhere to keep what was looked at. Make the first commit and try again.","look.noShot":"That screenshot is no longer in the inbox: {name}","look.noShotName":"You didn’t say which screenshot to look at.","look.unreadableShot":"That screenshot was in the list and couldn’t be opened: {detail}. It was probably deleted, or it weighs more than can be looked at.","dest.look":"The critic: what’s wrong with what you were handed","look.kicker":"Twin \xb7 the critic","look.title":"What’s wrong with what you were just handed","look.intro":"The middle turn, done by someone else. It looks at the screen with your portrait in hand and says which of your statements it breaks, with the next instruction already written. A judgement that doesn’t hang off a statement you signed doesn’t leave here.","look.yardstick":"measured against \xb7 portrait statements: {n}","look.noYardstick":"Your portrait is empty, so there is nothing to measure with: this only reports what breaks a statement of yours. Start with your twin.","look.budget":"looks today: {used} \xb7 cap for the day: {cap}","look.watch":"The watcher only looks at what shows up in an inbox, and at each screenshot once. Its share of the day: {cap}.","look.notRedacted":"A screenshot travels whole: there is no way to redact pixels. Whatever is visible in it —a key in a terminal, a real email address— leaves with the image.","look.inboxTitle":"The inbox","look.inboxOf":"{project}’s inbox","look.inboxEmpty":"Mounted and empty: no agent has left anything yet.","look.inboxSkipped":"files that aren’t images and don’t get looked at: {n}","look.noInbox":"No project has the inbox mounted.","look.noInboxHint":"Mount it with “panoma md init” inside the project. From then on your agents read in AGENTS.md where to leave what they build, and it shows up here.","look.button":"Look","look.buttonAgain":"Look again","look.looking":"Looking…","look.looked":"already looked at \xb7 findings: {n}","look.lookedClean":"already looked at \xb7 broke nothing","look.estimate":"statements: {statements} \xb7 prompt tokens: {tokens} \xb7 image: {size}","look.verdictOf":"What it says about {subject}","look.clean":"It doesn’t break any of your statements.","look.unreadable":"The answer didn’t have the shape of findings. The call was paid for anyway, and you can look again.","look.fix":"Ask for: {fix}","look.against":"against: {statement}","look.measured":"measured against statements: {statements}","look.dropped":"judgements without backing, dropped: {n}","look.uploadTitle":"Not in any inbox?","look.uploadHint":"A desktop app, a Figma frame, a photo taken with a phone: whatever no agent can capture goes up from here.","look.uploadPick":"Choose an image","look.uploadTarget":"Project to upload the screenshot to","look.badType":"That isn’t an image that can be looked at: PNG, JPEG, WebP or GIF.","look.tooBig":"That image weighs {size} and the cap sits at {cap}. Crop it or export it as JPEG.","look.historyTitle":"What it has looked at","look.historyEmpty":"It hasn’t looked at anything yet.","look.firedWatch":"the watcher looked at it","look.firedHand":"you asked for it","taste.full":"It doesn’t fit: the portrait would take {chars} of {cap} characters. Nothing was saved. Take a statement out, or scope it to its project so it only counts there, and save again.","twin.toCritic":"Show the critic a screen →","twin.title":"This is what I learned about you","twin.titleEmpty":"I haven’t learned anything about you yet","twin.intro":"Every belief comes from things you wrote to your agents, with the quotes underneath. There is nothing to approve: if you touch nothing, this is what your agents read. Read it, and correct whatever isn’t you.","twin.introWaiting":"Every belief comes from things you wrote to your agents, with the quotes underneath. They don’t reach them yet: a machine worked these out, and it takes one yes from you, down below.","twin.introEmpty":"Panoma reads your history with your agents on your own disk and pulls out the few things you actually believe about how your work should come out, each with the quotes it came from.","twin.introEmptyHint":"Start just below, under your histories: it says which ones are on this machine and how much they weigh, measured without opening any.","twin.counts":"beliefs: {beliefs} \xb7 forming: {forming} \xb7 evidence: {observations}","twin.density":"observations per belief: {density}","twin.corrections":"you have corrected {corrections} of {shown}","twin.rate":"{rate}% needed correcting","today.criticWhere":"What it saw, and where","today.criticFindingOne":"{n} thing","today.criticFindingMany":"{n} thing{s}","today.criticOne":"the critic saw something while you were away","today.criticMany":"things the critic saw while you were away: {n}","twin.briefs":"of what the critic has seen you have assigned {ordered} of {findings}","twin.briefsRate":"{rate}% of what it points at works for you","twin.briefsLaunched":"of those, sent to an agent: {launched}","twin.briefsDiscarded":"and you said no to: {discarded}","twin.reachTitle":"Who reads it","twin.reach":"Your portrait goes down to the .md of these projects: {reached} of {projects}","twin.reachNone":"Right now no agent reads it: none of your projects has the channel open. You open it one at a time, inside the folder.","twin.reachSome":"In the rest the channel is closed, so there your agents work knowing nothing about this.","twin.reachHow":"panoma md init","twin.designTitle":"What yours looks like","twin.designFrom":"From projects the critic has read, copies aside: {read} \xb7 of those, with something to look at: {withUi}","twin.designProjects":"projects: {projects}","twin.designFonts":"Typefaces: {fonts}","twin.designRadii":"Corners: {radii}","twin.designTraits":"With dark mode: {dark} \xb7 with animation: {animation}","twin.briefsRelaunched":"some more than once — launches: {launches}","twin.digest":"In the last {days} days — new: {created} \xb7 refined: {refined} \xb7 retired: {retired}.","twin.corpusLeft":"This comes from {read} of {total} stored quote{totals} of yours. Unread: {left}.","twin.distillAll":"Read the rest of my history \xb7 {n} quote{s} left","twin.distilling":"Reading…","twin.distillEstimate":"this pass reads {verdicts} quotes \xb7 about {tokens} input tokens","twin.distillProgress":"read: {read} \xb7 observations stored: {saved} \xb7 left: {left}","twin.distillNothing":"There is no history left to read.","twin.corpusDone":"It comes from your whole history: all {total} stored quotes have been read.","twin.scopeOnly":"Only in {project}","twin.scopeAll":"Applies to everything you make","twin.scopedTag":"only in {project}","twin.badgeSigned":"signed by you","twin.badgeStanding":"standing","twin.badgeForming":"forming","twin.formingWhy":"not enough proof yet: it takes three, from two days or two projects","twin.support":"observations: {observations} \xb7 projects: {projects} \xb7 days: {days}","twin.showCitations":"show the quotes: {n}","twin.hideCitations":"hide the quotes","twin.sign":"It’s well put","twin.edit":"Say it in my words","twin.editSave":"Save my version","twin.editText":"Belief text","twin.veto":"That’s not what I think","twin.markedGestures":"changes marked: {n}","twin.topicDesign":"Design","twin.topicFrontend":"The interface itself","twin.topicBackend":"The server and its data","twin.topicCli":"The terminal","twin.topicTesting":"How things are checked","twin.topicCopy":"The words","twin.topicWorkflow":"How you work with your agents","twin.topicTooling":"The tooling","twin.topicData":"The data","twin.topicOther":"Everything else","twin.consentTitle":"One single question","twin.consentBody":"There are beliefs the machine worked out on its own that you haven’t looked at yet. Until you say yes, the file your agents read is exactly what you signed: nothing you didn’t write speaks for you.","twin.consentCount":"waiting: {n} \xb7 they would take: {chars} characters in total","twin.consentOver":"with them the portrait wouldn’t fit in {cap} characters, so something would have to come out","twin.consentAllow":"Let them reach the file","twin.consentRevoke":"Taken back by deleting twin.json, without opening this.","twin.proposalsTitle":"It wants to change something you signed","twin.proposalsNote":"You wrote these, so the machine leaves them alone: it says how it would put them now, and waits.","twin.proposalJoins":"merging this many: {n}","twin.proposalAccept":"Let it change","twin.proposalReject":"Leave it as it is","twin.graveyardTitle":"What you said you are not","twin.graveyardNote":"It isn’t deleted: it stays here so synthesis never proposes it again in other words.","twin.save":"Save","twin.saving":"Saving…","twin.cancel":"Discard what’s marked","twin.saveFailed":"Couldn’t save that: {detail}","twin.fileTitle":"TASTE.md","twin.fileSize":"{chars} of {cap} characters","twin.fileHint":"This is the file your agents read, and the other door to the same thing: open it and delete a line, and that statement leaves the portrait the next time you decide something here.","twin.fileFull":"It doesn’t fit. Until something comes out, what you decide is stored in the catalog but never reaches the file, and the file is all your agents read.","twin.fileWritten":"written right now: {n}","twin.fileRoom":"There is room for {n} more characters.","twin.spendTitle":"What it cost today","twin.spendLooks":"looks: {used} of {cap}","twin.spendTokens":"{input} input tokens \xb7 {output} output","twin.spendNone":"No model was called today.","twin.spendUnmetered":"{n} unmeasured: that provider doesn’t publish usage.","twin.spendDistills":"distillations: {n}","twin.spendClassify":"topic passes: {n}","twin.spendSynth":"syntheses: {n}","twin.sourcesTitle":"Your histories with your agents","twin.sourcesLead":"Panoma measures them without opening them. Nothing is read until you say so, and you say so one at a time: reading Claude Code is not reading Codex.","twin.sourcesNone":"There is no agent history on this disk that Panoma knows how to measure.","twin.sourceSize":"files: {files} \xb7 {size}","twin.sourceGone":"no longer on this disk","twin.sourceAllow":"Let it read this","twin.sourceRevoke":"Stop reading this","twin.sourceNoReader":"we can’t read this one yet","twin.sourcesRevokeNote":"Stopping closes the door and doesn’t delete what already came in: that’s panoma twin forget.","twin.consentMalformed":"It needs to say which source and whether it’s allowed.","twin.consentUnknown":"That source isn’t on this disk: {source}","twin.mineNoConsent":"None of your histories has permission, so not one file was opened. Say so just below, under your histories.","twin.mineNoReadable":"The histories on this disk can’t be read yet, so no permission would help: not one file was opened.","twin.mineNoHistories":"There is no agent history on this disk to read, so not one file was opened.","twin.mineButton":"Look for what’s new in my history","twin.mineButtonLeft":"Read my history \xb7 {n} left","twin.mining":"Reading your histories…","twin.mined":"new quotes: {saved} \xb7 already there: {duplicates}","twin.minedNone":"Nothing new in your histories since last time.","twin.churnTitle":"How your portrait has moved","twin.churnMonth":"{month} — new: {created} \xb7 refined: {refined} \xb7 retired: {retired}","twin.churnStill":"It hasn’t moved this month: what is there is already said.","twin.churnOnlyRefined":"This month only rewrote what was already there: nothing new and nothing retired.","twin.projectQuestion":"What is work here measured against?","twin.projectTitle":"What your agents read here","twin.projectLead":"It goes down through AGENTS.md into every session you open in this folder. The global ones apply across all your projects; the rest only here.","twin.projectLeadUnmanaged":"The global ones apply across all your projects; the rest only here. It doesn’t reach your agents yet: this project has no Panoma block in its AGENTS.md.","twin.projectCount":"statements that apply here: {n}","twin.projectOnly":"only this project: {n}","twin.projectOnlyHere":"only here","twin.projectNone":"There is no portrait yet, so nothing is measured here.","twin.projectNoneHere":"Your portrait says nothing that applies to this project.","twin.projectForming":"still forming about this project: {n}","twin.projectOpen":"Open your twin","twin.spendReads":"reads: {used} of {cap}","twin.readsSpent":"Today’s reads are spent: {used} of {cap}. They come back tomorrow, or raise the cap with PANOMA_READ_BUDGET.","twin.synthesize":"Rewrite the portrait","twin.synthesizing":"Writing…","twin.synthHint":"Reads all your evidence and rewrites what the machine believes about you.","twin.synthDone":"new: {created} \xb7 refined: {refined} \xb7 retired: {retired}.","twin.synthAsks":"And it asks you about beliefs you signed: {n}.","twin.synthSame":"Nothing changed: the evidence says what it said last time.","twin.synthNothing":"There is no evidence to synthesize yet. Read your history above: that’s where the observations the portrait comes from are pulled out.","twin.synthUpToDate":"The portrait is already up to date: no new evidence has come in.","twin.synthFailed":"The portrait couldn’t be written.","twin.citedIn":"in {project}","score.tooFew":"It has told you {shown}. It takes {floor} for a percentage to mean anything: below that, a single correction moves it more than five points, and it would be describing the last belief you looked at rather than your taste.","score.noTrend":"The {rate}% is where it stands today, not whether it improves: neither of the two settled months reaches {floor} beliefs, so the month-over-month comparison can’t be made yet. The current month doesn’t count: its beliefs haven’t been looked at yet.","score.better":"Of what it told you last month you corrected {recent}%, and of the month before {previous}%: it goes down, which is the only thing that means the twin is learning.","score.notBetter":"Of what it told you last month you corrected {recent}%, and of the month before {previous}%: it doesn’t go down. Until it goes down month over month, the twin isn’t learning, and this scoreboard isn’t going to say otherwise.","connect.title":"Connect an agent over MCP","connect.lead":"MCP is the channel an agent uses to talk to your catalog. These are the ones on this machine: connecting one gives it the six tools — the project brief on arrival, the log, and the task queue — and writes its configuration where that agent reads it.","connect.do":"Connect","connect.again":"Connect again","connect.alreadyOn":"connected","connect.againCost":"Already connected. Connecting again issues a new key: where panoma writes the file it updates itself, but if you pasted the block by hand anywhere, that copy will stop working and you will have to paste it again.","connect.working":"Connecting…","connect.written":"MCP configuration written.","connect.updated":"The panoma entry that was already there has been updated.","connect.coexists":"Still there: {list}.","connect.gitWarning":"Heads up: this file holds the agent key in the clear and git would carry it. Add its name to .gitignore before you commit.","connect.restart":"Restart {name} so it picks this up.","connect.pasteInto":"This agent keeps its MCP servers in a format we will not touch. Paste this into:","connect.pasteSomewhere":"We don’t know where this agent keeps its MCP servers. Paste this wherever it does:","connect.copy":"Copy the MCP configuration","connect.openFile":"Open the file","connect.opened":"Opened in {editor}. Paste the block, save, and restart {name}.","connect.copied":"copied","disconnect.do":"disconnect","disconnect.confirm":"Yes, disconnect","disconnect.working":"Removing…","disconnect.losing":"What {name} recorded here goes too: {n} entrie{s}.","disconnect.nothingLost":"{name} hasn’t recorded anything yet.","md.noBlock":"There’s no Panoma block in this project; create it first.","md.notInherited":"That file isn’t an inherited one from this project.","md.fileGone":"The file is no longer where it was.","md.noFiles":"This project has no AGENTS.md or CLAUDE.md.","md.inspectLocalOnly":"The review reads your disk: it only works with a local catalog.","md.repairLocalOnly":"Repairing writes to your disk: it only works with a local catalog.","runs.notFound":"Run not found.","runs.noBranch":"This run left no branch to apply.","runs.alreadyRunning":"There’s already a run in progress on {name}.","runs.alreadyRunningHint":"Wait for it to finish, or watch it under Activity.","runs.missingPackage":"The package name is missing.","runs.noFixForPackage":"{package} has no advisory with a fixed version in {name}.","runs.noFixes":"{name} has no vulnerabilities with a published fix.","runs.enrichAdvisories":"Run 'panoma enrich' to refresh the OSV advisories.","runs.notADependency":"{package} isn’t among {name}’s dependencies, or I don’t know its latest version.","runs.enrichVersions":"Run 'panoma enrich' to pull versions from the registries.","runs.unsupportedEcosystem":"I can’t update {ecosystem} dependencies yet.","runs.knownFailureHint":"Try again with --force if you think something has changed.","runs.quarantined":"{package} {version} was published {age} ago and Panoma’s quarantine is {days} days.","runs.quarantinedHint":"A freshly published version is where supply-chain compromises show up, and they’re almost always pulled within a day or two. Try again later, or right now with --force if you know what you’re doing. The threshold changes with PANOMA_CUARENTENA_DIAS.","runs.crashed":"The run crashed: {detail}","north.missing":"The sentence is missing: write what having this project finished would be.","north.tooLong":"That’s {n} characters and the north is one line: up to {max} fits. Anything longer is a plan, and there’s a plan assignment for that.","north.noIdentity":"This project has no stable identity yet, so there’s nowhere to store the sentence where it would survive moving the folder. Scan it again and try once more.","move.noNorth":"nobody has written what “finished” means here yet","move.unsavedWork":"{n} unsaved-work warning","move.unsavedWork.n":"{n} unsaved-work warnings","move.noReadme":"there is no README that explains it","move.neverBuilt":"nobody has ever checked whether it still builds","move.critiques":"{n} thing showing without opening the project","move.critiques.n":"{n} thing{s} showing without opening the project","move.idle":"idle for {n} month","move.idle.n":"idle for {n} month{s}","move.advisories":"{n} open security advisory","move.advisories.n":"{n} open security advisories","move.outdated":"{n} outdated direct dependency","move.outdated.n":"{n} outdated direct dependencies","move.lowHealth":"health {n} out of 100","move.longIdle":"{n} month{s} idle: the question is no longer about maintenance"}},f={s:["","s"],es:["","es"],y:["y","ies"],ies:["y","ies"]};function g(a,b,c){let d=e[a][b];return c?d.replace(/\{(\w+)\}/g,(a,b)=>{let d=c[b];return void 0!==d?String(d):function(a,b){let c=["ies","es","s","y"].find(b=>a.endsWith(b));if(!c)return;let d=f[c];if(!d)return;let e=a.slice(0,a.length-c.length),g=b[""===e?"n":e];if("number"==typeof g)return 1===g?d[0]:d[1]}(b,c)??a}):d}function h(a,b){let c=b.count??0;return"unversioned"===b.code?a("risk.unversioned"):"untracked"===b.code?a("risk.untracked",{n:c}):"no-commits"===b.code?c>0?a("risk.no-commits.n",{n:c}):a("risk.no-commits"):a(1===c?`risk.${b.code}`:`risk.${b.code}.n`,{n:c})}Function("specifier","return import(specifier)")},67304:(a,b,c)=>{"use strict";c.d(b,{K:()=>i,t:()=>h});var d=c(83458),e=c(97019),f=c(17069),g=c(15966);function h(){let[a,b]=(0,e.useState)();return a}function i({failure:a}){let b=(0,g.k)();return(0,d.jsxs)("section",{className:"catalog-down",role:"alert",children:[(0,d.jsxs)("h2",{children:[(0,d.jsx)(f.z1N,{"aria-hidden":!0}),b("catalog.down.title")]}),(0,d.jsx)("p",{children:b("catalog.down.body",{path:a.path})}),(0,d.jsx)("p",{className:"catalog-down__detail",children:(0,d.jsx)("code",{children:b("catalog.down.detail",{detail:a.detail})})})]})}},67873:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,63507,23))},69070:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,67178,23)),Promise.resolve().then(c.t.bind(c,24221,23)),Promise.resolve().then(c.t.bind(c,67469,23)),Promise.resolve().then(c.t.bind(c,78756,23)),Promise.resolve().then(c.t.bind(c,80156,23)),Promise.resolve().then(c.t.bind(c,47232,23)),Promise.resolve().then(c.t.bind(c,28760,23)),Promise.resolve().then(c.t.bind(c,3406,23)),Promise.resolve().then(c.bind(c,77128))},76510:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(44700).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/private/tmp/panoma-npm/apps/web/app/(app)/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/app/(app)/error.tsx","default")},81025:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,66881,23))},81588:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>o,dynamic:()=>n,generateMetadata:()=>m});var d=c(64824),e=c(47276),f=c.n(e),g=c(46180),h=c(73335),i=c(83677),j=c(93138),k=c(9724),l=c(1012);async function m(){return{title:{default:"Panoma",template:"%s \xb7 Panoma"},description:(0,i.t)(await (0,i.JK)(),"meta.description"),icons:{icon:[{url:"/assets/brand/panoma.svg",type:"image/svg+xml"}],apple:"/apple-icon.png"}}}c(54432);let n="force-dynamic";async function o({children:a}){let[b,c]=await Promise.all([p(),(0,i.JK)()]);return(0,d.jsx)("html",{lang:c,className:f().variable,children:(0,d.jsxs)("body",{children:[(0,d.jsx)("a",{href:"#app-main",className:"skip-link",children:(0,i.t)(c,"shell.skipToContent")}),(0,d.jsx)(k.I18nProvider,{locale:c,children:(0,d.jsxs)(l.SearchProvider,{children:[(0,d.jsx)(j.AppShell,{stats:b,ephemeral:"1"===process.env.PANOMA_EPHEMERAL}),a]})})]})})}async function p(){try{let{db:a}=await (0,h.db)(),b=await (0,g.GT)(a);return{projects:b.projects,live:b.live,paused:b.paused,dormant:b.dormant,noGit:b.noGit,copies:b.copies,unsaved:b.unsaved,notMine:b.notMine,proposedRuns:b.proposedRuns}}catch{return}}},82982:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,84516,23)),Promise.resolve().then(c.t.bind(c,51199,23)),Promise.resolve().then(c.t.bind(c,17779,23)),Promise.resolve().then(c.t.bind(c,65238,23)),Promise.resolve().then(c.t.bind(c,41634,23)),Promise.resolve().then(c.t.bind(c,21110,23)),Promise.resolve().then(c.t.bind(c,80662,23)),Promise.resolve().then(c.t.bind(c,60883,23)),Promise.resolve().then(c.t.bind(c,48582,23))},90630:(a,b,c)=>{Promise.resolve().then(c.bind(c,93138)),Promise.resolve().then(c.bind(c,9724)),Promise.resolve().then(c.bind(c,1012))},93138:(a,b,c)=>{"use strict";c.d(b,{AppShell:()=>d});let d=(0,c(44700).registerClientReference)(function(){throw Error("Attempted to call AppShell() from the server but AppShell is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/private/tmp/panoma-npm/apps/web/components/app-shell.tsx","AppShell")},94016:(a,b,c)=>{"use strict";function d(a,b){}c.d(b,{r:()=>d}),c(97019)},95793:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(64824),e=c(83677),f=c(9845);async function g(){let a=await (0,e.JK)();return(0,d.jsx)("html",{lang:a,children:(0,d.jsx)("body",{style:{margin:0},children:(0,d.jsx)(f.n,{es:"es"===a})})})}},97080:(a,b,c)=>{Promise.resolve().then(c.bind(c,76510))}};
|