@patterkit/ops 0.18.0 → 0.20.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.
Files changed (3) hide show
  1. package/dist/index.d.ts +165 -18
  2. package/dist/index.js +665 -214
  3. package/package.json +10 -10
package/dist/index.d.ts CHANGED
@@ -1,11 +1,13 @@
1
- import { ProjectFile, Bundle, HostScopeRegistry, Scene, LocaleFile, AuthoringFile, GameData, CoverageDriver, GrammaticalGender, DocumentationClass, DocLine, HandoffFile, Suggestion, LineBeat, Comment } from '@patterkit/model';
1
+ import { ProjectFile, Bundle, HostScopeRegistry, Scene, LocaleFile, AuthoringFile, ExtensionShard, GameData, CoverageDriver, GrammaticalGender, GameDataNodeKind, DocumentationClass, DocLine, HandoffFile, Suggestion, LineBeat, Comment } from '@patterkit/model';
2
2
  import { NamedScopesFile, MergedScopes, ScopesIssue, ScopesCatalogueEntry, ScopesFile } from '@wildwinter/scoperegistry/scopes';
3
3
  export { GAME_SCOPES_DIR, GAME_SCOPES_FILE, serialiseScopesFile } from '@wildwinter/scoperegistry/scopes';
4
4
  import { ScopeDeclaration, ScopeRegistry } from '@wildwinter/scoperegistry';
5
5
  import { ValidationIssue } from '@patterkit/core';
6
- import { ConditionIssue } from '@patterkit/compiler';
6
+ import { ConditionIssue, ExtensionIssue, ExportInput } from '@patterkit/compiler';
7
7
  import { ChoiceOption, PlayError } from '@patterkit/runtime';
8
8
  import { Dialect } from '@wildwinter/expr';
9
+ export { renameStageInExpression } from '@wildwinter/expr';
10
+ import { Manifest } from '@wildwinter/toolkit/extensions';
9
11
  export { isUnsafeEntry } from '@wildwinter/toolkit/archive';
10
12
 
11
13
  /** One file write an op wants performed. `content` is full canonical file text. */
@@ -175,6 +177,30 @@ interface LoadedProject {
175
177
  gameScopes?: GameScopes;
176
178
  /** The project names a game scopes folder (`gameScopes`) that doesn't exist: a project error. */
177
179
  gameScopesMissing?: string;
180
+ /** The extensions' manifests, from `extensions/<id>.extension.json`, sorted by path. Read whether or not
181
+ * the project takes them (`ProjectFile.extensions` says which it does). `manifest` is the parsed JSON as
182
+ * it came, unchecked: the extension pass says whether it is sound. Empty after a landing load. */
183
+ manifests: LoadedManifest[];
184
+ /** The extension data shards (`.patterextension`, under `layout.extensions`), sorted by path. Empty after
185
+ * a landing load. */
186
+ extensionShards: ExtensionShard[];
187
+ /** Source file of each entry in `extensionShards`, index-aligned. */
188
+ extensionShardFiles: string[];
189
+ /** Extension files that would not load (a manifest or a data shard that will not parse, or a shard of
190
+ * the wrong shape). Unlike a scene, an extension's file never stops the project loading: it is left out
191
+ * and said here, and its data left untouched on disk. */
192
+ extensionIssues: Array<{
193
+ file: string;
194
+ message: string;
195
+ }>;
196
+ }
197
+ /** One extension's manifest, as the project keeps it in `extensions/`. */
198
+ interface LoadedManifest {
199
+ /** Absolute path: `<root>/extensions/<id>.extension.json`. */
200
+ path: string;
201
+ /** The file's stem, which names the extension it should be. */
202
+ id: string;
203
+ manifest: unknown;
178
204
  }
179
205
  /**
180
206
  * Find the nearest `*.patterproj` at or above `startPath` - one readdir per
@@ -238,7 +264,8 @@ interface ValidateResult {
238
264
  * deliberately NOT part of `ok`: content is written in pieces, so a gate whose writer has not been
239
265
  * authored yet is the normal state mid-work and must never fail a build. */
240
266
  reachability: ConditionIssue[];
241
- /** Lingering `.patterconflict` sidecars - an unresolved merge (patter-merge.md §3.6). */
267
+ /** Lingering `.patterconflict` sidecars, and shards carrying the `unresolved` mark a merge writes into the
268
+ * shard itself: an unresolved merge (patter-merge.md §3.6). */
242
269
  unresolvedMerges: HygieneIssue[];
243
270
  /** Patter shards on disk that the project does NOT contain - see `orphanShards`. */
244
271
  orphans: HygieneIssue[];
@@ -249,6 +276,12 @@ interface ValidateResult {
249
276
  * error: the compile refuses it), and as warnings a shard for a scene the project lacks, one in a
250
277
  * language it does not declare, or two shards for one scene and language. */
251
278
  localisation: GameScopesIssue[];
279
+ /** The project's Patter extensions: their manifests, the project's pins and settings, claims on gameData
280
+ * fields, and every value in the extension data shards against its manifest (the compiler's
281
+ * `extensionPass`), with an entry for a node that has gone reported per entry, and an extension file that
282
+ * would not load. Errors count against `ok`, and export refuses them; warnings (a missing manifest, an
283
+ * orphaned entry, a `.gitattributes` with no merge rule for the data) don't. */
284
+ extensions: ExtensionIssue[];
252
285
  /** Only ERRORS count: a warning (another tool's scope, say) never fails a build. */
253
286
  ok: boolean;
254
287
  }
@@ -362,6 +395,12 @@ declare function planBuild(loaded: LoadedProject, opts?: ExportOptions & {
362
395
  * line made a freshly exported bundle read as stale for ever, and coverage counted beats that never ship.
363
396
  */
364
397
  declare function compileLoaded(loaded: LoadedProject): Bundle;
398
+ /**
399
+ * A loaded project's extension files, as the compiler's extension pass reads them: the manifests, and each
400
+ * data shard with its file. What is wrong with them is validate's to say (`extensionPass` over the same
401
+ * input); the compile never throws on it, and leaves an entry with an error out of the bundle.
402
+ */
403
+ declare function loadedExtensions(loaded: LoadedProject): NonNullable<ExportInput["extensions"]>;
365
404
  /**
366
405
  * The default bundle location, relative to the project root, used when the project pins no
367
406
  * `export.bundle`: a SIBLING `patter-dist/` folder, not inside the project. On macOS the project folder is
@@ -681,6 +720,9 @@ interface FormatResult {
681
720
  write?: PlannedWrite;
682
721
  /** Not Patter source (not a shard by its extension), so left alone. */
683
722
  skipped?: boolean;
723
+ /** What else changed in it, for a person reading the output: an extension taken at a new version (the
724
+ * project file), or the stages renamed in its data (an extension shard). */
725
+ notes?: string[];
684
726
  }
685
727
  /** Compute the canonical form of each file. Returns planned writes; writes nothing. */
686
728
  declare function runFormat(paths: string[]): FormatResult[];
@@ -1320,15 +1362,9 @@ interface StageRenameResult {
1320
1362
  /** Expressions rewritten. */
1321
1363
  expressions: number;
1322
1364
  }
1323
- type Ref = (scope: string, name: string) => boolean;
1365
+
1324
1366
  /** Patter's dialect, with the project's host scopes, so `@world.act` parses as it compiles. */
1325
1367
  declare function stageDialect(project: ProjectFile, gameScopes?: GameScopes): Dialect;
1326
- /**
1327
- * Rewrite the stage literal `from` to `to` wherever `src` compares it with the quality `isTarget` names (or,
1328
- * with `assigned`, where the whole expression is that literal: a set effect's value assigned to the quality).
1329
- * Undefined when nothing changed or the source doesn't parse.
1330
- */
1331
- declare function renameStageInExpression(src: string, dialect: Dialect, isTarget: Ref, from: string, to: string, assigned?: boolean): string | undefined;
1332
1368
  /**
1333
1369
  * Carry a quality's stage rename, `from` to `to`, into every expression that compares the quality with the
1334
1370
  * old name or sets it to it. Mutates the scenes in place. The declaration (and its default) is the caller's
@@ -1336,10 +1372,23 @@ declare function renameStageInExpression(src: string, dialect: Dialect, isTarget
1336
1372
  */
1337
1373
  declare function renameStage(scenes: Scene[], target: StageTarget, from: string, to: string, dialect: Dialect): StageRenameResult;
1338
1374
  /**
1339
- * How many expressions order the quality against a stage (`<`, `<=`, `>`, `>=`): the gates whose meaning a
1340
- * reorder changes, though no value does.
1375
+ * How many gates order the quality against a stage (`<`, `<=`, `>`, `>=`), counting each: the gates whose
1376
+ * meaning a reorder changes, though no value does.
1341
1377
  */
1342
1378
  declare function stageGateCount(scenes: Scene[], target: StageTarget, dialect: Dialect): number;
1379
+ /** What a gameData stage rename touched: the scenes whose nodes changed, and how many values. */
1380
+ interface GameDataStageRenameResult {
1381
+ scenes: Scene[];
1382
+ values: number;
1383
+ }
1384
+ /**
1385
+ * Carry a quality gameData field's stage rename, `from` to `to`, into every node of the field's type that
1386
+ * holds the old name (patter-qualities.md section 2): a field's values are stored by stage name, as a
1387
+ * property's are, so a rename has to reach each of them or they quietly stop being on the ladder. The
1388
+ * declaration (`project.gameDataFields`) is the caller's to change. No expression reads a gameData value, so
1389
+ * there are no literals to carry and no gates a reorder changes. Mutates the scenes in place.
1390
+ */
1391
+ declare function renameGameDataStage(scenes: Scene[], kind: GameDataNodeKind, field: string, from: string, to: string): GameDataStageRenameResult;
1343
1392
 
1344
1393
  /** One address written down. */
1345
1394
  interface PinnedName {
@@ -1362,7 +1411,7 @@ interface PinPlan {
1362
1411
  declare function planPins(loaded: LoadedProject): PinPlan;
1363
1412
 
1364
1413
  /** The source-shard extensions a document carries (the merge-friendly truth). */
1365
- declare const SHARD_EXTENSIONS: readonly [".patterflow", ".patterloc", ".patterx", ".patterproj"];
1414
+ declare const SHARD_EXTENSIONS: readonly [".patterflow", ".patterloc", ".patterx", ".patterproj", ".patterextension"];
1366
1415
  /** Manifest embedded at the document root - what this envelope is and contains. */
1367
1416
  interface DocumentManifest {
1368
1417
  schema: "patter/document@0";
@@ -1370,7 +1419,8 @@ interface DocumentManifest {
1370
1419
  id: string;
1371
1420
  name: string;
1372
1421
  };
1373
- /** Shard paths (relative, forward-slashed), sorted - the document's contents. */
1422
+ /** Shard paths (relative, forward-slashed), sorted - the document's contents. The extensions' manifests
1423
+ * (`extensions/<id>.extension.json`) are among them: source the project compiles from. */
1374
1424
  files: string[];
1375
1425
  /** The game scopes files the pack carries as `game-scopes/<name>` entries, by name, sorted. Absent
1376
1426
  * when the project has no game scopes folder (or it holds none). */
@@ -1382,7 +1432,7 @@ interface DocumentManifest {
1382
1432
  /** Pack a project's source shards into a `.patterpack` document (zip bytes). */
1383
1433
  declare function runPack(startPath: string): Promise<Buffer>;
1384
1434
 
1385
- type MergeFileType = "flow" | "loc" | "authoring" | "project";
1435
+ type MergeFileType = "flow" | "loc" | "authoring" | "project" | "extension";
1386
1436
  type ConflictKind = "both-changed" | "delete-vs-edit" | "no-timestamp" | "moved" | "added-both" | "structural";
1387
1437
  /** One unresolved 3-way conflict; provisional output is OURS. */
1388
1438
  interface Conflict {
@@ -1403,7 +1453,8 @@ interface Warning {
1403
1453
  }
1404
1454
  interface MergeResult {
1405
1455
  type: MergeFileType;
1406
- /** The merged model - valid canonical source; conflicts resolved to OURS. */
1456
+ /** The merged model - valid canonical source; conflicts resolved to OURS, and named under `unresolved`
1457
+ * when there are any. */
1407
1458
  merged: Record<string, unknown>;
1408
1459
  conflicts: Conflict[];
1409
1460
  /** Advisory notes (e.g. both sides inserted at the same anchor, kept ours-then-theirs). */
@@ -1435,14 +1486,40 @@ declare function sidecarIssues(sidecarPaths: readonly string[]): Array<{
1435
1486
  declare function detectMergeType(file: {
1436
1487
  schema?: unknown;
1437
1488
  }): MergeFileType;
1438
- /** 3-way merge BASE / OURS / THEIRS (parsed models). Dispatches by file type. */
1489
+ /**
1490
+ * 3-way merge BASE / OURS / THEIRS (parsed models). Dispatches by file type.
1491
+ *
1492
+ * Every shard type carries the `unresolved` mark: a mark already on either side is carried until somebody
1493
+ * resolves it (by removing it), the merge itself runs on the content alone, and this merge's own clashes
1494
+ * are written in beside it. An extension shard merges field by field by its manifest's types when the
1495
+ * caller passes the project's `manifest`; without one, each node's entry merges as one value, which is
1496
+ * always safe.
1497
+ */
1439
1498
  declare function runMerge(base: Obj, ours: Obj, theirs: Obj, opts?: {
1440
1499
  type?: MergeFileType;
1500
+ manifest?: Manifest;
1441
1501
  }): MergeResult;
1502
+ /** A shard's text and where it is, for `unresolvedMarkIssues`. */
1503
+ interface ShardText {
1504
+ file: string;
1505
+ text: string;
1506
+ }
1507
+ /**
1508
+ * The issues a shard carrying the `unresolved` mark raises: one per clash, naming the shard and where in
1509
+ * it. Every shard type, read from the project's files as they are, so a mark is refused whatever shard it
1510
+ * is in (ruled 2026-10-18). `validate`, `export`, and `pack` all ask, as they ask about sidecars. Pure: the
1511
+ * caller reads the files.
1512
+ */
1513
+ declare function unresolvedMarkIssues(files: readonly ShardText[]): Array<{
1514
+ file: string;
1515
+ message: string;
1516
+ }>;
1442
1517
  /** Every authoring key with a strategy of its own above. A key NOT here falls to the plain 3-way, which
1443
1518
  * is coarse but never lossy; the set exists so the fallback does not re-merge what was already merged
1444
1519
  * (an empty result from `setIf` must not be reconsidered as "unhandled"). */
1445
1520
  declare const AUTHORING_HANDLED: Set<string>;
1521
+ /** Every project key with a strategy of its own in `mergeProject`; anything else merges as a plain 3-way. */
1522
+ declare const PROJECT_HANDLED: Set<string>;
1446
1523
 
1447
1524
  /** A document entry whose path escapes the target dir, or that names a dot-file or dot-folder (rejected). */
1448
1525
  declare class UnsafeEntryError extends Error {
@@ -1528,6 +1605,11 @@ interface UnpackMergeResult {
1528
1605
  /** Handoff records the pack brought (relative paths): added, or with reimports from their side added to
1529
1606
  * ours. Their writes are in `writes`. Absent when the pack carried none that changed anything. */
1530
1607
  handoffs?: string[];
1608
+ /** Extension manifests (relative paths) the pack returned with content other than ours. Ours is kept: an
1609
+ * extension's manifest is the extension's own file, which a recipient never edits, so a difference means
1610
+ * the two sides had different versions of the extension, and taking one is a decision for the project
1611
+ * (and `patter format`, after). Theirs is taken only where we have none. Absent when none differ. */
1612
+ manifestsKept?: string[];
1531
1613
  }
1532
1614
  /**
1533
1615
  * Merge a RETURNED `.patterpack` document (`theirs`) back into the project at
@@ -1549,6 +1631,71 @@ declare function classesForChannel(classes: DocumentationClass[], channel: strin
1549
1631
  */
1550
1632
  declare function resolveDocumentation(loaded: LoadedProject, channel: string): Map<string, DocLine[]>;
1551
1633
 
1634
+ /** Where a project keeps an extension's manifest. */
1635
+ declare const manifestPath: (projectDir: string, id: string) => string;
1636
+ /**
1637
+ * The project's copy of an extension's manifest, when there is a sound one. Undefined when it's missing,
1638
+ * won't parse, is itself mid-conflict, or has errors: the merge then takes each node's entry as one value,
1639
+ * which is always safe (rule 4 of the merge).
1640
+ */
1641
+ declare function readProjectManifest(projectDir: string, id: string): Manifest | undefined;
1642
+ /** A manifest's text as a merge may use it: undefined when it won't parse, is mid-conflict itself, or has
1643
+ * errors. For a host holding files as text (a pack, say). */
1644
+ declare function soundManifest(text: string): Manifest | undefined;
1645
+ /** A manifest lookup for a merge in one project folder. */
1646
+ declare const projectManifests: (projectDir: string) => (id: string) => Manifest | undefined;
1647
+ /** What taking new extension versions writes: each data shard with its renamed stages renamed, and the
1648
+ * project file with the new pins. */
1649
+ interface ExtensionUpgrade {
1650
+ /** Absolute path to canonical content. */
1651
+ readonly writes: Map<string, string>;
1652
+ /** A line per change, for a person reading the output. */
1653
+ readonly report: string[];
1654
+ /** The same changes by the file each is in: the pins by the project file, the renames by shard. */
1655
+ readonly notes: Map<string, string[]>;
1656
+ }
1657
+ /**
1658
+ * Take every extension whose manifest is a version other than the project's pin (`patter format` on a
1659
+ * project folder): the stages the manifest says it renamed are renamed in that extension's data, and the pin
1660
+ * moves to the manifest's version, as one step (the proposal's "renamedStages" rule). A manifest that is
1661
+ * missing or unsound is left alone, as its data is. Until it runs, a renamed stage still in the data
1662
+ * compiles under its new name, with a warning.
1663
+ */
1664
+ declare function planExtensionUpgrades(loaded: LoadedProject): ExtensionUpgrade;
1665
+ /** One extension data shard a cast rename rewrote. */
1666
+ interface CastKeyRewrite {
1667
+ path: string;
1668
+ shard: ExtensionShard;
1669
+ /** How many keys and values it renamed. */
1670
+ renamed: number;
1671
+ }
1672
+ /**
1673
+ * A cast rename carried into extension data (ruling 8 of the extensions proposal): every map key whose key
1674
+ * type is a reference to `cast`, and every reference value to `cast`, at any depth, that names an old name
1675
+ * is rewritten to the new one. All at once, so a swap of two names lands as a swap. Only what the manifest
1676
+ * declares is touched, so a shard whose manifest is missing or unsound is left as it is (a missing cast key
1677
+ * stays the error validation says it is). A map that already holds the new name as a key keeps both keys,
1678
+ * and validation reports the old one. Pure: returns the shards it changed, as new objects.
1679
+ */
1680
+ declare function renameCastKeys(shards: ReadonlyArray<{
1681
+ path: string;
1682
+ shard: ExtensionShard;
1683
+ }>, manifests: ReadonlyArray<{
1684
+ id: string;
1685
+ manifest: unknown;
1686
+ }>, renames: ReadonlyMap<string, string>): CastKeyRewrite[];
1687
+
1688
+ /** Old name -> new name, with no-ops and blanks dropped. Null when nothing is renamed. */
1689
+ declare function cleanCastRenames(renames: Record<string, string> | undefined): Map<string, string> | null;
1690
+ /** Rewrite the speaker of `scene`'s lines (option prompts among them) through `renames`, in place; all at
1691
+ * once, so a swap of two names lands as a swap. Returns how many lines changed. */
1692
+ declare function renameCastInScene(scene: Scene, renames: ReadonlyMap<string, string>): number;
1693
+ /** Move a record's `cast:` and `speaker:` keys through `renames`, in place, keeping their order; all at once.
1694
+ * A key whose new name is already there keeps its old name. True when anything moved. */
1695
+ declare function moveCastKeys<T>(record: Record<string, T>, renames: ReadonlyMap<string, string>): boolean;
1696
+ /** A project-level loc shard's strings moved through `renames`, in place. True when anything moved. */
1697
+ declare function renameCastStrings(loc: LocaleFile, renames: ReadonlyMap<string, string>): boolean;
1698
+
1552
1699
  /** The project folder handoff records live in. */
1553
1700
  declare const HANDOFF_DIR = "handoffs";
1554
1701
  /** Where a handoff's record lives in the project at `root`. */
@@ -1791,4 +1938,4 @@ declare const REFUSE_MISSING_SHARE = 0.25;
1791
1938
  /** Plan an import. Reads the handoff record named in the document from the project. */
1792
1939
  declare function planEditableImport(loaded: LoadedProject, returned: ReturnedDoc, opts: ImportOptions): ImportPlan;
1793
1940
 
1794
- export { AUDIO_MANIFEST_FILE, AUDIO_MANIFEST_SCHEMA, AUTHORING_HANDLED, type ApplyStats, type AudioEntry, type AudioRung, type AudioSnapshot, type BuildPlan, type BundlePosture, CONFLICT_SIDECAR, type CharacterReport, type Conflict, type ConflictKind, type ContentError, type CoverageAsyncHooks, type CoverageBeat, type CoverageHooks, type CoverageOptions, type CoverageOrder, type CoverageReport, type DecisionPlan, type DecisionResult, type DocumentManifest, type EditableScript, type EditableScriptOptions, type ExportOptions, type FormatResult, GAME_SCOPES_OWNER, type GameScopes, type GameScopesIssue, HANDOFF_DIR, type HandoffIssue, type HygieneIssue, type ImportOptions, type ImportPlan, type ImportProblem, type ImportReport, type InitOptions, type InitResult, type InitVcs, type LoadedProject, type LocCatalog, type LocEntry, type LocaleReport, type MergeFileType, type MergeResult, type MergedShard, NotAPackError, type OpenSuggestion, PATTER_SCOPES_FILE, PATTER_SCOPES_OWNER, type PinPlan, type PinnedName, type PlannedWrite, type PlayEvent, type PlayOptions, type PlayOutcome, type PlayResult, type ProvenanceCheck, RARE_REACH_PCT, REFUSE_MISSING_SHARE, type Random, type ReadBox, type ReadComment, type ReadItem, type ReadMarker, type ReadParagraph, type ReadText, type ReplaceHit, type ReplaceOptions, type ReplacePlan, type ReportData, type ReportTotals, type ResolveEntry, type ReturnedDoc, SCRIPT_FONT_FILES, SCRIPT_FONT_PACKAGES, SHARD_EXTENSIONS, type SceneReport, type ScriptDoc, type ScriptElement, type ScriptFace, type SearchFocus, type StageRenameResult, type StageTarget, type SuggestionDecision, type TrackedChange, type UnpackMergeResult, type UnpackResult, UnsafeEntryError, UnsupportedMergeError, type ValidateResult, type VoiceLine, type VoiceScript, type VoicedCounts, type WebExport, type WrittenCounts, applyLoc, applySceneOrder, applySuggestionDecisions, applyWrites, audioFolderRungs, audioFoldersActive, audioManifest, audioManifestWrite, authoringPath, besideBundlePath, bundleOutputPath, catalogToJson, catalogToPo, catalogToXlsx, classesForChannel, compileLoaded, cueLabel, currentBundlePosture, defaultBundlePath, defaultGameScopesDir, detectMergeType, discoverGameScopes, drivableScopes, exportBlockers, exportEditableScript, extractLoc, findProjectFile, formatMarker, gameScopeTokens, gameScopesCatalogue, gameScopesSnapshot, handoffPath, handoffWrite, hostScopeTokens, issueMarkerCodes, jsonToCatalog, leastReachedFirst, listOpenSuggestions, listProjectTags, loadProject, loadProjectLanding, markerLength, newHandoffId, parseHandoff, patterScopesFile, patterScopesStale, patterScopesWrite, pickAudio, planBuild, planEditableImport, planPins, planReturnedWorld, planShareScopes, planWorldSave, poToCatalog, previewRegistry, projectStringSources, proposeCoverageDrivers, qualifierNamer, reachabilityIssues, readEditableDocx, readGameScopes, readHandoff, readHandoffs, readMarker, renameStage, renameStageInExpression, renderCoverageText, renderPlay, renderReportText, resolveDocumentation, resolveStart, runCoverage, runCoverageAsync, runExport, runExportFull, runExportHtml, runExportWeb, runFormat, runInit, runMerge, runPack, runPlay, runPropertyUsage, runReplace, runReport, runReportXlsx, runResolve, runScriptDoc, runSearch, runStatusBrowse, runTagBrowse, runUnpack, runUnpackMerge, runValidate, runVoiceScript, scanAudio, scanAudioStatus, sceneIdForShard, scriptFontLicencePath, scriptFontLicences, scriptToDocx, scriptToPdf, serialiseHandoff, setCut, sidecarIssues, stageDialect, stageGateCount, staleParts, useScriptFontFiles, vcsConfigWrites, voiceScriptToXlsx, worldSettingsScopes, xlsxToCatalog };
1941
+ export { AUDIO_MANIFEST_FILE, AUDIO_MANIFEST_SCHEMA, AUTHORING_HANDLED, type ApplyStats, type AudioEntry, type AudioRung, type AudioSnapshot, type BuildPlan, type BundlePosture, CONFLICT_SIDECAR, type CastKeyRewrite, type CharacterReport, type Conflict, type ConflictKind, type ContentError, type CoverageAsyncHooks, type CoverageBeat, type CoverageHooks, type CoverageOptions, type CoverageOrder, type CoverageReport, type DecisionPlan, type DecisionResult, type DocumentManifest, type EditableScript, type EditableScriptOptions, type ExportOptions, type ExtensionUpgrade, type FormatResult, GAME_SCOPES_OWNER, type GameDataStageRenameResult, type GameScopes, type GameScopesIssue, HANDOFF_DIR, type HandoffIssue, type HygieneIssue, type ImportOptions, type ImportPlan, type ImportProblem, type ImportReport, type InitOptions, type InitResult, type InitVcs, type LoadedManifest, type LoadedProject, type LocCatalog, type LocEntry, type LocaleReport, type MergeFileType, type MergeResult, type MergedShard, NotAPackError, type OpenSuggestion, PATTER_SCOPES_FILE, PATTER_SCOPES_OWNER, PROJECT_HANDLED, type PinPlan, type PinnedName, type PlannedWrite, type PlayEvent, type PlayOptions, type PlayOutcome, type PlayResult, type ProvenanceCheck, RARE_REACH_PCT, REFUSE_MISSING_SHARE, type Random, type ReadBox, type ReadComment, type ReadItem, type ReadMarker, type ReadParagraph, type ReadText, type ReplaceHit, type ReplaceOptions, type ReplacePlan, type ReportData, type ReportTotals, type ResolveEntry, type ReturnedDoc, SCRIPT_FONT_FILES, SCRIPT_FONT_PACKAGES, SHARD_EXTENSIONS, type SceneReport, type ScriptDoc, type ScriptElement, type ScriptFace, type SearchFocus, type ShardText, type StageRenameResult, type StageTarget, type SuggestionDecision, type TrackedChange, type UnpackMergeResult, type UnpackResult, UnsafeEntryError, UnsupportedMergeError, type ValidateResult, type VoiceLine, type VoiceScript, type VoicedCounts, type WebExport, type WrittenCounts, applyLoc, applySceneOrder, applySuggestionDecisions, applyWrites, audioFolderRungs, audioFoldersActive, audioManifest, audioManifestWrite, authoringPath, besideBundlePath, bundleOutputPath, catalogToJson, catalogToPo, catalogToXlsx, classesForChannel, cleanCastRenames, compileLoaded, cueLabel, currentBundlePosture, defaultBundlePath, defaultGameScopesDir, detectMergeType, discoverGameScopes, drivableScopes, exportBlockers, exportEditableScript, extractLoc, findProjectFile, formatMarker, gameScopeTokens, gameScopesCatalogue, gameScopesSnapshot, handoffPath, handoffWrite, hostScopeTokens, issueMarkerCodes, jsonToCatalog, leastReachedFirst, listOpenSuggestions, listProjectTags, loadProject, loadProjectLanding, loadedExtensions, manifestPath, markerLength, moveCastKeys, newHandoffId, parseHandoff, patterScopesFile, patterScopesStale, patterScopesWrite, pickAudio, planBuild, planEditableImport, planExtensionUpgrades, planPins, planReturnedWorld, planShareScopes, planWorldSave, poToCatalog, previewRegistry, projectManifests, projectStringSources, proposeCoverageDrivers, qualifierNamer, reachabilityIssues, readEditableDocx, readGameScopes, readHandoff, readHandoffs, readMarker, readProjectManifest, renameCastInScene, renameCastKeys, renameCastStrings, renameGameDataStage, renameStage, renderCoverageText, renderPlay, renderReportText, resolveDocumentation, resolveStart, runCoverage, runCoverageAsync, runExport, runExportFull, runExportHtml, runExportWeb, runFormat, runInit, runMerge, runPack, runPlay, runPropertyUsage, runReplace, runReport, runReportXlsx, runResolve, runScriptDoc, runSearch, runStatusBrowse, runTagBrowse, runUnpack, runUnpackMerge, runValidate, runVoiceScript, scanAudio, scanAudioStatus, sceneIdForShard, scriptFontLicencePath, scriptFontLicences, scriptToDocx, scriptToPdf, serialiseHandoff, setCut, sidecarIssues, soundManifest, stageDialect, stageGateCount, staleParts, unresolvedMarkIssues, useScriptFontFiles, vcsConfigWrites, voiceScriptToXlsx, worldSettingsScopes, xlsxToCatalog };