hoi4-agent-tools 0.2.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/CHANGELOG.md +21 -118
  2. package/README.md +38 -124
  3. package/SECURITY.md +5 -7
  4. package/dist/bin/http.js +0 -1
  5. package/dist/bin/setup.js +141 -92
  6. package/dist/bin/stdio.js +0 -1
  7. package/dist/hoi4_agent_tools/core/artifacts.js +0 -1
  8. package/dist/hoi4_agent_tools/core/canonical.js +0 -1
  9. package/dist/hoi4_agent_tools/core/configuration.js +28 -28
  10. package/dist/hoi4_agent_tools/core/diagnostic-collector.js +0 -1
  11. package/dist/hoi4_agent_tools/core/diagnostics.js +0 -1
  12. package/dist/hoi4_agent_tools/core/diff.js +0 -1
  13. package/dist/hoi4_agent_tools/core/engine.js +6 -21
  14. package/dist/hoi4_agent_tools/core/image-diff.js +0 -1
  15. package/dist/hoi4_agent_tools/core/index.js +0 -1
  16. package/dist/hoi4_agent_tools/core/render-budget.js +0 -1
  17. package/dist/hoi4_agent_tools/core/result.js +0 -1
  18. package/dist/hoi4_agent_tools/core/scanner.js +0 -1
  19. package/dist/hoi4_agent_tools/core/server-state.js +0 -1
  20. package/dist/hoi4_agent_tools/core/source/encoding.js +0 -1
  21. package/dist/hoi4_agent_tools/core/source/index.js +0 -1
  22. package/dist/hoi4_agent_tools/core/source/lexer.js +0 -1
  23. package/dist/hoi4_agent_tools/core/source/limits.js +0 -1
  24. package/dist/hoi4_agent_tools/core/source/localisation.js +0 -1
  25. package/dist/hoi4_agent_tools/core/source/parser.js +0 -1
  26. package/dist/hoi4_agent_tools/core/source/rewrite.js +0 -1
  27. package/dist/hoi4_agent_tools/core/svg-text.js +0 -1
  28. package/dist/hoi4_agent_tools/core/transaction-limits.js +0 -1
  29. package/dist/hoi4_agent_tools/core/transactions.js +2 -30
  30. package/dist/hoi4_agent_tools/core/workspace.js +112 -396
  31. package/dist/hoi4_agent_tools/focus/compact.js +432 -0
  32. package/dist/hoi4_agent_tools/focus/compiler.js +1 -8
  33. package/dist/hoi4_agent_tools/focus/continuous-render.js +0 -1
  34. package/dist/hoi4_agent_tools/focus/drift.js +0 -1
  35. package/dist/hoi4_agent_tools/focus/geometry.js +203 -17
  36. package/dist/hoi4_agent_tools/focus/importer.js +0 -1
  37. package/dist/hoi4_agent_tools/focus/index.js +1 -1
  38. package/dist/hoi4_agent_tools/focus/layout.js +1256 -93
  39. package/dist/hoi4_agent_tools/focus/limits.js +1 -2
  40. package/dist/hoi4_agent_tools/focus/lint.js +11 -4
  41. package/dist/hoi4_agent_tools/focus/model.js +0 -1
  42. package/dist/hoi4_agent_tools/focus/native-effects.js +0 -1
  43. package/dist/hoi4_agent_tools/focus/planning.js +6 -2
  44. package/dist/hoi4_agent_tools/focus/presentation.js +0 -1
  45. package/dist/hoi4_agent_tools/focus/render.js +14 -10
  46. package/dist/hoi4_agent_tools/focus/service.js +7 -8
  47. package/dist/hoi4_agent_tools/focus/source-update.js +1 -2
  48. package/dist/hoi4_agent_tools/gui/animation-manifest.js +0 -1
  49. package/dist/hoi4_agent_tools/gui/assets.js +0 -1
  50. package/dist/hoi4_agent_tools/gui/dds.js +0 -1
  51. package/dist/hoi4_agent_tools/gui/helpers.js +1 -2
  52. package/dist/hoi4_agent_tools/gui/index.js +0 -1
  53. package/dist/hoi4_agent_tools/gui/layout.js +0 -1
  54. package/dist/hoi4_agent_tools/gui/limits.js +0 -1
  55. package/dist/hoi4_agent_tools/gui/renderer.js +0 -1
  56. package/dist/hoi4_agent_tools/gui/scenario.js +0 -1
  57. package/dist/hoi4_agent_tools/gui/source-graph.js +0 -1
  58. package/dist/hoi4_agent_tools/gui/source-patch.js +1 -2
  59. package/dist/hoi4_agent_tools/gui/studio.js +247 -104
  60. package/dist/hoi4_agent_tools/gui/tga.js +0 -1
  61. package/dist/hoi4_agent_tools/gui/types.js +0 -1
  62. package/dist/hoi4_agent_tools/gui/validators.js +0 -1
  63. package/dist/hoi4_agent_tools/map/bmp.js +0 -1
  64. package/dist/hoi4_agent_tools/map/diagnostic-limit.js +0 -1
  65. package/dist/hoi4_agent_tools/map/index.js +0 -1
  66. package/dist/hoi4_agent_tools/map/limits.js +2 -1
  67. package/dist/hoi4_agent_tools/map/model.js +0 -1
  68. package/dist/hoi4_agent_tools/map/operations.js +0 -1
  69. package/dist/hoi4_agent_tools/map/render.js +0 -1
  70. package/dist/hoi4_agent_tools/map/service.js +171 -33
  71. package/dist/hoi4_agent_tools/map/validation.js +0 -1
  72. package/dist/hoi4_agent_tools/mcp/resources/register.js +61 -187
  73. package/dist/hoi4_agent_tools/mcp/security/auth.js +1 -2
  74. package/dist/hoi4_agent_tools/mcp/server/base-tools.js +24 -750
  75. package/dist/hoi4_agent_tools/mcp/server/context-schemas.js +8 -0
  76. package/dist/hoi4_agent_tools/mcp/server/create.js +2 -12
  77. package/dist/hoi4_agent_tools/mcp/server/output-schemas.js +0 -71
  78. package/dist/hoi4_agent_tools/mcp/server/progress.js +0 -1
  79. package/dist/hoi4_agent_tools/mcp/server/result.js +146 -81
  80. package/dist/hoi4_agent_tools/mcp/server/transaction-execution.js +10 -14
  81. package/dist/hoi4_agent_tools/mcp/tools/focus.js +309 -279
  82. package/dist/hoi4_agent_tools/mcp/tools/gui.js +156 -254
  83. package/dist/hoi4_agent_tools/mcp/tools/map.js +259 -338
  84. package/dist/hoi4_agent_tools/mcp/tools/mods.js +54 -0
  85. package/dist/hoi4_agent_tools/mcp/transports/bounded-stdio.js +0 -1
  86. package/dist/hoi4_agent_tools/mcp/transports/event-store.js +0 -1
  87. package/dist/hoi4_agent_tools/mcp/transports/http.js +1 -12
  88. package/dist/hoi4_agent_tools/mcp/transports/protocol-gate.js +0 -1
  89. package/dist/hoi4_agent_tools/runtime.js +5 -2
  90. package/dist/hoi4_agent_tools/schemas/common.js +1 -2
  91. package/dist/hoi4_agent_tools/schemas/focus.js +64 -9
  92. package/dist/hoi4_agent_tools/schemas/map.js +0 -1
  93. package/dist/hoi4_agent_tools/schemas/transaction.js +0 -1
  94. package/dist/hoi4_agent_tools/version.js +1 -2
  95. package/docs/README.md +8 -21
  96. package/docs/development.md +22 -0
  97. package/docs/focus.md +50 -0
  98. package/docs/gui.md +37 -0
  99. package/docs/http.md +53 -0
  100. package/docs/map.md +39 -0
  101. package/docs/setup.md +39 -0
  102. package/package.json +12 -13
  103. package/server.json +3 -12
  104. package/dist/bin/http.d.ts +0 -3
  105. package/dist/bin/http.d.ts.map +0 -1
  106. package/dist/bin/http.js.map +0 -1
  107. package/dist/bin/setup.d.ts +0 -3
  108. package/dist/bin/setup.d.ts.map +0 -1
  109. package/dist/bin/setup.js.map +0 -1
  110. package/dist/bin/stdio.d.ts +0 -3
  111. package/dist/bin/stdio.d.ts.map +0 -1
  112. package/dist/bin/stdio.js.map +0 -1
  113. package/dist/hoi4_agent_tools/core/artifacts.d.ts +0 -117
  114. package/dist/hoi4_agent_tools/core/artifacts.d.ts.map +0 -1
  115. package/dist/hoi4_agent_tools/core/artifacts.js.map +0 -1
  116. package/dist/hoi4_agent_tools/core/canonical.d.ts +0 -13
  117. package/dist/hoi4_agent_tools/core/canonical.d.ts.map +0 -1
  118. package/dist/hoi4_agent_tools/core/canonical.js.map +0 -1
  119. package/dist/hoi4_agent_tools/core/configuration.d.ts +0 -138
  120. package/dist/hoi4_agent_tools/core/configuration.d.ts.map +0 -1
  121. package/dist/hoi4_agent_tools/core/configuration.js.map +0 -1
  122. package/dist/hoi4_agent_tools/core/diagnostic-collector.d.ts +0 -18
  123. package/dist/hoi4_agent_tools/core/diagnostic-collector.d.ts.map +0 -1
  124. package/dist/hoi4_agent_tools/core/diagnostic-collector.js.map +0 -1
  125. package/dist/hoi4_agent_tools/core/diagnostics.d.ts +0 -26
  126. package/dist/hoi4_agent_tools/core/diagnostics.d.ts.map +0 -1
  127. package/dist/hoi4_agent_tools/core/diagnostics.js.map +0 -1
  128. package/dist/hoi4_agent_tools/core/diff.d.ts +0 -22
  129. package/dist/hoi4_agent_tools/core/diff.d.ts.map +0 -1
  130. package/dist/hoi4_agent_tools/core/diff.js.map +0 -1
  131. package/dist/hoi4_agent_tools/core/engine.d.ts +0 -57
  132. package/dist/hoi4_agent_tools/core/engine.d.ts.map +0 -1
  133. package/dist/hoi4_agent_tools/core/engine.js.map +0 -1
  134. package/dist/hoi4_agent_tools/core/image-diff.d.ts +0 -14
  135. package/dist/hoi4_agent_tools/core/image-diff.d.ts.map +0 -1
  136. package/dist/hoi4_agent_tools/core/image-diff.js.map +0 -1
  137. package/dist/hoi4_agent_tools/core/index.d.ts +0 -64
  138. package/dist/hoi4_agent_tools/core/index.d.ts.map +0 -1
  139. package/dist/hoi4_agent_tools/core/index.js.map +0 -1
  140. package/dist/hoi4_agent_tools/core/index.public.d.ts +0 -16
  141. package/dist/hoi4_agent_tools/core/index.public.d.ts.map +0 -1
  142. package/dist/hoi4_agent_tools/core/index.public.js +0 -16
  143. package/dist/hoi4_agent_tools/core/index.public.js.map +0 -1
  144. package/dist/hoi4_agent_tools/core/render-budget.d.ts +0 -51
  145. package/dist/hoi4_agent_tools/core/render-budget.d.ts.map +0 -1
  146. package/dist/hoi4_agent_tools/core/render-budget.js.map +0 -1
  147. package/dist/hoi4_agent_tools/core/result.d.ts +0 -45
  148. package/dist/hoi4_agent_tools/core/result.d.ts.map +0 -1
  149. package/dist/hoi4_agent_tools/core/result.js.map +0 -1
  150. package/dist/hoi4_agent_tools/core/scanner.d.ts +0 -28
  151. package/dist/hoi4_agent_tools/core/scanner.d.ts.map +0 -1
  152. package/dist/hoi4_agent_tools/core/scanner.js.map +0 -1
  153. package/dist/hoi4_agent_tools/core/server-state.d.ts +0 -31
  154. package/dist/hoi4_agent_tools/core/server-state.d.ts.map +0 -1
  155. package/dist/hoi4_agent_tools/core/server-state.js.map +0 -1
  156. package/dist/hoi4_agent_tools/core/source/encoding.d.ts +0 -10
  157. package/dist/hoi4_agent_tools/core/source/encoding.d.ts.map +0 -1
  158. package/dist/hoi4_agent_tools/core/source/encoding.js.map +0 -1
  159. package/dist/hoi4_agent_tools/core/source/index.d.ts +0 -7
  160. package/dist/hoi4_agent_tools/core/source/index.d.ts.map +0 -1
  161. package/dist/hoi4_agent_tools/core/source/index.js.map +0 -1
  162. package/dist/hoi4_agent_tools/core/source/lexer.d.ts +0 -30
  163. package/dist/hoi4_agent_tools/core/source/lexer.d.ts.map +0 -1
  164. package/dist/hoi4_agent_tools/core/source/lexer.js.map +0 -1
  165. package/dist/hoi4_agent_tools/core/source/limits.d.ts +0 -21
  166. package/dist/hoi4_agent_tools/core/source/limits.d.ts.map +0 -1
  167. package/dist/hoi4_agent_tools/core/source/limits.js.map +0 -1
  168. package/dist/hoi4_agent_tools/core/source/localisation.d.ts +0 -20
  169. package/dist/hoi4_agent_tools/core/source/localisation.d.ts.map +0 -1
  170. package/dist/hoi4_agent_tools/core/source/localisation.js.map +0 -1
  171. package/dist/hoi4_agent_tools/core/source/parser.d.ts +0 -44
  172. package/dist/hoi4_agent_tools/core/source/parser.d.ts.map +0 -1
  173. package/dist/hoi4_agent_tools/core/source/parser.js.map +0 -1
  174. package/dist/hoi4_agent_tools/core/source/rewrite.d.ts +0 -10
  175. package/dist/hoi4_agent_tools/core/source/rewrite.d.ts.map +0 -1
  176. package/dist/hoi4_agent_tools/core/source/rewrite.js.map +0 -1
  177. package/dist/hoi4_agent_tools/core/svg-text.d.ts +0 -34
  178. package/dist/hoi4_agent_tools/core/svg-text.d.ts.map +0 -1
  179. package/dist/hoi4_agent_tools/core/svg-text.js.map +0 -1
  180. package/dist/hoi4_agent_tools/core/transaction-limits.d.ts +0 -9
  181. package/dist/hoi4_agent_tools/core/transaction-limits.d.ts.map +0 -1
  182. package/dist/hoi4_agent_tools/core/transaction-limits.js.map +0 -1
  183. package/dist/hoi4_agent_tools/core/transactions.d.ts +0 -164
  184. package/dist/hoi4_agent_tools/core/transactions.d.ts.map +0 -1
  185. package/dist/hoi4_agent_tools/core/transactions.js.map +0 -1
  186. package/dist/hoi4_agent_tools/core/workspace.d.ts +0 -68
  187. package/dist/hoi4_agent_tools/core/workspace.d.ts.map +0 -1
  188. package/dist/hoi4_agent_tools/core/workspace.js.map +0 -1
  189. package/dist/hoi4_agent_tools/focus/compiler.d.ts +0 -10
  190. package/dist/hoi4_agent_tools/focus/compiler.d.ts.map +0 -1
  191. package/dist/hoi4_agent_tools/focus/compiler.js.map +0 -1
  192. package/dist/hoi4_agent_tools/focus/continuous-render.d.ts +0 -32
  193. package/dist/hoi4_agent_tools/focus/continuous-render.d.ts.map +0 -1
  194. package/dist/hoi4_agent_tools/focus/continuous-render.js.map +0 -1
  195. package/dist/hoi4_agent_tools/focus/drift.d.ts +0 -22
  196. package/dist/hoi4_agent_tools/focus/drift.d.ts.map +0 -1
  197. package/dist/hoi4_agent_tools/focus/drift.js.map +0 -1
  198. package/dist/hoi4_agent_tools/focus/geometry.d.ts +0 -17
  199. package/dist/hoi4_agent_tools/focus/geometry.d.ts.map +0 -1
  200. package/dist/hoi4_agent_tools/focus/geometry.js.map +0 -1
  201. package/dist/hoi4_agent_tools/focus/importer.d.ts +0 -9
  202. package/dist/hoi4_agent_tools/focus/importer.d.ts.map +0 -1
  203. package/dist/hoi4_agent_tools/focus/importer.js.map +0 -1
  204. package/dist/hoi4_agent_tools/focus/index.d.ts +0 -14
  205. package/dist/hoi4_agent_tools/focus/index.d.ts.map +0 -1
  206. package/dist/hoi4_agent_tools/focus/index.js.map +0 -1
  207. package/dist/hoi4_agent_tools/focus/layout.d.ts +0 -5
  208. package/dist/hoi4_agent_tools/focus/layout.d.ts.map +0 -1
  209. package/dist/hoi4_agent_tools/focus/layout.js.map +0 -1
  210. package/dist/hoi4_agent_tools/focus/limits.d.ts +0 -9
  211. package/dist/hoi4_agent_tools/focus/limits.d.ts.map +0 -1
  212. package/dist/hoi4_agent_tools/focus/limits.js.map +0 -1
  213. package/dist/hoi4_agent_tools/focus/lint.d.ts +0 -14
  214. package/dist/hoi4_agent_tools/focus/lint.d.ts.map +0 -1
  215. package/dist/hoi4_agent_tools/focus/lint.js.map +0 -1
  216. package/dist/hoi4_agent_tools/focus/model.d.ts +0 -307
  217. package/dist/hoi4_agent_tools/focus/model.d.ts.map +0 -1
  218. package/dist/hoi4_agent_tools/focus/model.js.map +0 -1
  219. package/dist/hoi4_agent_tools/focus/native-effects.d.ts +0 -9
  220. package/dist/hoi4_agent_tools/focus/native-effects.d.ts.map +0 -1
  221. package/dist/hoi4_agent_tools/focus/native-effects.js.map +0 -1
  222. package/dist/hoi4_agent_tools/focus/planning.d.ts +0 -15
  223. package/dist/hoi4_agent_tools/focus/planning.d.ts.map +0 -1
  224. package/dist/hoi4_agent_tools/focus/planning.js.map +0 -1
  225. package/dist/hoi4_agent_tools/focus/presentation.d.ts +0 -24
  226. package/dist/hoi4_agent_tools/focus/presentation.d.ts.map +0 -1
  227. package/dist/hoi4_agent_tools/focus/presentation.js.map +0 -1
  228. package/dist/hoi4_agent_tools/focus/render.d.ts +0 -39
  229. package/dist/hoi4_agent_tools/focus/render.d.ts.map +0 -1
  230. package/dist/hoi4_agent_tools/focus/render.js.map +0 -1
  231. package/dist/hoi4_agent_tools/focus/service.d.ts +0 -82
  232. package/dist/hoi4_agent_tools/focus/service.d.ts.map +0 -1
  233. package/dist/hoi4_agent_tools/focus/service.js.map +0 -1
  234. package/dist/hoi4_agent_tools/focus/source-update.d.ts +0 -6
  235. package/dist/hoi4_agent_tools/focus/source-update.d.ts.map +0 -1
  236. package/dist/hoi4_agent_tools/focus/source-update.js.map +0 -1
  237. package/dist/hoi4_agent_tools/gui/animation-manifest.d.ts +0 -37
  238. package/dist/hoi4_agent_tools/gui/animation-manifest.d.ts.map +0 -1
  239. package/dist/hoi4_agent_tools/gui/animation-manifest.js.map +0 -1
  240. package/dist/hoi4_agent_tools/gui/assets.d.ts +0 -71
  241. package/dist/hoi4_agent_tools/gui/assets.d.ts.map +0 -1
  242. package/dist/hoi4_agent_tools/gui/assets.js.map +0 -1
  243. package/dist/hoi4_agent_tools/gui/dds.d.ts +0 -17
  244. package/dist/hoi4_agent_tools/gui/dds.d.ts.map +0 -1
  245. package/dist/hoi4_agent_tools/gui/dds.js.map +0 -1
  246. package/dist/hoi4_agent_tools/gui/helpers.d.ts +0 -101
  247. package/dist/hoi4_agent_tools/gui/helpers.d.ts.map +0 -1
  248. package/dist/hoi4_agent_tools/gui/helpers.js.map +0 -1
  249. package/dist/hoi4_agent_tools/gui/index.d.ts +0 -15
  250. package/dist/hoi4_agent_tools/gui/index.d.ts.map +0 -1
  251. package/dist/hoi4_agent_tools/gui/index.js.map +0 -1
  252. package/dist/hoi4_agent_tools/gui/layout.d.ts +0 -6
  253. package/dist/hoi4_agent_tools/gui/layout.d.ts.map +0 -1
  254. package/dist/hoi4_agent_tools/gui/layout.js.map +0 -1
  255. package/dist/hoi4_agent_tools/gui/limits.d.ts +0 -25
  256. package/dist/hoi4_agent_tools/gui/limits.d.ts.map +0 -1
  257. package/dist/hoi4_agent_tools/gui/limits.js.map +0 -1
  258. package/dist/hoi4_agent_tools/gui/renderer.d.ts +0 -18
  259. package/dist/hoi4_agent_tools/gui/renderer.d.ts.map +0 -1
  260. package/dist/hoi4_agent_tools/gui/renderer.js.map +0 -1
  261. package/dist/hoi4_agent_tools/gui/scenario.d.ts +0 -66
  262. package/dist/hoi4_agent_tools/gui/scenario.d.ts.map +0 -1
  263. package/dist/hoi4_agent_tools/gui/scenario.js.map +0 -1
  264. package/dist/hoi4_agent_tools/gui/source-graph.d.ts +0 -7
  265. package/dist/hoi4_agent_tools/gui/source-graph.d.ts.map +0 -1
  266. package/dist/hoi4_agent_tools/gui/source-graph.js.map +0 -1
  267. package/dist/hoi4_agent_tools/gui/source-patch.d.ts +0 -13
  268. package/dist/hoi4_agent_tools/gui/source-patch.d.ts.map +0 -1
  269. package/dist/hoi4_agent_tools/gui/source-patch.js.map +0 -1
  270. package/dist/hoi4_agent_tools/gui/studio.d.ts +0 -86
  271. package/dist/hoi4_agent_tools/gui/studio.d.ts.map +0 -1
  272. package/dist/hoi4_agent_tools/gui/studio.js.map +0 -1
  273. package/dist/hoi4_agent_tools/gui/tga.d.ts +0 -16
  274. package/dist/hoi4_agent_tools/gui/tga.d.ts.map +0 -1
  275. package/dist/hoi4_agent_tools/gui/tga.js.map +0 -1
  276. package/dist/hoi4_agent_tools/gui/types.d.ts +0 -322
  277. package/dist/hoi4_agent_tools/gui/types.d.ts.map +0 -1
  278. package/dist/hoi4_agent_tools/gui/types.js.map +0 -1
  279. package/dist/hoi4_agent_tools/gui/validators.d.ts +0 -8
  280. package/dist/hoi4_agent_tools/gui/validators.d.ts.map +0 -1
  281. package/dist/hoi4_agent_tools/gui/validators.js.map +0 -1
  282. package/dist/hoi4_agent_tools/map/bmp.d.ts +0 -62
  283. package/dist/hoi4_agent_tools/map/bmp.d.ts.map +0 -1
  284. package/dist/hoi4_agent_tools/map/bmp.js.map +0 -1
  285. package/dist/hoi4_agent_tools/map/diagnostic-limit.d.ts +0 -5
  286. package/dist/hoi4_agent_tools/map/diagnostic-limit.d.ts.map +0 -1
  287. package/dist/hoi4_agent_tools/map/diagnostic-limit.js.map +0 -1
  288. package/dist/hoi4_agent_tools/map/index.d.ts +0 -8
  289. package/dist/hoi4_agent_tools/map/index.d.ts.map +0 -1
  290. package/dist/hoi4_agent_tools/map/index.js.map +0 -1
  291. package/dist/hoi4_agent_tools/map/limits.d.ts +0 -13
  292. package/dist/hoi4_agent_tools/map/limits.d.ts.map +0 -1
  293. package/dist/hoi4_agent_tools/map/limits.js.map +0 -1
  294. package/dist/hoi4_agent_tools/map/model.d.ts +0 -269
  295. package/dist/hoi4_agent_tools/map/model.d.ts.map +0 -1
  296. package/dist/hoi4_agent_tools/map/model.js.map +0 -1
  297. package/dist/hoi4_agent_tools/map/operations.d.ts +0 -401
  298. package/dist/hoi4_agent_tools/map/operations.d.ts.map +0 -1
  299. package/dist/hoi4_agent_tools/map/operations.js.map +0 -1
  300. package/dist/hoi4_agent_tools/map/render.d.ts +0 -90
  301. package/dist/hoi4_agent_tools/map/render.d.ts.map +0 -1
  302. package/dist/hoi4_agent_tools/map/render.js.map +0 -1
  303. package/dist/hoi4_agent_tools/map/service.d.ts +0 -81
  304. package/dist/hoi4_agent_tools/map/service.d.ts.map +0 -1
  305. package/dist/hoi4_agent_tools/map/service.js.map +0 -1
  306. package/dist/hoi4_agent_tools/map/validation.d.ts +0 -23
  307. package/dist/hoi4_agent_tools/map/validation.d.ts.map +0 -1
  308. package/dist/hoi4_agent_tools/map/validation.js.map +0 -1
  309. package/dist/hoi4_agent_tools/mcp/prompts/register.d.ts +0 -4
  310. package/dist/hoi4_agent_tools/mcp/prompts/register.d.ts.map +0 -1
  311. package/dist/hoi4_agent_tools/mcp/prompts/register.js +0 -72
  312. package/dist/hoi4_agent_tools/mcp/prompts/register.js.map +0 -1
  313. package/dist/hoi4_agent_tools/mcp/registry/metadata.d.ts +0 -9
  314. package/dist/hoi4_agent_tools/mcp/registry/metadata.d.ts.map +0 -1
  315. package/dist/hoi4_agent_tools/mcp/registry/metadata.js +0 -10
  316. package/dist/hoi4_agent_tools/mcp/registry/metadata.js.map +0 -1
  317. package/dist/hoi4_agent_tools/mcp/resources/register.d.ts +0 -5
  318. package/dist/hoi4_agent_tools/mcp/resources/register.d.ts.map +0 -1
  319. package/dist/hoi4_agent_tools/mcp/resources/register.js.map +0 -1
  320. package/dist/hoi4_agent_tools/mcp/security/auth.d.ts +0 -24
  321. package/dist/hoi4_agent_tools/mcp/security/auth.d.ts.map +0 -1
  322. package/dist/hoi4_agent_tools/mcp/security/auth.js.map +0 -1
  323. package/dist/hoi4_agent_tools/mcp/server/base-tools.d.ts +0 -47
  324. package/dist/hoi4_agent_tools/mcp/server/base-tools.d.ts.map +0 -1
  325. package/dist/hoi4_agent_tools/mcp/server/base-tools.js.map +0 -1
  326. package/dist/hoi4_agent_tools/mcp/server/create.d.ts +0 -5
  327. package/dist/hoi4_agent_tools/mcp/server/create.d.ts.map +0 -1
  328. package/dist/hoi4_agent_tools/mcp/server/create.js.map +0 -1
  329. package/dist/hoi4_agent_tools/mcp/server/output-schemas.d.ts +0 -138
  330. package/dist/hoi4_agent_tools/mcp/server/output-schemas.d.ts.map +0 -1
  331. package/dist/hoi4_agent_tools/mcp/server/output-schemas.js.map +0 -1
  332. package/dist/hoi4_agent_tools/mcp/server/progress.d.ts +0 -8
  333. package/dist/hoi4_agent_tools/mcp/server/progress.d.ts.map +0 -1
  334. package/dist/hoi4_agent_tools/mcp/server/progress.js.map +0 -1
  335. package/dist/hoi4_agent_tools/mcp/server/result.d.ts +0 -232
  336. package/dist/hoi4_agent_tools/mcp/server/result.d.ts.map +0 -1
  337. package/dist/hoi4_agent_tools/mcp/server/result.js.map +0 -1
  338. package/dist/hoi4_agent_tools/mcp/server/transaction-execution.d.ts +0 -31
  339. package/dist/hoi4_agent_tools/mcp/server/transaction-execution.d.ts.map +0 -1
  340. package/dist/hoi4_agent_tools/mcp/server/transaction-execution.js.map +0 -1
  341. package/dist/hoi4_agent_tools/mcp/tools/focus.d.ts +0 -5
  342. package/dist/hoi4_agent_tools/mcp/tools/focus.d.ts.map +0 -1
  343. package/dist/hoi4_agent_tools/mcp/tools/focus.js.map +0 -1
  344. package/dist/hoi4_agent_tools/mcp/tools/gui.d.ts +0 -117
  345. package/dist/hoi4_agent_tools/mcp/tools/gui.d.ts.map +0 -1
  346. package/dist/hoi4_agent_tools/mcp/tools/gui.js.map +0 -1
  347. package/dist/hoi4_agent_tools/mcp/tools/map.d.ts +0 -5
  348. package/dist/hoi4_agent_tools/mcp/tools/map.d.ts.map +0 -1
  349. package/dist/hoi4_agent_tools/mcp/tools/map.js.map +0 -1
  350. package/dist/hoi4_agent_tools/mcp/transports/bounded-stdio.d.ts +0 -58
  351. package/dist/hoi4_agent_tools/mcp/transports/bounded-stdio.d.ts.map +0 -1
  352. package/dist/hoi4_agent_tools/mcp/transports/bounded-stdio.js.map +0 -1
  353. package/dist/hoi4_agent_tools/mcp/transports/event-store.d.ts +0 -26
  354. package/dist/hoi4_agent_tools/mcp/transports/event-store.d.ts.map +0 -1
  355. package/dist/hoi4_agent_tools/mcp/transports/event-store.js.map +0 -1
  356. package/dist/hoi4_agent_tools/mcp/transports/http.d.ts +0 -28
  357. package/dist/hoi4_agent_tools/mcp/transports/http.d.ts.map +0 -1
  358. package/dist/hoi4_agent_tools/mcp/transports/http.js.map +0 -1
  359. package/dist/hoi4_agent_tools/mcp/transports/protocol-gate.d.ts +0 -15
  360. package/dist/hoi4_agent_tools/mcp/transports/protocol-gate.d.ts.map +0 -1
  361. package/dist/hoi4_agent_tools/mcp/transports/protocol-gate.js.map +0 -1
  362. package/dist/hoi4_agent_tools/runtime.d.ts +0 -4
  363. package/dist/hoi4_agent_tools/runtime.d.ts.map +0 -1
  364. package/dist/hoi4_agent_tools/runtime.js.map +0 -1
  365. package/dist/hoi4_agent_tools/schemas/common.d.ts +0 -74
  366. package/dist/hoi4_agent_tools/schemas/common.d.ts.map +0 -1
  367. package/dist/hoi4_agent_tools/schemas/common.js.map +0 -1
  368. package/dist/hoi4_agent_tools/schemas/focus.d.ts +0 -784
  369. package/dist/hoi4_agent_tools/schemas/focus.d.ts.map +0 -1
  370. package/dist/hoi4_agent_tools/schemas/focus.js.map +0 -1
  371. package/dist/hoi4_agent_tools/schemas/index.d.ts +0 -5
  372. package/dist/hoi4_agent_tools/schemas/index.d.ts.map +0 -1
  373. package/dist/hoi4_agent_tools/schemas/index.js +0 -5
  374. package/dist/hoi4_agent_tools/schemas/index.js.map +0 -1
  375. package/dist/hoi4_agent_tools/schemas/map.d.ts +0 -654
  376. package/dist/hoi4_agent_tools/schemas/map.d.ts.map +0 -1
  377. package/dist/hoi4_agent_tools/schemas/map.js.map +0 -1
  378. package/dist/hoi4_agent_tools/schemas/transaction.d.ts +0 -259
  379. package/dist/hoi4_agent_tools/schemas/transaction.d.ts.map +0 -1
  380. package/dist/hoi4_agent_tools/schemas/transaction.js.map +0 -1
  381. package/dist/hoi4_agent_tools/version.d.ts +0 -6
  382. package/dist/hoi4_agent_tools/version.d.ts.map +0 -1
  383. package/dist/hoi4_agent_tools/version.js.map +0 -1
  384. package/dist/index.d.ts +0 -3
  385. package/dist/index.d.ts.map +0 -1
  386. package/dist/index.js +0 -3
  387. package/dist/index.js.map +0 -1
  388. package/docs/adr/0001-runtime-and-language.md +0 -16
  389. package/docs/adr/0002-lossless-source-model.md +0 -18
  390. package/docs/adr/0003-image-and-font-codecs.md +0 -18
  391. package/docs/adr/0004-focus-layout.md +0 -16
  392. package/docs/adr/0005-offline-rendering.md +0 -18
  393. package/docs/adr/0006-mcp-sdk-and-protocol.md +0 -16
  394. package/docs/adr/0007-storage-and-transactions.md +0 -24
  395. package/docs/adr/0008-test-strategy.md +0 -18
  396. package/docs/adr/0009-packaging-and-registry.md +0 -16
  397. package/docs/adr/0010-unsupported-and-refusal-policy.md +0 -18
  398. package/docs/adr/0011-http-security.md +0 -16
  399. package/docs/adr/0012-autonomous-rewrites.md +0 -55
  400. package/docs/adr/README.md +0 -14
  401. package/docs/agent-integration.md +0 -146
  402. package/docs/architecture.md +0 -76
  403. package/docs/artifacts.md +0 -136
  404. package/docs/compatibility.md +0 -33
  405. package/docs/completion-report.md +0 -122
  406. package/docs/configuration.md +0 -305
  407. package/docs/focus-workflow.md +0 -197
  408. package/docs/gui-workflow.md +0 -125
  409. package/docs/limitations.md +0 -32
  410. package/docs/map-workflow.md +0 -95
  411. package/docs/performance.md +0 -117
  412. package/docs/release.md +0 -222
  413. package/docs/research/mcp-2026-07-10.md +0 -52
  414. package/docs/research/source-ledger.md +0 -68
  415. package/docs/security.md +0 -145
  416. package/docs/self-hosting.md +0 -170
  417. package/docs/testing.md +0 -43
  418. package/docs/third-party-notices.md +0 -11
  419. package/docs/transactions.md +0 -180
  420. package/docs/troubleshooting.md +0 -54
  421. package/schemas/configuration.schema.json +0 -795
  422. package/schemas/continuous-focus-palette.schema.json +0 -325
  423. package/schemas/focus-plan.schema.json +0 -927
  424. package/schemas/focus-planning-sidecar.schema.json +0 -379
  425. package/schemas/gui-animation-source.schema.json +0 -176
  426. package/schemas/gui-helper.schema.json +0 -301
  427. package/schemas/gui-scenario.schema.json +0 -298
  428. package/schemas/map-operation.schema.json +0 -2284
  429. package/schemas/operation-result.schema.json +0 -344
  430. package/schemas/transaction-manifest.schema.json +0 -685
@@ -1,13 +1,15 @@
1
1
  import { z } from 'zod/v4';
2
2
  import { boundedSourceHashEvidence, publicArtifactLink } from '../../core/artifacts.js';
3
- import { canonicalJson } from '../../core/canonical.js';
3
+ import { canonicalJson, compareCodeUnits } from '../../core/canonical.js';
4
4
  import { renderDimensionViolation, RenderBudget, RENDER_MAX_DIMENSION, } from '../../core/render-budget.js';
5
5
  import { emptyServiceResult, ServiceError } from '../../core/result.js';
6
- import { GuiHelperDocumentSchema, GuiPreviewScenarioSchema, ScriptedGuiStudio, compileGuiHelpers, guiArtifactProvenance, } from '../../gui/index.js';
6
+ import { SOURCE_MAX_BYTES } from '../../core/source/index.js';
7
+ import { GuiHelperDocumentSchema, GuiPreviewScenarioSchema, GUI_TEXT_PACKAGE_MAX_FILES, ScriptedGuiStudio, compileGuiHelpers, } from '../../gui/index.js';
7
8
  import { workspaceIdSchema, workspaceRelativePathSchema } from '../../schemas/common.js';
8
9
  import { PACKAGE_VERSION } from '../../version.js';
9
- import { requireServerScope, transactionResourceLink, } from '../server/base-tools.js';
10
- import { autonomousFailureContext, autonomousResultArtifacts, autonomousWrites, executePlannedTransaction, } from '../server/transaction-execution.js';
10
+ import { requireServerScope } from '../server/base-tools.js';
11
+ import { compactValidatedInputSchema } from '../server/context-schemas.js';
12
+ import { autonomousFailureContext, autonomousResultArtifacts, executePlannedTransaction, } from '../server/transaction-execution.js';
11
13
  import { indexSkippedSourceSchema, nonNegativeIntegerSchema, sha256Schema, } from '../server/output-schemas.js';
12
14
  import { progressReporter } from '../server/progress.js';
13
15
  import { errorResult, setInlineFilesScanned, strictOperationResultSchema, toolResult, } from '../server/result.js';
@@ -24,15 +26,10 @@ const guiScanOutputSchema = strictOperationResultSchema(z
24
26
  sprites: nonNegativeIntegerSchema,
25
27
  fonts: nonNegativeIntegerSchema,
26
28
  scriptedGuis: nonNegativeIntegerSchema,
27
- })
28
- .strict());
29
- const guiLintOutputSchema = strictOperationResultSchema(z
30
- .object({
31
- windowName: z.string().max(256),
32
- scenarioId: z.string().max(256),
33
- sourceRevision: sha256Schema,
34
- elementCount: nonNegativeIntegerSchema,
35
- fidelityCounts: countRecordSchema,
29
+ windowName: z.string().max(256).optional(),
30
+ scenarioId: z.string().max(256).optional(),
31
+ inspectedElementCount: nonNegativeIntegerSchema.optional(),
32
+ fidelityCounts: countRecordSchema.optional(),
36
33
  })
37
34
  .strict());
38
35
  const guiRenderOutputSchema = strictOperationResultSchema(z
@@ -59,26 +56,15 @@ const guiRenderOutputSchema = strictOperationResultSchema(z
59
56
  offlineRepresentation: z.literal(true),
60
57
  })
61
58
  .strict());
62
- const guiCompareOutputSchema = strictOperationResultSchema(z
63
- .object({
64
- windowName: z.string().max(256),
65
- beforeScenario: z.string().max(256),
66
- afterScenario: z.string().max(256),
67
- changedPixels: nonNegativeIntegerSchema,
68
- changedRatio: z.number().min(0).max(1),
69
- offlineRepresentation: z.literal(true),
70
- })
71
- .strict());
72
59
  export const guiPlanOutputSchema = strictOperationResultSchema(z
73
60
  .object({
74
61
  mode: z.enum(['source', 'helpers', 'patches']),
75
- execution: z.enum(['planned', 'applied', 'blocked', 'unchanged']),
76
- expiresAt: z.iso.datetime(),
62
+ execution: z.enum(['applied', 'blocked', 'unchanged']),
77
63
  nodeCount: nonNegativeIntegerSchema.optional(),
78
64
  templateInstanceCount: nonNegativeIntegerSchema.optional(),
79
65
  rawEscapeCount: nonNegativeIntegerSchema.optional(),
80
- transactionFileCount: nonNegativeIntegerSchema,
81
- transactionArtifactCount: nonNegativeIntegerSchema,
66
+ fileCount: nonNegativeIntegerSchema,
67
+ artifactCount: nonNegativeIntegerSchema,
82
68
  })
83
69
  .strict());
84
70
  const artifactProducing = {
@@ -103,13 +89,38 @@ const previewStateSchema = z.enum([
103
89
  'long-text',
104
90
  'missing-localisation',
105
91
  ]);
92
+ const compactGuiScenarioSchema = compactValidatedInputSchema(GuiPreviewScenarioSchema, `Complete GUI preview scenario: https://github.com/klimPaskov/hoi4-agent-tools/blob/v${PACKAGE_VERSION}/docs/gui.md`);
93
+ const compactGuiHelperSchema = compactValidatedInputSchema(GuiHelperDocumentSchema, `Complete GUI helper document: https://github.com/klimPaskov/hoi4-agent-tools/blob/v${PACKAGE_VERSION}/docs/gui.md`);
106
94
  const guiBaseInput = z
107
95
  .object({
108
96
  workspaceId: workspaceIdSchema,
109
97
  windowName: z.string().min(1).max(256),
110
- scenario: GuiPreviewScenarioSchema,
98
+ scenario: compactGuiScenarioSchema,
111
99
  })
112
100
  .strict();
101
+ const guiInspectInput = z
102
+ .object({
103
+ workspaceId: workspaceIdSchema,
104
+ windowName: z.string().min(1).max(256).optional(),
105
+ scenario: compactGuiScenarioSchema.optional(),
106
+ relatedScenarios: z.array(compactGuiScenarioSchema).max(32).optional(),
107
+ })
108
+ .strict()
109
+ .superRefine((value, context) => {
110
+ if ((value.windowName === undefined) !== (value.scenario === undefined)) {
111
+ context.addIssue({
112
+ code: 'custom',
113
+ message: 'windowName and scenario must be provided together',
114
+ });
115
+ }
116
+ if (value.relatedScenarios !== undefined && value.scenario === undefined) {
117
+ context.addIssue({
118
+ code: 'custom',
119
+ path: ['relatedScenarios'],
120
+ message: 'relatedScenarios requires a window scenario',
121
+ });
122
+ }
123
+ });
113
124
  const resolutionSchema = z
114
125
  .object({
115
126
  width: z.number().int().min(320).max(RENDER_MAX_DIMENSION),
@@ -130,148 +141,111 @@ function validationSummary(validation) {
130
141
  checks: validation.checks,
131
142
  };
132
143
  }
133
- function safeSlug(value) {
134
- return (value
135
- .replace(/[^A-Za-z0-9._-]+/gu, '-')
136
- .replace(/^-+|-+$/gu, '')
137
- .slice(0, 48) || 'gui');
138
- }
139
144
  export function registerGuiTools(server, engine, context) {
140
- const autonomous = autonomousWrites(engine);
141
145
  const studio = new ScriptedGuiStudio(engine);
142
- server.registerTool('hoi4.gui_scan', {
143
- title: 'Scan scripted GUI graph',
144
- description: 'Connect active GUI, GFX, scripted GUI, localisation, sprites, fonts, contexts, triggers, effects, decisions, and animation sources.',
145
- inputSchema: z.object({ workspaceId: workspaceIdSchema }).strict(),
146
+ server.registerTool('hoi4.gui_inspect', {
147
+ title: 'Inspect scripted GUI',
148
+ description: 'Inspect GUI, GFX, script, localisation, and animation sources. Window/scenario selectors add offline visual and interaction diagnostics.',
149
+ inputSchema: guiInspectInput,
146
150
  outputSchema: guiScanOutputSchema,
147
151
  annotations: artifactProducing,
148
- }, async ({ workspaceId }, extra) => {
149
- try {
150
- const progress = progressReporter(extra);
151
- await progress.report(0, 3, 'Building shared index and GUI source graph');
152
- const [shared, scanned] = await Promise.all([
153
- engine.scan(workspaceId, {}, context.principal, progress.signal),
154
- studio.scan(workspaceId, context.principal, progress.signal),
155
- ]);
156
- const workspace = engine.resolver.get(workspaceId, context.principal);
157
- const sourceEvidence = boundedSourceHashEvidence(scanned.graph.sourceHashes);
158
- const artifact = await engine.artifacts.putChunked(workspace, `gui-source-graph.${shared.revision.slice(0, 16)}.json`, 'application/json', `${canonicalJson({
159
- schemaVersion: 1,
160
- sharedRevision: shared.revision,
161
- offline: true,
162
- graph: scanned.graph,
163
- })}\n`, {
164
- kind: 'gui-source-graph',
165
- toolVersion: PACKAGE_VERSION,
166
- schemaVersion: 'gui-source-graph.v1',
167
- sourceHashes: sourceEvidence.sourceHashes,
168
- metadata: {
169
- sharedRevision: shared.revision,
170
- offline: true,
171
- complete: scanned.graph.complete,
172
- skippedSourceCount: scanned.graph.skippedSourceCount,
173
- sourceHashInventory: sourceEvidence.inventory,
174
- },
175
- }, 'Offline scripted-GUI source graph with bounded inventory completeness metadata', progress.signal);
176
- const diagnostics = [...shared.diagnostics, ...scanned.graph.diagnostics];
177
- const result = emptyServiceResult(workspaceId, {
178
- sharedRevision: shared.revision,
179
- complete: scanned.graph.complete,
180
- skippedSourceCount: scanned.graph.skippedSourceCount,
181
- skippedSources: scanned.graph.skippedSources,
182
- nodes: scanned.graph.nodes.length,
183
- edges: scanned.graph.edges.length,
184
- elements: scanned.graph.elements.length,
185
- sprites: scanned.graph.sprites.length,
186
- fonts: scanned.graph.fonts.length,
187
- scriptedGuis: scanned.graph.scriptedGuis.length,
188
- });
189
- result.code = scanned.graph.complete ? 'GUI_SCANNED' : 'GUI_SCANNED_PARTIAL';
190
- setInlineFilesScanned(result, scanned.graph.filesScanned);
191
- result.diagnostics = diagnostics.slice(0, 100);
192
- result.artifacts = [publicArtifactLink(artifact)];
193
- result.validation = {
194
- passed: !diagnostics.some(({ severity }) => severity === 'error' || severity === 'blocker'),
195
- checks: [
196
- {
197
- id: 'gui-source-graph',
198
- passed: true,
199
- message: scanned.graph.complete
200
- ? `${scanned.graph.nodes.length} GUI graph nodes connected from a complete inventory`
201
- : `${scanned.graph.nodes.length} GUI graph nodes connected; ${scanned.graph.skippedSourceCount} over-limit source(s) were skipped`,
202
- },
203
- ],
204
- };
205
- await progress.report(3, 3, 'GUI scan complete');
206
- return toolResult(result);
207
- }
208
- catch (error) {
209
- return errorResult(error, workspaceId);
210
- }
211
- });
212
- server.registerTool('hoi4.gui_lint', {
213
- title: 'Lint scripted GUI scene',
214
- description: 'Validate source references, visual bounds, text, clicks, animation, states, resolutions, AI, and costs for an offline preview scenario.',
215
- inputSchema: guiBaseInput
216
- .extend({ relatedScenarios: z.array(GuiPreviewScenarioSchema).max(32).optional() })
217
- .strict(),
218
- outputSchema: guiLintOutputSchema,
219
- annotations: artifactProducing,
220
152
  }, async ({ workspaceId, windowName, scenario, relatedScenarios }, extra) => {
221
153
  try {
222
154
  const progress = progressReporter(extra);
223
- await progress.report(0, 3, 'Building shared index and GUI scene');
224
- const [shared, linted] = await Promise.all([
225
- engine.scan(workspaceId, {}, context.principal, progress.signal),
226
- studio.lint({
155
+ await progress.report(0, 3, 'Building shared index and GUI inspection');
156
+ const inspection = windowName === undefined || scenario === undefined
157
+ ? studio
158
+ .scan(workspaceId, context.principal, progress.signal)
159
+ .then(({ graph }) => ({ graph, linted: undefined }))
160
+ : studio
161
+ .lint({
227
162
  workspaceId,
228
163
  windowName,
229
164
  scenario,
230
165
  ...(relatedScenarios === undefined ? {} : { relatedScenarios }),
231
166
  ...(context.principal === undefined ? {} : { principal: context.principal }),
232
167
  signal: progress.signal,
233
- }),
168
+ })
169
+ .then((linted) => ({ graph: linted.graph, linted }));
170
+ const [shared, inspected] = await Promise.all([
171
+ engine.scan(workspaceId, {}, context.principal, progress.signal),
172
+ inspection,
234
173
  ]);
174
+ const { graph, linted } = inspected;
235
175
  const workspace = engine.resolver.get(workspaceId, context.principal);
236
- const sourceEvidence = boundedSourceHashEvidence(linted.graph.sourceHashes);
237
- const artifact = await engine.artifacts.put(workspace, `${safeSlug(windowName)}-gui-lint.json`, 'application/json', `${canonicalJson({
176
+ const sourceEvidence = boundedSourceHashEvidence(graph.sourceHashes);
177
+ const artifact = await engine.artifacts.putChunked(workspace, `gui-inspect.${shared.revision.slice(0, 16)}.json`, 'application/json', `${canonicalJson({
238
178
  schemaVersion: 1,
179
+ sharedRevision: shared.revision,
239
180
  offline: true,
240
- scenario: linted.scene.scenario,
241
- fidelity: linted.scene.fidelity,
242
- validation: linted.validation,
181
+ graph,
182
+ ...(linted === undefined
183
+ ? {}
184
+ : {
185
+ scenario: linted.scene.scenario,
186
+ fidelity: linted.scene.fidelity,
187
+ validation: linted.validation,
188
+ }),
243
189
  })}\n`, {
244
- kind: 'gui-lint',
190
+ kind: 'gui-inspect',
245
191
  toolVersion: PACKAGE_VERSION,
246
- schemaVersion: 'gui-lint.v1',
192
+ schemaVersion: 'gui-inspect.v1',
247
193
  sourceHashes: sourceEvidence.sourceHashes,
248
- renderProfile: {
249
- offline: true,
250
- resolution: linted.scene.resolution,
251
- state: linted.scene.scenario.state,
252
- },
253
194
  metadata: {
254
195
  sharedRevision: shared.revision,
196
+ offline: true,
197
+ complete: graph.complete,
198
+ skippedSourceCount: graph.skippedSourceCount,
255
199
  sourceHashInventory: sourceEvidence.inventory,
256
200
  },
257
- }, 'Complete scripted-GUI lint and fidelity report', progress.signal);
258
- const diagnostics = [...shared.diagnostics, ...linted.validation.diagnostics];
201
+ }, 'Scripted GUI graph, diagnostics, and optional scenario fidelity inspection', progress.signal);
202
+ const diagnostics = [
203
+ ...shared.diagnostics,
204
+ ...(linted === undefined ? graph.diagnostics : linted.validation.diagnostics),
205
+ ];
259
206
  const result = emptyServiceResult(workspaceId, {
260
- windowName,
261
- scenarioId: linted.scene.scenario.id,
262
- sourceRevision: linted.scene.sourceRevision,
263
- elementCount: linted.scene.elements.length,
264
- fidelityCounts: Object.fromEntries(Object.entries(linted.scene.fidelity).map(([key, values]) => [key, values.length])),
207
+ sharedRevision: shared.revision,
208
+ complete: graph.complete,
209
+ skippedSourceCount: graph.skippedSourceCount,
210
+ skippedSources: graph.skippedSources,
211
+ nodes: graph.nodes.length,
212
+ edges: graph.edges.length,
213
+ elements: graph.elements.length,
214
+ sprites: graph.sprites.length,
215
+ fonts: graph.fonts.length,
216
+ scriptedGuis: graph.scriptedGuis.length,
217
+ ...(linted === undefined
218
+ ? {}
219
+ : {
220
+ windowName,
221
+ scenarioId: linted.scene.scenario.id,
222
+ inspectedElementCount: linted.scene.elements.length,
223
+ fidelityCounts: Object.fromEntries(Object.entries(linted.scene.fidelity).map(([key, values]) => [
224
+ key,
225
+ values.length,
226
+ ])),
227
+ }),
265
228
  });
266
- result.code = 'GUI_LINTED';
267
- setInlineFilesScanned(result, linted.graph.filesScanned);
229
+ result.code = graph.complete ? 'GUI_INSPECTED' : 'GUI_INSPECTED_PARTIAL';
230
+ setInlineFilesScanned(result, graph.filesScanned);
268
231
  result.diagnostics = diagnostics.slice(0, 100);
269
232
  result.artifacts = [publicArtifactLink(artifact)];
270
- result.validation = validationSummary({
271
- diagnostics,
272
- checks: linted.validation.checks,
273
- });
274
- await progress.report(3, 3, 'GUI lint complete');
233
+ result.validation =
234
+ linted === undefined
235
+ ? {
236
+ passed: !diagnostics.some(({ severity }) => severity === 'error' || severity === 'blocker'),
237
+ checks: [
238
+ {
239
+ id: 'gui-inspection',
240
+ passed: true,
241
+ message: graph.complete
242
+ ? `${graph.nodes.length} GUI graph nodes connected from a complete inventory`
243
+ : `${graph.nodes.length} GUI graph nodes connected; ${graph.skippedSourceCount} over-limit source(s) were skipped`,
244
+ },
245
+ ],
246
+ }
247
+ : validationSummary({ diagnostics, checks: linted.validation.checks });
248
+ await progress.report(3, 3, 'GUI inspection complete');
275
249
  return toolResult(result);
276
250
  }
277
251
  catch (error) {
@@ -344,7 +318,7 @@ export function registerGuiTools(server, engine, context) {
344
318
  .extend({
345
319
  states: z.array(previewStateSchema).max(14).optional(),
346
320
  resolutions: z.array(resolutionSchema).min(1).max(16).optional(),
347
- comparisonScenario: GuiPreviewScenarioSchema.optional(),
321
+ comparisonScenario: compactGuiScenarioSchema.optional(),
348
322
  })
349
323
  .strict()
350
324
  .superRefine(({ scenario, states, resolutions }, context) => {
@@ -380,100 +354,32 @@ export function registerGuiTools(server, engine, context) {
380
354
  });
381
355
  server.registerTool('hoi4.gui_render', {
382
356
  title: 'Render scripted GUI artifacts',
383
- description: 'Render deterministic full, cropped, annotated, click, source-map, hierarchy, state, resolution, comparison, and fidelity artifacts offline.',
357
+ description: 'Render deterministic offline review artifacts for one GUI window and scenario.',
384
358
  inputSchema: renderInput,
385
359
  outputSchema: guiRenderOutputSchema,
386
360
  annotations: artifactProducing,
387
361
  }, (input, extra) => render(input, extra, 'GUI_RENDERED'));
388
- server.registerTool('hoi4.gui_render_states', {
389
- title: 'Render scripted GUI state matrix',
390
- description: 'Render a bounded deterministic matrix of GUI states and resolution/UI-scale scenarios with fidelity reports.',
391
- inputSchema: renderInput,
392
- outputSchema: guiRenderOutputSchema,
393
- annotations: artifactProducing,
394
- }, (input, extra) => render(input, extra, 'GUI_STATES_RENDERED'));
395
- server.registerTool('hoi4.gui_compare', {
396
- title: 'Compare GUI scenarios',
397
- description: 'Render two offline scenarios and return a deterministic bitmap diff as content-addressed resources.',
398
- inputSchema: z
399
- .object({
400
- workspaceId: workspaceIdSchema,
401
- windowName: z.string().min(1).max(256),
402
- before: GuiPreviewScenarioSchema,
403
- after: GuiPreviewScenarioSchema,
404
- })
405
- .strict(),
406
- outputSchema: guiCompareOutputSchema,
407
- annotations: artifactProducing,
408
- }, async ({ workspaceId, windowName, before, after }, extra) => {
409
- try {
410
- const progress = progressReporter(extra);
411
- await progress.report(0, 4, 'Scanning and rendering both GUI scenarios');
412
- const compared = await studio.compare({
413
- workspaceId,
414
- windowName,
415
- before,
416
- after,
417
- ...(context.principal === undefined ? {} : { principal: context.principal }),
418
- signal: progress.signal,
419
- });
420
- await progress.report(2, 4, 'Bitmap comparison and fidelity evidence complete');
421
- const workspace = engine.resolver.get(workspaceId, context.principal);
422
- const slug = safeSlug(windowName);
423
- const provenance = guiArtifactProvenance(compared.graph, 'gui-scenario-comparison', compared.before, [compared.before, compared.after], {
424
- comparison: {
425
- changedPixels: compared.comparison.changedPixels,
426
- changedRatio: compared.comparison.changedRatio,
427
- },
428
- });
429
- await progress.report(3, 4, 'Storing comparison resources');
430
- const comparisonArtifacts = await engine.artifacts.withAtomicChunkedWrites(workspace, [
431
- {
432
- name: `${slug}-comparison.png`,
433
- mimeType: 'image/png',
434
- content: compared.comparison.png,
435
- provenance: { ...provenance, kind: 'gui-comparison-png' },
436
- },
437
- {
438
- name: `${slug}-comparison.json`,
439
- mimeType: 'application/json',
440
- content: compared.evidenceJson,
441
- provenance: { ...provenance, kind: 'gui-comparison-json' },
442
- },
443
- ], (stored) => Promise.resolve([...stored]), progress.signal);
444
- const result = emptyServiceResult(workspaceId, {
445
- windowName,
446
- beforeScenario: compared.before.scenario.id,
447
- afterScenario: compared.after.scenario.id,
448
- changedPixels: compared.comparison.changedPixels,
449
- changedRatio: compared.comparison.changedRatio,
450
- offlineRepresentation: true,
451
- });
452
- result.code = 'GUI_COMPARED';
453
- setInlineFilesScanned(result, compared.graph.filesScanned);
454
- result.diagnostics = [...compared.before.diagnostics, ...compared.after.diagnostics].slice(0, 100);
455
- result.artifacts = comparisonArtifacts.map(publicArtifactLink);
456
- await progress.report(4, 4, 'GUI comparison complete');
457
- return toolResult(result);
458
- }
459
- catch (error) {
460
- return errorResult(error, workspaceId);
461
- }
462
- });
463
- server.registerTool(autonomous ? 'hoi4.gui_rewrite' : 'hoi4.gui_plan_changes', {
464
- title: autonomous ? 'Rewrite scripted GUI source' : 'Dry-run scripted GUI source changes',
465
- description: autonomous
466
- ? 'Validate, journal, and immediately apply source-preserving GUI source, patch, or declarative helper changes in one call; no follow-up apply call is required.'
467
- : 'Create a source-preserving hash-bound reviewed transaction from explicit GUI source or declarative build-time helpers; it does not apply the transaction.',
362
+ server.registerTool('hoi4.gui_rewrite', {
363
+ title: 'Create or clean up scripted GUI',
364
+ description: 'Apply one validated source, helper, or exact-patch GUI package. Text dependencies use additionalFiles; binary art stays workspace-referenced.',
468
365
  inputSchema: z
469
366
  .object({
470
367
  mode: z.enum(['source', 'helpers', 'patches']),
471
368
  workspaceId: workspaceIdSchema,
472
369
  relativePath: workspaceRelativePathSchema,
473
370
  windowName: z.string().min(1).max(256),
474
- scenario: GuiPreviewScenarioSchema,
475
- source: z.string().max(20_000_000).optional(),
476
- helper: GuiHelperDocumentSchema.optional(),
371
+ scenario: compactGuiScenarioSchema,
372
+ source: z.string().max(SOURCE_MAX_BYTES).optional(),
373
+ helper: compactGuiHelperSchema.optional(),
374
+ additionalFiles: z
375
+ .array(z
376
+ .object({
377
+ relativePath: workspaceRelativePathSchema,
378
+ source: z.string().max(SOURCE_MAX_BYTES),
379
+ })
380
+ .strict())
381
+ .max(GUI_TEXT_PACKAGE_MAX_FILES - 1)
382
+ .optional(),
477
383
  expectedSourceHash: z
478
384
  .string()
479
385
  .regex(/^[a-f0-9]{64}$/u)
@@ -521,17 +427,19 @@ export function registerGuiTools(server, engine, context) {
521
427
  });
522
428
  }
523
429
  if (value.mode === 'patches' &&
524
- (value.source !== undefined || value.helper !== undefined)) {
430
+ (value.source !== undefined ||
431
+ value.helper !== undefined ||
432
+ value.additionalFiles !== undefined)) {
525
433
  context.addIssue({
526
434
  code: 'custom',
527
- message: 'source and helper are forbidden in patches mode',
435
+ message: 'source, helper, and additionalFiles are forbidden in patches mode',
528
436
  });
529
437
  }
530
438
  }),
531
439
  outputSchema: guiPlanOutputSchema,
532
440
  annotations: {
533
441
  readOnlyHint: false,
534
- destructiveHint: autonomous,
442
+ destructiveHint: true,
535
443
  idempotentHint: false,
536
444
  openWorldHint: false,
537
445
  },
@@ -540,7 +448,7 @@ export function registerGuiTools(server, engine, context) {
540
448
  try {
541
449
  requireServerScope(context, 'hoi4:write');
542
450
  const progress = progressReporter(extra);
543
- await progress.report(0, 3, 'Validating GUI dry run');
451
+ await progress.report(0, 3, 'Validating the requested GUI result');
544
452
  const compilation = input.mode === 'helpers' ? compileGuiHelpers(input.helper) : undefined;
545
453
  const plannedTransaction = await studio.planSource({
546
454
  workspaceId,
@@ -550,15 +458,18 @@ export function registerGuiTools(server, engine, context) {
550
458
  expectedSourceHash: input.expectedSourceHash,
551
459
  patches: input.patches,
552
460
  }
553
- : { source: input.mode === 'source' ? input.source : compilation.source }),
461
+ : {
462
+ source: input.mode === 'source' ? input.source : compilation.source,
463
+ ...(input.additionalFiles === undefined
464
+ ? {}
465
+ : { additionalFiles: input.additionalFiles }),
466
+ }),
554
467
  windowName,
555
468
  scenario,
556
469
  ...(context.principal === undefined ? {} : { principal: context.principal }),
557
470
  signal: progress.signal,
558
471
  });
559
- await progress.report(2, 3, autonomous
560
- ? 'Applying and post-validating GUI rewrite'
561
- : 'Finalizing reviewed transaction');
472
+ await progress.report(2, 3, 'Applying and validating the GUI rewrite');
562
473
  const execution = await executePlannedTransaction(engine, plannedTransaction, context.principal, progress.signal);
563
474
  const transaction = execution.transaction;
564
475
  const planned = {
@@ -568,9 +479,8 @@ export function registerGuiTools(server, engine, context) {
568
479
  const result = emptyServiceResult(workspaceId, {
569
480
  mode: input.mode,
570
481
  execution: execution.outcome,
571
- expiresAt: transaction.expiresAt,
572
- transactionFileCount: transaction.files.length,
573
- transactionArtifactCount: transaction.artifacts.length,
482
+ fileCount: transaction.files.length,
483
+ artifactCount: transaction.artifacts.length,
574
484
  ...(planned.compilation === undefined
575
485
  ? {}
576
486
  : {
@@ -585,24 +495,17 @@ export function registerGuiTools(server, engine, context) {
585
495
  ? 'GUI_CHANGES_APPLIED'
586
496
  : execution.outcome === 'unchanged'
587
497
  ? 'GUI_CHANGES_UNCHANGED'
588
- : transaction.validation.passed
589
- ? 'GUI_CHANGES_PLANNED'
590
- : 'GUI_CHANGES_BLOCKED';
591
- setInlineFilesScanned(result, [relativePath]);
498
+ : 'GUI_CHANGES_BLOCKED';
499
+ setInlineFilesScanned(result, [
500
+ relativePath,
501
+ ...(input.additionalFiles ?? []).map(({ relativePath: file }) => file),
502
+ ].sort((left, right) => compareCodeUnits(left, right)));
592
503
  result.proposedFiles = transaction.files
593
504
  .slice(0, 100)
594
505
  .map(({ relativePath: file }) => file);
595
506
  result.changedFiles = transaction.appliedFiles.slice(0, 100);
596
507
  result.diagnostics = transaction.diagnostics.slice(0, 100);
597
- if (autonomous) {
598
- result.artifacts = autonomousResultArtifacts(execution);
599
- }
600
- else {
601
- result.transactionId = transaction.transactionId;
602
- result.planHash = transaction.planHash;
603
- result.artifacts = [transactionResourceLink(transaction)];
604
- result.rollbackStatus = transaction.rollbackStatus;
605
- }
508
+ result.artifacts = autonomousResultArtifacts(execution);
606
509
  result.validation = transaction.validation;
607
510
  result.blockers = transaction.diagnostics
608
511
  .filter(({ severity }) => severity === 'error' || severity === 'blocker')
@@ -614,8 +517,8 @@ export function registerGuiTools(server, engine, context) {
614
517
  await progress.report(3, 3, execution.outcome === 'applied'
615
518
  ? 'GUI rewrite complete'
616
519
  : execution.outcome === 'unchanged'
617
- ? 'GUI source already satisfied the rewrite'
618
- : 'GUI transaction planned');
520
+ ? 'GUI content already satisfied the rewrite'
521
+ : 'GUI rewrite blocked');
619
522
  return toolResult(result);
620
523
  }
621
524
  catch (error) {
@@ -623,4 +526,3 @@ export function registerGuiTools(server, engine, context) {
623
526
  }
624
527
  });
625
528
  }
626
- //# sourceMappingURL=gui.js.map