@7ots/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.env.example +140 -0
  2. package/LICENSE +21 -0
  3. package/README.md +655 -0
  4. package/brand/apple-touch-icon.png +0 -0
  5. package/brand/favicon.svg +4 -0
  6. package/brand/icon-512.png +0 -0
  7. package/brand/mark-mono.svg +3 -0
  8. package/brand/mark.svg +4 -0
  9. package/brand/og-es.png +0 -0
  10. package/brand/og-pt.png +0 -0
  11. package/brand/og.png +0 -0
  12. package/brand/ots.json +11 -0
  13. package/brand/tokens.css +59 -0
  14. package/brand/wordmark.svg +5 -0
  15. package/cli/7ots.mjs +400 -0
  16. package/cli/lib/brain.mjs +143 -0
  17. package/cli/lib/config.mjs +70 -0
  18. package/cli/lib/hooks.mjs +151 -0
  19. package/cli/lib/i18n.mjs +480 -0
  20. package/cli/lib/identity.mjs +51 -0
  21. package/cli/lib/install.mjs +79 -0
  22. package/cli/lib/lines.mjs +73 -0
  23. package/cli/lib/meet.mjs +166 -0
  24. package/cli/lib/open.mjs +19 -0
  25. package/cli/lib/orquesta.mjs +84 -0
  26. package/cli/lib/paths.mjs +49 -0
  27. package/cli/lib/pet-core.mjs +184 -0
  28. package/cli/lib/pet-server.mjs +296 -0
  29. package/cli/lib/prompts.mjs +75 -0
  30. package/cli/lib/terminal.mjs +145 -0
  31. package/cli/lib/ui.mjs +234 -0
  32. package/cli/lib/wizard.mjs +279 -0
  33. package/cli/pet/electron/main.cjs +86 -0
  34. package/cli/pet/pet.html +404 -0
  35. package/dist/7ots.esm.js +627 -0
  36. package/dist/7ots.esm.js.map +7 -0
  37. package/dist/7ots.iife.js +627 -0
  38. package/dist/7ots.iife.js.map +7 -0
  39. package/llms.txt +57 -0
  40. package/package.json +73 -0
  41. package/server/admin.mjs +213 -0
  42. package/server/apuchat-relay.mjs +170 -0
  43. package/server/channels/agent.mjs +136 -0
  44. package/server/channels/apuchat.mjs +364 -0
  45. package/server/channels/apumail.mjs +211 -0
  46. package/server/channels/index.mjs +69 -0
  47. package/server/contact.mjs +151 -0
  48. package/server/demo.mjs +154 -0
  49. package/server/i18n.mjs +54 -0
  50. package/server/identity.mjs +108 -0
  51. package/server/llm.mjs +413 -0
  52. package/server/platform/auth.mjs +290 -0
  53. package/server/platform/crypto.mjs +80 -0
  54. package/server/platform/db.mjs +130 -0
  55. package/server/platform/routes.mjs +388 -0
  56. package/server/platform/runtime.mjs +180 -0
  57. package/server/platform/store.mjs +331 -0
  58. package/server/sdk.mjs +125 -0
  59. package/server/server.mjs +456 -0
  60. package/server/settings.mjs +177 -0
  61. package/server/tts.mjs +186 -0
  62. package/skills/7ots/SKILL.md +59 -0
  63. package/src/actions/ActionRegistry.js +254 -0
  64. package/src/actions/PageTools.js +270 -0
  65. package/src/actions/builtins.js +565 -0
  66. package/src/auth/AuthManager.js +128 -0
  67. package/src/avatar/AvatarStage.js +473 -0
  68. package/src/character/AvatarEditor.js +829 -0
  69. package/src/character/Character.js +1191 -0
  70. package/src/character/motion.js +794 -0
  71. package/src/character/parts.js +559 -0
  72. package/src/context/ContextManager.js +472 -0
  73. package/src/core/AgentBrain.js +341 -0
  74. package/src/core/AgentWidget.js +1059 -0
  75. package/src/core/EventBus.js +61 -0
  76. package/src/core/Proactivity.js +363 -0
  77. package/src/core/storage.js +35 -0
  78. package/src/i18n/index.js +193 -0
  79. package/src/i18n/messages/character.js +543 -0
  80. package/src/i18n/messages/identity.js +141 -0
  81. package/src/i18n/messages/platform.js +114 -0
  82. package/src/i18n/messages/server.js +630 -0
  83. package/src/i18n/messages/widget.js +362 -0
  84. package/src/identity/ContactCard.js +351 -0
  85. package/src/identity/Face.js +148 -0
  86. package/src/identity/random.js +112 -0
  87. package/src/identity/schema.js +262 -0
  88. package/src/index.js +117 -0
  89. package/src/integrations/apuchat.js +212 -0
  90. package/src/integrations/apumail.js +88 -0
  91. package/src/llm/ProxyLLM.js +87 -0
  92. package/src/mcp/McpClient.js +153 -0
  93. package/src/ui/Companion.js +498 -0
  94. package/src/ui/UIManager.js +425 -0
  95. package/src/ui/VirtualPointer.js +746 -0
  96. package/src/ui/markdown.js +94 -0
  97. package/src/voice/VoiceEngine.js +227 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Textos del módulo de identidad (`identity.*`): tarjeta <ots-identity>, cara (createFace) y las
3
+ * líneas de personalidad del system prompt (identityPrompt). Funciona también en Node (lo carga
4
+ * src/identity/schema.js, que importa el proxy).
5
+ */
6
+
7
+ import { addCatalog } from '../index.js';
8
+
9
+ const es = {
10
+ identity: {
11
+ card: {
12
+ label: 'Tarjeta de {name}',
13
+ loadError: 'No se pudo cargar la tarjeta del agente.',
14
+ loading: 'Cargando…',
15
+ chat: 'Chatear aquí',
16
+ chatSub: 'En esta página',
17
+ mail: 'Escribir un correo',
18
+ mailInstant: '{email} · contesta al momento',
19
+ mailSubject: 'Hola, {name}',
20
+ apuchatSub: 'En la app de apuchat',
21
+ apuchatInstant: 'En la app de apuchat · contesta y te llama',
22
+ apuchatCopied: 'Copiado @{handle}: búscalo en la app de apuchat y escríbele.',
23
+ apuchatSearch: 'Busca @{handle} en la app de apuchat y escríbele.',
24
+ call: 'Videollamada ahora',
25
+ callSub: 'Cara a cara en meet.apuchat.com',
26
+ callPreparing: 'Preparando la llamada con {name}…',
27
+ callReady: '{name} ya te espera en la llamada.',
28
+ callError: 'No se pudo abrir la llamada: {error}',
29
+ listen: 'Escuchar su voz',
30
+ save: 'Guardar contacto',
31
+ saveSub: 'vCard',
32
+ footer: 'Identidad de agente',
33
+ },
34
+ greeting: {
35
+ intro: 'Hola, soy {name}.',
36
+ introRole: 'Hola, soy {name}, {role}.',
37
+ offer: '¿En qué te ayudo?',
38
+ },
39
+ face: {
40
+ subtitles: 'Subtítulos',
41
+ loadError: 'No se pudo cargar la identidad ({status})',
42
+ },
43
+ prompt: {
44
+ youAre: 'Eres {name}.',
45
+ youAreRole: 'Eres {name}, {role}.',
46
+ about: 'Sobre ti: {bio}',
47
+ tone: 'Tu tono: {tone}.',
48
+ traits: 'Rasgos: {traits}.',
49
+ },
50
+ },
51
+ };
52
+
53
+ const en = {
54
+ identity: {
55
+ card: {
56
+ label: '{name}’s card',
57
+ loadError: 'Couldn’t load the agent’s card.',
58
+ loading: 'Loading…',
59
+ chat: 'Chat here',
60
+ chatSub: 'On this page',
61
+ mail: 'Send an email',
62
+ mailInstant: '{email} · replies instantly',
63
+ mailSubject: 'Hi, {name}',
64
+ apuchatSub: 'In the apuchat app',
65
+ apuchatInstant: 'In the apuchat app · replies and calls you',
66
+ apuchatCopied: 'Copied @{handle}: look it up in the apuchat app and send a message.',
67
+ apuchatSearch: 'Look up @{handle} in the apuchat app and send a message.',
68
+ call: 'Video call now',
69
+ callSub: 'Face to face on meet.apuchat.com',
70
+ callPreparing: 'Setting up the call with {name}…',
71
+ callReady: '{name} is waiting for you on the call.',
72
+ callError: 'Couldn’t open the call: {error}',
73
+ listen: 'Hear their voice',
74
+ save: 'Save contact',
75
+ saveSub: 'vCard',
76
+ footer: 'Agent identity',
77
+ },
78
+ greeting: {
79
+ intro: 'Hi, I’m {name}.',
80
+ introRole: 'Hi, I’m {name}, {role}.',
81
+ offer: 'How can I help you?',
82
+ },
83
+ face: {
84
+ subtitles: 'Subtitles',
85
+ loadError: 'Couldn’t load the identity ({status})',
86
+ },
87
+ prompt: {
88
+ youAre: 'You are {name}.',
89
+ youAreRole: 'You are {name}, {role}.',
90
+ about: 'About you: {bio}',
91
+ tone: 'Your tone: {tone}.',
92
+ traits: 'Traits: {traits}.',
93
+ },
94
+ },
95
+ };
96
+
97
+ const pt = {
98
+ identity: {
99
+ card: {
100
+ label: 'Cartão de {name}',
101
+ loadError: 'Não foi possível carregar o cartão do agente.',
102
+ loading: 'Carregando…',
103
+ chat: 'Conversar aqui',
104
+ chatSub: 'Nesta página',
105
+ mail: 'Enviar um e-mail',
106
+ mailInstant: '{email} · responde na hora',
107
+ mailSubject: 'Olá, {name}',
108
+ apuchatSub: 'No app do apuchat',
109
+ apuchatInstant: 'No app do apuchat · responde e liga para você',
110
+ apuchatCopied: 'Copiado @{handle}: procure no app do apuchat e mande uma mensagem.',
111
+ apuchatSearch: 'Procure @{handle} no app do apuchat e mande uma mensagem.',
112
+ call: 'Videochamada agora',
113
+ callSub: 'Cara a cara no meet.apuchat.com',
114
+ callPreparing: 'Preparando a chamada com {name}…',
115
+ callReady: '{name} já está esperando você na chamada.',
116
+ callError: 'Não foi possível abrir a chamada: {error}',
117
+ listen: 'Ouvir a voz',
118
+ save: 'Salvar contato',
119
+ saveSub: 'vCard',
120
+ footer: 'Identidade de agente',
121
+ },
122
+ greeting: {
123
+ intro: 'Olá, eu sou {name}.',
124
+ introRole: 'Olá, eu sou {name}, {role}.',
125
+ offer: 'Como posso ajudar?',
126
+ },
127
+ face: {
128
+ subtitles: 'Legendas',
129
+ loadError: 'Não foi possível carregar a identidade ({status})',
130
+ },
131
+ prompt: {
132
+ youAre: 'Você é {name}.',
133
+ youAreRole: 'Você é {name}, {role}.',
134
+ about: 'Sobre você: {bio}',
135
+ tone: 'Seu tom: {tone}.',
136
+ traits: 'Traços: {traits}.',
137
+ },
138
+ },
139
+ };
140
+
141
+ addCatalog({ es, en, pt });
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Textos de la plataforma 7ots.com (server/platform/*): errores de la API de cuentas y ots,
3
+ * el correo del enlace de acceso y los avisos al visitante cuando un ots se queda sin cupo.
4
+ * Namespace `platform.*`.
5
+ */
6
+
7
+ import { addCatalog } from '../index.js';
8
+
9
+ const es = {
10
+ platform: {
11
+ api: {
12
+ login: 'Inicia sesión',
13
+ notFound: 'Ese ots no existe',
14
+ paused: 'Este asistente está en pausa',
15
+ originNotAllowed: 'Este sitio no está autorizado para usar este asistente. Añade su dominio en 7ots.com.',
16
+ tooManyOts: 'Has llegado al máximo de {max} ots por cuenta',
17
+ badEmail: 'Escribe un correo válido',
18
+ tooManyLinks: 'Ya te enviamos varios enlaces; revisa tu correo o espera un rato',
19
+ mailNotConfigured: 'El acceso por correo no está disponible ahora mismo',
20
+ mailFailed: 'No pudimos enviar el correo; inténtalo de nuevo',
21
+ linkInvalid: 'El enlace no es válido o ya caducó. Pide otro.',
22
+ notloginNotConfigured: 'El acceso con notlogin no está disponible ahora mismo',
23
+ notloginFailed: 'No se pudo entrar con notlogin; inténtalo de nuevo',
24
+ otsRateLimited: 'Este asistente está recibiendo muchas peticiones; espera un momento',
25
+ badDomains: 'Algún dominio no es válido',
26
+ },
27
+ quota: {
28
+ llm: 'Este asistente ha agotado sus mensajes gratis de este mes. Si es tu web, añade tu propia clave de IA en 7ots.com.',
29
+ tts: 'Se agotó la voz gratis de este mes',
30
+ },
31
+ mail: {
32
+ subject: 'Tu enlace para entrar en 7ots.com',
33
+ body: 'Hola:\n\nPara entrar en 7ots.com abre este enlace (caduca en 15 minutos y solo sirve una vez):\n\n{url}\n\nSi no lo pediste tú, ignora este correo.\n\n— 7ots.com',
34
+ confirm: 'Pulsa el botón para entrar en 7ots.com.',
35
+ button: 'Entrar',
36
+ },
37
+ log: {
38
+ ready: 'plataforma activa · base de datos {db}',
39
+ magicLink: 'enlace de acceso para {email} (sin buzón configurado): {url}',
40
+ },
41
+ },
42
+ };
43
+
44
+ const en = {
45
+ platform: {
46
+ api: {
47
+ login: 'Please sign in',
48
+ notFound: 'That ots does not exist',
49
+ paused: 'This assistant is paused',
50
+ originNotAllowed: 'This site is not allowed to use this assistant. Add its domain on 7ots.com.',
51
+ tooManyOts: 'You have reached the maximum of {max} ots per account',
52
+ badEmail: 'Enter a valid email',
53
+ tooManyLinks: 'We already sent you several links; check your inbox or wait a while',
54
+ mailNotConfigured: 'Email sign-in is not available right now',
55
+ mailFailed: 'We could not send the email; please try again',
56
+ linkInvalid: 'The link is invalid or has expired. Request a new one.',
57
+ notloginNotConfigured: 'Sign-in with notlogin is not available right now',
58
+ notloginFailed: 'Could not sign in with notlogin; please try again',
59
+ otsRateLimited: 'This assistant is getting a lot of requests; please wait a moment',
60
+ badDomains: 'Some domain is not valid',
61
+ },
62
+ quota: {
63
+ llm: 'This assistant has used up its free messages for this month. If this is your website, add your own AI key on 7ots.com.',
64
+ tts: 'The free voice for this month has run out',
65
+ },
66
+ mail: {
67
+ subject: 'Your sign-in link for 7ots.com',
68
+ body: 'Hi,\n\nTo sign in to 7ots.com open this link (it expires in 15 minutes and works only once):\n\n{url}\n\nIf you did not request it, ignore this email.\n\n— 7ots.com',
69
+ confirm: 'Press the button to sign in to 7ots.com.',
70
+ button: 'Sign in',
71
+ },
72
+ log: {
73
+ ready: 'platform on · database {db}',
74
+ magicLink: 'sign-in link for {email} (no inbox configured): {url}',
75
+ },
76
+ },
77
+ };
78
+
79
+ const pt = {
80
+ platform: {
81
+ api: {
82
+ login: 'Faça login',
83
+ notFound: 'Esse ots não existe',
84
+ paused: 'Este assistente está pausado',
85
+ originNotAllowed: 'Este site não está autorizado a usar este assistente. Adicione o domínio em 7ots.com.',
86
+ tooManyOts: 'Você chegou ao máximo de {max} ots por conta',
87
+ badEmail: 'Digite um e-mail válido',
88
+ tooManyLinks: 'Já enviamos vários links; confira seu e-mail ou espere um pouco',
89
+ mailNotConfigured: 'O acesso por e-mail não está disponível agora',
90
+ mailFailed: 'Não conseguimos enviar o e-mail; tente de novo',
91
+ linkInvalid: 'O link é inválido ou expirou. Peça outro.',
92
+ notloginNotConfigured: 'O acesso com notlogin não está disponível agora',
93
+ notloginFailed: 'Não foi possível entrar com notlogin; tente de novo',
94
+ otsRateLimited: 'Este assistente está recebendo muitas solicitações; espere um momento',
95
+ badDomains: 'Algum domínio não é válido',
96
+ },
97
+ quota: {
98
+ llm: 'Este assistente esgotou as mensagens grátis deste mês. Se o site é seu, adicione sua própria chave de IA em 7ots.com.',
99
+ tts: 'A voz grátis deste mês acabou',
100
+ },
101
+ mail: {
102
+ subject: 'Seu link para entrar no 7ots.com',
103
+ body: 'Olá,\n\nPara entrar no 7ots.com abra este link (expira em 15 minutos e só funciona uma vez):\n\n{url}\n\nSe não foi você que pediu, ignore este e-mail.\n\n— 7ots.com',
104
+ confirm: 'Clique no botão para entrar no 7ots.com.',
105
+ button: 'Entrar',
106
+ },
107
+ log: {
108
+ ready: 'plataforma ativa · banco de dados {db}',
109
+ magicLink: 'link de acesso para {email} (sem caixa de e-mail configurada): {url}',
110
+ },
111
+ },
112
+ };
113
+
114
+ addCatalog({ es, en, pt });