@lingjingai/scriptctl 0.25.1 → 0.25.3
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 +28 -2
- package/dist/cli.js.map +1 -1
- package/dist/common.d.ts +1 -0
- package/dist/domain/direct-core.d.ts +11 -0
- package/dist/domain/direct-core.js.map +1 -1
- package/dist/domain/loom/checkpointer.d.ts +3 -0
- package/dist/domain/loom/checkpointer.js +30 -0
- package/dist/domain/loom/checkpointer.js.map +1 -0
- package/dist/domain/loom/index.d.ts +44 -0
- package/dist/domain/loom/index.js +275 -0
- package/dist/domain/loom/index.js.map +1 -0
- package/dist/domain/loom/types.d.ts +100 -0
- package/dist/domain/loom/types.js +2 -0
- package/dist/domain/loom/types.js.map +1 -0
- package/dist/domain/script/patch/apply.js +1 -1
- package/dist/domain/script/patch/apply.js.map +1 -1
- package/dist/domain/script/patch/ops-meta.d.ts +2 -0
- package/dist/domain/script/patch/ops-meta.js +36 -1
- package/dist/domain/script/patch/ops-meta.js.map +1 -1
- package/dist/domain/script/patch/registry.js +3 -1
- package/dist/domain/script/patch/registry.js.map +1 -1
- package/dist/domain/script/schema.js +2 -0
- package/dist/domain/script/schema.js.map +1 -1
- package/dist/help-text.js +59 -9
- package/dist/help-text.js.map +1 -1
- package/dist/infra/providers.d.ts +40 -0
- package/dist/infra/providers.js +282 -2
- package/dist/infra/providers.js.map +1 -1
- package/dist/output.js +31 -0
- package/dist/output.js.map +1 -1
- package/dist/usecases/direct.js +20 -1
- package/dist/usecases/direct.js.map +1 -1
- package/dist/usecases/parse.js +22 -5
- package/dist/usecases/parse.js.map +1 -1
- package/dist/usecases/script/actions.js +3 -7
- package/dist/usecases/script/actions.js.map +1 -1
- package/dist/usecases/script/episodes.js +16 -1
- package/dist/usecases/script/episodes.js.map +1 -1
- package/dist/usecases/script/lib.d.ts +1 -0
- package/dist/usecases/script/lib.js +43 -10
- package/dist/usecases/script/lib.js.map +1 -1
- package/dist/usecases/script/synopsis-generate.d.ts +116 -0
- package/dist/usecases/script/synopsis-generate.js +801 -0
- package/dist/usecases/script/synopsis-generate.js.map +1 -0
- package/dist/usecases/script/synopsis.d.ts +3 -0
- package/dist/usecases/script/synopsis.js +41 -0
- package/dist/usecases/script/synopsis.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { exists, readJson, sha256Text, writeJson, } from "../../common.js";
|
|
3
|
+
function keyPath(dir, key) {
|
|
4
|
+
const digest = sha256Text(key);
|
|
5
|
+
return path.join(dir, `${digest}.json`);
|
|
6
|
+
}
|
|
7
|
+
export function fileCheckpointer(dir) {
|
|
8
|
+
return {
|
|
9
|
+
read(key) {
|
|
10
|
+
const p = keyPath(dir, key);
|
|
11
|
+
if (!exists(p))
|
|
12
|
+
return null;
|
|
13
|
+
return readJson(p);
|
|
14
|
+
},
|
|
15
|
+
write(record) {
|
|
16
|
+
writeJson(keyPath(dir, record.key), record);
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function noopCheckpointer() {
|
|
21
|
+
return {
|
|
22
|
+
read() {
|
|
23
|
+
return null;
|
|
24
|
+
},
|
|
25
|
+
write() {
|
|
26
|
+
// intentionally empty
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=checkpointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpointer.js","sourceRoot":"","sources":["../../../src/domain/loom/checkpointer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,SAAS,GACV,MAAM,iBAAiB,CAAC;AAMzB,SAAS,OAAO,CAAC,GAAW,EAAE,GAAW;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO;QACL,IAAI,CAAc,GAAW;YAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC5B,OAAO,QAAQ,CAAsB,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAc,MAA2B;YAC5C,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK;YACH,sBAAsB;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ExtractTask, FnTask, LlmTask, LoomResult, LoomStep, ParcelNode, ReduceTask, RootNode, RunOptions, ScopeName, ScopeNode, SplitSpec } from "./types.js";
|
|
2
|
+
export { fileCheckpointer, noopCheckpointer, } from "./checkpointer.js";
|
|
3
|
+
export type { Checkpointer, CheckpointRecord, ExtractTask, FnTask, LlmTask, LoomReport, LoomResult, LoomTree, ModelRequest, ModelResponse, ParcelNode, ReduceTask, RootNode, RunOptions, ScopeName, ScopeNode, SplitSpec, TextModel, } from "./types.js";
|
|
4
|
+
export declare function root<TParcel>(children: Array<ScopeNode<unknown, TParcel> | ParcelNode<TParcel>>): RootNode<TParcel>;
|
|
5
|
+
export declare function group<TScope, TParcel>(scope: ScopeName, children: Array<ScopeNode<unknown, TParcel> | ParcelNode<TParcel>>, data: TScope): ScopeNode<TScope, TParcel>;
|
|
6
|
+
export declare function parcel<TParcel>(data: TParcel): ParcelNode<TParcel>;
|
|
7
|
+
export declare function llm<TInput, TOutput>(opts: {
|
|
8
|
+
version?: string;
|
|
9
|
+
instruction: string;
|
|
10
|
+
format: string;
|
|
11
|
+
input?: (ctx: {
|
|
12
|
+
parcel: TInput;
|
|
13
|
+
}) => string;
|
|
14
|
+
parse: (ctx: {
|
|
15
|
+
text: string;
|
|
16
|
+
parcel: TInput;
|
|
17
|
+
raw?: unknown;
|
|
18
|
+
}) => TOutput;
|
|
19
|
+
validate?: (output: TOutput) => void;
|
|
20
|
+
}): LlmTask<TInput, TOutput>;
|
|
21
|
+
export declare function fn<TInput, TOutput>(opts: {
|
|
22
|
+
version?: string;
|
|
23
|
+
run: (ctx: {
|
|
24
|
+
parcel: TInput;
|
|
25
|
+
}) => Promise<TOutput> | TOutput;
|
|
26
|
+
validate?: (output: TOutput) => void;
|
|
27
|
+
}): FnTask<TInput, TOutput>;
|
|
28
|
+
export declare class LoomJob<TInput, TCurrent> {
|
|
29
|
+
private readonly input;
|
|
30
|
+
private readonly steps;
|
|
31
|
+
constructor(input: TInput, steps?: LoomStep[]);
|
|
32
|
+
split<TScope, TParcel>(spec: SplitSpec<TInput, TScope, TParcel>): LoomJob<TInput, TParcel>;
|
|
33
|
+
extract<TOutput>(task: ExtractTask<TCurrent, TOutput>): LoomJob<TInput, TOutput>;
|
|
34
|
+
reduce<TOutput, TScope = unknown>(scope: ScopeName, task: ReduceTask<TCurrent, TOutput, TScope> | ((items: TCurrent[], ctx: {
|
|
35
|
+
scope: TScope | null;
|
|
36
|
+
scopeName: ScopeName;
|
|
37
|
+
}) => Promise<TOutput> | TOutput)): LoomJob<TInput, TOutput>;
|
|
38
|
+
plan(): {
|
|
39
|
+
input: TInput;
|
|
40
|
+
steps: LoomStep[];
|
|
41
|
+
};
|
|
42
|
+
run(opts?: RunOptions): Promise<LoomResult<TCurrent>>;
|
|
43
|
+
}
|
|
44
|
+
export declare function loom<TInput>(input: TInput): LoomJob<TInput, TInput>;
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { sha256Text } from "../../common.js";
|
|
2
|
+
import { noopCheckpointer, } from "./checkpointer.js";
|
|
3
|
+
export { fileCheckpointer, noopCheckpointer, } from "./checkpointer.js";
|
|
4
|
+
function stableStringify(value) {
|
|
5
|
+
if (Array.isArray(value))
|
|
6
|
+
return `[${value.map((v) => stableStringify(v)).join(",")}]`;
|
|
7
|
+
if (value && typeof value === "object") {
|
|
8
|
+
const obj = value;
|
|
9
|
+
return `{${Object.keys(obj).sort().map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(",")}}`;
|
|
10
|
+
}
|
|
11
|
+
return JSON.stringify(value);
|
|
12
|
+
}
|
|
13
|
+
function signature(value) {
|
|
14
|
+
return sha256Text(stableStringify(value));
|
|
15
|
+
}
|
|
16
|
+
function checkpointRecord(key, sig, value) {
|
|
17
|
+
return {
|
|
18
|
+
key,
|
|
19
|
+
signature: sig,
|
|
20
|
+
value,
|
|
21
|
+
createdAt: new Date().toISOString(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function joinPrompt(instruction, format) {
|
|
25
|
+
return [instruction.trim(), format.trim()].filter(Boolean).join("\n\n");
|
|
26
|
+
}
|
|
27
|
+
function renderLlmRequest(task, parcelValue) {
|
|
28
|
+
return {
|
|
29
|
+
system: joinPrompt(task.instruction, task.format),
|
|
30
|
+
user: task.input ? task.input({ parcel: parcelValue }) : String(parcelValue),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function extractCheckpointPayload(task, parcelValue, runtime) {
|
|
34
|
+
if (task.kind === "llm") {
|
|
35
|
+
const request = renderLlmRequest(task, parcelValue);
|
|
36
|
+
return {
|
|
37
|
+
request,
|
|
38
|
+
payload: {
|
|
39
|
+
step: "extract",
|
|
40
|
+
kind: "llm",
|
|
41
|
+
version: task.version ?? "",
|
|
42
|
+
system: request.system,
|
|
43
|
+
user: request.user,
|
|
44
|
+
salt: runtime.checkpointSalt,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
payload: {
|
|
50
|
+
step: "extract",
|
|
51
|
+
kind: "fn",
|
|
52
|
+
version: task.version ?? "",
|
|
53
|
+
parcel: parcelValue,
|
|
54
|
+
salt: runtime.checkpointSalt,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function root(children) {
|
|
59
|
+
return { kind: "root", children };
|
|
60
|
+
}
|
|
61
|
+
export function group(scope, children, data) {
|
|
62
|
+
return { kind: "scope", scope, data, children };
|
|
63
|
+
}
|
|
64
|
+
export function parcel(data) {
|
|
65
|
+
return { kind: "parcel", data };
|
|
66
|
+
}
|
|
67
|
+
export function llm(opts) {
|
|
68
|
+
return { kind: "llm", ...opts };
|
|
69
|
+
}
|
|
70
|
+
export function fn(opts) {
|
|
71
|
+
return { kind: "fn", ...opts };
|
|
72
|
+
}
|
|
73
|
+
export class LoomJob {
|
|
74
|
+
input;
|
|
75
|
+
steps;
|
|
76
|
+
constructor(input, steps = []) {
|
|
77
|
+
this.input = input;
|
|
78
|
+
this.steps = steps;
|
|
79
|
+
}
|
|
80
|
+
split(spec) {
|
|
81
|
+
return new LoomJob(this.input, [...this.steps, { kind: "split", spec: spec }]);
|
|
82
|
+
}
|
|
83
|
+
extract(task) {
|
|
84
|
+
return new LoomJob(this.input, [...this.steps, { kind: "extract", task: task }]);
|
|
85
|
+
}
|
|
86
|
+
reduce(scope, task) {
|
|
87
|
+
const normalized = typeof task === "function" ? { run: task } : task;
|
|
88
|
+
return new LoomJob(this.input, [
|
|
89
|
+
...this.steps,
|
|
90
|
+
{ kind: "reduce", scope, task: normalized },
|
|
91
|
+
]);
|
|
92
|
+
}
|
|
93
|
+
plan() {
|
|
94
|
+
return { input: this.input, steps: [...this.steps] };
|
|
95
|
+
}
|
|
96
|
+
async run(opts = {}) {
|
|
97
|
+
const result = await executePlan(this.input, this.steps, opts);
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export function loom(input) {
|
|
102
|
+
return new LoomJob(input);
|
|
103
|
+
}
|
|
104
|
+
async function mapWithConcurrency(items, concurrency, worker) {
|
|
105
|
+
if (items.length === 0)
|
|
106
|
+
return [];
|
|
107
|
+
const out = new Array(items.length);
|
|
108
|
+
let cursor = 0;
|
|
109
|
+
const limit = Math.max(1, Math.min(concurrency, items.length));
|
|
110
|
+
await Promise.all(Array.from({ length: limit }, async () => {
|
|
111
|
+
while (true) {
|
|
112
|
+
const idx = cursor++;
|
|
113
|
+
if (idx >= items.length)
|
|
114
|
+
break;
|
|
115
|
+
out[idx] = await worker(items[idx], idx);
|
|
116
|
+
}
|
|
117
|
+
}));
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
function splitTree(input, spec) {
|
|
121
|
+
const scopes = spec.partition(input);
|
|
122
|
+
return root(scopes.map((scopeData) => {
|
|
123
|
+
const chunks = spec.chunk(scopeData).map((chunk) => parcel(chunk));
|
|
124
|
+
return group(spec.scope, chunks, scopeData);
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
function flattenParcels(node, path = []) {
|
|
128
|
+
if (node.kind === "parcel")
|
|
129
|
+
return [{ parcel: node.data, path }];
|
|
130
|
+
const children = node.kind === "root" ? node.children : node.children;
|
|
131
|
+
const out = [];
|
|
132
|
+
for (let i = 0; i < children.length; i++) {
|
|
133
|
+
const child = children[i];
|
|
134
|
+
const childPath = child.kind === "scope"
|
|
135
|
+
? [...path, `${child.scope}:${i}`]
|
|
136
|
+
: [...path, `parcel:${i}`];
|
|
137
|
+
out.push(...flattenParcels(child, childPath));
|
|
138
|
+
}
|
|
139
|
+
return out;
|
|
140
|
+
}
|
|
141
|
+
function validateOutput(validate, output) {
|
|
142
|
+
validate?.(output);
|
|
143
|
+
return output;
|
|
144
|
+
}
|
|
145
|
+
async function runFnExtractTask(task, parcelValue) {
|
|
146
|
+
return validateOutput(task.validate, await task.run({ parcel: parcelValue }));
|
|
147
|
+
}
|
|
148
|
+
async function runLlmModel(request, runtime) {
|
|
149
|
+
if (!runtime.model)
|
|
150
|
+
throw new Error("loom llm task requires run({ model })");
|
|
151
|
+
return runtime.model({
|
|
152
|
+
system: request.system,
|
|
153
|
+
user: request.user,
|
|
154
|
+
signal: runtime.signal,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function parseLlmResponse(task, parcelValue, response) {
|
|
158
|
+
return validateOutput(task.validate, task.parse({ text: response.text, parcel: parcelValue, raw: response.raw }));
|
|
159
|
+
}
|
|
160
|
+
function replaceParcels(node, values, cursor) {
|
|
161
|
+
if (node.kind === "parcel") {
|
|
162
|
+
const value = values[cursor.index];
|
|
163
|
+
cursor.index += 1;
|
|
164
|
+
return parcel(value);
|
|
165
|
+
}
|
|
166
|
+
const children = node.children.map((child) => replaceParcels(child, values, cursor));
|
|
167
|
+
if (node.kind === "root")
|
|
168
|
+
return root(children);
|
|
169
|
+
return group(node.scope, children, node.data);
|
|
170
|
+
}
|
|
171
|
+
function allChildrenParcels(node) {
|
|
172
|
+
return node.children.every((child) => child.kind === "parcel");
|
|
173
|
+
}
|
|
174
|
+
async function reduceScopeNode(node, scope, task, runtime, path) {
|
|
175
|
+
if (node.kind === "parcel")
|
|
176
|
+
return node;
|
|
177
|
+
const reducedChildren = [];
|
|
178
|
+
for (let i = 0; i < node.children.length; i++) {
|
|
179
|
+
const child = node.children[i];
|
|
180
|
+
reducedChildren.push(await reduceScopeNode(child, scope, task, runtime, [...path, `${child.kind}:${i}`]));
|
|
181
|
+
}
|
|
182
|
+
const rebuilt = node.kind === "root" ? root(reducedChildren) : group(node.scope, reducedChildren, node.data);
|
|
183
|
+
const isTargetRoot = scope === "root" && rebuilt.kind === "root";
|
|
184
|
+
const isTargetScope = rebuilt.kind === "scope" && rebuilt.scope === scope;
|
|
185
|
+
if (!isTargetRoot && !isTargetScope)
|
|
186
|
+
return rebuilt;
|
|
187
|
+
if (!allChildrenParcels(rebuilt))
|
|
188
|
+
return rebuilt;
|
|
189
|
+
const items = rebuilt.children.map((child) => child.data);
|
|
190
|
+
const scopeData = rebuilt.kind === "scope" ? rebuilt.data : null;
|
|
191
|
+
const scopeName = rebuilt.kind === "scope" ? rebuilt.scope : "root";
|
|
192
|
+
const version = task.version ?? "";
|
|
193
|
+
const key = `reduce:${scope}:${path.join("/")}:${signature({ items, scopeData, version, salt: runtime.checkpointSalt })}`;
|
|
194
|
+
const sig = signature({ step: "reduce", scope, version, items, scopeData, salt: runtime.checkpointSalt });
|
|
195
|
+
const cached = await readCheckpoint(runtime.checkpoint, key, sig);
|
|
196
|
+
if (cached.hit) {
|
|
197
|
+
runtime.report.reused += 1;
|
|
198
|
+
return parcel(validateOutput(task.validate, cached.value));
|
|
199
|
+
}
|
|
200
|
+
const out = validateOutput(task.validate, await task.run(items, { scope: scopeData, scopeName }));
|
|
201
|
+
runtime.report.ran += 1;
|
|
202
|
+
await runtime.checkpoint.write(checkpointRecord(key, sig, out));
|
|
203
|
+
return parcel(out);
|
|
204
|
+
}
|
|
205
|
+
async function readCheckpoint(checkpoint, key, sig) {
|
|
206
|
+
const record = await checkpoint.read(key);
|
|
207
|
+
if (record && record.signature === sig)
|
|
208
|
+
return { hit: true, value: record.value };
|
|
209
|
+
return { hit: false };
|
|
210
|
+
}
|
|
211
|
+
async function executePlan(input, steps, opts) {
|
|
212
|
+
const runtime = {
|
|
213
|
+
model: opts.model,
|
|
214
|
+
signal: opts.signal,
|
|
215
|
+
checkpointSalt: opts.checkpointSalt,
|
|
216
|
+
checkpoint: opts.checkpoint ?? noopCheckpointer(),
|
|
217
|
+
concurrency: opts.concurrency ?? 4,
|
|
218
|
+
report: { reused: 0, ran: 0 },
|
|
219
|
+
};
|
|
220
|
+
let tree = null;
|
|
221
|
+
let currentInput = input;
|
|
222
|
+
for (const step of steps) {
|
|
223
|
+
if (step.kind === "split") {
|
|
224
|
+
tree = splitTree(currentInput, step.spec);
|
|
225
|
+
currentInput = tree;
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (!tree) {
|
|
229
|
+
tree = root([parcel(currentInput)]);
|
|
230
|
+
}
|
|
231
|
+
if (step.kind === "extract") {
|
|
232
|
+
const leaves = flattenParcels(tree);
|
|
233
|
+
const values = await mapWithConcurrency(leaves, runtime.concurrency, async (leaf) => {
|
|
234
|
+
const checkpoint = extractCheckpointPayload(step.task, leaf.parcel, runtime);
|
|
235
|
+
const sig = signature(checkpoint.payload);
|
|
236
|
+
const key = `extract:${leaf.path.join("/")}:${sig}`;
|
|
237
|
+
if (step.task.kind === "llm") {
|
|
238
|
+
const cached = await readCheckpoint(runtime.checkpoint, key, sig);
|
|
239
|
+
if (cached.hit) {
|
|
240
|
+
runtime.report.reused += 1;
|
|
241
|
+
return parseLlmResponse(step.task, leaf.parcel, cached.value);
|
|
242
|
+
}
|
|
243
|
+
const request = checkpoint.request ?? renderLlmRequest(step.task, leaf.parcel);
|
|
244
|
+
const response = await runLlmModel(request, runtime);
|
|
245
|
+
const value = parseLlmResponse(step.task, leaf.parcel, response);
|
|
246
|
+
runtime.report.ran += 1;
|
|
247
|
+
await runtime.checkpoint.write(checkpointRecord(key, sig, response));
|
|
248
|
+
return value;
|
|
249
|
+
}
|
|
250
|
+
const cached = await readCheckpoint(runtime.checkpoint, key, sig);
|
|
251
|
+
if (cached.hit) {
|
|
252
|
+
runtime.report.reused += 1;
|
|
253
|
+
return validateOutput(step.task.validate, cached.value);
|
|
254
|
+
}
|
|
255
|
+
const value = await runFnExtractTask(step.task, leaf.parcel);
|
|
256
|
+
runtime.report.ran += 1;
|
|
257
|
+
await runtime.checkpoint.write(checkpointRecord(key, sig, value));
|
|
258
|
+
return value;
|
|
259
|
+
});
|
|
260
|
+
tree = replaceParcels(tree, values, { index: 0 });
|
|
261
|
+
currentInput = tree;
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
tree = await reduceScopeNode(tree, step.scope, step.task, runtime, []);
|
|
265
|
+
currentInput = tree;
|
|
266
|
+
}
|
|
267
|
+
if (!tree)
|
|
268
|
+
return { value: currentInput, report: runtime.report };
|
|
269
|
+
const leaves = flattenParcels(tree);
|
|
270
|
+
if (leaves.length !== 1) {
|
|
271
|
+
throw new Error(`loom plan ended with ${leaves.length} result(s); reduce to root before run completes`);
|
|
272
|
+
}
|
|
273
|
+
return { value: leaves[0].parcel, report: runtime.report };
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/loom/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export type ScopeName = string;
|
|
2
|
+
export interface ModelRequest {
|
|
3
|
+
system: string;
|
|
4
|
+
user: string;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
metadata?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface ModelResponse {
|
|
9
|
+
text: string;
|
|
10
|
+
raw?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export type TextModel = (request: ModelRequest) => Promise<ModelResponse> | ModelResponse;
|
|
13
|
+
export interface ScopeNode<TScope, TParcel> {
|
|
14
|
+
kind: "scope";
|
|
15
|
+
scope: ScopeName;
|
|
16
|
+
data: TScope;
|
|
17
|
+
children: Array<ScopeNode<unknown, TParcel> | ParcelNode<TParcel>>;
|
|
18
|
+
}
|
|
19
|
+
export interface ParcelNode<TParcel> {
|
|
20
|
+
kind: "parcel";
|
|
21
|
+
data: TParcel;
|
|
22
|
+
}
|
|
23
|
+
export interface RootNode<TParcel> {
|
|
24
|
+
kind: "root";
|
|
25
|
+
children: Array<ScopeNode<unknown, TParcel> | ParcelNode<TParcel>>;
|
|
26
|
+
}
|
|
27
|
+
export type LoomTree<TParcel> = RootNode<TParcel>;
|
|
28
|
+
export interface LlmTask<TInput, TOutput> {
|
|
29
|
+
kind: "llm";
|
|
30
|
+
version?: string;
|
|
31
|
+
instruction: string;
|
|
32
|
+
format: string;
|
|
33
|
+
input?: (ctx: {
|
|
34
|
+
parcel: TInput;
|
|
35
|
+
}) => string;
|
|
36
|
+
parse: (ctx: {
|
|
37
|
+
text: string;
|
|
38
|
+
parcel: TInput;
|
|
39
|
+
raw?: unknown;
|
|
40
|
+
}) => TOutput;
|
|
41
|
+
validate?: (output: TOutput) => void;
|
|
42
|
+
}
|
|
43
|
+
export interface FnTask<TInput, TOutput> {
|
|
44
|
+
kind: "fn";
|
|
45
|
+
version?: string;
|
|
46
|
+
run: (ctx: {
|
|
47
|
+
parcel: TInput;
|
|
48
|
+
}) => Promise<TOutput> | TOutput;
|
|
49
|
+
validate?: (output: TOutput) => void;
|
|
50
|
+
}
|
|
51
|
+
export type ExtractTask<TInput, TOutput> = LlmTask<TInput, TOutput> | FnTask<TInput, TOutput>;
|
|
52
|
+
export interface ReduceTask<TInput, TOutput, TScope = unknown> {
|
|
53
|
+
version?: string;
|
|
54
|
+
run: (items: TInput[], ctx: {
|
|
55
|
+
scope: TScope | null;
|
|
56
|
+
scopeName: ScopeName;
|
|
57
|
+
}) => Promise<TOutput> | TOutput;
|
|
58
|
+
validate?: (output: TOutput) => void;
|
|
59
|
+
}
|
|
60
|
+
export interface SplitSpec<TInput, TScope, TParcel> {
|
|
61
|
+
scope: ScopeName;
|
|
62
|
+
partition: (input: TInput) => TScope[];
|
|
63
|
+
chunk: (scope: TScope) => TParcel[];
|
|
64
|
+
}
|
|
65
|
+
export type LoomStep = {
|
|
66
|
+
kind: "split";
|
|
67
|
+
spec: SplitSpec<unknown, unknown, unknown>;
|
|
68
|
+
} | {
|
|
69
|
+
kind: "extract";
|
|
70
|
+
task: ExtractTask<unknown, unknown>;
|
|
71
|
+
} | {
|
|
72
|
+
kind: "reduce";
|
|
73
|
+
scope: ScopeName;
|
|
74
|
+
task: ReduceTask<unknown, unknown, unknown>;
|
|
75
|
+
};
|
|
76
|
+
export interface CheckpointRecord<T = unknown> {
|
|
77
|
+
key: string;
|
|
78
|
+
signature: string;
|
|
79
|
+
value: T;
|
|
80
|
+
createdAt: string;
|
|
81
|
+
}
|
|
82
|
+
export interface Checkpointer {
|
|
83
|
+
read<T = unknown>(key: string): Promise<CheckpointRecord<T> | null> | CheckpointRecord<T> | null;
|
|
84
|
+
write<T = unknown>(record: CheckpointRecord<T>): Promise<void> | void;
|
|
85
|
+
}
|
|
86
|
+
export interface RunOptions {
|
|
87
|
+
model?: TextModel;
|
|
88
|
+
concurrency?: number;
|
|
89
|
+
checkpoint?: Checkpointer;
|
|
90
|
+
checkpointSalt?: unknown;
|
|
91
|
+
signal?: AbortSignal;
|
|
92
|
+
}
|
|
93
|
+
export interface LoomReport {
|
|
94
|
+
reused: number;
|
|
95
|
+
ran: number;
|
|
96
|
+
}
|
|
97
|
+
export interface LoomResult<T> {
|
|
98
|
+
value: T;
|
|
99
|
+
report: LoomReport;
|
|
100
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/domain/loom/types.ts"],"names":[],"mappings":""}
|
|
@@ -19,7 +19,7 @@ export function applyPatchOperations(script, sourceText, operations, opts = {})
|
|
|
19
19
|
if (!handler) {
|
|
20
20
|
throw opErr("PATCH BLOCKED: Unsupported operation", "Unsupported patch operation.", {
|
|
21
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 / extend.{set,clear}",
|
|
22
|
+
"dot-style op: meta.{worldview,synopsis}.set / episode.{add,synopsis.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 / extend.{set,clear}",
|
|
23
23
|
],
|
|
24
24
|
received: [kind],
|
|
25
25
|
nextSteps: [
|
|
@@ -1 +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,
|
|
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,geAAge;iBACje;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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { OpCtx } from "./types.js";
|
|
2
2
|
export declare function op_episode_add(__ctx: OpCtx): void;
|
|
3
|
+
export declare function op_episode_synopsis_set(__ctx: OpCtx): void;
|
|
3
4
|
export declare function op_meta_worldview_set(__ctx: OpCtx): void;
|
|
5
|
+
export declare function op_meta_synopsis_set(__ctx: OpCtx): void;
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import { WORLDVIEW_VALUES, } from "../../../common.js";
|
|
2
2
|
import { isList, opErr, strOf } from "../shared.js";
|
|
3
|
-
import { nextEpisodeId, } from "../lookups.js";
|
|
3
|
+
import { findEpisode, nextEpisodeId, } from "../lookups.js";
|
|
4
|
+
function requiredSynopsis(op, kind) {
|
|
5
|
+
const raw = "synopsis" in op ? op["synopsis"] : op["value"];
|
|
6
|
+
const synopsis = strOf(raw).trim();
|
|
7
|
+
if (!synopsis) {
|
|
8
|
+
throw opErr("SCRIPT OP BLOCKED: Synopsis missing", "Synopsis missing.", {
|
|
9
|
+
required: ["synopsis: non-empty text"],
|
|
10
|
+
received: ["<empty>"],
|
|
11
|
+
nextSteps: ["Pass a non-empty synopsis field."],
|
|
12
|
+
op: kind,
|
|
13
|
+
errorCode: "SYNOPSIS_MISSING",
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return synopsis;
|
|
17
|
+
}
|
|
4
18
|
export function op_episode_add(__ctx) {
|
|
5
19
|
const { script, op, sourceText, applied, kind } = __ctx;
|
|
6
20
|
// Append an empty episode. Scenes/actions are added afterwards with
|
|
@@ -26,6 +40,22 @@ export function op_episode_add(__ctx) {
|
|
|
26
40
|
eps.push({ episode_id: epId, title: strOf(op["title"]).trim(), scenes: [] });
|
|
27
41
|
applied.push(kind);
|
|
28
42
|
}
|
|
43
|
+
export function op_episode_synopsis_set(__ctx) {
|
|
44
|
+
const { script, op, sourceText, applied, kind } = __ctx;
|
|
45
|
+
const episodeId = strOf(op["episode_id"] ?? op["target"] ?? op["at"]).trim();
|
|
46
|
+
if (!episodeId) {
|
|
47
|
+
throw opErr("SCRIPT OP BLOCKED: Episode id missing", "Episode id missing.", {
|
|
48
|
+
required: ["episode_id: ep_NNN"],
|
|
49
|
+
received: ["<empty>"],
|
|
50
|
+
nextSteps: ["Pass the episode id whose synopsis should be updated."],
|
|
51
|
+
op: kind,
|
|
52
|
+
errorCode: "EPISODE_ID_MISSING",
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const episode = findEpisode(script, episodeId);
|
|
56
|
+
episode["synopsis"] = requiredSynopsis(op, kind);
|
|
57
|
+
applied.push(kind);
|
|
58
|
+
}
|
|
29
59
|
export function op_meta_worldview_set(__ctx) {
|
|
30
60
|
const { script, op, sourceText, applied, kind } = __ctx;
|
|
31
61
|
// 0.6.0 dot-style equivalent of the legacy `set_worldview` op.
|
|
@@ -44,4 +74,9 @@ export function op_meta_worldview_set(__ctx) {
|
|
|
44
74
|
script["worldview_raw"] = strOf(op["worldview_raw"]).trim();
|
|
45
75
|
applied.push(kind);
|
|
46
76
|
}
|
|
77
|
+
export function op_meta_synopsis_set(__ctx) {
|
|
78
|
+
const { script, op, sourceText, applied, kind } = __ctx;
|
|
79
|
+
script["synopsis"] = requiredSynopsis(op, kind);
|
|
80
|
+
applied.push(kind);
|
|
81
|
+
}
|
|
47
82
|
//# sourceMappingURL=ops-meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops-meta.js","sourceRoot":"","sources":["../../../../src/domain/script/patch/ops-meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAGsC,gBAAgB,GAE5D,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAoC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,
|
|
1
|
+
{"version":3,"file":"ops-meta.js","sourceRoot":"","sources":["../../../../src/domain/script/patch/ops-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { op_action_state_change, op_action_state_remove, op_action_transition_set, op_action_transition_clear, op_action_content_replace, op_action_content_regex_replace, op_action_type_set, op_action_actor_set, op_action_delete, op_action_insert, op_action_move } from "./ops-action.js";
|
|
2
2
|
import { op_actor_add, op_location_add, op_prop_add, op_asset_role_set, op_asset_rename, op_asset_describe, op_asset_alias_set, op_asset_alias_add, op_asset_alias_remove, op_asset_states_set, op_asset_merge, op_asset_delete } from "./ops-asset.js";
|
|
3
3
|
import { op_speaker_add, op_dialogue_speakers, op_dialogue_overlap, op_speaker_delete } from "./ops-dialogue.js";
|
|
4
|
-
import { op_episode_add, op_meta_worldview_set } from "./ops-meta.js";
|
|
4
|
+
import { op_episode_add, op_episode_synopsis_set, op_meta_worldview_set, op_meta_synopsis_set } from "./ops-meta.js";
|
|
5
5
|
import { op_scene_insert, op_scene_split, op_scene_merge, op_scene_delete, op_scene_move } from "./ops-scene.js";
|
|
6
6
|
import { op_state_add, op_state_rename, op_state_describe, op_state_delete, op_context_set, op_context_clear, op_context_ref_remove } from "./ops-state.js";
|
|
7
7
|
import { op_extend_set, op_extend_clear } from "./ops-extend.js";
|
|
@@ -25,7 +25,9 @@ export const OP_REGISTRY = {
|
|
|
25
25
|
"location.add": op_location_add,
|
|
26
26
|
"prop.add": op_prop_add,
|
|
27
27
|
"episode.add": op_episode_add,
|
|
28
|
+
"episode.synopsis.set": op_episode_synopsis_set,
|
|
28
29
|
"meta.worldview.set": op_meta_worldview_set,
|
|
30
|
+
"meta.synopsis.set": op_meta_synopsis_set,
|
|
29
31
|
"asset.role.set": op_asset_role_set,
|
|
30
32
|
"asset.rename": op_asset_rename,
|
|
31
33
|
"asset.describe": op_asset_describe,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/domain/script/patch/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAC,sBAAsB,EAAC,wBAAwB,EAAC,0BAA0B,EAAC,yBAAyB,EAAC,+BAA+B,EAAC,kBAAkB,EAAC,mBAAmB,EAAC,gBAAgB,EAAC,gBAAgB,EAAC,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtR,OAAO,EAAE,YAAY,EAAC,eAAe,EAAC,WAAW,EAAC,iBAAiB,EAAC,eAAe,EAAC,iBAAiB,EAAC,kBAAkB,EAAC,kBAAkB,EAAC,qBAAqB,EAAC,mBAAmB,EAAC,cAAc,EAAC,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7O,OAAO,EAAE,cAAc,EAAC,oBAAoB,EAAC,mBAAmB,EAAC,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAC,qBAAqB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/domain/script/patch/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAC,sBAAsB,EAAC,wBAAwB,EAAC,0BAA0B,EAAC,yBAAyB,EAAC,+BAA+B,EAAC,kBAAkB,EAAC,mBAAmB,EAAC,gBAAgB,EAAC,gBAAgB,EAAC,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtR,OAAO,EAAE,YAAY,EAAC,eAAe,EAAC,WAAW,EAAC,iBAAiB,EAAC,eAAe,EAAC,iBAAiB,EAAC,kBAAkB,EAAC,kBAAkB,EAAC,qBAAqB,EAAC,mBAAmB,EAAC,cAAc,EAAC,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7O,OAAO,EAAE,cAAc,EAAC,oBAAoB,EAAC,mBAAmB,EAAC,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAC,uBAAuB,EAAC,qBAAqB,EAAC,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAClH,OAAO,EAAE,eAAe,EAAC,cAAc,EAAC,cAAc,EAAC,eAAe,EAAC,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAC,eAAe,EAAC,iBAAiB,EAAC,eAAe,EAAC,cAAc,EAAC,gBAAgB,EAAC,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACtJ,OAAO,EAAE,aAAa,EAAC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,WAAW,EAAE,YAAY;IACzB,cAAc,EAAE,eAAe;IAC/B,gBAAgB,EAAE,iBAAiB;IACnC,cAAc,EAAE,eAAe;IAC/B,aAAa,EAAE,cAAc;IAC7B,eAAe,EAAE,gBAAgB;IACjC,qBAAqB,EAAE,sBAAsB;IAC7C,qBAAqB,EAAE,sBAAsB;IAC7C,uBAAuB,EAAE,wBAAwB;IACjD,yBAAyB,EAAE,0BAA0B;IACrD,wBAAwB,EAAE,yBAAyB;IACnD,8BAA8B,EAAE,+BAA+B;IAC/D,aAAa,EAAE,cAAc;IAC7B,mBAAmB,EAAE,oBAAoB;IACzC,kBAAkB,EAAE,mBAAmB;IACvC,WAAW,EAAE,YAAY;IACzB,cAAc,EAAE,eAAe;IAC/B,UAAU,EAAE,WAAW;IACvB,aAAa,EAAE,cAAc;IAC7B,sBAAsB,EAAE,uBAAuB;IAC/C,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,gBAAgB,EAAE,iBAAiB;IACnC,cAAc,EAAE,eAAe;IAC/B,gBAAgB,EAAE,iBAAiB;IACnC,iBAAiB,EAAE,kBAAkB;IACrC,iBAAiB,EAAE,kBAAkB;IACrC,oBAAoB,EAAE,qBAAqB;IAC3C,kBAAkB,EAAE,mBAAmB;IACvC,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,eAAe;IAC/B,iBAAiB,EAAE,kBAAkB;IACrC,kBAAkB,EAAE,mBAAmB;IACvC,eAAe,EAAE,gBAAgB;IACjC,eAAe,EAAE,gBAAgB;IACjC,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,eAAe;IAC/B,aAAa,EAAE,cAAc;IAC7B,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,eAAe;IAC/B,YAAY,EAAE,aAAa;IAC3B,gBAAgB,EAAE,iBAAiB;IACnC,oBAAoB,EAAE,qBAAqB;IAC3C,YAAY,EAAE,aAAa;IAC3B,cAAc,EAAE,eAAe;CAChC,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
export const PATCH_OP_SCHEMA = {
|
|
4
4
|
// meta
|
|
5
5
|
"meta.worldview.set": { required: ["worldview"], optional: ["worldview_raw"], description: "Set the script.worldview enum." },
|
|
6
|
+
"meta.synopsis.set": { required: ["synopsis"], optional: [], description: "Set the whole-script synopsis." },
|
|
6
7
|
// state
|
|
7
8
|
"state.add": { required: ["target", "name"], optional: ["description", "state_id"], description: "Add a state to an asset's states[]." },
|
|
8
9
|
"state.rename": { required: ["target", "name"], optional: [], description: "Rename an asset state." },
|
|
@@ -13,6 +14,7 @@ export const PATCH_OP_SCHEMA = {
|
|
|
13
14
|
"location.add": { required: ["name"], optional: ["location_id", "description"], description: "Register a new location." },
|
|
14
15
|
"prop.add": { required: ["name"], optional: ["prop_id", "description"], description: "Register a new prop." },
|
|
15
16
|
"episode.add": { required: [], optional: ["episode_id", "title"], description: "Append a new empty episode (no scenes)." },
|
|
17
|
+
"episode.synopsis.set": { required: ["episode_id", "synopsis"], optional: [], description: "Set one episode's synopsis." },
|
|
16
18
|
"asset.rename": { required: ["target", "name"], optional: [], description: "Rename an asset (actor / location / prop)." },
|
|
17
19
|
"asset.describe": { required: ["target", "description"], optional: [], description: "Set asset description." },
|
|
18
20
|
"asset.alias.set": { required: ["target", "aliases"], optional: [], description: "Bulk replace aliases[]." },
|