hoi4-agent-tools 4.6.1 → 4.6.2
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 +8 -0
- package/dist/hoi4_agent_tools/map/partition-provinces.js +16 -3
- package/dist/hoi4_agent_tools/map/partition.js +2 -1
- package/dist/hoi4_agent_tools/map/tool-operations.js +10 -2
- package/dist/hoi4_agent_tools/map/world-realms.js +139 -0
- package/dist/hoi4_agent_tools/map/world.js +72 -21
- package/dist/hoi4_agent_tools/schemas/map.js +1 -1
- package/dist/hoi4_agent_tools/version.js +1 -1
- package/docs/map.md +2 -0
- package/npm-shrinkwrap.json +38 -32
- package/package.json +4 -4
- 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/decision-inspect-input.schema.json +1 -1
- package/schemas/error-log-input.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/geography-model.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/helper-expansion-request.schema.json +1 -1
- package/schemas/helper-expansion-summary.schema.json +1 -1
- package/schemas/impact-inspect-input.schema.json +1 -1
- package/schemas/map-operation.schema.json +2 -2
- package/schemas/mechanic-test-input.schema.json +1 -1
- package/schemas/mod-index-input.schema.json +1 -1
- package/schemas/operation-result.schema.json +1 -1
- package/schemas/package-check-input.schema.json +1 -1
- package/schemas/package-manifest.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/schemas/reference-context-input.schema.json +1 -1
- package/schemas/reference-read-input.schema.json +1 -1
- package/schemas/reference-search-input.schema.json +1 -1
- package/schemas/reference-sheets.schema.json +1 -1
- package/schemas/scenario-suite.schema.json +1 -1
- package/schemas/scenario-test-input.schema.json +1 -1
- package/schemas/script-validate-input.schema.json +1 -1
- package/schemas/shared-scenario.schema.json +1 -1
- package/schemas/source-lookup-input.schema.json +1 -1
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.6.2 - 2026-10-31
|
|
4
|
+
|
|
5
|
+
- Check the points of workspace countries together and give each capital a province (ADR 0073). `create_world` now reports every capital or seed that lies outside the world or in water (with the nearest land), in the unowned area, an own exclusion or another realm's claim, or within 10 pixels of a point of another realm, in one error (`MAP_WORLD_REALM_POINTS_INVALID`, `details.problems`; a single problem keeps its own code), before the relief synthesis starts. `create_world.synthesisCheck` runs the same check and lists the points beside the failing rivers (`data.synthesisCheck.realmPoints`). In the feature-aware partition every capital and seed is a province seed of its own, so capitals that are 20 to 40 pixels apart no longer fail with `MAP_WORLD_REALM_POINT_CONFLICT`. Feature-aware worlds with workspace countries get a slightly different province partition; other worlds are unchanged.
|
|
6
|
+
|
|
7
|
+
## Unreleased
|
|
8
|
+
|
|
9
|
+
- Raise the pinned overrides of three transitive dependencies to their fixed releases, clearing every `npm audit --omit=dev` advisory: `fast-uri` 3.1.9 (GHSA-w74x-v6f9-j3xg, GHSA-xhq7-xmqj-769h, GHSA-wjr9-j795-jxcr, GHSA-333x-w4r6-6crp), `hono` 4.13.13 (GHSA-5r4p-p66f-jhc7) and `ip-address` 10.7.4 (GHSA-rxp7-6hxx-x8q5). No source or schema change.
|
|
10
|
+
|
|
3
11
|
## 4.6.1 - 2026-10-26
|
|
4
12
|
|
|
5
13
|
- Stop flagging `constant:<category>.<key>` script-constant reads as scoped temporary-variable reads (`KNOWN_MISTAKE_TEMP_VARIABLE_SCOPE_PREFIX`).
|
|
@@ -653,17 +653,30 @@ export function partitionProvinces(input) {
|
|
|
653
653
|
seeded[pixel] = 1;
|
|
654
654
|
}
|
|
655
655
|
};
|
|
656
|
-
|
|
656
|
+
const landMinArea = Math.max(tuning.minProvincePixels, plan.minLand * 0.85);
|
|
657
|
+
const pins = (input.pins ?? []).filter((pixel) => kind[pixel] === LAND);
|
|
658
|
+
addSeeds(Int32Array.from(pins));
|
|
659
|
+
// Land seeds within a province radius of a pin would cut the pinned province in two.
|
|
660
|
+
const pinRadius = Math.max(4, 0.6 * Math.sqrt(landMinArea));
|
|
661
|
+
const pinPoints = pins.map((pixel) => [pixel % width, Math.floor(pixel / width)]);
|
|
662
|
+
const landSeeds = placeSeeds({
|
|
657
663
|
width,
|
|
658
664
|
height,
|
|
659
665
|
kind,
|
|
660
666
|
wanted: LAND,
|
|
661
667
|
areaAt: plan.land,
|
|
662
|
-
minArea:
|
|
668
|
+
minArea: landMinArea,
|
|
663
669
|
barrier,
|
|
664
670
|
seed: input.seed,
|
|
665
671
|
salt: 17,
|
|
666
|
-
})
|
|
672
|
+
});
|
|
673
|
+
addSeeds(pins.length === 0
|
|
674
|
+
? landSeeds
|
|
675
|
+
: landSeeds.filter((pixel) => {
|
|
676
|
+
const x = pixel % width;
|
|
677
|
+
const y = Math.floor(pixel / width);
|
|
678
|
+
return !pinPoints.some(([px, py]) => Math.hypot(px - x, py - y) < pinRadius);
|
|
679
|
+
}));
|
|
667
680
|
addSeeds(placeSeeds({
|
|
668
681
|
width,
|
|
669
682
|
height,
|
|
@@ -85,10 +85,11 @@ export function partitionWorld(input) {
|
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
/** Resolve tuning against a request and partition in one call. */
|
|
88
|
-
export function partitionWorldFromRequest(fields, seed, tuning, base, signal) {
|
|
88
|
+
export function partitionWorldFromRequest(fields, seed, tuning, base, signal, pins) {
|
|
89
89
|
return partitionWorld({
|
|
90
90
|
fields,
|
|
91
91
|
seed,
|
|
92
|
+
pins,
|
|
92
93
|
signal,
|
|
93
94
|
tuning: resolvePartitionTuning(tuning, {
|
|
94
95
|
...base,
|
|
@@ -521,8 +521,14 @@ async function previewSynthesisCheck(nudger, input, context) {
|
|
|
521
521
|
});
|
|
522
522
|
const blocked = checked.diagnostics.filter(({ severity }) => severity === 'error' || severity === 'blocker');
|
|
523
523
|
const valid = blocked.length === 0 && checked.plan.blockers.length === 0;
|
|
524
|
-
|
|
525
|
-
|
|
524
|
+
// Failures of the synthesis can sit inside a realm-point error that reports both (ADR 0073).
|
|
525
|
+
const synthesisDetails = (details) => details?.synthesis?.details ?? details;
|
|
526
|
+
const rivers = checked.diagnostics.flatMap(({ details }) => {
|
|
527
|
+
const found = synthesisDetails(details)?.rivers;
|
|
528
|
+
return Array.isArray(found) ? found : [];
|
|
529
|
+
});
|
|
530
|
+
const realmPoints = checked.diagnostics.flatMap(({ code, details }) => code.startsWith('MAP_WORLD_REALM_POINT') && Array.isArray(details?.problems)
|
|
531
|
+
? details.problems
|
|
526
532
|
: []);
|
|
527
533
|
// Drawn rivers are authoritative: crossings of relief they cut through are warnings (ADR 0071).
|
|
528
534
|
const carved = checked.diagnostics.flatMap(({ code, details }) => code === 'MAP_RIVER_CARVED_CROSSING' && details !== undefined ? [details] : []);
|
|
@@ -546,6 +552,8 @@ async function previewSynthesisCheck(nudger, input, context) {
|
|
|
546
552
|
rivers: rivers.slice(0, 200),
|
|
547
553
|
carvedCrossings: carved.length,
|
|
548
554
|
crossings: carved.slice(0, 200),
|
|
555
|
+
realmPointProblems: realmPoints.length,
|
|
556
|
+
realmPoints: realmPoints.slice(0, 500),
|
|
549
557
|
},
|
|
550
558
|
});
|
|
551
559
|
result.status = valid ? 'ok' : 'blocked';
|
|
@@ -51,6 +51,145 @@ function pointProvince(tag, role, point, raster) {
|
|
|
51
51
|
});
|
|
52
52
|
return province;
|
|
53
53
|
}
|
|
54
|
+
/** Two points of different realms closer than this many pixels cannot get a province each. */
|
|
55
|
+
export const REALM_POINT_MIN_SEPARATION_PX = 10;
|
|
56
|
+
/** How far from a point in water the nearest land is searched, in pixels. */
|
|
57
|
+
const NEAREST_LAND_REACH_PX = 80;
|
|
58
|
+
/**
|
|
59
|
+
* Check every capital and seed against the generated surface before any province exists, and
|
|
60
|
+
* return all problems at once: a point outside the frame or in water (with the nearest land), a
|
|
61
|
+
* point inside the unowned area, its own exclusion or another realm's claim, and points of
|
|
62
|
+
* different realms closer than `REALM_POINT_MIN_SEPARATION_PX`. Points of one realm may share a
|
|
63
|
+
* province; points of different realms each get their own province (ADR 0073).
|
|
64
|
+
*/
|
|
65
|
+
export function checkRealmPoints(realms, raster) {
|
|
66
|
+
const problems = [];
|
|
67
|
+
const points = [];
|
|
68
|
+
for (const [index, realm] of realms.list.entries()) {
|
|
69
|
+
points.push({ tag: realm.tag, role: 'capital', point: realm.capital, index });
|
|
70
|
+
for (const seed of realm.seeds ?? [])
|
|
71
|
+
points.push({ tag: realm.tag, role: 'seed', point: seed, index });
|
|
72
|
+
}
|
|
73
|
+
const nearestLand = (point) => {
|
|
74
|
+
const cx = Math.floor(point.x);
|
|
75
|
+
const cy = Math.floor(point.y);
|
|
76
|
+
let best;
|
|
77
|
+
for (let radius = 1; radius <= NEAREST_LAND_REACH_PX; radius += 1) {
|
|
78
|
+
for (let dy = -radius; dy <= radius; dy += 1)
|
|
79
|
+
for (let dx = -radius; dx <= radius; dx += 1) {
|
|
80
|
+
if (Math.max(Math.abs(dx), Math.abs(dy)) !== radius)
|
|
81
|
+
continue;
|
|
82
|
+
const x = cx + dx;
|
|
83
|
+
const y = cy + dy;
|
|
84
|
+
if (x < 0 || y < 0 || x >= raster.width || y >= raster.height)
|
|
85
|
+
continue;
|
|
86
|
+
if (!raster.land(y * raster.width + x))
|
|
87
|
+
continue;
|
|
88
|
+
const distance = Math.hypot(dx, dy);
|
|
89
|
+
if (best === undefined || distance < best.distance)
|
|
90
|
+
best = { x, y, distance };
|
|
91
|
+
}
|
|
92
|
+
if (best !== undefined && best.distance <= radius)
|
|
93
|
+
return best;
|
|
94
|
+
}
|
|
95
|
+
return best;
|
|
96
|
+
};
|
|
97
|
+
for (const { tag, role, point, index } of points) {
|
|
98
|
+
const x = Math.floor(point.x);
|
|
99
|
+
const y = Math.floor(point.y);
|
|
100
|
+
if (x < 0 || y < 0 || x >= raster.width || y >= raster.height) {
|
|
101
|
+
problems.push({
|
|
102
|
+
code: 'MAP_WORLD_REALM_POINT_OUTSIDE',
|
|
103
|
+
tag,
|
|
104
|
+
role,
|
|
105
|
+
point,
|
|
106
|
+
message: `The ${role} of ${tag} lies outside the ${raster.width}x${raster.height} world`,
|
|
107
|
+
});
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (!raster.land(y * raster.width + x)) {
|
|
111
|
+
const near = nearestLand(point);
|
|
112
|
+
problems.push({
|
|
113
|
+
code: 'MAP_WORLD_REALM_POINT_WATER',
|
|
114
|
+
tag,
|
|
115
|
+
role,
|
|
116
|
+
point,
|
|
117
|
+
message: `The ${role} of ${tag} at (${x}, ${y}) lies in water${near === undefined
|
|
118
|
+
? ''
|
|
119
|
+
: `; the nearest land is (${near.x}, ${near.y}), ${Math.round(near.distance)} px away`}`,
|
|
120
|
+
...(near === undefined ? {} : { nearestLand: near }),
|
|
121
|
+
});
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const px = x + 0.5;
|
|
125
|
+
const py = y + 0.5;
|
|
126
|
+
const realm = realms.list[index];
|
|
127
|
+
if (realms.unowned?.some((polygon) => inside(px, py, polygon)) === true)
|
|
128
|
+
problems.push({
|
|
129
|
+
code: 'MAP_WORLD_REALM_POINT_CONFLICT',
|
|
130
|
+
tag,
|
|
131
|
+
role,
|
|
132
|
+
point,
|
|
133
|
+
message: `The ${role} of ${tag} at (${x}, ${y}) lies in the unowned area`,
|
|
134
|
+
});
|
|
135
|
+
else if (realm.exclude?.some((polygon) => inside(px, py, polygon)) === true)
|
|
136
|
+
problems.push({
|
|
137
|
+
code: 'MAP_WORLD_REALM_POINT_CONFLICT',
|
|
138
|
+
tag,
|
|
139
|
+
role,
|
|
140
|
+
point,
|
|
141
|
+
message: `The ${role} of ${tag} at (${x}, ${y}) lies in its own exclusion`,
|
|
142
|
+
});
|
|
143
|
+
else
|
|
144
|
+
for (const [otherIndex, other] of realms.list.entries()) {
|
|
145
|
+
if (otherIndex === index)
|
|
146
|
+
continue;
|
|
147
|
+
if (other.claim?.some((polygon) => inside(px, py, polygon)) === true) {
|
|
148
|
+
problems.push({
|
|
149
|
+
code: 'MAP_WORLD_REALM_POINT_CONFLICT',
|
|
150
|
+
tag,
|
|
151
|
+
role,
|
|
152
|
+
point,
|
|
153
|
+
otherTag: other.tag,
|
|
154
|
+
message: `The ${role} of ${tag} at (${x}, ${y}) lies in a claim of ${other.tag}`,
|
|
155
|
+
});
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Points of different realms that are too close to each have a province of their own.
|
|
161
|
+
for (let a = 0; a < points.length; a += 1)
|
|
162
|
+
for (let b = a + 1; b < points.length; b += 1) {
|
|
163
|
+
const left = points[a];
|
|
164
|
+
const right = points[b];
|
|
165
|
+
if (left.index === right.index)
|
|
166
|
+
continue;
|
|
167
|
+
const distance = Math.hypot(left.point.x - right.point.x, left.point.y - right.point.y);
|
|
168
|
+
if (distance >= REALM_POINT_MIN_SEPARATION_PX)
|
|
169
|
+
continue;
|
|
170
|
+
problems.push({
|
|
171
|
+
code: 'MAP_WORLD_REALM_POINTS_TOO_CLOSE',
|
|
172
|
+
tag: left.tag,
|
|
173
|
+
role: left.role,
|
|
174
|
+
point: left.point,
|
|
175
|
+
otherTag: right.tag,
|
|
176
|
+
otherPoint: right.point,
|
|
177
|
+
distance: Math.round(distance * 10) / 10,
|
|
178
|
+
message: `The ${left.role} of ${left.tag} and the ${right.role} of ${right.tag} are ${Math.round(distance * 10) / 10} px apart; points of different realms need ${REALM_POINT_MIN_SEPARATION_PX} px to get a province each`,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
return problems;
|
|
182
|
+
}
|
|
183
|
+
/** One error for all point problems; the first one's code, every problem in `details.problems`. */
|
|
184
|
+
export function realmPointsError(problems) {
|
|
185
|
+
const first = problems[0];
|
|
186
|
+
return new ServiceError(problems.length === 1 ? first.code : 'MAP_WORLD_REALM_POINTS_INVALID', problems.length === 1
|
|
187
|
+
? first.message
|
|
188
|
+
: `${problems.length} realm points cannot be placed: ${problems
|
|
189
|
+
.slice(0, 6)
|
|
190
|
+
.map(({ message }) => message)
|
|
191
|
+
.join('; ')}${problems.length > 6 ? '; ...' : ''}`, { problems: problems.slice(0, 500), count: problems.length });
|
|
192
|
+
}
|
|
54
193
|
export function resolveRealmRules(realms, raster) {
|
|
55
194
|
const unowned = realms.unowned === undefined ? new Set() : coveredProvinces(realms.unowned, raster);
|
|
56
195
|
const excluded = realms.list.map((realm) => realm.exclude === undefined ? new Set() : coveredProvinces(realm.exclude, raster));
|
|
@@ -25,7 +25,7 @@ import { ambientObjectText, applyEdgePolicy, assertFeaturesOutsideBand, edgeWate
|
|
|
25
25
|
import { landDistanceField, lakeHeight, normalizeLakes, waterColourLevel } from './water.js';
|
|
26
26
|
import { overlayGeographyLakes, rasterizeGeographyKind } from './relief/land.js';
|
|
27
27
|
import { checkTerrainRivers, synthesizeTerrain, } from './relief/terrain-synthesis.js';
|
|
28
|
-
import { assignUnreachedRealmLand, resolveRealmRules } from './world-realms.js';
|
|
28
|
+
import { assignUnreachedRealmLand, checkRealmPoints, realmPointsError, resolveRealmRules, } from './world-realms.js';
|
|
29
29
|
// ---------------------------------------------------------------------------------------------
|
|
30
30
|
// Deterministic randomness and noise
|
|
31
31
|
export class Random {
|
|
@@ -445,6 +445,26 @@ function weatherBlock(signedLatitude, desert) {
|
|
|
445
445
|
}
|
|
446
446
|
return `\tweather={\n${periods.join('\n')}\n\t}`;
|
|
447
447
|
}
|
|
448
|
+
/**
|
|
449
|
+
* The land pixels that each get a province of their own: every capital and seed. A point of the
|
|
450
|
+
* same realm within a few pixels of an earlier pin shares its province.
|
|
451
|
+
*/
|
|
452
|
+
function realmPins(realms, width, height, kind) {
|
|
453
|
+
if (realms === undefined)
|
|
454
|
+
return undefined;
|
|
455
|
+
const pins = [];
|
|
456
|
+
for (const [index, realm] of realms.list.entries())
|
|
457
|
+
for (const point of [realm.capital, ...(realm.seeds ?? [])]) {
|
|
458
|
+
const x = Math.floor(point.x);
|
|
459
|
+
const y = Math.floor(point.y);
|
|
460
|
+
if (x < 0 || y < 0 || x >= width || y >= height || kind[y * width + x] !== LAND)
|
|
461
|
+
continue;
|
|
462
|
+
if (pins.some((pin) => pin.realm === index && Math.hypot(pin.x - x, pin.y - y) < 6))
|
|
463
|
+
continue;
|
|
464
|
+
pins.push({ pixel: y * width + x, x, y, realm: index });
|
|
465
|
+
}
|
|
466
|
+
return pins.map(({ pixel }) => pixel);
|
|
467
|
+
}
|
|
448
468
|
export function generateWorld(spec, context, options = {}) {
|
|
449
469
|
const { width, height } = spec;
|
|
450
470
|
if (width % 256 !== 0 || height % 256 !== 0)
|
|
@@ -513,30 +533,61 @@ export function generateWorld(spec, context, options = {}) {
|
|
|
513
533
|
let seamRepaired = geography !== undefined ? repairSeamCorners(surface.kind, width, height) : [];
|
|
514
534
|
// A geography model gets its relief and rivers from the synthesis of ADR 0056; every other world
|
|
515
535
|
// keeps the original elevation classes and drainage, byte for byte.
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
536
|
+
// Every capital and seed is checked against the generated surface before anything else runs, and
|
|
537
|
+
// all problems are reported together (ADR 0073).
|
|
538
|
+
const pointProblems = spec.realms === undefined
|
|
539
|
+
? []
|
|
540
|
+
: checkRealmPoints(spec.realms, {
|
|
519
541
|
width,
|
|
520
542
|
height,
|
|
521
|
-
|
|
522
|
-
kind: surface.kind,
|
|
523
|
-
relief: spec.relief,
|
|
524
|
-
rivers: { density: spec.riverDensity, count: spec.riverCount },
|
|
525
|
-
adjustHeight: edge.mode === 'rim'
|
|
526
|
-
? (x, _y, value) => rimHeight(value, rimStrength(edge, width, x))
|
|
527
|
-
: undefined,
|
|
528
|
-
signal: options.signal,
|
|
543
|
+
land: (pixel) => surface.kind[pixel] === LAND,
|
|
529
544
|
});
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
545
|
+
if (pointProblems.length > 0 && options.riverCheck !== true)
|
|
546
|
+
throw realmPointsError(pointProblems);
|
|
547
|
+
if (options.riverCheck === true && geography !== undefined) {
|
|
548
|
+
let failure;
|
|
549
|
+
try {
|
|
550
|
+
const checked = checkTerrainRivers({
|
|
551
|
+
geography,
|
|
552
|
+
width,
|
|
553
|
+
height,
|
|
554
|
+
seed: spec.seed,
|
|
555
|
+
kind: surface.kind,
|
|
556
|
+
relief: spec.relief,
|
|
557
|
+
rivers: { density: spec.riverDensity, count: spec.riverCount },
|
|
558
|
+
adjustHeight: edge.mode === 'rim'
|
|
559
|
+
? (x, _y, value) => rimHeight(value, rimStrength(edge, width, x))
|
|
560
|
+
: undefined,
|
|
561
|
+
signal: options.signal,
|
|
538
562
|
});
|
|
563
|
+
for (const note of checked) {
|
|
564
|
+
if (note.severity === 'error')
|
|
565
|
+
throw new ServiceError(note.code, note.message, note.details);
|
|
566
|
+
notes.push({
|
|
567
|
+
code: note.code,
|
|
568
|
+
severity: note.severity,
|
|
569
|
+
message: note.message,
|
|
570
|
+
...(note.details === undefined ? {} : { details: note.details }),
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
catch (error) {
|
|
575
|
+
if (!(error instanceof ServiceError))
|
|
576
|
+
throw error;
|
|
577
|
+
failure = error;
|
|
578
|
+
}
|
|
579
|
+
// The preview reports the realm points and the synthesis together.
|
|
580
|
+
if (pointProblems.length > 0) {
|
|
581
|
+
const pointError = realmPointsError(pointProblems);
|
|
582
|
+
throw failure === undefined
|
|
583
|
+
? pointError
|
|
584
|
+
: new ServiceError(pointError.code, `${pointError.message}. The relief synthesis also failed: ${failure.message}`, {
|
|
585
|
+
...pointError.details,
|
|
586
|
+
synthesis: { code: failure.code, message: failure.message, details: failure.details },
|
|
587
|
+
});
|
|
539
588
|
}
|
|
589
|
+
if (failure !== undefined)
|
|
590
|
+
throw failure;
|
|
540
591
|
return {
|
|
541
592
|
files: [],
|
|
542
593
|
warnings: [],
|
|
@@ -676,7 +727,7 @@ export function generateWorld(spec, context, options = {}) {
|
|
|
676
727
|
provincesPerState: spec.provincesPerState,
|
|
677
728
|
landProvincesPerRegion: spec.landProvincesPerRegion,
|
|
678
729
|
seaProvincesPerRegion: spec.seaProvincesPerRegion,
|
|
679
|
-
}, options.signal);
|
|
730
|
+
}, options.signal, realmPins(spec.realms, width, height, surface.kind));
|
|
680
731
|
provinces = featurePartition.provinces;
|
|
681
732
|
for (const note of featurePartition.notes)
|
|
682
733
|
notes.push(note);
|
|
@@ -30,7 +30,7 @@ const realmPolygonsSchema = z.array(realmPolygonSchema).min(1).max(64);
|
|
|
30
30
|
export const workspaceRealmSchema = z
|
|
31
31
|
.object({
|
|
32
32
|
tag: countryTagSchema,
|
|
33
|
-
capital: pointSchema.describe('World pixel, top-left origin, on land; the capital province.'),
|
|
33
|
+
capital: pointSchema.describe('World pixel, top-left origin, on land; the capital province. Capitals and seeds of different realms must be at least 10 pixels apart; each gets a province of its own.'),
|
|
34
34
|
seeds: z
|
|
35
35
|
.array(pointSchema)
|
|
36
36
|
.max(256)
|
|
@@ -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.6.
|
|
3
|
+
export const PACKAGE_VERSION = '4.6.2';
|
|
4
4
|
export const MCP_PROTOCOL_VERSION = LATEST_PROTOCOL_VERSION;
|
|
5
5
|
export const CONFIG_VERSION = 1;
|
|
6
6
|
export const TRANSACTION_VERSION = 2;
|
package/docs/map.md
CHANGED
|
@@ -541,6 +541,8 @@ A mod that writes its own country tags, country files, histories, orders of batt
|
|
|
541
541
|
|
|
542
542
|
Points and polygon vertices are world pixels with the origin at the top left. A capital or seed names the land province under it; a land province with more than half its pixels inside a claim belongs to that country, inside an exclusion never does, and inside `unowned` belongs to nobody. Countries grow from their capitals, seeds and claims by `weight` (default 1). Land that growth does not reach goes, on a landmass a country already holds, to the nearest country that may own it; a landmass no country starts on follows `islands`: `nearest` (each province to the nearest capital), `one-owner` (the whole landmass to the country nearest its centre) or `unowned`. At most 512 countries.
|
|
543
543
|
|
|
544
|
+
Every capital and seed is checked against the generated coast before any province is built, and all problems are reported together (`MAP_WORLD_REALM_POINTS_INVALID`, `details.problems`; one problem keeps its own code): a point outside the world, in water (with the nearest land and its distance), in the unowned area, in the realm's own exclusion or in another realm's claim, and points of different realms closer than 10 pixels. `synthesisCheck` runs the same check. In the feature-aware partition each capital and seed is the centre of a province of its own, so capitals only 10 to 40 pixels apart each get a province and a state.
|
|
545
|
+
|
|
544
546
|
Every tag must be declared by an active `common/country_tags` file other than the world's own (`MAP_WORLD_REALM_TAG_UNKNOWN`) and not only as a dynamic tag (`MAP_WORLD_REALM_TAG_DYNAMIC`). A point outside the world (`MAP_WORLD_REALM_POINT_OUTSIDE`) or in water (`MAP_WORLD_REALM_POINT_WATER`), a point in unowned land, in the country's own exclusion or on another country's point (`MAP_WORLD_REALM_POINT_CONFLICT`), and claims that overlap each other or unowned land (`MAP_WORLD_REALM_CLAIM_OVERLAP`) are refused with the tag and position. A reference picture's political colours are not used with this form.
|
|
545
547
|
|
|
546
548
|
The world then writes no country tag file, country file, `colors.txt`, country history, order of battle, flag, country name or bookmark. Unowned land forms states with no `owner`, `controller` or `add_core_of` (`MAP_WORLD_STATE_UNOWNED`, and `MAP_STATE_OWNER_MISSING` for each); whether the game build accepts unowned land is the mod's to verify. `MAP_WORLD_REALMS_PLACED`, `data.realms` and `map-world-realms.json` give each country's capital state and province, states, provinces and land share against its target. The country histories stay the mod's: a `capital` in a state the country does not own is the existing warning `MAP_COUNTRY_CAPITAL_NOT_OWNED`.
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hoi4-agent-tools",
|
|
3
|
-
"version": "4.6.
|
|
3
|
+
"version": "4.6.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "hoi4-agent-tools",
|
|
9
|
-
"version": "4.6.
|
|
9
|
+
"version": "4.6.2",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@fontsource-variable/roboto": "5.3.0",
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
"integrity": "sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==",
|
|
61
61
|
"dev": true,
|
|
62
62
|
"license": "MIT",
|
|
63
|
+
"peer": true,
|
|
63
64
|
"dependencies": {
|
|
64
65
|
"ansi-styles": "^6.2.1",
|
|
65
66
|
"is-fullwidth-code-point": "^4.0.0"
|
|
@@ -1529,7 +1530,6 @@
|
|
|
1529
1530
|
"integrity": "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA==",
|
|
1530
1531
|
"dev": true,
|
|
1531
1532
|
"license": "MIT",
|
|
1532
|
-
"peer": true,
|
|
1533
1533
|
"dependencies": {
|
|
1534
1534
|
"@alcalzone/ansi-tokenize": "^0.2.4",
|
|
1535
1535
|
"ansi-escapes": "^7.3.0",
|
|
@@ -1607,7 +1607,6 @@
|
|
|
1607
1607
|
"integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==",
|
|
1608
1608
|
"dev": true,
|
|
1609
1609
|
"license": "MIT",
|
|
1610
|
-
"peer": true,
|
|
1611
1610
|
"engines": {
|
|
1612
1611
|
"node": ">=0.10.0"
|
|
1613
1612
|
}
|
|
@@ -1770,7 +1769,6 @@
|
|
|
1770
1769
|
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.32.1.tgz",
|
|
1771
1770
|
"integrity": "sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==",
|
|
1772
1771
|
"license": "MIT",
|
|
1773
|
-
"peer": true,
|
|
1774
1772
|
"dependencies": {
|
|
1775
1773
|
"@hono/node-server": "^1.19.9 || ^2.0.5",
|
|
1776
1774
|
"ajv": "^8.17.1",
|
|
@@ -1811,7 +1809,6 @@
|
|
|
1811
1809
|
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.3.1.tgz",
|
|
1812
1810
|
"integrity": "sha512-e59MfWuSssj6DoQ96JCTqdW1AXT5/XtnTl0WWd6MU1Ka434fFUGGosCLJbGNySDhHGvxQWoRWK137FXYFkYNWw==",
|
|
1813
1811
|
"license": "Apache-2.0",
|
|
1814
|
-
"peer": true,
|
|
1815
1812
|
"dependencies": {
|
|
1816
1813
|
"@modelcontextprotocol/core": "2.3.1",
|
|
1817
1814
|
"zod": "^4.2.0"
|
|
@@ -2596,7 +2593,6 @@
|
|
|
2596
2593
|
"integrity": "sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==",
|
|
2597
2594
|
"dev": true,
|
|
2598
2595
|
"license": "MIT",
|
|
2599
|
-
"peer": true,
|
|
2600
2596
|
"dependencies": {
|
|
2601
2597
|
"@typescript-eslint/scope-manager": "8.66.0",
|
|
2602
2598
|
"@typescript-eslint/types": "8.66.0",
|
|
@@ -2814,7 +2810,6 @@
|
|
|
2814
2810
|
"integrity": "sha512-8MVGEFnJIcdGjcbfKmeq8z0pZHH0JlVtoVZH9Q/qwUp6wyFnEJUBMrw9DCaj+ra3vShGmhavjalMIhPNxZAUcw==",
|
|
2815
2811
|
"dev": true,
|
|
2816
2812
|
"license": "MIT",
|
|
2817
|
-
"peer": true,
|
|
2818
2813
|
"dependencies": {
|
|
2819
2814
|
"@bcoe/v8-coverage": "^1.0.2",
|
|
2820
2815
|
"@vitest/utils": "4.1.11",
|
|
@@ -2972,7 +2967,6 @@
|
|
|
2972
2967
|
"integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
|
|
2973
2968
|
"dev": true,
|
|
2974
2969
|
"license": "MIT",
|
|
2975
|
-
"peer": true,
|
|
2976
2970
|
"bin": {
|
|
2977
2971
|
"acorn": "bin/acorn"
|
|
2978
2972
|
},
|
|
@@ -3029,6 +3023,7 @@
|
|
|
3029
3023
|
"integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==",
|
|
3030
3024
|
"dev": true,
|
|
3031
3025
|
"license": "MIT",
|
|
3026
|
+
"peer": true,
|
|
3032
3027
|
"engines": {
|
|
3033
3028
|
"node": ">=14.16"
|
|
3034
3029
|
},
|
|
@@ -3326,6 +3321,7 @@
|
|
|
3326
3321
|
}
|
|
3327
3322
|
],
|
|
3328
3323
|
"license": "MIT",
|
|
3324
|
+
"peer": true,
|
|
3329
3325
|
"engines": {
|
|
3330
3326
|
"node": ">=8"
|
|
3331
3327
|
}
|
|
@@ -3365,6 +3361,7 @@
|
|
|
3365
3361
|
"integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
|
|
3366
3362
|
"dev": true,
|
|
3367
3363
|
"license": "MIT",
|
|
3364
|
+
"peer": true,
|
|
3368
3365
|
"dependencies": {
|
|
3369
3366
|
"slice-ansi": "^5.0.0",
|
|
3370
3367
|
"string-width": "^5.0.0"
|
|
@@ -3382,6 +3379,7 @@
|
|
|
3382
3379
|
"integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
|
|
3383
3380
|
"dev": true,
|
|
3384
3381
|
"license": "MIT",
|
|
3382
|
+
"peer": true,
|
|
3385
3383
|
"dependencies": {
|
|
3386
3384
|
"ansi-styles": "^6.0.0",
|
|
3387
3385
|
"is-fullwidth-code-point": "^4.0.0"
|
|
@@ -3623,7 +3621,8 @@
|
|
|
3623
3621
|
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
|
3624
3622
|
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
|
|
3625
3623
|
"dev": true,
|
|
3626
|
-
"license": "MIT"
|
|
3624
|
+
"license": "MIT",
|
|
3625
|
+
"peer": true
|
|
3627
3626
|
},
|
|
3628
3627
|
"node_modules/ee-first": {
|
|
3629
3628
|
"version": "1.1.1",
|
|
@@ -3636,7 +3635,8 @@
|
|
|
3636
3635
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
|
3637
3636
|
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
|
|
3638
3637
|
"dev": true,
|
|
3639
|
-
"license": "MIT"
|
|
3638
|
+
"license": "MIT",
|
|
3639
|
+
"peer": true
|
|
3640
3640
|
},
|
|
3641
3641
|
"node_modules/encodeurl": {
|
|
3642
3642
|
"version": "2.0.0",
|
|
@@ -3776,7 +3776,6 @@
|
|
|
3776
3776
|
"integrity": "sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ==",
|
|
3777
3777
|
"dev": true,
|
|
3778
3778
|
"license": "MIT",
|
|
3779
|
-
"peer": true,
|
|
3780
3779
|
"workspaces": [
|
|
3781
3780
|
"packages/*"
|
|
3782
3781
|
],
|
|
@@ -4005,7 +4004,6 @@
|
|
|
4005
4004
|
"resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
|
|
4006
4005
|
"integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
|
|
4007
4006
|
"license": "MIT",
|
|
4008
|
-
"peer": true,
|
|
4009
4007
|
"dependencies": {
|
|
4010
4008
|
"accepts": "^2.0.0",
|
|
4011
4009
|
"body-parser": "^2.2.1",
|
|
@@ -4107,9 +4105,9 @@
|
|
|
4107
4105
|
"license": "MIT"
|
|
4108
4106
|
},
|
|
4109
4107
|
"node_modules/fast-uri": {
|
|
4110
|
-
"version": "3.1.
|
|
4111
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.
|
|
4112
|
-
"integrity": "sha512-
|
|
4108
|
+
"version": "3.1.9",
|
|
4109
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz",
|
|
4110
|
+
"integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==",
|
|
4113
4111
|
"funding": [
|
|
4114
4112
|
{
|
|
4115
4113
|
"type": "github",
|
|
@@ -4410,11 +4408,10 @@
|
|
|
4410
4408
|
}
|
|
4411
4409
|
},
|
|
4412
4410
|
"node_modules/hono": {
|
|
4413
|
-
"version": "4.13.
|
|
4414
|
-
"resolved": "https://registry.npmjs.org/hono/-/hono-4.13.
|
|
4415
|
-
"integrity": "sha512
|
|
4411
|
+
"version": "4.13.13",
|
|
4412
|
+
"resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz",
|
|
4413
|
+
"integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==",
|
|
4416
4414
|
"license": "MIT",
|
|
4417
|
-
"peer": true,
|
|
4418
4415
|
"engines": {
|
|
4419
4416
|
"node": ">=16.9.0"
|
|
4420
4417
|
}
|
|
@@ -4624,9 +4621,9 @@
|
|
|
4624
4621
|
}
|
|
4625
4622
|
},
|
|
4626
4623
|
"node_modules/ip-address": {
|
|
4627
|
-
"version": "10.7.
|
|
4628
|
-
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.
|
|
4629
|
-
"integrity": "sha512-
|
|
4624
|
+
"version": "10.7.4",
|
|
4625
|
+
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.4.tgz",
|
|
4626
|
+
"integrity": "sha512-DWBMKyeM25D70nrIiTkgQth59/G+naKOTep6huF9j+GmeK3DMD60Zvxg5d5qQnz+38AHgou6ean2LECX+lrKDg==",
|
|
4630
4627
|
"license": "MIT",
|
|
4631
4628
|
"engines": {
|
|
4632
4629
|
"node": ">= 12"
|
|
@@ -4647,6 +4644,7 @@
|
|
|
4647
4644
|
"integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
|
|
4648
4645
|
"dev": true,
|
|
4649
4646
|
"license": "MIT",
|
|
4647
|
+
"peer": true,
|
|
4650
4648
|
"dependencies": {
|
|
4651
4649
|
"ci-info": "^3.2.0"
|
|
4652
4650
|
},
|
|
@@ -4686,6 +4684,7 @@
|
|
|
4686
4684
|
"integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
|
|
4687
4685
|
"dev": true,
|
|
4688
4686
|
"license": "MIT",
|
|
4687
|
+
"peer": true,
|
|
4689
4688
|
"engines": {
|
|
4690
4689
|
"node": ">=12"
|
|
4691
4690
|
},
|
|
@@ -4747,6 +4746,7 @@
|
|
|
4747
4746
|
"integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==",
|
|
4748
4747
|
"dev": true,
|
|
4749
4748
|
"license": "MIT",
|
|
4749
|
+
"peer": true,
|
|
4750
4750
|
"dependencies": {
|
|
4751
4751
|
"tslib": "^2.0.3"
|
|
4752
4752
|
}
|
|
@@ -4776,6 +4776,7 @@
|
|
|
4776
4776
|
"integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==",
|
|
4777
4777
|
"dev": true,
|
|
4778
4778
|
"license": "MIT",
|
|
4779
|
+
"peer": true,
|
|
4779
4780
|
"dependencies": {
|
|
4780
4781
|
"tslib": "^2.0.3"
|
|
4781
4782
|
}
|
|
@@ -5195,7 +5196,8 @@
|
|
|
5195
5196
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
|
5196
5197
|
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
|
|
5197
5198
|
"dev": true,
|
|
5198
|
-
"license": "MIT"
|
|
5199
|
+
"license": "MIT",
|
|
5200
|
+
"peer": true
|
|
5199
5201
|
},
|
|
5200
5202
|
"node_modules/lodash.isequal": {
|
|
5201
5203
|
"version": "4.5.0",
|
|
@@ -5211,6 +5213,7 @@
|
|
|
5211
5213
|
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
|
5212
5214
|
"dev": true,
|
|
5213
5215
|
"license": "MIT",
|
|
5216
|
+
"peer": true,
|
|
5214
5217
|
"dependencies": {
|
|
5215
5218
|
"js-tokens": "^3.0.0 || ^4.0.0"
|
|
5216
5219
|
},
|
|
@@ -5223,7 +5226,8 @@
|
|
|
5223
5226
|
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
|
5224
5227
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
|
5225
5228
|
"dev": true,
|
|
5226
|
-
"license": "MIT"
|
|
5229
|
+
"license": "MIT",
|
|
5230
|
+
"peer": true
|
|
5227
5231
|
},
|
|
5228
5232
|
"node_modules/lru-cache": {
|
|
5229
5233
|
"version": "11.5.3",
|
|
@@ -5925,6 +5929,7 @@
|
|
|
5925
5929
|
"integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==",
|
|
5926
5930
|
"dev": true,
|
|
5927
5931
|
"license": "MIT",
|
|
5932
|
+
"peer": true,
|
|
5928
5933
|
"dependencies": {
|
|
5929
5934
|
"loose-envify": "^1.1.0",
|
|
5930
5935
|
"scheduler": "^0.23.2"
|
|
@@ -6083,6 +6088,7 @@
|
|
|
6083
6088
|
"integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
|
|
6084
6089
|
"dev": true,
|
|
6085
6090
|
"license": "MIT",
|
|
6091
|
+
"peer": true,
|
|
6086
6092
|
"dependencies": {
|
|
6087
6093
|
"loose-envify": "^1.1.0"
|
|
6088
6094
|
}
|
|
@@ -6312,6 +6318,7 @@
|
|
|
6312
6318
|
"integrity": "sha512-6bn4hRfkTvDfUoEQYkERg0BVF1D0vrX9HEkMl08uDiNWvVvjylLHvZFZWkDo6wjT8tUctbYl1nCOuE66ZTaUtA==",
|
|
6313
6319
|
"dev": true,
|
|
6314
6320
|
"license": "MIT",
|
|
6321
|
+
"peer": true,
|
|
6315
6322
|
"dependencies": {
|
|
6316
6323
|
"ansi-styles": "^6.2.1",
|
|
6317
6324
|
"is-fullwidth-code-point": "^4.0.0"
|
|
@@ -6405,6 +6412,7 @@
|
|
|
6405
6412
|
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
|
6406
6413
|
"dev": true,
|
|
6407
6414
|
"license": "MIT",
|
|
6415
|
+
"peer": true,
|
|
6408
6416
|
"dependencies": {
|
|
6409
6417
|
"eastasianwidth": "^0.2.0",
|
|
6410
6418
|
"emoji-regex": "^9.2.2",
|
|
@@ -6587,7 +6595,6 @@
|
|
|
6587
6595
|
"integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
|
|
6588
6596
|
"dev": true,
|
|
6589
6597
|
"license": "MIT",
|
|
6590
|
-
"peer": true,
|
|
6591
6598
|
"engines": {
|
|
6592
6599
|
"node": ">=12"
|
|
6593
6600
|
},
|
|
@@ -6645,7 +6652,6 @@
|
|
|
6645
6652
|
"integrity": "sha512-Ry2oTEUnhBdeEdWIztY8kf3/nBGnPnjMLVGL0YfdRXMORuPER5NlKmayqxtxRxwB1xBN+RivRaJfe7PM1rtiyw==",
|
|
6646
6653
|
"dev": true,
|
|
6647
6654
|
"license": "MIT",
|
|
6648
|
-
"peer": true,
|
|
6649
6655
|
"dependencies": {
|
|
6650
6656
|
"esbuild": "~0.28.0"
|
|
6651
6657
|
},
|
|
@@ -6678,6 +6684,7 @@
|
|
|
6678
6684
|
"integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
|
|
6679
6685
|
"dev": true,
|
|
6680
6686
|
"license": "(MIT OR CC0-1.0)",
|
|
6687
|
+
"peer": true,
|
|
6681
6688
|
"engines": {
|
|
6682
6689
|
"node": ">=10"
|
|
6683
6690
|
},
|
|
@@ -6722,7 +6729,6 @@
|
|
|
6722
6729
|
"integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
|
|
6723
6730
|
"dev": true,
|
|
6724
6731
|
"license": "Apache-2.0",
|
|
6725
|
-
"peer": true,
|
|
6726
6732
|
"bin": {
|
|
6727
6733
|
"tsc": "bin/tsc",
|
|
6728
6734
|
"tsserver": "bin/tsserver"
|
|
@@ -6826,7 +6832,6 @@
|
|
|
6826
6832
|
"integrity": "sha512-lfauXnrf2x0p+UoA+wXh0dgFWnUjCyG6Js95KBkgaCwUU9k0DAHI4W6Q0WCx+h+5g+Alce1y4Zi2QjjK0UvGBw==",
|
|
6827
6833
|
"dev": true,
|
|
6828
6834
|
"license": "MIT",
|
|
6829
|
-
"peer": true,
|
|
6830
6835
|
"dependencies": {
|
|
6831
6836
|
"lightningcss": "^1.33.0",
|
|
6832
6837
|
"picomatch": "^4.0.5",
|
|
@@ -6918,7 +6923,6 @@
|
|
|
6918
6923
|
"integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==",
|
|
6919
6924
|
"dev": true,
|
|
6920
6925
|
"license": "MIT",
|
|
6921
|
-
"peer": true,
|
|
6922
6926
|
"dependencies": {
|
|
6923
6927
|
"@vitest/expect": "4.1.11",
|
|
6924
6928
|
"@vitest/mocker": "4.1.11",
|
|
@@ -7083,6 +7087,7 @@
|
|
|
7083
7087
|
"integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
|
|
7084
7088
|
"dev": true,
|
|
7085
7089
|
"license": "MIT",
|
|
7090
|
+
"peer": true,
|
|
7086
7091
|
"dependencies": {
|
|
7087
7092
|
"string-width": "^5.0.1"
|
|
7088
7093
|
},
|
|
@@ -7109,6 +7114,7 @@
|
|
|
7109
7114
|
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
|
7110
7115
|
"dev": true,
|
|
7111
7116
|
"license": "MIT",
|
|
7117
|
+
"peer": true,
|
|
7112
7118
|
"dependencies": {
|
|
7113
7119
|
"ansi-styles": "^6.1.0",
|
|
7114
7120
|
"string-width": "^5.0.1",
|
|
@@ -7206,7 +7212,8 @@
|
|
|
7206
7212
|
"resolved": "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz",
|
|
7207
7213
|
"integrity": "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==",
|
|
7208
7214
|
"dev": true,
|
|
7209
|
-
"license": "MIT"
|
|
7215
|
+
"license": "MIT",
|
|
7216
|
+
"peer": true
|
|
7210
7217
|
},
|
|
7211
7218
|
"node_modules/zlibjs": {
|
|
7212
7219
|
"version": "0.3.1",
|
|
@@ -7222,7 +7229,6 @@
|
|
|
7222
7229
|
"resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz",
|
|
7223
7230
|
"integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==",
|
|
7224
7231
|
"license": "MIT",
|
|
7225
|
-
"peer": true,
|
|
7226
7232
|
"funding": {
|
|
7227
7233
|
"url": "https://github.com/sponsors/colinhacks"
|
|
7228
7234
|
}
|
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.6.
|
|
4
|
+
"version": "4.6.2",
|
|
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",
|
|
@@ -153,11 +153,11 @@
|
|
|
153
153
|
},
|
|
154
154
|
"overrides": {
|
|
155
155
|
"brace-expansion": "5.0.12",
|
|
156
|
-
"fast-uri": "3.1.
|
|
156
|
+
"fast-uri": "3.1.9",
|
|
157
157
|
"qs": "6.16.1",
|
|
158
|
-
"hono": "4.13.
|
|
158
|
+
"hono": "4.13.13",
|
|
159
159
|
"nanoid": "3.3.18",
|
|
160
|
-
"ip-address": "10.7.
|
|
160
|
+
"ip-address": "10.7.4",
|
|
161
161
|
"postcss": "8.5.26",
|
|
162
162
|
"shell-quote": "1.10.0"
|
|
163
163
|
},
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/schemas/geography-model.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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/schemas/map-operation.schema.json",
|
|
3
3
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
4
|
"oneOf": [
|
|
5
5
|
{
|
|
@@ -5261,7 +5261,7 @@
|
|
|
5261
5261
|
"$ref": "#/$defs/__schema205"
|
|
5262
5262
|
},
|
|
5263
5263
|
"capital": {
|
|
5264
|
-
"description": "World pixel, top-left origin, on land; the capital province.",
|
|
5264
|
+
"description": "World pixel, top-left origin, on land; the capital province. Capitals and seeds of different realms must be at least 10 pixels apart; each gets a province of its own.",
|
|
5265
5265
|
"$ref": "#/$defs/__schema50"
|
|
5266
5266
|
},
|
|
5267
5267
|
"seeds": {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/schemas/reference-sheets.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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.2/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.6.
|
|
6
|
+
"version": "4.6.2",
|
|
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.6.
|
|
16
|
+
"version": "4.6.2",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
19
19
|
}
|