@lingjingai/scriptctl 0.25.6 → 0.25.7

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/common.js CHANGED
@@ -215,7 +215,7 @@ export const PARSE_MD_SPEC = "scriptctl parse 输入 = 一个 md 工作区目录
215
215
  " 复核微调后再跑 `scriptctl parse <dir>`(纯确定性)装配 script.json。\n" +
216
216
  "\n" +
217
217
  "==================== 1. 正文 md(每集一个,ep_<NNN>.md) ====================\n" +
218
- "# <本集标题> ← 第一行,非「剧本/梗概」的顶级标题即本集标题\n" +
218
+ "# <本集标题> ← 第一行,非「剧本/梗概」的顶级标题即本集标题;缺省时 parse 从正文生成短标题\n" +
219
219
  "\n" +
220
220
  "## 梗概\n" +
221
221
  "<本集一段话梗概,纯文本,可多行>\n" +
@@ -225,8 +225,8 @@ export const PARSE_MD_SPEC = "scriptctl parse 输入 = 一个 md 工作区目录
225
225
  "## 场景 1\n" +
226
226
  "- 时空: <内|外> <日|夜>\n" +
227
227
  "- 地点: <地点名>[场景状态] ← 只写名字,引用 场景.md 里登记的地点/状态\n" +
228
- "- 角色: <角色1>, <角色2>(状态), <角色3> ← 只写名字,引用 人物.md 里登记的角色\n" +
229
- "- 道具: <道具1>, <道具2> ← 只写名字,引用 道具.md 里登记的道具\n" +
228
+ "- 角色: <角色1>, <角色2>(状态), <角色3> ← 只写名字,引用 人物.md 里登记的角色/状态\n" +
229
+ "- 道具: <道具1>, <道具2>(状态), <道具3>[状态] ← 只写名字,引用 道具.md 里登记的道具/状态\n" +
230
230
  "\n" +
231
231
  "> [act] 动作或环境描写。\n" +
232
232
  "> [dlg|name] 角色对白原文。\n" +
@@ -246,6 +246,8 @@ export const PARSE_MD_SPEC = "scriptctl parse 输入 = 一个 md 工作区目录
246
246
  " - <状态名>: <这个状态下的具体可视外观>\n" +
247
247
  " - <状态名>: ...\n" +
248
248
  "(也接受扁平写法 `- <资产名>|<状态名>: 描述`;两种都行,最后合并去重。)\n" +
249
+ "正文未显式写状态时,parse 会自动绑定该资产的 `默认` 状态;没有 `默认` 且只有一个状态时,绑定唯一状态。\n" +
250
+ "多个非默认状态无法确定时保持 state_id:null,并由 validate 给出 warning。\n" +
249
251
  "\n" +
250
252
  "==================== 2. 人物.md(角色登记 + 状态) ====================\n" +
251
253
  "# 人物\n" +
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
@@ -193,5 +193,9 @@ export declare function actorCurationDecisions(script: Dict): Dict[];
193
193
  export declare function propCurationDecisions(script: Dict): Dict[];
194
194
  export declare function normalizeAssetCuration(script: Dict, rawCuration: unknown): Dict;
195
195
  export declare function curateScriptAssets(script: Dict, rawCuration?: unknown): Dict;
196
- export declare function mergeEpisodeResults(results: Dict[], title: string): Dict;
196
+ interface MergeEpisodeResultsOptions {
197
+ bindDefaultStateRefs?: boolean;
198
+ trackUnresolvedStateRefs?: boolean;
199
+ }
200
+ export declare function mergeEpisodeResults(results: Dict[], title: string, opts?: MergeEpisodeResultsOptions): Dict;
197
201
  export {};
@@ -261,6 +261,7 @@ function countOccurrences(s, sub, end) {
261
261
  export function sceneContext(scene) {
262
262
  const context = isDict(scene["context"]) ? scene["context"] : {};
263
263
  return {
264
+ ...context,
264
265
  locations: isList(context["locations"]) ? context["locations"] : (asList(scene["locations"]) ?? []),
265
266
  actors: isList(context["actors"]) ? context["actors"] : (asList(scene["actors"]) ?? []),
266
267
  props: isList(context["props"]) ? context["props"] : (asList(scene["props"]) ?? []),
@@ -368,6 +369,20 @@ export function formatEpisodeTitle(episodeNum, rawTitle) {
368
369
  return null;
369
370
  return `第${episodeNum}集:${short}`;
370
371
  }
372
+ function deterministicTitleFromScenes(episodeNum, scenes) {
373
+ for (const scene of scenes) {
374
+ for (const action of asList(scene["actions"])) {
375
+ const content = strOf(action["content"]).trim();
376
+ if (!content)
377
+ continue;
378
+ const short = content.replace(/[^\w一-鿿]+/gu, "");
379
+ if (short.length >= 2) {
380
+ return formatEpisodeTitle(episodeNum, short.slice(0, 8)) ?? `第${episodeNum}集:剧情转折${episodeNum}`;
381
+ }
382
+ }
383
+ }
384
+ return episodeNum > 0 ? `第${episodeNum}集:剧情转折${episodeNum}` : undefined;
385
+ }
371
386
  export function extractEpisodeTitleCandidate(header) {
372
387
  let value = strOf(header).trim().replace(/^[#=\s]*/, "");
373
388
  const match = reMatch(_EP_TITLE_PREFIX_RE, value);
@@ -1462,6 +1477,7 @@ export function parseMarkdownBatch(text, batchPlan, opts = {}) {
1462
1477
  actor_names: [],
1463
1478
  actor_states: {},
1464
1479
  prop_names: [],
1480
+ prop_states: {},
1465
1481
  actions: [],
1466
1482
  });
1467
1483
  lastAction = null;
@@ -1566,10 +1582,14 @@ export function parseMarkdownBatch(text, batchPlan, opts = {}) {
1566
1582
  }
1567
1583
  else if (key === "道具") {
1568
1584
  for (const entry of value.split(/[,,、]/)) {
1569
- const [prop] = splitEntityState(entry);
1585
+ const [prop, inferredState] = splitLocationState(entry);
1586
+ const state = strOf(inferredState).trim() || null;
1570
1587
  const propNames = scene["prop_names"];
1571
1588
  if (prop && !propNames.includes(prop))
1572
1589
  propNames.push(prop);
1590
+ if (prop && state && isReusableState("prop", state)) {
1591
+ scene["prop_states"][prop] = state;
1592
+ }
1573
1593
  }
1574
1594
  }
1575
1595
  lastAction = null;
@@ -1662,6 +1682,14 @@ export function parseMarkdownBatch(text, batchPlan, opts = {}) {
1662
1682
  filteredActorStates[actorName] = stateName;
1663
1683
  }
1664
1684
  scene["actor_states"] = filteredActorStates;
1685
+ const propStates = scene["prop_states"] || {};
1686
+ const filteredPropStates = {};
1687
+ for (const [propName, stateName] of Object.entries(propStates)) {
1688
+ const allowed = stateLookup.get(`prop::${propName.trim()}`) ?? new Set();
1689
+ if (allowed.has(strOf(stateName).trim()))
1690
+ filteredPropStates[propName] = stateName;
1691
+ }
1692
+ scene["prop_states"] = filteredPropStates;
1665
1693
  const locName = strOf(scene["location_name"]).trim();
1666
1694
  const locState = strOf(scene["location_state"]).trim();
1667
1695
  if (locState) {
@@ -1678,9 +1706,11 @@ export function parseMarkdownBatch(text, batchPlan, opts = {}) {
1678
1706
  throw _mdInvalid(label, hint);
1679
1707
  }
1680
1708
  const synopsis = synopsisLines.join("\n").trim();
1709
+ const episodeNum = Number(batchPlan["episode"] ?? 0);
1710
+ const title = batchPlan["title"] ?? parsedTitle ?? (fragmentMode ? deterministicTitleFromScenes(episodeNum, scenes) : undefined);
1681
1711
  return {
1682
- episode: Number(batchPlan["episode"] ?? 0),
1683
- title: batchPlan["title"] ?? (parsedTitle || undefined),
1712
+ episode: episodeNum,
1713
+ title,
1684
1714
  source_span: batchPlan["source_span"],
1685
1715
  scenes,
1686
1716
  actors,
@@ -1963,6 +1993,26 @@ export function expandCompactEpisodeResult(result, episodePlan) {
1963
1993
  }
1964
1994
  actions.push(action);
1965
1995
  }
1996
+ const propNames = [];
1997
+ const propStates = {};
1998
+ for (const rawProp of asList(rawScene["pr"])) {
1999
+ let name = "";
2000
+ let state = "";
2001
+ if (typeof rawProp === "string") {
2002
+ name = rawProp.trim();
2003
+ }
2004
+ else if (isDict(rawProp)) {
2005
+ name = strOf(rawProp["n"]).trim();
2006
+ state = strOf(rawProp["st"]).trim();
2007
+ }
2008
+ else
2009
+ continue;
2010
+ if (!name)
2011
+ continue;
2012
+ uniqueAdd(propNames, name);
2013
+ if (state && isStateLabelValid(state))
2014
+ propStates[name] = state;
2015
+ }
1966
2016
  scenes.push({
1967
2017
  scene_num: normalizeInt(rawScene["n"], index + 1),
1968
2018
  environment: {
@@ -1973,9 +2023,8 @@ export function expandCompactEpisodeResult(result, episodePlan) {
1973
2023
  location_state: strOf(rawScene["ls"]).trim() || null,
1974
2024
  actor_names: actorNames,
1975
2025
  actor_states: actorStates,
1976
- prop_names: isList(rawScene["pr"])
1977
- ? rawScene["pr"].map((it) => strOf(it).trim()).filter((it) => it)
1978
- : [],
2026
+ prop_names: propNames,
2027
+ prop_states: propStates,
1979
2028
  actions,
1980
2029
  });
1981
2030
  }
@@ -2035,8 +2084,20 @@ export function compactEpisodeResult(result) {
2035
2084
  const propList = isList(scene["prop_names"])
2036
2085
  ? scene["prop_names"].map((it) => strOf(it).trim()).filter((it) => it)
2037
2086
  : [];
2087
+ const propStates = isDict(scene["prop_states"]) ? scene["prop_states"] : {};
2088
+ const compactProps = [];
2089
+ let hasPropState = false;
2090
+ for (const propName of propList) {
2091
+ const propItem = { n: propName };
2092
+ const state = strOf(propStates[propName]).trim();
2093
+ if (state) {
2094
+ propItem["st"] = state;
2095
+ hasPropState = true;
2096
+ }
2097
+ compactProps.push(propItem);
2098
+ }
2038
2099
  if (propList.length > 0)
2039
- compactScene["pr"] = propList;
2100
+ compactScene["pr"] = hasPropState ? compactProps : propList;
2040
2101
  const compactActions = [];
2041
2102
  for (const action of asList(scene["actions"])) {
2042
2103
  if (!isDict(action))
@@ -2255,11 +2316,36 @@ export function normalizeEpisodeResult(result, episodePlan) {
2255
2316
  }
2256
2317
  scene["actor_states"] = actorStates;
2257
2318
  const propNames = [];
2319
+ const inferredPropStates = {};
2258
2320
  for (const rawProp of asList(scene["prop_names"])) {
2259
- const [propName] = splitEntityState(rawProp);
2321
+ const [propName, stateFromName] = splitLocationState(rawProp);
2260
2322
  uniqueAdd(propNames, propName);
2323
+ if (propName && stateFromName && isReusableState("prop", stateFromName))
2324
+ inferredPropStates[propName] = stateFromName;
2261
2325
  }
2262
2326
  scene["prop_names"] = propNames;
2327
+ const rawPropStates = scene["prop_states"];
2328
+ const propStates = { ...inferredPropStates };
2329
+ if (isDict(rawPropStates)) {
2330
+ for (const [propName, state] of Object.entries(rawPropStates)) {
2331
+ const [normalizedProp] = splitLocationState(propName);
2332
+ const normalizedState = strOf(state).trim();
2333
+ if (normalizedProp && normalizedState && isReusableState("prop", normalizedState)) {
2334
+ propStates[normalizedProp] = normalizedState;
2335
+ }
2336
+ }
2337
+ }
2338
+ else if (isList(rawPropStates)) {
2339
+ for (const item of rawPropStates) {
2340
+ if (!isDict(item))
2341
+ continue;
2342
+ const [propName] = splitLocationState(strOf(item["prop_name"]));
2343
+ const state = strOf(item["state"]).trim();
2344
+ if (propName && state && isReusableState("prop", state))
2345
+ propStates[propName] = state;
2346
+ }
2347
+ }
2348
+ scene["prop_states"] = propStates;
2263
2349
  const actions = [];
2264
2350
  for (const action of asList(scene["actions"])) {
2265
2351
  if (!isDict(action))
@@ -3075,10 +3161,7 @@ export function curateScriptAssets(script, rawCuration = null) {
3075
3161
  locations: locationDecisions,
3076
3162
  };
3077
3163
  }
3078
- // ---------------------------------------------------------------------------
3079
- // Merge episode results into a final script
3080
- // ---------------------------------------------------------------------------
3081
- export function mergeEpisodeResults(results, title) {
3164
+ export function mergeEpisodeResults(results, title, opts = {}) {
3082
3165
  const actorNames = [];
3083
3166
  const locationNames = [];
3084
3167
  const propNames = [];
@@ -3248,6 +3331,15 @@ export function mergeEpisodeResults(results, title) {
3248
3331
  }
3249
3332
  let stateCounter = 0;
3250
3333
  const stateIdsByTarget = new Map();
3334
+ const stateNamesByTarget = new Map();
3335
+ const rememberStateName = (kind, assetName, stateName) => {
3336
+ const key = `${kind}::${assetName}`;
3337
+ if (!stateNamesByTarget.has(key))
3338
+ stateNamesByTarget.set(key, []);
3339
+ const names = stateNamesByTarget.get(key);
3340
+ if (!names.includes(stateName))
3341
+ names.push(stateName);
3342
+ };
3251
3343
  const actors = [];
3252
3344
  for (const name of actorNames) {
3253
3345
  const entry = { actor_id: actorIds.get(name), actor_name: name };
@@ -3259,6 +3351,7 @@ export function mergeEpisodeResults(results, title) {
3259
3351
  const sid = fmtId("st", stateCounter);
3260
3352
  const stateName = strOf(stateDef["state_name"]).trim();
3261
3353
  stateIdsByTarget.set(`actor::${name}::${stateName}`, sid);
3354
+ rememberStateName("actor", name, stateName);
3262
3355
  const stateEntry = { state_id: sid, state_name: stateName };
3263
3356
  const description = strOf(stateDef["description"]).trim();
3264
3357
  if (description)
@@ -3280,6 +3373,7 @@ export function mergeEpisodeResults(results, title) {
3280
3373
  const sid = fmtId("st", stateCounter);
3281
3374
  const stateName = strOf(stateDef["state_name"]).trim();
3282
3375
  stateIdsByTarget.set(`location::${name}::${stateName}`, sid);
3376
+ rememberStateName("location", name, stateName);
3283
3377
  const stateEntry = { state_id: sid, state_name: stateName };
3284
3378
  const description = strOf(stateDef["description"]).trim();
3285
3379
  if (description)
@@ -3301,6 +3395,7 @@ export function mergeEpisodeResults(results, title) {
3301
3395
  const sid = fmtId("st", stateCounter);
3302
3396
  const stateName = strOf(stateDef["state_name"]).trim();
3303
3397
  stateIdsByTarget.set(`prop::${name}::${stateName}`, sid);
3398
+ rememberStateName("prop", name, stateName);
3304
3399
  const stateEntry = { state_id: sid, state_name: stateName };
3305
3400
  const description = strOf(stateDef["description"]).trim();
3306
3401
  if (description)
@@ -3321,6 +3416,23 @@ export function mergeEpisodeResults(results, title) {
3321
3416
  const normKind = _MD_SPEAKER_KIND_NORM[speakerKind.toLowerCase()] ?? _MD_SPEAKER_KIND_NORM[speakerKind] ?? "other";
3322
3417
  return speakerIdsByName.get(`${normKind}::${speaker}`) ?? speakerIdsByName.get(`other::${speaker}`) ?? null;
3323
3418
  };
3419
+ const stateIdForRef = (kind, assetName, explicitState, unresolved) => {
3420
+ const name = cleanName(assetName);
3421
+ if (!name)
3422
+ return null;
3423
+ const explicitName = strOf(explicitState).trim();
3424
+ if (explicitName) {
3425
+ const stateId = stateIdsByTarget.get(`${kind}::${name}::${explicitName}`) ?? null;
3426
+ if (!stateId && opts.trackUnresolvedStateRefs)
3427
+ unresolved.push({ kind, asset_name: name, state_name: explicitName });
3428
+ return stateId;
3429
+ }
3430
+ if (!opts.bindDefaultStateRefs)
3431
+ return null;
3432
+ const stateNames = stateNamesByTarget.get(`${kind}::${name}`) ?? [];
3433
+ const defaultName = stateNames.includes("默认") ? "默认" : stateNames.length === 1 ? stateNames[0] : "";
3434
+ return defaultName ? stateIdsByTarget.get(`${kind}::${name}::${defaultName}`) ?? null : null;
3435
+ };
3324
3436
  const sortedResults = [...results].sort((a, b) => Number(a["episode"] ?? 0) - Number(b["episode"] ?? 0));
3325
3437
  const episodes = [];
3326
3438
  let sceneCounter = 0;
@@ -3329,8 +3441,9 @@ export function mergeEpisodeResults(results, title) {
3329
3441
  for (const scene of asList(result["scenes"])) {
3330
3442
  sceneCounter += 1;
3331
3443
  const locName = cleanName(strOf(scene["location_name"] || "未知场景")) || "未知场景";
3444
+ const unresolvedStateRefs = [];
3332
3445
  const locState = strOf(scene["location_state"]).trim();
3333
- const locStateId = locState ? stateIdsByTarget.get(`location::${locName}::${locState}`) ?? null : null;
3446
+ const locStateId = stateIdForRef("location", locName, locState, unresolvedStateRefs);
3334
3447
  const sceneActorRefs = [];
3335
3448
  for (const actorRaw of asList(scene["actor_names"])) {
3336
3449
  const actor = cleanName(strOf(actorRaw));
@@ -3339,14 +3452,16 @@ export function mergeEpisodeResults(results, title) {
3339
3452
  continue;
3340
3453
  const actorStates = isDict(scene["actor_states"]) ? scene["actor_states"] : {};
3341
3454
  const state = actorStates[actor];
3342
- const stateId = state ? stateIdsByTarget.get(`actor::${actor}::${strOf(state).trim()}`) ?? null : null;
3455
+ const stateId = stateIdForRef("actor", actor, state, unresolvedStateRefs);
3343
3456
  sceneActorRefs.push({ actor_id: aid, state_id: stateId });
3344
3457
  }
3345
3458
  const scenePropRefs = [];
3459
+ const propStates = isDict(scene["prop_states"]) ? scene["prop_states"] : {};
3346
3460
  for (const rawProp of asList(scene["prop_names"])) {
3347
3461
  const prop = cleanName(strOf(rawProp));
3348
- if (propIds.has(prop))
3349
- scenePropRefs.push({ prop_id: propIds.get(prop), state_id: null });
3462
+ if (propIds.has(prop)) {
3463
+ scenePropRefs.push({ prop_id: propIds.get(prop), state_id: stateIdForRef("prop", prop, propStates[prop], unresolvedStateRefs) });
3464
+ }
3350
3465
  }
3351
3466
  const actions = [];
3352
3467
  for (const action of asList(scene["actions"])) {
@@ -3415,6 +3530,8 @@ export function mergeEpisodeResults(results, title) {
3415
3530
  actors: sceneActorRefs,
3416
3531
  props: scenePropRefs,
3417
3532
  };
3533
+ if (unresolvedStateRefs.length > 0)
3534
+ context["unresolved_state_refs"] = unresolvedStateRefs;
3418
3535
  scenes.push({
3419
3536
  scene_id: fmtId("scn", sceneCounter),
3420
3537
  environment: scene["environment"],