agents-city 0.3.0-beta.21

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 (440) hide show
  1. package/.claude-plugin/marketplace.json +16 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +5 -0
  4. package/README.es.md +2021 -0
  5. package/README.md +1999 -0
  6. package/benchmarks/committee/README.md +39 -0
  7. package/benchmarks/committee/metrics.py +51 -0
  8. package/benchmarks/committee/run.py +64 -0
  9. package/benchmarks/committee/traces/01-single.json +8 -0
  10. package/benchmarks/committee/traces/02-mesh.json +16 -0
  11. package/benchmarks/committee/traces/03-chair.json +15 -0
  12. package/benchmarks/latency/README.md +35 -0
  13. package/benchmarks/latency/fake-claude-cli.mjs +119 -0
  14. package/benchmarks/latency/fake-native-server.mjs +340 -0
  15. package/benchmarks/latency/fake-tui.py +91 -0
  16. package/benchmarks/latency/live.py +380 -0
  17. package/benchmarks/stress/README.md +20 -0
  18. package/benchmarks/stress/run.py +487 -0
  19. package/bin/agents +4 -0
  20. package/bin/agents-city.js +116 -0
  21. package/bin/benchmark +17 -0
  22. package/bin/bus +6 -0
  23. package/bin/cities +3 -0
  24. package/bin/city +86 -0
  25. package/bin/committee +6 -0
  26. package/bin/demo +200 -0
  27. package/bin/exit +5 -0
  28. package/bin/hall +73 -0
  29. package/bin/hall.html +426 -0
  30. package/bin/logs +3 -0
  31. package/bin/report.py +14 -0
  32. package/bin/reset +3 -0
  33. package/bin/road +3 -0
  34. package/bin/seat +10 -0
  35. package/bin/serve.py +1428 -0
  36. package/bin/setup.py +753 -0
  37. package/bin/skills +3 -0
  38. package/bin/test +131 -0
  39. package/bin/test-adapter.py +183 -0
  40. package/bin/test-admision.py +99 -0
  41. package/bin/test-avatar.py +58 -0
  42. package/bin/test-benchmark.py +40 -0
  43. package/bin/test-broker.py +334 -0
  44. package/bin/test-cage.py +206 -0
  45. package/bin/test-card.py +402 -0
  46. package/bin/test-channel.py +379 -0
  47. package/bin/test-cities.py +453 -0
  48. package/bin/test-claude-runtime.py +252 -0
  49. package/bin/test-committee.py +340 -0
  50. package/bin/test-contracts.py +544 -0
  51. package/bin/test-crecimiento.py +164 -0
  52. package/bin/test-demo.py +308 -0
  53. package/bin/test-doctor.py +106 -0
  54. package/bin/test-domains.py +151 -0
  55. package/bin/test-evidencia.py +50 -0
  56. package/bin/test-exit.py +128 -0
  57. package/bin/test-hall-protocol.py +93 -0
  58. package/bin/test-launch.py +169 -0
  59. package/bin/test-live-feed.py +508 -0
  60. package/bin/test-pairing.py +99 -0
  61. package/bin/test-parcels.py +283 -0
  62. package/bin/test-runtime-failures.py +252 -0
  63. package/bin/test-runtime-ui.py +488 -0
  64. package/bin/test-runtime.py +268 -0
  65. package/bin/test-rutas.py +80 -0
  66. package/bin/test-seat.py +1386 -0
  67. package/bin/test-security.py +150 -0
  68. package/bin/test-serve.py +1057 -0
  69. package/bin/test-stress.py +64 -0
  70. package/bin/test-widgets.py +143 -0
  71. package/bin/test-workspace.py +188 -0
  72. package/bin/testlib.py +95 -0
  73. package/bin/tokens.py +14 -0
  74. package/bus/scripts/deploy.sh +60 -0
  75. package/bus/scripts/mint-token.sh +68 -0
  76. package/bus/scripts/setup-dev.sh +79 -0
  77. package/bus/scripts/test-channel.ts +8 -0
  78. package/bus/scripts/test-hub.ts +266 -0
  79. package/bus/scripts/test-local.sh +40 -0
  80. package/bus/scripts/test-queue.ts +132 -0
  81. package/bus/worker/package-lock.json +1971 -0
  82. package/bus/worker/package.json +17 -0
  83. package/bus/worker/src/index.ts +485 -0
  84. package/bus/worker/tsconfig.json +13 -0
  85. package/bus/worker/wrangler.toml +32 -0
  86. package/city/oven/README.md +59 -0
  87. package/city/oven/collect.py +43 -0
  88. package/city/oven/oven.html +4 -0
  89. package/city/scripts/history.py +120 -0
  90. package/city/scripts/seed.py +442 -0
  91. package/city/web/assets/modelos/License.txt +28 -0
  92. package/city/web/assets/modelos/PROCEDENCIA.txt +3 -0
  93. package/city/web/assets/modelos/building-a.glb +0 -0
  94. package/city/web/assets/modelos/building-b.glb +0 -0
  95. package/city/web/assets/modelos/building-c.glb +0 -0
  96. package/city/web/assets/modelos/building-d.glb +0 -0
  97. package/city/web/assets/modelos/building-e.glb +0 -0
  98. package/city/web/assets/modelos/building-f.glb +0 -0
  99. package/city/web/assets/modelos/building-g.glb +0 -0
  100. package/city/web/assets/modelos/building-h.glb +0 -0
  101. package/city/web/assets/sprites/building-a.png +0 -0
  102. package/city/web/assets/sprites/building-b.png +0 -0
  103. package/city/web/assets/sprites/building-c.png +0 -0
  104. package/city/web/assets/sprites/building-d.png +0 -0
  105. package/city/web/assets/sprites/building-e.png +0 -0
  106. package/city/web/assets/sprites/building-f.png +0 -0
  107. package/city/web/assets/sprites/building-g.png +0 -0
  108. package/city/web/assets/sprites/building-h.png +0 -0
  109. package/city/web/assets/sprites/building-i.png +0 -0
  110. package/city/web/assets/sprites/building-j.png +0 -0
  111. package/city/web/assets/sprites/building-k.png +0 -0
  112. package/city/web/assets/sprites/building-l.png +0 -0
  113. package/city/web/assets/sprites/building-m.png +0 -0
  114. package/city/web/assets/sprites/building-n.png +0 -0
  115. package/city/web/assets/sprites/building-skyscraper-a.png +0 -0
  116. package/city/web/assets/sprites/building-skyscraper-b.png +0 -0
  117. package/city/web/assets/sprites/building-skyscraper-c.png +0 -0
  118. package/city/web/assets/sprites/building-skyscraper-d.png +0 -0
  119. package/city/web/assets/sprites/building-skyscraper-e.png +0 -0
  120. package/city/web/assets/sprites/catalogo.json +47 -0
  121. package/city/web/assets/sprites/detail-awning-wide.png +0 -0
  122. package/city/web/assets/sprites/detail-awning.png +0 -0
  123. package/city/web/assets/sprites/detail-overhang-wide.png +0 -0
  124. package/city/web/assets/sprites/detail-overhang.png +0 -0
  125. package/city/web/assets/sprites/detail-parasol-a.png +0 -0
  126. package/city/web/assets/sprites/detail-parasol-b.png +0 -0
  127. package/city/web/assets/sprites/low-detail-building-a.png +0 -0
  128. package/city/web/assets/sprites/low-detail-building-b.png +0 -0
  129. package/city/web/assets/sprites/low-detail-building-c.png +0 -0
  130. package/city/web/assets/sprites/low-detail-building-d.png +0 -0
  131. package/city/web/assets/sprites/low-detail-building-e.png +0 -0
  132. package/city/web/assets/sprites/low-detail-building-f.png +0 -0
  133. package/city/web/assets/sprites/low-detail-building-g.png +0 -0
  134. package/city/web/assets/sprites/low-detail-building-h.png +0 -0
  135. package/city/web/assets/sprites/low-detail-building-i.png +0 -0
  136. package/city/web/assets/sprites/low-detail-building-j.png +0 -0
  137. package/city/web/assets/sprites/low-detail-building-k.png +0 -0
  138. package/city/web/assets/sprites/low-detail-building-l.png +0 -0
  139. package/city/web/assets/sprites/low-detail-building-m.png +0 -0
  140. package/city/web/assets/sprites/low-detail-building-n.png +0 -0
  141. package/city/web/assets/sprites/low-detail-building-wide-a.png +0 -0
  142. package/city/web/assets/sprites/low-detail-building-wide-b.png +0 -0
  143. package/city/web/assets/sprites/medidas.json +248 -0
  144. package/city/web/dist/city.js +939 -0
  145. package/city/web/dist/index.html +294 -0
  146. package/city/web/dist/modelos/License.txt +28 -0
  147. package/city/web/dist/modelos/PROCEDENCIA.txt +3 -0
  148. package/city/web/dist/modelos/building-a.glb +0 -0
  149. package/city/web/dist/modelos/building-b.glb +0 -0
  150. package/city/web/dist/modelos/building-c.glb +0 -0
  151. package/city/web/dist/modelos/building-d.glb +0 -0
  152. package/city/web/dist/modelos/building-e.glb +0 -0
  153. package/city/web/dist/modelos/building-f.glb +0 -0
  154. package/city/web/dist/modelos/building-g.glb +0 -0
  155. package/city/web/dist/modelos/building-h.glb +0 -0
  156. package/city/web/dist/sprites/building-a.png +0 -0
  157. package/city/web/dist/sprites/building-b.png +0 -0
  158. package/city/web/dist/sprites/building-c.png +0 -0
  159. package/city/web/dist/sprites/building-d.png +0 -0
  160. package/city/web/dist/sprites/building-e.png +0 -0
  161. package/city/web/dist/sprites/building-f.png +0 -0
  162. package/city/web/dist/sprites/building-g.png +0 -0
  163. package/city/web/dist/sprites/building-h.png +0 -0
  164. package/city/web/dist/sprites/building-i.png +0 -0
  165. package/city/web/dist/sprites/building-j.png +0 -0
  166. package/city/web/dist/sprites/building-k.png +0 -0
  167. package/city/web/dist/sprites/building-l.png +0 -0
  168. package/city/web/dist/sprites/building-m.png +0 -0
  169. package/city/web/dist/sprites/building-n.png +0 -0
  170. package/city/web/dist/sprites/building-skyscraper-a.png +0 -0
  171. package/city/web/dist/sprites/building-skyscraper-b.png +0 -0
  172. package/city/web/dist/sprites/building-skyscraper-c.png +0 -0
  173. package/city/web/dist/sprites/building-skyscraper-d.png +0 -0
  174. package/city/web/dist/sprites/building-skyscraper-e.png +0 -0
  175. package/city/web/dist/sprites/catalogo.json +47 -0
  176. package/city/web/dist/sprites/detail-awning-wide.png +0 -0
  177. package/city/web/dist/sprites/detail-awning.png +0 -0
  178. package/city/web/dist/sprites/detail-overhang-wide.png +0 -0
  179. package/city/web/dist/sprites/detail-overhang.png +0 -0
  180. package/city/web/dist/sprites/detail-parasol-a.png +0 -0
  181. package/city/web/dist/sprites/detail-parasol-b.png +0 -0
  182. package/city/web/dist/sprites/low-detail-building-a.png +0 -0
  183. package/city/web/dist/sprites/low-detail-building-b.png +0 -0
  184. package/city/web/dist/sprites/low-detail-building-c.png +0 -0
  185. package/city/web/dist/sprites/low-detail-building-d.png +0 -0
  186. package/city/web/dist/sprites/low-detail-building-e.png +0 -0
  187. package/city/web/dist/sprites/low-detail-building-f.png +0 -0
  188. package/city/web/dist/sprites/low-detail-building-g.png +0 -0
  189. package/city/web/dist/sprites/low-detail-building-h.png +0 -0
  190. package/city/web/dist/sprites/low-detail-building-i.png +0 -0
  191. package/city/web/dist/sprites/low-detail-building-j.png +0 -0
  192. package/city/web/dist/sprites/low-detail-building-k.png +0 -0
  193. package/city/web/dist/sprites/low-detail-building-l.png +0 -0
  194. package/city/web/dist/sprites/low-detail-building-m.png +0 -0
  195. package/city/web/dist/sprites/low-detail-building-n.png +0 -0
  196. package/city/web/dist/sprites/low-detail-building-wide-a.png +0 -0
  197. package/city/web/dist/sprites/low-detail-building-wide-b.png +0 -0
  198. package/city/web/dist/sprites/medidas.json +248 -0
  199. package/city/web/dist-hall/hall.js +264 -0
  200. package/city/web/index.html +294 -0
  201. package/city/web/package.json +18 -0
  202. package/city/web/sella.py +21 -0
  203. package/city/web/src/activity-actors.ts +47 -0
  204. package/city/web/src/activity.ts +172 -0
  205. package/city/web/src/ayuntamiento.ts +580 -0
  206. package/city/web/src/draw.ts +640 -0
  207. package/city/web/src/game-speech.ts +79 -0
  208. package/city/web/src/hall.ts +1867 -0
  209. package/city/web/src/main.ts +2225 -0
  210. package/city/web/src/oven.ts +124 -0
  211. package/city/web/src/people.ts +244 -0
  212. package/city/web/src/presencia.ts +193 -0
  213. package/city/web/src/puertas.ts +180 -0
  214. package/city/web/src/repo-roles.ts +59 -0
  215. package/city/worker/package.json +16 -0
  216. package/city/worker/schema.sql +117 -0
  217. package/city/worker/src/index.ts +702 -0
  218. package/city/worker/src/square.ts +218 -0
  219. package/city/worker/wrangler.toml +58 -0
  220. package/demo/ada.md +50 -0
  221. package/demo/bruno.md +62 -0
  222. package/demo/camila.md +56 -0
  223. package/demo/city/ada.md +40 -0
  224. package/demo/city/city.yml +8 -0
  225. package/demo/city/parcels.yml +15 -0
  226. package/demo/city/roads.json +4 -0
  227. package/demo/city/units.yml +10 -0
  228. package/demo/clinica/city.yml +8 -0
  229. package/demo/clinica/parcels.yml +15 -0
  230. package/demo/clinica/roads.json +4 -0
  231. package/demo/clinica/units.yml +9 -0
  232. package/demo/clinica/vera.md +46 -0
  233. package/demo/dante.md +54 -0
  234. package/demo/despacho/city.yml +8 -0
  235. package/demo/despacho/marta.md +46 -0
  236. package/demo/despacho/parcels.yml +15 -0
  237. package/demo/despacho/roads.json +4 -0
  238. package/demo/despacho/units.yml +9 -0
  239. package/demo/elsa.md +50 -0
  240. package/demo/farid.md +52 -0
  241. package/demo/greta.md +50 -0
  242. package/demo/hugo.md +49 -0
  243. package/demo/iris.md +49 -0
  244. package/demo/jonas.md +51 -0
  245. package/demo/kira.md +51 -0
  246. package/demo/luca.md +49 -0
  247. package/demo/parcels.yml +92 -0
  248. package/demo/seed.py +20 -0
  249. package/demo/show.py +161 -0
  250. package/demo/stories.py +824 -0
  251. package/demo/units.yml +33 -0
  252. package/docs/agents-first.md +99 -0
  253. package/docs/glossary.md +55 -0
  254. package/docs/map-live-layers.md +73 -0
  255. package/docs/security.md +231 -0
  256. package/docs/self-host.md +151 -0
  257. package/docs/testing.md +205 -0
  258. package/package.json +73 -0
  259. package/plugin/.claude-plugin/plugin.json +62 -0
  260. package/plugin/.mcp.json +15 -0
  261. package/plugin/channel/activity-cli.ts +16 -0
  262. package/plugin/channel/adapter-prompts.ts +113 -0
  263. package/plugin/channel/adapter.js +4292 -0
  264. package/plugin/channel/adapter.ts +133 -0
  265. package/plugin/channel/bus.js +20188 -0
  266. package/plugin/channel/bus.ts +131 -0
  267. package/plugin/channel/city-config.ts +125 -0
  268. package/plugin/channel/claude-channel.ts +58 -0
  269. package/plugin/channel/cli-args.ts +75 -0
  270. package/plugin/channel/client.js +4200 -0
  271. package/plugin/channel/client.ts +38 -0
  272. package/plugin/channel/committee/activity.ts +256 -0
  273. package/plugin/channel/committee/collection.ts +154 -0
  274. package/plugin/channel/committee/decision.ts +175 -0
  275. package/plugin/channel/committee/floor.ts +135 -0
  276. package/plugin/channel/committee/guards.ts +30 -0
  277. package/plugin/channel/committee/history.ts +38 -0
  278. package/plugin/channel/committee/render.ts +102 -0
  279. package/plugin/channel/committee/service.ts +72 -0
  280. package/plugin/channel/committee/storage.ts +92 -0
  281. package/plugin/channel/committee/types.ts +163 -0
  282. package/plugin/channel/committee/view.ts +63 -0
  283. package/plugin/channel/committee-cli.ts +109 -0
  284. package/plugin/channel/delivery-metrics.ts +61 -0
  285. package/plugin/channel/delivery-queue.ts +118 -0
  286. package/plugin/channel/hub/activity-controller.ts +72 -0
  287. package/plugin/channel/hub/activity-feed.ts +169 -0
  288. package/plugin/channel/hub/committee-controller.ts +60 -0
  289. package/plugin/channel/hub/connections.ts +48 -0
  290. package/plugin/channel/hub/diagnostics.ts +67 -0
  291. package/plugin/channel/hub/envelope-validity.ts +109 -0
  292. package/plugin/channel/hub/envelopes.ts +66 -0
  293. package/plugin/channel/hub/lifecycle.ts +91 -0
  294. package/plugin/channel/hub/local-roads.ts +89 -0
  295. package/plugin/channel/hub/remote-roads.ts +165 -0
  296. package/plugin/channel/hub/road-controller.ts +99 -0
  297. package/plugin/channel/hub-client.ts +149 -0
  298. package/plugin/channel/local-hub.js +5995 -0
  299. package/plugin/channel/local-hub.ts +349 -0
  300. package/plugin/channel/map-reporter.ts +48 -0
  301. package/plugin/channel/package-lock.json +1731 -0
  302. package/plugin/channel/package.json +19 -0
  303. package/plugin/channel/protocol.ts +98 -0
  304. package/plugin/channel/road-cli.ts +18 -0
  305. package/plugin/channel/run.sh +15 -0
  306. package/plugin/channel/runtime/claude.ts +458 -0
  307. package/plugin/channel/runtime/codex-config.ts +77 -0
  308. package/plugin/channel/runtime/codex.ts +669 -0
  309. package/plugin/channel/runtime/command.ts +62 -0
  310. package/plugin/channel/runtime/factory.ts +15 -0
  311. package/plugin/channel/runtime/json-rpc.ts +154 -0
  312. package/plugin/channel/runtime/kimi.ts +277 -0
  313. package/plugin/channel/runtime/opencode.ts +248 -0
  314. package/plugin/channel/runtime/process.ts +84 -0
  315. package/plugin/channel/runtime/types.ts +45 -0
  316. package/plugin/channel/runtime-files.ts +73 -0
  317. package/plugin/channel/runtime-gateway.js +6396 -0
  318. package/plugin/channel/runtime-gateway.ts +358 -0
  319. package/plugin/channel/runtime-metrics.ts +52 -0
  320. package/plugin/channel/runtime-subscription.ts +180 -0
  321. package/plugin/channel/terminal-delivery.ts +131 -0
  322. package/plugin/channel/untrusted.ts +60 -0
  323. package/plugin/commands/committee.md +31 -0
  324. package/plugin/commands/exit.md +32 -0
  325. package/plugin/commands/goals.md +20 -0
  326. package/plugin/commands/join.md +18 -0
  327. package/plugin/commands/notice.md +20 -0
  328. package/plugin/commands/propose.md +19 -0
  329. package/plugin/commands/round.md +17 -0
  330. package/plugin/commands/session.md +22 -0
  331. package/plugin/commands/settings.md +25 -0
  332. package/plugin/commands/setup.md +21 -0
  333. package/plugin/commands/team.md +23 -0
  334. package/plugin/domains/custom.md +27 -0
  335. package/plugin/domains/finance.md +31 -0
  336. package/plugin/domains/healthcare.md +34 -0
  337. package/plugin/domains/legal.md +31 -0
  338. package/plugin/domains/marketing.md +33 -0
  339. package/plugin/domains/operations.md +31 -0
  340. package/plugin/domains/research.md +32 -0
  341. package/plugin/domains/sales.md +30 -0
  342. package/plugin/domains/software.md +37 -0
  343. package/plugin/hooks/activity.sh +6 -0
  344. package/plugin/hooks/digging.sh +68 -0
  345. package/plugin/hooks/growth.sh +42 -0
  346. package/plugin/hooks/hooks.json +106 -0
  347. package/plugin/hooks/notice-on-pr.sh +35 -0
  348. package/plugin/hooks/notice-on-stop.sh +80 -0
  349. package/plugin/hooks/notice-pending.sh +58 -0
  350. package/plugin/hooks/solo-en-ciudad.sh +23 -0
  351. package/plugin/hooks/tokens.sh +47 -0
  352. package/plugin/roles/examples/account-executive.md +25 -0
  353. package/plugin/roles/examples/ai-manager.md +34 -0
  354. package/plugin/roles/examples/associate.md +24 -0
  355. package/plugin/roles/examples/brand-lead.md +20 -0
  356. package/plugin/roles/examples/cfo.md +20 -0
  357. package/plugin/roles/examples/city-lead.md +25 -0
  358. package/plugin/roles/examples/clinical-director.md +26 -0
  359. package/plugin/roles/examples/clinical-ops.md +25 -0
  360. package/plugin/roles/examples/clinician.md +25 -0
  361. package/plugin/roles/examples/compliance.md +27 -0
  362. package/plugin/roles/examples/content.md +24 -0
  363. package/plugin/roles/examples/controller.md +27 -0
  364. package/plugin/roles/examples/cpto.md +41 -0
  365. package/plugin/roles/examples/customer-success.md +25 -0
  366. package/plugin/roles/examples/data-engineer.md +37 -0
  367. package/plugin/roles/examples/data.md +60 -0
  368. package/plugin/roles/examples/dev.md +37 -0
  369. package/plugin/roles/examples/devops.md +39 -0
  370. package/plugin/roles/examples/enablement.md +24 -0
  371. package/plugin/roles/examples/ethics.md +24 -0
  372. package/plugin/roles/examples/fin-analytics.md +27 -0
  373. package/plugin/roles/examples/health-compliance.md +25 -0
  374. package/plugin/roles/examples/health-data.md +26 -0
  375. package/plugin/roles/examples/knowledge.md +25 -0
  376. package/plugin/roles/examples/lifecycle.md +26 -0
  377. package/plugin/roles/examples/llm-engineer.md +34 -0
  378. package/plugin/roles/examples/managing-partner.md +20 -0
  379. package/plugin/roles/examples/methods.md +23 -0
  380. package/plugin/roles/examples/operations-lead.md +23 -0
  381. package/plugin/roles/examples/ops.md +24 -0
  382. package/plugin/roles/examples/patient-safety.md +26 -0
  383. package/plugin/roles/examples/performance.md +27 -0
  384. package/plugin/roles/examples/po.md +36 -0
  385. package/plugin/roles/examples/process-owner.md +23 -0
  386. package/plugin/roles/examples/product-design.md +39 -0
  387. package/plugin/roles/examples/program-manager.md +24 -0
  388. package/plugin/roles/examples/quality.md +25 -0
  389. package/plugin/roles/examples/research-director.md +24 -0
  390. package/plugin/roles/examples/research-ops.md +25 -0
  391. package/plugin/roles/examples/researcher.md +25 -0
  392. package/plugin/roles/examples/revenue-lead.md +25 -0
  393. package/plugin/roles/examples/revops.md +26 -0
  394. package/plugin/roles/examples/seo.md +27 -0
  395. package/plugin/roles/examples/specialist.md +24 -0
  396. package/plugin/scripts/admision.py +165 -0
  397. package/plugin/scripts/apaga.py +232 -0
  398. package/plugin/scripts/avatar.py +211 -0
  399. package/plugin/scripts/broker.py +531 -0
  400. package/plugin/scripts/cage.py +252 -0
  401. package/plugin/scripts/capabilities.py +197 -0
  402. package/plugin/scripts/card.py +312 -0
  403. package/plugin/scripts/cities.py +520 -0
  404. package/plugin/scripts/city-env.sh +90 -0
  405. package/plugin/scripts/city-runtime.sh +87 -0
  406. package/plugin/scripts/city-session.sh +526 -0
  407. package/plugin/scripts/city_env.py +67 -0
  408. package/plugin/scripts/crecimiento.py +140 -0
  409. package/plugin/scripts/deliberations.py +48 -0
  410. package/plugin/scripts/doctor.py +172 -0
  411. package/plugin/scripts/domains.py +201 -0
  412. package/plugin/scripts/evidencia.py +64 -0
  413. package/plugin/scripts/find-repos.sh +111 -0
  414. package/plugin/scripts/gh.py +159 -0
  415. package/plugin/scripts/hall_protocol.py +147 -0
  416. package/plugin/scripts/hook_activity.py +139 -0
  417. package/plugin/scripts/launch.py +94 -0
  418. package/plugin/scripts/logs.py +98 -0
  419. package/plugin/scripts/pairing.py +185 -0
  420. package/plugin/scripts/parcels.py +132 -0
  421. package/plugin/scripts/read-card.py +51 -0
  422. package/plugin/scripts/report.py +201 -0
  423. package/plugin/scripts/reset.py +180 -0
  424. package/plugin/scripts/roads.py +230 -0
  425. package/plugin/scripts/roles.py +274 -0
  426. package/plugin/scripts/runtime_log.py +69 -0
  427. package/plugin/scripts/runtime_processes.py +132 -0
  428. package/plugin/scripts/rutas.py +83 -0
  429. package/plugin/scripts/seat.py +1349 -0
  430. package/plugin/scripts/tokens.py +194 -0
  431. package/plugin/scripts/trust-repos.py +59 -0
  432. package/plugin/scripts/ui.py +280 -0
  433. package/plugin/scripts/units.py +80 -0
  434. package/plugin/scripts/workspace.py +364 -0
  435. package/plugin/skills/city/SKILL.md +191 -0
  436. package/templates/blank.md +39 -0
  437. package/templates/finance.md +44 -0
  438. package/templates/legal.md +45 -0
  439. package/templates/marketing.md +48 -0
  440. package/templates/product.md +45 -0
@@ -0,0 +1,46 @@
1
+ ---
2
+ user: marta
3
+ name: Marta Costa
4
+ role: cpto
5
+ agent: marta/seat
6
+ agents: [contratos, litigios, archivo, fiscal, recepcion]
7
+ kind.contratos: knowledge
8
+ kind.litigios: coordinator
9
+ kind.archivo: knowledge
10
+ kind.fiscal: knowledge
11
+ kind.recepcion: coordinator
12
+ role.contratos: redaccion
13
+ role.litigios: plazos
14
+ role.archivo: expedientes
15
+ role.fiscal: impuestos
16
+ role.recepcion: agenda
17
+ runs.seat: claude
18
+ runs.contratos: claude
19
+ runs.litigios: claude
20
+ runs.archivo: claude
21
+ runs.fiscal: claude
22
+ runs.recepcion: claude
23
+ goals_defined: true
24
+ ---
25
+
26
+ # Marta Costa — Costa & Ley, socia directora
27
+
28
+ Marta chairs the firm. No agent here is a repository: they are knowledge and
29
+ coordination agents — the agents-first model, where a repo is just one thing an
30
+ agent may mount and none of these mounts one.
31
+
32
+ ## Current goal
33
+
34
+ ### O1 — Ningún plazo se pierde y ningún cliente se entera tarde
35
+ - **What**: Presentar en plazo o avisar el mismo día con un plan B concreto.
36
+ - **How it is measured**: expedientes presentados a tiempo y llamadas hechas.
37
+ - **Measure**: `demo — scripted evidence over the local WebSocket committee`
38
+ - **Baseline**: sustos de última hora resueltos a base de noches
39
+ - **Target**: el caos absorbido de día, con horas y nombres
40
+ - **By when**: demo day
41
+ - **State**: in progress
42
+
43
+ ## Round history
44
+
45
+ The guided committee writes its complete act here at runtime. The packaged
46
+ fixture is copied to a temporary directory first, so this file stays untouched.
@@ -0,0 +1,15 @@
1
+ # Five agents, five houses. The scripted committee invites only three, so
2
+ # abstention and bounded participation remain believable — same as Aurora.
3
+ repos:
4
+ contratos:
5
+ - ruta: "" ; unidad: civil ; nombre: "Contratos"
6
+ litigios:
7
+ - ruta: "" ; unidad: civil ; nombre: "Litigios"
8
+ archivo:
9
+ - ruta: "" ; unidad: gestion ; nombre: "Archivo"
10
+ fiscal:
11
+ - ruta: "" ; unidad: fiscalidad ; nombre: "Fiscal"
12
+ recepcion:
13
+ - ruta: "" ; unidad: gestion ; nombre: "Recepción"
14
+
15
+ lab: []
@@ -0,0 +1,4 @@
1
+ {
2
+ "version": 1,
3
+ "roads": []
4
+ }
@@ -0,0 +1,9 @@
1
+ # A small law firm: three districts anyone can read at a glance.
2
+ units:
3
+ - id: civil ; name: Derecho Civil ; color: e2604f ; order: 1
4
+ - id: fiscalidad ; name: Fiscal ; color: f5c451 ; order: 2
5
+ - id: gestion ; name: Gestión ; color: 8f7ae6 ; order: 3
6
+
7
+ special:
8
+ - id: lab ; name: Lab ; color: 8fb8c9 ; order: 90
9
+ - id: none ; name: Shared ; color: c8b48a ; order: 99
package/demo/elsa.md ADDED
@@ -0,0 +1,50 @@
1
+ ---
2
+ user: elsa
3
+ name: Elsa Marín
4
+ role: po
5
+ agent: elsa/po
6
+ repos: [nova, store-service]
7
+ covers: [all]
8
+ goals_defined: true
9
+ ---
10
+
11
+ # Elsa Marín
12
+
13
+ Role: **po** — in the city, the **site manager**. The domain is in `roles/po.md`.
14
+
15
+ ## Repos
16
+
17
+ Answers for: `nova`, `store-service`.
18
+
19
+ ## Current goals
20
+
21
+ ### O1 — A release note nobody has to translate
22
+ - **What**: A release note nobody has to translate.
23
+ - **How it is measured**: Releases whose note names the player-visible change
24
+ - **Measure**: `manual — Elsa reads the last ten notes and marks those a player would understand`
25
+ - **Baseline**: 4 of 10 (2026-07-02)
26
+ - **Target**: 9 of 10
27
+ - **By when**: Q4 2026
28
+ - **State**: in progress
29
+
30
+ <!-- Format, one block per goal:
31
+
32
+ ### O1 — <short title>
33
+ - **What**: what has to be achieved, in one sentence.
34
+ - **How it is measured**: the concrete signal that says whether it is going well.
35
+ - **Measure**: the command or query returning that signal, runnable as written.
36
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
37
+ how often>`.
38
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
39
+ - **Target**: the value to reach.
40
+ - **By when**: a date or a quarter.
41
+ - **State**: not started | in progress | at risk | done
42
+
43
+ The measure gets run before the goal is agreed: if it does not work, what is
44
+ missing is building it, and that is work. See /city:goals.
45
+
46
+ -->
47
+
48
+ ## Round history
49
+
50
+ Rounds leave their summary here, most recent first.
package/demo/farid.md ADDED
@@ -0,0 +1,52 @@
1
+ ---
2
+ user: farid
3
+ name: Farid Nasser
4
+ role: llm-engineer
5
+ agent: farid/llm
6
+ repos: []
7
+ covers: [all]
8
+ goals_defined: true
9
+ ---
10
+
11
+ # Farid Nasser
12
+
13
+ Role: **llm-engineer** — in the city, the **machinist**. The domain is in `roles/llm-engineer.md`.
14
+
15
+ ## Repos
16
+
17
+ No repos of their own: cross-cutting roles do not own any, they answer for one property of all of them.
18
+
19
+ ## Current goals
20
+
21
+ ### O1 — Cost per NPC dialogue drops 60% with no quality loss
22
+ - **What**: Cost per NPC dialogue drops 60% with no quality loss.
23
+ - **How it is measured**: average cost per conversation and hit rate over the 40 reference cases.
24
+ - **Measure**: `python evals/npc_dialog.py --report`
25
+ - **Baseline**: $0.021 and 86% (2026-02-01)
26
+ - **Target**: $0.008 and ≥86%
27
+ - **By when**: Q2 2026
28
+ - **State**: in progress
29
+
30
+ _Last edited: 2026-02-14 by ada._
31
+
32
+ <!-- Format, one block per goal:
33
+
34
+ ### O1 — <short title>
35
+ - **What**: what has to be achieved, in one sentence.
36
+ - **How it is measured**: the concrete signal that says whether it is going well.
37
+ - **Measure**: the command or query returning that signal, runnable as written.
38
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
39
+ how often>`.
40
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
41
+ - **Target**: the value to reach.
42
+ - **By when**: a date or a quarter.
43
+ - **State**: not started | in progress | at risk | done
44
+
45
+ The measure gets run before the goal is agreed: if it does not work, what is
46
+ missing is building it, and that is work. See /city:goals.
47
+
48
+ -->
49
+
50
+ ## Round history
51
+
52
+ Rounds leave their summary here, most recent first.
package/demo/greta.md ADDED
@@ -0,0 +1,50 @@
1
+ ---
2
+ user: greta
3
+ name: Greta Lindqvist
4
+ role: ai-manager
5
+ agent: greta/ai
6
+ repos: [lab-npc-brains, telemetry-collector, nova]
7
+ covers: [all]
8
+ goals_defined: true
9
+ ---
10
+
11
+ # Greta Lindqvist
12
+
13
+ Role: **ai-manager** — in the city, the **works inspector**. The domain is in `roles/ai-manager.md`.
14
+
15
+ ## Repos
16
+
17
+ Answers for: `lab-npc-brains`, `telemetry-collector`, `nova`.
18
+
19
+ ## Current goals
20
+
21
+ ### O1 — Agents ask before they touch somebody else's property
22
+ - **What**: Agents ask before they touch somebody else's property.
23
+ - **How it is measured**: Notices sent before the merge, not after
24
+ - **Measure**: `select count(*) from evento where tipo='notice'`
25
+ - **Baseline**: 31 last month, 12 after the merge (2026-07-01)
26
+ - **Target**: none after the merge
27
+ - **By when**: Q4 2026
28
+ - **State**: in progress
29
+
30
+ <!-- Format, one block per goal:
31
+
32
+ ### O1 — <short title>
33
+ - **What**: what has to be achieved, in one sentence.
34
+ - **How it is measured**: the concrete signal that says whether it is going well.
35
+ - **Measure**: the command or query returning that signal, runnable as written.
36
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
37
+ how often>`.
38
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
39
+ - **Target**: the value to reach.
40
+ - **By when**: a date or a quarter.
41
+ - **State**: not started | in progress | at risk | done
42
+
43
+ The measure gets run before the goal is agreed: if it does not work, what is
44
+ missing is building it, and that is work. See /city:goals.
45
+
46
+ -->
47
+
48
+ ## Round history
49
+
50
+ Rounds leave their summary here, most recent first.
package/demo/hugo.md ADDED
@@ -0,0 +1,49 @@
1
+ ---
2
+ user: hugo
3
+ name: Hugo Beltrán
4
+ role: dev
5
+ agent: hugo/dev
6
+ repos: [nova, engine-core, asset-pipeline, launcher]
7
+ goals_defined: true
8
+ ---
9
+
10
+ # Hugo Beltrán
11
+
12
+ Role: **dev** — in the city, the **master builder**. The domain is in `roles/dev.md`.
13
+
14
+ ## Repos
15
+
16
+ Answers for: `nova`, `engine-core`, `asset-pipeline`, `launcher`.
17
+
18
+ ## Current goals
19
+
20
+ ### O1 — The engine stops being the thing everybody waits for
21
+ - **What**: The engine stops being the thing everybody waits for.
22
+ - **How it is measured**: Open PRs on engine-core older than two weeks
23
+ - **Measure**: `gh pr list --repo aurora/engine-core --search 'created:<2026-08-12' --json number --jq length`
24
+ - **Baseline**: 7 stale (2026-08-01)
25
+ - **Target**: 1 or none
26
+ - **By when**: Q4 2026
27
+ - **State**: at risk
28
+
29
+ <!-- Format, one block per goal:
30
+
31
+ ### O1 — <short title>
32
+ - **What**: what has to be achieved, in one sentence.
33
+ - **How it is measured**: the concrete signal that says whether it is going well.
34
+ - **Measure**: the command or query returning that signal, runnable as written.
35
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
36
+ how often>`.
37
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
38
+ - **Target**: the value to reach.
39
+ - **By when**: a date or a quarter.
40
+ - **State**: not started | in progress | at risk | done
41
+
42
+ The measure gets run before the goal is agreed: if it does not work, what is
43
+ missing is building it, and that is work. See /city:goals.
44
+
45
+ -->
46
+
47
+ ## Round history
48
+
49
+ Rounds leave their summary here, most recent first.
package/demo/iris.md ADDED
@@ -0,0 +1,49 @@
1
+ ---
2
+ user: iris
3
+ name: Iris Cabrera
4
+ role: dev
5
+ agent: iris/dev
6
+ repos: [puzzle-quest, farm-tycoon, store-service, ads-mediation]
7
+ goals_defined: true
8
+ ---
9
+
10
+ # Iris Cabrera
11
+
12
+ Role: **dev** — in the city, the **master builder**. The domain is in `roles/dev.md`.
13
+
14
+ ## Repos
15
+
16
+ Answers for: `puzzle-quest`, `farm-tycoon`, `store-service`, `ads-mediation`.
17
+
18
+ ## Current goals
19
+
20
+ ### O1 — A crash a player hits twice never survives a week
21
+ - **What**: A crash a player hits twice never survives a week.
22
+ - **How it is measured**: Crash groups over 100 sessions open more than seven days
23
+ - **Measure**: `manual — Iris reads the crash board every Monday and counts them`
24
+ - **Baseline**: 6 groups (2026-06-08)
25
+ - **Target**: 0
26
+ - **By when**: Q4 2026
27
+ - **State**: in progress
28
+
29
+ <!-- Format, one block per goal:
30
+
31
+ ### O1 — <short title>
32
+ - **What**: what has to be achieved, in one sentence.
33
+ - **How it is measured**: the concrete signal that says whether it is going well.
34
+ - **Measure**: the command or query returning that signal, runnable as written.
35
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
36
+ how often>`.
37
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
38
+ - **Target**: the value to reach.
39
+ - **By when**: a date or a quarter.
40
+ - **State**: not started | in progress | at risk | done
41
+
42
+ The measure gets run before the goal is agreed: if it does not work, what is
43
+ missing is building it, and that is work. See /city:goals.
44
+
45
+ -->
46
+
47
+ ## Round history
48
+
49
+ Rounds leave their summary here, most recent first.
package/demo/jonas.md ADDED
@@ -0,0 +1,51 @@
1
+ ---
2
+ user: jonas
3
+ name: Jonas Weber
4
+ role: dev
5
+ agent: jonas/dev
6
+ repos: [rift-runner, netcode, controller-sdk, crash-reporter]
7
+ goals_defined: true
8
+ ---
9
+
10
+ # Jonas Weber
11
+
12
+ Role: **dev** — in the city, the **master builder**. The domain is in `roles/dev.md`.
13
+
14
+ ## Repos
15
+
16
+ Answers for: `rift-runner`, `netcode`, `controller-sdk`, `crash-reporter`.
17
+
18
+ ## Current goals
19
+
20
+ ### O1 — Networked matches survive 200 ms latency with no rubber-banding
21
+ - **What**: Networked matches survive 200 ms latency with no rubber-banding.
22
+ - **How it is measured**: matches with more than two visible jumps per minute, in the network simulator.
23
+ - **Measure**: `python tools/netsim.py --latency 200 --report`
24
+ - **Baseline**: 31% of matches (2026-01-12)
25
+ - **Target**: < 5%
26
+ - **By when**: Q1 2026
27
+ - **State**: in progress
28
+
29
+ _Last edited: 2026-02-14 by ada._
30
+
31
+ <!-- Format, one block per goal:
32
+
33
+ ### O1 — <short title>
34
+ - **What**: what has to be achieved, in one sentence.
35
+ - **How it is measured**: the concrete signal that says whether it is going well.
36
+ - **Measure**: the command or query returning that signal, runnable as written.
37
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
38
+ how often>`.
39
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
40
+ - **Target**: the value to reach.
41
+ - **By when**: a date or a quarter.
42
+ - **State**: not started | in progress | at risk | done
43
+
44
+ The measure gets run before the goal is agreed: if it does not work, what is
45
+ missing is building it, and that is work. See /city:goals.
46
+
47
+ -->
48
+
49
+ ## Round history
50
+
51
+ Rounds leave their summary here, most recent first.
package/demo/kira.md ADDED
@@ -0,0 +1,51 @@
1
+ ---
2
+ user: kira
3
+ name: Kira Sato
4
+ role: dev
5
+ agent: kira/dev
6
+ repos: [telemetry-collector, dbt-models, etl-jobs, player-dashboards, ab-testing]
7
+ goals_defined: true
8
+ ---
9
+
10
+ # Kira Sato
11
+
12
+ Role: **dev** — in the city, the **master builder**. The domain is in `roles/dev.md`.
13
+
14
+ ## Repos
15
+
16
+ Answers for: `telemetry-collector`, `dbt-models`, `etl-jobs`, `player-dashboards`, `ab-testing`.
17
+
18
+ ## Current goals
19
+
20
+ ### O1 — No telemetry event is lost on deploy
21
+ - **What**: No telemetry event is lost on deploy.
22
+ - **How it is measured**: events received against events sent, in the deploy window.
23
+ - **Measure**: `python tools/telemetry_audit.py --window deploy`
24
+ - **Baseline**: 97.3% (2026-02-03)
25
+ - **Target**: ≥ 99.9%
26
+ - **By when**: Q2 2026
27
+ - **State**: in progress
28
+
29
+ _Last edited: 2026-02-14 by ada._
30
+
31
+ <!-- Format, one block per goal:
32
+
33
+ ### O1 — <short title>
34
+ - **What**: what has to be achieved, in one sentence.
35
+ - **How it is measured**: the concrete signal that says whether it is going well.
36
+ - **Measure**: the command or query returning that signal, runnable as written.
37
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
38
+ how often>`.
39
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
40
+ - **Target**: the value to reach.
41
+ - **By when**: a date or a quarter.
42
+ - **State**: not started | in progress | at risk | done
43
+
44
+ The measure gets run before the goal is agreed: if it does not work, what is
45
+ missing is building it, and that is work. See /city:goals.
46
+
47
+ -->
48
+
49
+ ## Round history
50
+
51
+ Rounds leave their summary here, most recent first.
package/demo/luca.md ADDED
@@ -0,0 +1,49 @@
1
+ ---
2
+ user: luca
3
+ name: Luca Ferri
4
+ role: dev
5
+ agent: luca/dev
6
+ repos: [lab-procgen, lab-npc-brains, lab-shaders, lab-notebooks, sandbox-ui]
7
+ goals_defined: true
8
+ ---
9
+
10
+ # Luca Ferri
11
+
12
+ Role: **dev** — in the city, the **master builder**. The domain is in `roles/dev.md`.
13
+
14
+ ## Repos
15
+
16
+ Answers for: `lab-procgen`, `lab-npc-brains`, `lab-shaders`, `lab-notebooks`, `sandbox-ui`.
17
+
18
+ ## Current goals
19
+
20
+ ### O1 — The lab ships one thing a quarter into a real game
21
+ - **What**: The lab ships one thing a quarter into a real game.
22
+ - **How it is measured**: Lab work that reaches players
23
+ - **Measure**: `manual — Luca and Ada review at the end of each quarter`
24
+ - **Baseline**: 0 in the last two quarters (2026-06-30)
25
+ - **Target**: 1 per quarter
26
+ - **By when**: Q1 2027
27
+ - **State**: not started
28
+
29
+ <!-- Format, one block per goal:
30
+
31
+ ### O1 — <short title>
32
+ - **What**: what has to be achieved, in one sentence.
33
+ - **How it is measured**: the concrete signal that says whether it is going well.
34
+ - **Measure**: the command or query returning that signal, runnable as written.
35
+ If the signal is a judgement and not a number: `manual — <who looks at what, and
36
+ how often>`.
37
+ - **Baseline**: what the measure returned the day it was agreed, with the date.
38
+ - **Target**: the value to reach.
39
+ - **By when**: a date or a quarter.
40
+ - **State**: not started | in progress | at risk | done
41
+
42
+ The measure gets run before the goal is agreed: if it does not work, what is
43
+ missing is building it, and that is work. See /city:goals.
44
+
45
+ -->
46
+
47
+ ## Round history
48
+
49
+ Rounds leave their summary here, most recent first.
@@ -0,0 +1,92 @@
1
+ # Parcels — which slice of which repo serves which business unit.
2
+ #
3
+ # Aurora Games is made up for this demo: a game studio with four business units,
4
+ # a lab, and a pile of shared code. Any company shaped like this works the same.
5
+ #
6
+ # A house on the map is not a repo: it is a **parcel**. One repo can hold several,
7
+ # and that is not a drawing detail — it is the central fact of most codebases: a
8
+ # monorepo holds products from every unit, and the shared engine serves them all.
9
+ #
10
+ # Two things read this file, which is why it lives in data and not in code:
11
+ # 1. The city map, to know which district each house belongs to.
12
+ # 2. The notice router, to decide who to tell based on the FILES a PR touches
13
+ # — an exact signal, not a list of topics that goes stale.
14
+ #
15
+ # units: mobile | console | arcade | school | platform | data | lab | none
16
+ # path: glob relative to the repo. Empty = the whole repo. First match wins, so
17
+ # specific goes before general.
18
+
19
+ repos:
20
+ nova:
21
+ - ruta: "apps/puzzle-*/**" ; unidad: mobile ; nombre: "Puzzle Quest"
22
+ - ruta: "apps/farm-*/**" ; unidad: mobile ; nombre: "Farm Tycoon"
23
+ - ruta: "apps/rift-*/**" ; unidad: console ; nombre: "Rift Runner"
24
+ - ruta: "apps/cabinet-*/**" ; unidad: arcade ; nombre: "Cabinet firmware"
25
+ - ruta: "apps/school-*/**" ; unidad: school ; nombre: "School editions"
26
+ - ruta: "packages/**" ; unidad: none ; nombre: "nova · packages"
27
+ - ruta: "" ; unidad: none ; nombre: "nova · monorepo"
28
+
29
+ # Standalone repos. A repo with nothing declared here lands in "no unit", which
30
+ # is honest but not useful: on the map it turns into a district of orphans that
31
+ # tells you nothing. Saying which unit each repo serves is the work, and it is
32
+ # the work that makes the map worth looking at.
33
+ puzzle-quest:
34
+ - ruta: "" ; unidad: mobile ; nombre: "Puzzle Quest"
35
+ farm-tycoon:
36
+ - ruta: "" ; unidad: mobile ; nombre: "Farm Tycoon"
37
+ ads-mediation:
38
+ - ruta: "" ; unidad: mobile ; nombre: "Ad mediation"
39
+ rift-runner:
40
+ - ruta: "" ; unidad: console ; nombre: "Rift Runner"
41
+ netcode:
42
+ - ruta: "" ; unidad: console ; nombre: "Netcode"
43
+ controller-sdk:
44
+ - ruta: "" ; unidad: console ; nombre: "Controller SDK"
45
+ launcher:
46
+ - ruta: "" ; unidad: platform; nombre: "Launcher"
47
+ store-service:
48
+ - ruta: "" ; unidad: platform; nombre: "Store"
49
+ infrastructure:
50
+ - ruta: "" ; unidad: platform; nombre: "Infrastructure"
51
+ ci-templates:
52
+ - ruta: "" ; unidad: platform; nombre: "CI templates"
53
+ crash-reporter:
54
+ - ruta: "" ; unidad: platform; nombre: "Crash reporter"
55
+ consent-kit:
56
+ - ruta: "" ; unidad: platform; nombre: "Consent kit"
57
+ asset-pipeline:
58
+ - ruta: "" ; unidad: arcade ; nombre: "Asset pipeline"
59
+ telemetry-collector:
60
+ - ruta: "" ; unidad: data ; nombre: "Telemetry collector"
61
+ etl-jobs:
62
+ - ruta: "" ; unidad: data ; nombre: "ETL jobs"
63
+ dbt-models:
64
+ - ruta: "" ; unidad: data ; nombre: "dbt models"
65
+ ab-testing:
66
+ - ruta: "" ; unidad: data ; nombre: "Experiments"
67
+ player-dashboards:
68
+ - ruta: "" ; unidad: school ; nombre: "Classroom dashboards"
69
+
70
+ engine-core:
71
+ - ruta: "renderer/**" ; unidad: none ; nombre: "engine · renderer"
72
+ - ruta: "audio/**" ; unidad: none ; nombre: "engine · audio"
73
+ - ruta: "physics/**" ; unidad: none ; nombre: "engine · physics"
74
+ - ruta: "" ; unidad: none ; nombre: "engine · core"
75
+
76
+ # The lab.
77
+ #
78
+ # Research and development: it does not ship to players yet, and it is needed.
79
+ # It gets its own district instead of falling into the "no unit" bucket on
80
+ # purpose — a lab repo among the orphans reads as waste, and it is the opposite:
81
+ # it is the part of the studio working for two years from now instead of for this
82
+ # quarter.
83
+ #
84
+ # Drawn with permanent scaffolding, because that is what it is: a site that is
85
+ # open on purpose. And its growth is not compared against the shipping units: a
86
+ # lab house with few floors is not behind, it is early.
87
+ lab:
88
+ - lab-procgen
89
+ - lab-npc-brains
90
+ - lab-shaders
91
+ - lab-notebooks
92
+ - sandbox-ui
package/demo/seed.py ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env python3
2
+ """Load the demo city: Aurora Games, a made-up game studio.
3
+
4
+ Twelve people, four business units, a lab, and three years of generated history
5
+ so the replay has something to replay. It is the same seeder the real thing uses,
6
+ pointed at `demo/` and told to invent a past.
7
+
8
+ ./demo/seed.py --local load it into the local D1
9
+ ./demo/seed.py --remote load it into the deployed one
10
+
11
+ An empty city teaches nothing: you cannot tell whether the thing works, and you
12
+ cannot show it to anyone. Hence a demo that arrives alive.
13
+ """
14
+ import os
15
+ import sys
16
+
17
+ AQUI = os.path.dirname(os.path.abspath(__file__))
18
+ SEMBRADOR = os.path.join(AQUI, '..', 'city', 'scripts', 'seed.py')
19
+ os.execv(sys.executable,
20
+ [sys.executable, SEMBRADOR, '--data', AQUI, '--fake-history', *sys.argv[1:]])