@7ots/cli 0.1.6 → 0.1.7
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 +2 -2
- package/cli/lib/assistant.mjs +6 -2
- package/cli/lib/config.mjs +2 -1
- package/cli/lib/pet-server.mjs +8 -0
- package/cli/lib/prompts.mjs +31 -17
- package/cli/lib/prowl.mjs +110 -0
- package/cli/pet/settings.html +4 -1
- package/dist/7ots.esm.js +56 -56
- package/dist/7ots.esm.js.map +3 -3
- package/dist/7ots.iife.js +56 -56
- package/dist/7ots.iife.js.map +3 -3
- package/llms.txt +1 -1
- package/package.json +17 -14
- package/server/platform/db.mjs +5 -0
- package/server/platform/routes.mjs +1 -0
- package/server/platform/runtime.mjs +2 -2
- package/server/platform/vm.mjs +408 -16
- package/server/tts.mjs +17 -4
- package/src/character/Character.js +1 -1
- package/src/character/parts.js +10 -0
- package/src/character3d/Character3D.js +105 -2
- package/src/i18n/messages/character.js +3 -0
- package/src/i18n/messages/platform.js +18 -0
package/src/character/parts.js
CHANGED
|
@@ -499,6 +499,16 @@ export const ACCESSORIES = [
|
|
|
499
499
|
{ id: 'headphones', label: 'Auriculares', group: 'head', anchor: 'eyes', color: '#111827', color2: '#ef4444', draw: (c) => `<path d="M${n(-c.w * 0.52)} 0Q${n(-c.w * 0.6)} ${n(-c.eyeDy - 16)} 0 ${n(-c.eyeDy - 16)}Q${n(c.w * 0.6)} ${n(-c.eyeDy - 16)} ${n(c.w * 0.52)} 0" stroke="${c.color}" stroke-width="8" fill="none" stroke-linecap="round"/>${[-1, 1].map((s) => `<rect x="${n(s * c.w * 0.52 - 11)}" y="-16" width="22" height="34" rx="10" fill="${c.color2}" ${S(3)}/>`).join('')}` },
|
|
500
500
|
{ id: 'hair', label: 'Tupé', group: 'head', anchor: 'top', color: '#78350f', draw: (c) => `<g transform="scale(${n(c.k)})"><path d="M-30 14Q-40 -20 -6 -26Q-10 -40 14 -36Q40 -30 34 14Q24 -8 0 -4Q-18 -2 -30 14Z" fill="${c.color}" ${S(3)}/></g>` },
|
|
501
501
|
{ id: 'sprout', label: 'Brote', group: 'head', anchor: 'top', color: '#22c55e', draw: (c) => `<g transform="scale(${n(c.k)})"><path d="M0 6V-20" stroke="#15803d" stroke-width="4" stroke-linecap="round"/><path d="M0 -18Q-24 -34 -28 -14Q-10 -8 0 -18Z" fill="${c.color}" ${S(2.5)}/><path d="M0 -20Q20 -38 28 -20Q12 -10 0 -20Z" fill="${c.color}" ${S(2.5)}/></g>` },
|
|
502
|
+
// Sombreros añadidos después: `random: false` los deja fuera de randomCharacter (si entraran en
|
|
503
|
+
// la lista del grupo, cada semilla ya creada sacaría otro ot). Se eligen a mano en el editor.
|
|
504
|
+
{ id: 'fedora', label: 'Fedora', group: 'head', anchor: 'top', random: false, color: '#57534e', color2: '#1c1917', draw: (c) => `<g transform="scale(${n(c.k)}) rotate(-6)"><path d="M-64 8Q-58 -2 -40 2Q0 10 40 2Q58 -2 64 8Q42 20 0 20Q-42 20 -64 8Z" fill="${c.color}" ${S(3)}/><path d="M-34 6Q-38 -30 -20 -38Q-6 -30 0 -34Q6 -30 20 -38Q38 -30 34 6Q0 14 -34 6Z" fill="${c.color}" ${S(3)}/><path d="M-35 -4Q0 4 35 -4L35 5Q0 13 -35 5Z" fill="${c.color2}"/><path d="M-24 -30Q-28 -14 -26 -6" stroke="#fff" stroke-width="3" fill="none" opacity=".18" stroke-linecap="round"/></g>` },
|
|
505
|
+
{ id: 'bowler', label: 'Bombín', group: 'head', anchor: 'top', random: false, color: '#1f2937', color2: '#78350f', draw: (c) => `<g transform="scale(${n(c.k)})"><path d="M-50 10Q-52 0 -42 3Q0 12 42 3Q52 0 50 10Q30 20 0 20Q-30 20 -50 10Z" fill="${c.color}" ${S(3)}/><path d="M-34 8Q-38 -44 0 -44Q38 -44 34 8Q0 15 -34 8Z" fill="${c.color}" ${S(3)}/><path d="M-35 -2Q0 6 35 -2L34 6Q0 13 -34 6Z" fill="${c.color2}"/><path d="M-20 -34Q-28 -20 -26 -8" stroke="#fff" stroke-width="3.5" fill="none" opacity=".2" stroke-linecap="round"/></g>` },
|
|
506
|
+
{ id: 'propeller', label: 'Gorra de hélice', group: 'head', anchor: 'top', random: false, color: '#3b82f6', color2: '#facc15', draw: (c) => `<g transform="scale(${n(c.k)})"><path d="M-44 14Q-46 -32 0 -34Q46 -32 44 14Z" fill="${c.color}" ${S(3)}/><path d="M-15 13Q-17 -22 0 -34Q17 -22 15 13Z" fill="${c.color2}"/><path d="M-44 14Q-46 -32 0 -34Q46 -32 44 14Z" fill="none" ${S(3)}/><path d="M-48 12Q0 22 48 12" stroke="${shade(c.color, -0.25)}" stroke-width="5" fill="none" stroke-linecap="round"/><path d="M0 -34V-46" stroke="#1f2937" stroke-width="3.5" stroke-linecap="round"/><ellipse cx="-17" cy="-48" rx="17" ry="5.5" fill="#ef4444" ${S(2)}/><ellipse cx="17" cy="-48" rx="17" ry="5.5" fill="#22c55e" ${S(2)}/><circle cy="-48" r="4.5" fill="${c.color2}" ${S(2)}/></g>` },
|
|
507
|
+
{ id: 'witch', label: 'Sombrero de bruja', group: 'head', anchor: 'top', random: false, color: '#312e81', color2: '#a855f7', draw: (c) => `<g transform="scale(${n(c.k)})"><ellipse cy="10" rx="62" ry="12" fill="${c.color}" ${S(3)}/><path d="M-34 8Q-22 -38 4 -66Q22 -86 46 -76Q22 -66 18 -40Q24 -12 34 8Q0 16 -34 8Z" fill="${c.color}" ${S(3)}/><path d="M-32 -2Q0 6 32 -2L34 8Q0 16 -34 8Z" fill="${c.color2}"/><rect x="-8" y="-2" width="16" height="12" rx="2" fill="none" stroke="#facc15" stroke-width="3"/></g>` },
|
|
508
|
+
{ id: 'fez', label: 'Fez', group: 'head', anchor: 'top', random: false, color: '#b91c1c', color2: '#111827', draw: (c) => `<g transform="scale(${n(c.k)}) rotate(6)"><path d="M-26 12L-20 -34Q0 -38 20 -34L26 12Q0 18 -26 12Z" fill="${c.color}" ${S(3)}/><ellipse cy="-34" rx="20" ry="5" fill="${shade(c.color, -0.18)}" ${S(2.5)}/><path d="M0 -36Q22 -38 26 -8" stroke="${c.color2}" stroke-width="3" fill="none" stroke-linecap="round"/><path d="M21 -10h10l3 16h-16Z" fill="${c.color2}"/><path d="M-14 -26V6" stroke="#fff" stroke-width="3" opacity=".15" stroke-linecap="round"/></g>` },
|
|
509
|
+
{ id: 'sombrero', label: 'Sombrero mexicano', group: 'head', anchor: 'top', random: false, color: '#eab308', color2: '#dc2626', draw: (c) => `<g transform="scale(${n(c.k)})"><path d="M-84 10Q-80 -6 -56 2Q0 16 56 2Q80 -6 84 10Q60 30 0 30Q-60 30 -84 10Z" fill="${c.color}" ${S(3)}/><path d="M-26 8Q-30 -40 0 -44Q30 -40 26 8Q0 16 -26 8Z" fill="${c.color}" ${S(3)}/><path d="M-27 -4L-18 3L-9 -4L0 3L9 -4L18 3L27 -4" stroke="${c.color2}" stroke-width="4" fill="none" stroke-linejoin="round"/>${[-70, -48, -24, 0, 24, 48, 70].map((x) => `<circle cx="${x}" cy="${n(22 - Math.abs(x) * 0.12)}" r="3.5" fill="${c.color2}"/>`).join('')}</g>` },
|
|
510
|
+
{ id: 'bucket', label: 'Gorro pescador', group: 'head', anchor: 'top', random: false, color: '#a3a35a', color2: '#65662f', draw: (c) => `<g transform="scale(${n(c.k)})"><path d="M-46 4Q0 14 46 4L60 20Q0 34 -60 20Z" fill="${shade(c.color, -0.08)}" ${S(3)}/><path d="M-36 -26Q0 -38 36 -26L44 6Q0 16 -44 6Z" fill="${c.color}" ${S(3)}/><path d="M-50 12Q0 24 50 12M-40 -1Q0 9 40 -1" stroke="${c.color2}" stroke-width="1.8" stroke-dasharray="4 3" fill="none"/></g>` },
|
|
511
|
+
{ id: 'jester', label: 'Bufón', group: 'head', anchor: 'top', random: false, color: '#7c3aed', color2: '#16a34a', draw: (c) => `<g transform="scale(${n(c.k)})"><path d="M-40 6Q-48 -28 -76 -26Q-56 -42 -26 -34Q-14 -20 -10 6Z" fill="${c.color}" ${S(3)}/><path d="M40 6Q48 -28 76 -26Q56 -42 26 -34Q14 -20 10 6Z" fill="${c.color}" ${S(3)}/><path d="M-16 6Q-18 -42 0 -64Q18 -42 16 6Z" fill="${c.color2}" ${S(3)}/>${[[-76, -26], [0, -64], [76, -26]].map(([x, y]) => `<circle cx="${x}" cy="${y}" r="6.5" fill="#facc15" ${S(2)}/>`).join('')}<rect x="-46" y="0" width="92" height="16" rx="8" fill="${shade(c.color, -0.2)}" ${S(3)}/></g>` },
|
|
502
512
|
// ── ojos ──
|
|
503
513
|
{ id: 'glasses', label: 'Gafas redondas', group: 'eyes', anchor: 'eyes', color: '#1f2937', draw: (c) => `${[-1, 1].map((s) => `<circle cx="${n(s * c.sp)}" r="${n(c.r * 1.55)}" fill="#fff" fill-opacity=".12" stroke="${c.color}" stroke-width="3.5"/>`).join('')}<path d="M${n(-c.sp + c.r * 1.55)} -2Q0 -8 ${n(c.sp - c.r * 1.55)} -2" stroke="${c.color}" stroke-width="3" fill="none"/>` },
|
|
504
514
|
{ id: 'square', label: 'Gafas cuadradas', group: 'eyes', anchor: 'eyes', color: '#1f2937', draw: (c) => `${[-1, 1].map((s) => `<rect x="${n(s * c.sp - c.r * 1.7)}" y="${n(-c.r * 1.3)}" width="${n(c.r * 3.4)}" height="${n(c.r * 2.6)}" rx="4" fill="#fff" fill-opacity=".12" stroke="${c.color}" stroke-width="4"/>`).join('')}<path d="M${n(-c.sp + c.r * 1.7)} -3H${n(c.sp - c.r * 1.7)}" stroke="${c.color}" stroke-width="4"/>` },
|
|
@@ -651,7 +651,99 @@ export class Character3D {
|
|
|
651
651
|
h.rotation.z = -0.12;
|
|
652
652
|
return onTop(h, 0.06);
|
|
653
653
|
}
|
|
654
|
-
case '
|
|
654
|
+
case 'fedora': case 'bowler': {
|
|
655
|
+
const fm = mat('felt', col);
|
|
656
|
+
const fed = id === 'fedora';
|
|
657
|
+
const h = G(
|
|
658
|
+
// ala (fedora: algo más ancha y levantada atrás)
|
|
659
|
+
M(new THREE.CylinderGeometry((fed ? 0.4 : 0.32) * kk, (fed ? 0.4 : 0.32) * kk, 0.022 * kk, 48), fm, null, fed ? [-0.08, 0, 0] : null),
|
|
660
|
+
fed
|
|
661
|
+
? M(new THREE.CylinderGeometry(0.19 * kk, 0.23 * kk, 0.24 * kk, 40), fm, [0, 0.12 * kk, 0], null, [1, 1, 0.85])
|
|
662
|
+
: M(this.sph(0.23 * kk, 40, 20, 0, TAU, 0, Math.PI / 2), fm, [0, 0.06 * kk, 0], null, [1, 1.05, 0.92]),
|
|
663
|
+
M(new THREE.CylinderGeometry(0.235 * kk, 0.235 * kk, 0.05 * kk, 40), mat('felt', col2), [0, 0.045 * kk, 0], null, [1, 1, fed ? 0.88 : 0.93]),
|
|
664
|
+
);
|
|
665
|
+
if (!fed) h.add(M(new THREE.CylinderGeometry(0.23 * kk, 0.23 * kk, 0.06 * kk, 40), fm, [0, 0.03 * kk, 0], null, [1, 1, 0.92]));
|
|
666
|
+
if (fed) h.add(M(this.sph(0.12 * kk, 24, 10), mat('felt', shade(col, -0.25)), [0, 0.24 * kk, 0], null, [1, 0.25, 0.6])); // pellizco de la copa
|
|
667
|
+
h.rotation.z = fed ? -0.14 : -0.06;
|
|
668
|
+
return onTop(h, 0.06);
|
|
669
|
+
}
|
|
670
|
+
case 'witch': {
|
|
671
|
+
const fm = mat('felt', col);
|
|
672
|
+
const o = G(M(new THREE.CylinderGeometry(0.46 * kk, 0.46 * kk, 0.02 * kk, 48), fm));
|
|
673
|
+
// cono doblado: tres tramos cada vez más finos e inclinados
|
|
674
|
+
let y = 0;
|
|
675
|
+
let x = 0;
|
|
676
|
+
const segs = [[0.25, 0.17, 0.3, 0], [0.17, 0.09, 0.22, -0.35], [0.09, 0.01, 0.2, -0.9]];
|
|
677
|
+
for (const [r0, r1, h, rz] of segs) {
|
|
678
|
+
const m = M(new THREE.CylinderGeometry(r1 * kk, r0 * kk, h * kk, 32), fm);
|
|
679
|
+
m.geometry.translate(0, (h / 2) * kk, 0);
|
|
680
|
+
m.position.set(x, y, 0);
|
|
681
|
+
m.rotation.z = rz;
|
|
682
|
+
o.add(m);
|
|
683
|
+
x += -Math.sin(rz) * h * kk;
|
|
684
|
+
y += Math.cos(rz) * h * kk;
|
|
685
|
+
}
|
|
686
|
+
o.add(M(new THREE.CylinderGeometry(0.245 * kk, 0.25 * kk, 0.06 * kk, 40), mat('felt', col2), [0, 0.04 * kk, 0]));
|
|
687
|
+
o.add(M(new THREE.BoxGeometry(0.08 * kk, 0.06 * kk, 0.02 * kk), mat('metal', '#facc15'), [0, 0.04 * kk, 0.25 * kk]));
|
|
688
|
+
o.rotation.z = 0.1;
|
|
689
|
+
return onTop(o, 0.05);
|
|
690
|
+
}
|
|
691
|
+
case 'fez': {
|
|
692
|
+
const o = G(
|
|
693
|
+
M(new THREE.CylinderGeometry(0.16 * kk, 0.2 * kk, 0.3 * kk, 36), mat('felt', col), [0, 0.15 * kk, 0]),
|
|
694
|
+
M(new THREE.CylinderGeometry(0.006 * kk, 0.006 * kk, 0.14 * kk, 6), mat('felt', col2), [0.07 * kk, 0.305 * kk, 0.02 * kk], [0, 0, Math.PI / 2]),
|
|
695
|
+
);
|
|
696
|
+
const tas = G(
|
|
697
|
+
M(new THREE.CylinderGeometry(0.006 * kk, 0.006 * kk, 0.2 * kk, 6), mat('felt', col2), [0, -0.1 * kk, 0]),
|
|
698
|
+
M(new THREE.ConeGeometry(0.035 * kk, 0.09 * kk, 12), mat('felt', col2), [0, -0.2 * kk, 0]),
|
|
699
|
+
);
|
|
700
|
+
tas.position.set(0.14 * kk, 0.3 * kk, 0.02 * kk);
|
|
701
|
+
tas.rotation.z = 0.2;
|
|
702
|
+
o.add(tas);
|
|
703
|
+
this.anims.push((sec) => { tas.rotation.z = 0.2 + Math.sin(sec * 2.4) * 0.12; });
|
|
704
|
+
o.rotation.z = -0.1;
|
|
705
|
+
return onTop(o, 0.06);
|
|
706
|
+
}
|
|
707
|
+
case 'sombrero': {
|
|
708
|
+
const fm = mat('felt', col);
|
|
709
|
+
const o = G(
|
|
710
|
+
M(this.tor(0.5 * kk, 0.035 * kk, 10, 56), fm, [0, 0.03 * kk, 0], [Math.PI / 2, 0, 0]),
|
|
711
|
+
M(new THREE.CylinderGeometry(0.52 * kk, 0.52 * kk, 0.02 * kk, 56), fm),
|
|
712
|
+
M(new THREE.CylinderGeometry(0.13 * kk, 0.21 * kk, 0.26 * kk, 36), fm, [0, 0.13 * kk, 0]),
|
|
713
|
+
M(this.sph(0.13 * kk, 32, 12, 0, TAU, 0, Math.PI / 2), fm, [0, 0.26 * kk, 0], null, [1, 0.7, 1]),
|
|
714
|
+
M(new THREE.CylinderGeometry(0.205 * kk, 0.215 * kk, 0.05 * kk, 36), mat('felt', col2), [0, 0.04 * kk, 0]),
|
|
715
|
+
);
|
|
716
|
+
for (let i = 0; i < 12; i++) {
|
|
717
|
+
const a = (i / 12) * TAU;
|
|
718
|
+
o.add(M(this.sph(0.025 * kk, 10, 8), mat('felt', col2), [Math.cos(a) * 0.53 * kk, 0.0, Math.sin(a) * 0.53 * kk]));
|
|
719
|
+
}
|
|
720
|
+
return onTop(o, 0.05);
|
|
721
|
+
}
|
|
722
|
+
case 'bucket': {
|
|
723
|
+
const fm = mat('felt', col);
|
|
724
|
+
const o = G(
|
|
725
|
+
M(new THREE.CylinderGeometry(0.21 * kk, 0.26 * kk, 0.2 * kk, 40), fm, [0, 0.1 * kk, 0]),
|
|
726
|
+
M(this.sph(0.21 * kk, 40, 10, 0, TAU, 0, Math.PI / 2), fm, [0, 0.2 * kk, 0], null, [1, 0.25, 1]),
|
|
727
|
+
M(new THREE.CylinderGeometry(0.27 * kk, 0.37 * kk, 0.06 * kk, 48), mat('felt', shade(col, -0.08)), [0, -0.01 * kk, 0]),
|
|
728
|
+
);
|
|
729
|
+
return onTop(o, 0.08);
|
|
730
|
+
}
|
|
731
|
+
case 'jester': {
|
|
732
|
+
const o = G(fur(new THREE.TorusGeometry(0.24 * kk, 0.04 * kk, 12, 40).rotateX(Math.PI / 2), shade(col, -0.2), 0.6));
|
|
733
|
+
const cols = [col, col2, col];
|
|
734
|
+
[-1, 0, 1].forEach((s, i) => {
|
|
735
|
+
const len = s ? 0.42 : 0.5;
|
|
736
|
+
const horn = G(M(new THREE.ConeGeometry(0.12 * kk, len * kk, 24), mat('felt', cols[i]), [0, (len / 2) * kk, 0]));
|
|
737
|
+
horn.add(M(this.sph(0.04 * kk, 14, 10), mat('metal', '#facc15'), [0, len * kk, 0]));
|
|
738
|
+
horn.position.set(s * 0.12 * kk, 0.02 * kk, 0);
|
|
739
|
+
horn.rotation.z = -s * 0.95;
|
|
740
|
+
o.add(horn);
|
|
741
|
+
const ph = i * 1.7;
|
|
742
|
+
this.anims.push((sec) => { horn.rotation.z = -s * 0.95 + Math.sin(sec * 1.8 + ph) * 0.06; });
|
|
743
|
+
});
|
|
744
|
+
return onTop(o, 0.05);
|
|
745
|
+
}
|
|
746
|
+
case 'beanie': case 'santa': case 'cap': case 'hardhat': case 'viking': case 'beret': case 'propeller': {
|
|
655
747
|
const cp = capFor(id === 'beret' ? 0.14 : 0.24);
|
|
656
748
|
const dome = this.sph(1, 40, 20, 0, TAU, 0, Math.PI / 2).scale(cp.w * 1.08, top.y - cp.y + 0.05 * kk, cp.d * 1.1);
|
|
657
749
|
const o = G();
|
|
@@ -663,8 +755,19 @@ export class Character3D {
|
|
|
663
755
|
} else if (id === 'beret') {
|
|
664
756
|
o.add(M(dome, mat('felt', col), null, [0, 0, -0.25], [1.25, 0.45, 1.2]));
|
|
665
757
|
} else {
|
|
666
|
-
const m = id === 'viking' ? mat('metal', '#a3a3a3') : id === 'cap' ? mat('felt', col) : mat('plastic', col);
|
|
758
|
+
const m = id === 'viking' ? mat('metal', '#a3a3a3') : id === 'cap' || id === 'propeller' ? mat('felt', col) : mat('plastic', col);
|
|
667
759
|
o.add(M(dome, m));
|
|
760
|
+
if (id === 'propeller') {
|
|
761
|
+
// gorra de hélice: gajo de color, varilla y hélice que gira despacio
|
|
762
|
+
const hh = top.y - cp.y + 0.05 * kk;
|
|
763
|
+
o.add(M(this.sph(1, 24, 12, Math.PI / 2 - 0.35, 0.7, 0, Math.PI / 2).scale(cp.w * 1.085, hh * 1.005, cp.d * 1.105), mat('felt', col2)));
|
|
764
|
+
o.add(M(new THREE.CylinderGeometry(0.008 * kk, 0.008 * kk, 0.09 * kk, 8), mat('metal', '#9ca3af'), [0, hh + 0.04 * kk, 0]));
|
|
765
|
+
const prop = G(M(this.sph(0.02 * kk, 12, 8), mat('plastic', col2)));
|
|
766
|
+
for (const [sx, c2] of [[-1, '#ef4444'], [1, '#22c55e']]) prop.add(M(this.sph(1, 16, 8), mat('plastic', c2), [sx * 0.085 * kk, 0, 0], [sx * 0.3, 0, 0], [0.085 * kk, 0.008 * kk, 0.028 * kk]));
|
|
767
|
+
prop.position.y = hh + 0.085 * kk;
|
|
768
|
+
o.add(prop);
|
|
769
|
+
this.anims.push((sec) => { prop.rotation.y = sec * 5; });
|
|
770
|
+
}
|
|
668
771
|
if (id === 'cap') o.add(M(new THREE.CylinderGeometry(cp.w * 0.75, cp.w * 0.75, 0.02 * kk, 32, 1, false, -Math.PI / 2, Math.PI), mat('felt', col2 === '#ffffff' ? shade(col, -0.2) : col2), [0, 0.01, cp.d * 0.9], null, [1, 1, 0.9]));
|
|
669
772
|
if (id === 'hardhat') o.add(M(new THREE.CylinderGeometry(cp.w * 1.25, cp.w * 1.25, 0.02 * kk, 40), mat('plastic', col), [0, 0, 0.02]));
|
|
670
773
|
if (id === 'viking') for (const sx of [-1, 1]) o.add(M(new THREE.ConeGeometry(0.06 * kk, 0.3 * kk, 16), mat('plastic', '#fef3c7'), [sx * cp.w * 1.05, (top.y - cp.y) * 0.5, 0], [0, 0, -sx * 1.0]));
|
|
@@ -45,6 +45,7 @@ const es = {
|
|
|
45
45
|
party: 'Fiesta', chef: 'Chef', viking: 'Vikingo', grad: 'Graduación', beret: 'Boina', bow: 'Lazo', flower: 'Flor', halo: 'Aureola', horns: 'Cuernos',
|
|
46
46
|
antenna: 'Antenas', bunny: 'Orejas de conejo', catears: 'Orejas de gato', santa: 'Papá Noel', hardhat: 'Casco de obra', headband: 'Cinta ninja',
|
|
47
47
|
bandana: 'Pañuelo pirata', helmet: 'Casco espacial', headphones: 'Auriculares', hair: 'Tupé', sprout: 'Brote',
|
|
48
|
+
fedora: 'Fedora', bowler: 'Bombín', propeller: 'Gorra de hélice', witch: 'Sombrero de bruja', fez: 'Fez', sombrero: 'Sombrero mexicano', bucket: 'Gorro pescador', jester: 'Bufón',
|
|
48
49
|
glasses: 'Gafas redondas', square: 'Gafas cuadradas', nerd: 'Gafas empollón', sunglasses: 'Gafas de sol', aviator: 'Aviador', heartglasses: 'Gafas corazón',
|
|
49
50
|
starglasses: 'Gafas estrella', '3d': 'Gafas 3D', monocle: 'Monóculo', eyepatch: 'Parche', goggles: 'Gafas de piloto', visor: 'Visor',
|
|
50
51
|
mustache: 'Bigote', handlebar: 'Bigote manillar', beard: 'Barba', wizardbeard: 'Barba de mago', goatee: 'Perilla', pipe: 'Pipa', lollipop: 'Piruleta',
|
|
@@ -214,6 +215,7 @@ const en = {
|
|
|
214
215
|
party: 'Party', chef: 'Chef', viking: 'Viking', grad: 'Graduation', beret: 'Beret', bow: 'Bow', flower: 'Flower', halo: 'Halo', horns: 'Horns',
|
|
215
216
|
antenna: 'Antennae', bunny: 'Bunny ears', catears: 'Cat ears', santa: 'Santa', hardhat: 'Hard hat', headband: 'Ninja headband',
|
|
216
217
|
bandana: 'Pirate bandana', helmet: 'Space helmet', headphones: 'Headphones', hair: 'Quiff', sprout: 'Sprout',
|
|
218
|
+
fedora: 'Fedora', bowler: 'Bowler hat', propeller: 'Propeller cap', witch: 'Witch hat', fez: 'Fez', sombrero: 'Sombrero', bucket: 'Bucket hat', jester: 'Jester hat',
|
|
217
219
|
glasses: 'Round glasses', square: 'Square glasses', nerd: 'Nerd glasses', sunglasses: 'Sunglasses', aviator: 'Aviator', heartglasses: 'Heart glasses',
|
|
218
220
|
starglasses: 'Star glasses', '3d': '3D glasses', monocle: 'Monocle', eyepatch: 'Eye patch', goggles: 'Pilot goggles', visor: 'Visor',
|
|
219
221
|
mustache: 'Mustache', handlebar: 'Handlebar mustache', beard: 'Beard', wizardbeard: 'Wizard beard', goatee: 'Goatee', pipe: 'Pipe', lollipop: 'Lollipop',
|
|
@@ -383,6 +385,7 @@ const pt = {
|
|
|
383
385
|
party: 'Festa', chef: 'Chef', viking: 'Viking', grad: 'Formatura', beret: 'Boina', bow: 'Laço', flower: 'Flor', halo: 'Auréola', horns: 'Chifres',
|
|
384
386
|
antenna: 'Antenas', bunny: 'Orelhas de coelho', catears: 'Orelhas de gato', santa: 'Papai Noel', hardhat: 'Capacete de obra', headband: 'Faixa ninja',
|
|
385
387
|
bandana: 'Bandana pirata', helmet: 'Capacete espacial', headphones: 'Fones de ouvido', hair: 'Topete', sprout: 'Broto',
|
|
388
|
+
fedora: 'Fedora', bowler: 'Chapéu-coco', propeller: 'Boné de hélice', witch: 'Chapéu de bruxa', fez: 'Fez', sombrero: 'Sombreiro mexicano', bucket: 'Chapéu de pescador', jester: 'Chapéu de bobo da corte',
|
|
386
389
|
glasses: 'Óculos redondos', square: 'Óculos quadrados', nerd: 'Óculos de nerd', sunglasses: 'Óculos de sol', aviator: 'Aviador', heartglasses: 'Óculos de coração',
|
|
387
390
|
starglasses: 'Óculos de estrela', '3d': 'Óculos 3D', monocle: 'Monóculo', eyepatch: 'Tapa-olho', goggles: 'Óculos de piloto', visor: 'Viseira',
|
|
388
391
|
mustache: 'Bigode', handlebar: 'Bigode guidão', beard: 'Barba', wizardbeard: 'Barba de mago', goatee: 'Cavanhaque', pipe: 'Cachimbo', lollipop: 'Pirulito',
|
|
@@ -95,6 +95,12 @@ const es = {
|
|
|
95
95
|
jobGone: 'Ese trabajo ya no existe o ya terminó',
|
|
96
96
|
llmLimit: 'Este trabajo ya usó sus {max} llamadas al modelo',
|
|
97
97
|
paidSoon: 'Los servidores de 7ots llegan pronto; mientras tanto usa tu propio servidor',
|
|
98
|
+
paidOff: 'Los servidores de 7ots aún no están activados para tu cuenta; mientras tanto usa tu propio servidor',
|
|
99
|
+
paidUnavailable: 'Los servidores de 7ots no están disponibles ahora mismo; inténtalo más tarde',
|
|
100
|
+
exists: 'Este ot ya tiene un servidor; elimínalo o revócalo antes de crear otro',
|
|
101
|
+
accountLimit: 'Tu cuenta ya tiene {max} servidor(es) de 7ots (su límite)',
|
|
102
|
+
full: 'No quedan servidores de 7ots disponibles por ahora; inténtalo más tarde',
|
|
103
|
+
badSize: 'Tamaño de servidor no disponible',
|
|
98
104
|
},
|
|
99
105
|
},
|
|
100
106
|
};
|
|
@@ -188,6 +194,12 @@ const en = {
|
|
|
188
194
|
jobGone: 'That job no longer exists or already finished',
|
|
189
195
|
llmLimit: 'This job already used its {max} model calls',
|
|
190
196
|
paidSoon: '7ots servers are coming soon; meanwhile use your own server',
|
|
197
|
+
paidOff: '7ots servers are not enabled for your account yet; meanwhile use your own server',
|
|
198
|
+
paidUnavailable: '7ots servers are not available right now; try again later',
|
|
199
|
+
exists: 'This ot already has a server; delete or revoke it before creating another',
|
|
200
|
+
accountLimit: 'Your account already has {max} 7ots server(s) (its limit)',
|
|
201
|
+
full: 'No 7ots servers are available right now; try again later',
|
|
202
|
+
badSize: 'That server size is not available',
|
|
191
203
|
},
|
|
192
204
|
},
|
|
193
205
|
};
|
|
@@ -281,6 +293,12 @@ const pt = {
|
|
|
281
293
|
jobGone: 'Esse trabalho não existe mais ou já terminou',
|
|
282
294
|
llmLimit: 'Este trabalho já usou suas {max} chamadas ao modelo',
|
|
283
295
|
paidSoon: 'Os servidores do 7ots chegam em breve; enquanto isso use seu próprio servidor',
|
|
296
|
+
paidOff: 'Os servidores do 7ots ainda não estão ativados para sua conta; enquanto isso use seu próprio servidor',
|
|
297
|
+
paidUnavailable: 'Os servidores do 7ots não estão disponíveis agora; tente mais tarde',
|
|
298
|
+
exists: 'Este ot já tem um servidor; exclua ou revogue antes de criar outro',
|
|
299
|
+
accountLimit: 'Sua conta já tem {max} servidor(es) do 7ots (seu limite)',
|
|
300
|
+
full: 'Não há servidores do 7ots disponíveis agora; tente mais tarde',
|
|
301
|
+
badSize: 'Esse tamanho de servidor não está disponível',
|
|
284
302
|
},
|
|
285
303
|
},
|
|
286
304
|
};
|