hoi4-agent-tools 4.0.3 → 4.0.5

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 (64) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/hoi4_agent_tools/core/clausewitz-evaluation.js +5 -3
  3. package/dist/hoi4_agent_tools/core/condition-evaluator.js +5 -1
  4. package/dist/hoi4_agent_tools/core/index.js +11 -0
  5. package/dist/hoi4_agent_tools/core/job-executor.js +3 -1
  6. package/dist/hoi4_agent_tools/core/job-worker-host.js +1 -1
  7. package/dist/hoi4_agent_tools/core/render-progress.js +7 -0
  8. package/dist/hoi4_agent_tools/gui/layout.js +76 -33
  9. package/dist/hoi4_agent_tools/gui/native-state.js +40 -1
  10. package/dist/hoi4_agent_tools/gui/scenario-generator.js +3 -3
  11. package/dist/hoi4_agent_tools/gui/source-graph.js +67 -32
  12. package/dist/hoi4_agent_tools/gui/studio.js +101 -32
  13. package/dist/hoi4_agent_tools/gui/tool-operations.js +8 -2
  14. package/dist/hoi4_agent_tools/mcp/server/create-modern-operations.js +2 -1
  15. package/dist/hoi4_agent_tools/mcp/server/job-task-store.js +3 -1
  16. package/dist/hoi4_agent_tools/mcp/server/modern-tasks.js +2 -0
  17. package/dist/hoi4_agent_tools/mcp/server/progress.js +12 -0
  18. package/dist/hoi4_agent_tools/mcp/server/request-lifecycle.js +2 -2
  19. package/dist/hoi4_agent_tools/mcp/server/task-request-context.js +5 -2
  20. package/dist/hoi4_agent_tools/technology/job-operations.js +1 -0
  21. package/dist/hoi4_agent_tools/technology/service.js +18 -37
  22. package/dist/hoi4_agent_tools/version.js +1 -1
  23. package/docs/gui.md +14 -2
  24. package/docs/technology.md +2 -0
  25. package/npm-shrinkwrap.json +2 -2
  26. package/package.json +1 -1
  27. package/schemas/configuration.schema.json +1 -1
  28. package/schemas/continuous-focus-palette.schema.json +1 -1
  29. package/schemas/custom-weighted-pool.schema.json +1 -1
  30. package/schemas/decision-inspect-input.schema.json +1 -1
  31. package/schemas/error-log-input.schema.json +1 -1
  32. package/schemas/event-feature-manifest.schema.json +1 -1
  33. package/schemas/focus-plan.schema.json +1 -1
  34. package/schemas/focus-planning-sidecar.schema.json +1 -1
  35. package/schemas/gui-animation-source.schema.json +1 -1
  36. package/schemas/gui-helper.schema.json +1 -1
  37. package/schemas/gui-scenario.schema.json +1 -1
  38. package/schemas/helper-expansion-request.schema.json +1 -1
  39. package/schemas/helper-expansion-summary.schema.json +1 -1
  40. package/schemas/impact-inspect-input.schema.json +1 -1
  41. package/schemas/map-operation.schema.json +1 -1
  42. package/schemas/mechanic-test-input.schema.json +1 -1
  43. package/schemas/mod-index-input.schema.json +1 -1
  44. package/schemas/operation-result.schema.json +1 -1
  45. package/schemas/package-check-input.schema.json +1 -1
  46. package/schemas/package-manifest.schema.json +1 -1
  47. package/schemas/probability-analysis-result.schema.json +1 -1
  48. package/schemas/probability-compare-input.schema.json +1 -1
  49. package/schemas/probability-evaluate-input.schema.json +1 -1
  50. package/schemas/probability-inspect-input.schema.json +1 -1
  51. package/schemas/probability-render-input.schema.json +1 -1
  52. package/schemas/probability-scenario-set.schema.json +1 -1
  53. package/schemas/probability-sequence-input.schema.json +1 -1
  54. package/schemas/probability-simulate-input.schema.json +1 -1
  55. package/schemas/probability-sweep-input.schema.json +1 -1
  56. package/schemas/reference-context-input.schema.json +1 -1
  57. package/schemas/reference-read-input.schema.json +1 -1
  58. package/schemas/reference-search-input.schema.json +1 -1
  59. package/schemas/scenario-suite.schema.json +1 -1
  60. package/schemas/scenario-test-input.schema.json +1 -1
  61. package/schemas/script-validate-input.schema.json +1 -1
  62. package/schemas/shared-scenario.schema.json +1 -1
  63. package/schemas/source-lookup-input.schema.json +1 -1
  64. package/server.json +2 -2
@@ -4,6 +4,7 @@ import { technologyHelperInventory } from './helper-expansion.js';
4
4
  import { clearSemanticDependencies } from '../core/semantic-dependencies.js';
5
5
  import { canonicalJson, compareCodeUnits, hashCanonical, sha256Bytes } from '../core/canonical.js';
6
6
  import { boundedSourceHashEvidence, } from '../core/artifacts.js';
7
+ import { renderStage } from '../core/render-progress.js';
7
8
  import { RenderBudget } from '../core/render-budget.js';
8
9
  import { ServiceError } from '../core/result.js';
9
10
  import { SOURCE_MAX_BYTES } from '../core/source/index.js';
@@ -96,43 +97,17 @@ function technologyScanPatterns(workspace) {
96
97
  ...under(roots.localisation, '*.{yml,yaml}'),
97
98
  ].sort(compareCodeUnits);
98
99
  }
99
- function recomputeTechnologyShadowing(files) {
100
- const groups = new Map();
101
- for (const file of files) {
102
- delete file.shadowedBy;
103
- const key = file.relativePath.replaceAll('\\', '/').toLowerCase();
104
- const group = groups.get(key) ?? [];
105
- group.push(file);
106
- groups.set(key, group);
107
- }
108
- for (const group of groups.values()) {
109
- group.sort((left, right) => right.loadOrder - left.loadOrder || compareCodeUnits(left.displayPath, right.displayPath));
110
- const active = group[0];
111
- for (const shadowed of group.slice(1))
112
- shadowed.shadowedBy = active.displayPath;
113
- }
114
- }
115
- async function scanTechnologySources(engine, workspaceId, workspace, principal, signal) {
116
- const patterns = technologyScanPatterns(workspace);
117
- const scans = await Promise.all([
118
- engine.scan(workspaceId, { patterns, rootKinds: ['mod', 'dependency', 'fixture'] }, principal, signal),
119
- ...(workspace.roots.some(({ kind }) => kind === 'game')
120
- ? [engine.scan(workspaceId, { patterns, rootKinds: ['game', 'dlc'] }, principal, signal)]
121
- : []),
122
- ]);
123
- const files = scans.flatMap(({ files }) => files.map((file) => ({ ...file })));
124
- recomputeTechnologyShadowing(files);
125
- files.sort((left, right) => left.loadOrder - right.loadOrder || compareCodeUnits(left.displayPath, right.displayPath));
126
- const index = engine.indexFiles(files);
100
+ async function scanTechnologySources(engine, workspaceId, workspace, principal, signal, renderOnly = false) {
101
+ const patterns = technologyScanPatterns(workspace).filter((pattern) => !renderOnly ||
102
+ !/^(?:events|history|common\/(?:national_focus|decisions|scripted_effects|on_actions|ideas|characters))\//u.test(pattern));
103
+ const snapshot = await engine.scan(workspaceId, { patterns }, principal, signal);
127
104
  return {
128
- workspaceId,
129
- revision: hashCanonical(files.map(({ displayPath, loadOrder, sha256 }) => ({ displayPath, loadOrder, sha256 }))),
130
- files,
131
- index,
132
- complete: scans.every(({ complete }) => complete) && index.complete,
133
- skippedSourceCount: index.skippedSourceCount,
134
- skippedSources: index.skippedSources,
135
- diagnostics: [...scans.flatMap(({ diagnostics }) => diagnostics), ...index.diagnostics],
105
+ ...snapshot,
106
+ revision: hashCanonical(snapshot.files.map(({ displayPath, loadOrder, sha256 }) => ({
107
+ displayPath,
108
+ loadOrder,
109
+ sha256,
110
+ }))),
136
111
  };
137
112
  }
138
113
  function activeTechnologySprite(spriteName, spritePath, sprites) {
@@ -472,7 +447,7 @@ export class TechnologyTreeViewer {
472
447
  const workspace = this.engine.resolver.get(workspaceId, options.principal);
473
448
  const generation = this.engine.generation(workspaceId);
474
449
  const cached = this.#state.current.get(workspaceId);
475
- const snapshot = await scanTechnologySources(this.engine, workspaceId, workspace, options.principal, options.signal);
450
+ const snapshot = await scanTechnologySources(this.engine, workspaceId, workspace, options.principal, options.signal, options.renderOnly);
476
451
  const analysisMode = workspace.roots.some(({ kind }) => kind === 'game') || snapshot.files.length > 1_000
477
452
  ? 'focused'
478
453
  : undefined;
@@ -526,6 +501,8 @@ export class TechnologyTreeViewer {
526
501
  ...(analysisMode === undefined ? {} : { analysisMode }),
527
502
  ...(options.signal === undefined ? {} : { signal: options.signal }),
528
503
  });
504
+ if (options.renderOnly === true)
505
+ graph.analysisBoundary.assumptions.push('Folder renders scan technology definitions, layouts, unlock targets and assets; inbound grants and references require technology inspection.');
529
506
  this.#state.current.set(workspaceId, { generation, snapshot, assetFiles, graph });
530
507
  rememberGraph(this.#state, graph);
531
508
  return graph;
@@ -650,7 +627,9 @@ export class TechnologyTreeViewer {
650
627
  };
651
628
  }
652
629
  async renderAndStore(input) {
630
+ await renderStage(input, 'Indexing technology view sources');
653
631
  const graph = await this.scan(input.workspaceId, {
632
+ renderOnly: input.view === 'folder',
654
633
  ...(input.refresh === undefined ? {} : { refresh: input.refresh }),
655
634
  ...(input.principal === undefined ? {} : { principal: input.principal }),
656
635
  ...(input.signal === undefined ? {} : { signal: input.signal }),
@@ -684,9 +663,11 @@ export class TechnologyTreeViewer {
684
663
  maxNodes: 1_000,
685
664
  })),
686
665
  ]);
666
+ await renderStage(input, 'Decoding selected technology assets');
687
667
  const { dataUris: iconDataUris, dimensions: spriteDimensions } = await resolveTechnologyIconDataUris(cached, requestedIconSprites, budget, input.signal);
688
668
  renderOptions.iconDataUris = iconDataUris;
689
669
  renderOptions.spriteDimensions = spriteDimensions;
670
+ await renderStage(input, 'Laying out and rasterizing technology view');
690
671
  const render = await renderTechnologyGraph(graph, renderOptions);
691
672
  const focused = [];
692
673
  for (const folder of focusedFolders) {
@@ -1,6 +1,6 @@
1
1
  import { LATEST_PROTOCOL_VERSION } from '@modelcontextprotocol/sdk/types.js';
2
2
  export const PACKAGE_NAME = 'hoi4-agent-tools';
3
- export const PACKAGE_VERSION = '4.0.3';
3
+ export const PACKAGE_VERSION = '4.0.5';
4
4
  export const MCP_PROTOCOL_VERSION = LATEST_PROTOCOL_VERSION;
5
5
  export const CONFIG_VERSION = 1;
6
6
  export const TRANSACTION_VERSION = 1;
package/docs/gui.md CHANGED
@@ -11,6 +11,14 @@ Dashed amber regions are potential controls with unresolved visibility or enabli
11
11
  The scene retains the reason so the agent can supply the missing facts instead of guessing.
12
12
  These are source-model results, not proof of native click execution.
13
13
 
14
+ ## Render one supplied state
15
+
16
+ For a focused render, use `states: []`, one `resolutions` entry matching `scenario.resolution`, and the flags, variables and list rows needed to open the window. Inspection and rendering preserve the supplied scenario; `generatedScenarios` is opt-in. A full state/resolution matrix still runs when those arrays are omitted.
17
+
18
+ Progress reports scanning, graph construction, selected asset loading, layout and rasterization. Deadline errors name the last phase. Missing texture fallback searches configured graphics/interface roots and fonts, never documentation or unrelated workspace folders. Move assets under a configured asset root if they previously depended on a workspace-wide basename search.
19
+
20
+ Nested `$KEY$` localisation references resolve across files. Scenario values can supply runtime tokens; cycles, more than 16 nested substitutions, and missing values remain unresolved. Animated sprites use `animationTimeSeconds` (and `visibleTimeSeconds` for play-on-show timing); each PNG is a deterministic frame at that time, not an animation.
21
+
14
22
  ## Preview immediate tooltip text
15
23
 
16
24
  An explicit tooltip request uses a visible element's `pdx_tooltip` localisation key. Supply `tooltip.target` with its inspected instance ID or a unique element name, plus viewport `x`, `y`, `width` and `padding` values.
@@ -67,7 +75,7 @@ Bitmap text uses the language-appropriate HOI4 font definition and its real glyp
67
75
 
68
76
  `uiScale` is the in-game UI scale, not an image zoom. Use `1` for native pixel geometry at any screen resolution. Bitmap-font glyphs come directly from the real atlas without a sharpening, threshold, opacity-gain, or reconstructed-edge pass. Native-size coverage is unchanged. Enlarged coverage uses restrained Lanczos2 interpolation to avoid blocky pixel replication without running a sharpening filter. Downscaling uses nearest-neighbour sampling. Bitmap placement is snapped to the output pixel grid, and bitmap colours use alpha masks, so native, fractional-scale, local, and VPS renders remain deterministic.
69
77
 
70
- Layout follows Clausewitz orientation and element-origin anchors, including `CENTER_LEFT`, `CENTER_RIGHT`, `CENTER_UP`, `CENTER_DOWN`, `origo`, `centerposition`, inherited container coordinate origins, local scale, and both `%` and `%%` relative dimensions. Text boxes use native font metrics together with `maxWidth`, `maxHeight`, alignment, wrapping, and `fixedsize` clipping. Cornered tile sprites use fixed nine-slice borders and optional center tiling; progress bars composite their filled and background textures; masked shields composite their background and mask textures.
78
+ Layout follows Clausewitz orientation and element-origin anchors, including `CENTER_LEFT`, `CENTER_RIGHT`, `CENTER_UP`, `CENTER_DOWN`, `origo`, `centerposition`, local scale, and both `%` and `%%` relative dimensions. Children default to their parent's upper-left corner independently of the parent's `origo`. Text boxes use native font metrics together with `maxWidth`, `maxHeight`, alignment, wrapping, and `fixedsize` clipping. Cornered tile sprites use fixed nine-slice borders and optional center tiling; progress bars composite their filled and background textures; masked shields composite their background and mask textures.
71
79
 
72
80
  A single-percent dimension is a proportional extent; a double-percent dimension names the far edge in the parent and subtracts the element's resolved anchor position.
73
81
  For example, a centered root at y=423 with `height=85%%` in a 1440-pixel viewport ends at y=1224 and has height 801, rather than height 1224.
@@ -92,7 +100,11 @@ Supply `values["container.scrollX"]` and `values["container.scrollY"]` in native
92
100
  The existing `scrollOffsets` map remains a vertical-offset shorthand, including names with row-instance suffixes.
93
101
  `minimum-value` and `maximum-value` scenarios sample content endpoints.
94
102
  The scene element's `scroll` record exposes its viewport, measured content dimensions, applied offsets and maximum offsets in output pixels after UI scaling.
95
- Missing, wrong-axis, duplicate or privately scoped scrollbar references and unclipped/background-less containers produce explicit findings rather than invented templates.
103
+ Missing, wrong-axis, duplicate or privately scoped scrollbar references, nonpositive viewport sizes and explicitly unclipped containers produce findings rather than invented templates. An attached scrollbar establishes a clipped viewport by default, without requiring a decorative background; explicit `clipping = no` is diagnosed. A public template remains usable when an unrelated private child has the same name.
104
+
105
+ Native `dropDownBoxType` controls retain their `expandButton` and `expandedWindow` children. Expanded panels default to closed. Set `scenario.values["dropdown_name.expanded"] = true` to open one dropdown at its settled `show_position`; explicit panel visibility also works. A panel source ID can distinguish repeated `expanded_window` names. Its background, descendants, clipping and attached scrollbar share the panel's visibility. Animation between open and closed positions is not simulated.
106
+
107
+ `countrydivisiondesignerview` defaults to the ordinary division branch with its native selector panels closed. Set `scenario.values["countrydivisiondesignerview.hq"] = true` for the HQ branch. Set `scenario.values["countrydivisiondesignerview.panel"]` to `designerregimentswindow`, `division_equipment_view`, `div_templ_custom_icon_view`, `div_template_select_model` or `niche_icon_selector` to open that selector in front of ordinary root controls. Explicit element visibility or `name.visible` values override these defaults. The fidelity report identifies this preview convention; engine-populated rows, statistics and conditional icons still need explicit scenario bindings. No live division state is inferred.
96
108
 
97
109
  Scripted-GUI composition follows `parent_scripted_gui` chains even when the linked child window is a top-level sibling in the `.gui` file. Literal `always = yes` and `always = no` visibility and click-enabled blocks are applied automatically. A scenario's `values` object supplies concrete runtime values in one place: variable names resolve numeric text, scripted-localisation names resolve dynamic labels, a progress-bar element name sets its fill value, and element keys ending in `.image`, `.frame`, `.x`, `.y`, `.visible`, or `.enabled` update that visual property. Scripted-GUI property expressions such as `image = "[GetMeterSprite]"` or `x = meter_fill_width` consume matching scenario values automatically. Dynamic text is parsed after scenario and scripted-localisation substitution, so a runtime string containing `£command_power` or `£[GetResourceIcon]` renders the resolved inline HOI4 text icon instead of literal marker text. Dynamic lists instantiate their declared `entry_container` or `country_scope_entry_container`; each scenario row can select the country template with `countryScope`, choose an explicit `entryContainer`, provide `countryTag` and `ideology` for `GetFlag`, and supply row-scoped text, image, frame, position, visibility, and enabled values. Masked country sprites use the actual mask and overlay dimensions, so custom flag sizes are discovered from GFX assets rather than assumed by the renderer.
98
110
 
@@ -127,3 +127,5 @@ The comparison render is produced unless `render` is `false`; `maxRenderNodes` r
127
127
  For an unfamiliar technology system, an agent can scan it, discover folders, trace or explain the relevant path, render only the needed views, edit Clausewitz source through its normal repository workflow, and compare the result. The same graph and revision back every query and artifact, so folder placement, dependency structure, unlock impact, and cross-file references stay aligned.
128
128
 
129
129
  This is static analysis. Exact runtime research time, AI choices, balance, arbitrary dynamic grants, and unsupported visibility behavior are not inferred. Dynamic expressions remain in the results with their confidence and blockers, and no destination is invented.
130
+
131
+ Folder rendering scans technology definitions, GUI layouts, unlock targets, localisation and assets. It omits inbound event, decision, focus and history references; use `hoi4.tech_inspect` for grants, bonuses, impact and complete reference evidence. The render manifest records this source scope.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "hoi4-agent-tools",
3
- "version": "4.0.3",
3
+ "version": "4.0.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "hoi4-agent-tools",
9
- "version": "4.0.3",
9
+ "version": "4.0.5",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@fontsource-variable/roboto": "5.3.0",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hoi4-agent-tools",
3
3
  "mcpName": "io.github.klimPaskov/hoi4-agent-tools",
4
- "version": "4.0.3",
4
+ "version": "4.0.5",
5
5
  "description": "Build HOI4 mods: focus trees, events, decisions, worlds, GUI previews, docs and AI balance.",
6
6
  "type": "module",
7
7
  "license": "Apache-2.0",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/configuration.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/configuration.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/continuous-focus-palette.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/continuous-focus-palette.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/custom-weighted-pool.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/custom-weighted-pool.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/decision-inspect-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/decision-inspect-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/error-log-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/error-log-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/event-feature-manifest.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/event-feature-manifest.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/focus-plan.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/focus-plan.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/focus-planning-sidecar.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/focus-planning-sidecar.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/gui-animation-source.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/gui-animation-source.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/gui-helper.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/gui-helper.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/gui-scenario.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/gui-scenario.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/helper-expansion-request.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/helper-expansion-request.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/helper-expansion-summary.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/helper-expansion-summary.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/impact-inspect-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/impact-inspect-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/map-operation.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/map-operation.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "oneOf": [
5
5
  {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/mechanic-test-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/mechanic-test-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/mod-index-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/mod-index-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/operation-result.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/operation-result.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/package-check-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/package-check-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/package-manifest.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/package-manifest.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-analysis-result.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-analysis-result.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-compare-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-compare-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-evaluate-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-evaluate-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-inspect-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-inspect-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-render-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-render-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-scenario-set.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-scenario-set.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-sequence-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-sequence-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-simulate-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-simulate-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/probability-sweep-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/probability-sweep-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/reference-context-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/reference-context-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/reference-read-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/reference-read-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/reference-search-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/reference-search-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/scenario-suite.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/scenario-suite.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/scenario-test-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/scenario-test-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/script-validate-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/script-validate-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/shared-scenario.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/shared-scenario.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.3/schemas/source-lookup-input.schema.json",
2
+ "$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.0.5/schemas/source-lookup-input.schema.json",
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "type": "object",
5
5
  "properties": {
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.klimPaskov/hoi4-agent-tools",
4
4
  "title": "HOI4 Agent Tools",
5
5
  "description": "Build HOI4 mods: focus trees, events, decisions, worlds, GUI previews, docs and AI balance.",
6
- "version": "4.0.3",
6
+ "version": "4.0.5",
7
7
  "repository": {
8
8
  "url": "https://github.com/klimPaskov/hoi4-agent-tools",
9
9
  "source": "github"
@@ -13,7 +13,7 @@
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "hoi4-agent-tools",
16
- "version": "4.0.3",
16
+ "version": "4.0.5",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  }