@lingjingai/scriptctl 0.20.0 → 0.21.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/dist/cli.js +99 -11
- package/dist/cli.js.map +1 -1
- package/dist/common.d.ts +1 -0
- package/dist/common.js.map +1 -1
- package/dist/domain/script/address.d.ts +30 -0
- package/dist/domain/script/address.js +141 -0
- package/dist/domain/script/address.js.map +1 -0
- package/dist/domain/script/lookups.d.ts +33 -0
- package/dist/domain/script/lookups.js +309 -0
- package/dist/domain/script/lookups.js.map +1 -0
- package/dist/domain/script/patch/apply.d.ts +4 -0
- package/dist/domain/script/patch/apply.js +38 -0
- package/dist/domain/script/patch/apply.js.map +1 -0
- package/dist/domain/script/patch/helpers.d.ts +11 -0
- package/dist/domain/script/patch/helpers.js +141 -0
- package/dist/domain/script/patch/helpers.js.map +1 -0
- package/dist/domain/script/patch/ops-action.d.ts +12 -0
- package/dist/domain/script/patch/ops-action.js +371 -0
- package/dist/domain/script/patch/ops-action.js.map +1 -0
- package/dist/domain/script/patch/ops-asset.d.ts +13 -0
- package/dist/domain/script/patch/ops-asset.js +363 -0
- package/dist/domain/script/patch/ops-asset.js.map +1 -0
- package/dist/domain/script/patch/ops-dialogue.d.ts +5 -0
- package/dist/domain/script/patch/ops-dialogue.js +233 -0
- package/dist/domain/script/patch/ops-dialogue.js.map +1 -0
- package/dist/domain/script/patch/ops-meta.d.ts +3 -0
- package/dist/domain/script/patch/ops-meta.js +47 -0
- package/dist/domain/script/patch/ops-meta.js.map +1 -0
- package/dist/domain/script/patch/ops-scene.d.ts +6 -0
- package/dist/domain/script/patch/ops-scene.js +345 -0
- package/dist/domain/script/patch/ops-scene.js.map +1 -0
- package/dist/domain/script/patch/ops-state.d.ts +8 -0
- package/dist/domain/script/patch/ops-state.js +146 -0
- package/dist/domain/script/patch/ops-state.js.map +1 -0
- package/dist/domain/script/patch/registry.d.ts +2 -0
- package/dist/domain/script/patch/registry.js +50 -0
- package/dist/domain/script/patch/registry.js.map +1 -0
- package/dist/domain/script/patch/types.d.ts +10 -0
- package/dist/domain/script/patch/types.js +2 -0
- package/dist/domain/script/patch/types.js.map +1 -0
- package/dist/domain/script/refs.d.ts +4 -0
- package/dist/domain/script/refs.js +152 -0
- package/dist/domain/script/refs.js.map +1 -0
- package/dist/domain/script/schema.d.ts +6 -0
- package/dist/domain/script/schema.js +53 -0
- package/dist/domain/script/schema.js.map +1 -0
- package/dist/domain/script/selector.d.ts +45 -0
- package/dist/domain/script/selector.js +187 -0
- package/dist/domain/script/selector.js.map +1 -0
- package/dist/domain/script/shared.d.ts +15 -0
- package/dist/domain/script/shared.js +37 -0
- package/dist/domain/script/shared.js.map +1 -0
- package/dist/domain/script/validate.d.ts +22 -0
- package/dist/domain/script/validate.js +844 -0
- package/dist/domain/script/validate.js.map +1 -0
- package/dist/help-text.js +21 -4
- package/dist/help-text.js.map +1 -1
- package/dist/output.d.ts +1 -1
- package/dist/output.js +11 -1
- package/dist/output.js.map +1 -1
- package/dist/usecases/direct.js +1 -1
- package/dist/usecases/direct.js.map +1 -1
- package/dist/usecases/parse.js +1 -1
- package/dist/usecases/parse.js.map +1 -1
- package/dist/usecases/script/actions.d.ts +3 -0
- package/dist/usecases/script/actions.js +71 -0
- package/dist/usecases/script/actions.js.map +1 -0
- package/dist/usecases/script/actor.d.ts +3 -0
- package/dist/usecases/script/actor.js +27 -0
- package/dist/usecases/script/actor.js.map +1 -0
- package/dist/usecases/script/actors.d.ts +3 -0
- package/dist/usecases/script/actors.js +15 -0
- package/dist/usecases/script/actors.js.map +1 -0
- package/dist/usecases/script/add-actor.d.ts +3 -0
- package/dist/usecases/script/add-actor.js +13 -0
- package/dist/usecases/script/add-actor.js.map +1 -0
- package/dist/usecases/script/add-episode.d.ts +3 -0
- package/dist/usecases/script/add-episode.js +9 -0
- package/dist/usecases/script/add-episode.js.map +1 -0
- package/dist/usecases/script/add-location.d.ts +3 -0
- package/dist/usecases/script/add-location.js +11 -0
- package/dist/usecases/script/add-location.js.map +1 -0
- package/dist/usecases/script/add-prop.d.ts +3 -0
- package/dist/usecases/script/add-prop.js +11 -0
- package/dist/usecases/script/add-prop.js.map +1 -0
- package/dist/usecases/script/add-speaker.d.ts +3 -0
- package/dist/usecases/script/add-speaker.js +22 -0
- package/dist/usecases/script/add-speaker.js.map +1 -0
- package/dist/usecases/script/alias.d.ts +3 -0
- package/dist/usecases/script/alias.js +40 -0
- package/dist/usecases/script/alias.js.map +1 -0
- package/dist/usecases/script/assets.d.ts +3 -0
- package/dist/usecases/script/assets.js +21 -0
- package/dist/usecases/script/assets.js.map +1 -0
- package/dist/usecases/script/context.d.ts +3 -0
- package/dist/usecases/script/context.js +20 -0
- package/dist/usecases/script/context.js.map +1 -0
- package/dist/usecases/script/create.d.ts +3 -0
- package/dist/usecases/script/create.js +81 -0
- package/dist/usecases/script/create.js.map +1 -0
- package/dist/usecases/script/delete.d.ts +3 -0
- package/dist/usecases/script/delete.js +79 -0
- package/dist/usecases/script/delete.js.map +1 -0
- package/dist/usecases/script/describe.d.ts +3 -0
- package/dist/usecases/script/describe.js +31 -0
- package/dist/usecases/script/describe.js.map +1 -0
- package/dist/usecases/script/dialogue.d.ts +3 -0
- package/dist/usecases/script/dialogue.js +28 -0
- package/dist/usecases/script/dialogue.js.map +1 -0
- package/dist/usecases/script/do.d.ts +3 -0
- package/dist/usecases/script/do.js +130 -0
- package/dist/usecases/script/do.js.map +1 -0
- package/dist/usecases/script/episodes.d.ts +3 -0
- package/dist/usecases/script/episodes.js +36 -0
- package/dist/usecases/script/episodes.js.map +1 -0
- package/dist/usecases/script/export.d.ts +3 -0
- package/dist/usecases/script/export.js +117 -0
- package/dist/usecases/script/export.js.map +1 -0
- package/dist/usecases/script/insert.d.ts +3 -0
- package/dist/usecases/script/insert.js +87 -0
- package/dist/usecases/script/insert.js.map +1 -0
- package/dist/usecases/script/issues.d.ts +3 -0
- package/dist/usecases/script/issues.js +27 -0
- package/dist/usecases/script/issues.js.map +1 -0
- package/dist/usecases/script/lib.d.ts +77 -0
- package/dist/usecases/script/lib.js +849 -0
- package/dist/usecases/script/lib.js.map +1 -0
- package/dist/usecases/script/locations.d.ts +3 -0
- package/dist/usecases/script/locations.js +15 -0
- package/dist/usecases/script/locations.js.map +1 -0
- package/dist/usecases/script/merge.d.ts +3 -0
- package/dist/usecases/script/merge.js +43 -0
- package/dist/usecases/script/merge.js.map +1 -0
- package/dist/usecases/script/move.d.ts +3 -0
- package/dist/usecases/script/move.js +33 -0
- package/dist/usecases/script/move.js.map +1 -0
- package/dist/usecases/script/overlap.d.ts +3 -0
- package/dist/usecases/script/overlap.js +21 -0
- package/dist/usecases/script/overlap.js.map +1 -0
- package/dist/usecases/script/props.d.ts +3 -0
- package/dist/usecases/script/props.js +15 -0
- package/dist/usecases/script/props.js.map +1 -0
- package/dist/usecases/script/refs.d.ts +3 -0
- package/dist/usecases/script/refs.js +61 -0
- package/dist/usecases/script/refs.js.map +1 -0
- package/dist/usecases/script/rename.d.ts +3 -0
- package/dist/usecases/script/rename.js +17 -0
- package/dist/usecases/script/rename.js.map +1 -0
- package/dist/usecases/script/replace.d.ts +3 -0
- package/dist/usecases/script/replace.js +35 -0
- package/dist/usecases/script/replace.js.map +1 -0
- package/dist/usecases/script/role.d.ts +3 -0
- package/dist/usecases/script/role.js +17 -0
- package/dist/usecases/script/role.js.map +1 -0
- package/dist/usecases/script/scenes.d.ts +3 -0
- package/dist/usecases/script/scenes.js +45 -0
- package/dist/usecases/script/scenes.js.map +1 -0
- package/dist/usecases/script/script-patch.d.ts +3 -0
- package/dist/usecases/script/script-patch.js +187 -0
- package/dist/usecases/script/script-patch.js.map +1 -0
- package/dist/usecases/script/script-validate.d.ts +3 -0
- package/dist/usecases/script/script-validate.js +30 -0
- package/dist/usecases/script/script-validate.js.map +1 -0
- package/dist/usecases/script/session.d.ts +44 -0
- package/dist/usecases/script/session.js +527 -0
- package/dist/usecases/script/session.js.map +1 -0
- package/dist/usecases/script/speakers.d.ts +3 -0
- package/dist/usecases/script/speakers.js +28 -0
- package/dist/usecases/script/speakers.js.map +1 -0
- package/dist/usecases/script/split.d.ts +3 -0
- package/dist/usecases/script/split.js +37 -0
- package/dist/usecases/script/split.js.map +1 -0
- package/dist/usecases/script/state-add.d.ts +3 -0
- package/dist/usecases/script/state-add.js +23 -0
- package/dist/usecases/script/state-add.js.map +1 -0
- package/dist/usecases/script/state-change.d.ts +3 -0
- package/dist/usecases/script/state-change.js +24 -0
- package/dist/usecases/script/state-change.js.map +1 -0
- package/dist/usecases/script/state-delete.d.ts +3 -0
- package/dist/usecases/script/state-delete.js +23 -0
- package/dist/usecases/script/state-delete.js.map +1 -0
- package/dist/usecases/script/state-rename.d.ts +3 -0
- package/dist/usecases/script/state-rename.js +17 -0
- package/dist/usecases/script/state-rename.js.map +1 -0
- package/dist/usecases/script/summary.d.ts +3 -0
- package/dist/usecases/script/summary.js +45 -0
- package/dist/usecases/script/summary.js.map +1 -0
- package/dist/usecases/script/transition.d.ts +3 -0
- package/dist/usecases/script/transition.js +24 -0
- package/dist/usecases/script/transition.js.map +1 -0
- package/dist/usecases/script/type.d.ts +3 -0
- package/dist/usecases/script/type.js +24 -0
- package/dist/usecases/script/type.js.map +1 -0
- package/dist/usecases/script/worldview.d.ts +3 -0
- package/dist/usecases/script/worldview.js +18 -0
- package/dist/usecases/script/worldview.js.map +1 -0
- package/package.json +1 -1
- package/dist/domain/script-core.d.ts +0 -78
- package/dist/domain/script-core.js +0 -3026
- package/dist/domain/script-core.js.map +0 -1
- package/dist/usecases/script.d.ts +0 -67
- package/dist/usecases/script.js +0 -2348
- package/dist/usecases/script.js.map +0 -1
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { CliError, EXIT_USAGE, SCRIPT_SCHEMA_VERSION, fmtId, } from "../../common.js";
|
|
2
|
+
import { cleanName, stateLabelError, } from "../direct-core.js";
|
|
3
|
+
import { asList, isDict, isList, opErr, strOf } from "./shared.js";
|
|
4
|
+
export function findAction(script, epId, sceneId, actionIndex) {
|
|
5
|
+
for (const ep of asList(script["episodes"])) {
|
|
6
|
+
if (ep["episode_id"] !== epId)
|
|
7
|
+
continue;
|
|
8
|
+
for (const scene of asList(ep["scenes"])) {
|
|
9
|
+
if (scene["scene_id"] === sceneId) {
|
|
10
|
+
const actions = asList(scene["actions"]);
|
|
11
|
+
if (actionIndex >= 0 && actionIndex < actions.length)
|
|
12
|
+
return actions[actionIndex];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
throw new CliError("PATCH BLOCKED: Action not found", "Action not found.", {
|
|
17
|
+
exitCode: EXIT_USAGE,
|
|
18
|
+
required: ["existing episode_id, scene_id, action_index"],
|
|
19
|
+
received: [`${epId} ${sceneId} ${actionIndex}`],
|
|
20
|
+
nextSteps: ["Inspect episodes and fix the patch."],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function findEpisode(script, epId) {
|
|
24
|
+
for (const ep of asList(script["episodes"])) {
|
|
25
|
+
if (ep["episode_id"] === epId)
|
|
26
|
+
return ep;
|
|
27
|
+
}
|
|
28
|
+
throw new CliError("PATCH BLOCKED: Episode not found", "Episode not found.", {
|
|
29
|
+
exitCode: EXIT_USAGE,
|
|
30
|
+
required: ["existing episode_id"],
|
|
31
|
+
received: [epId],
|
|
32
|
+
nextSteps: ["Inspect episodes and fix the patch."],
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function findScene(script, epId, sceneId) {
|
|
36
|
+
const ep = findEpisode(script, epId);
|
|
37
|
+
for (const scene of asList(ep["scenes"])) {
|
|
38
|
+
if (scene["scene_id"] === sceneId)
|
|
39
|
+
return scene;
|
|
40
|
+
}
|
|
41
|
+
throw new CliError("PATCH BLOCKED: Scene not found", "Scene not found.", {
|
|
42
|
+
exitCode: EXIT_USAGE,
|
|
43
|
+
required: ["existing episode_id and scene_id"],
|
|
44
|
+
received: [`${epId} ${sceneId}`],
|
|
45
|
+
nextSteps: ["Inspect episodes and fix the patch."],
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// blank scaffold
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* Minimal schema-v2 script skeleton: every required top-level field present,
|
|
53
|
+
* all collections empty. It is the starting point for building a script
|
|
54
|
+
* bottom-up with the atomic add/insert verbs instead of assembling it from
|
|
55
|
+
* source material (direct) or md (parse). `worldview`/`style`/`title` are
|
|
56
|
+
* present-but-empty so the field-presence checks pass; they get filled in
|
|
57
|
+
* later via `worldview` / `patch`. A blank script validates clean: NO_EPISODES
|
|
58
|
+
* is a completeness warning (`incomplete_ok`), not a blocker.
|
|
59
|
+
*/
|
|
60
|
+
export function blankScript(title = "") {
|
|
61
|
+
return {
|
|
62
|
+
version: SCRIPT_SCHEMA_VERSION,
|
|
63
|
+
title: title,
|
|
64
|
+
worldview: "",
|
|
65
|
+
style: "",
|
|
66
|
+
actors: [],
|
|
67
|
+
locations: [],
|
|
68
|
+
props: [],
|
|
69
|
+
speakers: [],
|
|
70
|
+
episodes: [],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Completeness vs. integrity. A script can be structurally sound but unfinished
|
|
74
|
+
// (no episodes yet, an empty episode/scene, a scene without a location, an asset
|
|
75
|
+
// without a description). Those gaps are emitted as `severity: "warning"` with
|
|
76
|
+
// `incomplete_ok: true` directly at their source below — they never block, so an
|
|
77
|
+
// unfinished-but-sound script is editable AND publishable. Only integrity
|
|
78
|
+
// violations (dangling refs, duplicate ids, invalid enums, missing ids/names —
|
|
79
|
+
// things that would corrupt the normalized DB graph) are `severity: "error"`.
|
|
80
|
+
// One SCHEMA_ENTITY_FIELD_MISSING issue for a missing asset field. A missing
|
|
81
|
+
// description is a completeness gap (warning); a missing id/name is an identity
|
|
82
|
+
export function resolveAsset(items, idKey, nameKey, raw) {
|
|
83
|
+
for (const item of items) {
|
|
84
|
+
if (raw === item[idKey] || raw === item[nameKey])
|
|
85
|
+
return item;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
export const ASSET_KEY_MAP = {
|
|
90
|
+
actor: ["actors", "actor_id", "actor_name"],
|
|
91
|
+
location: ["locations", "location_id", "location_name"],
|
|
92
|
+
prop: ["props", "prop_id", "prop_name"],
|
|
93
|
+
};
|
|
94
|
+
export function assetKeys(assetType) {
|
|
95
|
+
const entry = ASSET_KEY_MAP[assetType];
|
|
96
|
+
if (!entry) {
|
|
97
|
+
throw new CliError("PATCH BLOCKED: Asset type invalid", "Asset type invalid.", {
|
|
98
|
+
exitCode: EXIT_USAGE,
|
|
99
|
+
required: ["asset_type: actor, location, or prop"],
|
|
100
|
+
received: [`asset_type: ${assetType}`],
|
|
101
|
+
nextSteps: ["Fix the patch operation and rerun patch."],
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return entry;
|
|
105
|
+
}
|
|
106
|
+
export function resolvePatchAsset(script, op, assetType = null) {
|
|
107
|
+
const kind = strOf(assetType || op["asset_type"]);
|
|
108
|
+
const [key, idKey, nameKey] = assetKeys(kind);
|
|
109
|
+
const raw = op[idKey] ?? op["id"] ?? op["name"] ?? op[nameKey];
|
|
110
|
+
const asset = resolveAsset(asList(script[key]), idKey, nameKey, strOf(raw));
|
|
111
|
+
if (!asset) {
|
|
112
|
+
throw new CliError("PATCH BLOCKED: Asset not found", "Asset not found.", {
|
|
113
|
+
exitCode: EXIT_USAGE,
|
|
114
|
+
required: [`existing ${idKey} or ${nameKey}`],
|
|
115
|
+
received: [JSON.stringify(op)],
|
|
116
|
+
nextSteps: ["Inspect assets and fix the patch."],
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return [asset, idKey, nameKey];
|
|
120
|
+
}
|
|
121
|
+
export function nextStateId(script) {
|
|
122
|
+
const ids = [];
|
|
123
|
+
for (const key of ["actors", "locations", "props"]) {
|
|
124
|
+
for (const asset of asList(script[key])) {
|
|
125
|
+
for (const state of asList(asset["states"]))
|
|
126
|
+
ids.push(state["state_id"]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return nextSeqId(ids, "st");
|
|
130
|
+
}
|
|
131
|
+
export function normalizeStates(script, rawStates, assetKind = "") {
|
|
132
|
+
if (!isList(rawStates)) {
|
|
133
|
+
throw new CliError("PATCH BLOCKED: States invalid", "States invalid.", {
|
|
134
|
+
exitCode: EXIT_USAGE,
|
|
135
|
+
required: ["states: array of state names or {state_id,state_name} objects"],
|
|
136
|
+
received: [typeof rawStates],
|
|
137
|
+
nextSteps: ["Fix the patch operation and rerun patch."],
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
let maxSeen = 0;
|
|
141
|
+
for (const key of ["actors", "locations", "props"]) {
|
|
142
|
+
for (const asset of asList(script[key])) {
|
|
143
|
+
for (const state of asList(asset["states"])) {
|
|
144
|
+
const m = /^st_(\d+)$/.exec(strOf(state["state_id"]));
|
|
145
|
+
if (m)
|
|
146
|
+
maxSeen = Math.max(maxSeen, parseInt(m[1], 10));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const states = [];
|
|
151
|
+
const seenNames = new Set();
|
|
152
|
+
for (const raw of rawStates) {
|
|
153
|
+
let name = "";
|
|
154
|
+
let sid = "";
|
|
155
|
+
if (typeof raw === "string") {
|
|
156
|
+
name = raw.trim();
|
|
157
|
+
maxSeen += 1;
|
|
158
|
+
sid = fmtId("st", maxSeen);
|
|
159
|
+
}
|
|
160
|
+
else if (isDict(raw)) {
|
|
161
|
+
name = strOf(raw["state_name"] || raw["name"]).trim();
|
|
162
|
+
sid = strOf(raw["state_id"] || raw["id"]).trim();
|
|
163
|
+
if (!sid) {
|
|
164
|
+
maxSeen += 1;
|
|
165
|
+
sid = fmtId("st", maxSeen);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else
|
|
169
|
+
continue;
|
|
170
|
+
if (!name || seenNames.has(name))
|
|
171
|
+
continue;
|
|
172
|
+
if (assetKind === "actor") {
|
|
173
|
+
const reason = stateLabelError(name);
|
|
174
|
+
if (reason) {
|
|
175
|
+
throw new CliError("PATCH BLOCKED: State label invalid", "State label invalid.", {
|
|
176
|
+
exitCode: EXIT_USAGE,
|
|
177
|
+
required: ["one clear state label"],
|
|
178
|
+
received: [name],
|
|
179
|
+
nextSteps: ["Do not combine multiple states into one label."],
|
|
180
|
+
errorCode: "STATE_LABEL_INVALID",
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
seenNames.add(name);
|
|
185
|
+
states.push({ state_id: sid, state_name: name });
|
|
186
|
+
}
|
|
187
|
+
return states;
|
|
188
|
+
}
|
|
189
|
+
export function ensureRefId(script, assetType, rawId, opts = {}) {
|
|
190
|
+
const allowNone = opts.allowNone ?? false;
|
|
191
|
+
if (rawId === null && allowNone)
|
|
192
|
+
return null;
|
|
193
|
+
const value = strOf(rawId).trim();
|
|
194
|
+
if (!value && allowNone)
|
|
195
|
+
return null;
|
|
196
|
+
const [key, idKey] = assetKeys(assetType);
|
|
197
|
+
const valid = new Set();
|
|
198
|
+
for (const item of asList(script[key]))
|
|
199
|
+
valid.add(strOf(item[idKey]));
|
|
200
|
+
if (!valid.has(value)) {
|
|
201
|
+
throw new CliError("PATCH BLOCKED: Reference target not found", "Reference target not found.", {
|
|
202
|
+
exitCode: EXIT_USAGE,
|
|
203
|
+
required: [`existing ${idKey}`],
|
|
204
|
+
received: [`${idKey}: ${value || "<empty>"}`],
|
|
205
|
+
nextSteps: ["Inspect assets and fix the patch."],
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
210
|
+
export function idKeyForKind(kind) {
|
|
211
|
+
const map = { actor: "actor_id", location: "location_id", prop: "prop_id" };
|
|
212
|
+
return map[kind];
|
|
213
|
+
}
|
|
214
|
+
export function pluralForKind(kind) {
|
|
215
|
+
const map = { actor: "actors", location: "locations", prop: "props" };
|
|
216
|
+
return map[kind];
|
|
217
|
+
}
|
|
218
|
+
// Asset id prefixes. props use `prp_` (not `prop_`); mirrors direct-init output.
|
|
219
|
+
export const ASSET_ID_PREFIX = { actor: "act", location: "loc", prop: "prp" };
|
|
220
|
+
// Next free `<prefix>_NNN` id given the existing ids in a collection. Scans for
|
|
221
|
+
// the max NNN so a manually-chosen id (e.g. act_007) never collides with a later
|
|
222
|
+
// auto-id. The single id-allocation routine behind nextScene/Asset/Episode/State.
|
|
223
|
+
export function nextSeqId(existingIds, prefix) {
|
|
224
|
+
const re = new RegExp(`^${prefix}_(\\d+)$`);
|
|
225
|
+
let maxSeen = 0;
|
|
226
|
+
for (const raw of existingIds) {
|
|
227
|
+
const m = re.exec(strOf(raw));
|
|
228
|
+
if (m)
|
|
229
|
+
maxSeen = Math.max(maxSeen, parseInt(m[1], 10));
|
|
230
|
+
}
|
|
231
|
+
return fmtId(prefix, maxSeen + 1);
|
|
232
|
+
}
|
|
233
|
+
export function nextSceneId(script) {
|
|
234
|
+
const ids = asList(script["episodes"]).flatMap((ep) => asList(ep["scenes"]).map((s) => s["scene_id"]));
|
|
235
|
+
return nextSeqId(ids, "scn");
|
|
236
|
+
}
|
|
237
|
+
export function nextAssetId(script, kind) {
|
|
238
|
+
const [key, idKey] = assetKeys(kind);
|
|
239
|
+
return nextSeqId(asList(script[key]).map((item) => item[idKey]), ASSET_ID_PREFIX[kind]);
|
|
240
|
+
}
|
|
241
|
+
export function nextEpisodeId(script) {
|
|
242
|
+
return nextSeqId(asList(script["episodes"]).map((ep) => ep["episode_id"]), "ep");
|
|
243
|
+
}
|
|
244
|
+
export function sceneIdExists(script, sceneId) {
|
|
245
|
+
for (const ep of asList(script["episodes"])) {
|
|
246
|
+
for (const scene of asList(ep["scenes"])) {
|
|
247
|
+
if (scene["scene_id"] === sceneId)
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
// Shared body for actor.add / location.add / prop.add: validate the name,
|
|
254
|
+
// allocate or accept an id, reject duplicates, and append a minimal entity
|
|
255
|
+
// ({id, name, description, states:[]}). The caller layers on kind-specific
|
|
256
|
+
// fields (actor role_type/aliases). Returns the pushed entity so the caller can
|
|
257
|
+
// extend it. description defaults to "" — an empty description is a completeness
|
|
258
|
+
// warning, not a hard error, so you can register an asset now and describe it
|
|
259
|
+
// later.
|
|
260
|
+
export function pushAsset(script, kind, op) {
|
|
261
|
+
const [collKey, idKey, nameKey] = assetKeys(kind);
|
|
262
|
+
const name = strOf(op["name"] ?? op[nameKey]).trim();
|
|
263
|
+
if (!name) {
|
|
264
|
+
throw opErr("SCRIPT OP BLOCKED: Asset name empty", "Asset name empty.", {
|
|
265
|
+
required: ["name"], received: [JSON.stringify(op)],
|
|
266
|
+
nextSteps: [`Provide a ${kind} name.`], op: `${kind}.add`, errorCode: "ASSET_NAME_EMPTY",
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
// name is already whitespace-trimmed; cleanName additionally strips trailing/
|
|
270
|
+
// leading punctuation (:,、…) and embedded 【】() state annotations. Reuse the
|
|
271
|
+
// same errorCode validateScript uses for this rule (ASSET_NAME_HAS_STATE_ANNOTATION)
|
|
272
|
+
// so op-time and validate-time speak one vocabulary; the message stays accurate
|
|
273
|
+
// for the punctuation-only case too. Suggest the canonical form when there is one
|
|
274
|
+
// (a name that is entirely punctuation/annotation reduces to "").
|
|
275
|
+
const canonical = cleanName(name);
|
|
276
|
+
if (canonical !== name) {
|
|
277
|
+
const suggestion = canonical
|
|
278
|
+
? `Use "${canonical}", and register durable looks with state-add instead of putting them in the name.`
|
|
279
|
+
: "Provide a real name (this one is only punctuation/annotation); register durable looks with state-add.";
|
|
280
|
+
throw opErr("SCRIPT OP BLOCKED: Asset name not canonical", "Asset name is not canonical (trailing/leading punctuation or an embedded state annotation).", {
|
|
281
|
+
required: [canonical ? `canonical name, e.g. "${canonical}"` : "a canonical name without punctuation/annotation"],
|
|
282
|
+
received: [name],
|
|
283
|
+
nextSteps: [suggestion], op: `${kind}.add`, errorCode: "ASSET_NAME_HAS_STATE_ANNOTATION",
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
const id = strOf(op[idKey] ?? op["id"]).trim() || nextAssetId(script, kind);
|
|
287
|
+
if (!isList(script[collKey]))
|
|
288
|
+
script[collKey] = [];
|
|
289
|
+
const coll = script[collKey];
|
|
290
|
+
if (coll.some((a) => strOf(a[idKey]) === id)) {
|
|
291
|
+
throw opErr("SCRIPT OP BLOCKED: Asset id exists", "Asset id exists.", {
|
|
292
|
+
required: ["unused id"], received: [id],
|
|
293
|
+
nextSteps: ["Use another --id or omit it to auto-allocate."], op: `${kind}.add`, errorCode: "ASSET_ID_EXISTS",
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
const entity = { [idKey]: id, [nameKey]: name, description: strOf(op["description"]).trim(), states: [] };
|
|
297
|
+
coll.push(entity);
|
|
298
|
+
return entity;
|
|
299
|
+
}
|
|
300
|
+
export function renumberSceneIds(script) {
|
|
301
|
+
let counter = 0;
|
|
302
|
+
for (const ep of asList(script["episodes"])) {
|
|
303
|
+
for (const scene of asList(ep["scenes"])) {
|
|
304
|
+
counter += 1;
|
|
305
|
+
scene["scene_id"] = fmtId("scn", counter);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=lookups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookups.js","sourceRoot":"","sources":["../../../src/domain/script/lookups.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Patch op engine driver. Replaces the former 1300-line if/else chain with a
|
|
2
|
+
// lookup-and-invoke dispatch over OP_REGISTRY (Replace Conditional Dispatcher
|
|
3
|
+
// with Command). Per-op logic lives in ops-*.ts; this file only loops, dispatches,
|
|
4
|
+
// and renumbers scene ids once at the end. Behavior is identical to the prior
|
|
5
|
+
// single-function applyPatchOperations: ops mutate in place, any op throwing
|
|
6
|
+
// aborts the whole batch (callers persist only after this returns).
|
|
7
|
+
import { opErr, strOf } from "../shared.js";
|
|
8
|
+
import { renumberSceneIds } from "../lookups.js";
|
|
9
|
+
import { OP_REGISTRY } from "./registry.js";
|
|
10
|
+
// `opts.renumber === false` skips the trailing scene-id renumber — used by the
|
|
11
|
+
// selector sweep, which applies one op per matched action in a loop and would
|
|
12
|
+
// otherwise re-walk the whole document on every iteration; it renumbers once
|
|
13
|
+
// itself after the loop.
|
|
14
|
+
export function applyPatchOperations(script, sourceText, operations, opts = {}) {
|
|
15
|
+
const applied = [];
|
|
16
|
+
for (const op of operations) {
|
|
17
|
+
const kind = strOf(op["op"]);
|
|
18
|
+
const handler = OP_REGISTRY[kind];
|
|
19
|
+
if (!handler) {
|
|
20
|
+
throw opErr("PATCH BLOCKED: Unsupported operation", "Unsupported patch operation.", {
|
|
21
|
+
required: [
|
|
22
|
+
"dot-style op: meta.worldview.set / asset.{rename,describe,alias.set,alias.add,alias.remove,states.set,role.set,merge,delete} / state.{add,rename,describe,delete} / context.{set,clear,ref.remove} / action.{type.set,actor.set,delete,insert,move,state.change,state.remove,transition.set,transition.clear,content.replace,content.regex-replace} / scene.{split,merge,delete,move} / dialogue.{speakers,overlap} / speaker.add",
|
|
23
|
+
],
|
|
24
|
+
received: [kind],
|
|
25
|
+
nextSteps: [
|
|
26
|
+
"Use a supported dot-style patch operation.",
|
|
27
|
+
"Legacy snake-style ops (set_worldview / rename_actor / set_action_type / merge_scenes / split_scene / set_scene_*_ref / set_action_actor / set_asset_aliases / set_asset_states / set_action_content_from_span etc.) were removed in 0.6.0; use the new dot-style equivalents.",
|
|
28
|
+
],
|
|
29
|
+
errorCode: "OP_UNSUPPORTED",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
handler({ script, op, sourceText, applied, kind, runOps: (subOps) => applyPatchOperations(script, sourceText, subOps) });
|
|
33
|
+
}
|
|
34
|
+
if (opts.renumber !== false)
|
|
35
|
+
renumberSceneIds(script);
|
|
36
|
+
return applied;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../../src/domain/script/patch/apply.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,mFAAmF;AACnF,8EAA8E;AAC9E,6EAA6E;AAC7E,oEAAoE;AACpE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAa,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,yBAAyB;AACzB,MAAM,UAAU,oBAAoB,CAAC,MAAY,EAAE,UAAkB,EAAE,UAAkB,EAAE,OAA+B,EAAE;IAC1H,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,KAAK,CAAC,sCAAsC,EAAE,8BAA8B,EAAE;gBAClF,QAAQ,EAAE;oBACR,maAAma;iBACpa;gBACD,QAAQ,EAAE,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE;oBACT,4CAA4C;oBAC5C,gRAAgR;iBACjR;gBACD,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;QAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Dict } from "../shared.js";
|
|
2
|
+
export declare function resolveAssetByTarget(script: Dict, kind: string, targetId: string): Dict;
|
|
3
|
+
export declare function resolveState(script: Dict, kind: string, targetId: string, stateId: string): Dict;
|
|
4
|
+
export declare function validateStateForTarget(script: Dict, kind: string, targetId: string, stateId: string | null): string | null;
|
|
5
|
+
export declare function nextSpeakerId(script: Dict, sourceKind: string, sourceId?: string | null): string;
|
|
6
|
+
export declare function speakerSourceActorId(script: Dict, speakerId: string): string | null;
|
|
7
|
+
export declare function ensureSpeakerId(script: Dict, speakerId: string): string;
|
|
8
|
+
export declare function contextRefsForKind(context: Dict, kind: string): Dict[];
|
|
9
|
+
export declare function findContextRef(context: Dict, kind: string, targetId: string): Dict | null;
|
|
10
|
+
export declare function setContextState(script: Dict, epId: string, sceneId: string, kind: string, targetId: string, stateId: string | null): void;
|
|
11
|
+
export declare function inferStateBeforeAction(script: Dict, epId: string, sceneId: string, actionIndex: number, kind: string, targetId: string): string | null;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { CliError, EXIT_USAGE, } from "../../../common.js";
|
|
2
|
+
import { sceneContext, setSceneContext, } from "../../direct-core.js";
|
|
3
|
+
import { asList, strOf } from "../shared.js";
|
|
4
|
+
import { assetKeys, ensureRefId, findScene, idKeyForKind, pluralForKind, } from "../lookups.js";
|
|
5
|
+
export function resolveAssetByTarget(script, kind, targetId) {
|
|
6
|
+
const [key, idKey] = assetKeys(kind);
|
|
7
|
+
for (const item of asList(script[key])) {
|
|
8
|
+
if (strOf(item[idKey]) === targetId)
|
|
9
|
+
return item;
|
|
10
|
+
}
|
|
11
|
+
throw new CliError("SCRIPT OP BLOCKED: Asset not found", "Asset not found.", {
|
|
12
|
+
exitCode: EXIT_USAGE,
|
|
13
|
+
required: [`existing ${kind} id`],
|
|
14
|
+
received: [`${kind}:${targetId}`],
|
|
15
|
+
nextSteps: ["Inspect assets and fix the target."],
|
|
16
|
+
errorCode: "ASSET_NOT_FOUND",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function resolveState(script, kind, targetId, stateId) {
|
|
20
|
+
const asset = resolveAssetByTarget(script, kind, targetId);
|
|
21
|
+
for (const state of asList(asset["states"])) {
|
|
22
|
+
if (strOf(state["state_id"]) === stateId)
|
|
23
|
+
return state;
|
|
24
|
+
}
|
|
25
|
+
throw new CliError("SCRIPT OP BLOCKED: State not found", "State not found.", {
|
|
26
|
+
exitCode: EXIT_USAGE,
|
|
27
|
+
required: ["existing state_id on the target asset"],
|
|
28
|
+
received: [`${kind}:${targetId}/${stateId}`],
|
|
29
|
+
nextSteps: ["Inspect states and fix the target."],
|
|
30
|
+
errorCode: "STATE_NOT_FOUND",
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function validateStateForTarget(script, kind, targetId, stateId) {
|
|
34
|
+
const value = strOf(stateId).trim();
|
|
35
|
+
if (!value)
|
|
36
|
+
return null;
|
|
37
|
+
resolveState(script, kind, targetId, value);
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
export function nextSpeakerId(script, sourceKind, sourceId = null) {
|
|
41
|
+
const existing = new Set();
|
|
42
|
+
for (const item of asList(script["speakers"]))
|
|
43
|
+
existing.add(strOf(item["speaker_id"]));
|
|
44
|
+
if (sourceKind === "actor" && sourceId) {
|
|
45
|
+
const candidate = `spk_${sourceId}`;
|
|
46
|
+
if (!existing.has(candidate))
|
|
47
|
+
return candidate;
|
|
48
|
+
}
|
|
49
|
+
let maxSeen = 0;
|
|
50
|
+
const prefix = `spk_${sourceKind}_`;
|
|
51
|
+
for (const id of existing) {
|
|
52
|
+
if (id.startsWith(prefix)) {
|
|
53
|
+
const m = new RegExp(`^${prefix.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}(\\d+)$`).exec(id);
|
|
54
|
+
if (m)
|
|
55
|
+
maxSeen = Math.max(maxSeen, parseInt(m[1], 10));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return `${prefix}${String(maxSeen + 1).padStart(3, "0")}`;
|
|
59
|
+
}
|
|
60
|
+
export function speakerSourceActorId(script, speakerId) {
|
|
61
|
+
for (const speaker of asList(script["speakers"])) {
|
|
62
|
+
if (strOf(speaker["speaker_id"]) === speakerId && speaker["source_kind"] === "actor") {
|
|
63
|
+
return strOf(speaker["source_id"]).trim() || null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
export function ensureSpeakerId(script, speakerId) {
|
|
69
|
+
const value = strOf(speakerId).trim();
|
|
70
|
+
const valid = new Set();
|
|
71
|
+
for (const item of asList(script["speakers"]))
|
|
72
|
+
valid.add(strOf(item["speaker_id"]));
|
|
73
|
+
if (!valid.has(value)) {
|
|
74
|
+
throw new CliError("SCRIPT OP BLOCKED: Speaker not found", "Speaker not found.", {
|
|
75
|
+
exitCode: EXIT_USAGE,
|
|
76
|
+
required: ["existing speaker_id"],
|
|
77
|
+
received: [value || "<empty>"],
|
|
78
|
+
nextSteps: ["Add a speaker first, or fix the dialogue patch."],
|
|
79
|
+
errorCode: "SPEAKER_NOT_FOUND",
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
export function contextRefsForKind(context, kind) {
|
|
85
|
+
return asList(context[pluralForKind(kind)]);
|
|
86
|
+
}
|
|
87
|
+
export function findContextRef(context, kind, targetId) {
|
|
88
|
+
const idKey = idKeyForKind(kind);
|
|
89
|
+
for (const ref of contextRefsForKind(context, kind)) {
|
|
90
|
+
if (strOf(ref[idKey]) === targetId)
|
|
91
|
+
return ref;
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
export function setContextState(script, epId, sceneId, kind, targetId, stateId) {
|
|
96
|
+
ensureRefId(script, kind, targetId);
|
|
97
|
+
const normalizedState = validateStateForTarget(script, kind, targetId, stateId);
|
|
98
|
+
const scene = findScene(script, epId, sceneId);
|
|
99
|
+
const ctx = sceneContext(scene);
|
|
100
|
+
const idKey = idKeyForKind(kind);
|
|
101
|
+
// location is single-valued per scene by direct-init invariant; the legacy
|
|
102
|
+
// set_scene_location_ref op replaced the whole locations[] array to preserve
|
|
103
|
+
// that. Mirror it here: for location kind, context.set REPLACES (one entry
|
|
104
|
+
// total). actor/prop stay upsert because multi-actor / multi-prop per scene
|
|
105
|
+
// is intentional.
|
|
106
|
+
if (kind === "location") {
|
|
107
|
+
ctx[pluralForKind(kind)] = [{ [idKey]: targetId, state_id: normalizedState }];
|
|
108
|
+
setSceneContext(scene, ctx);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const refs = [...contextRefsForKind(ctx, kind)];
|
|
112
|
+
const existing = refs.find((ref) => strOf(ref[idKey]) === targetId);
|
|
113
|
+
if (existing) {
|
|
114
|
+
existing["state_id"] = normalizedState;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
refs.push({ [idKey]: targetId, state_id: normalizedState });
|
|
118
|
+
}
|
|
119
|
+
ctx[pluralForKind(kind)] = refs;
|
|
120
|
+
setSceneContext(scene, ctx);
|
|
121
|
+
}
|
|
122
|
+
export function inferStateBeforeAction(script, epId, sceneId, actionIndex, kind, targetId) {
|
|
123
|
+
const scene = findScene(script, epId, sceneId);
|
|
124
|
+
const ctx = sceneContext(scene);
|
|
125
|
+
let current = null;
|
|
126
|
+
const ref = findContextRef(ctx, kind, targetId);
|
|
127
|
+
if (ref)
|
|
128
|
+
current = strOf(ref["state_id"]).trim() || null;
|
|
129
|
+
const actions = asList(scene["actions"]);
|
|
130
|
+
for (let i = 0; i < actionIndex && i < actions.length; i++) {
|
|
131
|
+
for (const change of asList(actions[i]["state_changes"])) {
|
|
132
|
+
if (strOf(change["target_kind"]) === kind && strOf(change["target_id"]) === targetId) {
|
|
133
|
+
const toState = strOf(change["to_state_id"]).trim();
|
|
134
|
+
if (toState)
|
|
135
|
+
current = toState;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return current;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/domain/script/patch/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { OpCtx } from "./types.js";
|
|
2
|
+
export declare function op_action_state_change(__ctx: OpCtx): void;
|
|
3
|
+
export declare function op_action_state_remove(__ctx: OpCtx): void;
|
|
4
|
+
export declare function op_action_transition_set(__ctx: OpCtx): void;
|
|
5
|
+
export declare function op_action_transition_clear(__ctx: OpCtx): void;
|
|
6
|
+
export declare function op_action_content_replace(__ctx: OpCtx): void;
|
|
7
|
+
export declare function op_action_content_regex_replace(__ctx: OpCtx): void;
|
|
8
|
+
export declare function op_action_type_set(__ctx: OpCtx): void;
|
|
9
|
+
export declare function op_action_actor_set(__ctx: OpCtx): void;
|
|
10
|
+
export declare function op_action_delete(__ctx: OpCtx): void;
|
|
11
|
+
export declare function op_action_insert(__ctx: OpCtx): void;
|
|
12
|
+
export declare function op_action_move(__ctx: OpCtx): void;
|