Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

### Added

- **Enhanced Input assets now have a bounded read-only preflight surface.** Five `input` actions list and inspect `UInputAction` / `UInputMappingContext` assets and validate missing actions, invalid keys, duplicate-key warnings, and scan completeness. Canonical path checks, stable pagination, independent mapping/instanced-object caps, and explicit truncation prevent guessed paths or silently partial results; the namespace stays available when GAS authoring is disabled and never compiles, saves, mutates, transacts, or dirties an asset.

## [0.22.0] - 2026-08-01

### Internal
Expand Down
23 changes: 22 additions & 1 deletion Docs/API_REFERENCE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Monolith API Reference

**Version:** v0.22.0 · **Last updated:** 2026-08-01
**Version:** v0.22.0 · **Last updated:** 2026-08-04

**In-tree action total is approximate: ~1,400+ actions across 25+ in-tree namespaces** (public, in-tree only; all active by default, plus 45 experimental town-gen actions that register only when `bEnableProceduralTownGen=true`). The surface is too large to track to the unit — **query `monolith_discover()` (its `total_actions` field) for the exact live figure.** The `ui` namespace re-exports 4 GAS UI binding actions as aliases. v0.19.0 adds an LLM C++ authoring ergonomics pack (`source`, 8 actions + `editor.get_build_errors` fix hints), live-PIE introspection + driving and stat-group readout (`editor`), anim-node binding read/write and time-series PIE sampling (`animation`), a Blueprint variable census + contract reconciliation (`blueprint`), and T3D asset-text export (`project`); plus two first-launch fixes (issue #70) and a ~40% smaller `tools/list` manifest. The `monolith_*` meta-tools (`discover`, `status`, `update`, `reindex`, `guide`) plus the `bulk_fill_query` and `describe_query` framework dispatchers round out the MCP tool count. This total EXCLUDES sibling-plugin actions — they ship in their own repos and are never in the public release zip.

Expand Down Expand Up @@ -30,6 +30,7 @@ The per-namespace numbers in the Table of Contents and body sections below are k
| [mesh](#mesh) | 194 | Mesh inspection, scene manipulation, spatial queries, blockout, GeometryScript, procedural geo, lighting, audio, performance, mesh import (incl. skeletal + animation). +45 town gen registers only with `bEnableProceduralTownGen=true` (experimental, not in the public count) |
| [ui](#ui) | 138 | UMG widget CRUD, templates, styling, animation v1+v2, EffectSurface, Spec Builder, Type Registry, settings scaffolding, headline scaffolders, navigation/conversion gap-closure, accessibility, CommonUI, GAS UI bindings |
| [gas](#gas) | 135 | Gameplay Ability System: abilities, attributes, effects, ASC, tags, cues, targeting, input, inspect, scaffold |
| [input](#input) | 5 | Read-only Enhanced Input Action and Mapping Context discovery, bounded inspection, and validation |
| [combograph](#combograph) | 13 | ComboGraph melee combo authoring (conditional on `WITH_COMBOGRAPH`) |
| [ai](#ai) | 221 | Behavior Trees, State Trees, EQS, Blackboards, AI Controllers, Perception, Smart Objects, Navigation, Mass, Zone Graph, runtime PIE inspection, scaffolds |
| [logicdriver](#logicdriver) | 66 | Logic Driver Pro state machines: graph CRUD, runtime PIE control, scaffolds, dialogue (conditional on `WITH_LOGICDRIVER`) |
Expand Down Expand Up @@ -987,6 +988,26 @@ See `Plugins/Monolith/Docs/specs/SPEC_MonolithGAS.md` for the deep dive.

---

## input

Read-only Enhanced Input asset discovery, bounded inspection, and validation. The namespace is registered by `MonolithGAS` but remains available when GAS authoring is disabled. Its dispatcher is advertised as read-only and idempotent.

All asset inputs require canonical mounted package paths or matching top-level object paths. List and mapping responses expose explicit pagination; trigger/modifier arrays and validation scans expose explicit truncation/completeness rather than silently dropping data.

| Action | Parameters | Returns |
|---|---|---|
| `list_input_actions` | `path=/Game`, `offset=0`, `limit=200` (1–1000), `include_details=false` | Stable Input Action page with `total`, `count`, and `has_more`; optional bounded detail rows |
| `get_input_action` | `asset_path` | Value type, description, behavior flags, accumulation policy, and bounded trigger/modifier class arrays |
| `list_input_mapping_contexts` | `path=/Game`, `offset=0`, `limit=200` (1–1000), `include_details=false`, `mapping_limit=100` (1–500) | Stable context page; optional details load only returned contexts and cap mappings per context |
| `get_input_mapping_context` | `asset_path`, `mapping_offset=0`, `mapping_limit=100` (1–500) | Context metadata and a bounded stable mapping page |
| `validate_input_mappings` | `context_paths` or `path=/Game`, `offset=0`, `limit=200` (1–1000), `mapping_scan_limit=4096` (1–10000) | Missing-action/invalid-key errors, duplicate-key warnings, and per-context/global `valid` + `complete` evidence |

`context_paths` and `path` are mutually exclusive. Duplicate-key assignments are warnings because they may be deliberate Enhanced Input layouts; missing actions, invalid keys, load failures, or a mapping scan cutoff are errors. `page_complete` covers mapping scans in the returned context page, while `all_contexts_covered` covers context pagination. Global `complete` requires both, and `valid=true` additionally requires zero errors.

See `Plugins/Monolith/Skills/unreal-input/SKILL.md` for routing and bounded workflow examples.

---

## combograph

ComboGraph melee combo authoring. **13 actions.** **Conditional on `#if WITH_COMBOGRAPH`** — requires the ComboGraph marketplace plugin. Reflection-only (no direct C++ API linkage).
Expand Down
5 changes: 4 additions & 1 deletion Docs/SPEC_CORE.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ All three sources emit free-text strings into the same array. No schema or envel
- GeometryScripting (optional — enables Tier 5 mesh operations)
- GameplayAbilities (optional — enables MonolithGAS module; `#if WITH_GBA` compile guard)

`MonolithGAS` also owns the always-available Enhanced Input inspection surface. Its direct engine-module dependencies are `AssetRegistry`, `EnhancedInput`, and `InputCore`; these five read-only `input` actions register before the GAS settings gate and do not depend on Blueprint Attributes.

### Optional-Dependency Detection Matrix

Modules that probe for optional plugins follow a unified Build.cs convention: 3-location detection (project Plugins/, engine Plugins/Marketplace/, engine Plugins/Runtime/) with `MONOLITH_RELEASE_BUILD=1` env-var escape hatch. When the env var is `"1"`, detection short-circuits and the corresponding `WITH_*` define is forced off — the released DLL drops the hard import and Blueprint-only users without the dep don't hit `GetLastError=126` at module load.
Expand Down Expand Up @@ -160,7 +162,7 @@ Each module has its own spec file under `specs/`. The table below is the index.
| 3.10 | MonolithUI | [specs/SPEC_MonolithUI.md](specs/SPEC_MonolithUI.md) | Widget blueprint CRUD, slot/template/styling, animation v1+v2, bindings, settings/accessibility scaffolds, **Spec Builder + Type Registry + EffectSurface + Style Service** (Phase A–L expansion 2026-04-26), CommonUI categories A–I. **~130+ module-owned actions** (always-on + CommonUI under `WITH_COMMONUI`) + 4 GAS UI binding aliases |
| 3.11 | MonolithMesh | [specs/SPEC_MonolithMesh.md](specs/SPEC_MonolithMesh.md) | Mesh/scene/spatial/blockout/GeometryScript/procedural (~190+ core + 45 experimental town gen) |
| 3.12 | MonolithBABridge | [specs/SPEC_MonolithBABridge.md](specs/SPEC_MonolithBABridge.md) | IModularFeatures bridge for Blueprint Assist (0 MCP actions, integration only) |
| 3.13 | MonolithGAS | [specs/SPEC_MonolithGAS.md](specs/SPEC_MonolithGAS.md) | Gameplay Ability System integration (~130+ actions, incl. 4 UI binding aliased into `ui::`, WITH_GBA) |
| 3.13 | MonolithGAS | [specs/SPEC_MonolithGAS.md](specs/SPEC_MonolithGAS.md) | Gameplay Ability System integration (~130+ `gas` actions, incl. 4 UI binding aliases) plus 5 always-registered read-only Enhanced Input asset inspection actions under `input` |
| 3.14 | MonolithComboGraph | [specs/SPEC_MonolithComboGraph.md](specs/SPEC_MonolithComboGraph.md) | ComboGraph integration (~13 actions, WITH_COMBOGRAPH) |
| 3.15 | MonolithLogicDriver | [specs/SPEC_MonolithLogicDriver.md](specs/SPEC_MonolithLogicDriver.md) | Logic Driver Pro integration (~66 actions, WITH_LOGICDRIVER) |
| 3.16 | MonolithAI | [specs/SPEC_MonolithAI.md](specs/SPEC_MonolithAI.md) | Behavior Trees, Blackboards, State Trees, EQS, Smart Objects, Perception, Nav (~220+ actions) |
Expand Down Expand Up @@ -585,6 +587,7 @@ Counts below were re-verified against the live `monolith_discover()` registry on
| MonolithSource | source | ~20 | 11 baseline + 1 v0.17.0 Phase 2 audit action `audit_module_dep_reality` registered cross-module from `MonolithReflectionIntel` (catches UPROPERTY / API-symbol references whose owning module is missing from the declaring module's `Build.cs` deps; the audit handler lives in `MonolithReflectionIntel`, registration onto `source` is for caller ergonomics — agents already discover `source_query` first) + 8 ([Unreleased]) LLM C++ authoring-ergonomics actions across Phases 1-3 (`get_include_path`, `get_signature`, `check_deprecations` — Phase 1; `verify_symbols`, `find_example_usage` — Phase 2; `lint_header`, `generate_class_stub` — Phase 3; plus `suggest_build_cs_deps` registered cross-module from `MonolithReflectionIntel`). See [`specs/SPEC_MonolithSource.md`](specs/SPEC_MonolithSource.md). |
| MonolithUI | ui | 134 module-owned (79 always-on + 55 CommonUI under `WITH_COMMONUI`) + 4 GAS UI binding aliases (registered from `MonolithGAS`, conditional on `WITH_GBA`) = **138** distinct registrations into `ui::` in the full-stack configuration | Architecture expansion Phase A–L landed 2026-04-26 (see prior entry). v0.14.11 [Unreleased] Tier 1/2/3/4 close-the-loop ergonomics layered on top: Tier 1 fixes (hash-cache mis-keying, CommonUI allowlist additions, `create_bound_action_bar.action_button_class` param, `compile_widget` `errors[]`/`warnings[]` surface, `set_widget_property` `value` alias). Tier 2 +8 actions: `rename_widget`, `add_widget_variable`, `audit_focus_chain`, `apply_token_binding` (MVP-STUB — issue #2-10b for full BP-graph node-write completion), `list_widget_property_enums`, `convert_textblock_to_common`, `set_action_bar_button_class`, `dump_blueprint_compile_log` (gains `BlueprintGraph` + `Projects` deps in `MonolithUI.Build.cs`). Tier 3 +4 scaffolders: `scaffold_main_menu`, `scaffold_settings_panel_with_tabs`, `scaffold_pause_menu`, `build_menu_from_spec` (MVP — issue #3-18b for multi-screen aggregation). Tier 4 polish: `convert_button_to_common` Tokenforge auto-detect, `-32011` Tokenforge Provider Absence error contract parity with `-32010`, new CommonUI Property Allowlist Coverage section in [`specs/SPEC_MonolithUI.md`](specs/SPEC_MonolithUI.md). The 4 GAS aliases (`bind_widget_to_attribute`, `unbind_widget_attribute`, `list_attribute_bindings`, `clear_widget_attribute_bindings`) come from `MonolithGAS/Private/MonolithGASUIBindingActions.cpp` and dispatch to the same handlers as their canonical `gas::` versions. Phase 3 (2026-05-23) of [`Docs/plans/2026-05-22-monolith-ui-bp-gap-actions.md`](plans/2026-05-22-monolith-ui-bp-gap-actions.md) added 4 CommonUI-gated actions — `set_widget_navigation_bulk`, `dump_widget_navigation`, `convert_border_to_common`, `reparent_widget_root` — bumping CommonUI 51 → 55, module-owned 129 → 133, full-stack 133 → 137. Phase 4 (2026-05-23) added 1 always-on action — `set_widget_is_variable` — bumping always-on 78 → 79, module-owned 133 → 134, full-stack 137 → 138 (CommonUI subtotal unchanged) |
| MonolithGAS | gas | 135 | 131 documented in the Action Categories table + 4 UI binding actions (`bind_widget_to_attribute`, `unbind_widget_attribute`, `list_attribute_bindings`, `clear_widget_attribute_bindings`) — the latter four are also aliased into `ui` |
| MonolithGAS | input | 5 | Read-only Enhanced Input asset preflight: stable bounded `UInputAction` / `UInputMappingContext` discovery and readback plus mapping validation. Direct `AssetRegistry`, `EnhancedInput`, and `InputCore` dependencies; registered independently of `bEnableGAS`; canonical paths only; explicit pagination, truncation, and validation completeness. |
| MonolithComboGraph | combograph | 13 | |
| MonolithAI | ai | 223 | Phase J F8 added `add_perception_to_actor` and `get_bt_graph` — pre-J baseline was 219, not the previously documented 229 (per-category `~N` estimates in SPEC_MonolithAI were aspirational, not literal) + 2 test/profiling harness Wave 1 (`rebuild_navigation`, `validate_nav_points`). Motion Matching AI-wander runtime surface (2026-06-07, **no MCP-action delta**): 3 `UBTTaskNode` classes (`BTTask_SetMaxWalkSpeed`, `BTTask_SetCrouch`, `BTTask_RandomizeFloat` — placed via `add_bt_node`) + 1 Blueprintable `AAIController` (`AMonolithBehaviorTreeAIController`, runs its BT `UPROPERTY` on `OnPossess`). Fixes: `reorder_bt_children` order now persists (`NodePosX`-based); `build_behavior_tree_from_spec` now links `UBehaviorTree::BlackboardAsset`. See [`specs/SPEC_MonolithAI.md`](specs/SPEC_MonolithAI.md) § Motion Matching AI-wander runtime surface |
| MonolithLogicDriver | logicdriver | 66 | |
Expand Down
28 changes: 24 additions & 4 deletions Docs/specs/SPEC_MonolithGAS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@

## MonolithGAS

**Dependencies:** Core, CoreUObject, Engine, MonolithCore, GameplayAbilities, GameplayTags
**Namespace:** `gas` (135 actions) + 4 cross-namespace aliases into `ui` | **Tool:** `gas_query(action, params)` | **Actions:** 135 (Phase J F8: +`grant_ability_to_pawn`)
**Conditional:** GBA (Blueprint Attributes) features wrapped in `#if WITH_GBA`. Core GAS engine modules (GameplayAbilities, GameplayTags, GameplayTasks) are always available. When GBA is absent, Blueprint AttributeSet creation is disabled but all 135 actions still register and compile cleanly. When `bEnableGAS` is disabled in settings, 0 actions registered.
**Dependencies:** Core, CoreUObject, Engine, MonolithCore, AssetRegistry, EnhancedInput, InputCore, GameplayAbilities, GameplayTags
**Namespaces:** `gas` (135 actions) + 4 cross-namespace aliases into `ui`; `input` (5 read-only actions) | **Tools:** `gas_query(action, params)`, `input_query(action, params)`
**Conditional:** GBA (Blueprint Attributes) features are wrapped in `#if WITH_GBA`. Core GAS engine modules remain available. When GBA is absent, Blueprint AttributeSet creation is disabled but the `gas` schemas still compile cleanly. When `bEnableGAS` is disabled, GAS authoring actions are not registered; the five Enhanced Input asset inspection actions remain registered because they do not depend on GAS authoring.
**Settings toggle:** `bEnableGAS` (default: True)

MonolithGAS provides full MCP coverage of the Gameplay Ability System. It covers ability CRUD, attribute set management, gameplay effect authoring, ASC (Ability System Component) inspection and manipulation, gameplay tag operations, gameplay cue management, target data, input binding, runtime inspection, scaffolding of common GAS patterns, and Widget→Attribute binding via class-extension authoring.
MonolithGAS provides full MCP coverage of the Gameplay Ability System. It covers ability CRUD, attribute set management, gameplay effect authoring, ASC (Ability System Component) inspection and manipulation, gameplay tag operations, gameplay cue management, target data, input binding, runtime inspection, scaffolding of common GAS patterns, and Widget→Attribute binding via class-extension authoring. A separate `input` namespace owns read-only Enhanced Input asset preflight so IA/IMC inspection is not coupled to the GAS settings toggle.

### Action Categories

Expand Down Expand Up @@ -56,6 +56,26 @@ See [SPEC_CORE.md §11 Recent Fixes](../SPEC_CORE.md#recent-fixes-phase-j--shipp

---

### Enhanced Input Asset Inspection (`input`, 5 actions)

`FMonolithGASInputAssetActions` registers five read-only actions before the GAS settings gate. The namespace uses direct `AssetRegistry`, `EnhancedInput`, and `InputCore` dependencies and advertises `readOnlyHint=true` plus `idempotentHint=true`.

| Action | Contract |
|---|---|
| `list_input_actions` | Stable AssetRegistry page under a canonical package root. `offset` is non-negative; `limit` is 1–1000. `include_details` loads only the returned page. |
| `get_input_action` | Exact type-checked `UInputAction` readback: value type, description, behavior flags, accumulation, player-mappable presence, and trigger/modifier class identities. Each instanced-object array is capped at 256 with explicit count/truncation fields. |
| `list_input_mapping_contexts` | Stable context page with the same asset bounds. Optional details cap each context to `mapping_limit` 1–500. |
| `get_input_mapping_context` | Exact type-checked context readback with independent `mapping_offset` and `mapping_limit` pagination. Each mapping's trigger/modifier array is capped at 64 with explicit metadata. |
| `validate_input_mappings` | Validates a bounded context page and at most `mapping_scan_limit` 1–10000 mappings per context. Missing actions, invalid keys, load failures, and scan cutoffs are errors. Multiple actions on one key are warnings because that layout can be intentional. |

Asset parameters accept only canonical mounted package paths or matching top-level object paths. Filesystem paths, subobjects, whitespace aliases, and mismatched object leaves return `-32602`; no alternate asset, widened search, or path guess is used. `context_paths` and `path` are mutually exclusive, and an explicit empty or duplicate context list is rejected.

Every list result reports `total`, `offset`, `limit`, `count`, and `has_more`. Mapping pages report their own offsets/counts/truncation. Validation reports `page_complete` for mapping traversal and `all_contexts_covered` for context pagination; global `complete` requires both, and `valid=true` additionally requires zero errors. None of these handlers calls `Modify`, opens a transaction, saves, compiles, or dirties a package.

Focused verification lives in `Docs/testing/2026-08-04-enhanced-input-asset-inspection.md`; routing guidance lives in `Skills/unreal-input/SKILL.md`.

---

### Bulk Fill & Describe Surface (2026-05-11)

The `gas` namespace registers a `FMonolithBulkFillRegistry` adapter (`MonolithGASBulkFillAdapter.cpp`) routed from the central `bulk_fill_query("apply")` and `describe_query("schema")` dispatchers. Phase 2 of the MCP ergonomics rollout (design spec `Docs/plans/2026-05-11-monolith-mcp-ergonomics-design.md`, implementation plan `Docs/plans/2026-05-11-monolith-mcp-ergonomics.md`). This collapses the 20-attr × 10-level ≈ 200-call grind on AttributeInit DataTables into a single transacted call.
Expand Down
Loading