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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Two further internal changes, neither of them a release gate:

### Added

- **ChooserTable preflight is now bounded and read-only.** Six `chooser` actions discover tables, read summaries/columns/rows/references, and validate row/reference structure through one reflection-first implementation. Canonical path checks and independent table/row/column/reference/depth/field/container/visit limits prevent silent aliases and unbounded payloads; every cutoff is reported explicitly, and the handlers never compile, transact, save, mutate, or dirty a package.
- **Animation layers can be authored without an interface asset.** New `animation add_anim_layer_graph` creates an ABP-native animation layer: a `UAnimationGraph` on the animation graph schema, in the Animation Blueprint's own function graphs — exactly what the editor's My Blueprint → **+** → Animation Layer button produces. Because the layer belongs to the ABP rather than to a shared `UAnimLayerInterface`, variant ABPs no longer have to agree on a layer signature just to have a layer. The schema is the part that matters: it is what makes the animation compiler emit a real `FAnimBlueprintFunction` for the graph, which is why `blueprint add_function` could not stand in — it produces an inert K2 graph. The Output Pose root node is created automatically, since a layer graph without one fails to compile. Optional `input_poses` declares input pose pins by name (`["InPose"]` or `[{"name": "InPose"}]`, capped at 16). The action refuses a duplicate graph name outright rather than renaming the incumbent graph the way the underlying engine call does, and also refuses the reserved name `AnimGraph`, child Animation Blueprints, macro libraries, and interface Blueprints.
- **`monolith_discover` can search every namespace at once.** The filter predicate lived inside the namespace branch, and the no-namespace branch parsed no `filter`, `offset`, `limit` or `detail` at all — so `monolith_discover(filter="set_property")` with no namespace was silently ignored, handed back the plain namespace inventory, and finding a capability by partial name meant walking every namespace by hand. A non-empty `filter` with no `namespace` now searches the whole registry in registry order, tagging each row with its owning namespace and reporting `matched_namespaces` before pagination, so "which namespace owns this" stays answerable even when the rows are capped. The per-namespace path is naturally bounded at roughly 150 actions and this one is not, so an absent `limit` caps at 50 while an explicit `limit: 0` still means all, matching the existing contract. Mirrored in the offline CLI and `monolith_offline.py`. Reported and prototyped by **@kunkunGames** (#112).
- **`risk get_mining_status` says why a risk query came back empty.** New read-only action reporting which repositories were mined, which candidates were rejected and for what reason, whether mining ran this session and what it reported, the row counts of the four risk tables, and the stored-versus-current version and configuration stamps. A missing `EngineSource.db` is not an error for it: the settings and a live root resolution are still reported, which is exactly the situation a caller reaches for it in. The four git-backed `risk` actions additionally attach a `diagnostics` block **when they return nothing**, carrying the same scanned and skipped lists plus, when nothing at all was mined, a one-line hint naming the setting to change. `list_conditional_gates` does not carry it — its data comes from the source sweep rather than from git, so a repository hint there would be wrong. The indexer's own summary moves from `Verbose` to `Warning` when it mines nothing.
Expand Down
33 changes: 32 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 All @@ -22,6 +22,7 @@ The per-namespace numbers in the Table of Contents and body sections below are k
| [blueprint](#blueprint) | 111 | Blueprint read/write, variable/component/graph CRUD, node ops, compile, auto-layout, spawn actors, dataset read/edit pack (DataTable/CurveTable/StringTable + `seed_data_asset`), cross-class property access, parent-function overrides |
| [material](#material) | 63 | Material graph editing, inspection, CRUD, material functions, PBR pipeline |
| [animation](#animation) | 145 | Curves, bone tracks, sync markers, root motion, compression, blend spaces (incl. baking + interpolation control), ABPs (incl. an AnimGraph-authoring pack — additive/slot/cached-pose/blend (by int + by enum)/sync/layered-blend/Control Rig/linked-layer/conduit nodes + output wiring — ABP-native animation layer graphs, custom anim-graph nodes + state-machine teardown + compound expression transition rules), montages, skeletons, PoseSearch, IKRig, Control Rig |
| [chooser](#chooser) | 16 | Bounded ChooserTable discovery/readback/validation plus deep inspection, reference editing, and authoring |
| [niagara](#niagara) | 119 | Niagara VFX (emitters, modules, params, renderers, HLSL, dynamic inputs, event handlers, sim stages, effect types, event-aware summaries + validate_system event-chain reasoning, temporal-control composite writers + read aggregators, stateless-emitter factory) |
| [editor](#editor) | 29 | Live Coding builds, compile output capture, editor logs, scene capture, texture import, map creation, module status, automation test list/run, Python escape-hatch, persistent-level swap |
| [config](#config) | 6 | INI config inspection and search |
Expand Down Expand Up @@ -439,6 +440,36 @@ See `Plugins/Monolith/Docs/specs/SPEC_MonolithAnimation.md` for the deep dive.

---

## chooser

ChooserTable discovery, bounded reflection readback, non-mutating structural validation, deep inspection/reference editing, and authoring. The namespace is owned by `MonolithAnimation`; query `monolith_discover("chooser")` for the live roster and `describe_query("action_schema", target_namespace="chooser", target_action="<name>")` for the authoritative schema.

### Bounded readback and validation

These six actions accept only canonical mounted package or top-level object paths. They do not compile, transact, mutate, save, or dirty Chooser packages. Pagination and reflected serialization have independent hard limits, and every incomplete result carries explicit truncation/completeness metadata.

| Action | Parameters | Result |
|---|---|---|
| `list_chooser_tables` | `path_filter?`, `offset=0`, `limit=200` (1–1000) | Stable AssetRegistry identities, `count`, `total`, and `has_more` |
| `get_chooser_table` | `asset_path`, `include_rows=false`, `row_limit=50` (1–500) | Row/column/result/context counts, bounded columns and references, fallback result, and optional bounded rows |
| `list_chooser_columns` | `asset_path` | Column types, input/output classification, disabled state, row-value property/type/count, and bounded reflected fields |
| `list_chooser_rows` | `asset_path`, `start_row=0`, `limit=100` (1–500) | Result payload, disabled state, and at most 512 reflected cells per row; reports partial rows explicitly |
| `list_chooser_references` | `asset_path`, `offset=0`, `limit=200` (1–1000) | Stable hard/soft references, exact object-existence evidence, and depth/visit/result scan completeness |
| `validate_chooser_table` | `asset_path` | Row-array/column alignment, known result targets, reference resolution, and bounded-scan completeness; errors set `valid=false`, warnings do not |

`validate_chooser_table` differs from the existing `validate_chooser`: the former is strictly read-only structural validation, while the latter intentionally compiles the table and can validate expected context/result contracts.

### Remaining Chooser actions

| Category | Actions |
|---|---|
| Deep inspection/reference editing | `inspect_chooser`, `duplicate_chooser_tree`, `set_context_object_class`, `set_result_asset_reference`, `set_evaluate_chooser_result_reference`, `validate_chooser` |
| Authoring | `create_chooser_table`, `add_chooser_column`, `add_chooser_row`, `set_chooser_cell` |

See `Plugins/Monolith/Docs/specs/SPEC_MonolithAnimation.md` and `Plugins/Monolith/Skills/unreal-chooser/SKILL.md` for bounds, exact path semantics, and the recommended read-before-write workflow.

---

## niagara

Niagara VFX system editing — emitters, modules, params, renderers, HLSL, dynamic inputs, event handlers, sim stages, NPC, effect types, temporal control, stateless-emitter factory. **129 actions** (108 baseline + 1 layout + 9 temporal-control + 1 stateless-emitter factory + 7 issue #64 Tranche 2 search + 2 PR #65 CustomHlsl-text read/write).
Expand Down
Loading