@ue-shed/game-text 0.1.0
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/ADOPTING.md +59 -0
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/adoption.manifest.json +68 -0
- package/dist/browser.d.ts +7 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +7 -0
- package/dist/browser.js.map +1 -0
- package/dist/corpus.d.ts +70 -0
- package/dist/corpus.d.ts.map +1 -0
- package/dist/corpus.js +579 -0
- package/dist/corpus.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/quality-query.d.ts +787 -0
- package/dist/quality-query.d.ts.map +1 -0
- package/dist/quality-query.js +259 -0
- package/dist/quality-query.js.map +1 -0
- package/dist/quality-schema.d.ts +531 -0
- package/dist/quality-schema.d.ts.map +1 -0
- package/dist/quality-schema.js +220 -0
- package/dist/quality-schema.js.map +1 -0
- package/dist/quality.d.ts +7 -0
- package/dist/quality.d.ts.map +1 -0
- package/dist/quality.js +150 -0
- package/dist/quality.js.map +1 -0
- package/dist/query.d.ts +12 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +155 -0
- package/dist/query.js.map +1 -0
- package/dist/schema.d.ts +994 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +195 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +10 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +24 -0
- package/dist/search.js.map +1 -0
- package/package.json +55 -0
package/ADOPTING.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Adopt Game Text into an existing host
|
|
2
|
+
|
|
3
|
+
This guide is for the coding agent integrating the headless Game Text Module into an established
|
|
4
|
+
trusted host. Read [`adoption.manifest.json`](adoption.manifest.json) first. Do not inspect or copy
|
|
5
|
+
Workbench unless a named verification failure leaves the public package contract insufficient.
|
|
6
|
+
|
|
7
|
+
## Fast path
|
|
8
|
+
|
|
9
|
+
1. Inspect the target's package manifest, Node version, Effect version, selected-project model, and
|
|
10
|
+
saved-asset reader configuration.
|
|
11
|
+
2. Install the exact `@ue-shed/game-text` version. Reuse a compatible existing
|
|
12
|
+
`@ue-shed/unreal-assets` and `@ue-shed/uasset` installation when present.
|
|
13
|
+
3. In the target's trusted Node process, compose one scoped `AssetReader` layer and
|
|
14
|
+
`TextCorpusServiceLive`. Do not create a sidecar server or a reader layer per asset.
|
|
15
|
+
4. Adapt the host's explicit project root or existing project index to `scan` or
|
|
16
|
+
`scanFromProjectIndex`.
|
|
17
|
+
5. Keep the complete corpus and `textCorpusQuery` model in the trusted host. Add schema-validated
|
|
18
|
+
host operations for progress, summary, bounded search, and bounded focus using the target's
|
|
19
|
+
existing transport conventions.
|
|
20
|
+
6. Add an adopter-owned view only if the host needs one. This bundle contains no maintained UI and
|
|
21
|
+
requires no Solid, StyleX, Electron, or Workbench package.
|
|
22
|
+
7. Prove the acceptance journey below and record the exact package versions, reader provider, target
|
|
23
|
+
files, project input, and verification commands in the host repository.
|
|
24
|
+
|
|
25
|
+
## Ownership
|
|
26
|
+
|
|
27
|
+
- UE Shed owns the installed package and its schemas.
|
|
28
|
+
- The adopting host owns project selection, runtime composition, transport Adapter, caching policy,
|
|
29
|
+
route, presentation, and navigation.
|
|
30
|
+
- Browser code receives only bounded schema-validated results. It must not receive the corpus,
|
|
31
|
+
filesystem paths beyond returned evidence, process authority, or the reader executable.
|
|
32
|
+
- Do not import `apps/workbench`, `extensions/game-text`, or Workbench transport modules.
|
|
33
|
+
- Do not add `@ue-shed/uasset` as a hidden dependency of Game Text. The host deliberately selects
|
|
34
|
+
the default launcher or an explicit compatible executable.
|
|
35
|
+
|
|
36
|
+
## Required and optional capabilities
|
|
37
|
+
|
|
38
|
+
The core audit requires saved project packages and a configured reader. It does not require a
|
|
39
|
+
running editor, Perforce, `UEShedCore`, or any other UE Shed Unreal plugin.
|
|
40
|
+
|
|
41
|
+
“Locate in Unreal” is an optional host enhancement. Keep it outside the audit Module and expose an
|
|
42
|
+
honest unavailable state when the host has no compatible editor-selection capability.
|
|
43
|
+
|
|
44
|
+
## Acceptance journey
|
|
45
|
+
|
|
46
|
+
The integration is complete only when the target host can:
|
|
47
|
+
|
|
48
|
+
1. Select an explicit project root without relying on ambient UI state.
|
|
49
|
+
2. Scan its saved packages with visible progress and cancellation owned by the host.
|
|
50
|
+
3. Return a summary that includes scan coverage and diagnostics.
|
|
51
|
+
4. Search with the public maximum page size enforced.
|
|
52
|
+
5. Focus a selected text-unit ID and return bounded occurrence evidence.
|
|
53
|
+
6. Run with Unreal offline and report unsupported or partial evidence without claiming complete
|
|
54
|
+
project coverage.
|
|
55
|
+
7. Build and run from the target's packaged application, resolving the configured reader there.
|
|
56
|
+
|
|
57
|
+
UE Shed's source release gate runs `pnpm test:release:packages`. The adopter must add a target-owned
|
|
58
|
+
command that proves the same scan → search → focus journey through its real host transport. A direct
|
|
59
|
+
package call is useful diagnosis but is not evidence that the host Adapter works.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 UE Shed contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# `@ue-shed/game-text`
|
|
2
|
+
|
|
3
|
+
Headless saved-package corpus discovery and search for player-facing Unreal Engine text. The
|
|
4
|
+
package keeps Unreal namespace/key identity distinct from occurrence identity, reports scan
|
|
5
|
+
coverage, and returns bounded search and focus results. Saved packages are evidence only; this
|
|
6
|
+
package does not mutate assets.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
Pin the package and the host's Effect runtime exactly:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
npm install --save-exact @ue-shed/game-text effect@4.0.0-beta.98
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`@ue-shed/unreal-assets` is a normal package dependency. It remains a separate artifact and is not
|
|
17
|
+
bundled into Game Text. A saved-asset reader executable is also required at runtime, but it is not a
|
|
18
|
+
JavaScript dependency of this package. Install the default launcher separately:
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
npm install --save-exact @ue-shed/uasset
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Alternatively, configure `assetReaderLayer({ executable })` with another compatible `uasset-io`
|
|
25
|
+
producer. The reader library never downloads an executable or falls back to a source checkout.
|
|
26
|
+
|
|
27
|
+
## Host usage
|
|
28
|
+
|
|
29
|
+
Compose `TextCorpusServiceLive` with one scoped `AssetReader` layer in the trusted Node host. Keep
|
|
30
|
+
the resulting corpus and `textCorpusQuery(corpus)` model in that host, and send only bounded summary,
|
|
31
|
+
search, and focus results over the host's validated transport.
|
|
32
|
+
|
|
33
|
+
Use `scanFromProjectIndex` when the host already maintains a saved-project header index. Otherwise,
|
|
34
|
+
`scan` performs its own bounded project scan. Both paths preserve coverage and typed recovery
|
|
35
|
+
guidance.
|
|
36
|
+
|
|
37
|
+
The `@ue-shed/game-text/browser` entry point contains only schemas and pure query helpers. It does
|
|
38
|
+
not expose filesystem, process, Electron, Perforce, or Unreal authority.
|
|
39
|
+
|
|
40
|
+
See [ADOPTING.md](ADOPTING.md) and [adoption.manifest.json](adoption.manifest.json) when integrating
|
|
41
|
+
Game Text into an established trusted host.
|
|
42
|
+
|
|
43
|
+
## Capabilities
|
|
44
|
+
|
|
45
|
+
- Required: a project root containing saved packages and a configured saved-asset reader.
|
|
46
|
+
- Optional: a separate host capability may locate a selected occurrence in Unreal.
|
|
47
|
+
- Not required: Workbench, Perforce, a running editor, or any UE Shed Unreal plugin.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"feature": "game-text",
|
|
4
|
+
"mode": "existing-host-package",
|
|
5
|
+
"description": "Headless saved-package Game Text corpus, coverage, search, and focus",
|
|
6
|
+
"release": {
|
|
7
|
+
"package": "@ue-shed/game-text",
|
|
8
|
+
"versionSource": "package.json",
|
|
9
|
+
"exactVersionRequired": true,
|
|
10
|
+
"nativeBinaryBundled": false,
|
|
11
|
+
"uiBundled": false
|
|
12
|
+
},
|
|
13
|
+
"entrypoints": {
|
|
14
|
+
"host": "@ue-shed/game-text",
|
|
15
|
+
"browser": "@ue-shed/game-text/browser"
|
|
16
|
+
},
|
|
17
|
+
"packageGraph": {
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@ue-shed/unreal-assets": "package.json#dependencies"
|
|
20
|
+
},
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"effect": "4.0.0-beta.98"
|
|
23
|
+
},
|
|
24
|
+
"runtimeProviders": [
|
|
25
|
+
{
|
|
26
|
+
"capability": "saved-asset-reader",
|
|
27
|
+
"defaultPackage": "@ue-shed/uasset",
|
|
28
|
+
"versionPolicy": "save-exact compatible release",
|
|
29
|
+
"alternative": "Explicit compatible executable supplied to assetReaderLayer"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"hostIntegration": {
|
|
34
|
+
"ownership": "consumer",
|
|
35
|
+
"requiredSeams": [
|
|
36
|
+
"explicit-project-root-or-project-index",
|
|
37
|
+
"process-scoped-asset-reader",
|
|
38
|
+
"trusted-host-text-corpus-runtime",
|
|
39
|
+
"schema-validated-transport-adapter",
|
|
40
|
+
"bounded-search-and-focus-client"
|
|
41
|
+
],
|
|
42
|
+
"forbiddenImports": [
|
|
43
|
+
"apps/workbench",
|
|
44
|
+
"extensions/game-text",
|
|
45
|
+
"@ue-shed/workbench",
|
|
46
|
+
"@ue-shed/extension-game-text"
|
|
47
|
+
],
|
|
48
|
+
"browserAuthoritiesForbidden": [
|
|
49
|
+
"filesystem",
|
|
50
|
+
"process",
|
|
51
|
+
"electron",
|
|
52
|
+
"unreal",
|
|
53
|
+
"native-reader"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"capabilities": {
|
|
57
|
+
"required": ["saved-project", "saved-asset-reader"],
|
|
58
|
+
"optional": ["locate-occurrence-in-unreal"],
|
|
59
|
+
"notRequired": ["perforce", "running-unreal-editor", "ue-shed-unreal-plugin"]
|
|
60
|
+
},
|
|
61
|
+
"conformance": {
|
|
62
|
+
"sourceCommand": "pnpm test:release:packages",
|
|
63
|
+
"journey": ["scan", "coverage", "search", "focus", "offline-unreal"],
|
|
64
|
+
"targetMustVerifyPackagedRuntime": true,
|
|
65
|
+
"targetMustUseRealHostTransport": true,
|
|
66
|
+
"targetMustRecordAdoptionReceipt": true
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
package/dist/corpus.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AssetReader, type SavedAssetInspection, type SavedAssetScan } from "@ue-shed/unreal-assets";
|
|
2
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
3
|
+
import { type TextCorpus, type TextOccurrence } from "./schema.js";
|
|
4
|
+
interface ExtractionProgress {
|
|
5
|
+
readonly phase: "idle" | "scanning" | "ready" | "failed";
|
|
6
|
+
readonly processedAssets: number;
|
|
7
|
+
readonly totalAssets: number;
|
|
8
|
+
}
|
|
9
|
+
declare const TextCorpusScanError_base: Schema.Class<TextCorpusScanError, Schema.TaggedStruct<"TextCorpusScanError", {
|
|
10
|
+
readonly code: Schema.Literals<readonly ["invalid_project", "scan_limit_exceeded"]>;
|
|
11
|
+
readonly message: Schema.String;
|
|
12
|
+
readonly recovery: Schema.String;
|
|
13
|
+
readonly retrySafe: Schema.Boolean;
|
|
14
|
+
}>, import("effect/Cause").YieldableError>;
|
|
15
|
+
export declare class TextCorpusScanError extends TextCorpusScanError_base {
|
|
16
|
+
}
|
|
17
|
+
export declare const TextCorpusScanOptions: Schema.Struct<{
|
|
18
|
+
readonly concurrency: Schema.optional<Schema.Int>;
|
|
19
|
+
readonly maximumAssets: Schema.optional<Schema.Int>;
|
|
20
|
+
readonly projectRoot: Schema.String;
|
|
21
|
+
}>;
|
|
22
|
+
export type TextCorpusScanOptions = Schema.Schema.Type<typeof TextCorpusScanOptions>;
|
|
23
|
+
export declare const STRING_TABLE_CLASS = "/Script/Engine.StringTable";
|
|
24
|
+
/**
|
|
25
|
+
* Tagged property serialization writes each property's type as a name-table entry, so a package
|
|
26
|
+
* holding any `FText` names `TextProperty` in its header.
|
|
27
|
+
*/
|
|
28
|
+
export declare const TEXT_PROPERTY_NAME = "TextProperty";
|
|
29
|
+
/** @deprecated Prefer TextCorpusScanOptions */
|
|
30
|
+
export type ScanTextCorpusOptions = TextCorpusScanOptions;
|
|
31
|
+
export type TextPackageOutcome = {
|
|
32
|
+
readonly status: "inspected";
|
|
33
|
+
readonly packageFile: string;
|
|
34
|
+
readonly inspection: SavedAssetInspection;
|
|
35
|
+
} | {
|
|
36
|
+
readonly status: "failed";
|
|
37
|
+
readonly packageFile: string;
|
|
38
|
+
readonly message: string;
|
|
39
|
+
};
|
|
40
|
+
export declare function textOccurrencesFromInspection(options: {
|
|
41
|
+
readonly inspection: SavedAssetInspection;
|
|
42
|
+
readonly packageFile: string;
|
|
43
|
+
}): readonly TextOccurrence[];
|
|
44
|
+
/** Paths whose existing header-index projection proves they may contribute game text. */
|
|
45
|
+
export declare function textPackagePathsFromProjectIndex(index: SavedAssetScan): readonly string[];
|
|
46
|
+
/**
|
|
47
|
+
* Package counts from a batched scan. A filtered scan never reports packages the reader ruled out
|
|
48
|
+
* from their headers, so discovered and inspected cannot be derived from `outcomes` alone.
|
|
49
|
+
*/
|
|
50
|
+
export interface TextPackageCounts {
|
|
51
|
+
readonly discoveredPackages: number;
|
|
52
|
+
readonly inspectedPackages: number;
|
|
53
|
+
}
|
|
54
|
+
export declare function buildTextCorpus(outcomes: readonly TextPackageOutcome[], counts?: TextPackageCounts): TextCorpus;
|
|
55
|
+
export interface TextCorpusServiceShape {
|
|
56
|
+
readonly progress: () => Effect.Effect<ExtractionProgress>;
|
|
57
|
+
readonly scan: (options: TextCorpusScanOptions) => Effect.Effect<TextCorpus, TextCorpusScanError>;
|
|
58
|
+
readonly scanFromProjectIndex: (index: SavedAssetScan, options: TextCorpusScanOptions) => Effect.Effect<TextCorpus, TextCorpusScanError>;
|
|
59
|
+
}
|
|
60
|
+
declare const TextCorpusService_base: Context.ServiceClass<TextCorpusService, "@ue-shed/game-text/TextCorpus", TextCorpusServiceShape>;
|
|
61
|
+
/** Canonical TextCorpus domain service (plan name: TextCorpus.Service). */
|
|
62
|
+
export declare class TextCorpusService extends TextCorpusService_base {
|
|
63
|
+
}
|
|
64
|
+
export declare const TextCorpusServiceLive: Layer.Layer<TextCorpusService, never, AssetReader>;
|
|
65
|
+
export type TextCorpusServiceTestShape = Omit<TextCorpusServiceShape, "progress" | "scanFromProjectIndex"> & Partial<Pick<TextCorpusServiceShape, "progress" | "scanFromProjectIndex">>;
|
|
66
|
+
export declare function makeTextCorpusServiceTestLayer(service: TextCorpusServiceTestShape): Layer.Layer<TextCorpusService>;
|
|
67
|
+
/** Compatibility accessor until Plans 012–014 compose TextCorpusService layers directly. */
|
|
68
|
+
export declare function scanTextCorpus(options: TextCorpusScanOptions): Effect.Effect<TextCorpus, TextCorpusScanError, AssetReader>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=corpus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../src/corpus.ts"],"names":[],"mappings":"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"}
|