@pixelzx/genesis 2026.6.20 → 2026.6.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/.buildstamp +1 -1
  3. package/dist/build-info.json +3 -3
  4. package/dist/cli-startup-metadata.json +1 -1
  5. package/dist/{command-registry-ClBXx6rA.js → command-registry-DPhQ-gYY.js} +2 -2
  6. package/dist/{command-registry-bijZPq36.js → command-registry-DtvwURJ_.js} +2 -2
  7. package/dist/{command-registry-core-Bf_MZZiA.js → command-registry-core-DllgASdD.js} +2 -2
  8. package/dist/{completion-cli-DV02VPia.js → completion-cli-CMRi4kQZ.js} +2 -2
  9. package/dist/{config-cli-DAOeCcCk.js → config-cli-ByTCIigq.js} +1 -1
  10. package/dist/control-ui/assets/{agents-CdobtTOW.js → agents-QDr5B3Ho.js} +393 -324
  11. package/dist/control-ui/assets/canvas-DcQV5mjQ.js +274 -0
  12. package/dist/control-ui/assets/channels-DTjwzddp.js +140 -0
  13. package/dist/control-ui/assets/cron-BL9vNTgH.js +78 -0
  14. package/dist/control-ui/assets/{de-ChvNzaWx.js → de-hbyceFeJ.js} +1 -1
  15. package/dist/control-ui/assets/{debug-B8lJz0xl.js → debug-BjvJPprv.js} +8 -8
  16. package/dist/control-ui/assets/{es-CrSDgcQ5.js → es-1Cx1cu-Y.js} +1 -1
  17. package/dist/control-ui/assets/{fr-BRwXxDjE.js → fr-VgMPipri.js} +1 -1
  18. package/dist/control-ui/assets/{i18n-Dr_ijwId.js → i18n-DLwqUqi0.js} +2 -2
  19. package/dist/control-ui/assets/{id-D6SwOJ8N.js → id-BjXuhykW.js} +1 -1
  20. package/dist/control-ui/assets/index-BTDvMe6P.css +1 -0
  21. package/dist/control-ui/assets/index-Chv-rDKB.js +5900 -0
  22. package/dist/control-ui/assets/{instances-DRlIDzRt.js → instances-M2ru9deN.js} +19 -19
  23. package/dist/control-ui/assets/{ja-JP-COtC4IfH.js → ja-JP-DWb-BMAl.js} +1 -1
  24. package/dist/control-ui/assets/{ko-BzeSxEM4.js → ko-Dp3UE5m2.js} +1 -1
  25. package/dist/control-ui/assets/{logs-BYrqUHTd.js → logs-l_Xtj11_.js} +6 -6
  26. package/dist/control-ui/assets/mcp-CCow5u67.js +380 -0
  27. package/dist/control-ui/assets/{memory-Dk8DVFlc.js → memory-DEvlXa9C.js} +11 -11
  28. package/dist/control-ui/assets/{models-WJk_luH_.js → models-Tc34Yl09.js} +26 -26
  29. package/dist/control-ui/assets/{nodes-SWmxABM8.js → nodes-CHIr0hLe.js} +89 -89
  30. package/dist/control-ui/assets/{pl-BFGaZC1a.js → pl-UrfXg6LL.js} +1 -1
  31. package/dist/control-ui/assets/plugins-CRSFM6pi.js +259 -0
  32. package/dist/control-ui/assets/presenter-DQKXVTz4.js +2 -0
  33. package/dist/control-ui/assets/{preview-yS9kUAt_.js → preview-DP8t6eAW.js} +1 -1
  34. package/dist/control-ui/assets/{pt-BR-B2QYSEq3.js → pt-BR-Cqsb5BcT.js} +1 -1
  35. package/dist/control-ui/assets/sessions-Xg8c67jk.js +56 -0
  36. package/dist/control-ui/assets/skills-CB5pgqaj.js +294 -0
  37. package/dist/control-ui/assets/skills-shared-DoedL_zw.js +11 -0
  38. package/dist/control-ui/assets/{th-CB7L1SFv.js → th-C_U0alhW.js} +1 -1
  39. package/dist/control-ui/assets/{tr-jlhb5DaE.js → tr-BHgpQnZM.js} +1 -1
  40. package/dist/control-ui/assets/{uk-BrLj30-c.js → uk-C_GhiUmQ.js} +1 -1
  41. package/dist/control-ui/assets/wallet-C_ySxHYg.js +302 -0
  42. package/dist/control-ui/assets/{zh-CN-BvMSlZSV.js → zh-CN-BNYbiW4p.js} +1 -1
  43. package/dist/control-ui/assets/{zh-TW-DvNvr4gT.js → zh-TW-DJ7rxwhV.js} +1 -1
  44. package/dist/control-ui/index.html +3 -4
  45. package/dist/entry.js +1 -1
  46. package/dist/{gateway-cli-BFiZ-zEO.js → gateway-cli-BNFp7cLD.js} +1 -1
  47. package/dist/index.js +1 -1
  48. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  49. package/dist/postinstall-inventory.json +50 -51
  50. package/dist/{program-BpFNiyL3.js → program-C3s7d86C.js} +1 -1
  51. package/dist/{register.subclis-CHijsAFO.js → register.subclis-C2UfM0nV.js} +1 -1
  52. package/dist/{register.subclis-CpLtsILI.js → register.subclis-ClL1mC0C.js} +2 -2
  53. package/dist/{register.subclis-core-DeVwcUrh.js → register.subclis-core-x3Cm5RAM.js} +1 -1
  54. package/dist/{run-main-DYiUnyJr.js → run-main-Cg3U0WGv.js} +4 -4
  55. package/dist/{runtime-schema-DREgFqvJ.js → runtime-schema-m8uk8t3n.js} +1 -1
  56. package/dist/{server-WzFFYZ9M.js → server-Cdq-naBB.js} +1 -1
  57. package/dist/{server-plugin-bootstrap-BKn4Ukfx.js → server-plugin-bootstrap-CM8EErso.js} +1 -1
  58. package/dist/{server-plugin-bootstrap-Bkvb9v45.js → server-plugin-bootstrap-DQo6bnks.js} +1 -1
  59. package/dist/{server.impl-DJz2wbse.js → server.impl-CZEASk_e.js} +2 -2
  60. package/package.json +1 -1
  61. package/dist/control-ui/assets/canvas-Cy2AiGPQ.js +0 -269
  62. package/dist/control-ui/assets/channel-config-extras-BmGwfDPL.js +0 -2
  63. package/dist/control-ui/assets/channels-DdgVKbNz.js +0 -463
  64. package/dist/control-ui/assets/cron-CCNOjNyY.js +0 -933
  65. package/dist/control-ui/assets/format-BOO4MheD.js +0 -9
  66. package/dist/control-ui/assets/index-DTwo_TE_.js +0 -6247
  67. package/dist/control-ui/assets/index-u5Z0R_Xd.css +0 -1
  68. package/dist/control-ui/assets/mcp-C7ry874X.js +0 -373
  69. package/dist/control-ui/assets/plugins-bulpMEFW.js +0 -273
  70. package/dist/control-ui/assets/sessions-bCilYtM1.js +0 -306
  71. package/dist/control-ui/assets/skills-C1LNGjhW.js +0 -323
  72. package/dist/control-ui/assets/skills-shared-BHZ4ntcf.js +0 -11
  73. package/dist/control-ui/assets/wallet-BwqvP_oc.js +0 -285
@@ -1,4 +1,4 @@
1
- import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coerce-LCfkQHEZ.js";import{o as i,r as a,t as o,u as s}from"./format-BOO4MheD.js";import{W as c,g as l}from"./index-DTwo_TE_.js";function u(...e){let t=new Set;for(let n of e){if(!n)continue;if(Array.isArray(n)){for(let e of n){let n=e.trim();n&&t.add(n)}continue}let e=n.trim();e&&t.add(e)}let n=Array.from(t);return n.sort(),n}function d(e,t){let n=new Set(e);return t.every(e=>n.has(e))}function f(e){return{roles:u(e.roles,e.role),scopes:c(e.scopes)}}function p(e){let t=u(e.roles,e.role),n=Array.isArray(e.tokens)?e.tokens:e.tokens?Object.values(e.tokens):void 0;return{roles:n===void 0?t:u(n.filter(e=>!e.revokedAtMs).flatMap(e=>e.role??[])).filter(e=>t.includes(e)),scopes:c(e.scopes)}}function m(e,t){let n=f(e),r=t?p(t):null;return r?d(r.roles,n.roles)?d(r.scopes,n.scopes)?{kind:`re-approval`,requested:n,approved:r}:{kind:`scope-upgrade`,requested:n,approved:r}:{kind:`role-upgrade`,requested:n,approved:r}:{kind:`new-pairing`,requested:n,approved:null}}function h(e){let t=e?.agents??{},n=Array.isArray(t.list)?t.list:[],i=[];return n.forEach((e,t)=>{if(!e||typeof e!=`object`)return;let n=e,a=r(n.id)??``;if(!a)return;let o=r(n.name),s=n.default===!0;i.push({id:a,name:o,isDefault:s,index:t,record:n})}),i}function g(e,t){let n=new Set(t),i=[];for(let t of e){if(!(Array.isArray(t.commands)?t.commands:[]).some(e=>n.has(String(e))))continue;let e=r(t.nodeId)??``;if(!e)continue;let a=r(t.displayName)??e;i.push({id:e,label:a===e?e:`${a} · ${e}`})}return i.sort((e,t)=>e.label.localeCompare(t.label)),i}var _=`__defaults__`,v=[{value:`deny`,label:`Deny`},{value:`allowlist`,label:`Allowlist`},{value:`full`,label:`Full`}],y=[{value:`off`,label:`Off`},{value:`on-miss`,label:`On miss`},{value:`always`,label:`Always`}];function b(e){return e===`allowlist`||e===`full`||e===`deny`?e:`deny`}function x(e){return e===`always`||e===`off`||e===`on-miss`?e:`on-miss`}function S(e){let t=e?.defaults??{};return{security:b(t.security),ask:x(t.ask),askFallback:b(t.askFallback??`deny`),autoAllowSkills:t.autoAllowSkills??!1}}function C(e){return h(e).map(e=>({id:e.id,name:e.name,isDefault:e.isDefault}))}function w(e,t){let n=C(e),r=Object.keys(t?.agents??{}),i=new Map;n.forEach(e=>i.set(e.id,e)),r.forEach(e=>{i.has(e)||i.set(e,{id:e})});let a=Array.from(i.values());return a.length===0&&a.push({id:`main`,isDefault:!0}),a.sort((e,t)=>{if(e.isDefault&&!t.isDefault)return-1;if(!e.isDefault&&t.isDefault)return 1;let n=e.name?.trim()?e.name:e.id,r=t.name?.trim()?t.name:t.id;return n.localeCompare(r)}),a}function T(e,t){return e===_?_:e&&t.some(t=>t.id===e)?e:_}function E(e){let t=e.execApprovalsForm??e.execApprovalsSnapshot?.file??null,n=!!t,r=S(t),i=w(e.configForm,t),a=N(e.nodes),o=e.execApprovalsTarget,s=o===`node`&&e.execApprovalsTargetNodeId?e.execApprovalsTargetNodeId:null;o===`node`&&s&&!a.some(e=>e.id===s)&&(s=null);let c=T(e.execApprovalsSelectedAgent,i),l=c===_?null:(t?.agents??{})[c]??null,u=Array.isArray(l?.allowlist)?l.allowlist??[]:[];return{ready:n,disabled:e.execApprovalsSaving||e.execApprovalsLoading,dirty:e.execApprovalsDirty,loading:e.execApprovalsLoading,saving:e.execApprovalsSaving,form:t,defaults:r,selectedScope:c,selectedAgent:l,agents:i,allowlist:u,target:o,targetNodeId:s,targetNodes:a,onSelectScope:e.onExecApprovalsSelectAgent,onSelectTarget:e.onExecApprovalsTargetChange,onPatch:e.onExecApprovalsPatch,onRemove:e.onExecApprovalsRemove,onLoad:e.onLoadExecApprovals,onSave:e.onSaveExecApprovals}}function D(r){let i=r.ready,a=r.target!==`node`||!!r.targetNodeId;return e`
1
+ import{d as e,l as t,r as n}from"./i18n-DLwqUqi0.js";import{r}from"./string-coerce-LCfkQHEZ.js";import{L as i,M as a,O as o,j as s,k as c,s as l}from"./index-Chv-rDKB.js";function u(...e){let t=new Set;for(let n of e){if(!n)continue;if(Array.isArray(n)){for(let e of n){let n=e.trim();n&&t.add(n)}continue}let e=n.trim();e&&t.add(e)}let n=Array.from(t);return n.sort(),n}function d(e,t){let n=new Set(e);return t.every(e=>n.has(e))}function f(e){return{roles:u(e.roles,e.role),scopes:i(e.scopes)}}function p(e){let t=u(e.roles,e.role),n=Array.isArray(e.tokens)?e.tokens:e.tokens?Object.values(e.tokens):void 0;return{roles:n===void 0?t:u(n.filter(e=>!e.revokedAtMs).flatMap(e=>e.role??[])).filter(e=>t.includes(e)),scopes:i(e.scopes)}}function m(e,t){let n=f(e),r=t?p(t):null;return r?d(r.roles,n.roles)?d(r.scopes,n.scopes)?{kind:`re-approval`,requested:n,approved:r}:{kind:`scope-upgrade`,requested:n,approved:r}:{kind:`role-upgrade`,requested:n,approved:r}:{kind:`new-pairing`,requested:n,approved:null}}function h(e){let t=e?.agents??{},n=Array.isArray(t.list)?t.list:[],i=[];return n.forEach((e,t)=>{if(!e||typeof e!=`object`)return;let n=e,a=r(n.id)??``;if(!a)return;let o=r(n.name),s=n.default===!0;i.push({id:a,name:o,isDefault:s,index:t,record:n})}),i}function g(e,t){let n=new Set(t),i=[];for(let t of e){if(!(Array.isArray(t.commands)?t.commands:[]).some(e=>n.has(String(e))))continue;let e=r(t.nodeId)??``;if(!e)continue;let a=r(t.displayName)??e;i.push({id:e,label:a===e?e:`${a} · ${e}`})}return i.sort((e,t)=>e.label.localeCompare(t.label)),i}var _=`__defaults__`,v=[{value:`deny`,label:`Deny`},{value:`allowlist`,label:`Allowlist`},{value:`full`,label:`Full`}],y=[{value:`off`,label:`Off`},{value:`on-miss`,label:`On miss`},{value:`always`,label:`Always`}];function b(e){return e===`allowlist`||e===`full`||e===`deny`?e:`deny`}function x(e){return e===`always`||e===`off`||e===`on-miss`?e:`on-miss`}function S(e){let t=e?.defaults??{};return{security:b(t.security),ask:x(t.ask),askFallback:b(t.askFallback??`deny`),autoAllowSkills:t.autoAllowSkills??!1}}function C(e){return h(e).map(e=>({id:e.id,name:e.name,isDefault:e.isDefault}))}function w(e,t){let n=C(e),r=Object.keys(t?.agents??{}),i=new Map;n.forEach(e=>i.set(e.id,e)),r.forEach(e=>{i.has(e)||i.set(e,{id:e})});let a=Array.from(i.values());return a.length===0&&a.push({id:`main`,isDefault:!0}),a.sort((e,t)=>{if(e.isDefault&&!t.isDefault)return-1;if(!e.isDefault&&t.isDefault)return 1;let n=e.name?.trim()?e.name:e.id,r=t.name?.trim()?t.name:t.id;return n.localeCompare(r)}),a}function T(e,t){return e===_?_:e&&t.some(t=>t.id===e)?e:_}function E(e){let t=e.execApprovalsForm??e.execApprovalsSnapshot?.file??null,n=!!t,r=S(t),i=w(e.configForm,t),a=N(e.nodes),o=e.execApprovalsTarget,s=o===`node`&&e.execApprovalsTargetNodeId?e.execApprovalsTargetNodeId:null;o===`node`&&s&&!a.some(e=>e.id===s)&&(s=null);let c=T(e.execApprovalsSelectedAgent,i),l=c===_?null:(t?.agents??{})[c]??null,u=Array.isArray(l?.allowlist)?l.allowlist??[]:[];return{ready:n,disabled:e.execApprovalsSaving||e.execApprovalsLoading,dirty:e.execApprovalsDirty,loading:e.execApprovalsLoading,saving:e.execApprovalsSaving,form:t,defaults:r,selectedScope:c,selectedAgent:l,agents:i,allowlist:u,target:o,targetNodeId:s,targetNodes:a,onSelectScope:e.onExecApprovalsSelectAgent,onSelectTarget:e.onExecApprovalsTargetChange,onPatch:e.onExecApprovalsPatch,onRemove:e.onExecApprovalsRemove,onLoad:e.onLoadExecApprovals,onSave:e.onSaveExecApprovals}}function D(r){let i=r.ready,a=r.target!==`node`||!!r.targetNodeId;return e`
2
2
  <section class="card">
3
3
  <div class="row" style="justify-content: space-between; align-items: center;">
4
4
  <div>
@@ -19,15 +19,15 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
19
19
  ${O(r)}
20
20
  ${i?e`
21
21
  ${k(r)} ${A(r)}
22
- ${r.selectedScope===_?n:j(r)}
22
+ ${r.selectedScope===_?t:j(r)}
23
23
  `:e`<div class="row" style="margin-top: 12px; gap: 12px;">
24
24
  <div class="muted">Load exec approvals to edit allowlists.</div>
25
25
  <button class="btn" ?disabled=${r.loading||!a} @click=${r.onLoad}>
26
- ${r.loading?t(`common.loading`):t(`common.loadApprovals`)}
26
+ ${r.loading?n(`common.loading`):n(`common.loadApprovals`)}
27
27
  </button>
28
28
  </div>`}
29
29
  </section>
30
- `}function O(t){let r=t.targetNodes.length>0,i=t.targetNodeId??``;return e`
30
+ `}function O(n){let r=n.targetNodes.length>0,i=n.targetNodeId??``;return e`
31
31
  <div class="list" style="margin-top: 12px;">
32
32
  <div class="list-item">
33
33
  <div class="list-main">
@@ -38,30 +38,30 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
38
38
  <label class="field">
39
39
  <span>Host</span>
40
40
  <select
41
- ?disabled=${t.disabled}
42
- @change=${e=>{if(e.target.value===`node`){let e=t.targetNodes[0]?.id??null;t.onSelectTarget(`node`,i||e)}else t.onSelectTarget(`gateway`,null)}}
41
+ ?disabled=${n.disabled}
42
+ @change=${e=>{if(e.target.value===`node`){let e=n.targetNodes[0]?.id??null;n.onSelectTarget(`node`,i||e)}else n.onSelectTarget(`gateway`,null)}}
43
43
  >
44
- <option value="gateway" ?selected=${t.target===`gateway`}>Gateway</option>
45
- <option value="node" ?selected=${t.target===`node`}>Node</option>
44
+ <option value="gateway" ?selected=${n.target===`gateway`}>Gateway</option>
45
+ <option value="node" ?selected=${n.target===`node`}>Node</option>
46
46
  </select>
47
47
  </label>
48
- ${t.target===`node`?e`
48
+ ${n.target===`node`?e`
49
49
  <label class="field">
50
50
  <span>Node</span>
51
51
  <select
52
- ?disabled=${t.disabled||!r}
53
- @change=${e=>{let n=e.target.value.trim();t.onSelectTarget(`node`,n||null)}}
52
+ ?disabled=${n.disabled||!r}
53
+ @change=${e=>{let t=e.target.value.trim();n.onSelectTarget(`node`,t||null)}}
54
54
  >
55
55
  <option value="" ?selected=${i===``}>Select node</option>
56
- ${t.targetNodes.map(t=>e`<option value=${t.id} ?selected=${i===t.id}>
56
+ ${n.targetNodes.map(t=>e`<option value=${t.id} ?selected=${i===t.id}>
57
57
  ${t.label}
58
58
  </option>`)}
59
59
  </select>
60
60
  </label>
61
- `:n}
61
+ `:t}
62
62
  </div>
63
63
  </div>
64
- ${t.target===`node`&&!r?e` <div class="muted">No nodes advertise exec approvals yet.</div> `:n}
64
+ ${n.target===`node`&&!r?e` <div class="muted">No nodes advertise exec approvals yet.</div> `:t}
65
65
  </div>
66
66
  `}function k(t){return e`
67
67
  <div class="row" style="margin-top: 12px; gap: 8px; flex-wrap: wrap;">
@@ -83,7 +83,7 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
83
83
  `})}
84
84
  </div>
85
85
  </div>
86
- `}function A(t){let r=t.selectedScope===_,i=t.defaults,a=t.selectedAgent??{},o=r?[`defaults`]:[`agents`,t.selectedScope],s=typeof a.security==`string`?a.security:void 0,c=typeof a.ask==`string`?a.ask:void 0,l=typeof a.askFallback==`string`?a.askFallback:void 0,u=r?i.security:s??`__default__`,d=r?i.ask:c??`__default__`,f=r?i.askFallback:l??`__default__`,p=typeof a.autoAllowSkills==`boolean`?a.autoAllowSkills:void 0,m=p??i.autoAllowSkills,h=p==null;return e`
86
+ `}function A(n){let r=n.selectedScope===_,i=n.defaults,a=n.selectedAgent??{},o=r?[`defaults`]:[`agents`,n.selectedScope],s=typeof a.security==`string`?a.security:void 0,c=typeof a.ask==`string`?a.ask:void 0,l=typeof a.askFallback==`string`?a.askFallback:void 0,u=r?i.security:s??`__default__`,d=r?i.ask:c??`__default__`,f=r?i.askFallback:l??`__default__`,p=typeof a.autoAllowSkills==`boolean`?a.autoAllowSkills:void 0,m=p??i.autoAllowSkills,h=p==null;return e`
87
87
  <div class="list" style="margin-top: 16px;">
88
88
  <div class="list-item">
89
89
  <div class="list-main">
@@ -96,10 +96,10 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
96
96
  <label class="field">
97
97
  <span>Mode</span>
98
98
  <select
99
- ?disabled=${t.disabled}
100
- @change=${e=>{let n=e.target.value;!r&&n===`__default__`?t.onRemove([...o,`security`]):t.onPatch([...o,`security`],n)}}
99
+ ?disabled=${n.disabled}
100
+ @change=${e=>{let t=e.target.value;!r&&t===`__default__`?n.onRemove([...o,`security`]):n.onPatch([...o,`security`],t)}}
101
101
  >
102
- ${r?n:e`<option value="__default__" ?selected=${u===`__default__`}>
102
+ ${r?t:e`<option value="__default__" ?selected=${u===`__default__`}>
103
103
  Use default (${i.security})
104
104
  </option>`}
105
105
  ${v.map(t=>e`<option value=${t.value} ?selected=${u===t.value}>
@@ -121,10 +121,10 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
121
121
  <label class="field">
122
122
  <span>Mode</span>
123
123
  <select
124
- ?disabled=${t.disabled}
125
- @change=${e=>{let n=e.target.value;!r&&n===`__default__`?t.onRemove([...o,`ask`]):t.onPatch([...o,`ask`],n)}}
124
+ ?disabled=${n.disabled}
125
+ @change=${e=>{let t=e.target.value;!r&&t===`__default__`?n.onRemove([...o,`ask`]):n.onPatch([...o,`ask`],t)}}
126
126
  >
127
- ${r?n:e`<option value="__default__" ?selected=${d===`__default__`}>
127
+ ${r?t:e`<option value="__default__" ?selected=${d===`__default__`}>
128
128
  Use default (${i.ask})
129
129
  </option>`}
130
130
  ${y.map(t=>e`<option value=${t.value} ?selected=${d===t.value}>
@@ -146,10 +146,10 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
146
146
  <label class="field">
147
147
  <span>Fallback</span>
148
148
  <select
149
- ?disabled=${t.disabled}
150
- @change=${e=>{let n=e.target.value;!r&&n===`__default__`?t.onRemove([...o,`askFallback`]):t.onPatch([...o,`askFallback`],n)}}
149
+ ?disabled=${n.disabled}
150
+ @change=${e=>{let t=e.target.value;!r&&t===`__default__`?n.onRemove([...o,`askFallback`]):n.onPatch([...o,`askFallback`],t)}}
151
151
  >
152
- ${r?n:e`<option value="__default__" ?selected=${f===`__default__`}>
152
+ ${r?t:e`<option value="__default__" ?selected=${f===`__default__`}>
153
153
  Use default (${i.askFallback})
154
154
  </option>`}
155
155
  ${v.map(t=>e`<option value=${t.value} ?selected=${f===t.value}>
@@ -172,18 +172,18 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
172
172
  <span>Enabled</span>
173
173
  <input
174
174
  type="checkbox"
175
- ?disabled=${t.disabled}
175
+ ?disabled=${n.disabled}
176
176
  .checked=${m}
177
- @change=${e=>{let n=e.target;t.onPatch([...o,`autoAllowSkills`],n.checked)}}
177
+ @change=${e=>{let t=e.target;n.onPatch([...o,`autoAllowSkills`],t.checked)}}
178
178
  />
179
179
  </label>
180
180
  ${!r&&!h?e`<button
181
181
  class="btn btn--sm"
182
- ?disabled=${t.disabled}
183
- @click=${()=>t.onRemove([...o,`autoAllowSkills`])}
182
+ ?disabled=${n.disabled}
183
+ @click=${()=>n.onRemove([...o,`autoAllowSkills`])}
184
184
  >
185
185
  Use default
186
- </button>`:n}
186
+ </button>`:t}
187
187
  </div>
188
188
  </div>
189
189
  </div>
@@ -204,13 +204,13 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
204
204
  <div class="list" style="margin-top: 12px;">
205
205
  ${r.length===0?e` <div class="muted">No allowlist entries yet.</div> `:r.map((e,n)=>M(t,e,n))}
206
206
  </div>
207
- `}function M(t,r,i){let a=r.lastUsedAt?s(r.lastUsedAt):`never`,c=r.lastUsedCommand?o(r.lastUsedCommand,120):null,l=r.lastResolvedPath?o(r.lastResolvedPath,120):null;return e`
207
+ `}function M(n,r,i){let s=r.lastUsedAt?a(r.lastUsedAt):`never`,c=r.lastUsedCommand?o(r.lastUsedCommand,120):null,l=r.lastResolvedPath?o(r.lastResolvedPath,120):null;return e`
208
208
  <div class="list-item">
209
209
  <div class="list-main">
210
210
  <div class="list-title">${r.pattern?.trim()?r.pattern:`New pattern`}</div>
211
- <div class="list-sub">Last used: ${a}</div>
212
- ${c?e`<div class="list-sub mono">${c}</div>`:n}
213
- ${l?e`<div class="list-sub mono">${l}</div>`:n}
211
+ <div class="list-sub">Last used: ${s}</div>
212
+ ${c?e`<div class="list-sub mono">${c}</div>`:t}
213
+ ${l?e`<div class="list-sub mono">${l}</div>`:t}
214
214
  </div>
215
215
  <div class="list-meta">
216
216
  <label class="field">
@@ -218,14 +218,14 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
218
218
  <input
219
219
  type="text"
220
220
  .value=${r.pattern??``}
221
- ?disabled=${t.disabled}
222
- @input=${e=>{let n=e.target;t.onPatch([`agents`,t.selectedScope,`allowlist`,i,`pattern`],n.value)}}
221
+ ?disabled=${n.disabled}
222
+ @input=${e=>{let t=e.target;n.onPatch([`agents`,n.selectedScope,`allowlist`,i,`pattern`],t.value)}}
223
223
  />
224
224
  </label>
225
225
  <button
226
226
  class="btn btn--sm danger"
227
- ?disabled=${t.disabled}
228
- @click=${()=>{if(t.allowlist.length<=1){t.onRemove([`agents`,t.selectedScope,`allowlist`]);return}t.onRemove([`agents`,t.selectedScope,`allowlist`,i])}}
227
+ ?disabled=${n.disabled}
228
+ @click=${()=>{if(n.allowlist.length<=1){n.onRemove([`agents`,n.selectedScope,`allowlist`]);return}n.onRemove([`agents`,n.selectedScope,`allowlist`,i])}}
229
229
  >
230
230
  Remove
231
231
  </button>
@@ -234,20 +234,20 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
234
234
  `}function N(e){return g(e,[`system.execApprovals.get`,`system.execApprovals.set`])}function P(t){let n=te(t),r=E(t);return e`
235
235
  ${F(t)} ${I(t)}
236
236
  ${D(r)} ${ne(n)} ${q(t)}
237
- `}function F(n){return e` <section class="card">
237
+ `}function F(t){return e` <section class="card">
238
238
  <div class="row" style="justify-content: space-between;">
239
239
  <div>
240
240
  <div class="card-title">Nodes</div>
241
241
  <div class="card-sub">Paired devices and live links.</div>
242
242
  </div>
243
- <button class="btn" ?disabled=${n.loading} @click=${n.onRefresh}>
244
- ${l.refresh} ${n.loading?t(`common.loading`):t(`common.refresh`)}
243
+ <button class="btn" ?disabled=${t.loading} @click=${t.onRefresh}>
244
+ ${l.refresh} ${t.loading?n(`common.loading`):n(`common.refresh`)}
245
245
  </button>
246
246
  </div>
247
247
  <div class="list" style="margin-top: 16px;">
248
- ${n.nodes.length===0?e` <div class="muted">No nodes found.</div> `:n.nodes.map(e=>oe(e,n))}
248
+ ${t.nodes.length===0?e` <div class="muted">No nodes found.</div> `:t.nodes.map(e=>oe(e,t))}
249
249
  </div>
250
- </section>`}function I(t){let r=H(t),i=r?U(r):t.nodeManagementSelectedId,a=r?W(r):[],o=a.filter(e=>e!==`system.execApprovals.get`&&e!==`system.execApprovals.set`&&e!==`system.run.prepare`),s=a.includes(`system.run`),c=a.includes(`system.which`),l=t.nodeManagementBusy;return e`
250
+ </section>`}function I(n){let r=H(n),i=r?U(r):n.nodeManagementSelectedId,a=r?W(r):[],o=a.filter(e=>e!==`system.execApprovals.get`&&e!==`system.execApprovals.set`&&e!==`system.run.prepare`),s=a.includes(`system.run`),c=a.includes(`system.which`),l=n.nodeManagementBusy;return e`
251
251
  <section class="card">
252
252
  <div class="row" style="justify-content: space-between; align-items: center;">
253
253
  <div>
@@ -257,26 +257,26 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
257
257
  <label class="field" style="min-width: min(320px, 100%);">
258
258
  <span>Node</span>
259
259
  <select
260
- ?disabled=${l||t.nodes.length===0}
261
- @change=${e=>{let n=e.target;t.onNodeManagementSelect(n.value)}}
260
+ ?disabled=${l||n.nodes.length===0}
261
+ @change=${e=>{let t=e.target;n.onNodeManagementSelect(t.value)}}
262
262
  >
263
- ${t.nodes.map(t=>{let r=U(t);return r?e`<option value=${r} ?selected=${r===i}>
264
- ${G(t)}
265
- </option>`:n})}
263
+ ${n.nodes.map(n=>{let r=U(n);return r?e`<option value=${r} ?selected=${r===i}>
264
+ ${G(n)}
265
+ </option>`:t})}
266
266
  </select>
267
267
  </label>
268
268
  </div>
269
269
 
270
- ${t.nodeManagementError?e`<div class="callout danger" style="margin-top: 12px;">
271
- ${t.nodeManagementError}
272
- </div>`:n}
270
+ ${n.nodeManagementError?e`<div class="callout danger" style="margin-top: 12px;">
271
+ ${n.nodeManagementError}
272
+ </div>`:t}
273
273
  ${r?e`
274
274
  <div class="list" style="margin-top: 16px;">
275
- ${L(t,r)}
276
- ${R({busy:l,supportsSystemRun:s,supportsSystemWhich:c,props:t})}
277
- ${ee({busy:l,supportsSystemRun:s,props:t})}
278
- ${B({busy:l,commandOptions:o,props:t})}
279
- ${V(t)}
275
+ ${L(n,r)}
276
+ ${R({busy:l,supportsSystemRun:s,supportsSystemWhich:c,props:n})}
277
+ ${ee({busy:l,supportsSystemRun:s,props:n})}
278
+ ${B({busy:l,commandOptions:o,props:n})}
279
+ ${V(n)}
280
280
  </div>
281
281
  `:e`<div class="muted" style="margin-top: 16px;">No node selected.</div>`}
282
282
  </section>
@@ -327,7 +327,7 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
327
327
  >
328
328
  ${t===`which-genesis`?l.search:l.refresh} ${n}
329
329
  </button>
330
- `}function ee(t){let{busy:r,supportsSystemRun:i,props:a}=t;return e`
330
+ `}function ee(n){let{busy:r,supportsSystemRun:i,props:a}=n;return e`
331
331
  <div class="list-item">
332
332
  <div class="list-main">
333
333
  <div class="list-title">Shell Command</div>
@@ -366,7 +366,7 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
366
366
  ${l.terminal} ${r?`Running`:`Run`}
367
367
  </button>
368
368
  </div>
369
- ${i?n:e`<div class="muted">This node does not advertise <code>system.run</code>.</div>`}
369
+ ${i?t:e`<div class="muted">This node does not advertise <code>system.run</code>.</div>`}
370
370
  </div>
371
371
  </div>
372
372
  </div>
@@ -405,13 +405,13 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r}from"./string-coer
405
405
  </div>
406
406
  </div>
407
407
  </div>
408
- `}function V(t){let r=t.nodeManagementResult;if(!r)return n;let i=K(r.payload);return e`
408
+ `}function V(n){let r=n.nodeManagementResult;if(!r)return t;let i=K(r.payload);return e`
409
409
  <div class="list-item">
410
410
  <div class="list-main">
411
411
  <div class="list-title">${r.label}</div>
412
412
  <div class="list-sub">
413
413
  ${r.nodeId} · ${r.command} · ${r.ok?`ok`:`failed`} ·
414
- ${s(r.completedAtMs)}
414
+ ${a(r.completedAtMs)}
415
415
  </div>
416
416
  <pre class="code-block" style="margin-top: 10px; max-height: 360px; overflow: auto;">
417
417
  ${i}</pre
@@ -420,7 +420,7 @@ ${i}</pre
420
420
  </div>
421
421
  `}function H(e){let t=r(e.nodeManagementSelectedId);return t?e.nodes.find(e=>U(e)===t)??null:null}function U(e){return r(e.nodeId)??null}function W(e){let t=Array.isArray(e.commands)?e.commands:[];return Array.from(new Set(t.map(e=>r(e)).filter(e=>!!e))).toSorted((e,t)=>e.localeCompare(t))}function G(e){return r(e.displayName)??r(e.nodeId)??`unknown`}function K(e){if(e&&typeof e==`object`){let t=e,n=r(t.stdout),i=r(t.stderr),a=r(t.error),o=typeof t.exitCode==`number`||typeof t.exitCode==`string`?String(t.exitCode):null;if(n||i||a||o){let e=[];return o&&e.push(`exitCode: ${o}`),n&&e.push(`stdout:\n${n}`),i&&e.push(`stderr:\n${i}`),a&&e.push(`error:\n${a}`),e.join(`
422
422
 
423
- `)}}return i(e,{pretty:!0,fallback:``})}function q(i){let a=i.devicesList??{pending:[],paired:[]},o=Array.isArray(a.pending)?a.pending:[],s=Array.isArray(a.paired)?a.paired:[],c=new Map(s.map(e=>[r(e.deviceId),e]).filter(e=>!!e[0]));return e`
423
+ `)}}return s(e,{pretty:!0,fallback:``})}function q(i){let a=i.devicesList??{pending:[],paired:[]},o=Array.isArray(a.pending)?a.pending:[],s=Array.isArray(a.paired)?a.paired:[],c=new Map(s.map(e=>[r(e.deviceId),e]).filter(e=>!!e[0]));return e`
424
424
  <section class="card">
425
425
  <div class="row" style="justify-content: space-between;">
426
426
  <div>
@@ -428,23 +428,23 @@ ${i}</pre
428
428
  <div class="card-sub">Pairing requests + role tokens.</div>
429
429
  </div>
430
430
  <button class="btn" ?disabled=${i.devicesLoading} @click=${i.onDevicesRefresh}>
431
- ${i.devicesLoading?t(`common.loading`):t(`common.refresh`)}
431
+ ${i.devicesLoading?n(`common.loading`):n(`common.refresh`)}
432
432
  </button>
433
433
  </div>
434
- ${i.devicesError?e`<div class="callout danger" style="margin-top: 12px;">${i.devicesError}</div>`:n}
434
+ ${i.devicesError?e`<div class="callout danger" style="margin-top: 12px;">${i.devicesError}</div>`:t}
435
435
  <div class="list" style="margin-top: 16px;">
436
436
  ${o.length>0?e`
437
437
  <div class="muted" style="margin-bottom: 8px;">Pending</div>
438
438
  ${o.map(e=>Z(e,i,J(c,e)))}
439
- `:n}
439
+ `:t}
440
440
  ${s.length>0?e`
441
441
  <div class="muted" style="margin-top: 12px; margin-bottom: 8px;">Paired</div>
442
442
  ${s.map(e=>Q(e,i))}
443
- `:n}
444
- ${o.length===0&&s.length===0?e` <div class="muted">No paired devices.</div> `:n}
443
+ `:t}
444
+ ${o.length===0&&s.length===0?e` <div class="muted">No paired devices.</div> `:t}
445
445
  </div>
446
446
  </section>
447
- `}function J(e,t){let n=r(t.deviceId);if(!n)return;let i=e.get(n);if(!i)return;let a=r(t.publicKey),o=r(i.publicKey);if(!(a&&o&&a!==o))return i}function Y(e){return e?`roles: ${a(e.roles)} · scopes: ${a(e.scopes)}`:`none`}function X(e){switch(e){case`scope-upgrade`:return`scope upgrade requires approval`;case`role-upgrade`:return`role upgrade requires approval`;case`re-approval`:return`reconnect details changed; approval required`;case`new-pairing`:return`new device pairing request`}throw Error(`unsupported pending approval kind`)}function Z(i,a,o){let c=r(i.displayName)||i.deviceId,l=typeof i.ts==`number`?s(i.ts):t(`common.na`),u=m(i,o),d=i.isRepair?` · repair`:``,f=i.remoteIp?` · ${i.remoteIp}`:``;return e`
447
+ `}function J(e,t){let n=r(t.deviceId);if(!n)return;let i=e.get(n);if(!i)return;let a=r(t.publicKey),o=r(i.publicKey);if(!(a&&o&&a!==o))return i}function Y(e){return e?`roles: ${c(e.roles)} · scopes: ${c(e.scopes)}`:`none`}function X(e){switch(e){case`scope-upgrade`:return`scope upgrade requires approval`;case`role-upgrade`:return`role upgrade requires approval`;case`re-approval`:return`reconnect details changed; approval required`;case`new-pairing`:return`new device pairing request`}throw Error(`unsupported pending approval kind`)}function Z(i,o,s){let c=r(i.displayName)||i.deviceId,l=typeof i.ts==`number`?a(i.ts):n(`common.na`),u=m(i,s),d=i.isRepair?` · repair`:``,f=i.remoteIp?` · ${i.remoteIp}`:``;return e`
448
448
  <div class="list-item">
449
449
  <div class="list-main">
450
450
  <div class="list-title">${c}</div>
@@ -459,25 +459,25 @@ ${i}</pre
459
459
  <div class="muted" style="margin-top: 6px;">
460
460
  approved now: ${Y(u.approved)}
461
461
  </div>
462
- `:n}
462
+ `:t}
463
463
  </div>
464
464
  <div class="list-meta">
465
465
  <div class="row" style="justify-content: flex-end; gap: 8px; flex-wrap: wrap;">
466
- <button class="btn btn--sm primary" @click=${()=>a.onDeviceApprove(i.requestId)}>
466
+ <button class="btn btn--sm primary" @click=${()=>o.onDeviceApprove(i.requestId)}>
467
467
  Approve
468
468
  </button>
469
- <button class="btn btn--sm" @click=${()=>a.onDeviceReject(i.requestId)}>
469
+ <button class="btn btn--sm" @click=${()=>o.onDeviceReject(i.requestId)}>
470
470
  Reject
471
471
  </button>
472
472
  </div>
473
473
  </div>
474
474
  </div>
475
- `}function Q(t,n){let i=r(t.displayName)||t.deviceId,o=t.remoteIp?` · ${t.remoteIp}`:``,s=`roles: ${a(t.roles)}`,c=`scopes: ${a(t.scopes)}`,l=Array.isArray(t.tokens)?t.tokens:[];return e`
475
+ `}function Q(t,n){let i=r(t.displayName)||t.deviceId,a=t.remoteIp?` · ${t.remoteIp}`:``,o=`roles: ${c(t.roles)}`,s=`scopes: ${c(t.scopes)}`,l=Array.isArray(t.tokens)?t.tokens:[];return e`
476
476
  <div class="list-item">
477
477
  <div class="list-main">
478
478
  <div class="list-title">${i}</div>
479
- <div class="list-sub">${t.deviceId}${o}</div>
480
- <div class="muted" style="margin-top: 6px;">${s} · ${c}</div>
479
+ <div class="list-sub">${t.deviceId}${a}</div>
480
+ <div class="muted" style="margin-top: 6px;">${o} · ${s}</div>
481
481
  ${l.length===0?e` <div class="muted" style="margin-top: 6px">Tokens: none</div> `:e`
482
482
  <div class="muted" style="margin-top: 10px;">Tokens</div>
483
483
  <div style="display: flex; flex-direction: column; gap: 8px; margin-top: 6px;">
@@ -486,20 +486,20 @@ ${i}</pre
486
486
  `}
487
487
  </div>
488
488
  </div>
489
- `}function $(t,r,i){let o=r.revokedAtMs?`revoked`:`active`,c=`scopes: ${a(r.scopes)}`,l=s(r.rotatedAtMs??r.createdAtMs??r.lastUsedAtMs??null);return e`
489
+ `}function $(n,r,i){let o=r.revokedAtMs?`revoked`:`active`,s=`scopes: ${c(r.scopes)}`,l=a(r.rotatedAtMs??r.createdAtMs??r.lastUsedAtMs??null);return e`
490
490
  <div class="row" style="justify-content: space-between; gap: 8px;">
491
- <div class="list-sub">${r.role} · ${o} · ${c} · ${l}</div>
491
+ <div class="list-sub">${r.role} · ${o} · ${s} · ${l}</div>
492
492
  <div class="row" style="justify-content: flex-end; gap: 6px; flex-wrap: wrap;">
493
493
  <button
494
494
  class="btn btn--sm"
495
- @click=${()=>i.onDeviceRotate(t,r.role,r.scopes)}
495
+ @click=${()=>i.onDeviceRotate(n,r.role,r.scopes)}
496
496
  >
497
497
  Rotate
498
498
  </button>
499
- ${r.revokedAtMs?n:e`
499
+ ${r.revokedAtMs?t:e`
500
500
  <button
501
501
  class="btn btn--sm danger"
502
- @click=${()=>i.onDeviceRevoke(t,r.role)}
502
+ @click=${()=>i.onDeviceRevoke(n,r.role)}
503
503
  >
504
504
  Revoke
505
505
  </button>
@@ -510,33 +510,33 @@ ${i}</pre
510
510
  <section class="card">
511
511
  <div class="row" style="justify-content: space-between; align-items: center;">
512
512
  <div>
513
- <div class="card-title">${t(`nodes.binding.execNodeBinding`)}</div>
514
- <div class="card-sub">${t(`nodes.binding.execNodeBindingSubtitle`)}</div>
513
+ <div class="card-title">${n(`nodes.binding.execNodeBinding`)}</div>
514
+ <div class="card-sub">${n(`nodes.binding.execNodeBindingSubtitle`)}</div>
515
515
  </div>
516
516
  <button
517
517
  class="btn"
518
518
  ?disabled=${r.disabled||!r.configDirty}
519
519
  @click=${r.onSave}
520
520
  >
521
- ${r.configSaving?t(`common.saving`):t(`common.save`)}
521
+ ${r.configSaving?n(`common.saving`):n(`common.save`)}
522
522
  </button>
523
523
  </div>
524
524
 
525
525
  ${r.formMode===`raw`?e`
526
526
  <div class="callout warn" style="margin-top: 12px">
527
- ${t(`nodes.binding.formModeHint`)}
527
+ ${n(`nodes.binding.formModeHint`)}
528
528
  </div>
529
- `:n}
529
+ `:t}
530
530
  ${r.ready?e`
531
531
  <div class="list" style="margin-top: 16px;">
532
532
  <div class="list-item">
533
533
  <div class="list-main">
534
- <div class="list-title">${t(`nodes.binding.defaultBinding`)}</div>
535
- <div class="list-sub">${t(`nodes.binding.defaultBindingHint`)}</div>
534
+ <div class="list-title">${n(`nodes.binding.defaultBinding`)}</div>
535
+ <div class="list-sub">${n(`nodes.binding.defaultBindingHint`)}</div>
536
536
  </div>
537
537
  <div class="list-meta">
538
538
  <label class="field">
539
- <span>${t(`nodes.binding.node`)}</span>
539
+ <span>${n(`nodes.binding.node`)}</span>
540
540
  <select
541
541
  ?disabled=${r.disabled||!i}
542
542
  @change=${e=>{let t=e.target.value.trim();r.onBindDefault(t||null)}}
@@ -547,16 +547,16 @@ ${i}</pre
547
547
  </option>`)}
548
548
  </select>
549
549
  </label>
550
- ${i?n:e` <div class="muted">No nodes with system.run available.</div> `}
550
+ ${i?t:e` <div class="muted">No nodes with system.run available.</div> `}
551
551
  </div>
552
552
  </div>
553
553
 
554
554
  ${r.agents.length===0?e` <div class="muted">No agents found.</div> `:r.agents.map(e=>re(e,r))}
555
555
  </div>
556
556
  `:e`<div class="row" style="margin-top: 12px; gap: 12px;">
557
- <div class="muted">${t(`nodes.binding.loadConfigHint`)}</div>
557
+ <div class="muted">${n(`nodes.binding.loadConfigHint`)}</div>
558
558
  <button class="btn" ?disabled=${r.configLoading} @click=${r.onLoadConfig}>
559
- ${r.configLoading?t(`common.loading`):t(`common.loadConfig`)}
559
+ ${r.configLoading?n(`common.loading`):n(`common.loadConfig`)}
560
560
  </button>
561
561
  </div>`}
562
562
  </section>
@@ -615,4 +615,4 @@ ${i}</pre
615
615
  </div>
616
616
  </div>
617
617
  `}export{P as renderNodes};
618
- //# sourceMappingURL=nodes-SWmxABM8.js.map
618
+ //# sourceMappingURL=nodes-CHIr0hLe.js.map
@@ -1,2 +1,2 @@
1
1
  var e={common:{health:`Stan`,ok:`OK`,yes:`Tak`,no:`Nie`,active:`Aktywny`,loading:`Ładowanie…`,refreshing:`Odświeżanie…`,online:`Online`,offline:`Offline`,connect:`Połącz`,connected:`Połączono`,refresh:`Odśwież`,reload:`Przeładuj`,probe:`Sprawdź`,call:`Połączenie`,confirm:`Potwierdź`,cancel:`Anuluj`,unselect:`Odznacz`,enabled:`Włączone`,disabled:`Wyłączone`,na:`n/d`,configured:`Skonfigurowano`,running:`Uruchomiono`,linked:`Połączono`,mode:`Tryb`,baseUrl:`Bazowy URL`,lastStart:`Ostatnie uruchomienie`,lastProbe:`Ostatnie sprawdzenie`,lastInbound:`Ostatnie przychodzące`,lastConnect:`Ostatnie połączenie`,lastMessage:`Ostatnia wiadomość`,authAge:`Wiek uwierzytelnienia`,credential:`Poświadczenie`,audience:`Odbiorcy`,publicKey:`Klucz publiczny`,probeOk:`Sprawdzenie OK`,probeFailed:`Sprawdzenie nie powiodło się`,reloadConfig:`Przeładuj konfigurację`,loadConfig:`Wczytaj konfigurację`,loadApprovals:`Wczytaj zatwierdzenia`,settingsSections:`Sekcje ustawień`,version:`Wersja`,docs:`Dokumentacja`,theme:`Motyw`,resources:`Zasoby`,search:`Szukaj`,save:`Zapisz`,saving:`Zapisywanie…`,saveAndPublish:`Zapisz i opublikuj`,importing:`Importowanie…`,importFromRelays:`Importuj z przekaźników`,showAdvanced:`Pokaż zaawansowane`,hideAdvanced:`Ukryj zaawansowane`,unsavedChanges:`Masz niezapisane zmiany`,secondsAgo:`{count}s temu`,working:`Praca…`,showQr:`Pokaż QR`,relink:`Połącz ponownie`,waitForScan:`Czekaj na zeskanowanie`,logout:`Wyloguj`},channels:{health:{title:`Stan kanału`,subtitle:`Migawki stanu kanału z Gateway.`,noSnapshotYet:`Brak migawki.`},generic:{subtitle:`Stan kanału i konfiguracja.`},wizard:{addChannel:`Add channel`,toolbarSubtitle:`Add or update channel accounts with the guided setup flow.`,title:`Channel setup`,subtitle:`Answer each prompt to update genesis.json.`,continue:`Continue`,doneTitle:`Channel setup`,errorTitle:`Channel setup failed`},gatewayUrlConfirmation:{title:`Zmień URL Gateway`,subtitle:`To spowoduje ponowne połączenie z innym serwerem Gateway`,warning:`Potwierdź tylko, jeśli ufasz temu URL-owi. Złośliwe adresy URL mogą zagrozić bezpieczeństwu twojego systemu.`},nostr:{profile:`Profil`,editProfile:`Edytuj profil`,profilePicture:`Zdjęcie profilowe`,noProfile:`Nie ustawiono profilu.`,noProfileHint:`Kliknij „Edytuj profil”, aby dodać swoje imię, bio i awatar.`,name:`Imię`,displayName:`Nazwa wyświetlana`,about:`O mnie`,advanced:`Zaawansowane`,profilePicturePreview:`Podgląd zdjęcia profilowego`,account:`Konto`,username:`Nazwa użytkownika`,usernameHelp:`Krótka nazwa użytkownika (np. satoshi)`,bio:`Bio`,bioPlaceholder:`Powiedz innym coś o sobie...`,bioHelp:`Krótki biogram lub opis`,displayNameHelp:`Twoja pełna nazwa wyświetlana`,avatarUrl:`URL awatara`,avatarHelp:`Adres URL HTTPS do Twojego zdjęcia profilowego`,bannerUrl:`URL banera`,bannerHelp:`Adres URL HTTPS do obrazu banera`,website:`Strona internetowa`,websiteHelp:`Twoja osobista strona internetowa`,nip05Identifier:`Identyfikator NIP-05`,nip05Help:`Weryfikowalny identyfikator (np. you@domain.com)`,lightningAddress:`Adres Lightning`,lightningHelp:`Adres Lightning do napiwków (LUD-16)`}},nodes:{binding:{loadConfigHint:`Wczytaj konfigurację, aby edytować powiązania.`,formModeHint:`Przełącz kartę Konfiguracja na tryb Formularz, aby edytować tutaj powiązania.`,execNodeBinding:`Powiązanie węzła exec`,execNodeBindingSubtitle:`Przypnij agentów do konkretnego węzła podczas używania exec host=node.`,defaultBinding:`Domyślne powiązanie`,defaultBindingHint:`Używane, gdy agenci nie nadpisują powiązania węzła.`,node:`Węzeł`}},instances:{title:`Połączone instancje`,subtitle:`Sygnały obecności z Gateway i klientów.`,showHosts:`Pokaż hosty i adresy IP`,hideHosts:`Ukryj hosty i adresy IP`,toggleHostVisibility:`Przełącz widoczność hostów`,noInstances:`Nie zgłoszono jeszcze żadnych instancji.`,lastInput:`Ostatnie wejście {time}`,reason:`Powód {reason}`},agentTools:{connectedSource:`Połączono: {id}`,connected:`Połączono`,channelSource:`Kanał: {id}`,channel:`Kanał`,builtIn:`Wbudowane`},nav:{chat:`Czat`,control:`Sterowanie`,agent:`Agent`,tools:`Tools`,settings:`Ustawienia`,expand:`Rozwiń pasek boczny`,collapse:`Zwiń pasek boczny`,resize:`Zmień rozmiar paska bocznego`},tabs:{agents:`Agenci`,overview:`Przegląd`,canvas:`Canvas`,channels:`Kanały`,instances:`Instancje`,sessions:`Sesje`,usage:`Użycie`,wallet:`Wallet`,cron:`Zadania Cron`,skills:`Skills`,mcp:`MCP`,plugins:`Plugins`,models:`Models`,memory:`Memory`,nodes:`Węzły`,chat:`Czat`,config:`Konfiguracja`,communications:`Komunikacja`,appearance:`Wygląd`,automation:`Automatyzacja`,infrastructure:`Infrastruktura`,aiAgents:`AI i agenci`,debug:`Debug`,logs:`Logi`,dreams:`Sny`},subtitles:{agents:`Obszary robocze, narzędzia, tożsamości.`,overview:`Status, punkty dostępu, stan.`,canvas:`Hosted Canvas documents and rich previews.`,channels:`Kanały i ustawienia.`,instances:`Połączone klienty i węzły.`,sessions:`Aktywne sesje i ustawienia domyślne.`,usage:`Zużycie API i koszty.`,wallet:`Addresses, balances, and wallet settings.`,cron:`Wybudzenia i cykliczne uruchomienia.`,skills:`Skills i klucze API.`,mcp:`Manage Model Context Protocol servers for this Gateway.`,plugins:`Install and manage Gateway plugins.`,models:`Model catalog and providers.`,memory:`Agentic memory store.`,nodes:`Sparowane urządzenia i polecenia.`,chat:`Czat Gateway do szybkich interwencji.`,config:`Edytuj genesis.json.`,communications:`Kanały, wiadomości i ustawienia audio.`,appearance:`Motyw, UI i ustawienia kreatora konfiguracji.`,automation:`Polecenia, hooki, cron i pluginy.`,infrastructure:`Ustawienia Gateway, web, przeglądarki i multimediów.`,aiAgents:`Agenci, modele, Skills, narzędzia, pamięć, sesja.`,debug:`Migawki, zdarzenia, RPC.`,logs:`Logi Gateway na żywo.`,dreams:`Konsolidacja pamięci podczas snu.`},memoryView:{empty:`No memories stored yet.`,noAgent:`No agent selected. Open an agent to view its memory.`,colMemory:`Memory`,colDetail:`Detail`},modelsView:{empty:`No models available.`,colModel:`Model`,colProvider:`Provider`,colContext:`Context`,colReasoning:`Reasoning`,colModels:`Models`,colStatus:`Status`,reasoning:`Reasoning`,connected:`Connected`,tabModels:`Models`,tabProviders:`Providers`},mcpView:{title:`MCP Servers`,subtitle:`Manage Model Context Protocol servers available to this Gateway.`,add:{title:`Add MCP server`,tabPreset:`Presets`,tabLink:`By link`,tabJson:`By JSON`,token:{label:`Auth token`,placeholder:`Paste an access token`,hint:`Optional. Sent as the Authorization: Bearer header with every request.`},preset:{intro:`Pick a popular MCP server to add in one step.`,selected:`Configure {label}`,oauthNote:`Uses OAuth. Save, then click Connect to authorize in your browser.`,tokenDocs:`Where do I get a token?`,save:`Add server`},link:{label:`Server URL`,placeholder:`https://mcp.example.com`,fetch:`Fetch metadata`,fetching:`Fetching…`,previewTitle:`Server preview`,save:`Save server`,cancel:`Cancel`,unsupportedTitle:`No metadata found`,unsupportedHint:`We could not detect a remote MCP server at that URL. Switch to the JSON tab to add it manually.`,nameLabel:`Server name`,transportLabel:`Transport`},json:{nameLabel:`Name`,namePlaceholder:`context7`,configLabel:`Config (JSON)`,configHint:`Use url + transport for remote (HTTP/SSE) servers, or command + args for local stdio servers.`,save:`Save server`,saveAs:`Save as new`,update:`Update server`}},list:{empty:`No MCP servers configured yet.`,emptyHint:`Use the form above to add a server.`,count:`{count} server{s}`,oauthRequired:`OAuth required`,connected:`Authenticated`,notConnected:`Not connected`,connect:`Connect`,reconnect:`Reconnect`,disconnect:`Sign out`,edit:`Edit`,delete:`Delete`,testing:`Testing…`,test:`Test`,testOk:`Server responded.`,testFailed:`Server did not respond.`,transportHttp:`HTTP`,transportStdio:`stdio`},oauth:{title:`Connect to {name}`,subtitle:`Genesis will open the authorization page in a new tab.`,open:`Open authorization page`,waiting:`Waiting for callback…`,success:`Connected to {name}.`,failed:`OAuth failed: {message}`,cancelled:`Authorization was cancelled.`,missingMetadata:`Server does not advertise OAuth metadata. Provide a bearer token in the JSON tab.`,manualTitle:`Manual entry`,manualHint:`Paste the access token your provider gave you.`}},canvasView:{workspaceTitle:`Document workspace`,workspaceSubtitle:`Create, upload, update, and reopen hosted Canvas documents.`,recentTitle:`Recent documents`,recentSubtitle:`Latest hosted Canvas manifests.`,previewTitle:`Canvas preview`,source:{file:`File`,html:`HTML`,url:`URL`,path:`Path`},fields:{file:`File`,html:`Inline HTML`,url:`URL`,path:`Gateway-local path`,title:`Title`,id:`Document ID`,height:`Preferred height`,kind:`Kind`,entryUrl:`Entry URL`},actions:{create:`Create`,update:`Update`,reset:`Reset`,open:`Open`},status:{gateway:`Gateway`,host:`Host`,sandbox:`Sandbox`,externalEmbeds:`External embeds`,loading:`Loading documents…`,noDocuments:`No hosted documents yet.`,noPreview:`No preview loaded.`,saving:`Saving Canvas document…`,saved:`Saved {id}.`,selected:`Selected {id}.`},errors:{notConnected:`Connect to the gateway first.`,sourceRequired:`Choose a source before saving.`,fileRequired:`Choose a file to upload.`,idRequired:`Document ID is required for updates.`,untrustedUrl:`Only trusted Canvas URLs under /__genesis__/canvas or /__genesis__/a2ui can be embedded here.`}},overview:{access:{title:`Dostęp do Gateway`,subtitle:`Gdzie panel się łączy i jak się uwierzytelnia.`,wsUrl:`URL WebSocket`,token:`Token Gateway`,password:`Hasło (nie jest przechowywane)`,passwordPlaceholder:`hasło systemowe lub współdzielone`,sessionKey:`Domyślny klucz sesji`,language:`Język`,connectHint:`Kliknij Połącz, aby zastosować zmiany połączenia.`,trustedProxy:`Uwierzytelniono przez zaufany serwer proxy.`,showToken:`Pokaż token`,hideToken:`Ukryj token`,toggleTokenVisibility:`Przełącz widoczność tokenu`,showPassword:`Pokaż hasło`,hidePassword:`Ukryj hasło`,togglePasswordVisibility:`Przełącz widoczność hasła`},snapshot:{title:`Migawka`,subtitle:`Najnowsze informacje z uzgadniania połączenia z Gateway.`,status:`Status`,uptime:`Czas działania`,tickInterval:`Interwał tyknięcia`,lastChannelsRefresh:`Ostatnie odświeżenie kanałów`,channelsHint:`Użyj Kanałów, aby połączyć WhatsApp, Telegram, Discord, Signal lub iMessage.`},wallet:{title:`Wallet`,subtitle:`Public addresses from the local encrypted wallet.`,empty:`No wallet keystore found. Run genesis wallet init or genesis wallet import.`,noAccounts:`Wallet keystore exists, but no public accounts were found.`,copyAddress:`Copy address`,manage:`Manage`},stats:{instances:`Instancje`,instancesHint:`Sygnały obecności z ostatnich 5 minut.`,sessions:`Sesje`,sessionsHint:`Ostatnie klucze sesji śledzone przez Gateway.`,cron:`Cron`,cronNext:`Następne wybudzenie {time}`},notes:{title:`Notatki`,subtitle:`Szybkie przypomnienia dotyczące zdalnych konfiguracji sterowania.`,tailscaleTitle:`Tailscale serve`,tailscaleText:`Preferuj tryb serve, aby utrzymać Gateway na loopback z uwierzytelnianiem tailnet.`,sessionTitle:`Higiena sesji`,sessionText:`Użyj /new lub sessions.patch, aby zresetować kontekst.`,cronTitle:`Przypomnienia Cron`,cronText:`Używaj odizolowanych sesji do cyklicznych uruchomień.`},auth:{required:`Ten Gateway wymaga uwierzytelnienia. Dodaj token lub hasło, a następnie kliknij Połącz.`,failed:`Uwierzytelnianie nie powiodło się. Ponownie skopiuj URL z tokenem za pomocą {command} lub zaktualizuj token, a następnie kliknij Połącz.`},pairing:{hint:`To urządzenie wymaga zatwierdzenia parowania przez host Gateway.`,scopeUpgradeTitle:`Rozszerzenie zakresu oczekuje na zatwierdzenie.`,scopeUpgradeSummary:`To urządzenie jest już sparowane, ale żądane rozszerzenie zakresu oczekuje na zatwierdzenie.`,roleUpgradeTitle:`Zmiana roli oczekuje na zatwierdzenie.`,roleUpgradeSummary:`To urządzenie jest już sparowane, ale żądana zmiana roli oczekuje na zatwierdzenie.`,metadataUpgradeTitle:`Zmiana metadanych urządzenia oczekuje na zatwierdzenie.`,metadataUpgradeSummary:`To urządzenie jest już sparowane, ale zmiana metadanych oczekuje na zatwierdzenie.`,mobileHint:`Na urządzeniu mobilnym? Skopiuj pełny URL (w tym #token=...) z genesis dashboard --no-open na komputerze.`,docsTitle:`Dokumentacja parowania urządzeń (otwiera się w nowej karcie)`,docsLink:`Dokumentacja: Parowanie urządzeń`},insecure:{hint:`Ta strona używa HTTP, więc przeglądarka blokuje tożsamość urządzenia. Użyj HTTPS (Tailscale Serve) lub otwórz {url} na hoście Gateway.`,stayHttp:`Jeśli musisz pozostać przy HTTP, ustaw {config} (tylko token).`},connection:{title:`Jak się połączyć`,step1:`Uruchom Gateway na komputerze hosta:`,step2:`Uzyskaj URL panelu z tokenem:`,step3:`Wklej powyżej URL WebSocket i token albo otwórz bezpośrednio URL z tokenem.`,step4:`Lub wygeneruj token wielokrotnego użytku:`,docsHint:`Do zdalnego dostępu zalecany jest Tailscale Serve. `,docsLink:`Przeczytaj dokumentację →`,authDocsTitle:`Dokumentacja uwierzytelniania Control UI (otwiera się w nowej karcie)`,authDocsLink:`Dokumentacja: Uwierzytelnianie Control UI`,tailscaleDocsTitle:`Dokumentacja Tailscale Serve (otwiera się w nowej karcie)`,tailscaleDocsLink:`Dokumentacja: Tailscale Serve`,insecureHttpDocsTitle:`Dokumentacja niezabezpieczonego HTTP (otwiera się w nowej karcie)`,insecureHttpDocsLink:`Dokumentacja: Niezabezpieczone HTTP`},cards:{cost:`Koszt`,skills:`Skills`,recentSessions:`Ostatnie sesje`,modelAuth:`Uwierzytelnianie modeli`,modelAuthOk:`{count} ok`,modelAuthExpired:`{count} wygasło`,modelAuthExpiring:`{count} wkrótce wygaśnie`,modelAuthProviders:`{count} dostawców`,modelAuthUsageLeft:`Pozostało {pct}%`,modelAuthExpiresIn:`wygasa {when}`,modelAuthAttentionExpiredTitle:`Uwierzytelnianie modeli wygasło`,modelAuthAttentionExpiringTitle:`Uwierzytelnianie modeli wkrótce wygaśnie`,modelAuthAttentionExpiredDesc:`{providers} — uwierzytelnij ponownie za pomocą genesis models auth`,modelAuthAttentionExpiringEntry:`{provider} ({when})`},attention:{title:`Uwaga`},eventLog:{title:`Dziennik zdarzeń`},logTail:{title:`Logi Gateway`},quickActions:{newSession:`Nowa sesja`,automation:`Automatyzacja`,refreshAll:`Odśwież wszystko`,terminal:`Terminal`},palette:{placeholder:`Wpisz polecenie…`,noResults:`Brak wyników`}},wallet:{title:`Wallet`,subtitle:`Local wallet addresses, balances, and safety state.`,refreshBalances:`Refresh balances`,configure:`Wallet config`,lastUpdated:`Updated {time}`,status:{title:`Status`,enabled:`Enabled`,keystore:`Keystore`,accounts:`Accounts`,primary:`Primary`,present:`Present`,missing:`Missing`,locked:`Locked`,available:`Available`,notSet:`Not set`},accounts:{title:`Accounts`,subtitle:`Public wallet accounts from the gateway.`,emptyMissing:`No wallet keystore found.`,emptyNoAccounts:`Wallet keystore exists, but no public accounts were found.`,accountId:`Account ID`,network:`Network`,derivation:`Derivation`,balance:`Balance`,balanceUnavailable:`Balance unavailable`,primary:`Primary`,copyAddress:`Copy address`},tokens:{title:`Tokens`,subtitle:`Configured EVM token balances from the gateway.`,balance:`Token balance`,empty:`No configured EVM token balances found.`,refreshHint:`Refresh balances to load configured EVM token balances.`,copyContract:`Copy token contract`},nfts:{title:`NFTs`,subtitle:`Configured EVM NFT collections and tracked token IDs.`,balance:`Collection balance`,tokens:`Tokens`,empty:`No configured EVM NFT holdings found.`,refreshHint:`Refresh balances to load configured EVM NFT holdings.`,noTrackedTokens:`No tracked token IDs owned or configured`,copyContract:`Copy NFT contract`},recoveryPhrase:{title:`Secret Recovery Phrase`,subtitle:`Create or import one phrase that derives every local chain account.`,safety:`The gateway encrypts the phrase locally. Existing phrases are never revealed; a generated phrase is shown once so you can back it up.`,mode:`Recovery phrase mode`,generate:`Generate`,import:`Import`,phraseLabel:`Secret recovery phrase`,phrasePlaceholder:`word1 word2 word3 ...`,passphrase:`Wallet passphrase`,confirmPassphrase:`Confirm passphrase`,passphraseOptional:`Wallet passphrase (optional)`,confirmPassphraseOptional:`Confirm passphrase (optional)`,overwrite:`Replace the existing encrypted wallet`,generateAction:`Generate wallet`,importAction:`Import phrase`,generatedTitle:`Generated phrase, shown once`,copyGenerated:`Copy generated phrase`,successGenerated:`Wallet created from one generated phrase.`,successImported:`Wallet updated from the imported phrase.`},warnings:{title:`Warnings`}},dreaming:{tabs:{scene:`Scena`,diary:`Dziennik`,advanced:`Zaawansowane`},header:{refresh:`Odśwież`,refreshing:`Odświeżanie…`,on:`Dreaming włączone`,off:`Dreaming wyłączone`},status:{active:`Dreaming aktywne`,idle:`Dreaming bezczynne`,promotedSuffix:`promowany`,nextSweepPrefix:`następne przetwarzanie`},scene:{backfill:`Uzupełnij`,dedupeDiary:`Dziennik deduplikacji`,reset:`Resetuj`,clearGrounded:`Wyczyść uziemione`,repairCache:`Napraw pamięć podręczną snów`,working:`Przetwarzanie…`},phase:{light:`Lekki`,deep:`Głęboki`,rem:`Rem`,off:`wył.`},advanced:{eyebrow:`Przegląd`,title:`Przegląd dziennego dziennika`,description:`Sprawdź, co pochodzi z dziennego dziennika, co czeka na awans i co zostało ostatnio awansowane.`,summaryFromDailyLog:`z dziennego dziennika`,summaryWaiting:`oczekujące`,summaryPromotedToday:`awansowane dzisiaj`,stagedTitle:`Z dziennego dziennika`,stagedDescription:`Kandydaci do odtworzenia wyciągnięci ze starszych wpisów dziennego dziennika.`,shortTermTitle:`Oczekujące na awans`,shortTermDescription:`Bieżący kandydaci krótkoterminowi czekający na przejście do prawdziwej pamięci.`,sortRecent:`Najnowsze`,sortSignals:`Najsilniejsze wsparcie`,originDailyLog:`odtworzone`,originLive:`na żywo`,originMixed:`mieszane`,promotedTitle:`Ostatnie awanse`,promotedDescription:`Elementy, które przeszły już proces awansu.`,emptyGrounded:`Obecnie nie ma przygotowanych wpisów do odtworzenia opartych na dzienniku.`,emptyShortTerm:`Brak krótkoterminowych wpisów do sprawdzenia.`,emptyPromoted:`Brak ostatnich awansów do sprawdzenia.`,updatedPrefix:`zaktualizowano`},stats:{shortTerm:`Krótkoterminowe`,grounded:`Uziemione`,signals:`Sygnały`,promoted:`Promowane`,phaseHits:`Trafienia faz`},trace:{shortTerm:`Krótkoterminowe`,grounded:`Uziemione`,signals:`Sygnały`,promoted:`Promowane`,groundedLed:`grounded-led`,emptyShortTerm:`Brak aktywnych elementów krótkoterminowych.`,emptyGrounded:`Brak przygotowanych uziemionych elementów.`,emptySignals:`Brak aktywnych sygnałów.`,emptyPromoted:`Nic nie zostało jeszcze dziś promowane.`},diary:{title:`Dziennik snów`,noDreamsYet:`Brak snów`,noDreamsHint:`Sny pojawią się tutaj po uruchomieniu pierwszego cyklu śnienia.`,waitingTitle:`Dziennik czeka`,waitingHint:`Wpisy narracyjne pojawią się po następnym cyklu śnienia.`,older:`Starsze`,newer:`Nowsze`,reload:`Przeładuj`,reloading:`Przeładowywanie…`},phrases:{consolidatingMemories:`konsolidowanie wspomnień…`,tidyingKnowledgeGraph:`porządkowanie grafu wiedzy…`,replayingConversations:`odtwarzanie dzisiejszych rozmów…`,weavingShortTerm:`przekształcanie pamięci krótkoterminowej w długoterminową…`,defragmentingMindPalace:`defragmentowanie pałacu pamięci…`,filingLooseThoughts:`porządkowanie luźnych myśli…`,connectingDots:`łączenie odległych punktów…`,compostingContext:`kompostowanie starych okien kontekstu…`,alphabetizingSubconscious:`układanie podświadomości alfabetycznie…`,promotingHunches:`promowanie obiecujących przeczuć…`,forgettingNoise:`zapominanie o tym, co nieważne…`,dreamingEmbeddings:`śnienie w embeddingach…`,reorganizingAttic:`reorganizowanie strychu pamięci…`,indexingDay:`ciche indeksowanie dnia…`,nurturingInsights:`pielęgnowanie rodzących się spostrzeżeń…`,simmeringIdeas:`dojrzewanie nie do końca uformowanych pomysłów…`,whisperingVectorStore:`szeptanie do vector store…`}},usage:{page:{subtitle:`Zobacz, gdzie trafiają tokeny, kiedy sesje osiągają szczyt i co generuje koszty.`},common:{emptyValue:`—`,unknown:`nieznane`},loading:{title:`Przegląd użycia`,badge:`Ładowanie`},metrics:{tokens:`Tokeny`,cost:`Koszt`,session:`sesja`,sessions:`sesje`},presets:{today:`Dzisiaj`,last7d:`7d`,last30d:`30d`},filters:{title:`Filtry`,to:`do`,startDate:`Data początkowa`,endDate:`Data końcowa`,timeZone:`Strefa czasowa`,timeZoneLocal:`Lokalna`,timeZoneUtc:`UTC`,pin:`Przypnij`,pinned:`Przypięte`,unpin:`Odepnij filtry`,selectAll:`Zaznacz wszystko`,clear:`Wyczyść`,clearAll:`Wyczyść wszystko`,remove:`Usuń filtr`,all:`Wszystkie`,days:`Dni`,hours:`Godziny`,session:`Sesja`,agent:`Agent`,channel:`Kanał`,provider:`Dostawca`,model:`Model`,tool:`Narzędzie`,daysCount:`{count} dni`,hoursCount:`{count} godzin`,sessionsCount:`{count} sesji`},query:{placeholder:`Filtruj sesje (np. key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)`,apply:`Filtruj (po stronie klienta)`,matching:`Pasuje {shown} z {total} sesji`,inRange:`{total} sesji w zakresie`,tip:`Wskazówka: użyj filtrów lub kliknij słupki, aby zawęzić dni.`},export:{label:`Eksport`,sessionsCsv:`CSV sesji`,dailyCsv:`CSV dzienne`,json:`JSON`},empty:{title:`Zacznij od zakresu dat`,subtitle:`Wczytaj dane użycia, aby porównać koszty, sprawdzić sesje i analizować osie czasu bez opuszczania panelu.`,hint:`Wybierz zakres dat i kliknij Odśwież, aby wczytać dane użycia.`,noData:`Brak danych`,featureOverview:`Karty przeglądu`,featureSessions:`Ranking sesji`,featureTimeline:`Analiza osi czasu`},daily:{title:`Dzienne użycie`,total:`Łącznie`,byType:`Według typu`,tokensTitle:`Dzienne użycie tokenów`,costTitle:`Dzienny koszt`},breakdown:{output:`Wyjście`,input:`Wejście`,cacheWrite:`Zapis do pamięci podręcznej`,cacheRead:`Odczyt z pamięci podręcznej`,total:`Łącznie`,tokensByType:`Tokeny według typu`,costByType:`Koszt według typu`},overview:{title:`Przegląd użycia`,messages:`Wiadomości`,messagesHint:`Łączna liczba wiadomości użytkownika i asystenta w wybranym zakresie.`,messagesAbbrev:`wiad.`,user:`użytkownik`,assistant:`asystent`,toolCalls:`Wywołania narzędzi`,toolCallsHint:`Łączna liczba wywołań narzędzi we wszystkich sesjach.`,toolsUsed:`użyte narzędzia`,errors:`Błędy`,errorsHint:`Łączna liczba błędów wiadomości i narzędzi w wybranym zakresie.`,toolResults:`wyniki narzędzi`,avgTokens:`Śr. tokenów / wiadomość`,avgTokensHint:`Średnia liczba tokenów na wiadomość w tym zakresie.`,avgCost:`Śr. koszt / wiadomość`,avgCostHint:`Średni koszt na wiadomość, gdy dostawcy raportują koszty.`,avgCostHintMissing:`Średni koszt na wiadomość, gdy dostawcy raportują koszty. Dla części lub wszystkich sesji w tym zakresie brakuje danych o kosztach.`,acrossMessages:`Łącznie dla {count} wiadomości`,sessions:`Sesje`,sessionsHint:`Unikalne sesje w wybranym zakresie.`,sessionsInRange:`z {count} w zakresie`,throughput:`Przepustowość`,throughputHint:`Przepustowość pokazuje liczbę tokenów na minutę aktywnego czasu. Im wyższa, tym lepiej.`,tokensPerMinute:`tok/min`,perMinute:`/ min`,errorRate:`Wskaźnik błędów`,errorHint:`Wskaźnik błędów = błędy / wszystkie wiadomości. Im niższy, tym lepiej.`,avgSession:`średnia na sesję`,cacheHitRate:`Współczynnik trafień pamięci podręcznej`,cacheHint:`Współczynnik trafień pamięci podręcznej = odczyt z pamięci podręcznej / (wejście + odczyt z pamięci podręcznej). Im wyższy, tym lepiej.`,cached:`z pamięci podręcznej`,prompt:`prompt`,calls:`wywołania`,topModels:`Najpopularniejsze modele`,topProviders:`Najpopularniejsi dostawcy`,topTools:`Najpopularniejsze narzędzia`,topAgents:`Najpopularniejsi agenci`,topChannels:`Najpopularniejsze kanały`,peakErrorDays:`Dni największej liczby błędów`,peakErrorHours:`Godziny największej liczby błędów`,noModelData:`Brak danych o modelach`,noProviderData:`Brak danych o dostawcach`,noToolCalls:`Brak wywołań narzędzi`,noAgentData:`Brak danych o agentach`,noChannelData:`Brak danych o kanałach`,noErrorData:`Brak danych o błędach`},sessions:{title:`Sesje`,shown:`Wyświetlono: {count}`,total:`Łącznie: {count}`,avg:`śr.`,all:`Wszystkie`,recent:`Ostatnio przeglądane`,recentShort:`Ostatnie`,sort:`Sortuj`,ascending:`Rosnąco`,descending:`Malejąco`,clearSelection:`Wyczyść zaznaczenie`,noRecent:`Brak ostatnich sesji`,noneInRange:`Brak sesji w zakresie`,more:`+{count} więcej`,selected:`Zaznaczone ({count})`,copy:`Kopiuj`,copyName:`Kopiuj nazwę sesji`,limitReached:`Wyświetlanych jest pierwszych 1000 sesji. Zawęź zakres dat, aby uzyskać pełne wyniki.`},details:{noUsageData:`Brak danych o użyciu dla tej sesji.`,duration:`Czas trwania`,modelMix:`Miks modeli`,filtered:`(przefiltrowane)`,close:`Zamknij szczegóły sesji`,noTimeline:`Brak danych osi czasu`,noDataInRange:`Brak danych w zakresie`,usageOverTime:`Użycie w czasie`,reset:`Resetuj`,perTurn:`Na turę`,cumulative:`Skumulowane`,turnRange:`Tury {start}–{end} z {total}`,assistantOutputTokens:`Tokeny wyjściowe asystenta`,userToolInputTokens:`Tokeny wejściowe użytkownika i narzędzi`,tokensWrittenToCache:`Tokeny zapisane do pamięci podręcznej`,tokensReadFromCache:`Tokeny odczytane z pamięci podręcznej`,noContextData:`Brak danych kontekstowych`,systemPromptBreakdown:`Podział promptu systemowego`,collapse:`Zwiń`,collapseAll:`Zwiń wszystko`,expandAll:`Rozwiń wszystko`,baseContextPerMessage:`Bazowy kontekst na wiadomość`,system:`System`,systemShort:`Sys`,skills:`Skills`,tools:`Narzędzia`,files:`Pliki`,ofInput:`z wejścia`,of:`z`,timelineFiltered:`oś czasu przefiltrowana`,conversation:`Konwersacja`,noMessages:`Brak wiadomości`,tool:`Narzędzie`,toolResult:`Wynik narzędzia`,hasTools:`Ma narzędzia`,searchConversation:`Szukaj w konwersacji`,you:`Ty`,noMessagesMatch:`Żadne wiadomości nie pasują do filtrów.`},mosaic:{title:`Aktywność według czasu`,subtitleEmpty:`Szacunki wymagają znaczników czasu sesji.`,subtitle:`Oszacowano na podstawie zakresów sesji (pierwsza/ostatnia aktywność). Strefa czasowa: {zone}.`,noTimelineData:`Brak jeszcze danych osi czasu.`,dayOfWeek:`Dzień tygodnia`,midnight:`Północ`,fourAm:`4:00`,eightAm:`8:00`,noon:`Południe`,fourPm:`16:00`,eightPm:`20:00`,legend:`Niska → Wysoka gęstość tokenów`,sun:`Nd`,mon:`Pn`,tue:`Wt`,wed:`Śr`,thu:`Cz`,fri:`Pt`,sat:`Sb`}},login:{subtitle:`Panel Gateway`,passwordPlaceholder:`opcjonalne`,showToken:`Pokaż token`,hideToken:`Ukryj token`,toggleTokenVisibility:`Przełącz widoczność tokenu`,showPassword:`Pokaż hasło`,hidePassword:`Ukryj hasło`,togglePasswordVisibility:`Przełącz widoczność hasła`},chat:{disconnected:`Rozłączono z Gateway.`,refreshTitle:`Odśwież dane czatu`,focusToggle:`Przełącz tryb skupienia (ukryj pasek boczny i nagłówek strony)`,hideCronSessions:`Ukryj sesje Cron`,showCronSessions:`Pokaż sesje Cron`,showCronSessionsHidden:`Pokaż sesje Cron ({count} ukrytych)`,onboardingDisabled:`Wyłączone podczas konfiguracji`},languages:{en:`Angielski (English)`,zhCN:`简体中文 (chiński uproszczony)`,zhTW:`繁體中文 (chiński tradycyjny)`,ptBR:`Português (brazylijski portugalski)`,de:`Deutsch (niemiecki)`,es:`Español (hiszpański)`,jaJP:`日本語 (japoński)`,ko:`한국어 (koreański)`,fr:`Français (francuski)`,tr:`Türkçe (turecki)`,uk:`Українська (ukraiński)`,id:`Bahasa Indonesia (indonezyjski)`,pl:`Polski (polski)`,th:`ไทย (tajski)`},cron:{summary:{enabled:`Włączone`,yes:`Tak`,no:`Nie`,jobs:`Zadania`,nextWake:`Następne wybudzenie`,refreshing:`Odświeżanie...`,refresh:`Odśwież`},jobs:{title:`Zadania`,subtitle:`Wszystkie zaplanowane zadania przechowywane w Gateway.`,shownOf:`Wyświetlono {shown} z {total}`,searchJobs:`Szukaj zadań`,searchPlaceholder:`Nazwa, opis lub agent`,enabled:`Włączone`,schedule:`Harmonogram`,lastRun:`Ostatnie uruchomienie`,all:`Wszystkie`,sort:`Sortuj`,nextRun:`Następne uruchomienie`,recentlyUpdated:`Ostatnio zaktualizowane`,name:`Nazwa`,direction:`Kierunek`,ascending:`Rosnąco`,descending:`Malejąco`,reset:`Resetuj`,noMatching:`Brak pasujących zadań.`,loading:`Ładowanie...`,loadMore:`Wczytaj więcej zadań`},runs:{title:`Historia uruchomień`,subtitleAll:`Najnowsze uruchomienia wszystkich zadań.`,subtitleJob:`Najnowsze uruchomienia dla {title}.`,scope:`Zakres`,allJobs:`Wszystkie zadania`,selectedJob:`Wybrane zadanie`,searchRuns:`Szukaj uruchomień`,searchPlaceholder:`Podsumowanie, błąd lub zadanie`,newestFirst:`Od najnowszych`,oldestFirst:`Od najstarszych`,status:`Status`,delivery:`Dostarczenie`,clear:`Wyczyść`,allStatuses:`Wszystkie statusy`,allDelivery:`Wszystkie stany dostarczenia`,selectJobHint:`Wybierz zadanie, aby sprawdzić historię uruchomień.`,noMatching:`Brak pasujących uruchomień.`,loadMore:`Wczytaj więcej uruchomień`,runStatusOk:`OK`,runStatusError:`Błąd`,runStatusSkipped:`Pominięto`,runStatusUnknown:`Nieznany`,deliveryDelivered:`Dostarczono`,deliveryNotDelivered:`Nie dostarczono`,deliveryUnknown:`Nieznane`,deliveryNotRequested:`Nie zażądano`},form:{editJob:`Edytuj zadanie`,newJob:`Nowe zadanie`,updateSubtitle:`Zaktualizuj wybrane zaplanowane zadanie.`,createSubtitle:`Utwórz zaplanowane wybudzenie lub uruchomienie agenta.`,required:`Wymagane`,requiredSr:`wymagane`,basics:`Podstawy`,basicsSub:`Nadaj nazwę, wybierz asystenta i ustaw stan włączenia.`,fieldName:`Nazwa`,description:`Opis`,agentId:`Identyfikator agenta`,namePlaceholder:`Poranny przegląd`,descriptionPlaceholder:`Opcjonalny kontekst dla tego zadania`,agentPlaceholder:`main lub ops`,agentHelp:`Zacznij pisać, aby wybrać znanego agenta, albo wprowadź własnego.`,schedule:`Harmonogram`,scheduleSub:`Określ, kiedy to zadanie ma być uruchamiane.`,every:`Co`,at:`O`,cronOption:`Cron`,runAt:`Uruchom o`,unit:`Jednostka`,minutes:`Minuty`,hours:`Godziny`,days:`Dni`,expression:`Wyrażenie`,expressionPlaceholder:`0 7 * * *`,everyAmountPlaceholder:`30`,timezoneOptional:`Strefa czasowa (opcjonalnie)`,timezonePlaceholder:`America/Los_Angeles`,timezoneHelp:`Wybierz popularną strefę czasową lub wpisz dowolną prawidłową strefę czasową IANA.`,jitterHelp:`Potrzebujesz opóźnienia losowego? Użyj Zaawansowane → Okno rozrzutu / Jednostka rozrzutu.`,execution:`Wykonanie`,executionSub:`Wybierz, kiedy wybudzić i co to zadanie ma zrobić.`,session:`Sesja`,main:`Główna`,isolated:`Izolowana`,sessionHelp:`Główna publikuje zdarzenie systemowe. Izolowana uruchamia dedykowaną turę agenta.`,wakeMode:`Tryb wybudzenia`,now:`Teraz`,nextHeartbeat:`Następny heartbeat`,wakeModeHelp:`Teraz uruchamia od razu. Następny heartbeat czeka na kolejny cykl.`,payloadKind:`Co ma zostać uruchomione?`,systemEvent:`Opublikuj wiadomość na głównej osi czasu`,agentTurn:`Uruchom zadanie asystenta (izolowane)`,systemEventHelp:`Wysyła Twój tekst na główną oś czasu Gateway (dobre do przypomnień/wyzwalaczy).`,agentTurnHelp:`Uruchamia działanie asystenta w osobnej sesji przy użyciu Twojego promptu.`,timeoutSeconds:`Limit czasu (sekundy)`,timeoutPlaceholder:`Opcjonalnie, np. 90`,timeoutHelp:`Opcjonalne. Pozostaw puste, aby użyć domyślnego zachowania limitu czasu Gateway dla tego uruchomienia.`,mainTimelineMessage:`Wiadomość na głównej osi czasu`,assistantTaskPrompt:`Prompt zadania asystenta`,deliverySection:`Dostarczanie`,deliverySub:`Wybierz, gdzie mają być wysyłane podsumowania uruchomień.`,resultDelivery:`Dostarczanie wyników`,announceDefault:`Ogłoś podsumowanie (domyślnie)`,webhookPost:`Webhook POST`,noneInternal:`Brak (wewnętrzne)`,deliveryHelp:`Ogłoś publikuje podsumowanie na czacie. Brak zachowuje wykonanie jako wewnętrzne.`,webhookUrl:`URL webhooka`,channel:`Kanał`,webhookPlaceholder:`https://example.com/cron`,channelHelp:`Wybierz, który połączony kanał ma otrzymać podsumowanie.`,webhookHelp:`Wysyłaj podsumowania uruchomień do endpointu webhooka.`,to:`Do`,toPlaceholder:`+1555... lub identyfikator czatu`,toHelp:`Opcjonalne nadpisanie odbiorcy (identyfikator czatu, numer telefonu lub identyfikator użytkownika).`,advanced:`Zaawansowane`,advancedHelp:`Opcjonalne nadpisania gwarancji dostarczenia, losowego rozrzutu harmonogramu i ustawień modelu.`,deleteAfterRun:`Usuń po uruchomieniu`,deleteAfterRunHelp:`Najlepsze dla jednorazowych przypomnień, które powinny zostać automatycznie usunięte.`,clearAgentOverride:`Wyczyść nadpisanie agenta`,clearAgentHelp:`Wymuś użycie domyślnego asystenta Gateway dla tego zadania.`,exactTiming:`Dokładne wyczucie czasu (bez rozrzutu)`,exactTimingHelp:`Uruchamiaj dokładnie na granicach cron bez rozłożenia w czasie.`,staggerWindow:`Okno rozrzutu`,staggerUnit:`Jednostka rozrzutu`,staggerPlaceholder:`30`,seconds:`Sekundy`,model:`Model`,modelPlaceholder:`openai/gpt-5.2`,modelHelp:`Zacznij pisać, aby wybrać znany model, albo wprowadź własny.`,thinking:`Myślenie`,thinkingPlaceholder:`low`,thinkingHelp:`Użyj sugerowanego poziomu lub wpisz wartość specyficzną dla dostawcy.`,bestEffortDelivery:`Dostarczanie best effort`,bestEffortHelp:`Nie oznaczaj zadania jako nieudanego, jeśli samo dostarczenie się nie powiedzie.`,cantAddYet:`Nie można jeszcze dodać zadania`,fillRequired:`Wypełnij wymagane pola poniżej, aby włączyć wysyłanie.`,fixFields:`Popraw {count} pole, aby kontynuować.`,fixFieldsPlural:`Popraw {count} pola, aby kontynuować.`,saving:`Zapisywanie...`,saveChanges:`Zapisz zmiany`,addJob:`Dodaj zadanie`,cancel:`Anuluj`},jobList:{allJobs:`wszystkie zadania`,selectJob:`(wybierz zadanie)`,enabled:`włączone`,disabled:`wyłączone`,edit:`Edytuj`,clone:`Klonuj`,disable:`Wyłącz`,enable:`Włącz`,run:`Uruchom`,history:`Historia`,remove:`Usuń`},jobDetail:{system:`System`,prompt:`Prompt`,delivery:`Dostarczanie`,agent:`Agent`},jobState:{status:`Status`,next:`Następne`,last:`Ostatnie`},runEntry:{noSummary:`Brak podsumowania.`,runAt:`Uruchom o`,openRunChat:`Otwórz czat uruchomienia`,next:`Następne {rel}`,due:`Termin {rel}`},errors:{nameRequired:`Nazwa jest wymagana.`,scheduleAtInvalid:`Wprowadź prawidłową datę/godzinę.`,everyAmountInvalid:`Interwał musi być większy niż 0.`,cronExprRequired:`Wyrażenie Cron jest wymagane.`,staggerAmountInvalid:`Rozrzut musi być większy niż 0.`,systemTextRequired:`Tekst systemowy jest wymagany.`,agentMessageRequired:`Wiadomość agenta jest wymagana.`,timeoutInvalid:`Jeśli ustawiono, limit czasu musi być większy niż 0 sekund.`,webhookUrlRequired:`URL webhooka jest wymagany.`,webhookUrlInvalid:`URL webhooka musi zaczynać się od http:// lub https://.`,invalidRunTime:`Nieprawidłowy czas uruchomienia.`,invalidIntervalAmount:`Nieprawidłowa wartość interwału.`,cronExprRequiredShort:`Wyrażenie Cron jest wymagane.`,invalidStaggerAmount:`Nieprawidłowa wartość rozrzutu.`,systemEventTextRequired:`Tekst zdarzenia systemowego jest wymagany.`,agentMessageRequiredShort:`Wiadomość agenta jest wymagana.`,nameRequiredShort:`Nazwa jest wymagana.`}}};export{e as pl};
2
- //# sourceMappingURL=pl-BFGaZC1a.js.map
2
+ //# sourceMappingURL=pl-UrfXg6LL.js.map