agents-city 0.3.0-beta.21 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/README.es.md +310 -70
- package/README.md +297 -69
- package/bin/agents-city.js +3 -0
- package/bin/doctor +3 -0
- package/bin/hall.html +164 -24
- package/bin/navegador.mjs +415 -0
- package/bin/serve.py +383 -127
- package/bin/shortcut +3 -0
- package/bin/test +5 -2
- package/bin/test-actualiza.py +130 -0
- package/bin/test-atajos.py +301 -0
- package/bin/test-busca.py +216 -0
- package/bin/test-cage.py +170 -2
- package/bin/test-card.py +2 -2
- package/bin/test-cities.py +45 -0
- package/bin/test-contracts.py +12 -5
- package/bin/test-doctor.py +33 -0
- package/bin/test-navegador.py +164 -0
- package/bin/test-seat.py +245 -25
- package/bin/test-serve.py +214 -9
- package/bin/test-workspace.py +63 -0
- package/bin/testlib.py +23 -0
- package/bin/update +3 -0
- package/city/web/dist/city.js +47 -47
- package/city/web/dist/index.html +1 -1
- package/city/web/dist-hall/hall.js +2193 -174
- package/city/web/src/bienvenida.ts +686 -0
- package/city/web/src/es.ts +180 -0
- package/city/web/src/hall.ts +520 -168
- package/city/web/src/idioma.ts +86 -0
- package/city/web/src/main.ts +27 -0
- package/city/web/src/motores.ts +54 -0
- package/docs/agents-first.md +8 -1
- package/docs/security.md +46 -12
- package/docs/testing.md +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/channel/bus.js +1 -1
- package/plugin/channel/bus.ts +1 -1
- package/plugin/channel/runtime/codex.ts +1 -1
- package/plugin/channel/runtime-gateway.js +1 -1
- package/plugin/scripts/actualiza.py +198 -0
- package/plugin/scripts/atajos.py +506 -0
- package/plugin/scripts/busca.py +436 -0
- package/plugin/scripts/cage.py +266 -26
- package/plugin/scripts/capabilities.py +17 -10
- package/plugin/scripts/card.py +10 -0
- package/plugin/scripts/cities.py +34 -0
- package/plugin/scripts/city-session.sh +33 -7
- package/plugin/scripts/doctor.py +122 -0
- package/plugin/scripts/find-repos.sh +12 -105
- package/plugin/scripts/read-card.py +6 -2
- package/plugin/scripts/report.py +5 -6
- package/plugin/scripts/reset.py +50 -14
- package/plugin/scripts/seat.py +445 -103
- package/plugin/scripts/workspace.py +197 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Hall in Spanish.
|
|
3
|
+
*
|
|
4
|
+
* Keyed by the English source sentence, so an entry that goes missing degrades
|
|
5
|
+
* to English rather than to an identifier. Written as somebody would say it out
|
|
6
|
+
* loud — "la casa donde vive un agente", not "el contenedor del agente" — for
|
|
7
|
+
* the same reason the English says "who lives here" instead of "roster
|
|
8
|
+
* management": the metaphor is the product.
|
|
9
|
+
*/
|
|
10
|
+
import { anota } from './idioma';
|
|
11
|
+
|
|
12
|
+
anota({
|
|
13
|
+
// ── the rail ──────────────────────────────────────────────────────────────
|
|
14
|
+
Overview: 'Resumen',
|
|
15
|
+
'The map': 'El mapa',
|
|
16
|
+
'My seat': 'Mi asiento',
|
|
17
|
+
Districts: 'Distritos',
|
|
18
|
+
Roads: 'Carreteras',
|
|
19
|
+
Committee: 'Comité',
|
|
20
|
+
Houses: 'Casas',
|
|
21
|
+
'All cities': 'Todas las ciudades',
|
|
22
|
+
'you are in': 'estás en',
|
|
23
|
+
'{n} house': '{n} casa',
|
|
24
|
+
'{n} houses': '{n} casas',
|
|
25
|
+
'Create another city →': 'Crear otra ciudad →',
|
|
26
|
+
|
|
27
|
+
// ── the guide ─────────────────────────────────────────────────────────────
|
|
28
|
+
Welcome: 'Bienvenida',
|
|
29
|
+
'The work': 'El trabajo',
|
|
30
|
+
'Your chair': 'Tu silla',
|
|
31
|
+
'The houses': 'Las casas',
|
|
32
|
+
Ready: 'Listo',
|
|
33
|
+
'A city is you, and the houses around you': 'Una ciudad eres tú y las casas que te rodean',
|
|
34
|
+
'Let’s build it': 'Vamos a construirla',
|
|
35
|
+
'I’ll set it up myself': 'Ya lo configuro yo',
|
|
36
|
+
'What kind of work happens here?': '¿Qué clase de trabajo se hace aquí?',
|
|
37
|
+
'And what are you, here?': '¿Y tú qué eres aquí?',
|
|
38
|
+
'Who lives in your city?': '¿Quién vive en tu ciudad?',
|
|
39
|
+
'Who else lives here?': '¿Quién más vive aquí?',
|
|
40
|
+
'Build the first house': 'Construye la primera casa',
|
|
41
|
+
'Add another house': 'Añade otra casa',
|
|
42
|
+
'That is everyone': 'Ya están todos',
|
|
43
|
+
'Skip — just me for now': 'Sáltalo — de momento solo yo',
|
|
44
|
+
'a new house': 'una casa nueva',
|
|
45
|
+
'Who lives in it?': '¿Quién vive en ella?',
|
|
46
|
+
'What do you call it?': '¿Cómo la llamas?',
|
|
47
|
+
'What kind of work does it do?': '¿Qué clase de trabajo hace?',
|
|
48
|
+
'It writes code': 'Escribe código',
|
|
49
|
+
'It keeps knowledge': 'Guarda conocimiento',
|
|
50
|
+
'It coordinates': 'Coordina',
|
|
51
|
+
'What does it work on?': '¿Sobre qué trabaja?',
|
|
52
|
+
'Build it': 'Constrúyela',
|
|
53
|
+
'building…': 'construyendo…',
|
|
54
|
+
Cancel: 'Cancelar',
|
|
55
|
+
Back: 'Atrás',
|
|
56
|
+
Next: 'Siguiente',
|
|
57
|
+
'question 1 of 4': 'pregunta 1 de 4',
|
|
58
|
+
'question 2 of 4': 'pregunta 2 de 4',
|
|
59
|
+
'question 3 of 4': 'pregunta 3 de 4',
|
|
60
|
+
'Open my session': 'Abrir mi sesión',
|
|
61
|
+
'See the houses': 'Ver las casas',
|
|
62
|
+
'Draw the map': 'Dibujar el mapa',
|
|
63
|
+
'Set a goal': 'Poner un objetivo',
|
|
64
|
+
'{city} is alive': '{city} está viva',
|
|
65
|
+
|
|
66
|
+
// ── the houses ────────────────────────────────────────────────────────────
|
|
67
|
+
'the houses of {city}': 'las casas de {city}',
|
|
68
|
+
'Who lives in {city}': 'Quién vive en {city}',
|
|
69
|
+
'+ Build a house': '+ Construir una casa',
|
|
70
|
+
'+ folder': '+ carpeta',
|
|
71
|
+
'+ zip': '+ zip',
|
|
72
|
+
test: 'probar',
|
|
73
|
+
engine: 'motor',
|
|
74
|
+
effort: 'esfuerzo',
|
|
75
|
+
provider: 'proveedor',
|
|
76
|
+
growth: 'crecimiento',
|
|
77
|
+
'works on': 'trabaja sobre',
|
|
78
|
+
skills: 'skills',
|
|
79
|
+
'nothing mounted yet': 'aún sin nada montado',
|
|
80
|
+
'none discovered': 'ninguna descubierta',
|
|
81
|
+
connected: 'conectado',
|
|
82
|
+
idle: 'inactivo',
|
|
83
|
+
missing: 'no instalado',
|
|
84
|
+
default: 'por defecto',
|
|
85
|
+
'custom…': 'otro…',
|
|
86
|
+
|
|
87
|
+
// ── cities ────────────────────────────────────────────────────────────────
|
|
88
|
+
cities: 'ciudades',
|
|
89
|
+
'Your cities': 'Tus ciudades',
|
|
90
|
+
'Start another city': 'Empezar otra ciudad',
|
|
91
|
+
'Create it': 'Crearla',
|
|
92
|
+
open: 'abrir',
|
|
93
|
+
archive: 'archivar',
|
|
94
|
+
'· open now': '· abierta ahora',
|
|
95
|
+
'{n} house of its own': '{n} casa propia',
|
|
96
|
+
'{n} houses of its own': '{n} casas propias',
|
|
97
|
+
'Start this city over': 'Empezar esta ciudad de cero',
|
|
98
|
+
'Start over…': 'Empezar de cero…',
|
|
99
|
+
|
|
100
|
+
// ── the map ───────────────────────────────────────────────────────────────
|
|
101
|
+
'the map': 'el mapa',
|
|
102
|
+
'Your city, drawn': 'Tu ciudad, dibujada',
|
|
103
|
+
'Draw my city': 'Dibujar mi ciudad',
|
|
104
|
+
'Draw it anyway': 'Dibujarla igualmente',
|
|
105
|
+
'baking the map — first time takes a minute':
|
|
106
|
+
'horneando el mapa — la primera vez tarda un minuto',
|
|
107
|
+
|
|
108
|
+
// ── shared ────────────────────────────────────────────────────────────────
|
|
109
|
+
Saved: 'Guardado',
|
|
110
|
+
Copied: 'Copiado',
|
|
111
|
+
'reading your city': 'leyendo tu ciudad',
|
|
112
|
+
'Could not save': 'No se pudo guardar',
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
anota({
|
|
116
|
+
// ── the chrome that lives in the page itself ──────────────────────────────
|
|
117
|
+
'town hall': 'ayuntamiento',
|
|
118
|
+
'Manage one autonomous city: its seat, repo agents, roads and map. Everything here is a plain file you can also inspect by hand.':
|
|
119
|
+
'Gobierna una ciudad autónoma: su asiento, sus agentes, sus carreteras y su mapa. Todo lo que hay aquí es un fichero de texto que también puedes abrir a mano.',
|
|
120
|
+
|
|
121
|
+
// ── looking through the disk ──────────────────────────────────────────────
|
|
122
|
+
'search your disk — a name, or part of a path':
|
|
123
|
+
'busca en tu disco — un nombre, o parte de una ruta',
|
|
124
|
+
'Look through the disk again — for something cloned a minute ago':
|
|
125
|
+
'Vuelve a mirar el disco — por si acabas de clonar algo',
|
|
126
|
+
'Search again': 'Buscar otra vez',
|
|
127
|
+
'searching…': 'buscando…',
|
|
128
|
+
'looking through your disk…': 'mirando en tu disco…',
|
|
129
|
+
'{shown} of {total} places match': '{shown} de {total} sitios encajan',
|
|
130
|
+
'{total} places found — type to narrow it down':
|
|
131
|
+
'{total} sitios encontrados — escribe para acotar',
|
|
132
|
+
'Nothing matches that. Add it by path below.':
|
|
133
|
+
'Nada encaja con eso. Añádelo por ruta aquí abajo.',
|
|
134
|
+
'Nothing found on this disk — add folders by path below.':
|
|
135
|
+
'No hay nada en este disco — añade carpetas por ruta aquí abajo.',
|
|
136
|
+
'…or a path, and Enter': '…o una ruta, y Enter',
|
|
137
|
+
|
|
138
|
+
// ── what runs an agent ────────────────────────────────────────────────────
|
|
139
|
+
'Its role — its speciality, never authority': 'Su rol — su especialidad, nunca su autoridad',
|
|
140
|
+
'What runs it?': '¿Qué lo mueve?',
|
|
141
|
+
'Leave all three on default and it runs the way you do. Model and effort are Claude’s to read; another CLI carries its own flags.':
|
|
142
|
+
'Déjalos los tres por defecto y funcionará como tú. El modelo y el esfuerzo los lee Claude; otra CLI lleva sus propias opciones.',
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
anota({
|
|
146
|
+
// ── the guide, in prose ───────────────────────────────────────────────────
|
|
147
|
+
'You take the chair. Around it, one <b>house</b> per worker — an <b>agent</b> — each with its own window, its own role and its own corner of your disk: a repository, three of them, a folder of documents, whatever it actually works on. The map draws them as houses that grow with the work done in them, and many houses are a city. They never talk to each other behind your back: you chair, they answer.':
|
|
148
|
+
'Tú presides. A tu alrededor, una <b>casa</b> por trabajador — un <b>agente</b> — cada una con su ventana, su rol y su rincón de tu disco: un repositorio, tres, una carpeta de documentos, lo que de verdad tenga entre manos. El mapa las dibuja como casas que crecen con el trabajo hecho dentro, y muchas casas son una ciudad. Nunca hablan entre ellas a tus espaldas: tú presides, ellas responden.',
|
|
149
|
+
'Everything lives as plain files in {donde}. Nothing leaves this machine, there is no account, and you can edit any of it by hand afterwards.':
|
|
150
|
+
'Todo vive como ficheros de texto en {donde}. Nada sale de esta máquina, no hay cuenta que crear, y luego puedes editarlo a mano.',
|
|
151
|
+
'<b>Four questions and you are working.</b> You can skip any of them and change everything later.':
|
|
152
|
+
'<b>Cuatro preguntas y a trabajar.</b> Puedes saltarte cualquiera y cambiarlo todo después.',
|
|
153
|
+
'It decides the vocabulary, the roles you will be offered and what counts as evidence in a decision. A clinic does not ship pull requests, and a law firm does not measure story points. Pick the closest one — you can change it later.':
|
|
154
|
+
'Decide el vocabulario, los roles que se te ofrecen y qué cuenta como prueba en una decisión. Una clínica no entrega pull requests, y un despacho no mide story points. Elige el más cercano — luego se cambia.',
|
|
155
|
+
'You chair this city whatever you answer — this is your <b>speciality</b>, not your authority. It shapes the perspective you bring to a decision and the knowledge files the city writes for you. <b>Blank</b> is a real answer: it means no preset knowledge.':
|
|
156
|
+
'Presides esta ciudad respondas lo que respondas — esto es tu <b>especialidad</b>, no tu autoridad. Da forma a la perspectiva con la que entras en una decisión y a los ficheros de conocimiento que la ciudad escribe para ti. <b>En blanco</b> es una respuesta de verdad: significa sin conocimiento previo.',
|
|
157
|
+
'Every house holds one worker — an <b>agent</b> — with its own window, its own role and its own corner of your disk. A house is <b>not</b> a repository: one can answer for three services and a folder of documents at once, and a house whose work is documents needs no git anywhere.':
|
|
158
|
+
'Cada casa aloja a un trabajador — un <b>agente</b> — con su ventana, su rol y su rincón de tu disco. Una casa <b>no</b> es un repositorio: una sola puede responder por tres servicios y una carpeta de documentos a la vez, y una casa cuyo trabajo son documentos no necesita git en ninguna parte.',
|
|
159
|
+
'Everything found on this disk: <b>repositories</b>, the <b>worktrees</b> an isolated agent works in, and <b>folders of documents</b> with no git at all. Pick as many as you like — this is the part that makes it an agent and not a repo.':
|
|
160
|
+
'Todo lo que hay en este disco: <b>repositorios</b>, los <b>worktrees</b> en los que trabaja un agente aislado, y <b>carpetas de documentos</b> sin git ninguno. Elige las que quieras — esta es la parte que lo convierte en un agente y no en un repo.',
|
|
161
|
+
'Working on: {que}': 'Trabaja sobre: {que}',
|
|
162
|
+
'Your seat is written and {cuantas}. Everything you just answered is a plain file you can read and edit.':
|
|
163
|
+
'Tu asiento queda escrito y {cuantas}. Todo lo que acabas de responder es un fichero de texto que puedes leer y editar.',
|
|
164
|
+
'<b>{n}</b> house stands around it': 'a su alrededor hay <b>{n}</b> casa',
|
|
165
|
+
'<b>{n}</b> houses stand around it': 'a su alrededor hay <b>{n}</b> casas',
|
|
166
|
+
'the city is waiting for its first house': 'la ciudad espera su primera casa',
|
|
167
|
+
'What people usually do next:': 'Lo que suele hacerse ahora:',
|
|
168
|
+
'A goal is optional, and the city works without one — but a round with no goal is a status report, because there is nothing to argue against.':
|
|
169
|
+
'El objetivo es opcional y la ciudad funciona sin él — pero una ronda sin objetivo es un parte de estado, porque no hay nada contra lo que discutir.',
|
|
170
|
+
|
|
171
|
+
// ── what a house does for a living ────────────────────────────────────────
|
|
172
|
+
'Its house grows with the pull requests it merges. Mounts repositories and worktrees.':
|
|
173
|
+
'Su casa crece con las pull requests que fusiona. Monta repositorios y worktrees.',
|
|
174
|
+
'Its house grows with the documents it writes. Needs no git at all.':
|
|
175
|
+
'Su casa crece con los documentos que escribe. No necesita git para nada.',
|
|
176
|
+
'Its house grows with the decisions it records.':
|
|
177
|
+
'Su casa crece con las decisiones que deja escritas.',
|
|
178
|
+
'urgencias, api, the handbook — whatever you would say out loud':
|
|
179
|
+
'urgencias, api, el manual — como lo llamarías en voz alta',
|
|
180
|
+
});
|