hoi4-agent-tools 4.6.2 → 4.6.4
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 +10 -0
- package/dist/hoi4_agent_tools/core/domain-scan-patterns.js +9 -1
- package/dist/hoi4_agent_tools/core/job-transactions.js +24 -2
- package/dist/hoi4_agent_tools/core/managed-outputs.js +10 -2
- package/dist/hoi4_agent_tools/core/transaction-execution.js +12 -0
- package/dist/hoi4_agent_tools/map/operations.js +16 -0
- package/dist/hoi4_agent_tools/version.js +1 -1
- package/docs/map.md +1 -1
- package/npm-shrinkwrap.json +2 -2
- 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/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 +1 -1
- 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,11 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.6.4 - 2026-11-01
|
|
4
|
+
|
|
5
|
+
- Write a large world without hitting the scan limit. The check after a map write read every changed file again, bitmaps and textures included, with the base game's files of the same names: 270 MB for a 5120 x 2560 world, past the default `scanMaxBytes` of 256 MiB, so the write was restored after seven minutes with `SCAN_BYTE_LIMIT`. It now reads the changed text files only. See the amendment to ADR 0047.
|
|
6
|
+
- Name what a scan limit error crossed. A restored rewrite stopped by `SCAN_BYTE_LIMIT` or `SCAN_FILE_LIMIT` now says which file, how many bytes were read and the limit in its message, and a file larger than `scanMaxFileBytes` stops the rewrite before anything is written.
|
|
7
|
+
|
|
8
|
+
## 4.6.3 - 2026-11-01
|
|
9
|
+
|
|
10
|
+
- Write a world over a mod whose output inventory lists files the world does not manage. `.hoi4-agent-world.json` could record files that were never outputs of a generated world (for example country tag files and localisation files registered by the mod's own tooling), and one such entry made every write fail with `MANAGED_OUTPUT_MANIFEST_INVALID`. A safe relative path outside the allow-list is now left alone (never read, compared, edited or deleted), dropped from the next inventory and reported (`MAP_WORLD_OUTPUT_RECORD_IGNORED`, `data.outputs`). A path that could leave the workspace, or a duplicate, still refuses the inventory. See the amendment to ADR 0052.
|
|
11
|
+
|
|
3
12
|
## 4.6.2 - 2026-10-31
|
|
4
13
|
|
|
5
14
|
- 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
15
|
|
|
7
16
|
## Unreleased
|
|
8
17
|
|
|
18
|
+
- Add the shared Rust HOI4 engine in `engine/` (ADR 0074): a lossless parser that round-trips all 7,717 vanilla 1.19.3.0 script and localisation files byte for byte, a symbol index over the game, DLC folders, dependencies and the mod in load order, a reference closure that reports every reference as resolved, unresolved or unknown with coverage per kind, lints whose vocabulary is read from the installed game's documentation, an override and `replace_path` audit that reports dropped definitions and `on_actions` hooks, a findings baseline that fails only on new findings, and the `hoi4-engine` command for the modding kit's `check.py`. Harvested from Hagane Studio with written permission: span repair plans, finding deltas, the dead-flag and DLC rules and a draw.io focus importer (`engine/PROVENANCE.md`). The CWTools MD Edition spike is in `docs/research/cwtools-md-edition-spike.md`. No MCP tool uses the engine yet, and the npm package is unchanged.
|
|
9
19
|
- 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
20
|
|
|
11
21
|
## 4.6.1 - 2026-10-26
|
|
@@ -83,9 +83,17 @@ export function countryAssetDiscoveryPatterns(workspace) {
|
|
|
83
83
|
* lists provinces that `map/definition.csv` defines, usually in the base game, so a scan of the
|
|
84
84
|
* changed files alone would report every listed province as unresolved.
|
|
85
85
|
*/
|
|
86
|
+
/** Bitmaps, textures and flags carry no script to parse; the map validation reads the ones it needs. */
|
|
87
|
+
const BINARY_EXTENSION = /\.(?:bmp|dds|tga|png|jpg|jpeg|gif|wav|ogg|mp3|ttf|otf)$/iu;
|
|
88
|
+
/**
|
|
89
|
+
* What the check after a map write reads: the changed text files, without the large binary files of
|
|
90
|
+
* a world (a 5120 x 2560 world is 150 MB of bitmaps and textures, 270 MB with the base game's files
|
|
91
|
+
* of the same names, past the default scan limit). The map validation that follows reads the
|
|
92
|
+
* bitmaps it needs itself.
|
|
93
|
+
*/
|
|
86
94
|
export function mapChangeScanPatterns(relativePaths) {
|
|
87
95
|
return uniquePatterns([
|
|
88
|
-
...exactChangedFilePatterns(relativePaths),
|
|
96
|
+
...exactChangedFilePatterns(relativePaths.filter((path) => !BINARY_EXTENSION.test(path))),
|
|
89
97
|
'map/default.map',
|
|
90
98
|
'map/*.csv',
|
|
91
99
|
]);
|
|
@@ -128,12 +128,34 @@ export class JobTransactions {
|
|
|
128
128
|
* Why the write stopped: the error code and message of a service error, else only the error
|
|
129
129
|
* kind, followed by the first check or diagnostic of the transaction that failed validation.
|
|
130
130
|
*/
|
|
131
|
-
|
|
131
|
+
/** The size figures of a scan limit error, so the message names the file and the limit. */
|
|
132
|
+
function scanLimitText(details) {
|
|
133
|
+
if (details === undefined)
|
|
134
|
+
return '';
|
|
135
|
+
const mb = (value) => typeof value === 'number' ? `${(value / 1_048_576).toFixed(1)} MiB` : '?';
|
|
136
|
+
const parts = [];
|
|
137
|
+
if (typeof details.file === 'string')
|
|
138
|
+
parts.push(`file ${details.file}${details.fileBytes === undefined ? '' : ` (${mb(details.fileBytes)})`}`);
|
|
139
|
+
if (details.bytes !== undefined && details.limit !== undefined)
|
|
140
|
+
parts.push(`${mb(details.bytes)} read of the ${mb(details.limit)} scan limit`);
|
|
141
|
+
if (details.perFileLimit !== undefined)
|
|
142
|
+
parts.push(`per-file limit ${mb(details.perFileLimit)}`);
|
|
143
|
+
if (typeof details.files === 'number' &&
|
|
144
|
+
typeof details.limit === 'number' &&
|
|
145
|
+
details.bytes === undefined)
|
|
146
|
+
parts.push(`${details.files} files against the limit of ${details.limit}`);
|
|
147
|
+
return parts.length === 0 ? '' : ` [${parts.join('; ')}]`;
|
|
148
|
+
}
|
|
149
|
+
export function failureCause(error, transaction) {
|
|
132
150
|
const recorded = transaction.failure === undefined
|
|
133
151
|
? ''
|
|
134
152
|
: `${transaction.failure.code}: ${transaction.failure.message}`;
|
|
153
|
+
// A rewrite that was restored wraps the error that stopped it; the wrapped error is the cause.
|
|
154
|
+
const inner = error?.details?.cause;
|
|
135
155
|
const cause = error instanceof ServiceError
|
|
136
|
-
?
|
|
156
|
+
? inner?.code === undefined
|
|
157
|
+
? `${error.code}: ${error.message}`
|
|
158
|
+
: `${inner.code}: ${inner.message ?? error.message}${inner.code.startsWith('SCAN_') ? scanLimitText(inner.details) : ''}`
|
|
137
159
|
: error instanceof Error
|
|
138
160
|
? error.name
|
|
139
161
|
: recorded;
|
|
@@ -39,16 +39,22 @@ export function planManagedOutputs(input) {
|
|
|
39
39
|
const outputs = input.proposed.filter((f) => f.content !== null && input.permitsPath(f.relativePath));
|
|
40
40
|
const next = new Set(outputs.map((f) => f.relativePath.toLowerCase()));
|
|
41
41
|
const released = new Set();
|
|
42
|
+
const ignored = new Set();
|
|
42
43
|
const seen = new Set();
|
|
43
44
|
for (const file of previous) {
|
|
44
45
|
const key = file.relativePath.toLowerCase();
|
|
46
|
+
// A path that could leave the workspace, or a duplicate, makes the whole inventory untrustworthy.
|
|
45
47
|
if (file.relativePath.includes('\\') ||
|
|
46
48
|
file.relativePath.split('/').some((s) => !s || s === '.' || s === '..') ||
|
|
47
49
|
/^[a-z]:/iu.test(file.relativePath) ||
|
|
48
|
-
!input.permitsPath(file.relativePath) ||
|
|
49
50
|
seen.has(key))
|
|
50
51
|
throw new ServiceError('MANAGED_OUTPUT_MANIFEST_INVALID', 'Generated-output inventory contains an unsupported or duplicate path');
|
|
51
52
|
seen.add(key);
|
|
53
|
+
// A safe path this inventory does not manage is left alone: not compared, not deleted.
|
|
54
|
+
if (!input.permitsPath(file.relativePath)) {
|
|
55
|
+
ignored.add(file.relativePath);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
52
58
|
const current = sources.get(key);
|
|
53
59
|
if (current === undefined || sha256Bytes(current.bytes) === file.sha256)
|
|
54
60
|
continue;
|
|
@@ -58,10 +64,11 @@ export function planManagedOutputs(input) {
|
|
|
58
64
|
}
|
|
59
65
|
throw new ServiceError('MANAGED_OUTPUT_EDITED', 'A generated file has been edited; regeneration would discard those changes', { relativePath: file.relativePath });
|
|
60
66
|
}
|
|
67
|
+
const ignoredKeys = new Set([...ignored].map((path) => path.toLowerCase()));
|
|
61
68
|
const deletions = previous
|
|
62
69
|
.filter((f) => {
|
|
63
70
|
const key = f.relativePath.toLowerCase();
|
|
64
|
-
return !next.has(key) && !released.has(key) && sources.has(key);
|
|
71
|
+
return !next.has(key) && !released.has(key) && !ignoredKeys.has(key) && sources.has(key);
|
|
65
72
|
})
|
|
66
73
|
.map((f) => ({
|
|
67
74
|
relativePath: f.relativePath,
|
|
@@ -88,5 +95,6 @@ export function planManagedOutputs(input) {
|
|
|
88
95
|
written: sorted(outputs.map((f) => f.relativePath)),
|
|
89
96
|
retired: sorted(deletions.map((f) => f.relativePath)),
|
|
90
97
|
released: sorted(previous.filter((f) => released.has(f.relativePath.toLowerCase())).map((f) => f.relativePath)),
|
|
98
|
+
ignored: sorted(ignored),
|
|
91
99
|
};
|
|
92
100
|
}
|
|
@@ -17,6 +17,7 @@ export class AutonomousRewriteError extends ServiceError {
|
|
|
17
17
|
: 'Rewrite failed and automatic recovery could not be completed', {
|
|
18
18
|
execution: 'failed',
|
|
19
19
|
automaticRecovery: restored ? 'restored' : 'incomplete',
|
|
20
|
+
cause: { code: cause.code, message: cause.message, details: cause.details },
|
|
20
21
|
});
|
|
21
22
|
this.manifest = manifest;
|
|
22
23
|
this.artifacts = artifacts;
|
|
@@ -71,6 +72,16 @@ export function autonomousResultArtifacts(execution) {
|
|
|
71
72
|
...execution.transaction.artifacts,
|
|
72
73
|
]);
|
|
73
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* A written file larger than the per-file scan limit could never be read back by a later scan, so
|
|
77
|
+
* the rewrite stops before it writes anything, naming the file and the limit.
|
|
78
|
+
*/
|
|
79
|
+
function assertFilesWithinScanLimit(engine, transaction) {
|
|
80
|
+
const limit = engine.resolver.config().scanMaxFileBytes;
|
|
81
|
+
const over = transaction.files.find(({ afterSize }) => (afterSize ?? 0) > limit);
|
|
82
|
+
if (over !== undefined)
|
|
83
|
+
throw new ServiceError('SCAN_BYTE_LIMIT', `${over.relativePath} would be ${over.afterSize} bytes, above the per-file scan limit of ${limit} bytes (scanMaxFileBytes); raise the limit in the server configuration or shrink the file`, { file: over.relativePath, fileBytes: over.afterSize, perFileLimit: limit });
|
|
84
|
+
}
|
|
74
85
|
/**
|
|
75
86
|
* Complete a validated domain rewrite inside one MCP tool call. Hash checks, durable recovery,
|
|
76
87
|
* post-write validation, and automatic failure recovery remain internal guarantees.
|
|
@@ -82,6 +93,7 @@ export async function executePlannedTransaction(engine, transaction, principal,
|
|
|
82
93
|
if (transaction.files.length === 0)
|
|
83
94
|
return { transaction, outcome: 'unchanged', artifacts: [] };
|
|
84
95
|
signal?.throwIfAborted();
|
|
96
|
+
assertFilesWithinScanLimit(engine, transaction);
|
|
85
97
|
await hooks.beforeApply?.(transaction);
|
|
86
98
|
signal?.throwIfAborted();
|
|
87
99
|
let executionArtifacts = [];
|
|
@@ -3520,6 +3520,7 @@ function applyCreateWorld(base, changes, operation, context, signal) {
|
|
|
3520
3520
|
written: outputs.written,
|
|
3521
3521
|
retired: outputs.retired,
|
|
3522
3522
|
released: outputs.released,
|
|
3523
|
+
ignored: outputs.ignored,
|
|
3523
3524
|
...(world.realms === undefined ? {} : { realms: world.realms }),
|
|
3524
3525
|
});
|
|
3525
3526
|
return [
|
|
@@ -3551,6 +3552,21 @@ function applyCreateWorld(base, changes, operation, context, signal) {
|
|
|
3551
3552
|
},
|
|
3552
3553
|
]),
|
|
3553
3554
|
worldOutputsDiagnostic(operation.id, outputs),
|
|
3555
|
+
...(outputs.ignored.length === 0
|
|
3556
|
+
? []
|
|
3557
|
+
: [
|
|
3558
|
+
{
|
|
3559
|
+
code: 'MAP_WORLD_OUTPUT_RECORD_IGNORED',
|
|
3560
|
+
severity: 'warning',
|
|
3561
|
+
category: 'map',
|
|
3562
|
+
operationId: operation.id,
|
|
3563
|
+
message: `${outputs.ignored.length} path(s) in the world's output inventory are not outputs of a generated world; they were left in place and dropped from the inventory`,
|
|
3564
|
+
details: {
|
|
3565
|
+
count: outputs.ignored.length,
|
|
3566
|
+
files: outputs.ignored.slice(0, WORLD_OUTPUT_PATH_SAMPLE),
|
|
3567
|
+
},
|
|
3568
|
+
},
|
|
3569
|
+
]),
|
|
3554
3570
|
...worldTagDiagnostics(operation.id, tagCatalog, world, workspaceCountries !== undefined),
|
|
3555
3571
|
...worldRealmDiagnostics(operation.id, world),
|
|
3556
3572
|
...(outputs.released.length === 0
|
|
@@ -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.4';
|
|
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
|
@@ -23,7 +23,7 @@ Use a cleaned, unlabelled raster for production generation. Handwriting, sheet j
|
|
|
23
23
|
|
|
24
24
|
Reference worlds enable `startingScenario` by default; procedural worlds keep it off unless requested. The starter includes a bookmark, country histories, provisional councils, recruitable infantry templates, two equipped divisions per country, stockpiles, an infantry production line, supply and building positions. `worldName` sets the bookmark title. Demographics, industry and ownership remain provisional. Existing world events, decisions, startup hooks and country-specific AI strategy folders are replaced; shared game systems remain dependencies and can report unused-definition warnings. Generated names use the localisation replacement folder, and explicit country color declarations match the flags. Inherited country tags receive inactive histories. The adjacent launcher `.mod` file must mirror the generated `descriptor.mod` replacement paths. The server cannot enable a launcher playset or test a campaign.
|
|
25
25
|
|
|
26
|
-
Regeneration records generated paths and hashes in `.hoi4-agent-world.json`. It removes obsolete recorded outputs through the same atomic rewrite and refuses to overwrite recorded files edited since generation. Preserve that inventory. Unrelated authored files are not deleted; validation can block a rebuild if they conflict with the generated world. Large world diffs remain linked evidence so counts and preview images fit within the MCP response budget.
|
|
26
|
+
Regeneration records generated paths and hashes in `.hoi4-agent-world.json`. A recorded path outside what a world manages (such as a file another tool registered) is left alone, dropped from the inventory and reported as `MAP_WORLD_OUTPUT_RECORD_IGNORED`; an unsafe or duplicate path refuses the inventory. It removes obsolete recorded outputs through the same atomic rewrite and refuses to overwrite recorded files edited since generation. Preserve that inventory. Unrelated authored files are not deleted; validation can block a rebuild if they conflict with the generated world. Large world diffs remain linked evidence so counts and preview images fit within the MCP response budget.
|
|
27
27
|
|
|
28
28
|
Automatic interpretation recognizes visual land/water and terrain cues, derives relief and drainage, and uses flat political colors when available. Offline English OCR supplies candidate names and city locations; recognized text bounds are masked before terrain classification so ocean labels do not become islands. Masks near a coastline can soften its detail and produce a review warning. Decorative text, handwriting, unknown languages and visually ambiguous borders may be missed or misclassified; diagnostics identify uncertain interpretation and deterministic defaults. Population, resources, buildings and country ownership inferred from artwork are generated assumptions, not historical facts or a balance assessment.
|
|
29
29
|
|
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.4",
|
|
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.4",
|
|
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.6.
|
|
4
|
+
"version": "4.6.4",
|
|
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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.6.
|
|
2
|
+
"$id": "https://github.com/klimPaskov/hoi4-agent-tools/blob/v4.6.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4",
|
|
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.4",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
19
19
|
}
|