@lingjingai/scriptctl 0.44.0 → 0.47.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 (58) hide show
  1. package/changes/0.45.0.md +39 -0
  2. package/dist/domain/ingest/serial-context.d.ts +15 -27
  3. package/dist/domain/ingest/serial-context.js +106 -57
  4. package/dist/domain/ingest/serial-context.js.map +1 -1
  5. package/dist/infra/ingest/review-renderer.js +11 -2
  6. package/dist/infra/ingest/review-renderer.js.map +1 -1
  7. package/dist/infra/ingest/video-transcode.js +16 -3
  8. package/dist/infra/ingest/video-transcode.js.map +1 -1
  9. package/dist/infra/llm/anthropic-model.js +21 -2
  10. package/dist/infra/llm/anthropic-model.js.map +1 -1
  11. package/dist/infra/llm/gemini-video-model.d.ts +3 -0
  12. package/dist/infra/llm/gemini-video-model.js +26 -9
  13. package/dist/infra/llm/gemini-video-model.js.map +1 -1
  14. package/dist/infra/llm/openai-compatible-model.js +31 -2
  15. package/dist/infra/llm/openai-compatible-model.js.map +1 -1
  16. package/dist/llm/config.js +5 -1
  17. package/dist/llm/config.js.map +1 -1
  18. package/dist/llm/registry.d.ts +1 -0
  19. package/dist/llm/registry.js +10 -4
  20. package/dist/llm/registry.js.map +1 -1
  21. package/dist/llm/router.d.ts +1 -0
  22. package/dist/llm/router.js +0 -0
  23. package/dist/llm/router.js.map +1 -1
  24. package/dist/llm/tasks/ingest/episode-assets.d.ts +3 -2
  25. package/dist/llm/tasks/ingest/episode-assets.js +119 -25
  26. package/dist/llm/tasks/ingest/episode-assets.js.map +1 -1
  27. package/dist/llm/tasks/ingest/name-fix.d.ts +9 -0
  28. package/dist/llm/tasks/ingest/name-fix.js +64 -0
  29. package/dist/llm/tasks/ingest/name-fix.js.map +1 -0
  30. package/dist/llm/tasks/ingest/video-serial.d.ts +2 -1
  31. package/dist/llm/tasks/ingest/video-serial.js +184 -85
  32. package/dist/llm/tasks/ingest/video-serial.js.map +1 -1
  33. package/dist/llm/tasks/schemas.d.ts +3 -0
  34. package/dist/llm/tasks/schemas.js +240 -0
  35. package/dist/llm/tasks/schemas.js.map +1 -1
  36. package/dist/llm/types.d.ts +14 -1
  37. package/dist/llm/types.js.map +1 -1
  38. package/dist/usecases/ingest/pipeline.js +17 -2
  39. package/dist/usecases/ingest/pipeline.js.map +1 -1
  40. package/dist/usecases/ingest/serial-govern.d.ts +4 -0
  41. package/dist/usecases/ingest/serial-govern.js +211 -40
  42. package/dist/usecases/ingest/serial-govern.js.map +1 -1
  43. package/dist/usecases/ingest/status.js +3 -3
  44. package/dist/usecases/ingest/status.js.map +1 -1
  45. package/dist/usecases/ingest/usage-report.d.ts +17 -0
  46. package/dist/usecases/ingest/usage-report.js +51 -0
  47. package/dist/usecases/ingest/usage-report.js.map +1 -0
  48. package/dist/usecases/ingest/video-pipeline.js +5 -0
  49. package/dist/usecases/ingest/video-pipeline.js.map +1 -1
  50. package/dist/usecases/ingest/view-server.d.ts +22 -0
  51. package/dist/usecases/ingest/view-server.js +39 -2
  52. package/dist/usecases/ingest/view-server.js.map +1 -1
  53. package/package.json +1 -1
  54. package/skills/scriptctl/SKILL.md +13 -2
  55. package/skills/scriptctl/references/atomic-write-workflow.md +45 -16
  56. package/dist/domain/ingest/asset-state-md-parser.d.ts +0 -2
  57. package/dist/domain/ingest/asset-state-md-parser.js +0 -133
  58. package/dist/domain/ingest/asset-state-md-parser.js.map +0 -1
@@ -17,6 +17,28 @@ export declare function readTiming(root: string): {
17
17
  }>;
18
18
  totalMs: number;
19
19
  };
20
+ export declare function readUsage(root: string): {
21
+ totals: {
22
+ calls: number;
23
+ reused: number;
24
+ inputTokens: number;
25
+ outputTokens: number;
26
+ cachedInputTokens: number;
27
+ cacheCreationTokens: number;
28
+ totalTokens: number;
29
+ };
30
+ byTask: Array<{
31
+ task: string;
32
+ profile: string;
33
+ model: string;
34
+ calls: number;
35
+ reused: number;
36
+ inputTokens: number;
37
+ outputTokens: number;
38
+ cachedInputTokens: number;
39
+ cacheCreationTokens: number;
40
+ }>;
41
+ } | null;
20
42
  export declare function readSafe(root: string, rel: string): {
21
43
  ok: true;
22
44
  text: string;
@@ -42,7 +42,7 @@ export function listArtifacts(root) {
42
42
  结果: only([meta("script.json"), meta("validation.json"), meta("review.html"), meta("timings.json")]),
43
43
  // Text serial artifacts (empty for a video workspace).
44
44
  上下文: dirFiles("serial", (n) => n.startsWith("context_") && n.endsWith(".md")),
45
- 每窗更新: dirFiles("serial", (n) => n.startsWith("win_") && n.endsWith(".md")),
45
+ 每窗更新: dirFiles("serial", (n) => n.startsWith("win_") && n.endsWith(".json")),
46
46
  篇章梗概: dirFiles("serial", (n) => n.startsWith("arc_") && n.endsWith(".md")),
47
47
  前段: dirFiles("pass2", (n) => n.endsWith(".md")),
48
48
  // Video serial artifacts (empty for a text workspace). Grouped by kind so an
@@ -99,6 +99,17 @@ export function readTiming(root) {
99
99
  }
100
100
  return { episodes, totalMs };
101
101
  }
102
+ // Token accounting written by the pipelines → usage.json. Returns null when absent
103
+ // (run hasn't reached the point where spend is persisted yet).
104
+ export function readUsage(root) {
105
+ try {
106
+ const j = JSON.parse(fs.readFileSync(path.join(root, "usage.json"), "utf-8"));
107
+ return j;
108
+ }
109
+ catch {
110
+ return null;
111
+ }
112
+ }
102
113
  // Read a workspace file, guarding against path traversal outside the root.
103
114
  export function readSafe(root, rel) {
104
115
  const abs = path.resolve(root, rel);
@@ -124,7 +135,7 @@ export async function runViewServer(opts) {
124
135
  return send(res, 200, "text/html; charset=utf-8", DASHBOARD_HTML);
125
136
  if (u.pathname === "/api/state") {
126
137
  const status = deriveIngestStatus(root);
127
- return send(res, 200, "application/json", JSON.stringify({ root, status, groups: listArtifacts(root), timing: readTiming(root) }));
138
+ return send(res, 200, "application/json", JSON.stringify({ root, status, groups: listArtifacts(root), timing: readTiming(root), usage: readUsage(root) }));
128
139
  }
129
140
  if (u.pathname === "/api/file") {
130
141
  const rel = u.searchParams.get("path") ?? "";
@@ -204,6 +215,7 @@ table.tm td.slow{color:var(--warn)}
204
215
  <span class="now">当前:<b id="curState">—</b></span>
205
216
  <span class="now">耗时 <b id="elapsed">—</b></span>
206
217
  <span class="dim" id="eta"></span>
218
+ <span class="now" id="tokWrap" style="display:none">Token <b id="tokTotal">—</b> <span class="dim" id="tokIO"></span></span>
207
219
  <span class="dim mono" id="root" style="margin-left:auto"></span>
208
220
  <span class="dim" id="tick"></span>
209
221
  </header>
@@ -212,6 +224,7 @@ table.tm td.slow{color:var(--warn)}
212
224
  <div class="stages" id="stages"></div>
213
225
  </div>
214
226
  <div class="timing" id="timingWrap" style="display:none"><table class="tm" id="tmTable"></table></div>
227
+ <div class="timing" id="usageWrap" style="display:none"><table class="tm" id="usageTable"></table></div>
215
228
  <main>
216
229
  <aside id="side"></aside>
217
230
  <section>
@@ -229,6 +242,29 @@ var timing=null, timingAt=0; // last status.timings + client time it arrived (av
229
242
  function $(s){return document.querySelector(s)}
230
243
  function fmtDur(ms){if(ms==null)return '—';var s=Math.round(ms/1000);return s>=60?(Math.floor(s/60)+'m'+('0'+(s%60)).slice(-2)+'s'):s+'s'}
231
244
  // per-episode timing table (video only; hidden when there is no timing.jsonl)
245
+ function fmtTok(n){if(n==null)return '—';if(n>=1e6)return (n/1e6).toFixed(2)+'M';if(n>=1e3)return (n/1e3).toFixed(1)+'k';return ''+n}
246
+ var TASKNAMES={'ingest.body-start':'正文定位','ingest.text-normalize':'规范化','ingest.serial-govern':'串行治理','ingest.name-fix':'命名修复','ingest.episode-assets':'分集资产','ingest.asset-curate':'资产甄选','ingest.asset-govern':'资产总览','ingest.arc-summary':'篇章梗概','ingest.state-reconcile':'状态归并','ingest.mention-resolve':'指称消解','ingest.video-serial':'视频串行'};
247
+ // Token accounting table + header badge. Hidden until usage.json exists.
248
+ function renderUsage(u){
249
+ if(!u||!u.totals){$('#usageWrap').style.display='none';$('#tokWrap').style.display='none';return}
250
+ var t=u.totals;
251
+ $('#tokWrap').style.display='';
252
+ $('#tokTotal').textContent=fmtTok(t.totalTokens);
253
+ var cacheHit=(t.cachedInputTokens||0),cacheNew=(t.cacheCreationTokens||0);
254
+ var cacheStr=(cacheHit||cacheNew)?' · 缓存命中 '+fmtTok(cacheHit)+(cacheNew?'/建 '+fmtTok(cacheNew):''):'';
255
+ $('#tokIO').textContent='(入 '+fmtTok(t.inputTokens)+' / 出 '+fmtTok(t.outputTokens)+cacheStr+' · '+t.calls+'次'+(t.reused?' · 复用'+t.reused:'')+')';
256
+ var rows=(u.byTask||[]).slice().filter(function(r){return r.calls>0||r.inputTokens>0||r.outputTokens>0});
257
+ if(!rows.length){$('#usageWrap').style.display='none';return}
258
+ rows.sort(function(a,b){return (b.inputTokens+b.outputTokens)-(a.inputTokens+a.outputTokens)});
259
+ $('#usageWrap').style.display='block';
260
+ var h=['<tr><th>任务</th><th>调用</th><th>复用</th><th>入token</th><th title="缓存命中/新建,均为入token的子集">缓存(命中/建)</th><th>出token</th><th>合计</th></tr>'];
261
+ rows.forEach(function(r){
262
+ var ch=r.cachedInputTokens||0,cn=r.cacheCreationTokens||0;
263
+ h.push('<tr><td>'+(TASKNAMES[r.task]||r.task)+'</td><td>'+r.calls+'</td><td>'+(r.reused||0)+'</td><td>'+fmtTok(r.inputTokens)+'</td><td class="dim">'+(ch||cn?fmtTok(ch)+'/'+fmtTok(cn):'—')+'</td><td>'+fmtTok(r.outputTokens)+'</td><td>'+fmtTok(r.inputTokens+r.outputTokens)+'</td></tr>');
264
+ });
265
+ h.push('<tr><td class="dim">合计</td><td class="dim">'+t.calls+'</td><td class="dim">'+t.reused+'</td><td class="dim">'+fmtTok(t.inputTokens)+'</td><td class="dim">'+(t.cachedInputTokens||t.cacheCreationTokens?fmtTok(t.cachedInputTokens||0)+'/'+fmtTok(t.cacheCreationTokens||0):'—')+'</td><td class="dim">'+fmtTok(t.outputTokens)+'</td><td class="dim">'+fmtTok(t.totalTokens)+'</td></tr>');
266
+ $('#usageTable').innerHTML=h.join('');
267
+ }
232
268
  function renderEpTiming(tm){
233
269
  if(!tm||!tm.episodes||!tm.episodes.length){$('#timingWrap').style.display='none';return}
234
270
  $('#timingWrap').style.display='block';
@@ -297,6 +333,7 @@ function poll(){
297
333
  }).join('');
298
334
  timing=s.timings||null;timingAt=Date.now();renderTiming();
299
335
  renderEpTiming(d.timing);
336
+ renderUsage(d.usage);
300
337
  // sidebar
301
338
  var html='',latest=null;
302
339
  Object.keys(d.groups).forEach(function(grp){
@@ -1 +1 @@
1
- {"version":3,"file":"view-server.js","sourceRoot":"","sources":["../../../src/usecases/ingest/view-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-server.js","sourceRoot":"","sources":["../../../src/usecases/ingest/view-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingjingai/scriptctl",
3
- "version": "0.44.0",
3
+ "version": "0.47.0",
4
4
  "description": "剧本阶段统一 CLI:直转外部素材到 script.json,以及当前最终剧本的读取、校验、原子编辑与批量 patch 精修。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: scriptctl
3
3
  description: "剧本 script.json 的读写 + 入库 CLI。转剧本:ingest(txt/md/docx 或视频,自动分流,产出 workspace/script.json)→ view 自查 → publish 入库。读:集/场/action/资产/状态/校验/时间戳/出场统计。写:台词/类型/归属/scene-ref 场景造型/内联发声源/importance/资产。选择器批量精修(读写共享 --in/谓词)、动词脚本 do(异构批量一事务)、结构调整(插/删/移/分/合)。ingest status 从工作区真实文件报进度。沙箱里默认读写项目 DB;本地电脑默认 --script-path 直接读写本地 script.json。剧本阶段做任何剧本相关读写、以及洗稿/对标/转绘里操作两个 script.json 之前都应加载。正文由你用原子能力写入。"
4
- version: "0.19.0"
5
- scriptctl_version: "0.36.5"
4
+ version: "0.20.0"
5
+ scriptctl_version: "0.45.0"
6
6
  author: "official"
7
7
  ---
8
8
 
@@ -14,6 +14,17 @@ author: "official"
14
14
  - **转剧本入库**:`ingest`(抽取,产出 `workspace/script.json`)→ `view`(自查)→ `publish`(入库)。见 [references/ingest-workflow.md](references/ingest-workflow.md)。
15
15
  - **读写既有剧本**:查询 + 原子写 + 选择器批量 + `do`。
16
16
 
17
+ ## 从灵感写剧本:资产先行,按真实场界连续写
18
+
19
+ 从题材、灵感或集纲创作新内容时,按两个可独立检查的批次落盘:
20
+
21
+ 1. **资产批次**:先读现有人物、地点、道具及各自的 `states[]`。新出现或需要修订的人物、地点、道具先用 `add-*` / `describe` / `importance` 注册;持久、可复用、需要独立生成视觉资产的人物状态、地点状态、道具状态先用 `state-add` / `describe <kind:id/state_id>` 定义。资产批次落盘并读回确认后再写正文。
22
+ 2. **正文批次**:先建立真实需要的 scene,再绑定本场人物、地点、道具及 state,随后写 action / dialogue。互动式写作按有意义的 action 批次持续写入同一场,每批落盘后简短报告进度,便于宿主及时刷新。正文中出现新资产或新 state 时,先完成该资产批次,再继续正文。
23
+
24
+ **场界判定**:场是时间与空间连续的生产单元。地点、时段连续且动作未中断时,继续向当前 scene 追加 action;笑点升级、攻防回合、角色进出和剧情节拍都表达为当前场内容。地点切换、明显跳时、叙事切到另一条同时线或明确转场时建新 scene。一集可以只有一场。
25
+
26
+ 收尾时用 `scenes --in <ep>` 复核相邻场界;连续的同地点、同时段场用 `merge <src> --into <dst>` 合并,然后运行 `validate`。完整命令顺序见 [references/atomic-write-workflow.md](references/atomic-write-workflow.md)。
27
+
17
28
  ## 先定目标:作用在哪份剧本上
18
29
 
19
30
  除 `ingest`/`view`/`publish` 外,每条读写命令都要知道读写哪份剧本,从下面选一个(互斥):
@@ -1,4 +1,4 @@
1
- # 从零原子写 — 你自己写正文,scriptctl 只搭骨架
1
+ # 从零原子写 — 资产先行,按真实场界写正文
2
2
 
3
3
  适用:**没有现成剧本文本**,从零写(手里只有题材 / 灵感 / 集纲)。
4
4
 
@@ -9,16 +9,19 @@
9
9
  ## 端到端流程
10
10
 
11
11
  ```
12
- create(空白剧本)
13
- → worldview 设世界观
14
- add-actor / add-location / add-prop 注册资产(+ state-add 给外观档位)
15
- add-episode 建分集
16
- synopsis 写整本 / 分集梗概
17
- insert <ep> --location 建场景
18
- insert <ep/scn> --type ... --content "正文" [--emotion "情绪"] [--actor <id>] 逐 action 灌正文
19
- → dialogue / scene-ref / transition / importance 发声源、场景造型、重要度
20
- validate 收尾自查
21
- publish 入库(沙箱必做)
12
+ create(空白剧本,既有剧本略过)
13
+ → worldview 设世界观
14
+ 资产批次
15
+ add-actor / add-location / add-prop 注册或完善资产
16
+ state-add / describe 定义持久视觉状态
17
+ do assets.txt --apply 读回资产与 states
18
+ 正文批次
19
+ add-episode / synopsis 建分集与梗概
20
+ insert <ep> --location 仅在真实场界处建 scene
21
+ scene-ref 绑定本场资产与 state
22
+ insert <ep/scn> --type ... 按 action 批次连续写正文
23
+ → scenes / actions / validate 收尾自查
24
+ → publish 入库(沙箱必做)
22
25
  ```
23
26
 
24
27
  > 发声源写在**对白行内联**(`dialogue <at> --actor/--kind`,或 `insert --actor`);造型挂在**场景 cast 引用**上(`scene-ref <ep/scn> <kind:id> --state`)。
@@ -47,31 +50,57 @@ scriptctl insert ep_001/scn_001 --type inner_thought --content "又是他。" --
47
50
  scriptctl validate
48
51
  ```
49
52
 
50
- ### B. 整集 / 整本(推荐):一段 `do` 动词脚本,一个事务
53
+ ### B. 整集 / 整本(推荐):资产与正文分两段 `do`
51
54
 
52
- 一集几十个 action 不要敲几十条命令,也**不要手撸 patch JSON**。写一段 `do` 脚本——**每行就是一条你会敲的命令**(去掉开头的 `scriptctl`),按依赖顺序排好(先建资产、再 `add-episode`、再 `insert` 场景、最后 `insert` action),一次落地。同一段 `do` 内按顺序执行,因此 `add-episode` 产出的 `ep_001` 能被靠后的 `insert` 直接引用。
55
+ 一集几十个 action `do` 批量写入。先独立落盘资产批次,读回自动分配的 id;再用正文批次建集、按真实场界建 scene、绑定 state 并写 action。这两次落盘让宿主先展示人物、地点、道具及状态,再展示正文。
53
56
 
54
57
  ```bash
55
58
  scriptctl create --title "夏夜便利店" # 先有空白剧本
56
- scriptctl do ep01.txt # 默认 dry-run:内存里跑 + 校验,不落库
57
- scriptctl do ep01.txt --apply # 确认后真写
59
+ scriptctl do assets.txt # 资产批次 dry-run
60
+ scriptctl do assets.txt --apply # 先落盘资产与 states
61
+ scriptctl actors # 读回资产 id
62
+ scriptctl locations
63
+ scriptctl props
64
+ scriptctl states act_001 # 逐个确认 state id / 名称 / 描述
65
+ scriptctl states loc_001
66
+ scriptctl states prp_001
67
+ scriptctl do ep01.txt # 正文批次 dry-run
68
+ scriptctl do ep01.txt --apply # 再落盘场景与正文
58
69
  ```
59
70
 
60
- `ep01.txt` 形如(每行一条动词,`#` 注释、空行随意):
71
+ `assets.txt` 先注册资产与持久视觉状态:
61
72
 
62
73
  ```
63
74
  worldview 现代
64
75
  add-actor 林夏 --role 主角 --description "高三女生,沉默寡言"
65
76
  add-actor 陈默 --role 配角 --description "便利店夜班店员"
66
77
  add-location 便利店 --description "24h 便利店,冷白光"
78
+ add-prop 黑伞 --description "林夏随身携带的旧黑伞"
79
+ state-add actor:act_001 "平日造型" --state-id default --description "整洁校服,黑色长发"
80
+ state-add actor:act_001 "雨天造型" --state-id st_rain --description "校服湿透,发梢滴水"
81
+ state-add location:loc_001 "常态" --state-id default --description "冷白灯全部亮起"
82
+ state-add location:loc_001 "停电" --state-id st_outage --description "冷白灯熄灭,应急灯发绿"
83
+ state-add prop:prp_001 "常态" --state-id default --description "伞面完整,伞骨可正常开合"
84
+ state-add prop:prp_001 "破损" --state-id st_torn --description "伞面裂开,一根伞骨外翻"
85
+ ```
86
+
87
+ `ep01.txt` 再建分集和真实 scene,然后写正文:
88
+
89
+ ```
67
90
  add-episode --title "第一集:相遇"
68
91
  synopsis "雨夜便利店里,林夏与夜班店员陈默因一场意外相遇。"
69
92
  synopsis ep_001 "林夏雨夜进入便利店,发现陈默似乎认识她。"
70
93
  insert ep_001 --location loc_001 --time night --space interior
94
+ scene-ref ep_001/scn_001 actor:act_001 --state st_rain
95
+ scene-ref ep_001/scn_001 actor:act_002 --state none
96
+ scene-ref ep_001/scn_001 location:loc_001 --state default
97
+ scene-ref ep_001/scn_001 prop:prp_001 --state default
71
98
  insert ep_001/scn_001 --type action --content "雨夜,林夏推门进店。" --emotion "狼狈"
72
99
  insert ep_001/scn_001 --type dialogue --content "欢迎光临。" --actor act_002
73
100
  ```
74
101
 
102
+ 地点、时段和动作连续时,后续节拍继续向 `ep_001/scn_001` 追加 action。互动式写作可把长场拆成多个 action 批次依次 `do --apply`,每批都指向同一 scene。场界规则以 SKILL.md「从灵感写剧本」为准。
103
+
75
104
  动词与单条命令完全一致(参数见 `scriptctl <verb> --help`)。`do` 也读 stdin:`… | scriptctl do -`。
76
105
 
77
106
  > 机器/程序化生成的批量(如 jq 变换查询结果)才用 JSON:`scriptctl actions … --json | jq '[…ops…]' | scriptctl patch -`。手写一律 `do`。
@@ -1,2 +0,0 @@
1
- import { type Delta } from "./serial-context.js";
2
- export declare function parseUpdateMarkdown(md: string): Delta;
@@ -1,133 +0,0 @@
1
- // Parse the serial pass's `# 更新` markdown → Delta (§ serial). Lenient (like
2
- // video-md-parser): a malformed line is skipped, never throws, since these are
3
- // incremental decisions layered on an already-valid body.
4
- //
5
- // Sections (headings `##`, bullets `- `):
6
- // ## 新增 - 人物 王五 | featured | 暴发户,市侩 (<kind> <name> | 重要度 | 描述)
7
- // ## 合并 - 神秘男子 -> 张三
8
- // ## 造型 - 张三 | 婚服=大红嫁衣 | 大红喜服,凤冠霞帔 (实体 | 名(=同义) | 描述)
9
- // ## 重要度 - 张三: featured (已存在实体的重要度修订)
10
- // ## 场景 - scn_012 | 地点:教堂 | 人物:张三(婚服),李四 | 道具:婚戒
11
- // ## 子事件 - 张三发现李四是卧底
12
- // ## 梗概 本集大婚被搅局 (散文,非 bullet)
13
- import { emptyDelta, kindFromLabel } from "./serial-context.js";
14
- function sectionOf(heading) {
15
- const h = heading.replace(/\s+/g, "");
16
- if (h.includes("新增") || h.includes("发现"))
17
- return "new";
18
- if (h.includes("合并"))
19
- return "merges";
20
- if (h.includes("造型"))
21
- return "looks";
22
- if (h.includes("重要"))
23
- return "importance";
24
- if (h.includes("场景") || h.includes("在场"))
25
- return "scenes";
26
- if (h.includes("子事件") || h.includes("事件"))
27
- return "sub";
28
- if (h.includes("梗概") || h.includes("摘要") || h.includes("概要"))
29
- return "summary";
30
- return null;
31
- }
32
- const splitColon = (s) => {
33
- const m = /^(.*?)[::](.*)$/.exec(s);
34
- return m ? [m[1].trim(), m[2].trim()] : null;
35
- };
36
- const isTier = (s) => s === "featured" || s === "background";
37
- // "张三(婚服)" → { name: "张三", look: "婚服" }
38
- const nameLook = (s) => {
39
- const m = /^(.+?)\s*[((](.+?)[))]\s*$/.exec(s.trim());
40
- return m ? { name: m[1].trim(), look: m[2].trim() } : { name: s.trim() };
41
- };
42
- const splitList = (s) => s.split(/[,,、;;]/).map((x) => x.trim()).filter(Boolean);
43
- export function parseUpdateMarkdown(md) {
44
- const delta = emptyDelta();
45
- const summaryLines = [];
46
- let section = null;
47
- for (const raw of stripFences(md).split("\n")) {
48
- const t = raw.trim();
49
- if (t === "")
50
- continue;
51
- if (t.startsWith("#")) {
52
- section = t.startsWith("##") ? sectionOf(t.replace(/^#+/, "")) : null;
53
- continue;
54
- }
55
- if (section === "summary") {
56
- summaryLines.push(t.replace(/^-\s*/, ""));
57
- continue;
58
- }
59
- const body = t.startsWith("-") ? t.replace(/^-\s*/, "").trim() : t;
60
- if (!body)
61
- continue;
62
- const parts = body.split("|").map((s) => s.trim());
63
- switch (section) {
64
- case "new": {
65
- // `<kind> <name> | 重要度 | 描述`
66
- const head = parts[0];
67
- const sp = head.search(/\s/);
68
- if (sp < 0)
69
- break;
70
- const kind = kindFromLabel(head.slice(0, sp));
71
- const name = head.slice(sp + 1).trim();
72
- if (!kind || !name)
73
- break;
74
- const tier = parts[1] && isTier(parts[1]) ? parts[1] : undefined;
75
- delta.newEntities.push({ kind, name, ...(tier ? { importance: tier } : {}), description: (parts[2] ?? "").trim() });
76
- break;
77
- }
78
- case "merges": {
79
- const m = body.split(/\s*(?:->|→|=>)\s*/);
80
- if (m.length === 2 && m[0].trim() && m[1].trim())
81
- delta.merges.push({ from: m[0].trim(), into: m[1].trim() });
82
- break;
83
- }
84
- case "looks": {
85
- if (parts.length >= 2 && parts[0]) {
86
- const names = parts[1].split(/\s*=\s*/).map((n) => n.trim()).filter(Boolean);
87
- if (names.length)
88
- delta.looks.push({ entity: parts[0], names, description: (parts[2] ?? "").trim() });
89
- }
90
- break;
91
- }
92
- case "importance": {
93
- const kv = splitColon(body);
94
- if (kv && isTier(kv[1]))
95
- delta.importance.push({ name: kv[0], tier: kv[1] });
96
- break;
97
- }
98
- case "scenes": {
99
- const scene = parts[0].replace(/^[((].*?[))]\s*/, "").trim();
100
- if (!scene)
101
- break;
102
- const ref = { scene, actors: [], props: [] };
103
- for (const f of parts.slice(1)) {
104
- const kv = splitColon(f);
105
- if (!kv)
106
- continue;
107
- const key = kv[0].replace(/\s+/g, "");
108
- if (key.includes("地点") || key.includes("场景"))
109
- ref.location = kv[1].trim() || undefined;
110
- else if (key.includes("人物"))
111
- ref.actors = splitList(kv[1]).map(nameLook);
112
- else if (key.includes("道具"))
113
- ref.props = splitList(kv[1]).map(nameLook);
114
- }
115
- delta.sceneRefs.push(ref);
116
- break;
117
- }
118
- case "sub":
119
- delta.subEvents.push(body);
120
- break;
121
- default:
122
- break;
123
- }
124
- }
125
- delta.summary = summaryLines.join(" ").trim();
126
- return delta;
127
- }
128
- function stripFences(raw) {
129
- const trimmed = raw.trim();
130
- const fence = trimmed.match(/^```(?:markdown|md)?\n([\s\S]*?)\n```$/);
131
- return fence ? fence[1] : trimmed;
132
- }
133
- //# sourceMappingURL=asset-state-md-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-state-md-parser.js","sourceRoot":"","sources":["../../../src/domain/ingest/asset-state-md-parser.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,0DAA0D;AAC1D,EAAE;AACF,0CAA0C;AAC1C,wEAAwE;AACxE,4BAA4B;AAC5B,+DAA+D;AAC/D,kDAAkD;AAClD,wDAAwD;AACxD,0BAA0B;AAC1B,+CAA+C;AAE/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAI5E,SAAS,SAAS,CAAC,OAAe;IAChC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IAC1C,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1D,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAS,EAA2B,EAAE;IACxD,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AACF,MAAM,MAAM,GAAG,CAAC,CAAS,EAAkC,EAAE,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,YAAY,CAAC;AACrG,wCAAwC;AACxC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAmC,EAAE;IAC9D,MAAM,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7E,CAAC,CAAC;AACF,MAAM,SAAS,GAAG,CAAC,CAAS,EAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnG,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,OAAO,GAAY,IAAI,CAAC;IAE5B,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE;YAAE,SAAS;QACvB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QAC3G,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAEnF,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnD,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,6BAA6B;gBAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,EAAE,GAAG,CAAC;oBAAE,MAAM;gBAClB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;oBAAE,MAAM;gBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACjE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpH,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE;oBAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClH,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC9E,IAAI,KAAK,CAAC,MAAM;wBAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzG,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7E,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9D,IAAI,CAAC,KAAK;oBAAE,MAAM;gBAClB,MAAM,GAAG,GAA+B,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACzE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBACzB,IAAI,CAAC,EAAE;wBAAE,SAAS;oBAClB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;yBAClF,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;yBACpE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC1E,CAAC;gBACD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,MAAM;YACR,CAAC;YACD,KAAK,KAAK;gBACR,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM;YACR;gBACE,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACrC,CAAC"}