hoi4-agent-tools 2.8.8 → 2.8.9
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.
- package/CHANGELOG.md +5 -0
- package/dist/hoi4_agent_tools/gui/assets.js +56 -1
- package/dist/hoi4_agent_tools/gui/renderer.js +23 -10
- package/dist/hoi4_agent_tools/version.js +1 -1
- package/docs/gui.md +1 -1
- package/package.json +1 -1
- package/schemas/configuration.schema.json +1 -1
- package/schemas/continuous-focus-palette.schema.json +1 -1
- package/schemas/custom-weighted-pool.schema.json +1 -1
- package/schemas/event-feature-manifest.schema.json +1 -1
- package/schemas/focus-plan.schema.json +1 -1
- package/schemas/focus-planning-sidecar.schema.json +1 -1
- package/schemas/gui-animation-source.schema.json +1 -1
- package/schemas/gui-helper.schema.json +1 -1
- package/schemas/gui-scenario.schema.json +1 -1
- package/schemas/map-operation.schema.json +1 -1
- package/schemas/operation-result.schema.json +1 -1
- package/schemas/probability-analysis-result.schema.json +1 -1
- package/schemas/probability-compare-input.schema.json +1 -1
- package/schemas/probability-evaluate-input.schema.json +1 -1
- package/schemas/probability-inspect-input.schema.json +1 -1
- package/schemas/probability-render-input.schema.json +1 -1
- package/schemas/probability-scenario-set.schema.json +1 -1
- package/schemas/probability-sequence-input.schema.json +1 -1
- package/schemas/probability-simulate-input.schema.json +1 -1
- package/schemas/probability-sweep-input.schema.json +1 -1
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
No unreleased changes.
|
|
6
6
|
|
|
7
|
+
## 2.8.9 - 2026-08-29
|
|
8
|
+
|
|
9
|
+
- Decode BMFont channel roles so installed HOI4 atlases render their face and outline masks separately instead of losing localisation colours.
|
|
10
|
+
- Infer black-on-white and white-on-transparent glyph-mask polarity, preserving support for both vanilla fonts and custom mod fonts.
|
|
11
|
+
|
|
7
12
|
## 2.8.8 - 2026-08-29
|
|
8
13
|
|
|
9
14
|
- Correct GUI font selection so mod definitions override lower-load-order game definitions, language-specific overrides only apply to their language, and extensionless WOFF assets resolve.
|
|
@@ -43,6 +43,7 @@ export function parseBmFont(text) {
|
|
|
43
43
|
let size = 16;
|
|
44
44
|
let lineHeight = 16;
|
|
45
45
|
let base;
|
|
46
|
+
let channelRoles;
|
|
46
47
|
const pages = new Map();
|
|
47
48
|
const characters = new Map();
|
|
48
49
|
const kerning = new Map();
|
|
@@ -66,6 +67,9 @@ export function parseBmFont(text) {
|
|
|
66
67
|
const fields = parseFields(line);
|
|
67
68
|
lineHeight = typeof fields.lineHeight === 'number' ? fields.lineHeight : lineHeight;
|
|
68
69
|
base = typeof fields.base === 'number' ? fields.base : base;
|
|
70
|
+
const roles = [fields.redChnl, fields.greenChnl, fields.blueChnl, fields.alphaChnl];
|
|
71
|
+
if (roles.every((role) => typeof role === 'number'))
|
|
72
|
+
channelRoles = roles;
|
|
69
73
|
recognised = true;
|
|
70
74
|
}
|
|
71
75
|
else if (line.startsWith('page ')) {
|
|
@@ -137,6 +141,7 @@ export function parseBmFont(text) {
|
|
|
137
141
|
pages: [...pages.entries()].sort(([left], [right]) => left - right).map(([, page]) => page),
|
|
138
142
|
characters,
|
|
139
143
|
kerning,
|
|
144
|
+
...(channelRoles === undefined ? {} : { channelRoles }),
|
|
140
145
|
}
|
|
141
146
|
: undefined;
|
|
142
147
|
}
|
|
@@ -476,6 +481,7 @@ export class GuiAssetCatalog {
|
|
|
476
481
|
kind: 'bitmap',
|
|
477
482
|
key: `${entry.sourceFile.sha256}:${codePoint}:${Math.max(1, fontSize)}`,
|
|
478
483
|
dataUri: raster.dataUri,
|
|
484
|
+
...(raster.borderDataUri === undefined ? {} : { borderDataUri: raster.borderDataUri }),
|
|
479
485
|
x: penX + metric.xOffset * scale,
|
|
480
486
|
y: metric.yOffset * scale,
|
|
481
487
|
width: raster.width * scale,
|
|
@@ -612,14 +618,63 @@ export class GuiAssetCatalog {
|
|
|
612
618
|
.ensureAlpha()
|
|
613
619
|
.raw()
|
|
614
620
|
.toBuffer({ resolveWithObject: true });
|
|
615
|
-
const
|
|
621
|
+
const channelRoles = entry.bmfont?.channelRoles;
|
|
622
|
+
let facePixels = extracted.data;
|
|
623
|
+
let borderPixels;
|
|
624
|
+
if (channelRoles?.some((role) => role === 0) === true) {
|
|
625
|
+
facePixels = Buffer.alloc(extracted.data.length);
|
|
626
|
+
borderPixels = channelRoles.some((role) => role === 1)
|
|
627
|
+
? Buffer.alloc(extracted.data.length)
|
|
628
|
+
: undefined;
|
|
629
|
+
let backgroundSamples = 0;
|
|
630
|
+
let backgroundTotal = 0;
|
|
631
|
+
for (let offset = 0; offset < extracted.data.length; offset += 4) {
|
|
632
|
+
const borderCoverage = channelRoles.reduce((maximum, role, channel) => role === 1 ? Math.max(maximum, extracted.data[offset + channel] ?? 0) : maximum, 0);
|
|
633
|
+
if (borderCoverage !== 0)
|
|
634
|
+
continue;
|
|
635
|
+
for (let channel = 0; channel < 4; channel += 1) {
|
|
636
|
+
if (channelRoles[channel] !== 0)
|
|
637
|
+
continue;
|
|
638
|
+
backgroundTotal += extracted.data[offset + channel] ?? 0;
|
|
639
|
+
backgroundSamples += 1;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
const invertedFace = backgroundSamples > 0 && backgroundTotal / backgroundSamples > 127;
|
|
643
|
+
for (let offset = 0; offset < extracted.data.length; offset += 4) {
|
|
644
|
+
let faceCoverage = 0;
|
|
645
|
+
let borderCoverage = 0;
|
|
646
|
+
for (let channel = 0; channel < 4; channel += 1) {
|
|
647
|
+
const sample = extracted.data[offset + channel] ?? 0;
|
|
648
|
+
if (channelRoles[channel] === 0)
|
|
649
|
+
faceCoverage = Math.max(faceCoverage, invertedFace ? 255 - sample : sample);
|
|
650
|
+
if (channelRoles[channel] === 1)
|
|
651
|
+
borderCoverage = Math.max(borderCoverage, sample);
|
|
652
|
+
}
|
|
653
|
+
facePixels[offset] = 255;
|
|
654
|
+
facePixels[offset + 1] = 255;
|
|
655
|
+
facePixels[offset + 2] = 255;
|
|
656
|
+
facePixels[offset + 3] = faceCoverage;
|
|
657
|
+
if (borderPixels !== undefined) {
|
|
658
|
+
borderPixels[offset] = 255;
|
|
659
|
+
borderPixels[offset + 1] = 255;
|
|
660
|
+
borderPixels[offset + 2] = 255;
|
|
661
|
+
borderPixels[offset + 3] = borderCoverage;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
const encodeMask = (pixels) => sharp(pixels, {
|
|
616
666
|
raw: { width: extracted.info.width, height: extracted.info.height, channels: 4 },
|
|
617
667
|
limitInputPixels: RENDER_MAX_DECODED_PIXELS,
|
|
618
668
|
})
|
|
619
669
|
.png({ compressionLevel: 9, adaptiveFiltering: false, palette: false })
|
|
620
670
|
.toBuffer();
|
|
671
|
+
const png = await encodeMask(facePixels);
|
|
672
|
+
const borderPng = borderPixels === undefined ? undefined : await encodeMask(borderPixels);
|
|
621
673
|
return {
|
|
622
674
|
dataUri: `data:image/png;base64,${png.toString('base64')}`,
|
|
675
|
+
...(borderPng === undefined
|
|
676
|
+
? {}
|
|
677
|
+
: { borderDataUri: `data:image/png;base64,${borderPng.toString('base64')}` }),
|
|
623
678
|
width: metric.width,
|
|
624
679
|
height: metric.height,
|
|
625
680
|
};
|
|
@@ -33,8 +33,8 @@ function colourFor(value) {
|
|
|
33
33
|
function outlineDefinitionId(key) {
|
|
34
34
|
return `gui-font-outline-${sha256Bytes(key).slice(0, 20)}`;
|
|
35
35
|
}
|
|
36
|
-
function bitmapDefinitionId(key) {
|
|
37
|
-
return `gui-font-bitmap-${sha256Bytes(key).slice(0, 20)}`;
|
|
36
|
+
function bitmapDefinitionId(key, layer = 'face') {
|
|
37
|
+
return `gui-font-bitmap-${layer === 'face' ? '' : 'border-'}${sha256Bytes(key).slice(0, 20)}`;
|
|
38
38
|
}
|
|
39
39
|
function sceneGlyphDefinitions(scene) {
|
|
40
40
|
const outlines = new Map();
|
|
@@ -47,6 +47,7 @@ function sceneGlyphDefinitions(scene) {
|
|
|
47
47
|
else
|
|
48
48
|
bitmaps.set(glyph.key, {
|
|
49
49
|
dataUri: glyph.dataUri,
|
|
50
|
+
...(glyph.borderDataUri === undefined ? {} : { borderDataUri: glyph.borderDataUri }),
|
|
50
51
|
width: glyph.width,
|
|
51
52
|
height: glyph.height,
|
|
52
53
|
});
|
|
@@ -59,7 +60,7 @@ function sceneGlyphDefinitions(scene) {
|
|
|
59
60
|
.map(([key, glyphPath]) => `<path id="${outlineDefinitionId(key)}" d="${glyphPath}"/>`),
|
|
60
61
|
...[...bitmaps.entries()]
|
|
61
62
|
.sort(([left], [right]) => compareCodeUnits(left, right))
|
|
62
|
-
.map(([key, glyph]) => `<image id="${bitmapDefinitionId(key)}" width="${finite(glyph.width)}" height="${finite(glyph.height)}" href="${glyph.dataUri}" preserveAspectRatio="none"/>`),
|
|
63
|
+
.map(([key, glyph]) => `<image id="${bitmapDefinitionId(key)}" width="${finite(glyph.width)}" height="${finite(glyph.height)}" href="${glyph.dataUri}" preserveAspectRatio="none"/>${glyph.borderDataUri === undefined ? '' : `<image id="${bitmapDefinitionId(key, 'border')}" width="${finite(glyph.width)}" height="${finite(glyph.height)}" href="${glyph.borderDataUri}" preserveAspectRatio="none"/>`}`),
|
|
63
64
|
].join('');
|
|
64
65
|
}
|
|
65
66
|
function bitmapTintMarkup(id, colour, glyphs, rect) {
|
|
@@ -76,7 +77,7 @@ function bitmapTintMarkup(id, colour, glyphs, rect) {
|
|
|
76
77
|
const matrix = `${red} 0 0 0 0 0 ${green} 0 0 0 0 0 ${blue} 0 0 0 0 0 ${opacity} 0`;
|
|
77
78
|
return `<defs><filter id="${id}" filterUnits="userSpaceOnUse" ${rectAttributes(rect)} color-interpolation-filters="sRGB"><feColorMatrix type="matrix" values="${matrix}"/></filter></defs><g filter="url(#${id})">${glyphs}</g>`;
|
|
78
79
|
}
|
|
79
|
-
function actualGlyphMarkup(glyphLine, originX, baseline, horizontalScale) {
|
|
80
|
+
function actualGlyphMarkup(glyphLine, originX, baseline, horizontalScale, bitmapLayer = 'face') {
|
|
80
81
|
if (glyphLine.source === 'fontkit-path')
|
|
81
82
|
return glyphLine.glyphs
|
|
82
83
|
.filter((glyph) => glyph.kind === 'outline')
|
|
@@ -85,7 +86,8 @@ function actualGlyphMarkup(glyphLine, originX, baseline, horizontalScale) {
|
|
|
85
86
|
if (glyphLine.source === 'bmfont-atlas')
|
|
86
87
|
return glyphLine.glyphs
|
|
87
88
|
.filter((glyph) => glyph.kind === 'bitmap')
|
|
88
|
-
.
|
|
89
|
+
.filter((glyph) => bitmapLayer === 'face' || glyph.borderDataUri !== undefined)
|
|
90
|
+
.map((glyph) => `<use href="#${bitmapDefinitionId(glyph.key, bitmapLayer)}" transform="translate(${finite(originX + glyph.x * horizontalScale)} ${finite(baseline + glyph.y - glyphLine.baseline)}) scale(${finite(horizontalScale)} 1)"/>`)
|
|
89
91
|
.join('');
|
|
90
92
|
return '';
|
|
91
93
|
}
|
|
@@ -140,14 +142,19 @@ function renderText(element, toolText) {
|
|
|
140
142
|
definitions.push(`<clipPath id="${clipId}"><rect x="${finite(runX - 0.25)}" y="${finite(lineTop - text.lineHeight)}" width="${finite(run.width * horizontalScale + 0.5)}" height="${finite(text.lineHeight * 3)}"/></clipPath>`);
|
|
141
143
|
const glyphs = actualGlyphMarkup(glyphLine, originX, baseline, horizontalScale);
|
|
142
144
|
if (glyphLine.source === 'bmfont-atlas') {
|
|
143
|
-
const
|
|
145
|
+
const faceFilterId = `gui-font-face-${sha256Bytes(key).slice(0, 20)}`;
|
|
146
|
+
const borderFilterId = `gui-font-border-${sha256Bytes(key).slice(0, 20)}`;
|
|
144
147
|
const runRect = {
|
|
145
148
|
x: runX - 0.25,
|
|
146
149
|
y: lineTop - text.lineHeight,
|
|
147
150
|
width: run.width * horizontalScale + 0.5,
|
|
148
151
|
height: text.lineHeight * 3,
|
|
149
152
|
};
|
|
150
|
-
|
|
153
|
+
const borderGlyphs = actualGlyphMarkup(glyphLine, originX, baseline, horizontalScale, 'border');
|
|
154
|
+
const border = borderGlyphs.length === 0
|
|
155
|
+
? ''
|
|
156
|
+
: bitmapTintMarkup(borderFilterId, text.borderColour ?? '#000000ff', borderGlyphs, runRect);
|
|
157
|
+
return `<g clip-path="url(#${clipId})" data-font-colour="${run.colour}">${border}${bitmapTintMarkup(faceFilterId, run.colour, glyphs, runRect)}</g>`;
|
|
151
158
|
}
|
|
152
159
|
return `<g clip-path="url(#${clipId})" fill="${run.colour}" stroke="${text.borderColour ?? '#12151a'}" data-font-colour="${run.colour}">${glyphs}</g>`;
|
|
153
160
|
});
|
|
@@ -171,11 +178,17 @@ function renderText(element, toolText) {
|
|
|
171
178
|
}
|
|
172
179
|
if (glyphLine?.source === 'bmfont-atlas') {
|
|
173
180
|
const glyphs = actualGlyphMarkup(glyphLine, originX, baseline, horizontalScale);
|
|
174
|
-
|
|
181
|
+
const borderGlyphs = actualGlyphMarkup(glyphLine, originX, baseline, horizontalScale, 'border');
|
|
182
|
+
if (text.colour === undefined && borderGlyphs.length === 0)
|
|
175
183
|
return `<g data-font-sha256="${glyphLine.sourceHash}">${glyphs}${inlineIconMarkup}</g>`;
|
|
176
|
-
const
|
|
184
|
+
const colour = text.colour ?? '#ffffffff';
|
|
185
|
+
const faceFilterId = `gui-font-face-${sha256Bytes(`${element.id}:${index}:${colour}`).slice(0, 20)}`;
|
|
186
|
+
const borderFilterId = `gui-font-border-${sha256Bytes(`${element.id}:${index}:${text.borderColour ?? '#000000ff'}`).slice(0, 20)}`;
|
|
177
187
|
const lineRect = { x: originX, y: lineTop, width, height: text.lineHeight };
|
|
178
|
-
|
|
188
|
+
const border = borderGlyphs.length === 0
|
|
189
|
+
? ''
|
|
190
|
+
: bitmapTintMarkup(borderFilterId, text.borderColour ?? '#000000ff', borderGlyphs, lineRect);
|
|
191
|
+
return `<g data-font-sha256="${glyphLine.sourceHash}" data-font-colour="${colour}">${border}${bitmapTintMarkup(faceFilterId, colour, glyphs, lineRect)}${inlineIconMarkup}</g>`;
|
|
179
192
|
}
|
|
180
193
|
const visibleLine = line.replace(/[\uE000-\uF8FF]/gu, ' ');
|
|
181
194
|
return `<g>${toolText.render(visibleLine, {
|
|
@@ -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 = '2.8.
|
|
3
|
+
export const PACKAGE_VERSION = '2.8.9';
|
|
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
|
@@ -33,7 +33,7 @@ Inspection checks missing assets and localisation, invalid sizes, overlap, clipp
|
|
|
33
33
|
|
|
34
34
|
The renderer resolves sprites and fonts through the complete mod, dependency, and installed-game load order. Mod windows therefore render ordinary vanilla sprites, tiled vanilla panels, progress bars, masked shields, button frames, and localisation icons such as `£command_power` without copying game assets into the mod. Case differences in GFX and font identifiers do not prevent a valid asset from resolving.
|
|
35
35
|
|
|
36
|
-
Bitmap text uses the language-appropriate HOI4 font definition and its real glyph atlas. Header, serif, compact, typewriter, black, inverted, and other declared faces keep their own glyph shapes, native metrics, face colour, border colour, language override, and font-specific `textcolors` palette. HOI4 localisation colour runs such as `§Y` and `§R`
|
|
36
|
+
Bitmap text uses the language-appropriate HOI4 font definition and its real glyph atlas. Header, serif, compact, typewriter, black, inverted, and other declared faces keep their own glyph shapes, native metrics, face colour, border colour, language override, and font-specific `textcolors` palette. The renderer reads BMFont channel roles, separates face and outline coverage, and recognizes both vanilla black-on-white masks and conventional white-on-transparent custom masks. HOI4 localisation colour runs such as `§Y` and `§R` therefore colour the glyph face while retaining its sharp antialiasing and declared border instead of flattening the glyph into a blurred monochrome mask or switching to the tool font. The default language uses the base font rather than an unrelated language override, and the renderer recognizes installed-game atlases whose filename omits a page suffix declared by the matching `.fnt` file.
|
|
37
37
|
|
|
38
38
|
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.
|
|
39
39
|
|
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": "2.8.
|
|
4
|
+
"version": "2.8.9",
|
|
5
5
|
"description": "Analyze HOI4 events, tech trees, AI weights, and MTTH; build focus trees, GUIs, and maps.",
|
|
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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/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/v2.8.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v2.8.9/schemas/probability-sweep-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": "Analyze HOI4 events, tech trees, AI weights, and MTTH; build focus trees, GUIs, and maps.",
|
|
6
|
-
"version": "2.8.
|
|
6
|
+
"version": "2.8.9",
|
|
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": "2.8.
|
|
16
|
+
"version": "2.8.9",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
19
19
|
}
|