@maka/maka-cli 5.123.1 → 5.125.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 (342) hide show
  1. package/README.md +64 -64
  2. package/bundle/typescript/package.json +120 -120
  3. package/bundle/typescript/src/README.md +64 -64
  4. package/bundle/typescript/src/commands/aws/aws.command.js +2 -2
  5. package/bundle/typescript/src/commands/aws/ci.sub.cmd.js +5 -5
  6. package/bundle/typescript/src/commands/aws/ckp.sub.cmd.js +12 -12
  7. package/bundle/typescript/src/commands/aws/csg.sub.cmd.js +3 -3
  8. package/bundle/typescript/src/commands/aws/di.sub.cmd.js +8 -8
  9. package/bundle/typescript/src/commands/aws/rkp.sub.cmd.js +5 -5
  10. package/bundle/typescript/src/commands/aws/sth.sub.cmd.js +3 -3
  11. package/bundle/typescript/src/commands/aws/ti.sub.cmd.js +5 -5
  12. package/bundle/typescript/src/commands/build/build.js +16 -16
  13. package/bundle/typescript/src/commands/build/docker.sub.cmd.js +9 -9
  14. package/bundle/typescript/src/commands/create.js +36 -36
  15. package/bundle/typescript/src/commands/debug.js +4 -4
  16. package/bundle/typescript/src/commands/deploy/deploy.command.js +2 -2
  17. package/bundle/typescript/src/commands/deploy/galaxy.sub.cmd.js +2 -2
  18. package/bundle/typescript/src/commands/deploy/github.sub.cmd.js +8 -8
  19. package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js +2 -2
  20. package/bundle/typescript/src/commands/env/env.command.js +8 -8
  21. package/bundle/typescript/src/commands/env/set.sub.cmd.js +11 -11
  22. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.d.ts +0 -8
  23. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js +6 -50
  24. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +3 -3
  26. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +0 -4
  28. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +0 -1342
  29. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js +5 -6
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +13 -5
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +5 -2
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +2 -2
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.d.ts +0 -38
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +11 -45
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js +5 -4
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js.map +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js +10 -4
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/lifestyle.d.ts +7 -0
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/lifestyle.js +58 -9
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/lifestyle.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js +10 -7
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js.map +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +7 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -9
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +12 -8
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/sin.js +2 -2
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/sin.js.map +1 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +8 -8
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js.map +1 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +22 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  65. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +24 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +39 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +110 -35
  69. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +445 -445
  71. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -6
  73. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +42 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/game.js +118 -43
  75. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/metamagics.d.ts +32 -0
  77. package/bundle/typescript/src/commands/game/sideQuest/metamagics.js +12 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/metamagics.js.map +1 -0
  79. package/bundle/typescript/src/commands/game/sideQuest/metatypes.d.ts +6 -4
  80. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js +3 -83
  81. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/models/home-containers.d.ts +36 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/models/home-containers.js +62 -0
  84. package/bundle/typescript/src/commands/game/sideQuest/models/home-containers.js.map +1 -0
  85. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +206 -206
  86. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +5 -5
  87. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +10 -14
  88. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  89. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +24 -10
  90. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  91. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +3 -7
  92. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +15 -715
  93. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
  94. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +556 -556
  95. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +1447 -1447
  96. package/bundle/typescript/src/commands/game/sideQuest/spells.d.ts +5 -7
  97. package/bundle/typescript/src/commands/game/sideQuest/spells.js +5 -63
  98. package/bundle/typescript/src/commands/game/sideQuest/spells.js.map +1 -1
  99. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +8 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/ui.js +22 -0
  101. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  102. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +36 -20
  103. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +24 -658
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +100 -20
  106. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +314 -57
  107. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  108. package/bundle/typescript/src/commands/game/sideQuest/utilities/commerce.d.ts +32 -0
  109. package/bundle/typescript/src/commands/game/sideQuest/utilities/commerce.js +45 -5
  110. package/bundle/typescript/src/commands/game/sideQuest/utilities/commerce.js.map +1 -1
  111. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +14 -14
  112. package/bundle/typescript/src/commands/game/sideQuest/utilities/owned-drones.d.ts +32 -0
  113. package/bundle/typescript/src/commands/game/sideQuest/utilities/owned-drones.js +24 -0
  114. package/bundle/typescript/src/commands/game/sideQuest/utilities/owned-drones.js.map +1 -0
  115. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.d.ts +34 -0
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +66 -29
  117. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  118. package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +2 -2
  119. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +28 -2
  120. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  121. package/bundle/typescript/src/commands/generate.js +2 -2
  122. package/bundle/typescript/src/commands/lint.js +10 -10
  123. package/bundle/typescript/src/commands/maka.cmd.js +26 -26
  124. package/bundle/typescript/src/commands/murder.js +14 -14
  125. package/bundle/typescript/src/commands/proxy.js +13 -13
  126. package/bundle/typescript/src/commands/remote/reconfig.sub.cmd.js +6 -6
  127. package/bundle/typescript/src/commands/run/docker.sub.cmd.js +11 -11
  128. package/bundle/typescript/src/commands/run/run.command.js +24 -24
  129. package/bundle/typescript/src/commands/set/global.sub.cmd.js +8 -8
  130. package/bundle/typescript/src/commands/set/local.sub.cmd.js +2 -2
  131. package/bundle/typescript/src/commands/set/set.command.js +3 -3
  132. package/bundle/typescript/src/commands/testCmd/test.command.js +2 -2
  133. package/bundle/typescript/src/error.js +1 -1
  134. package/bundle/typescript/src/error.js.map +1 -1
  135. package/bundle/typescript/src/exec.js +0 -0
  136. package/bundle/typescript/src/generators/api.js +11 -11
  137. package/bundle/typescript/src/generators/collection.js +6 -6
  138. package/bundle/typescript/src/generators/hook.js +10 -10
  139. package/bundle/typescript/src/generators/kits/auth/auth.generator.js +2 -2
  140. package/bundle/typescript/src/generators/kits/auth/auth0-meteor.auth.gen.js +612 -612
  141. package/bundle/typescript/src/generators/kits/auth/basic-meteor.auth.gen.js +48 -48
  142. package/bundle/typescript/src/generators/kits/auth/provider.auth.gen.js +12 -12
  143. package/bundle/typescript/src/generators/kits/esri/esri.generator.js +3 -3
  144. package/bundle/typescript/src/generators/kits/esri/map.esri.gen.js +7 -7
  145. package/bundle/typescript/src/generators/kits/frames/frames.generator.js +16 -16
  146. package/bundle/typescript/src/generators/kits/mui/auth.mui.gen.js +2 -2
  147. package/bundle/typescript/src/generators/kits/mui/auth0.mui.gen.js +5 -5
  148. package/bundle/typescript/src/generators/kits/mui/frame.mui.gen.js +4 -4
  149. package/bundle/typescript/src/generators/kits/mui/mui.generator.js +22 -22
  150. package/bundle/typescript/src/generators/services/translation.js +5 -5
  151. package/bundle/typescript/src/templates/aws/cloudformation/create-ec2-instance.template +14 -14
  152. package/bundle/typescript/src/templates/meteor/api/api.js +20 -20
  153. package/bundle/typescript/src/templates/meteor/api/api.js.ts +20 -20
  154. package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js +50 -50
  155. package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js.ts +55 -55
  156. package/bundle/typescript/src/templates/meteor/api/graphql-api.js +63 -63
  157. package/bundle/typescript/src/templates/meteor/api/graphql-api.js.ts +69 -69
  158. package/bundle/typescript/src/templates/meteor/api/methods.js +39 -39
  159. package/bundle/typescript/src/templates/meteor/api/methods.js.ts +40 -40
  160. package/bundle/typescript/src/templates/meteor/api/register-api.js +3 -3
  161. package/bundle/typescript/src/templates/meteor/api/register-api.js.ts +3 -3
  162. package/bundle/typescript/src/templates/meteor/api/resolvers.js +9 -9
  163. package/bundle/typescript/src/templates/meteor/api/resolvers.js.ts +9 -9
  164. package/bundle/typescript/src/templates/meteor/api/typeDefs.js +6 -6
  165. package/bundle/typescript/src/templates/meteor/api/typeDefs.js.ts +6 -6
  166. package/bundle/typescript/src/templates/meteor/app/client/body.html +3 -3
  167. package/bundle/typescript/src/templates/meteor/app/client/head.html +12 -12
  168. package/bundle/typescript/src/templates/meteor/app/client/main.js +15 -15
  169. package/bundle/typescript/src/templates/meteor/app/client/main.js.jsx +15 -15
  170. package/bundle/typescript/src/templates/meteor/app/client/main.js.ts +17 -17
  171. package/bundle/typescript/src/templates/meteor/app/client/main.js.tsx +17 -17
  172. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js +20 -20
  173. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.jsx +107 -107
  174. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.ts +20 -20
  175. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.tsx +108 -108
  176. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js +39 -39
  177. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.jsx +33 -33
  178. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.ts +24 -24
  179. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.tsx +33 -33
  180. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js +9 -9
  181. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.jsx +9 -9
  182. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.ts +9 -9
  183. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.tsx +9 -9
  184. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js +1 -1
  185. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.jsx +20 -20
  186. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.ts +1 -1
  187. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.tsx +20 -20
  188. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.jsx +28 -28
  189. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.tsx +28 -28
  190. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js +1 -1
  191. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.jsx +95 -95
  192. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.tsx +98 -98
  193. package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js +24 -24
  194. package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js.ts +24 -24
  195. package/bundle/typescript/src/templates/meteor/app/lib/main.js +3 -3
  196. package/bundle/typescript/src/templates/meteor/app/lib/main.js.jsx +3 -3
  197. package/bundle/typescript/src/templates/meteor/app/lib/main.js.ts +3 -3
  198. package/bundle/typescript/src/templates/meteor/app/lib/main.js.tsx +3 -3
  199. package/bundle/typescript/src/templates/meteor/app/maka.d.ts +533 -533
  200. package/bundle/typescript/src/templates/meteor/app/meteor.d.ts +181 -181
  201. package/bundle/typescript/src/templates/meteor/app/public/manifest.json +27 -27
  202. package/bundle/typescript/src/templates/meteor/app/public/sw.js +30 -30
  203. package/bundle/typescript/src/templates/meteor/app/public/sw.js.jsx +30 -30
  204. package/bundle/typescript/src/templates/meteor/app/public/sw.js.ts +30 -30
  205. package/bundle/typescript/src/templates/meteor/app/public/sw.js.tsx +30 -30
  206. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js +179 -179
  207. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.jsx +179 -179
  208. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.ts +179 -179
  209. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.tsx +179 -179
  210. package/bundle/typescript/src/templates/meteor/app/server/main.js +13 -13
  211. package/bundle/typescript/src/templates/meteor/app/server/main.js.jsx +13 -13
  212. package/bundle/typescript/src/templates/meteor/app/server/main.js.ts +14 -14
  213. package/bundle/typescript/src/templates/meteor/app/server/main.js.tsx +14 -14
  214. package/bundle/typescript/src/templates/meteor/app/tsconfig.json +42 -42
  215. package/bundle/typescript/src/templates/meteor/collection/collection.js +51 -51
  216. package/bundle/typescript/src/templates/meteor/collection/collection.js.ts +55 -55
  217. package/bundle/typescript/src/templates/meteor/collection/tests.js +27 -27
  218. package/bundle/typescript/src/templates/meteor/collection/tests.js.ts +27 -27
  219. package/bundle/typescript/src/templates/meteor/config/deploy.sh.template +101 -101
  220. package/bundle/typescript/src/templates/meteor/config/docker-compose.yaml +17 -17
  221. package/bundle/typescript/src/templates/meteor/config/nginx.conf.template +31 -31
  222. package/bundle/typescript/src/templates/meteor/config/pm2.config.js +27 -27
  223. package/bundle/typescript/src/templates/meteor/config/process.env +5 -5
  224. package/bundle/typescript/src/templates/meteor/config/settings.json +11 -11
  225. package/bundle/typescript/src/templates/meteor/config/ssh.json +6 -6
  226. package/bundle/typescript/src/templates/meteor/dbc/config.js +70 -70
  227. package/bundle/typescript/src/templates/meteor/dbc/config.js.ts +70 -70
  228. package/bundle/typescript/src/templates/meteor/dbc/conn.js +37 -37
  229. package/bundle/typescript/src/templates/meteor/dbc/conn.js.ts +37 -37
  230. package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js +3 -3
  231. package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js.ts +3 -3
  232. package/bundle/typescript/src/templates/meteor/github/workflows/deploy.yaml +150 -150
  233. package/bundle/typescript/src/templates/meteor/method/method.js +48 -48
  234. package/bundle/typescript/src/templates/meteor/method/method.js.ts +48 -48
  235. package/bundle/typescript/src/templates/meteor/package/package.js +37 -37
  236. package/bundle/typescript/src/templates/meteor/package/package.js.jsx +37 -37
  237. package/bundle/typescript/src/templates/meteor/package/package.js.ts +36 -36
  238. package/bundle/typescript/src/templates/meteor/package/package.js.tsx +37 -37
  239. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js +5 -5
  240. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.jsx +5 -5
  241. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.ts +5 -5
  242. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.tsx +5 -5
  243. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js +5 -5
  244. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.jsx +5 -5
  245. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.ts +5 -5
  246. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.tsx +5 -5
  247. package/bundle/typescript/src/templates/meteor/project/.maka/config.json +29 -29
  248. package/bundle/typescript/src/templates/meteor/project/README.md +33 -33
  249. package/bundle/typescript/src/templates/meteor/project/build/README +4 -4
  250. package/bundle/typescript/src/templates/meteor/project/gitignore +10 -10
  251. package/bundle/typescript/src/templates/meteor/project/package.json +29 -29
  252. package/bundle/typescript/src/templates/meteor/publish/publish.js +7 -7
  253. package/bundle/typescript/src/templates/meteor/publish/publish.js.ts +7 -7
  254. package/bundle/typescript/src/templates/meteor/service/logger/logger.js +27 -27
  255. package/bundle/typescript/src/templates/meteor/service/logger/logger.js.ts +27 -27
  256. package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css +5 -5
  257. package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css.less +5 -5
  258. package/bundle/typescript/src/templates/meteor/template/template-tests.js +1 -1
  259. package/bundle/typescript/src/templates/meteor/template/template-tests.js.jsx +55 -55
  260. package/bundle/typescript/src/templates/meteor/template/template-tests.js.ts +1 -1
  261. package/bundle/typescript/src/templates/meteor/template/template-tests.js.tsx +55 -55
  262. package/bundle/typescript/src/templates/meteor/template/template.css +3 -3
  263. package/bundle/typescript/src/templates/meteor/template/template.css.less +3 -3
  264. package/bundle/typescript/src/templates/meteor/template/template.css.scss +3 -3
  265. package/bundle/typescript/src/templates/meteor/template/template.html +5 -5
  266. package/bundle/typescript/src/templates/meteor/template/template.js +20 -20
  267. package/bundle/typescript/src/templates/meteor/template/template.js.jsx +77 -77
  268. package/bundle/typescript/src/templates/meteor/template/template.js.ts +1 -1
  269. package/bundle/typescript/src/templates/meteor/template/template.js.tsx +89 -89
  270. package/bundle/typescript/src/templates/react/component/component.css +6 -6
  271. package/bundle/typescript/src/templates/react/component/component.css.less +6 -6
  272. package/bundle/typescript/src/templates/react/component/component.css.scss +3 -3
  273. package/bundle/typescript/src/templates/react/component/component.js.jsx +59 -59
  274. package/bundle/typescript/src/templates/react/component/component.js.tsx +65 -65
  275. package/bundle/typescript/src/templates/react/hook/hook.css +3 -3
  276. package/bundle/typescript/src/templates/react/hook/hook.css.scss +3 -3
  277. package/bundle/typescript/src/templates/react/hook/hook.js.jsx +19 -19
  278. package/bundle/typescript/src/templates/react/hook/hook.js.tsx +19 -19
  279. package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.jsx +306 -306
  280. package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.tsx +350 -350
  281. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.jsx +178 -178
  282. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.tsx +178 -178
  283. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.jsx +59 -59
  284. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.tsx +67 -67
  285. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.jsx +273 -273
  286. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.tsx +275 -275
  287. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.jsx +182 -182
  288. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.tsx +199 -199
  289. package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.jsx +138 -138
  290. package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.tsx +153 -153
  291. package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.jsx +29 -29
  292. package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.tsx +32 -32
  293. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.css +63 -63
  294. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.jsx +153 -153
  295. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.tsx +164 -164
  296. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.css +105 -105
  297. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.jsx +158 -158
  298. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.tsx +166 -166
  299. package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.jsx +34 -34
  300. package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.tsx +33 -33
  301. package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.jsx +53 -53
  302. package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.tsx +53 -53
  303. package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.jsx +25 -25
  304. package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.tsx +25 -25
  305. package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.jsx +41 -41
  306. package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.tsx +34 -34
  307. package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.jsx +33 -33
  308. package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.tsx +33 -33
  309. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.jsx +71 -71
  310. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.tsx +71 -71
  311. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.jsx +123 -123
  312. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.tsx +123 -123
  313. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.jsx +56 -56
  314. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.tsx +74 -74
  315. package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.jsx +43 -43
  316. package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.tsx +43 -43
  317. package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.jsx +121 -121
  318. package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.tsx +117 -117
  319. package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.jsx +41 -41
  320. package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.tsx +41 -41
  321. package/bundle/typescript/src/templates/react/route/route.js +8 -8
  322. package/bundle/typescript/src/templates/react/route/route.js.jsx +5 -5
  323. package/bundle/typescript/src/templates/react/route/route.js.ts +8 -8
  324. package/bundle/typescript/src/templates/react/route/route.js.tsx +5 -5
  325. package/bundle/typescript/src/templates/react/test/test.js +1 -1
  326. package/bundle/typescript/src/templates/react/test/test.js.jsx +40 -40
  327. package/bundle/typescript/src/templates/react/test/test.js.ts +1 -1
  328. package/bundle/typescript/src/templates/react/test/test.js.tsx +40 -40
  329. package/bundle/typescript/src/templates/service/docker/Dockerfile +54 -54
  330. package/bundle/typescript/src/templates/service/eslint/babel.config.js +16 -16
  331. package/bundle/typescript/src/templates/service/eslint/config.eslint.js +69 -69
  332. package/bundle/typescript/src/templates/service/i18n/i18n.js +33 -33
  333. package/bundle/typescript/src/templates/service/i18n/i18n.js.ts +33 -33
  334. package/bundle/typescript/src/templates/service/i18n/locales.js +3 -3
  335. package/bundle/typescript/src/templates/service/i18n/locales.js.ts +3 -3
  336. package/bundle/typescript/src/templates/service/openssl/openssl.conf +22 -22
  337. package/bundle/typescript/src/templates/service/test/jest/jest.config.js +24 -24
  338. package/bundle/typescript/src/templates/service/test/jest/jest.setup.js +7 -7
  339. package/bundle/typescript/src/tool.d.ts +2 -0
  340. package/bundle/typescript/src/tool.js +5 -2
  341. package/bundle/typescript/src/tool.js.map +1 -1
  342. package/package.json +120 -120
@@ -252,13 +252,13 @@ export function credentialHonestyNote(passesHeld) {
252
252
  const known = passesHeld > 0
253
253
  ? `the ${passesHeld === 1 ? 'pass' : `${passesHeld} passes`} for the barrier${passesHeld === 1 ? '' : 's'} at your own post, named above, and NO others`
254
254
  : `NO code, pass, or combination to anything -- you hold none`;
255
- return `
256
- CREDENTIALS YOU DO NOT HOLD: you know ${known}. You cannot deduce, guess, or
257
- reason your way to a credential you were never given, and you must NEVER invent one --
258
- not as a guess, not as a "try this", not as a number you half-remember. A code you make
259
- up is a code the lock refuses, and the runner who trusts it burns their whole approach on
260
- it. Asked for a pass you do not hold, say so plainly and point them at where such things
261
- actually live: written down somewhere in the world by whoever has to remember it, or in
255
+ return `
256
+ CREDENTIALS YOU DO NOT HOLD: you know ${known}. You cannot deduce, guess, or
257
+ reason your way to a credential you were never given, and you must NEVER invent one --
258
+ not as a guess, not as a "try this", not as a number you half-remember. A code you make
259
+ up is a code the lock refuses, and the runner who trusts it burns their whole approach on
260
+ it. Asked for a pass you do not hold, say so plainly and point them at where such things
261
+ actually live: written down somewhere in the world by whoever has to remember it, or in
262
262
  the hands of whoever works that door.`;
263
263
  }
264
264
  /**
@@ -289,14 +289,14 @@ the hands of whoever works that door.`;
289
289
  */
290
290
  export function localKnowledgeNote(roomName) {
291
291
  const here = roomName ? `"${roomName}"` : 'the room you are standing in';
292
- return `
293
- WHAT YOU KNOW ENDS AT THIS ROOM: you know ${here} -- what stands here, what you can see
294
- here, what you carry, and where its own exits lead. Beyond that you know only what you
295
- have actually been told above. You do NOT know where things are kept in rooms you are not
296
- in, you have NOT been through the other doors in this world, and you do not know what they
297
- need to open. If someone asks and you were not told, say you don't know and say where you
298
- WOULD look -- never name a room to be helpful. A confident wrong room is worse than a
299
- shrug: they will walk there, search it, come back empty, and stop believing the true
292
+ return `
293
+ WHAT YOU KNOW ENDS AT THIS ROOM: you know ${here} -- what stands here, what you can see
294
+ here, what you carry, and where its own exits lead. Beyond that you know only what you
295
+ have actually been told above. You do NOT know where things are kept in rooms you are not
296
+ in, you have NOT been through the other doors in this world, and you do not know what they
297
+ need to open. If someone asks and you were not told, say you don't know and say where you
298
+ WOULD look -- never name a room to be helpful. A confident wrong room is worse than a
299
+ shrug: they will walk there, search it, come back empty, and stop believing the true
300
300
  things you tell them afterwards.`;
301
301
  }
302
302
  /**
@@ -788,78 +788,78 @@ export class NPC extends Player {
788
788
  this._dialogue = npcConfig.dialog;
789
789
  this._description = npcConfig.description;
790
790
  this.commandRegistry = commandRegistry;
791
- this._commandHelp = `
792
- Available in-game commands (use with [COMMAND] prefix):
793
-
794
- - go <direction> — move in a direction like north, south, east, west
795
- - move to <spot> — cross THIS room to one of its named places (bar, door, booths...),
796
- when the room has them. You must share a place with someone to talk-to or trade
797
- with them; speech from another place reaches them only as a shout everyone hears.
798
- "move away" steps to the OPEN FLOOR -- the neutral ground between the places; to
799
- reach someone standing there, move to the open floor yourself. "move to <name>"
800
- also works: it walks you to wherever that person is standing.
801
- - grapple <name> — seize and RESTRAIN someone without hurting them; held, they cannot
802
- move, flee, or fight until they break your grip. Your hands are full while you hold
803
- them ("release" lets go). If YOU are ever held: "struggle" is the only way out.
804
- - say <message> — speak a message
805
- - take <item name> — pick up an item from the current room ("take all" sweeps everything here, but only AFTER you have searched this room)
806
- - drop <item name> — drop an item
807
- - use <item name> — use an item (a Medical item like a medkit heals your PHYSICAL damage;
808
- a StimPatch item recovers your STUN but costs 1 physical as a crash -- both are consumed.
809
- Use them if you're hurt and carrying one)
810
- - rest — recover Stun by resting. Only works in a Residence room or a room with no one
811
- else present; never rest mid-fight
812
- - equip <item name> — equip an item (e.g., equip a weapon to use)
813
- - equip all - equip all wearable items in inventory
814
- - unequip <item name> — remove an equipped item
815
- - unlock <door name> — unlock a door (if you have the key or solution)
816
- - lock <door name> — lock a door
817
- - use <panel name> <the code> — enter a code you actually know into a keypad or panel.
818
- Only a PANEL takes a code; you cannot talk at a mechanical lock
819
- - pick — attempt to pick the lock on the puzzle in this room without knowing the answer (50/50, a failure sets off an alarm)
820
- - hack — attempt to hack the terminal/system in this room without knowing the answer (50/50, a failure trips a countermeasure)
821
- - cast <spell> [at <target>] — cast a spell you know. Requires being Awakened
822
- (innate talent -- you'll be told if you are) OR carrying that spell's formula
823
- item or a grimoire (a Focus item boosts your pool either way). Spells:
824
- "manabolt" (combat damage resisted by body, not armor), "heal [on <ally>]" (heal
825
- physical wounds -- your own by default, or an ally's in your room; healing a
826
- wounded ally is a strong support move), "armor [on <ally>]" (sustained protection
827
- on yourself or an ally; its bearer gets +soak at -2 dice to all else; cast at them
828
- again to release). EVERY cast costs drain -- stun damage to YOU the caster; fill
829
- your stun track and you're out cold. Never cast if you're mundane with no magic gear.
830
- - cast — bare "cast" attempts to magically bypass the ward/barrier in this room
831
- without knowing the answer (requires the same talent or gear; failing burns the
832
- route for good and the backlash hurts you badly)
833
- - search — search the room for hidden things
834
- - look — look around the current room
835
- - look at <target> - looks at an item, player, or direction
836
- - store <item name> — store an item (in bank, safe, etc.)
837
- - give <item name> to <target> — give an item to someone
838
- - talk-to <target> — initiate conversation with another character
839
- - call <target> [message] — call someone remotely over a commlink (works even if they're not in your room; requires having a commlink equipped, and the target having one too)
840
- - end-call — hang up your current commlink call
841
- - silent — toggle your commlink broadcast. While running silent, you can't place
842
- calls and nobody can call YOU. Toggle again to go loud.
843
- - read <target> - Reads an item of Category "Book"
844
- - attack <target> — attack someone in your room. Resolved as opposed dice-pool combat
845
- (your weapon and armor matter); an initiative roll decides who strikes first each
846
- exchange (fast fighters can even land an extra strike), the target strikes back, and
847
- it usually takes several exchanges to bring someone down. Only start a fight your
848
- character would actually risk dying in. If your target flees the room, a failed
849
- attack tells you exactly where they went and which direction to "go" -- CHASE them
850
- with that instead of attacking the empty room again.
851
- - kill <target> - alias for attack: real combat, NOT an instant kill.
852
- - subdue <target> — take someone down ALIVE: stun damage, bare-handed, slower than
853
- shooting; they retaliate lethally. Use when you want them breathing.
854
- - brandish — draw your holstered weapon WITHOUT attacking. Everyone in the room sees
855
- it: a threat display, pure intimidation. (Attacking auto-draws, so you never need
856
- this to fight -- it's for making a point.)
857
- - holster — put your drawn weapon away, visibly. A stand-down gesture: use it to
858
- de-escalate, accept a surrender, or show good faith in a negotiation.
859
- - reload — refill your equipped firearm (consumes an Ammunition item from your pack).
860
- Firearms run dry: if your attack reports "dry", reload or switch to melee.
861
- Fleeing someone you just fought gives them one free parting shot at your back
862
- (and fleeing enemies give YOU one).
791
+ this._commandHelp = `
792
+ Available in-game commands (use with [COMMAND] prefix):
793
+
794
+ - go <direction> — move in a direction like north, south, east, west
795
+ - move to <spot> — cross THIS room to one of its named places (bar, door, booths...),
796
+ when the room has them. You must share a place with someone to talk-to or trade
797
+ with them; speech from another place reaches them only as a shout everyone hears.
798
+ "move away" steps to the OPEN FLOOR -- the neutral ground between the places; to
799
+ reach someone standing there, move to the open floor yourself. "move to <name>"
800
+ also works: it walks you to wherever that person is standing.
801
+ - grapple <name> — seize and RESTRAIN someone without hurting them; held, they cannot
802
+ move, flee, or fight until they break your grip. Your hands are full while you hold
803
+ them ("release" lets go). If YOU are ever held: "struggle" is the only way out.
804
+ - say <message> — speak a message
805
+ - take <item name> — pick up an item from the current room ("take all" sweeps everything here, but only AFTER you have searched this room)
806
+ - drop <item name> — drop an item
807
+ - use <item name> — use an item (a Medical item like a medkit heals your PHYSICAL damage;
808
+ a StimPatch item recovers your STUN but costs 1 physical as a crash -- both are consumed.
809
+ Use them if you're hurt and carrying one)
810
+ - rest — recover Stun by resting. Only works in a Residence room or a room with no one
811
+ else present; never rest mid-fight
812
+ - equip <item name> — equip an item (e.g., equip a weapon to use)
813
+ - equip all - equip all wearable items in inventory
814
+ - unequip <item name> — remove an equipped item
815
+ - unlock <door name> — unlock a door (if you have the key or solution)
816
+ - lock <door name> — lock a door
817
+ - use <panel name> <the code> — enter a code you actually know into a keypad or panel.
818
+ Only a PANEL takes a code; you cannot talk at a mechanical lock
819
+ - pick — attempt to pick the lock on the puzzle in this room without knowing the answer (50/50, a failure sets off an alarm)
820
+ - hack — attempt to hack the terminal/system in this room without knowing the answer (50/50, a failure trips a countermeasure)
821
+ - cast <spell> [at <target>] — cast a spell you know. Requires being Awakened
822
+ (innate talent -- you'll be told if you are) OR carrying that spell's formula
823
+ item or a grimoire (a Focus item boosts your pool either way). Spells:
824
+ "manabolt" (combat damage resisted by body, not armor), "heal [on <ally>]" (heal
825
+ physical wounds -- your own by default, or an ally's in your room; healing a
826
+ wounded ally is a strong support move), "armor [on <ally>]" (sustained protection
827
+ on yourself or an ally; its bearer gets +soak at -2 dice to all else; cast at them
828
+ again to release). EVERY cast costs drain -- stun damage to YOU the caster; fill
829
+ your stun track and you're out cold. Never cast if you're mundane with no magic gear.
830
+ - cast — bare "cast" attempts to magically bypass the ward/barrier in this room
831
+ without knowing the answer (requires the same talent or gear; failing burns the
832
+ route for good and the backlash hurts you badly)
833
+ - search — search the room for hidden things
834
+ - look — look around the current room
835
+ - look at <target> - looks at an item, player, or direction
836
+ - store <item name> — store an item (in bank, safe, etc.)
837
+ - give <item name> to <target> — give an item to someone
838
+ - talk-to <target> — initiate conversation with another character
839
+ - call <target> [message] — call someone remotely over a commlink (works even if they're not in your room; requires having a commlink equipped, and the target having one too)
840
+ - end-call — hang up your current commlink call
841
+ - silent — toggle your commlink broadcast. While running silent, you can't place
842
+ calls and nobody can call YOU. Toggle again to go loud.
843
+ - read <target> - Reads an item of Category "Book"
844
+ - attack <target> — attack someone in your room. Resolved as opposed dice-pool combat
845
+ (your weapon and armor matter); an initiative roll decides who strikes first each
846
+ exchange (fast fighters can even land an extra strike), the target strikes back, and
847
+ it usually takes several exchanges to bring someone down. Only start a fight your
848
+ character would actually risk dying in. If your target flees the room, a failed
849
+ attack tells you exactly where they went and which direction to "go" -- CHASE them
850
+ with that instead of attacking the empty room again.
851
+ - kill <target> - alias for attack: real combat, NOT an instant kill.
852
+ - subdue <target> — take someone down ALIVE: stun damage, bare-handed, slower than
853
+ shooting; they retaliate lethally. Use when you want them breathing.
854
+ - brandish — draw your holstered weapon WITHOUT attacking. Everyone in the room sees
855
+ it: a threat display, pure intimidation. (Attacking auto-draws, so you never need
856
+ this to fight -- it's for making a point.)
857
+ - holster — put your drawn weapon away, visibly. A stand-down gesture: use it to
858
+ de-escalate, accept a surrender, or show good faith in a negotiation.
859
+ - reload — refill your equipped firearm (consumes an Ammunition item from your pack).
860
+ Firearms run dry: if your attack reports "dry", reload or switch to melee.
861
+ Fleeing someone you just fought gives them one free parting shot at your back
862
+ (and fleeing enemies give YOU one).
863
863
  `.trim();
864
864
  }
865
865
  set scene(scene) {
@@ -885,16 +885,16 @@ Available in-game commands (use with [COMMAND] prefix):
885
885
  return;
886
886
  if (!AI.isConfigured())
887
887
  return;
888
- const prompt = `
889
- You are a game narrator. Write a brief (2-3 sentence), visually evocative first-impression
890
- description of a character's appearance and demeanor, in a gritty cyberpunk tone.
891
-
892
- Scene context: ${sceneContext}
893
-
894
- Character name: ${this.name}
895
-
896
- Only describe what a stranger would immediately notice on first meeting them. Do not
897
- reveal hidden motives, secret plans, backstory, or intentions. Respond with ONLY the
888
+ const prompt = `
889
+ You are a game narrator. Write a brief (2-3 sentence), visually evocative first-impression
890
+ description of a character's appearance and demeanor, in a gritty cyberpunk tone.
891
+
892
+ Scene context: ${sceneContext}
893
+
894
+ Character name: ${this.name}
895
+
896
+ Only describe what a stranger would immediately notice on first meeting them. Do not
897
+ reveal hidden motives, secret plans, backstory, or intentions. Respond with ONLY the
898
898
  description text.`;
899
899
  try {
900
900
  const reply = await AI.ask(prompt);
@@ -1418,39 +1418,39 @@ description text.`;
1418
1418
  + deliveryTail
1419
1419
  : '';
1420
1420
  // Build the prompt context
1421
- const context = `
1422
- You are an NPC named ${this.name}.
1423
- ${this.buildPlaneSummary()}
1424
- ${objectiveSummary}
1425
- ${masterLine}
1426
- ${this.buildConditionSummary()}
1427
- ${reflectGeography}
1428
- ${exitsLine}
1429
- ${spotsLine}
1430
-
1431
- You just performed the action: "${commandString}"
1432
- With the result: "${result}"
1433
-
1434
- Based on this, what is the most logical next in-game command (from the following list)?
1435
- ${this._commandHelp}
1436
- - Only respond with: [COMMAND] <in-game command here>
1437
- - Do not respond on behalf of another player or NPC
1438
- - If there is nothing to do, respond with: wait
1439
- - Only respond with one [COMMAND]
1440
- - READ the result above and report honestly: if it says an action failed, was refused,
1441
- or found nothing, then it FAILED -- never speak or act as if it succeeded (a beaten
1442
- sentry once announced a door "open" after his unlock bounced; the runner walked into
1443
- a locked hatch).
1444
- - If you have already said your piece and are waiting on someone to answer, the logical next step is: wait
1445
- ${this._spokeThisStimulus ? '- You have ALREADY spoken since the last thing that happened. Do NOT say or talk-to again -- choose a non-speech action, or respond with: wait' : ''}
1446
- ${this._triedThisStimulus.length > 0 ? `- ALREADY TRIED since the last thing that happened -- do NOT repeat any of these, and do not retry a failed one with different wording:
1447
- ${this._triedThisStimulus.map(a => ` "${a.cmd}"${a.failed ? ' (FAILED)' : ''}`).join('\n')}
1448
- If everything sensible has been tried, the answer is: wait` : ''}
1449
-
1450
- This is what has already happened:
1451
- ${historySummary}
1452
-
1453
- ${worldEventsSummary}
1421
+ const context = `
1422
+ You are an NPC named ${this.name}.
1423
+ ${this.buildPlaneSummary()}
1424
+ ${objectiveSummary}
1425
+ ${masterLine}
1426
+ ${this.buildConditionSummary()}
1427
+ ${reflectGeography}
1428
+ ${exitsLine}
1429
+ ${spotsLine}
1430
+
1431
+ You just performed the action: "${commandString}"
1432
+ With the result: "${result}"
1433
+
1434
+ Based on this, what is the most logical next in-game command (from the following list)?
1435
+ ${this._commandHelp}
1436
+ - Only respond with: [COMMAND] <in-game command here>
1437
+ - Do not respond on behalf of another player or NPC
1438
+ - If there is nothing to do, respond with: wait
1439
+ - Only respond with one [COMMAND]
1440
+ - READ the result above and report honestly: if it says an action failed, was refused,
1441
+ or found nothing, then it FAILED -- never speak or act as if it succeeded (a beaten
1442
+ sentry once announced a door "open" after his unlock bounced; the runner walked into
1443
+ a locked hatch).
1444
+ - If you have already said your piece and are waiting on someone to answer, the logical next step is: wait
1445
+ ${this._spokeThisStimulus ? '- You have ALREADY spoken since the last thing that happened. Do NOT say or talk-to again -- choose a non-speech action, or respond with: wait' : ''}
1446
+ ${this._triedThisStimulus.length > 0 ? `- ALREADY TRIED since the last thing that happened -- do NOT repeat any of these, and do not retry a failed one with different wording:
1447
+ ${this._triedThisStimulus.map(a => ` "${a.cmd}"${a.failed ? ' (FAILED)' : ''}`).join('\n')}
1448
+ If everything sensible has been tried, the answer is: wait` : ''}
1449
+
1450
+ This is what has already happened:
1451
+ ${historySummary}
1452
+
1453
+ ${worldEventsSummary}
1454
1454
  `;
1455
1455
  // Send to the configured AI provider
1456
1456
  let reply;
@@ -1755,10 +1755,10 @@ ${worldEventsSummary}
1755
1755
  // the engine gave her no way to bring.
1756
1756
  const wares = visibleItems.filter(i => i && i.owner === this.name);
1757
1757
  const waresDesc = wares.length > 0
1758
- ? `YOUR SHOP STOCK, here on your own shelf/counter (yours to serve or sell):
1759
- ${wares.map(i => `- "${i.name}" (${priceOf(i)} nuyen)`).join('\n')}
1760
- When a customer orders or agrees to buy, SERVE it in the same response: [COMMAND] give <item name> to <customer name>
1761
- Serve EXACTLY the stock item whose name best matches what the customer asked for (they say "noodles", you have a "Noodle Bowl" -- that's the one). Substitute a different dish ONLY if the match is out of stock, and say so out loud when you do. The stock list above is the truth about what you have -- never claim a listed item is gone.
1758
+ ? `YOUR SHOP STOCK, here on your own shelf/counter (yours to serve or sell):
1759
+ ${wares.map(i => `- "${i.name}" (${priceOf(i)} nuyen)`).join('\n')}
1760
+ When a customer orders or agrees to buy, SERVE it in the same response: [COMMAND] give <item name> to <customer name>
1761
+ Serve EXACTLY the stock item whose name best matches what the customer asked for (they say "noodles", you have a "Noodle Bowl" -- that's the one). Substitute a different dish ONLY if the match is out of stock, and say so out loud when you do. The stock list above is the truth about what you have -- never claim a listed item is gone.
1762
1762
  The till settles automatically on handoff (they're charged street price, or what they can cover). Quote the price when they order. Never serve someone who hasn't asked.`
1763
1763
  : '';
1764
1764
  // SWAG OVER THE LINE (source.ts; the shop-stock lesson's remote
@@ -1771,8 +1771,8 @@ The till settles automatically on handoff (they're charged street price, or what
1771
1771
  const domains = contactEntry?.role && !this.allyOf ? ROLE_DOMAINS[contactEntry.role] : undefined;
1772
1772
  const trade = domains ? catalogGear().filter(i => domains.includes(i.category)) : [];
1773
1773
  const swagNote = trade.length > 0
1774
- ? `YOUR TRADE as the district's ${contactEntry.role} -- orderable through your network (NOT shelf stock in this room):
1775
- ${trade.map(i => `- "${i.name}" (${i.price} nuyen)`).join('\n')}
1774
+ ? `YOUR TRADE as the district's ${contactEntry.role} -- orderable through your network (NOT shelf stock in this room):
1775
+ ${trade.map(i => `- "${i.name}" (${i.price} nuyen)`).join('\n')}
1776
1776
  An ORDER is the only way these goods change hands -- never a dialogue sale, never a handshake over comms. When a customer wants one (in person or on a call), quote the LIST price and tell them in your own voice to put the order through -- the exact words they must say are: source <item name> from ${this.name}. The system then rolls your availability test, takes their cred up front (plus your sourcing cut), and delivers at their next homecoming. NEVER invent stock or prices beyond this list, and NEVER claim a sale is complete from conversation alone -- a sale without the order simply never happened. Special requests beyond the list exist, but the same order system rolls them.`
1777
1777
  : '';
1778
1778
  // THE ADAPTER, and it is the only thing here that knows about
@@ -1973,83 +1973,83 @@ An ORDER is the only way these goods change hands -- never a dialogue sale, neve
1973
1973
  // somewhere in the world for the finding.
1974
1974
  const gameRef = this._scene?.ownerGame;
1975
1975
  const clientNote = gameRef?.currentClient?.name === this.name
1976
- ? `
1977
- YOU ARE THE CLIENT on this job: you hired ${this._scene?.getPlayer?.()?.name ?? 'the runner'}'s team and you WANT THE JOB DONE.
1978
- Everything you know that helps them -- locations, names, who guards what, what the job is
1979
- worth -- you share FREELY the moment they ask. You never barter, extort, or withhold
1980
- job-relevant information from your own runners: every obstacle they hit is YOUR money
1981
- burning. What you do NOT have is the inside of the place: you are the money, not the
1982
- staff, so codes, passphrases, and lock combinations are exactly the thing you were hiring
1983
- THEM to solve -- say so plainly when they ask, and send them to find it rather than
1984
- handing them a number you'd be making up. If you genuinely don't know a thing, say so plainly and point at who might. You
1985
- front half the pay at the meet and settle the rest on delivery (the engine moves the money
1976
+ ? `
1977
+ YOU ARE THE CLIENT on this job: you hired ${this._scene?.getPlayer?.()?.name ?? 'the runner'}'s team and you WANT THE JOB DONE.
1978
+ Everything you know that helps them -- locations, names, who guards what, what the job is
1979
+ worth -- you share FREELY the moment they ask. You never barter, extort, or withhold
1980
+ job-relevant information from your own runners: every obstacle they hit is YOUR money
1981
+ burning. What you do NOT have is the inside of the place: you are the money, not the
1982
+ staff, so codes, passphrases, and lock combinations are exactly the thing you were hiring
1983
+ THEM to solve -- say so plainly when they ask, and send them to find it rather than
1984
+ handing them a number you'd be making up. If you genuinely don't know a thing, say so plainly and point at who might. You
1985
+ front half the pay at the meet and settle the rest on delivery (the engine moves the money
1986
1986
  -- never haggle it yourself unless they invoke a negotiation).`
1987
1987
  : '';
1988
1988
  // ---------- prompt ----------
1989
- const prompt = `
1990
- You are an NPC named ${this.name} in a gritty cyberpunk text adventure game.
1991
-
1992
- - Stay in character. Respond naturally based on your surroundings, personality, and the player’s message.
1993
- - Any exposition should be in 3rd person. Keep exposition to bare minimum.
1994
- - Do NOT repeat, rephrase, or re-ask anything you have already said (check the recent-activity history below). If you already asked a question and it hasn't been answered, wait for the answer -- do not ask it again in different words.
1995
- - Silence is a valid response: if this event doesn't genuinely need words from you, do not include a say command at all.
1996
- - Keep spoken lines SHORT -- one or two sentences. People don't monologue at strangers.
1997
- - When speaking, use the "say" command. Syntax is "[COMMAND] say <message>"
1998
- - At most ONE say line per response. Never follow a say with talk-to to the same person -- they already heard you; talk-to is only for a genuinely private aside.
1999
- - If you want to perform an action, include a separate line that starts with:
2000
- [COMMAND] <your in-game command here>
2001
- - Attempt to use [COMMAND] when appropriate for interacting with the environment. (e.g., "take <item>" when picking up)
2002
- - You should only provide one [COMMAND] at a time (one say line plus one action line is fine).
2003
- - NEVER promise a physical action in words only. If you say you'll hand something over,
2004
- serve food, fetch an item, or take something, the SAME response must include the matching
2005
- [COMMAND] line (e.g. "give <item> to <name>"). A promise without the command simply never
2006
- happens in the world -- the other person will be left waiting forever.
2007
- - Do not respond on behalf of another player or NPC
2008
- ${eph ? '' : `- If this event genuinely changes what you're trying to accomplish, include a separate line:
2009
- [OBJECTIVE] <your new one-sentence objective>
2010
- Only include this line if your objective has actually changed. Do not include it otherwise.
2011
-
2012
- Your objective is to drive the story line.`}
2013
- ${eph ? '' : story}
2014
- ${eph ? '' : firstContactNudge}
2015
-
2016
- ${eph ? '' : this._commandHelp}
2017
-
2018
- ${npcDescription}
2019
- ${conditionSummary}
2020
- ${magicSummary}${resonanceSummary}
2021
- ${eph ? '' : objectiveSummary}
2022
- ${dialogueSummary}
2023
- ${eph ? '' : payoutSummary}
2024
-
2025
- ${roomDesc}${spotBlock}${combatSpatialBlock}
2026
- ${formattedExitsStr}
2027
- ${roomInventoryDesc}
2028
- ${eph ? '' : waresDesc}
2029
- ${eph ? '' : swagNote}${eph ? '' : clientNote}${hostileBlock}${picketBlock}${barrierBlock}${credentialHonesty}${localKnowledge}${ephDenials}
2030
- ${eph ? '' : familiarity}
2031
- ${droneNote}
2032
- ${eph ? '' : companionNote}${tableNote}
2033
- ${geographySummary}
2034
- ${eph ? '' : castSummary}
2035
-
2036
- ${eph ? '' : lifestyleSummary}
2037
- ${npcInventoryDesc}
2038
-
2039
- ${eph ? '' : ownedRoomsDesc}
2040
- ${eph ? '' : ownedItemsDesc}
2041
-
2042
- ${eph ? '' : historySummary}
2043
-
2044
- ${worldEventsSummary}
2045
-
1989
+ const prompt = `
1990
+ You are an NPC named ${this.name} in a gritty cyberpunk text adventure game.
1991
+
1992
+ - Stay in character. Respond naturally based on your surroundings, personality, and the player’s message.
1993
+ - Any exposition should be in 3rd person. Keep exposition to bare minimum.
1994
+ - Do NOT repeat, rephrase, or re-ask anything you have already said (check the recent-activity history below). If you already asked a question and it hasn't been answered, wait for the answer -- do not ask it again in different words.
1995
+ - Silence is a valid response: if this event doesn't genuinely need words from you, do not include a say command at all.
1996
+ - Keep spoken lines SHORT -- one or two sentences. People don't monologue at strangers.
1997
+ - When speaking, use the "say" command. Syntax is "[COMMAND] say <message>"
1998
+ - At most ONE say line per response. Never follow a say with talk-to to the same person -- they already heard you; talk-to is only for a genuinely private aside.
1999
+ - If you want to perform an action, include a separate line that starts with:
2000
+ [COMMAND] <your in-game command here>
2001
+ - Attempt to use [COMMAND] when appropriate for interacting with the environment. (e.g., "take <item>" when picking up)
2002
+ - You should only provide one [COMMAND] at a time (one say line plus one action line is fine).
2003
+ - NEVER promise a physical action in words only. If you say you'll hand something over,
2004
+ serve food, fetch an item, or take something, the SAME response must include the matching
2005
+ [COMMAND] line (e.g. "give <item> to <name>"). A promise without the command simply never
2006
+ happens in the world -- the other person will be left waiting forever.
2007
+ - Do not respond on behalf of another player or NPC
2008
+ ${eph ? '' : `- If this event genuinely changes what you're trying to accomplish, include a separate line:
2009
+ [OBJECTIVE] <your new one-sentence objective>
2010
+ Only include this line if your objective has actually changed. Do not include it otherwise.
2011
+
2012
+ Your objective is to drive the story line.`}
2013
+ ${eph ? '' : story}
2014
+ ${eph ? '' : firstContactNudge}
2015
+
2016
+ ${eph ? '' : this._commandHelp}
2017
+
2018
+ ${npcDescription}
2019
+ ${conditionSummary}
2020
+ ${magicSummary}${resonanceSummary}
2021
+ ${eph ? '' : objectiveSummary}
2022
+ ${dialogueSummary}
2023
+ ${eph ? '' : payoutSummary}
2024
+
2025
+ ${roomDesc}${spotBlock}${combatSpatialBlock}
2026
+ ${formattedExitsStr}
2027
+ ${roomInventoryDesc}
2028
+ ${eph ? '' : waresDesc}
2029
+ ${eph ? '' : swagNote}${eph ? '' : clientNote}${hostileBlock}${picketBlock}${barrierBlock}${credentialHonesty}${localKnowledge}${ephDenials}
2030
+ ${eph ? '' : familiarity}
2031
+ ${droneNote}
2032
+ ${eph ? '' : companionNote}${tableNote}
2033
+ ${geographySummary}
2034
+ ${eph ? '' : castSummary}
2035
+
2036
+ ${eph ? '' : lifestyleSummary}
2037
+ ${npcInventoryDesc}
2038
+
2039
+ ${eph ? '' : ownedRoomsDesc}
2040
+ ${eph ? '' : ownedItemsDesc}
2041
+
2042
+ ${eph ? '' : historySummary}
2043
+
2044
+ ${worldEventsSummary}
2045
+
2046
2046
  ${actor.gender
2047
2047
  ? `${actor.name} is ${actor.gender === 'male' ? 'a man -- he/him' : 'a woman -- she/her'}. Use those pronouns for ${actor.name}; never guess others.`
2048
2048
  : actor === scenePlayer
2049
2049
  ? `${actor.name}'s gender is unstated -- refer to ${actor.name} with they/them, never guess.`
2050
- : ''}
2051
-
2052
- ${actor.name}: ${message}
2050
+ : ''}
2051
+
2052
+ ${actor.name}: ${message}
2053
2053
  `.trim();
2054
2054
  // ---------- AI call + parsing (defensive) ----------
2055
2055
  try {
@@ -261,7 +261,7 @@ export interface ICombatAttributes {
261
261
  aspect?: string;
262
262
  /**
263
263
  * The spells a magician/mystic adept CHOSE at creation (SR5 p.300, up to
264
- * Magic x 2). Keys into spells.ts's SPELL_CATALOG. ABSENT means "knows
264
+ * Magic x 2). Keys into the catalog's spell rows. ABSENT means "knows
265
265
  * every spell", the pre-selection behaviour -- so an existing save with
266
266
  * no spellbook keeps casting anything, and only a chargen that sends a
267
267
  * list is narrowed to it. An empty list would mean a magician who chose
@@ -270,7 +270,7 @@ export interface ICombatAttributes {
270
270
  knownSpells?: string[];
271
271
  /**
272
272
  * The adept powers CHOSEN at creation (SR5 p.308-310): key -> level, keys
273
- * into adept-powers.ts's ADEPT_POWER_CATALOG, total cost within
273
+ * into the catalog's adept-power rows, total cost within
274
274
  * effectivePowerPoints. ABSENT means the COMPRESSED model -- Power Points
275
275
  * grant floor(pp/2) on every meat-plane pool, the pre-selection behaviour
276
276
  * every existing adept keeps. Present means the powers themselves are the
@@ -862,7 +862,7 @@ export declare class Player extends AbstractPlayer {
862
862
  essence: number;
863
863
  baseMagic: number;
864
864
  baseResonance: number;
865
- /** Installed 'ware, by catalog key (see AUGMENTATIONS). */
865
+ /** Installed 'ware, by catalog key (kind 'augmentation'). */
866
866
  augmentations: Set<string>;
867
867
  /**
868
868
  * What GRADE each installed piece was cut at (see WARE_GRADES,
@@ -1030,7 +1030,7 @@ export declare class Player extends AbstractPlayer {
1030
1030
  * and only the chrome lane can answer it.
1031
1031
  */
1032
1032
  augBonus(kind: AugBonusKind): number;
1033
- /** Installed qualities, by catalog key (see QUALITIES). */
1033
+ /** Installed qualities, by catalog key (kind 'quality'). */
1034
1034
  qualities: Set<string>;
1035
1035
  /**
1036
1036
  * IS THIS SKILL OR ATTRIBUTE FORBIDDEN OUTRIGHT to this character?
@@ -1820,7 +1820,7 @@ export declare class Player extends AbstractPlayer {
1820
1820
  /** Static Veil: +2 to matrix defense while sustained. */
1821
1821
  get formDefenseBonus(): number;
1822
1822
  /** The Force each sustained spell was cast at (cast.ts records it) -- Focused Concentration reads it. */
1823
- sustainedForces: Map<"armor" | "reflexes" | "invisibility", number>;
1823
+ sustainedForces: Map<"armor" | "invisibility" | "reflexes", number>;
1824
1824
  noteSustainedForce(kind: 'armor' | 'invisibility' | 'reflexes', force: number): void;
1825
1825
  /** GREMLINS (p.81): the 1s a glitch needs, one fewer per rating, on external equipment -- the deck. */
1826
1826
  get deckGremlins(): number;
@@ -1,17 +1,13 @@
1
1
  import { getSoft, getProgram } from '../utilities/programs.js';
2
2
  import { GEAR_LANES, CHROME_LANES, QUALITY_LANES, ART_LANES, ADEPT_LANES, scaleOf } from '../utilities/effects.js';
3
- import { catalogRowFor } from '../utilities/catalog.js';
3
+ import { catalogRowFor, spellFor, augFor, adeptPowerFor, metamagicFor } from '../utilities/catalog.js';
4
4
  import { getQuality, resolveQualityKey } from '../qualities.js';
5
- import { ADEPT_POWERS } from '../adept-powers.js';
6
5
  import { skillsInGroup } from '../skill-groups.js';
7
- import { spellFor } from '../utilities/catalog.js';
8
- import { METAMAGICS_BY_KEY } from '../commands/initiate.js';
9
6
  import { isAspectKey } from '../aspects.js';
10
7
  import { hint } from '../utilities/hints.js';
11
8
  import { Category } from '../types/shared/item-enum.js';
12
9
  import { Logger } from '../utilities/logger.js';
13
10
  import { CALL_ICON, CALL_COLOR } from '../utilities/comm-style.js';
14
- import { getAug } from '../augmentations.js';
15
11
  // The Physical limit already lives here (subduing, p.195) -- imported
16
12
  // rather than re-derived so meat combat and the grapple cannot drift
17
13
  // into two different formulas for the same canon number.
@@ -1224,7 +1220,7 @@ export class Player extends AbstractPlayer {
1224
1220
  // `magic`/`resonance` above stay the EFFECTIVE values every pool reads.
1225
1221
  baseMagic = 0;
1226
1222
  baseResonance = 0;
1227
- /** Installed 'ware, by catalog key (see AUGMENTATIONS). */
1223
+ /** Installed 'ware, by catalog key (kind 'augmentation'). */
1228
1224
  augmentations = new Set();
1229
1225
  /**
1230
1226
  * What GRADE each installed piece was cut at (see WARE_GRADES,
@@ -1250,7 +1246,7 @@ export class Player extends AbstractPlayer {
1250
1246
  */
1251
1247
  implantWeapon() {
1252
1248
  for (const key of this.augmentations) {
1253
- const w = getAug(key)?.implantWeapon;
1249
+ const w = augFor(key)?.implantWeapon;
1254
1250
  if (!w)
1255
1251
  continue;
1256
1252
  // A shock hand out of charges is a hand (p.458).
@@ -1277,7 +1273,7 @@ export class Player extends AbstractPlayer {
1277
1273
  /** Back to full -- a rest, or the moment the chrome goes in. */
1278
1274
  refillImplantCharges() {
1279
1275
  for (const key of this.augmentations) {
1280
- const w = getAug(key)?.implantWeapon;
1276
+ const w = augFor(key)?.implantWeapon;
1281
1277
  if (w?.charges !== undefined) {
1282
1278
  this.implantCharges = w.charges;
1283
1279
  return;
@@ -1310,7 +1306,7 @@ export class Player extends AbstractPlayer {
1310
1306
  // A HOUSING TAKES THE DECK YOU BROUGHT (Chrome Flesh p.222). Nothing
1311
1307
  // is granted -- the book charges 5,000 PLUS the deck, so this moves
1312
1308
  // the one you own inside your skull and it stops being liftable.
1313
- if (getAug(aug.key)?.implantsCarriedDeck)
1309
+ if (augFor(aug.key)?.implantsCarriedDeck)
1314
1310
  this.getAnyCyberdeck()?.implantIntoBody();
1315
1311
  }
1316
1312
  // ================= THE EFFECTS LANE (one resolver) =================
@@ -1393,7 +1389,7 @@ export class Player extends AbstractPlayer {
1393
1389
  // here, once, so every reader sees the same surviving set -- rather
1394
1390
  // than in a getter, where only that getter would have been right.
1395
1391
  for (const key of this.chromeThatCounts()) {
1396
- const a = getAug(key);
1392
+ const a = augFor(key);
1397
1393
  if (a?.effects)
1398
1394
  take(a.effects, 'installed', 'installed', undefined, 'chrome', key);
1399
1395
  }
@@ -1406,14 +1402,14 @@ export class Player extends AbstractPlayer {
1406
1402
  for (const [key, level] of Object.entries(this.adeptPowers ?? {})) {
1407
1403
  if (level <= 0)
1408
1404
  continue;
1409
- const power = ADEPT_POWERS[key];
1405
+ const power = adeptPowerFor(key);
1410
1406
  if (power?.effects)
1411
1407
  take(power.effects, 'innate', 'innate', level, 'adept', key);
1412
1408
  }
1413
1409
  // ---- The INITIATE lane. A metamagic applies from the moment it is
1414
1410
  // learned, and 'grade' is what Centering multiplies by.
1415
1411
  for (const key of this.metamagics) {
1416
- const m = METAMAGICS_BY_KEY[key];
1412
+ const m = metamagicFor(key);
1417
1413
  if (m?.effects)
1418
1414
  take(m.effects, 'initiated', 'initiated', this.initiationGrade, 'initiate', key);
1419
1415
  }
@@ -1648,7 +1644,7 @@ export class Player extends AbstractPlayer {
1648
1644
  // (outfitArchetype). Every entry in the catalog has a real mechanical
1649
1645
  // hook; the ones that read as flat pool nudges all tap through
1650
1646
  // qualityBonus below, the same single-switch pattern as augBonus.
1651
- /** Installed qualities, by catalog key (see QUALITIES). */
1647
+ /** Installed qualities, by catalog key (kind 'quality'). */
1652
1648
  qualities = new Set();
1653
1649
  /**
1654
1650
  * IS THIS SKILL OR ATTRIBUTE FORBIDDEN OUTRIGHT to this character?
@@ -2938,7 +2934,7 @@ export class Player extends AbstractPlayer {
2938
2934
  // this same punch independently, and both read implantWeapon.
2939
2935
  const implant = this.implantWeapon();
2940
2936
  if (implant) {
2941
- const aug = [...this.augmentations].map(k => getAug(k)).find(a => a?.implantWeapon);
2937
+ const aug = [...this.augmentations].map(k => augFor(k)).find(a => a?.implantWeapon);
2942
2938
  return {
2943
2939
  name: aug?.name?.toLowerCase() ?? 'implanted blades',
2944
2940
  damage: implant.dv + (implant.dvAttribute === 'strength' ? this.strength : 0),