@maka/maka-cli 5.122.1 → 5.123.1

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 (366) 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 +14 -10
  20. package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js.map +1 -1
  21. package/bundle/typescript/src/commands/env/env.command.js +8 -8
  22. package/bundle/typescript/src/commands/env/set.sub.cmd.js +11 -11
  23. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.d.ts +15 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js +12 -0
  25. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js.map +1 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/archetypes.d.ts +10 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +40 -14
  28. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +33 -10
  30. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +155 -72
  31. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +15 -6
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +33 -33
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +2 -2
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js +5 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js.map +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +6 -6
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +4 -4
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/hop.js +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/hop.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.d.ts +20 -0
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +9 -0
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js +7 -3
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js.map +1 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +3 -3
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +1 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +3 -3
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -9
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +10 -10
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +7 -7
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +1 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -1
  69. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +24 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +95 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +443 -443
  73. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -6
  74. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +45 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/game.js +120 -9
  76. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/metatypes.d.ts +53 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js +86 -0
  79. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js.map +1 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +214 -208
  81. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +215 -18
  83. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +548 -117
  84. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  85. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +9 -9
  86. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +2 -1
  87. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +3 -2
  88. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  89. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +96 -4
  90. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +290 -11
  91. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
  92. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +556 -556
  93. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +1447 -1447
  94. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.d.ts +11 -1
  95. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js +13 -1
  96. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js.map +1 -1
  97. package/bundle/typescript/src/commands/game/sideQuest/skills.d.ts +17 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/skills.js +23 -0
  99. package/bundle/typescript/src/commands/game/sideQuest/skills.js.map +1 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/spells.d.ts +76 -3
  101. package/bundle/typescript/src/commands/game/sideQuest/spells.js +48 -21
  102. package/bundle/typescript/src/commands/game/sideQuest/spells.js.map +1 -1
  103. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +8 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +90 -82
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +277 -10
  106. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  107. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +121 -2
  108. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +342 -18
  109. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  110. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.d.ts +65 -2
  111. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +74 -7
  112. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
  113. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +1 -1
  114. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  115. package/bundle/typescript/src/commands/game/sideQuest/utilities/effects.d.ts +248 -0
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/effects.js +38 -0
  117. package/bundle/typescript/src/commands/game/sideQuest/utilities/effects.js.map +1 -0
  118. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +14 -14
  119. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js +1 -2
  120. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js.map +1 -1
  121. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js +1 -2
  122. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js.map +1 -1
  123. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +5 -0
  124. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  125. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +5 -1
  126. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  127. package/bundle/typescript/src/commands/game/sideQuest/utilities/pregen-worksheet.js +22 -12
  128. package/bundle/typescript/src/commands/game/sideQuest/utilities/pregen-worksheet.js.map +1 -1
  129. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +1 -2
  130. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  131. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +1 -0
  132. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +20 -0
  133. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
  134. package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +2 -2
  135. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +33 -2
  136. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  137. package/bundle/typescript/src/commands/generate.js +2 -2
  138. package/bundle/typescript/src/commands/lint.js +10 -10
  139. package/bundle/typescript/src/commands/login.js +19 -1
  140. package/bundle/typescript/src/commands/login.js.map +1 -1
  141. package/bundle/typescript/src/commands/logout.js +16 -1
  142. package/bundle/typescript/src/commands/logout.js.map +1 -1
  143. package/bundle/typescript/src/commands/maka.cmd.js +26 -26
  144. package/bundle/typescript/src/commands/murder.js +14 -14
  145. package/bundle/typescript/src/commands/proxy.js +13 -13
  146. package/bundle/typescript/src/commands/remote/reconfig.sub.cmd.js +6 -6
  147. package/bundle/typescript/src/commands/run/docker.sub.cmd.js +11 -11
  148. package/bundle/typescript/src/commands/run/run.command.js +24 -24
  149. package/bundle/typescript/src/commands/set/global.sub.cmd.js +8 -8
  150. package/bundle/typescript/src/commands/set/local.sub.cmd.js +2 -2
  151. package/bundle/typescript/src/commands/set/set.command.js +3 -3
  152. package/bundle/typescript/src/commands/testCmd/test.command.js +2 -2
  153. package/bundle/typescript/src/exec.js +0 -0
  154. package/bundle/typescript/src/generators/api.js +11 -11
  155. package/bundle/typescript/src/generators/collection.js +6 -6
  156. package/bundle/typescript/src/generators/hook.js +10 -10
  157. package/bundle/typescript/src/generators/kits/auth/auth.generator.js +2 -2
  158. package/bundle/typescript/src/generators/kits/auth/auth0-meteor.auth.gen.js +612 -612
  159. package/bundle/typescript/src/generators/kits/auth/basic-meteor.auth.gen.js +48 -48
  160. package/bundle/typescript/src/generators/kits/auth/provider.auth.gen.js +12 -12
  161. package/bundle/typescript/src/generators/kits/esri/esri.generator.js +3 -3
  162. package/bundle/typescript/src/generators/kits/esri/map.esri.gen.js +7 -7
  163. package/bundle/typescript/src/generators/kits/frames/frames.generator.js +16 -16
  164. package/bundle/typescript/src/generators/kits/mui/auth.mui.gen.js +2 -2
  165. package/bundle/typescript/src/generators/kits/mui/auth0.mui.gen.js +5 -5
  166. package/bundle/typescript/src/generators/kits/mui/frame.mui.gen.js +4 -4
  167. package/bundle/typescript/src/generators/kits/mui/mui.generator.js +22 -22
  168. package/bundle/typescript/src/generators/services/translation.js +5 -5
  169. package/bundle/typescript/src/templates/aws/cloudformation/create-ec2-instance.template +14 -14
  170. package/bundle/typescript/src/templates/meteor/api/api.js +20 -20
  171. package/bundle/typescript/src/templates/meteor/api/api.js.ts +20 -20
  172. package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js +50 -50
  173. package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js.ts +55 -55
  174. package/bundle/typescript/src/templates/meteor/api/graphql-api.js +63 -63
  175. package/bundle/typescript/src/templates/meteor/api/graphql-api.js.ts +69 -69
  176. package/bundle/typescript/src/templates/meteor/api/methods.js +39 -39
  177. package/bundle/typescript/src/templates/meteor/api/methods.js.ts +40 -40
  178. package/bundle/typescript/src/templates/meteor/api/register-api.js +3 -3
  179. package/bundle/typescript/src/templates/meteor/api/register-api.js.ts +3 -3
  180. package/bundle/typescript/src/templates/meteor/api/resolvers.js +9 -9
  181. package/bundle/typescript/src/templates/meteor/api/resolvers.js.ts +9 -9
  182. package/bundle/typescript/src/templates/meteor/api/typeDefs.js +6 -6
  183. package/bundle/typescript/src/templates/meteor/api/typeDefs.js.ts +6 -6
  184. package/bundle/typescript/src/templates/meteor/app/client/body.html +3 -3
  185. package/bundle/typescript/src/templates/meteor/app/client/head.html +12 -12
  186. package/bundle/typescript/src/templates/meteor/app/client/main.js +15 -15
  187. package/bundle/typescript/src/templates/meteor/app/client/main.js.jsx +15 -15
  188. package/bundle/typescript/src/templates/meteor/app/client/main.js.ts +17 -17
  189. package/bundle/typescript/src/templates/meteor/app/client/main.js.tsx +17 -17
  190. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js +20 -20
  191. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.jsx +107 -107
  192. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.ts +20 -20
  193. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.tsx +108 -108
  194. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js +39 -39
  195. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.jsx +33 -33
  196. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.ts +24 -24
  197. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.tsx +33 -33
  198. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js +9 -9
  199. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.jsx +9 -9
  200. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.ts +9 -9
  201. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.tsx +9 -9
  202. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js +1 -1
  203. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.jsx +20 -20
  204. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.ts +1 -1
  205. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.tsx +20 -20
  206. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.jsx +28 -28
  207. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.tsx +28 -28
  208. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js +1 -1
  209. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.jsx +95 -95
  210. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.tsx +98 -98
  211. package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js +24 -24
  212. package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js.ts +24 -24
  213. package/bundle/typescript/src/templates/meteor/app/lib/main.js +3 -3
  214. package/bundle/typescript/src/templates/meteor/app/lib/main.js.jsx +3 -3
  215. package/bundle/typescript/src/templates/meteor/app/lib/main.js.ts +3 -3
  216. package/bundle/typescript/src/templates/meteor/app/lib/main.js.tsx +3 -3
  217. package/bundle/typescript/src/templates/meteor/app/maka.d.ts +533 -533
  218. package/bundle/typescript/src/templates/meteor/app/meteor.d.ts +181 -181
  219. package/bundle/typescript/src/templates/meteor/app/public/manifest.json +27 -27
  220. package/bundle/typescript/src/templates/meteor/app/public/sw.js +30 -30
  221. package/bundle/typescript/src/templates/meteor/app/public/sw.js.jsx +30 -30
  222. package/bundle/typescript/src/templates/meteor/app/public/sw.js.ts +30 -30
  223. package/bundle/typescript/src/templates/meteor/app/public/sw.js.tsx +30 -30
  224. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js +179 -179
  225. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.jsx +179 -179
  226. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.ts +179 -179
  227. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.tsx +179 -179
  228. package/bundle/typescript/src/templates/meteor/app/server/main.js +13 -13
  229. package/bundle/typescript/src/templates/meteor/app/server/main.js.jsx +13 -13
  230. package/bundle/typescript/src/templates/meteor/app/server/main.js.ts +14 -14
  231. package/bundle/typescript/src/templates/meteor/app/server/main.js.tsx +14 -14
  232. package/bundle/typescript/src/templates/meteor/app/tsconfig.json +42 -42
  233. package/bundle/typescript/src/templates/meteor/collection/collection.js +51 -51
  234. package/bundle/typescript/src/templates/meteor/collection/collection.js.ts +55 -55
  235. package/bundle/typescript/src/templates/meteor/collection/tests.js +27 -27
  236. package/bundle/typescript/src/templates/meteor/collection/tests.js.ts +27 -27
  237. package/bundle/typescript/src/templates/meteor/config/deploy.sh.template +101 -101
  238. package/bundle/typescript/src/templates/meteor/config/docker-compose.yaml +17 -17
  239. package/bundle/typescript/src/templates/meteor/config/nginx.conf.template +31 -31
  240. package/bundle/typescript/src/templates/meteor/config/pm2.config.js +27 -27
  241. package/bundle/typescript/src/templates/meteor/config/process.env +5 -5
  242. package/bundle/typescript/src/templates/meteor/config/settings.json +11 -11
  243. package/bundle/typescript/src/templates/meteor/config/ssh.json +6 -6
  244. package/bundle/typescript/src/templates/meteor/dbc/config.js +70 -70
  245. package/bundle/typescript/src/templates/meteor/dbc/config.js.ts +70 -70
  246. package/bundle/typescript/src/templates/meteor/dbc/conn.js +37 -37
  247. package/bundle/typescript/src/templates/meteor/dbc/conn.js.ts +37 -37
  248. package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js +3 -3
  249. package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js.ts +3 -3
  250. package/bundle/typescript/src/templates/meteor/github/workflows/deploy.yaml +150 -150
  251. package/bundle/typescript/src/templates/meteor/method/method.js +48 -48
  252. package/bundle/typescript/src/templates/meteor/method/method.js.ts +48 -48
  253. package/bundle/typescript/src/templates/meteor/package/package.js +37 -37
  254. package/bundle/typescript/src/templates/meteor/package/package.js.jsx +37 -37
  255. package/bundle/typescript/src/templates/meteor/package/package.js.ts +36 -36
  256. package/bundle/typescript/src/templates/meteor/package/package.js.tsx +37 -37
  257. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js +5 -5
  258. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.jsx +5 -5
  259. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.ts +5 -5
  260. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.tsx +5 -5
  261. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js +5 -5
  262. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.jsx +5 -5
  263. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.ts +5 -5
  264. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.tsx +5 -5
  265. package/bundle/typescript/src/templates/meteor/project/.maka/config.json +29 -29
  266. package/bundle/typescript/src/templates/meteor/project/README.md +33 -33
  267. package/bundle/typescript/src/templates/meteor/project/build/README +4 -4
  268. package/bundle/typescript/src/templates/meteor/project/gitignore +10 -10
  269. package/bundle/typescript/src/templates/meteor/project/package.json +29 -29
  270. package/bundle/typescript/src/templates/meteor/publish/publish.js +7 -7
  271. package/bundle/typescript/src/templates/meteor/publish/publish.js.ts +7 -7
  272. package/bundle/typescript/src/templates/meteor/service/logger/logger.js +27 -27
  273. package/bundle/typescript/src/templates/meteor/service/logger/logger.js.ts +27 -27
  274. package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css +5 -5
  275. package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css.less +5 -5
  276. package/bundle/typescript/src/templates/meteor/template/template-tests.js +1 -1
  277. package/bundle/typescript/src/templates/meteor/template/template-tests.js.jsx +55 -55
  278. package/bundle/typescript/src/templates/meteor/template/template-tests.js.ts +1 -1
  279. package/bundle/typescript/src/templates/meteor/template/template-tests.js.tsx +55 -55
  280. package/bundle/typescript/src/templates/meteor/template/template.css +3 -3
  281. package/bundle/typescript/src/templates/meteor/template/template.css.less +3 -3
  282. package/bundle/typescript/src/templates/meteor/template/template.css.scss +3 -3
  283. package/bundle/typescript/src/templates/meteor/template/template.html +5 -5
  284. package/bundle/typescript/src/templates/meteor/template/template.js +20 -20
  285. package/bundle/typescript/src/templates/meteor/template/template.js.jsx +77 -77
  286. package/bundle/typescript/src/templates/meteor/template/template.js.ts +1 -1
  287. package/bundle/typescript/src/templates/meteor/template/template.js.tsx +89 -89
  288. package/bundle/typescript/src/templates/react/component/component.css +6 -6
  289. package/bundle/typescript/src/templates/react/component/component.css.less +6 -6
  290. package/bundle/typescript/src/templates/react/component/component.css.scss +3 -3
  291. package/bundle/typescript/src/templates/react/component/component.js.jsx +59 -59
  292. package/bundle/typescript/src/templates/react/component/component.js.tsx +65 -65
  293. package/bundle/typescript/src/templates/react/hook/hook.css +3 -3
  294. package/bundle/typescript/src/templates/react/hook/hook.css.scss +3 -3
  295. package/bundle/typescript/src/templates/react/hook/hook.js.jsx +19 -19
  296. package/bundle/typescript/src/templates/react/hook/hook.js.tsx +19 -19
  297. package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.jsx +306 -306
  298. package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.tsx +350 -350
  299. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.jsx +178 -178
  300. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.tsx +178 -178
  301. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.jsx +59 -59
  302. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.tsx +67 -67
  303. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.jsx +273 -273
  304. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.tsx +275 -275
  305. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.jsx +182 -182
  306. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.tsx +199 -199
  307. package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.jsx +138 -138
  308. package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.tsx +153 -153
  309. package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.jsx +29 -29
  310. package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.tsx +32 -32
  311. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.css +63 -63
  312. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.jsx +153 -153
  313. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.tsx +164 -164
  314. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.css +105 -105
  315. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.jsx +158 -158
  316. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.tsx +166 -166
  317. package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.jsx +34 -34
  318. package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.tsx +33 -33
  319. package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.jsx +53 -53
  320. package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.tsx +53 -53
  321. package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.jsx +25 -25
  322. package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.tsx +25 -25
  323. package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.jsx +41 -41
  324. package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.tsx +34 -34
  325. package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.jsx +33 -33
  326. package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.tsx +33 -33
  327. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.jsx +71 -71
  328. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.tsx +71 -71
  329. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.jsx +123 -123
  330. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.tsx +123 -123
  331. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.jsx +56 -56
  332. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.tsx +74 -74
  333. package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.jsx +43 -43
  334. package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.tsx +43 -43
  335. package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.jsx +121 -121
  336. package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.tsx +117 -117
  337. package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.jsx +41 -41
  338. package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.tsx +41 -41
  339. package/bundle/typescript/src/templates/react/route/route.js +8 -8
  340. package/bundle/typescript/src/templates/react/route/route.js.jsx +5 -5
  341. package/bundle/typescript/src/templates/react/route/route.js.ts +8 -8
  342. package/bundle/typescript/src/templates/react/route/route.js.tsx +5 -5
  343. package/bundle/typescript/src/templates/react/test/test.js +1 -1
  344. package/bundle/typescript/src/templates/react/test/test.js.jsx +40 -40
  345. package/bundle/typescript/src/templates/react/test/test.js.ts +1 -1
  346. package/bundle/typescript/src/templates/react/test/test.js.tsx +40 -40
  347. package/bundle/typescript/src/templates/service/docker/Dockerfile +54 -54
  348. package/bundle/typescript/src/templates/service/eslint/babel.config.js +16 -16
  349. package/bundle/typescript/src/templates/service/eslint/config.eslint.js +69 -69
  350. package/bundle/typescript/src/templates/service/i18n/i18n.js +33 -33
  351. package/bundle/typescript/src/templates/service/i18n/i18n.js.ts +33 -33
  352. package/bundle/typescript/src/templates/service/i18n/locales.js +3 -3
  353. package/bundle/typescript/src/templates/service/i18n/locales.js.ts +3 -3
  354. package/bundle/typescript/src/templates/service/openssl/openssl.conf +22 -22
  355. package/bundle/typescript/src/templates/service/test/jest/jest.config.js +24 -24
  356. package/bundle/typescript/src/templates/service/test/jest/jest.setup.js +7 -7
  357. package/bundle/typescript/src/tools/guarded-file/guarded-file.class.d.ts +59 -0
  358. package/bundle/typescript/src/tools/guarded-file/guarded-file.class.js +120 -0
  359. package/bundle/typescript/src/tools/guarded-file/guarded-file.class.js.map +1 -0
  360. package/bundle/typescript/src/tools/mpi/mpi.class.d.ts +16 -0
  361. package/bundle/typescript/src/tools/mpi/mpi.class.js +25 -7
  362. package/bundle/typescript/src/tools/mpi/mpi.class.js.map +1 -1
  363. package/bundle/typescript/src/tools/mpi/sdk-runtime.d.ts +1 -0
  364. package/bundle/typescript/src/tools/mpi/sdk-runtime.js +29 -0
  365. package/bundle/typescript/src/tools/mpi/sdk-runtime.js.map +1 -1
  366. package/package.json +120 -120
@@ -1,4 +1,4 @@
1
- import { SkillName } from './models/player.js';
1
+ import { type SkillName } from './skills.js';
2
2
  /**
3
3
  * SR5e SKILL GROUPS (core p.90) as chargen vocabulary.
4
4
  *
@@ -118,3 +118,13 @@ export declare const UNAVAILABLE_SKILL_GROUPS: {
118
118
  kept: string[];
119
119
  reason: string;
120
120
  }[];
121
+ /**
122
+ * The member skills of one group, by key -- empty for a name that is not
123
+ * a group.
124
+ *
125
+ * Incompetent (p.81) is taken per GROUP and bars every skill in it, so a
126
+ * pick naming `stealth` has to reach palming, sneaking and disguise. This
127
+ * is the one place that expansion happens; Player.isForbidden calls it
128
+ * rather than carrying its own copy of the table.
129
+ */
130
+ export declare function skillsInGroup(group: string): SkillName[];
@@ -1,4 +1,4 @@
1
- import { SKILL_NAMES } from './models/player.js';
1
+ import { SKILL_NAMES } from './skills.js';
2
2
  /**
3
3
  * The highest rating a group may be bought at during creation (p.88 Step
4
4
  * Five; p.131 names 6 "the maximum skill level for starting player
@@ -132,4 +132,16 @@ export const SKILL_GROUPS = DERIVED.exposed;
132
132
  * rather than inferring it.
133
133
  */
134
134
  export const UNAVAILABLE_SKILL_GROUPS = DERIVED.unavailable;
135
+ /**
136
+ * The member skills of one group, by key -- empty for a name that is not
137
+ * a group.
138
+ *
139
+ * Incompetent (p.81) is taken per GROUP and bars every skill in it, so a
140
+ * pick naming `stealth` has to reach palming, sneaking and disguise. This
141
+ * is the one place that expansion happens; Player.isForbidden calls it
142
+ * rather than carrying its own copy of the table.
143
+ */
144
+ export function skillsInGroup(group) {
145
+ return SKILL_GROUPS.find(g => g.key === group)?.skills ?? [];
146
+ }
135
147
  //# sourceMappingURL=skill-groups.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-groups.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/skill-groups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-groups.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/skill-groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * THE SKILL VOCABULARY, in a module with no imports of its own.
3
+ *
4
+ * It lived in models/player.ts until 2026-09-04, which was fine until
5
+ * Player needed to ask skill-groups.ts which skills a GROUP holds --
6
+ * Incompetent (p.81) bars a whole group. skill-groups.ts imports
7
+ * SKILL_NAMES to derive its table AT MODULE LOAD, so that import closed
8
+ * a runtime cycle and 232 suites stopped loading with "Cannot access
9
+ * SKILL_NAMES before initialization".
10
+ *
11
+ * Moving the vocabulary DOWN is the fix rather than deferring the
12
+ * table: both modules need these names and neither needs the other for
13
+ * them. models/player.ts re-exports both, so every existing importer is
14
+ * untouched.
15
+ */
16
+ export type SkillName = 'blades' | 'clubs' | 'unarmed' | 'gunnery' | 'astral-combat' | 'cybercombat' | 'sneaking' | 'perception' | 'palming' | 'escape-artist' | 'disguise' | 'hacking' | 'locksmith' | 'computer' | 'electronic-warfare' | 'hardware' | 'negotiation' | 'con' | 'intimidation' | 'etiquette' | 'leadership' | 'performance' | 'instruction' | 'first-aid' | 'medicine' | 'assensing' | 'spellcasting' | 'counterspelling' | 'piloting' | 'conjuring' | 'compiling' | 'decompiling' | 'registering' | 'software' | 'impersonation' | 'ritual-spellcasting' | 'gymnastics' | 'running' | 'swimming' | 'automatics' | 'pistols' | 'longarms' | 'banishing' | 'summoning' | 'binding' | 'cybertechnology' | 'alchemy' | 'disenchanting' | 'artificing' | 'aeronautics-mechanic' | 'industrial-mechanic' | 'automotive-mechanic' | 'nautical-mechanic' | 'navigation' | 'tracking' | 'survival' | 'archery' | 'free-fall' | 'heavy-weapons' | 'throwing-weapons' | 'exotic-melee' | 'exotic-ranged';
17
+ export declare const SKILL_NAMES: SkillName[];
@@ -0,0 +1,23 @@
1
+ export const SKILL_NAMES = [
2
+ 'blades', 'clubs', 'unarmed', 'archery', 'free-fall',
3
+ 'gunnery', 'astral-combat', 'cybercombat',
4
+ 'sneaking', 'perception',
5
+ 'palming', 'escape-artist', 'disguise',
6
+ 'hacking', 'locksmith', 'computer', 'electronic-warfare', 'hardware',
7
+ 'negotiation', 'con', 'intimidation', 'etiquette', 'leadership',
8
+ 'performance', 'instruction',
9
+ 'first-aid', 'medicine',
10
+ 'assensing', 'spellcasting', 'counterspelling',
11
+ 'piloting', 'conjuring', 'compiling', 'decompiling', 'registering', 'software',
12
+ // Stage 2 additions -- see the union above for why these twenty-three.
13
+ 'impersonation', 'ritual-spellcasting',
14
+ 'gymnastics', 'running', 'swimming',
15
+ 'automatics', 'pistols', 'longarms',
16
+ 'banishing', 'summoning', 'binding',
17
+ 'cybertechnology',
18
+ 'alchemy', 'disenchanting', 'artificing',
19
+ 'aeronautics-mechanic', 'industrial-mechanic', 'automotive-mechanic', 'nautical-mechanic',
20
+ 'navigation', 'tracking', 'survival',
21
+ 'heavy-weapons', 'throwing-weapons', 'exotic-melee', 'exotic-ranged',
22
+ ];
23
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/skills.ts"],"names":[],"mappings":"AAyGA,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW;IACpD,SAAS,EAAE,eAAe,EAAE,aAAa;IACzC,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,eAAe,EAAE,UAAU;IACtC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,oBAAoB,EAAE,UAAU;IACpE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY;IAC/D,aAAa,EAAE,aAAa;IAC5B,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,cAAc,EAAE,iBAAiB;IAC9C,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU;IAC9E,uEAAuE;IACvE,eAAe,EAAE,qBAAqB;IACtC,YAAY,EAAE,SAAS,EAAE,UAAU;IACnC,YAAY,EAAE,SAAS,EAAE,UAAU;IACnC,WAAW,EAAE,WAAW,EAAE,SAAS;IACnC,iBAAiB;IACjB,SAAS,EAAE,eAAe,EAAE,YAAY;IACxC,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mBAAmB;IACzF,YAAY,EAAE,UAAU,EAAE,UAAU;IACpC,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe;CACrE,CAAC"}
@@ -19,16 +19,47 @@
19
19
  * drainOffset) (p.281). The catalog carries the offset so the picker can
20
20
  * show the book's drain formula; the Force dial itself is chosen at cast.
21
21
  */
22
+ import type { ICatalogEffect } from './utilities/effects.js';
22
23
  export type SpellCategory = 'Combat' | 'Detection' | 'Health' | 'Illusion' | 'Manipulation';
23
24
  export interface ISpell {
24
25
  key: string;
25
26
  /** Display name, the book's. */
26
27
  name: string;
28
+ /**
29
+ * TYPE, RANGE AND DURATION -- the book's own three lines, which this
30
+ * engine did not store until 2026-09-04 and which are the reason spells
31
+ * were kept out of the catalog ("I don't see any spells, or qualities
32
+ * there. The catalog should cover ALL things that can be obtained in
33
+ * the game, backed by canon" -- user, 2026-09-04).
34
+ *
35
+ * Every value below was read off the spell's own stat block, verified
36
+ * against the RAG where it would answer and against the rulebook PDF
37
+ * where it would not. None is inferred from a sibling: Acid Stream,
38
+ * Flamethrower, Knockout, Shatter and Clout all had to come from the
39
+ * page, because the retrieval kept describing them through whichever
40
+ * spell they were printed beside.
41
+ *
42
+ * MANA spells affect the mind and are resisted with Willpower; PHYSICAL
43
+ * ones affect the body. 'LOS(A)' is line-of-sight AREA, 'touch' means
44
+ * the cast walks you onto their spot first. Duration 'I'nstantaneous,
45
+ * 'S'ustained (it bills you until you drop it), 'P'ermanent.
46
+ */
47
+ type: 'mana' | 'physical';
48
+ range: 'LOS' | 'LOS(A)' | 'touch';
49
+ duration: 'I' | 'S' | 'P';
27
50
  category: SpellCategory;
28
51
  /**
29
52
  * RAW drain formula offset: drain = max(2, Force + offset). Tuned so the
30
- * DEFAULT Force (the caster's Magic) reproduces the pre-Force numbers; a
31
- * couple are a point softer than the book's letter and say so in cast.ts.
53
+ * DEFAULT Force (the caster's Magic) reproduces the pre-Force numbers.
54
+ *
55
+ * SOFTER THAN THE BOOK, AND BY MORE THAN THIS USED TO CLAIM. It said "a
56
+ * couple are a point softer"; measured against the printed Drain values
57
+ * while cataloguing the spells (2026-09-04) it is five of them, by two
58
+ * or three points each: Increase Reflexes (book F, here F-3), Armor
59
+ * (F-2 / F-4), Physical Barrier (F-1 / F-3), Invisibility (F-2 / F-4)
60
+ * and Fireball (F-1 / F-2). The tuning is a deliberate house choice and
61
+ * is left alone here -- but a comment that undercounts its own
62
+ * deviations is worse than no comment, so this one now names them.
32
63
  */
33
64
  drainOffset: number;
34
65
  /**
@@ -39,11 +70,53 @@ export interface ISpell {
39
70
  soak?: 'willpower' | 'body' | 'armor';
40
71
  /** Damage lands on the STUN track. */
41
72
  stun?: boolean;
42
- /** AREA spell: resolves against the named target, then splashes the room. */
73
+ /**
74
+ * AREA spell: resolves against the named target, then splashes the room.
75
+ *
76
+ * NOT simply `range === 'LOS(A)'`, which is why both fields exist. This
77
+ * one is a DAMAGE mechanic -- who else in the room takes the hit -- and
78
+ * the two barrier spells are printed at LOS (A) while splashing nobody:
79
+ * their area is the wall they raise, not a blast. So a spell may be
80
+ * area-ranged without this flag, but never the reverse.
81
+ */
43
82
  area?: boolean;
44
83
  /** TOUCH range: the cast walks you onto their spot first. */
45
84
  touch?: boolean;
46
85
  page: string;
86
+ /**
87
+ * WHICH ROUTINE CASTS IT.
88
+ *
89
+ * commands/cast.ts dispatched on a hand-written switch listing all
90
+ * twenty-one keys by name, so a spell added to this file did nothing
91
+ * at all until somebody remembered to edit that switch too -- data at
92
+ * one end, a hand-written consumer at the other, which is the shape
93
+ * this codebase has spent the week removing.
94
+ *
95
+ * Naming the routine here makes a new Combat spell PURE DATA: fifteen
96
+ * of them already share one implementation, and the sixteenth needs
97
+ * no code. The other four routines are genuinely different acts --
98
+ * mending someone, hardening them, holding an effect up, raising a
99
+ * wall -- and each is named rather than guessed at from the category,
100
+ * because Health holds both Heal and Increase Reflexes and they are
101
+ * not cast the same way.
102
+ */
103
+ cast: 'combat' | 'heal' | 'armor' | 'sustained-utility' | 'barrier';
104
+ /**
105
+ * WHAT IT DOES TO ITS TARGET WHILE SUSTAINED, in the shared effects
106
+ * vocabulary. `when: 'sustained'` is the state it applies in, and
107
+ * `scaleBy: 'hits'` multiplies by the hits the cast landed -- the
108
+ * Armor spell grants a point of soak per hit, so the number is not
109
+ * in the row.
110
+ *
111
+ * ONLY FOR SPELLS WHOSE EFFECT IS A MODIFIER ON SOMEBODY. The two
112
+ * barrier spells raise a wall in a room: that is world state, read
113
+ * by models/scene.ts, and the lane could not carry it without
114
+ * pretending a wall is a dice pool.
115
+ *
116
+ * Every Combat spell is Instantaneous and carries none of this --
117
+ * its damage is resolved at cast time by commands/cast.ts.
118
+ */
119
+ effects?: ICatalogEffect[];
47
120
  }
48
121
  /**
49
122
  * THE CATALOG -- every spell the engine casts, categorised for the picker.
@@ -27,33 +27,60 @@
27
27
  */
28
28
  export const SPELL_CATALOG = [
29
29
  // ---- Combat: DIRECT (soak with the single named attribute, no armor) --
30
- { key: 'manabolt', name: 'Manabolt', category: 'Combat', drainOffset: -3, soak: 'willpower', page: 'p.284' },
31
- { key: 'stunbolt', name: 'Stunbolt', category: 'Combat', drainOffset: -3, soak: 'willpower', stun: true, page: 'p.284' },
32
- { key: 'powerbolt', name: 'Powerbolt', category: 'Combat', drainOffset: -3, soak: 'body', page: 'p.284' },
30
+ { key: 'manabolt', cast: 'combat', name: 'Manabolt', category: 'Combat', type: 'mana', range: 'LOS', duration: 'I', drainOffset: -3, soak: 'willpower', page: 'p.284' },
31
+ { key: 'stunbolt', cast: 'combat', name: 'Stunbolt', category: 'Combat', type: 'mana', range: 'LOS', duration: 'I', drainOffset: -3, soak: 'willpower', stun: true, page: 'p.284' },
32
+ { key: 'powerbolt', cast: 'combat', name: 'Powerbolt', category: 'Combat', type: 'physical', range: 'LOS', duration: 'I', drainOffset: -3, soak: 'body', page: 'p.284' },
33
33
  // ---- Combat: INDIRECT elemental (thrown like a gun, full soak minus AP) --
34
- { key: 'fireball', name: 'Fireball', category: 'Combat', drainOffset: -2, soak: 'armor', page: 'p.284' },
35
- { key: 'lightning-bolt', name: 'Lightning Bolt', category: 'Combat', drainOffset: -3, soak: 'armor', page: 'p.284' },
36
- { key: 'acid-stream', name: 'Acid Stream', category: 'Combat', drainOffset: -3, soak: 'armor', page: 'p.284' },
37
- { key: 'flamethrower', name: 'Flamethrower', category: 'Combat', drainOffset: -3, soak: 'armor', page: 'p.284' },
38
- { key: 'clout', name: 'Clout', category: 'Combat', drainOffset: -3, soak: 'armor', stun: true, page: 'p.284' },
34
+ { key: 'fireball', cast: 'combat', name: 'Fireball', category: 'Combat', type: 'physical', range: 'LOS(A)', duration: 'I', drainOffset: -2, soak: 'armor', area: true, page: 'p.284' },
35
+ { key: 'lightning-bolt', cast: 'combat', name: 'Lightning Bolt', category: 'Combat', type: 'physical', range: 'LOS', duration: 'I', drainOffset: -3, soak: 'armor', page: 'p.284' },
36
+ { key: 'acid-stream', cast: 'combat', name: 'Acid Stream', category: 'Combat', type: 'physical', range: 'LOS', duration: 'I', drainOffset: -3, soak: 'armor', page: 'p.284' },
37
+ // THE THREE ADDED 2026-09-04, and the point of them is that they are
38
+ // DATA ONLY -- no cast.ts edit, because the row now names its own
39
+ // routine. Each stat line is RAG-checked against p.283-284.
40
+ //
41
+ // Toxic Wave is Acid Stream's area twin (F-1 against F-3: an area
42
+ // version costs two more Drain, which is the pattern across the
43
+ // whole family -- Fireball/Flamethrower, Manaball/Manabolt).
44
+ { key: 'toxic-wave', cast: 'combat', name: 'Toxic Wave', category: 'Combat', type: 'physical', range: 'LOS(A)', duration: 'I', drainOffset: -1, soak: 'armor', area: true, page: 'p.284' },
45
+ { key: 'flamethrower', cast: 'combat', name: 'Flamethrower', category: 'Combat', type: 'physical', range: 'LOS', duration: 'I', drainOffset: -3, soak: 'armor', page: 'p.284' },
46
+ { key: 'clout', cast: 'combat', name: 'Clout', category: 'Combat', type: 'physical', range: 'LOS', duration: 'I', drainOffset: -3, soak: 'armor', stun: true, page: 'p.284' },
39
47
  // ---- Combat: TOUCH (the cheapest drain, paid for by reaching them) ----
40
- { key: 'death-touch', name: 'Death Touch', category: 'Combat', drainOffset: -6, soak: 'willpower', touch: true, page: 'p.284' },
41
- { key: 'knockout', name: 'Knockout', category: 'Combat', drainOffset: -6, soak: 'willpower', stun: true, touch: true, page: 'p.284' },
42
- { key: 'shatter', name: 'Shatter', category: 'Combat', drainOffset: -6, soak: 'body', touch: true, page: 'p.284' },
48
+ // Clout has both a touch version and an area one, and neither was
49
+ // here. Punch F-6 is the touch discount the direct spells show too
50
+ // (Death Touch F-6 against Manabolt F-3); Blast F-0 is the area
51
+ // premium on Clout F-3.
52
+ { key: 'punch', cast: 'combat', name: 'Punch', category: 'Combat', type: 'physical', range: 'touch', duration: 'I', drainOffset: -6, soak: 'armor', stun: true, touch: true, page: 'p.284' },
53
+ { key: 'blast', cast: 'combat', name: 'Blast', category: 'Combat', type: 'physical', range: 'LOS(A)', duration: 'I', drainOffset: 0, soak: 'armor', stun: true, area: true, page: 'p.284' },
54
+ { key: 'death-touch', cast: 'combat', name: 'Death Touch', category: 'Combat', type: 'mana', range: 'touch', duration: 'I', drainOffset: -6, soak: 'willpower', touch: true, page: 'p.284' },
55
+ { key: 'knockout', cast: 'combat', name: 'Knockout', category: 'Combat', type: 'mana', range: 'touch', duration: 'I', drainOffset: -6, soak: 'willpower', stun: true, touch: true, page: 'p.284' },
56
+ { key: 'shatter', cast: 'combat', name: 'Shatter', category: 'Combat', type: 'physical', range: 'touch', duration: 'I', drainOffset: -6, soak: 'body', touch: true, page: 'p.284' },
43
57
  // ---- Combat: AREA (the named target takes it, the room eats the blast) -
44
- { key: 'manaball', name: 'Manaball', category: 'Combat', drainOffset: 0, soak: 'willpower', area: true, page: 'p.284' },
45
- { key: 'stunball', name: 'Stunball', category: 'Combat', drainOffset: 0, soak: 'willpower', stun: true, area: true, page: 'p.284' },
46
- { key: 'powerball', name: 'Powerball', category: 'Combat', drainOffset: 0, soak: 'body', area: true, page: 'p.284' },
47
- { key: 'ball-lightning', name: 'Ball Lightning', category: 'Combat', drainOffset: -1, soak: 'armor', area: true, page: 'p.284' },
58
+ { key: 'manaball', cast: 'combat', name: 'Manaball', category: 'Combat', type: 'mana', range: 'LOS(A)', duration: 'I', drainOffset: 0, soak: 'willpower', area: true, page: 'p.284' },
59
+ { key: 'stunball', cast: 'combat', name: 'Stunball', category: 'Combat', type: 'mana', range: 'LOS(A)', duration: 'I', drainOffset: 0, soak: 'willpower', stun: true, area: true, page: 'p.284' },
60
+ { key: 'powerball', cast: 'combat', name: 'Powerball', category: 'Combat', type: 'physical', range: 'LOS(A)', duration: 'I', drainOffset: 0, soak: 'body', area: true, page: 'p.284' },
61
+ { key: 'ball-lightning', cast: 'combat', name: 'Ball Lightning', category: 'Combat', type: 'physical', range: 'LOS(A)', duration: 'I', drainOffset: -1, soak: 'armor', area: true, page: 'p.284' },
48
62
  // ---- Health --------------------------------------------------------
49
- { key: 'heal', name: 'Heal', category: 'Health', drainOffset: -4, page: 'p.287' },
50
- { key: 'reflexes', name: 'Increase Reflexes', category: 'Health', drainOffset: -3, page: 'p.287' },
63
+ { key: 'heal', cast: 'heal', name: 'Heal', category: 'Health', type: 'mana', range: 'touch', duration: 'P', drainOffset: -4, touch: true, page: 'p.287' },
64
+ {
65
+ // separate `initiative` arm: `bonus('initiative')` is the DICE pool
66
+ // chrome and Improved Reflexes add to, and this spell moves the
67
+ // number you roll against instead. One word, two things.
68
+ //
69
+ // The flat 2 is the standing stand-in the engine already used:
70
+ // cast.ts stores no hit count for this spell, so the canon grant
71
+ // (+1 Initiative per hit, a die per two) cannot be computed from
72
+ // what is saved. Carried across unchanged rather than invented.
73
+ key: 'reflexes', cast: 'sustained-utility', name: 'Increase Reflexes', category: 'Health', type: 'physical', range: 'touch', duration: 'S', drainOffset: -3, touch: true,
74
+ effects: [{ type: 'initiative', category: 'pools', property: 'score', value: 2, when: 'sustained' }], page: 'p.287'
75
+ },
51
76
  // ---- Illusion ------------------------------------------------------
52
- { key: 'invisibility', name: 'Invisibility', category: 'Illusion', drainOffset: -4, page: 'p.291' },
77
+ { key: 'invisibility', cast: 'sustained-utility', name: 'Invisibility', category: 'Illusion', type: 'mana', range: 'LOS', duration: 'S', drainOffset: -4,
78
+ effects: [{ type: 'dice', category: 'pools', property: 'sneak', value: 3, when: 'sustained' }], page: 'p.291' },
53
79
  // ---- Manipulation --------------------------------------------------
54
- { key: 'armor', name: 'Armor', category: 'Manipulation', drainOffset: -4, page: 'p.293' },
55
- { key: 'barrier', name: 'Physical Barrier', category: 'Manipulation', drainOffset: -3, page: 'p.294' },
56
- { key: 'manabarrier', name: 'Mana Barrier', category: 'Manipulation', drainOffset: -2, page: 'p.294' },
80
+ { key: 'armor', cast: 'armor', name: 'Armor', category: 'Manipulation', type: 'physical', range: 'LOS', duration: 'S', drainOffset: -4,
81
+ effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 1, scaleBy: 'hits', when: 'sustained' }], page: 'p.293' },
82
+ { key: 'barrier', cast: 'barrier', name: 'Physical Barrier', category: 'Manipulation', type: 'physical', range: 'LOS(A)', duration: 'S', drainOffset: -3, page: 'p.294' },
83
+ { key: 'manabarrier', cast: 'barrier', name: 'Mana Barrier', category: 'Manipulation', type: 'mana', range: 'LOS(A)', duration: 'S', drainOffset: -2, page: 'p.294' },
57
84
  ];
58
85
  /** Keyed lookup -- cast.ts's mechanics source (replaces its local record). */
59
86
  export const SPELLS = Object.fromEntries(SPELL_CATALOG.map((s) => [s.key, s]));
@@ -1 +1 @@
1
- {"version":3,"file":"spells.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/spells.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spells.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/spells.ts"],"names":[],"mappings":"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"}
@@ -163,6 +163,14 @@ export interface ISavedPlayer {
163
163
  qualities: string[];
164
164
  /** Rating per rated quality key (qualities.ts maxRating); absent = 1. Contract 2026-09-02. */
165
165
  qualityRatings?: [string, number][];
166
+ /**
167
+ * The pick each choosing quality was given (IQualityChoice) -- the
168
+ * skill Aptitude names, the attribute Exceptional Attribute names.
169
+ * Absent on every save written before 2026-09-04, and absent is
170
+ * correct for them: those characters were never asked, so their
171
+ * quality lifts no ceiling until they answer.
172
+ */
173
+ qualityChoices?: [string, string][];
166
174
  /** Which fake SIN the runner chose to present (Player.activeSin).
167
175
  * Absent = no choice made; bestFakeSin falls back to best rating. */
168
176
  activeSin?: string;
@@ -20,10 +20,11 @@
20
20
  * gear -- these strings are what the player reads, and what an NPC's
21
21
  * swag briefing quotes.
22
22
  */
23
- import type { SkillName } from '../models/player.js';
24
- import type { AugBonusKind } from '../augmentations.js';
25
- export declare const CATALOG_VERSION = 13;
26
- export type CatalogKind = 'gear' | 'quality' | 'spell' | 'augmentation' | 'metatype';
23
+ import type { IQuality } from '../qualities.js';
24
+ import type { ICatalogChoice, ICatalogRestrictions } from './effects.js';
25
+ import type { ICatalogEffect } from './effects.js';
26
+ export declare const CATALOG_VERSION = 14;
27
+ export type CatalogKind = 'gear' | 'quality' | 'spell' | 'augmentation' | 'metatype' | 'adept-power' | 'metamagic';
27
28
  /** The skill a weapon is fired or swung with. The last four have no engine
28
29
  * skill yet (SkillName); the engine falls back per models/player.ts. */
29
30
  export type WeaponSkill = 'pistols' | 'automatics' | 'longarms' | 'archery' | 'blades' | 'clubs' | 'unarmed' | 'heavy-weapons' | 'throwing-weapons' | 'exotic-melee' | 'exotic-ranged';
@@ -136,80 +137,7 @@ export interface ICatalogMod {
136
137
  /** Weapon classes it refuses: a silencer fits no revolver or shotgun (p.432). */
137
138
  excludes?: ('shotgun' | 'revolver')[];
138
139
  }
139
- export type EffectPool = AugBonusKind | 'pan-defense' | 'matrix-soak' | 'biofeedback' | 'toxin' | 'climbing';
140
- export type EffectLimit = 'physical' | 'mental' | 'social' | 'accuracy';
141
- export type EffectAttribute = 'body' | 'agility' | 'reaction' | 'strength' | 'willpower' | 'logic' | 'intuition' | 'charisma' | 'edge' | 'magic' | 'resonance' | 'reach' | 'armor-bonus';
142
- export type EffectMatrixAttribute = 'attack' | 'sleaze' | 'dataProcessing' | 'firewall' | 'damage';
143
- /** A capability is a flag the engine asks for by key (Player.hasCapability). */
144
- export type EffectCapability = 'dni' | 'smartlink' | 'smartgun' | 'low-light' | 'thermographic' | 'no-fog' | 'silenced' | 'full-body' | 'autopicker' | 'maglock-opposed';
145
- /**
146
- * A modifier the row grants while it applies. `value` is a NUMBER, never a
147
- * string: every reader adds it, and a string would need parsing at each
148
- * one and would drift in the web's seed. `scaleBy` multiplies it by the
149
- * row's `ratingValue` (rating), the cast Force (force) or the hits of a
150
- * sustained spell (hits). `when` defaults by kind: a wearable's effects
151
- * apply worn, a weapon's held, a program's running, a data soft's stored,
152
- * a mod's fitted, an augmentation's installed, a quality's held.
153
- */
154
- export type ICatalogEffect = {
155
- type: 'dice';
156
- category: 'skills';
157
- property: SkillName;
158
- value: number;
159
- scaleBy?: EffectScale;
160
- when?: EffectWhen;
161
- only?: string;
162
- } | {
163
- type: 'dice';
164
- category: 'pools';
165
- property: EffectPool;
166
- value: number;
167
- scaleBy?: EffectScale;
168
- when?: EffectWhen;
169
- only?: string;
170
- } | {
171
- type: 'limit';
172
- category: 'limits';
173
- property: EffectLimit;
174
- value: number;
175
- scaleBy?: EffectScale;
176
- when?: EffectWhen;
177
- only?: string;
178
- } | {
179
- type: 'attribute';
180
- category: 'attributes';
181
- property: EffectAttribute;
182
- value: number;
183
- scaleBy?: EffectScale;
184
- when?: EffectWhen;
185
- only?: string;
186
- } | {
187
- type: 'attribute';
188
- category: 'matrix';
189
- property: EffectMatrixAttribute;
190
- value: number;
191
- scaleBy?: EffectScale;
192
- when?: EffectWhen;
193
- only?: string;
194
- } | {
195
- type: 'initiative';
196
- category: 'pools';
197
- property: 'dice' | 'score';
198
- value: number;
199
- scaleBy?: EffectScale;
200
- when?: EffectWhen;
201
- only?: string;
202
- } | {
203
- type: 'flag';
204
- category: 'capability';
205
- property: EffectCapability;
206
- value: number;
207
- scaleBy?: EffectScale;
208
- when?: EffectWhen;
209
- only?: string;
210
- };
211
- export type EffectScale = 'rating' | 'force' | 'hits';
212
- export type EffectWhen = 'worn' | 'held' | 'carried' | 'running' | 'stored' | 'fitted' | 'installed' | 'held-quality' | 'sustained';
140
+ export type { EffectPool, EffectLimit, EffectAttribute, EffectMatrixAttribute, EffectCapability, ICatalogEffect, EffectScale, EffectWhen, } from './effects.js';
213
141
  /** Every kind shares this. */
214
142
  export interface ICatalogBase {
215
143
  /** Absent = 'gear'. */
@@ -222,6 +150,34 @@ export interface ICatalogBase {
222
150
  page?: string;
223
151
  approx?: boolean;
224
152
  effects?: ICatalogEffect[];
153
+ /**
154
+ * THE SPELL A FORMULA TEACHES, by spells.ts key.
155
+ *
156
+ * A spell formula is written for ONE spell (p.461, p.299: "the spell
157
+ * you want"), and its PRICE is set by that spell's category. The
158
+ * five rows here used to be the categories themselves -- "Combat
159
+ * Spell Formula" -- and Player.knowsSpell matched them by looking
160
+ * for the spell's name inside the item's name. No category name
161
+ * ever contains a spell name, so the match could never fire: every
162
+ * one of them was 500 to 2,000 nuyen for a scroll that taught
163
+ * nothing.
164
+ */
165
+ teaches?: string;
166
+ /**
167
+ * A pick this row cannot work without (ICatalogChoice). ON THE BASE,
168
+ * so a quality, an augmentation, a spell or an adept power all declare
169
+ * one the same way -- a Hardwire naming a skill is the same question
170
+ * Aptitude asks, and asking it twice in two shapes is how the picker
171
+ * ends up rebuilt per kind.
172
+ */
173
+ choice?: ICatalogChoice;
174
+ /**
175
+ * What this row refuses to be held with (ICatalogRestrictions), in the
176
+ * same one shape for every kind. Assembled from each source's own
177
+ * per-kind fields, so one enforcement pass covers all 69 rather than
178
+ * one hand-written gate covering one.
179
+ */
180
+ restrictions?: ICatalogRestrictions;
225
181
  }
226
182
  export interface ICatalogItem extends ICatalogBase {
227
183
  kind?: 'gear';
@@ -266,11 +222,41 @@ export interface ICatalogQuality extends ICatalogBase {
266
222
  requires?: 'awakened' | 'mundane' | 'caster-or-technomancer';
267
223
  requiresQuality?: string;
268
224
  requiresMetatype?: Metatype[];
225
+ /**
226
+ * THE FOUR FIELDS qualityRows() writes and this interface did not
227
+ * declare (found by maka-cli-com-c3 reading the commit, 2026-09-04).
228
+ *
229
+ * They were invisible to the compiler because the object literal
230
+ * carrying them contains conditional spreads, and a literal with a
231
+ * spread is no longer FRESH -- excess-property checking does not
232
+ * apply to it. So the row shipped four fields the published .d.ts
233
+ * denied existed, and the web's mirror would have needed a cast to
234
+ * read `row.quality.choice` -- the sort of cast that later gets
235
+ * tidied away by someone who trusts the type.
236
+ *
237
+ * DERIVED FROM IQuality, not retyped. `family`'s union and the shape
238
+ * of a choice live in qualities.ts, and indexing them here means the
239
+ * catalog cannot fall behind the source the way it just did. It also
240
+ * answers the question c3 asked -- "tell me if the names or the
241
+ * family union move" -- with "they cannot, if you index them too".
242
+ */
243
+ family: IQuality['family'];
244
+ inert?: string;
245
+ choice?: ICatalogChoice;
246
+ excludesQuality?: string;
269
247
  };
270
248
  }
271
249
  export interface ICatalogSpell extends ICatalogBase {
272
250
  kind: 'spell';
273
251
  spell: {
252
+ /**
253
+ * WHICH ROUTINE CASTS IT. The one field a row could not supply,
254
+ * and so the one thing stopping a spell from being sourced from
255
+ * the catalog rather than compiled in -- which is where the
256
+ * rules are headed (mjmcee, 2026-09-04: "the engine rule comes
257
+ * from the catalog. We shouldn't be hard coding the rules").
258
+ */
259
+ cast: 'combat' | 'heal' | 'armor' | 'sustained-utility' | 'barrier';
274
260
  category: 'Combat' | 'Detection' | 'Health' | 'Illusion' | 'Manipulation';
275
261
  type: 'mana' | 'physical';
276
262
  range: 'LOS' | 'LOS(A)' | 'touch';
@@ -296,6 +282,31 @@ export interface ICatalogAugmentation extends ICatalogBase {
296
282
  canonEssence?: number;
297
283
  };
298
284
  }
285
+ /**
286
+ * AN ADEPT POWER (p.308-310). Bought with Power Points rather than nuyen
287
+ * or karma, which is why it carries no price: `levelCosts` is the PP to
288
+ * HOLD it at each level, and a magic-capped power extends linearly to the
289
+ * character's Magic.
290
+ */
291
+ export interface ICatalogAdeptPower extends ICatalogBase {
292
+ kind: 'adept-power';
293
+ adeptPower: {
294
+ levelCosts: number[];
295
+ magicCapped: boolean;
296
+ costPerLevel?: number;
297
+ };
298
+ }
299
+ /**
300
+ * A METAMAGIC (p.325-326) or a technomancer's echo (p.258). Bought with an
301
+ * initiation or submersion grade, so it has no price either; `path` is who
302
+ * may take it.
303
+ */
304
+ export interface ICatalogMetamagic extends ICatalogBase {
305
+ kind: 'metamagic';
306
+ metamagic: {
307
+ path: 'caster' | 'adept' | 'techno';
308
+ };
309
+ }
299
310
  export interface ICatalogMetatype extends ICatalogBase {
300
311
  kind: 'metatype';
301
312
  metatype: {
@@ -307,11 +318,8 @@ export interface ICatalogMetatype extends ICatalogBase {
307
318
  lifestyleCostMult?: number;
308
319
  };
309
320
  }
310
- export type ICatalogRow = ICatalogItem | ICatalogQuality | ICatalogSpell | ICatalogAugmentation | ICatalogMetatype;
321
+ export type ICatalogRow = ICatalogItem | ICatalogQuality | ICatalogSpell | ICatalogAugmentation | ICatalogMetatype | ICatalogAdeptPower | ICatalogMetamagic;
311
322
  /** Gear or not -- the discriminator every consumer of the gear list uses. */
312
323
  export declare function isGearRow(r: ICatalogRow): r is ICatalogItem;
313
324
  export declare const CATALOG_ITEMS: ICatalogItem[];
314
- /** THE WHOLE SEED, every kind. Gear today; qualities, spells, augmentations
315
- * and metatypes join it in v14. The loader (utilities/catalog.ts) weighs
316
- * THIS against the server and the cache. */
317
325
  export declare const CATALOG_ROWS: ICatalogRow[];